def process_data(self, data: bytes) -> UBXMessage: ''' Process UBX message type ''' parsed_data = UBXMessage.parse(data, False) if parsed_data.identity == 'ACK-ACK': self._process_ACK_ACK(parsed_data) if parsed_data.identity == 'ACK-NAK': self._process_ACK_NAK(parsed_data) if parsed_data.identity == 'CFG-MSG': self._process_CFG_MSG(parsed_data) if parsed_data.identity == 'CFG-PRT': self._process_CFG_PRT(parsed_data) if parsed_data.identity == 'CFG-INF': self._process_CFG_INF(parsed_data) if parsed_data.identity == 'NAV-POSLLH': self._process_NAV_POSLLH(parsed_data) if parsed_data.identity == 'NAV-PVT': self._process_NAV_PVT(parsed_data) if parsed_data.identity == 'NAV-VELNED': self._process_NAV_VELNED(parsed_data) if parsed_data.identity == 'NAV-SVINFO': self._process_NAV_SVINFO(parsed_data) if parsed_data.identity == 'NAV-SOL': self._process_NAV_SOL(parsed_data) if parsed_data.identity == 'NAV-DOP': self._process_NAV_DOP(parsed_data) if parsed_data.identity == 'MON-VER': self._process_MON_VER(parsed_data) if data or parsed_data: self._update_console(data, parsed_data) return parsed_data
def testFill_CFGNMEAPARSE( self ): # check that raw payload is correctly populated and parses back to original message EXPECTED_RESULT = "<UBX(CFG-NMEA, filter=b'\\x00', nmeaVersion=2.3, numSV=1, flags=b'\\x00', gnssToFilter=b'\\x00\\x00\\x00\\x00', svNumbering=0, mainTalkerId=0, gsvTalkerId=0, version=0, bdsTalkerId=b'\\x00\\x00', reserved1=0)>" res = UBXMessage('CFG', 'CFG-NMEA', SET, nmeaVersion=35, numSV=1) res2 = UBXMessage.parse(res.serialize()) self.assertEqual(str(res2), EXPECTED_RESULT)
def testCFGVALGET3( self ): # test parse of CFG-VALGET CFG-I2C-ADDRESS, CFG-UART1-BAUDRATE, CFG-RATE-NAV res = UBXMessage.parse(self.cfg_valget3, True) self.assertEqual( str(res), "<UBX(CFG-VALGET, version=0, layer=0, position=0, CFG_I2C_ADDRESS=85, CFG_UART1_BAUDRATE=9600, CFG_RATE_NAV=35)>" )
def testFill_CFGDATPARSE2( self ): # check that raw payload is correctly populated and parses back to original message EXPECTED_RESULT = "<UBX(CFG-DAT, datumNum=4, datumName=b'WGS-84', majA=0.0, flat=0.0, dX=-1.2345677614212036, dY=27.406539916992188, dZ=0.0, rotX=0.0, rotY=0.0, rotZ=0.0, scale=0.0)>" res = UBXMessage('CFG', 'CFG-DAT', SET, datumNum=4, datumName=b'WGS-84', dX=-1.2345678, dY=27.40654) res2 = UBXMessage.parse(res.serialize()) self.assertEqual(str(res2), EXPECTED_RESULT)
def testFill_CFGDOSCPARSE( self ): # check that raw payload is correctly populated and parses back to original message EXPECTED_RESULT = "<UBX(CFG-DOSC, version=37, numOsc=1, reserved1=0, oscId_01=8, reserved2_01=0, flags_01=b'\\x00\\x00', freq_01=53, phaseOffset_01=26, withTemp_01=0, withAge_01=0, timeToTemp_01=0, reserved3_01=0, gainVco_01=4, gainUncertainty_01=123, reserved4_01=0)>" res = UBXMessage('CFG', 'CFG-DOSC', SET, version=37, numOsc=1, oscId_01=8, freq_01=53, phaseOffset_01=26, gainVco_01=4, gainUncertainty_01=123) res2 = UBXMessage.parse(res.serialize()) self.assertEqual(str(res2), EXPECTED_RESULT)
def process_data(self, data: bytes) -> UBXMessage: """ Process UBX message type :param bytes data: raw data :return UBXMessage: :rtype: UBXMessage """ parsed_data = UBXMessage.parse(data, False) if parsed_data.identity == "ACK-ACK": self._process_ACK_ACK(parsed_data) if parsed_data.identity == "ACK-NAK": self._process_ACK_NAK(parsed_data) if parsed_data.identity == "CFG-MSG": self._process_CFG_MSG(parsed_data) if parsed_data.identity == "CFG-PRT": self._process_CFG_PRT(parsed_data) if parsed_data.identity == "CFG-INF": self._process_CFG_INF(parsed_data) if parsed_data.identity == "CFG-VALGET": self._process_CFG_VALGET(parsed_data) if parsed_data.identity == "NAV-POSLLH": self._process_NAV_POSLLH(parsed_data) if parsed_data.identity == "NAV-PVT": self._process_NAV_PVT(parsed_data) if parsed_data.identity == "NAV-VELNED": self._process_NAV_VELNED(parsed_data) if parsed_data.identity == "NAV-SAT": self._process_NAV_SAT(parsed_data) if parsed_data.identity == "NAV-SVINFO": self._process_NAV_SVINFO(parsed_data) if parsed_data.identity == "NAV-SOL": self._process_NAV_SOL(parsed_data) if parsed_data.identity == "NAV-DOP": self._process_NAV_DOP(parsed_data) if parsed_data.identity == "MON-VER": self._process_MON_VER(parsed_data) if parsed_data.identity == "MON-HW": self._process_MON_HW(parsed_data) if data or parsed_data: self._update_console(data, parsed_data) return parsed_data
def testCfgNmeaVx(self): # test older NMEA message parse res = UBXMessage.parse(self.cfg_nmeavx, True) self.assertEqual( str(res), "<UBX(CFG-NMEA, filter=b'\\x00', nmeaVersion=0., numSV=0, flags=b'\\x00')>" )
def testNavVelNedStr(self): res = UBXMessage.parse(self.nav_velned, True) self.assertEqual( str(res), '<UBX(NAV-VELNED, iTOW=16:01:50, velN=-3, velE=-15, velD=-4, speed=16, gSpeed=15, heading=128387, sAcc=65, cAcc=8052720)>' )
def testNavVelNedRepr(self): res = UBXMessage.parse(self.nav_velned, True) self.assertEqual( repr(res), "UBXMessage(b'\\x01', b'\\x12', 0, payload=b'0D\\n\\x18\\xfd\\xff\\xff\\xff\\xf1\\xff\\xff\\xff\\xfc\\xff\\xff\\xff\\x10\\x00\\x00\\x00\\x0f\\x00\\x00\\x00\\x83\\xf5\\x01\\x00A\\x00\\x00\\x00\\xf0\\xdfz\\x00')" )
def testAckID(self): res = UBXMessage.parse(self.ack_ack, True) self.assertEqual(res.identity, 'ACK-ACK')
def testNavVelNedID(self): res = UBXMessage.parse(self.nav_velned, True) self.assertEqual(res.identity, 'NAV-VELNED')
def testParseBadLen(self): # test for invalid message length in bytes EXPECTED_ERROR = "Invalid payload length (.*) - should be (.*)" with self.assertRaisesRegex(UBXParseError, EXPECTED_ERROR): UBXMessage.parse(self.bad_len, True)
def testCfgPrtRepr(self): res = UBXMessage.parse(self.cfg_prt, True) self.assertEqual(repr(res), "UBXMessage(b'\\x06', b'\\x00', 0)")
def testCfgStr(self): res = UBXMessage.parse(self.cfg_msg, True) self.assertEqual( str(res), '<UBX(CFG-MSG, msgClass=NMEA-Standard, msgID=GLL, rateDDC=0, rateUART1=1, rateUART2=1, rateUSB=1, rateSPI=0, reserved=0)>' )
def testMgaDbd(self): res = UBXMessage.parse(self.mga_dbd, True) self.assertEqual( str(res), "<UBX(MGA-DBD, reserved1=3727165692135864801209549313, data_01=1, data_02=2)>" )
def testCfg(self): res = UBXMessage.parse(self.ack_ack, True) self.assertIsInstance(res, UBXMessage)
def testCfgID(self): res = UBXMessage.parse(self.cfg_msg, True) self.assertEqual(res.identity, 'CFG-MSG')
def testAckCkF(self): UBXMessage.parse(self.ack_ack_badck, False)
def testAckRepr(self): res = UBXMessage.parse(self.ack_ack, True) self.assertEqual( repr(res), "UBXMessage(b'\\x05', b'\\x01', 0, payload=b'\\x06\\x01')")
def testAckStr(self): res = UBXMessage.parse(self.ack_ack, True) self.assertEqual(str(res), '<UBX(ACK-ACK, clsID=CFG, msgID=CFG-MSG)>')
def testAckCkT(self): # bad checksum EXPECTED_ERROR = "Message checksum (.*) invalid - should be (.*)" ack_ack_badck = b'\xb5b\x05\x01\x02\x00\x06\x01\x0f\x37' with self.assertRaisesRegex(UBXParseError, EXPECTED_ERROR): UBXMessage.parse(ack_ack_badck, True)
def testCfgNmeaV0(self): # test older NMEA message parse res = UBXMessage.parse(self.cfg_nmeav0, True) self.assertEqual( str(res), "<UBX(CFG-NMEA, filter=b'\\x00', nmeaVersion=0., numSV=0, flags=b'\\x00', gnssToFilter=b'\\x00\\x00\\x00\\x00', svNumbering=0, mainTalkerId=0, gsvTalkerId=0, version=0)>" )
def testParseBadHdr(self): # test for invalid message header in bytes EXPECTED_ERROR = "Invalid message header (.*) - should be (.*)" with self.assertRaisesRegex(UBXParseError, EXPECTED_ERROR): UBXMessage.parse(self.bad_hdr, True)
def testCfgProp2(self): res = UBXMessage.parse(self.cfg_msg, True) self.assertEqual(res.rateSPI, 0)
def testParse_INVALIDATTR(self): # test for invalid message header in bytes EXPECTED_ERROR = "Unknown attribute type Z2 for key spam" with self.assertRaisesRegex(UBXTypeError, EXPECTED_ERROR): UBXMessage.parse(self.bad_msg, True)
def testNavVelNed(self): res = UBXMessage.parse(self.nav_velned, True) self.assertIsInstance(res, UBXMessage)
def testCfgRepr(self): res = UBXMessage.parse(self.cfg_msg, True) self.assertEqual( repr(res), "UBXMessage(b'\\x06', b'\\x01', 0, payload=b'\\xf0\\x01\\x00\\x01\\x01\\x01\\x00\\x00')" )
def testMgaFlashAck(self): res = UBXMessage.parse(self.mga_flash_ack, True) self.assertEqual( str(res), "<UBX(MGA-FLASH-ACK, type=3, version=1, ack=2, reserved1=0, sequence=1024)>" )
def testFill_CFGNMEAPOLL2(self): # test POLL constructor, no payload EXPECTED_RESULT = "<UBX(CFG-NMEA)>" res = UBXMessage('CFG', 'CFG-NMEA', POLL) res2 = UBXMessage.parse(res.serialize()) self.assertEqual(str(res2), EXPECTED_RESULT)
def testCfgProp1(self): res = UBXMessage.parse(self.cfg_msg, True) self.assertEqual(res.rateUART1, 1)