- UBX: fixed data loss when sync byte in payload

- refactored
This commit is contained in:
2026-03-16 17:00:11 +01:00
parent e004b71f3e
commit b5cd671ed4
3 changed files with 12 additions and 5 deletions
+3 -1
View File
@@ -104,7 +104,9 @@ if __name__ == "__main__":
Gga(grm, 'GN'), Gga(grm, 'GN'),
] ]
ubx_rx_list = [ ubx_rx_list = [
UbxReceiver(grm, 0x01, 0x43), UbxReceiver('UBX-NAV-SIG', 0x01, 0x43),
UbxReceiver('UBX-ACK-ACK', 0x05, 0x01),
UbxReceiver('UBX-ACK-NACK', 0x05, 0x00),
] ]
# Topology # Topology
+8 -3
View File
@@ -13,6 +13,8 @@ class UbxPacketizer(MsgSink, MsgSource):
self.packet = b'' self.packet = b''
self.wait_sync = True self.wait_sync = True
self.sync_count = 0 self.sync_count = 0
self.timestamp = 0
self.d_save = b''
def reset(self): def reset(self):
self.packet = b'' self.packet = b''
@@ -20,24 +22,27 @@ class UbxPacketizer(MsgSink, MsgSource):
self.sync_count = 0 self.sync_count = 0
def on_recv(self, msg: MsgContainer): def on_recv(self, msg: MsgContainer):
name = msg.name
timestamp = msg.timestamp
for n in range (0, len(msg.data)): for n in range (0, len(msg.data)):
d = msg.data[n] d = msg.data[n]
if d == self.sync_bytes[self.sync_count]: if d == self.sync_bytes[self.sync_count]:
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):
print("UBX-sync") print("UBX-sync")
self.d_save = b''
self.timestamp = msg.timestamp
self.sync_count = 0 self.sync_count = 0
self.packet = b'' self.packet = b''
self.wait_sync = False self.wait_sync = False
else: else:
self.packet += self.d_save
self.d_save = b''
if not self.wait_sync: if not self.wait_sync:
self.packet += struct.pack('B', d) self.packet += struct.pack('B', d)
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_sinks(MsgContainer(name, timestamp, self.packet)) self.call_sinks(MsgContainer(msg.name, self.timestamp, self.packet))
self.packet = b'' self.packet = b''
+1 -1
View File
@@ -11,7 +11,7 @@ class UbxReceiver(MsgSink):
def on_recv(self, msg: MsgContainer): def on_recv(self, msg: MsgContainer):
data, hdr = frame_parse(msg.data) data, hdr = frame_parse(msg.data)
print(f"{hdr.mclass}:{hdr.mid}:{data}") print(f"{msg.name}:{self.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{data}")
def is_msg(self, msg: MsgContainer): def is_msg(self, msg: MsgContainer):
hdr = frame_parse_hdr(msg.data) hdr = frame_parse_hdr(msg.data)