diff --git a/network_backend.py b/network_backend.py index 11a9c65..34886b4 100644 --- a/network_backend.py +++ b/network_backend.py @@ -7,6 +7,8 @@ from packetizer import Packetizer from transceiver import Transceiver from a_backend import ABackend from nmea.GLL import Gll +from nmea.GSA import Gsa +from nmea.GSV import Gsv class NetworkBackend(ABackend): def __init__(self, servers: list[dict]): @@ -98,17 +100,16 @@ if __name__ == "__main__": xcvr_1.register_recv(packetizer_0) xcvr_2.register_recv(packetizer_1) -# rx_1 = MsgReceiver('Rx1', '^.?GPGSV.*') -# rx_2 = MsgReceiver('Rx2', '^.?GNGLL.*') -# rx_3 = Gga('Rx3', 'GP') - rx_4 = Gll('Rx4', '--') + + rx_list = [ + Gll('Rx', '--'), + Gsa('Rx', '--'), + Gsv('Rx', '--') + ] # Register all Rx to all sources -# packetizer_0.register_recv(rx_1) -# packetizer_0.register_recv(rx_2) -# packetizer_1.register_recv(rx_1) -# packetizer_1.register_recv(rx_2) - packetizer_0.register_recv(rx_4) - packetizer_1.register_recv(rx_4) + for rx in rx_list: + packetizer_0.register_recv(rx) + packetizer_1.register_recv(rx) # Connect all sources mc.connect() diff --git a/nmea/GSA.py b/nmea/GSA.py new file mode 100644 index 0000000..c1f51fa --- /dev/null +++ b/nmea/GSA.py @@ -0,0 +1,36 @@ +from msg_container import MsgContainer +from nmea.receiver import Nmea + + +class Gsa(Nmea): + class Msg: + def __init__(self): + self.mode = None + self.fix_type = None + self.sat_id = None + self.p_dop = None + self.h_dop = None + self.v_dop = None + self.checksum = None + + def __repr__(self): + return f"mode: {self.mode}, fix_type: {self.mode}, sat_id: {self.sat_id}, p-dop: {self.p_dop:.3f}, h-dop: {self.h_dop:.3f}, v-dop: {self.v_dop:.3f}" + + def __init__(self, name: str, tid: str): + Nmea.__init__(self, name, tid=tid, msg_type="GSA") + self.msg = None + self.data = Gsa.Msg() + + def on_recv(self, msg: MsgContainer): + data = msg.data.decode(encoding="utf-8") + data_list = data.split(',') + self.msg = data_list[0] + self.data.mode = data_list[1] + self.data.fix_type = data_list[2] + self.data.sat_id = data_list[3:15] + self.data.p_dop = float(data_list[15]) + self.data.h_dop = float(data_list[16]) + self.data.v_dop = float(data_list[17]) + self.data.checksum = data_list[18] + + print(self.data) diff --git a/nmea/GSV.py b/nmea/GSV.py new file mode 100644 index 0000000..30f5dc3 --- /dev/null +++ b/nmea/GSV.py @@ -0,0 +1,48 @@ +from msg_container import MsgContainer +from nmea.receiver import Nmea + + +class Gsv(Nmea): + class Msg: + def __init__(self): + self.number_of_msg = None + self.seq_number = None + self.sat_vis = None + self.sat_id = [] + self.elevation = [] + self.azimuth = [] + self.snr = [] + self.checksum = None + + def __repr__(self): + return f"sat_vis: {self.sat_vis}, sat_id: {self.sat_id}, elevation: {self.elevation}, azimuth: {self.azimuth}, snr: {self.snr}" + + def __init__(self, name: str, tid: str): + Nmea.__init__(self, name, tid=tid, msg_type="GSV") + self.msg = None + self.data = Gsv.Msg() + + def on_recv(self, msg: MsgContainer): + msg_data = msg.data.decode(encoding="utf-8") + data_list = msg_data.split(',') + self.msg = data_list[0] + + data = self.data + data.number_of_msg = data_list[1] + data.seq_number = data_list[2] + data.sat_vis = data_list[3] + + data_set_size = 4 + num_sats_in_msg = int(len(data_list[3:-2])/4) + for n in range(num_sats_in_msg): + data.sat_id.append(data_list[data_set_size*n+4]) + data.elevation.append(data_list[data_set_size*n+5]) + data.azimuth.append(data_list[data_set_size*n+6]) + data.snr.append(data_list[data_set_size*n+7]) + + data.checksum = data_list[data_set_size*(num_sats_in_msg-1)+8] + + if self.data.number_of_msg == self.data.seq_number: + print(data) + self.data = Gsv.Msg() +