From f7b1b18b2fa05e04cc46a58ca88373172353e450 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 29 Mar 2026 11:01:41 +0200 Subject: [PATCH] - removed name property from Msg container - added source property to MsgContainer --- a_transceiver.py | 3 +-- msg/container.py | 13 ++++++++----- msg/listener.py | 5 ++--- network_backend.py | 6 +++--- nmea/packetizer.py | 5 ++--- transceiver.py | 1 + ubx/listener.py | 2 +- ubx/packetizer.py | 38 +++++++------------------------------- 8 files changed, 25 insertions(+), 48 deletions(-) diff --git a/a_transceiver.py b/a_transceiver.py index 9c304f3..b13cae6 100644 --- a/a_transceiver.py +++ b/a_transceiver.py @@ -1,5 +1,4 @@ from a_backend import ABackend -from msg.container import MsgContainer from msg.listener import MsgListener @@ -9,7 +8,7 @@ class ATransceiver(MsgListener): self.name = name self.backend = None - def on_recv(self, msg: MsgContainer): + def on_recv(self, msg): pass def on_register(self, backend: ABackend): diff --git a/msg/container.py b/msg/container.py index fd968a5..53d700f 100644 --- a/msg/container.py +++ b/msg/container.py @@ -1,13 +1,16 @@ import time +from a_transceiver import ATransceiver + + class MsgContainer: - def __init__(self, data: bytes, name: str = "default", timestamp=time.time()): - self.timestamp : float = timestamp + def __init__(self, data: bytes, source: ATransceiver|None, timestamp=time.time()): self.data: bytes = data - self.name : str = name + self.source = source + self.timestamp : float = timestamp def __str__(self): - return f"{self.timestamp}:{self.name}:{self.data}" + return f"{self.timestamp}:{self.source.name}:{self.data}" def __repr__(self): - return f"{self.timestamp}:{self.name}:{self.data}" + return f"{self.timestamp}:{self.source.name}:{self.data}" diff --git a/msg/listener.py b/msg/listener.py index 4203b67..96d63f4 100644 --- a/msg/listener.py +++ b/msg/listener.py @@ -1,13 +1,12 @@ from abc import ABC, abstractmethod -from msg.container import MsgContainer class MsgListener(ABC): def __init__(self): pass @abstractmethod - def on_recv(self, msg: MsgContainer): + def on_recv(self, msg): pass - def is_msg(self, msg: MsgContainer): + def is_msg(self, msg): return False diff --git a/network_backend.py b/network_backend.py index eeca698..51f0d3b 100644 --- a/network_backend.py +++ b/network_backend.py @@ -98,7 +98,7 @@ class NetworkBackend(ABackend): if mask & selectors.EVENT_READ: timestamp = time.time() data = key.fileobj.recv(64) - sock['xcvr'].on_recv(MsgContainer(data)) + sock['xcvr'].on_recv(MsgContainer(data, sock['xcvr'])) if mask & selectors.EVENT_WRITE: data = sock['queue'].get() key.fileobj.send(data) @@ -165,8 +165,8 @@ if __name__ == "__main__": mc.register_xcvr(transceiver[grm]) # Create NMEA-Packetizer - nmea_packetizer = NmeaPacketizer(grm) - ubx_packetizer = UbxPacketizer(grm) + nmea_packetizer = NmeaPacketizer() + ubx_packetizer = UbxPacketizer() # Register NMEA-Packetizer to transceiver transceiver[grm].register_listener(nmea_packetizer) diff --git a/nmea/packetizer.py b/nmea/packetizer.py index 04694a7..0c91748 100644 --- a/nmea/packetizer.py +++ b/nmea/packetizer.py @@ -4,10 +4,9 @@ from msg.listener import MsgListener from struct import pack class NmeaPacketizer(MsgListener, MsgTalker): - def __init__(self, name: str): + def __init__(self): MsgListener.__init__(self) MsgTalker.__init__(self) - self.name = name self.packet = b'' self.wait_sync = True @@ -19,7 +18,7 @@ class NmeaPacketizer(MsgListener, MsgTalker): if d == 13 or d == 10: self.wait_sync = False if len(self.packet) > 0: - self.call_listener(MsgContainer(self.packet, self.name)) + self.call_listener(MsgContainer(self.packet, msg.source)) self.wait_sync = True self.packet = b'' elif not self.wait_sync: diff --git a/transceiver.py b/transceiver.py index 35e0204..4464643 100644 --- a/transceiver.py +++ b/transceiver.py @@ -9,5 +9,6 @@ class Transceiver(ATransceiver, MsgTalker): MsgTalker.__init__(self) def on_recv(self, msg: MsgContainer): + msg.transceiver = self self.call_listener(msg) diff --git a/ubx/listener.py b/ubx/listener.py index 337913f..1a47045 100644 --- a/ubx/listener.py +++ b/ubx/listener.py @@ -13,7 +13,7 @@ class UbxListener(MsgListener): def on_recv(self, msg: MsgContainer): data, hdr = frame_parse(msg.data) msg_parsed = self.parser.from_bytes(data) - print(f"{msg.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{msg_parsed}") + print(f"{msg.source.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{msg_parsed}") def is_msg(self, msg: MsgContainer): hdr = frame_parse_hdr(msg.data) diff --git a/ubx/packetizer.py b/ubx/packetizer.py index 3663df9..e32ea4d 100644 --- a/ubx/packetizer.py +++ b/ubx/packetizer.py @@ -1,10 +1,8 @@ import struct -import time from msg.container import MsgContainer from msg.listener import MsgListener from msg.talker import MsgTalker -from ubx.ubx import UBX_SYNC_WORD, frame_parse, frame_create -from ubx.listener import UbxListener +from ubx.ubx import UBX_SYNC_WORD, frame_parse UBX_PKT_DEBUG = False def ubx_pkt_debug(s: str): @@ -12,10 +10,9 @@ def ubx_pkt_debug(s: str): print(s) class UbxPacketizer(MsgListener, MsgTalker): - def __init__(self, name: str, sync_bytes: bytes = UBX_SYNC_WORD): + def __init__(self, sync_bytes: bytes = UBX_SYNC_WORD): MsgListener.__init__(self) MsgTalker.__init__(self) - self.name = name self.sync_bytes = sync_bytes self.packet = b'' self.wait_sync = True @@ -30,15 +27,15 @@ class UbxPacketizer(MsgListener, MsgTalker): def is_msg(self, msg: MsgContainer): return True - def on_recv(self, rx_data: MsgContainer): - for d in rx_data.data: + def on_recv(self, msg: MsgContainer): + for d in msg.data: if d == self.sync_bytes[self.sync_count]: self.d_save += struct.pack('B', d) self.sync_count += 1 if self.sync_count == len(self.sync_bytes): - ubx_pkt_debug(f"{self.name}:UBX-sync") + ubx_pkt_debug(f"{msg.source.name}:UBX-sync") if len(self.packet) > 0: - ubx_pkt_debug(f"{self.name}:Remaining packet: {self.packet}") + ubx_pkt_debug(f"{msg.source.name}:Remaining packet: {self.packet}") self.sync_count = 0 self.d_save = b'' self.packet = b'' @@ -53,27 +50,6 @@ class UbxPacketizer(MsgListener, MsgTalker): data, hdr = frame_parse(self.packet) if data is not None: if hdr.length == len(data): - self.call_listener(MsgContainer(self.packet, self.name)) + self.call_listener(MsgContainer(self.packet, msg.source)) self.packet = b'' self.wait_sync = True - -if __name__ == "__main__": - UBX_PKT_DEBUG = True - class MySink(MsgListener): - def __init__(self): - MsgListener.__init__(self) - - def on_recv(self, msg: MsgContainer): - print(msg) - - def is_msg(self, msg: MsgContainer): - return True - - ubx_rx = UbxListener('test', 1, 2) - - pkt = UbxPacketizer() - pkt.register_listener(ubx_rx) - - pkt.reset() - frame = frame_create(_class=1, _id=2, _data=b'Hallo' + b'\xb5' + b',\x62Welt') + frame_create(_class=1, _id=2, _data=b',') + frame_create(_class=1, _id=2, _data=b'UBX') + frame_create(_class=1, _id=2, _data=b'World') - pkt.on_recv(MsgContainer('test', 31101970.0208, frame))