コード例 #1
0
ファイル: ubx_handler.py プロジェクト: foxittt/PyGPSClient
    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
コード例 #2
0
 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)
コード例 #3
0
 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)>"
     )
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
    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
コード例 #7
0
 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')>"
     )
コード例 #8
0
 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)>'
     )
コード例 #9
0
 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')"
     )
コード例 #10
0
 def testAckID(self):
     res = UBXMessage.parse(self.ack_ack, True)
     self.assertEqual(res.identity, 'ACK-ACK')
コード例 #11
0
 def testNavVelNedID(self):
     res = UBXMessage.parse(self.nav_velned, True)
     self.assertEqual(res.identity, 'NAV-VELNED')
コード例 #12
0
 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)
コード例 #13
0
 def testCfgPrtRepr(self):
     res = UBXMessage.parse(self.cfg_prt, True)
     self.assertEqual(repr(res), "UBXMessage(b'\\x06', b'\\x00', 0)")
コード例 #14
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)>'
     )
コード例 #15
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)>"
     )
コード例 #16
0
 def testCfg(self):
     res = UBXMessage.parse(self.ack_ack, True)
     self.assertIsInstance(res, UBXMessage)
コード例 #17
0
 def testCfgID(self):
     res = UBXMessage.parse(self.cfg_msg, True)
     self.assertEqual(res.identity, 'CFG-MSG')
コード例 #18
0
 def testAckCkF(self):
     UBXMessage.parse(self.ack_ack_badck, False)
コード例 #19
0
 def testAckRepr(self):
     res = UBXMessage.parse(self.ack_ack, True)
     self.assertEqual(
         repr(res),
         "UBXMessage(b'\\x05', b'\\x01', 0, payload=b'\\x06\\x01')")
コード例 #20
0
 def testAckStr(self):
     res = UBXMessage.parse(self.ack_ack, True)
     self.assertEqual(str(res), '<UBX(ACK-ACK, clsID=CFG, msgID=CFG-MSG)>')
コード例 #21
0
 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)
コード例 #22
0
 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)>"
     )
コード例 #23
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)
コード例 #24
0
 def testCfgProp2(self):
     res = UBXMessage.parse(self.cfg_msg, True)
     self.assertEqual(res.rateSPI, 0)
コード例 #25
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)
コード例 #26
0
 def testNavVelNed(self):
     res = UBXMessage.parse(self.nav_velned, True)
     self.assertIsInstance(res, UBXMessage)
コード例 #27
0
 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')"
     )
コード例 #28
0
 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)>"
     )
コード例 #29
0
 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)
コード例 #30
0
 def testCfgProp1(self):
     res = UBXMessage.parse(self.cfg_msg, True)
     self.assertEqual(res.rateUART1, 1)