- removed name property from Msg container

- added source property to MsgContainer
This commit is contained in:
2026-03-29 11:01:41 +02:00
parent af94c39b3e
commit f7b1b18b2f
8 changed files with 25 additions and 48 deletions
+1 -2
View File
@@ -1,5 +1,4 @@
from a_backend import ABackend from a_backend import ABackend
from msg.container import MsgContainer
from msg.listener import MsgListener from msg.listener import MsgListener
@@ -9,7 +8,7 @@ class ATransceiver(MsgListener):
self.name = name self.name = name
self.backend = None self.backend = None
def on_recv(self, msg: MsgContainer): def on_recv(self, msg):
pass pass
def on_register(self, backend: ABackend): def on_register(self, backend: ABackend):
+8 -5
View File
@@ -1,13 +1,16 @@
import time import time
from a_transceiver import ATransceiver
class MsgContainer: class MsgContainer:
def __init__(self, data: bytes, name: str = "default", timestamp=time.time()): def __init__(self, data: bytes, source: ATransceiver|None, timestamp=time.time()):
self.timestamp : float = timestamp
self.data: bytes = data self.data: bytes = data
self.name : str = name self.source = source
self.timestamp : float = timestamp
def __str__(self): def __str__(self):
return f"{self.timestamp}:{self.name}:{self.data}" return f"{self.timestamp}:{self.source.name}:{self.data}"
def __repr__(self): def __repr__(self):
return f"{self.timestamp}:{self.name}:{self.data}" return f"{self.timestamp}:{self.source.name}:{self.data}"
+2 -3
View File
@@ -1,13 +1,12 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from msg.container import MsgContainer
class MsgListener(ABC): class MsgListener(ABC):
def __init__(self): def __init__(self):
pass pass
@abstractmethod @abstractmethod
def on_recv(self, msg: MsgContainer): def on_recv(self, msg):
pass pass
def is_msg(self, msg: MsgContainer): def is_msg(self, msg):
return False return False
+3 -3
View File
@@ -98,7 +98,7 @@ class NetworkBackend(ABackend):
if mask & selectors.EVENT_READ: if mask & selectors.EVENT_READ:
timestamp = time.time() timestamp = time.time()
data = key.fileobj.recv(64) data = key.fileobj.recv(64)
sock['xcvr'].on_recv(MsgContainer(data)) sock['xcvr'].on_recv(MsgContainer(data, sock['xcvr']))
if mask & selectors.EVENT_WRITE: if mask & selectors.EVENT_WRITE:
data = sock['queue'].get() data = sock['queue'].get()
key.fileobj.send(data) key.fileobj.send(data)
@@ -165,8 +165,8 @@ if __name__ == "__main__":
mc.register_xcvr(transceiver[grm]) mc.register_xcvr(transceiver[grm])
# Create NMEA-Packetizer # Create NMEA-Packetizer
nmea_packetizer = NmeaPacketizer(grm) nmea_packetizer = NmeaPacketizer()
ubx_packetizer = UbxPacketizer(grm) ubx_packetizer = UbxPacketizer()
# Register NMEA-Packetizer to transceiver # Register NMEA-Packetizer to transceiver
transceiver[grm].register_listener(nmea_packetizer) transceiver[grm].register_listener(nmea_packetizer)
+2 -3
View File
@@ -4,10 +4,9 @@ from msg.listener import MsgListener
from struct import pack from struct import pack
class NmeaPacketizer(MsgListener, MsgTalker): class NmeaPacketizer(MsgListener, MsgTalker):
def __init__(self, name: str): def __init__(self):
MsgListener.__init__(self) MsgListener.__init__(self)
MsgTalker.__init__(self) MsgTalker.__init__(self)
self.name = name
self.packet = b'' self.packet = b''
self.wait_sync = True self.wait_sync = True
@@ -19,7 +18,7 @@ class NmeaPacketizer(MsgListener, MsgTalker):
if d == 13 or d == 10: if d == 13 or d == 10:
self.wait_sync = False self.wait_sync = False
if len(self.packet) > 0: 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.wait_sync = True
self.packet = b'' self.packet = b''
elif not self.wait_sync: elif not self.wait_sync:
+1
View File
@@ -9,5 +9,6 @@ class Transceiver(ATransceiver, MsgTalker):
MsgTalker.__init__(self) MsgTalker.__init__(self)
def on_recv(self, msg: MsgContainer): def on_recv(self, msg: MsgContainer):
msg.transceiver = self
self.call_listener(msg) self.call_listener(msg)
+1 -1
View File
@@ -13,7 +13,7 @@ class UbxListener(MsgListener):
def on_recv(self, msg: MsgContainer): def on_recv(self, msg: MsgContainer):
data, hdr = frame_parse(msg.data) data, hdr = frame_parse(msg.data)
msg_parsed = self.parser.from_bytes(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): def is_msg(self, msg: MsgContainer):
hdr = frame_parse_hdr(msg.data) hdr = frame_parse_hdr(msg.data)
+7 -31
View File
@@ -1,10 +1,8 @@
import struct import struct
import time
from msg.container import MsgContainer from msg.container import MsgContainer
from msg.listener import MsgListener from msg.listener import MsgListener
from msg.talker import MsgTalker from msg.talker import MsgTalker
from ubx.ubx import UBX_SYNC_WORD, frame_parse, frame_create from ubx.ubx import UBX_SYNC_WORD, frame_parse
from ubx.listener import UbxListener
UBX_PKT_DEBUG = False UBX_PKT_DEBUG = False
def ubx_pkt_debug(s: str): def ubx_pkt_debug(s: str):
@@ -12,10 +10,9 @@ def ubx_pkt_debug(s: str):
print(s) print(s)
class UbxPacketizer(MsgListener, MsgTalker): 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) MsgListener.__init__(self)
MsgTalker.__init__(self) MsgTalker.__init__(self)
self.name = name
self.sync_bytes = sync_bytes self.sync_bytes = sync_bytes
self.packet = b'' self.packet = b''
self.wait_sync = True self.wait_sync = True
@@ -30,15 +27,15 @@ class UbxPacketizer(MsgListener, MsgTalker):
def is_msg(self, msg: MsgContainer): def is_msg(self, msg: MsgContainer):
return True return True
def on_recv(self, rx_data: MsgContainer): def on_recv(self, msg: MsgContainer):
for d in rx_data.data: for d in msg.data:
if d == self.sync_bytes[self.sync_count]: if d == self.sync_bytes[self.sync_count]:
self.d_save += struct.pack('B', d) self.d_save += struct.pack('B', d)
self.sync_count += 1 self.sync_count += 1
if self.sync_count == len(self.sync_bytes): 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: 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.sync_count = 0
self.d_save = b'' self.d_save = b''
self.packet = b'' self.packet = b''
@@ -53,27 +50,6 @@ class UbxPacketizer(MsgListener, MsgTalker):
data, hdr = frame_parse(self.packet) data, hdr = frame_parse(self.packet)
if data is not None: if data is not None:
if hdr.length == len(data): 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.packet = b''
self.wait_sync = True 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))