From 7ce91a34dc37f129603ef99245a0b465a7762139 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 15 Mar 2026 15:03:23 +0100 Subject: [PATCH] refactored --- msg_receiver.py | 4 +++- network_backend.py | 19 +++++++++++-------- nmea/GGA.py | 11 +++++++++++ nmea/GLL.py | 36 ++++++++++++++++++++++++++++++++++++ nmea/receiver.py | 9 +++++++++ 5 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 nmea/GGA.py create mode 100644 nmea/GLL.py create mode 100644 nmea/receiver.py diff --git a/msg_receiver.py b/msg_receiver.py index 2951f1e..82cef43 100644 --- a/msg_receiver.py +++ b/msg_receiver.py @@ -9,11 +9,13 @@ class MsgReceiver(MsgSink): self.filter = filter def is_msg(self, msg: MsgContainer): + res = False try: data = msg.data.decode(encoding="utf-8") - return re.match(self.filter, data) + res = re.match(self.filter, data) is not None except UnicodeDecodeError: pass + return res def on_recv(self, msg: MsgContainer): print(f"{self.name}: {msg}") diff --git a/network_backend.py b/network_backend.py index 7136459..11a9c65 100644 --- a/network_backend.py +++ b/network_backend.py @@ -6,7 +6,7 @@ from msg_container import MsgContainer from packetizer import Packetizer from transceiver import Transceiver from a_backend import ABackend -from msg_receiver import MsgReceiver +from nmea.GLL import Gll class NetworkBackend(ABackend): def __init__(self, servers: list[dict]): @@ -98,14 +98,17 @@ if __name__ == "__main__": xcvr_1.register_recv(packetizer_0) xcvr_2.register_recv(packetizer_1) - rx_1 = MsgReceiver('Rx1', '^.?GPGSV.*') - rx_2 = MsgReceiver('Rx2', '^.?GNGLL.*') - +# rx_1 = MsgReceiver('Rx1', '^.?GPGSV.*') +# rx_2 = MsgReceiver('Rx2', '^.?GNGLL.*') +# rx_3 = Gga('Rx3', 'GP') + rx_4 = Gll('Rx4', '--') # Register all Rx to all sources - packetizer_0.register_recv(rx_1) - packetizer_0.register_recv(rx_2) - packetizer_1.register_recv(rx_1) - packetizer_1.register_recv(rx_2) +# packetizer_0.register_recv(rx_1) +# packetizer_0.register_recv(rx_2) +# packetizer_1.register_recv(rx_1) +# packetizer_1.register_recv(rx_2) + packetizer_0.register_recv(rx_4) + packetizer_1.register_recv(rx_4) # Connect all sources mc.connect() diff --git a/nmea/GGA.py b/nmea/GGA.py new file mode 100644 index 0000000..76976d4 --- /dev/null +++ b/nmea/GGA.py @@ -0,0 +1,11 @@ +from msg_container import MsgContainer +from receiver import Nmea + + +class Gga(Nmea): + def __init__(self, name: str, tid: str): + Nmea.__init__(self, name, tid=tid, msg_type="GGA") + + def on_recv(self, msg: MsgContainer): + data = msg.data.decode(encoding="utf-8") + print(data) diff --git a/nmea/GLL.py b/nmea/GLL.py new file mode 100644 index 0000000..9bfc022 --- /dev/null +++ b/nmea/GLL.py @@ -0,0 +1,36 @@ +from msg_container import MsgContainer +from nmea.receiver import Nmea + + +class Gll(Nmea): + class Msg: + def __init__(self): + self.latitude = None + self.ns_indicator = None + self.longitude = None + self.ew_indicator = None + self.utc_time = None + self.status = None + self.checksum = None + + def __repr__(self): + return f"{self.latitude:.8f}{self.ns_indicator},{self.longitude:.8f}{self.ew_indicator}" + + def __init__(self, name: str, tid: str): + Nmea.__init__(self, name, tid=tid, msg_type="GLL") + self.msg = None + self.data = Gll.Msg() + + def on_recv(self, msg: MsgContainer): + data = msg.data.decode(encoding="utf-8") + data_list = data.split(',') + self.msg = data_list[0] + self.data.latitude = float(data_list[1])/100 + self.data.ns_indicator = data_list[2] + self.data.longitude = float(data_list[3])/100 + self.data.ew_indicator = data_list[4] + self.data.utc_time = data_list[5] + self.data.status = data_list[6] + self.data.checksum = data_list[7] + + print(self.data) diff --git a/nmea/receiver.py b/nmea/receiver.py new file mode 100644 index 0000000..42d1943 --- /dev/null +++ b/nmea/receiver.py @@ -0,0 +1,9 @@ +from msg_receiver import MsgReceiver + + +class Nmea(MsgReceiver): + def __init__(self, name: str, tid: str, msg_type: str): + if tid == "--": + MsgReceiver.__init__(self, name, filter=f"^\\$..{msg_type}.*") + else: + MsgReceiver.__init__(self, name, filter=f"^\\${tid}{msg_type}.*")