refactored heavily
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# GNSS Lese-Thread
|
||||
# ---------------------------------------------------------------------------
|
||||
import socket
|
||||
|
||||
import serial
|
||||
from PyQt5.QtCore import QThread, pyqtSignal
|
||||
|
||||
from ubx import UbxPacketizer, build_poll, UBX_CLASS_NAV, UBX_ID_NAV_SAT, extract_satellites
|
||||
|
||||
class GnssReader(QThread):
|
||||
satellites_updated = pyqtSignal(list)
|
||||
error_occurred = pyqtSignal(str)
|
||||
connected = pyqtSignal(str)
|
||||
|
||||
def __init__(self, transport_factory):
|
||||
super().__init__()
|
||||
self._factory = transport_factory
|
||||
self._running = False
|
||||
self._transport = None
|
||||
self.packetizer = UbxPacketizer()
|
||||
|
||||
def run(self):
|
||||
self._running = True
|
||||
buf = b""
|
||||
try:
|
||||
self._transport = self._factory()
|
||||
self.connected.emit("Verbunden")
|
||||
poll_msg = build_poll(UBX_CLASS_NAV, UBX_ID_NAV_SAT)
|
||||
self._transport.write(poll_msg)
|
||||
|
||||
while self._running:
|
||||
chunk = self._transport.read(512)
|
||||
frames = self.packetizer.on_recv(chunk)
|
||||
sats = extract_satellites(frames)
|
||||
if sats:
|
||||
self.satellites_updated.emit(sats)
|
||||
else:
|
||||
# Kein Datum – erneut pollen
|
||||
self._transport.write(poll_msg)
|
||||
|
||||
except (serial.SerialException, OSError, ConnectionRefusedError,
|
||||
socket.timeout, socket.gaierror) as exc:
|
||||
self.error_occurred.emit(str(exc))
|
||||
finally:
|
||||
if self._transport:
|
||||
self._transport.close()
|
||||
|
||||
def stop(self):
|
||||
self._running = False
|
||||
self.wait(3000)
|
||||
Reference in New Issue
Block a user