diff --git a/network_backend.py b/network_backend.py index f70d86f..ed3c5bc 100644 --- a/network_backend.py +++ b/network_backend.py @@ -17,6 +17,8 @@ from nmea.RMC import Rmc from threading import Thread from queue import Queue from ubx.ubx import frame_create +from ubx.msg import UbxMsg +from ubx.messages.nav import Sig class NetworkBackend(ABackend): def __init__(self, servers: list[dict]): @@ -145,10 +147,9 @@ if __name__ == "__main__": Gga(grm, 'GN'), ] ubx_rx_list = [ -# UbxReceiver('UBX-NAV-SIG', 0x01, 0x43), - UbxReceiver('UBX-ACK-ACK', 0x05, 0x01), - UbxReceiver('UBX-ACK-NACK', 0x05, 0x00), - UbxReceiver('UBX:default'), + UbxReceiver(Sig(), 0x01, 0x43), + UbxReceiver(UbxMsg(), 0x05, 0x01), + UbxReceiver(UbxMsg(), 0x05, 0x00), ] # Topology @@ -194,6 +195,9 @@ if __name__ == "__main__": # Poll UBX-NAV-CLOCK (0x01 0x22) frame = frame_create(0x01, 0x22, b'') transceiver[grm].send(frame) + # Poll UBX-NAV-SIG (0x01 0x43) + frame = frame_create(0x01, 0x43, b'') + transceiver[grm].send(frame) except ValueError: break diff --git a/receiver/ubx_receiver.py b/receiver/ubx_receiver.py index 4170ddb..fc192c9 100644 --- a/receiver/ubx_receiver.py +++ b/receiver/ubx_receiver.py @@ -1,17 +1,19 @@ from msg_container import MsgContainer from msg_sink import MsgSink from ubx.ubx import frame_parse, frame_parse_hdr +from ubx.msg import UbxMsg class UbxReceiver(MsgSink): - def __init__(self, name: str, mclass: int|None = None, mid: int|None = None): + def __init__(self, parser: UbxMsg, mclass: int|None = None, mid: int|None = None): MsgSink.__init__(self) - self.name = name + self.parser = parser self.mclass = mclass self.mid = mid def on_recv(self, msg: MsgContainer): data, hdr = frame_parse(msg.data) - print(f"{msg.name}:{self.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{data}") + msg_parsed = self.parser.from_bytes(data) + print(f"{msg.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{msg_parsed}") def is_msg(self, msg: MsgContainer): hdr = frame_parse_hdr(msg.data) diff --git a/ubx/messages/nav.py b/ubx/messages/nav.py new file mode 100644 index 0000000..d7c855f --- /dev/null +++ b/ubx/messages/nav.py @@ -0,0 +1,37 @@ +import struct +import ubx.msg + +class Sig(ubx.msg.UbxMsg): + class Group1: + @classmethod + def from_bytes(cls, data: bytes): + obj = Sig.Group1() + obj.gnss_id = struct.unpack("B", data[0:1])[0] + obj.sv_id = struct.unpack("B", data[1:2])[0] + obj.sig_id = struct.unpack("B", data[2:3])[0] + obj.freq_id = struct.unpack("B", data[3:4])[0] + obj.pr_res = struct.unpack("