50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
from msg_container import MsgContainer
|
|
from receiver.nmea_receiver import NmeaListener
|
|
|
|
|
|
class Gsv(NmeaListener):
|
|
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.signal_id = None
|
|
self.checksum = None
|
|
|
|
def __repr__(self):
|
|
return f"{self.__dict__}"
|
|
|
|
def __init__(self, name: str, tid: str):
|
|
NmeaListener.__init__(self, name, tid=tid, msg_type="GSV")
|
|
self.msg = None
|
|
self.data = Gsv.Msg()
|
|
|
|
def on_recv(self, msg: MsgContainer):
|
|
data_list = msg.data.split(b',')
|
|
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.signal_id = data_list[data_set_size*(num_sats_in_msg-1)+8].split(b'*')[0]
|
|
data.checksum = data_list[data_set_size*(num_sats_in_msg-1)+8].split(b'*')[1]
|
|
|
|
if self.data.number_of_msg == self.data.seq_number:
|
|
self.data = Gsv.Msg()
|
|
print(f"{self.name}:{self.msg} {data}")
|
|
|