- added stream talker

- added stream listener
This commit is contained in:
2026-03-28 12:03:54 +01:00
parent 2e01a70d53
commit 8208edfc46
6 changed files with 54 additions and 42 deletions
+11 -15
View File
@@ -1,7 +1,9 @@
import struct
import time
from msg.container import MsgContainer
from msg.listener import MsgListener
from msg.talker import MsgTalker
from stream.listener import StreamListener
from ubx.ubx import UBX_SYNC_WORD, frame_parse, frame_create
from ubx.listener import UbxListener
@@ -10,15 +12,15 @@ def ubx_pkt_debug(s: str):
if UBX_PKT_DEBUG:
print(s)
class UbxPacketizer(MsgListener, MsgTalker):
def __init__(self, sync_bytes: bytes = UBX_SYNC_WORD):
MsgListener.__init__(self)
class UbxPacketizer(StreamListener, MsgTalker):
def __init__(self, name: str, sync_bytes: bytes = UBX_SYNC_WORD):
StreamListener.__init__(self)
MsgTalker.__init__(self)
self.name = name
self.sync_bytes = sync_bytes
self.packet = b''
self.wait_sync = True
self.sync_count = 0
self.timestamp = 0
self.d_save = b''
def reset(self):
@@ -26,21 +28,19 @@ class UbxPacketizer(MsgListener, MsgTalker):
self.wait_sync = True
self.sync_count = 0
def on_recv(self, msg: MsgContainer):
for n in range (0, len(msg.data)):
d = msg.data[n]
def on_recv(self, rx_data: bytes):
for d in rx_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"{msg.name}:UBX-sync")
ubx_pkt_debug(f"{self.name}:UBX-sync")
if len(self.packet) > 0:
ubx_pkt_debug(f"{msg.name}:Remaining packet: {self.packet}")
ubx_pkt_debug(f"{self.name}:Remaining packet: {self.packet}")
self.sync_count = 0
self.d_save = b''
self.packet = b''
self.wait_sync = False
self.timestamp = msg.timestamp
else:
if self.sync_count > 0:
self.packet += self.d_save
@@ -51,14 +51,10 @@ class UbxPacketizer(MsgListener, MsgTalker):
data, hdr = frame_parse(self.packet)
if data is not None:
if hdr.length == len(data):
self.call_listener(MsgContainer(msg.name, self.timestamp, self.packet))
self.call_listener(MsgContainer(self.name, time.time(), self.packet))
self.packet = b''
self.wait_sync = True
def is_msg(self, msg: MsgContainer):
return True
if __name__ == "__main__":
UBX_PKT_DEBUG = True
class MySink(MsgListener):