- UBX: fixed data loss when sync byte in payload
- refactored
This commit is contained in:
+3
-1
@@ -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
|
||||||
|
|||||||
@@ -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''
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user