def _process_HNR_PVT(self, data: UBXMessage): """ Process HNR-PVT sentence - High Rate Navigation position velocity time solution. :param UBXMessage data: HNR-PVT parsed message """ try: self.utc = itow2utc(data.iTOW) self.lat = data.lat / 10**7 self.lon = data.lon / 10**7 self.alt = data.hMSL / 1000 self.hacc = data.hAcc / 1000 self.vacc = data.vAcc / 1000 self.speed = data.gSpeed / 1000 # m/s self.track = data.headMot / 10**5 fix = gpsfix2str(data.gpsFix) self.__app.frm_banner.update_banner( time=self.utc, lat=self.lat, lon=self.lon, alt=self.alt, hacc=self.hacc, vacc=self.vacc, speed=self.speed, fix=fix, track=self.track, ) self.__app.frm_mapview.update_map(self.lat, self.lon, self.hacc, fix=fix) if (self.__app.frm_settings.record_track and self.lat != "" and self.lon != ""): time = (datetime( data.year, data.month, data.day, data.hour, data.min, data.second, ).isoformat() + "Z") if fix == "3D": fix = "3d" elif fix == "2D": fix = "2d" else: fix = "none" self.__app.file_handler.add_trackpoint( self.lat, self.lon, ele=self.alt, time=time, fix=fix, ) except ValueError: # self.__app.set_status(ube.UBXMessageError(err), "red") pass
def _process_NAV_POSLLH(self, data: UBXMessage): """ Process NAV-LLH sentence - Latitude, Longitude, Height. :param UBXMessage data: NAV-POSLLH parsed message """ try: self.utc = itow2utc(data.iTOW) self.lat = data.lat / 10**7 self.lon = data.lon / 10**7 self.alt = data.hMSL / 1000 self.hacc = data.hAcc / 1000 self.vacc = data.vAcc / 1000 self.__app.frm_banner.update_banner( time=self.utc, lat=self.lat, lon=self.lon, alt=self.alt, hacc=self.hacc, vacc=self.vacc, ) self.__app.frm_mapview.update_map(self.lat, self.lon, self.hacc) except ValueError: # self.__app.set_status(ube.UBXMessageError(err), "red") pass
def __str__(self) -> str: """ Human readable representation. :return: human readable representation :rtype: str """ clsid = None umsg_name = self.identity if self.payload is None: return f"<UBX({umsg_name})>" stg = f"<UBX({umsg_name}, " for i, att in enumerate(self.__dict__): if att[0] != "_": # only show public attributes val = self.__dict__[att] if att[0:6] == "gnssId": # attribute is a GNSS ID val = gnss2str(val) # get string representation e.g. 'GPS' if att == "iTOW": # attribute is a GPS Time of Week val = itow2utc(val) # show time in UTC format # if it's an ACK-ACK or ACK-NAK, we show what it's acknowledging in plain text if self._ubxClass == b"\x05": # ACK if att == "clsID": clsid = self.val2bytes(val, ubt.U1) val = ubt.UBX_CLASSES[clsid] if att == "msgID" and clsid: msgid = self.val2bytes(val, ubt.U1) val = ubt.UBX_MSGIDS[clsid + msgid] # if it's a CFG-MSG, we show what message class/id it refers to in plain text if self._ubxClass == b"\x06" and self._ubxID == b"\x01": # CFG-MSG if att == "msgClass": clsid = self.val2bytes(val, ubt.U1) val = ubt.UBX_CLASSES[clsid] if att == "msgID" and clsid: msgid = self.val2bytes(val, ubt.U1) val = ubt.UBX_MSGIDS[clsid + msgid] stg += att + "=" + str(val) if i < len(self.__dict__) - 1: stg += ", " stg += ")>" return stg
def testitow2utc(self): res = str(itow2utc(387092000)) self.assertEqual(res, '11:31:16')