From b5cd671ed429d8eeaeacc1765666b984de9809ad Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Mon, 16 Mar 2026 17:00:11 +0100 Subject: [PATCH] - UBX: fixed data loss when sync byte in payload - refactored --- network_backend.py | 4 +++- receiver/ubx_packetizer.py | 11 ++++++++--- receiver/ubx_receiver.py | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/network_backend.py b/network_backend.py index 9bc8075..a36d9da 100644 --- a/network_backend.py +++ b/network_backend.py @@ -104,7 +104,9 @@ if __name__ == "__main__": Gga(grm, 'GN'), ] 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 diff --git a/receiver/ubx_packetizer.py b/receiver/ubx_packetizer.py index d02111e..cd71277 100644 --- a/receiver/ubx_packetizer.py +++ b/receiver/ubx_packetizer.py @@ -13,6 +13,8 @@ class UbxPacketizer(MsgSink, MsgSource): self.packet = b'' self.wait_sync = True self.sync_count = 0 + self.timestamp = 0 + self.d_save = b'' def reset(self): self.packet = b'' @@ -20,24 +22,27 @@ class UbxPacketizer(MsgSink, MsgSource): self.sync_count = 0 def on_recv(self, msg: MsgContainer): - name = msg.name - timestamp = msg.timestamp for n in range (0, len(msg.data)): d = msg.data[n] 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): print("UBX-sync") + self.d_save = b'' + self.timestamp = msg.timestamp self.sync_count = 0 self.packet = b'' self.wait_sync = False else: + self.packet += self.d_save + self.d_save = b'' if not self.wait_sync: self.packet += struct.pack('B', d) data, hdr = frame_parse(self.packet) if data is not None: 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'' diff --git a/receiver/ubx_receiver.py b/receiver/ubx_receiver.py index ad1baf4..aea8171 100644 --- a/receiver/ubx_receiver.py +++ b/receiver/ubx_receiver.py @@ -11,7 +11,7 @@ class UbxReceiver(MsgSink): def on_recv(self, msg: MsgContainer): 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): hdr = frame_parse_hdr(msg.data)