()
| 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 |
nothing calls this directly
no test coverage detected