MCPcopy
hub / github.com/dronekit/dronekit-python / mavlink_thread_in

Method mavlink_thread_in

dronekit/mavlink.py:202–253  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

200 self.out_queue = Queue()
201
202 def mavlink_thread_in():
203 # Huge try catch in case we see http://bugs.python.org/issue1856
204 try:
205 while self._alive:
206 # Downtime
207 time.sleep(0.05)
208
209 # Loop listeners.
210 for fn in self.loop_listeners:
211 fn(self)
212
213 while self._accept_input:
214 try:
215 msg = self.master.recv_msg()
216 except socket.error as error:
217 # If connection reset (closed), stop polling.
218 if error.errno == ECONNABORTED:
219 raise APIException('Connection aborting during send')
220 raise
221 except Exception as e:
222 # TODO this should be more rigorous. How to avoid
223 # invalid MAVLink prefix '73'
224 # invalid MAVLink prefix '13'
225 # errprinter('mav recv error:', e)
226 msg = None
227 if not msg:
228 break
229
230 # Message listeners.
231 for fn in self.message_listeners:
232 try:
233 fn(self, msg)
234 except Exception as e:
235 errprinter('>>> Exception in message handler for %s' %
236 msg.get_type())
237 errprinter('>>> ' + str(e))
238
239 except APIException as e:
240 errprinter('>>> ' + str(e.message))
241 self._alive = False
242 self.master.close()
243 self._death_error = e
244 return
245
246 except Exception as e:
247 # http://bugs.python.org/issue1856
248 if not self._alive:
249 pass
250 else:
251 self._alive = False
252 self.master.close()
253 self._death_error = e
254
255 t = Thread(target=mavlink_thread_in)
256 t.daemon = True

Callers

nothing calls this directly

Calls 4

APIExceptionClass · 0.90
errprinterFunction · 0.90
recv_msgMethod · 0.80
closeMethod · 0.45

Tested by

no test coverage detected