예제 #1
0
 def testRXMPMPV0(self):  # test parser of RXM-PMP v0 message
     rxm_pmpv0 = b'\xb5b\x02\x72\x0e\x02\x00\x00\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x01\x01'
     for i in range(504):
         n = i % 256
         rxm_pmpv0 += n.to_bytes(1, "little", signed=False)
     rxm_pmpv0 += b'\x01\x02\x01\x00\xcf\xa9'
     res = UBXReader.parse(rxm_pmpv0, validate=VALCKSUM)
     self.assertEqual(str(res), "<UBX(RXM-PMP, version=0, reserved0=0, timeTag=67305985, uniqueWord1=67305985, uniqueWord2=67305985, serviceIdentifier=513, spare=1, uniqueWordBitErrors=1, userData_01=0, userData_02=1, userData_03=2, userData_04=3, userData_05=4, userData_06=5, userData_07=6, userData_08=7, userData_09=8, userData_10=9, userData_11=10, userData_12=11, userData_13=12, userData_14=13, userData_15=14, userData_16=15, userData_17=16, userData_18=17, userData_19=18, userData_20=19, userData_21=20, userData_22=21, userData_23=22, userData_24=23, userData_25=24, userData_26=25, userData_27=26, userData_28=27, userData_29=28, userData_30=29, userData_31=30, userData_32=31, userData_33=32, userData_34=33, userData_35=34, userData_36=35, userData_37=36, userData_38=37, userData_39=38, userData_40=39, userData_41=40, userData_42=41, userData_43=42, userData_44=43, userData_45=44, userData_46=45, userData_47=46, userData_48=47, userData_49=48, userData_50=49, userData_51=50, userData_52=51, userData_53=52, userData_54=53, userData_55=54, userData_56=55, userData_57=56, userData_58=57, userData_59=58, userData_60=59, userData_61=60, userData_62=61, userData_63=62, userData_64=63, userData_65=64, userData_66=65, userData_67=66, userData_68=67, userData_69=68, userData_70=69, userData_71=70, userData_72=71, userData_73=72, userData_74=73, userData_75=74, userData_76=75, userData_77=76, userData_78=77, userData_79=78, userData_80=79, userData_81=80, userData_82=81, userData_83=82, userData_84=83, userData_85=84, userData_86=85, userData_87=86, userData_88=87, userData_89=88, userData_90=89, userData_91=90, userData_92=91, userData_93=92, userData_94=93, userData_95=94, userData_96=95, userData_97=96, userData_98=97, userData_99=98, userData_100=99, userData_101=100, userData_102=101, userData_103=102, userData_104=103, userData_105=104, userData_106=105, userData_107=106, userData_108=107, userData_109=108, userData_110=109, userData_111=110, userData_112=111, userData_113=112, userData_114=113, userData_115=114, userData_116=115, userData_117=116, userData_118=117, userData_119=118, userData_120=119, userData_121=120, userData_122=121, userData_123=122, userData_124=123, userData_125=124, userData_126=125, userData_127=126, userData_128=127, userData_129=128, userData_130=129, userData_131=130, userData_132=131, userData_133=132, userData_134=133, userData_135=134, userData_136=135, userData_137=136, userData_138=137, userData_139=138, userData_140=139, userData_141=140, userData_142=141, userData_143=142, userData_144=143, userData_145=144, userData_146=145, userData_147=146, userData_148=147, userData_149=148, userData_150=149, userData_151=150, userData_152=151, userData_153=152, userData_154=153, userData_155=154, userData_156=155, userData_157=156, userData_158=157, userData_159=158, userData_160=159, userData_161=160, userData_162=161, userData_163=162, userData_164=163, userData_165=164, userData_166=165, userData_167=166, userData_168=167, userData_169=168, userData_170=169, userData_171=170, userData_172=171, userData_173=172, userData_174=173, userData_175=174, userData_176=175, userData_177=176, userData_178=177, userData_179=178, userData_180=179, userData_181=180, userData_182=181, userData_183=182, userData_184=183, userData_185=184, userData_186=185, userData_187=186, userData_188=187, userData_189=188, userData_190=189, userData_191=190, userData_192=191, userData_193=192, userData_194=193, userData_195=194, userData_196=195, userData_197=196, userData_198=197, userData_199=198, userData_200=199, userData_201=200, userData_202=201, userData_203=202, userData_204=203, userData_205=204, userData_206=205, userData_207=206, userData_208=207, userData_209=208, userData_210=209, userData_211=210, userData_212=211, userData_213=212, userData_214=213, userData_215=214, userData_216=215, userData_217=216, userData_218=217, userData_219=218, userData_220=219, userData_221=220, userData_222=221, userData_223=222, userData_224=223, userData_225=224, userData_226=225, userData_227=226, userData_228=227, userData_229=228, userData_230=229, userData_231=230, userData_232=231, userData_233=232, userData_234=233, userData_235=234, userData_236=235, userData_237=236, userData_238=237, userData_239=238, userData_240=239, userData_241=240, userData_242=241, userData_243=242, userData_244=243, userData_245=244, userData_246=245, userData_247=246, userData_248=247, userData_249=248, userData_250=249, userData_251=250, userData_252=251, userData_253=252, userData_254=253, userData_255=254, userData_256=255, userData_257=0, userData_258=1, userData_259=2, userData_260=3, userData_261=4, userData_262=5, userData_263=6, userData_264=7, userData_265=8, userData_266=9, userData_267=10, userData_268=11, userData_269=12, userData_270=13, userData_271=14, userData_272=15, userData_273=16, userData_274=17, userData_275=18, userData_276=19, userData_277=20, userData_278=21, userData_279=22, userData_280=23, userData_281=24, userData_282=25, userData_283=26, userData_284=27, userData_285=28, userData_286=29, userData_287=30, userData_288=31, userData_289=32, userData_290=33, userData_291=34, userData_292=35, userData_293=36, userData_294=37, userData_295=38, userData_296=39, userData_297=40, userData_298=41, userData_299=42, userData_300=43, userData_301=44, userData_302=45, userData_303=46, userData_304=47, userData_305=48, userData_306=49, userData_307=50, userData_308=51, userData_309=52, userData_310=53, userData_311=54, userData_312=55, userData_313=56, userData_314=57, userData_315=58, userData_316=59, userData_317=60, userData_318=61, userData_319=62, userData_320=63, userData_321=64, userData_322=65, userData_323=66, userData_324=67, userData_325=68, userData_326=69, userData_327=70, userData_328=71, userData_329=72, userData_330=73, userData_331=74, userData_332=75, userData_333=76, userData_334=77, userData_335=78, userData_336=79, userData_337=80, userData_338=81, userData_339=82, userData_340=83, userData_341=84, userData_342=85, userData_343=86, userData_344=87, userData_345=88, userData_346=89, userData_347=90, userData_348=91, userData_349=92, userData_350=93, userData_351=94, userData_352=95, userData_353=96, userData_354=97, userData_355=98, userData_356=99, userData_357=100, userData_358=101, userData_359=102, userData_360=103, userData_361=104, userData_362=105, userData_363=106, userData_364=107, userData_365=108, userData_366=109, userData_367=110, userData_368=111, userData_369=112, userData_370=113, userData_371=114, userData_372=115, userData_373=116, userData_374=117, userData_375=118, userData_376=119, userData_377=120, userData_378=121, userData_379=122, userData_380=123, userData_381=124, userData_382=125, userData_383=126, userData_384=127, userData_385=128, userData_386=129, userData_387=130, userData_388=131, userData_389=132, userData_390=133, userData_391=134, userData_392=135, userData_393=136, userData_394=137, userData_395=138, userData_396=139, userData_397=140, userData_398=141, userData_399=142, userData_400=143, userData_401=144, userData_402=145, userData_403=146, userData_404=147, userData_405=148, userData_406=149, userData_407=150, userData_408=151, userData_409=152, userData_410=153, userData_411=154, userData_412=155, userData_413=156, userData_414=157, userData_415=158, userData_416=159, userData_417=160, userData_418=161, userData_419=162, userData_420=163, userData_421=164, userData_422=165, userData_423=166, userData_424=167, userData_425=168, userData_426=169, userData_427=170, userData_428=171, userData_429=172, userData_430=173, userData_431=174, userData_432=175, userData_433=176, userData_434=177, userData_435=178, userData_436=179, userData_437=180, userData_438=181, userData_439=182, userData_440=183, userData_441=184, userData_442=185, userData_443=186, userData_444=187, userData_445=188, userData_446=189, userData_447=190, userData_448=191, userData_449=192, userData_450=193, userData_451=194, userData_452=195, userData_453=196, userData_454=197, userData_455=198, userData_456=199, userData_457=200, userData_458=201, userData_459=202, userData_460=203, userData_461=204, userData_462=205, userData_463=206, userData_464=207, userData_465=208, userData_466=209, userData_467=210, userData_468=211, userData_469=212, userData_470=213, userData_471=214, userData_472=215, userData_473=216, userData_474=217, userData_475=218, userData_476=219, userData_477=220, userData_478=221, userData_479=222, userData_480=223, userData_481=224, userData_482=225, userData_483=226, userData_484=227, userData_485=228, userData_486=229, userData_487=230, userData_488=231, userData_489=232, userData_490=233, userData_491=234, userData_492=235, userData_493=236, userData_494=237, userData_495=238, userData_496=239, userData_497=240, userData_498=241, userData_499=242, userData_500=243, userData_501=244, userData_502=245, userData_503=246, userData_504=247, fecBits=513, ebno=1, reserved1=0)>")
예제 #2
0
    def process_data(self, data: bytes) -> UBXMessage:
        """
        Process UBX message type

        :param bytes data: raw data
        :return: UBXMessage
        :rtype: UBXMessage
        """

        if data is None:
            return None

        parsed_data = UBXReader.parse(data, validate=VALCKSUM)

        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-RATE":
            self._process_CFG_RATE(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 == "HNR-PVT":
            self._process_HNR_PVT(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 parsed_data.identity == "NAV-STATUS":
            self._process_NAV_STATUS(parsed_data)
        if parsed_data.identity == "MON-RF":
            self._process_MON_RF(parsed_data)
        if parsed_data.identity == "MON-SPAN":
            self._process_MON_SPAN(parsed_data)
        if data or parsed_data:
            self._update_console(data, parsed_data)

        return parsed_data
예제 #3
0
    def connect(self):
        """
        Open serial connection.
        """

        self._connected = False
        try:
            self._serial_object = Serial(self._port,
                                         self._baudrate,
                                         timeout=self._timeout)
            self._ubxreader = UBXReader(BufferedReader(self._serial_object,
                                                       buffer_size=1),
                                        ubxonly=self._ubx_only)
            self._connected = True
        except (SerialException, SerialTimeoutException) as err:
            print(f"Error connecting to serial port {err}")

        return self._connected
예제 #4
0
    def testMON(self):
        EXPECTED_RESULTS = (
            "<UBX(MON-MSGPP, msg1_01=0, msg1_02=0, msg1_03=0, msg1_04=0, msg1_05=0, msg1_06=0, msg1_07=0, msg1_08=0, msg2_01=0, msg2_02=0, msg2_03=0, msg2_04=0, msg2_05=0, msg2_06=0, msg2_07=0, msg2_08=0, msg3_01=0, msg3_02=0, msg3_03=0, msg3_04=0, msg3_05=0, msg3_06=0, msg3_07=0, msg3_08=0, msg4_01=69, msg4_02=0, msg4_03=0, msg4_04=0, msg4_05=0, msg4_06=0, msg4_07=0, msg4_08=0, msg5_01=0, msg5_02=0, msg5_03=0, msg5_04=0, msg5_05=0, msg5_06=0, msg5_07=0, msg5_08=0, msg6_01=0, msg6_02=0, msg6_03=0, msg6_04=0, msg6_05=0, msg6_06=0, msg6_07=0, msg6_08=0, skipped_01=0, skipped_02=0, skipped_03=0, skipped_04=0, skipped_05=0, skipped_06=0)>",
            "<UBX(MON-TXBUF, pending_01=0, pending_02=0, pending_03=0, pending_04=0, pending_05=0, pending_06=0, usage_01=0, usage_02=2, usage_03=0, usage_04=0, usage_05=0, usage_06=0, peakUsage_01=0, peakUsage_02=12, peakUsage_03=0, peakUsage_04=25, peakUsage_05=0, peakUsage_06=0, tUsage=2, tPeakUsage=25, errors=b'\\x00', reserved1=0)>",
            "<UBX(MON-RXBUF, pending_01=0, pending_02=0, pending_03=0, pending_04=0, pending_05=0, pending_06=0, usage_01=0, usage_02=0, usage_03=0, usage_04=0, usage_05=0, usage_06=0, peakUsage_01=0, peakUsage_02=0, peakUsage_03=0, peakUsage_04=2, peakUsage_05=0, peakUsage_06=0)>",
            "<UBX(MON-IO, rxBytes=0, txBytes=0, parityErrs=0, framingErrs=0, overrunErrs=0, breakCond=0, rxBusy=0, txBusy=0, reserved1=0)>",
            "<UBX(MON-HW, pinSel=b'\\x00\\xf4\\x01\\x00', pinBank=b'\\x00\\x00\\x00\\x00', pinDir=b'\\x00\\x00\\x01\\x00', pinVal=b'\\xef\\xf7\\x00\\x00', noisePerMS=87, agcCnt=3042, aStatus=2, aPower=1, flags=b'\\x01', reserved1=132, usedMask=b'\\xff\\xeb\\x01\\x00', VP_01=b'\\n', VP_02=b'\\x0b', VP_03=b'\\x0c', VP_04=b'\\r', VP_05=b'\\x0e', VP_06=b'\\x0f', VP_07=b'\\x01', VP_08=b'\\x00', VP_09=b'\\x02', VP_10=b'\\x03', VP_11=b'\\xff', VP_12=b'\\x10', VP_13=b'\\xff', VP_14=b'\\x12', VP_15=b'\\x13', VP_16=b'6', VP_17=b'5', VP_18=b'\\x05', VP_19=b'\\xef', VP_20=b'^', VP_21=b'\\x00', VP_22=b'\\x00', VP_23=b'\\x00', VP_24=b'\\x00', VP_25=b'\\x80', jamInd=247, reserved3=0, pinIrq=b'\\x00\\x00\\x00\\x00', pullH=b'', pullL=b'')>",
            "<UBX(MON-HW2, ofsI=4, magI=110, ofsQ=5, magQ=112, cfgSource=111, reserved0=1800, lowLevCfg=b'\\xff\\xff\\xff\\xff', reserved11=4294967295, reserved12=4294967295, postStatus=b'\\x00\\x00\\x00\\x00', reserved2=0)>"
        )

        i = 0
        raw = 0
        ubxreader = UBXReader(self.streamMON)
        while raw is not None:
            (raw, parsed) = ubxreader.read()
            if raw is not None:
                self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
                i += 1
예제 #5
0
    def testMON(self):
        EXPECTED_RESULTS = (
        "<UBX(MON-MSGPP, msg10=0, msg11=0, msg12=0, msg13=0, msg14=0, msg15=0, msg16=0, msg17=0, msg20=0, msg21=0, msg22=0, msg23=0, msg24=0, msg25=0, msg26=0, msg27=0, msg30=0, msg31=0, msg32=0, msg33=0, msg34=0, msg35=0, msg36=0, msg37=0, msg40=69, msg41=0, msg42=0, msg43=0, msg44=0, msg45=0, msg46=0, msg47=0, msg50=0, msg51=0, msg52=0, msg53=0, msg54=0, msg55=0, msg56=0, msg57=0, msg60=0, msg61=0, msg62=0, msg63=0, msg64=0, msg65=0, msg66=0, msg67=0, skipped1=0, skipped2=0, skipped3=0, skipped4=0, skipped5=0, skipped6=0)>",
        "<UBX(MON-TXBUF, pending0=0, pending1=0, pending2=0, pending3=0, pending4=0, pending5=0, usage0=0, usage1=2, usage2=0, usage3=0, usage4=0, usage5=0, peakUsage0=0, peakUsage1=12, peakUsage2=0, peakUsage3=25, peakUsage4=0, peakUsage5=0, tUsage=2, tPeakUsage=25, errors=b'\\x00', reserved1=0)>",
        "<UBX(MON-RXBUF, pending0=0, pending1=0, pending2=0, pending3=0, pending4=0, pending5=0, usage0=0, usage1=0, usage2=0, usage3=0, usage4=0, usage5=0, peakUsage0=0, peakUsage1=0, peakUsage2=0, peakUsage3=2, peakUsage4=0, peakUsage5=0)>",
        "<UBX(MON-IO, rxBytes=0, txBytes=0, parityErrs=0, framingErrs=0, overrunErrs=0, breakCond=0, rxBusy=0, txBusy=0, reserved1=0)>",
        "<UBX(MON-HW, pinSel=b'\\x00\\xf4\\x01\\x00', pinBank=b'\\x00\\x00\\x00\\x00', pinDir=b'\\x00\\x00\\x01\\x00', pinVal=b'\\xef\\xf7\\x00\\x00', noisePerMS=87, agcCnt=3042, aStatus=2, aPower=1, flags=b'\\x01', reserved1=132, usedMask=b'\\xff\\xeb\\x01\\x00', VP01=b'\\n', VP02=b'\\x0b', VP03=b'\\x0c', VP04=b'\\r', VP05=b'\\x0e', VP06=b'\\x0f', VP07=b'\\x01', VP08=b'\\x00', VP09=b'\\x02', VP10=b'\\x03', VP11=b'\\xff', VP12=b'\\x10', VP13=b'\\xff', VP14=b'\\x12', VP15=b'\\x13', VP16=b'6', VP17=b'5', VP18=b'\\x05', VP19=b'\\xef', VP20=b'^', VP21=b'\\x00', VP22=b'\\x00', VP23=b'\\x00', VP24=b'\\x00', VP25=b'\\x80', jamInd=247, reserved3=0, pinIrq=b'\\x00\\x00\\x00\\x00', pullH=b'', pullL=b'')>",
        "<UBX(MON-HW2, ofsI=4, magI=110, ofsQ=5, magQ=112, cfgSource=111, reserved0=1800, lowLevCfg=b'\\xff\\xff\\xff\\xff', reserved11=4294967295, reserved12=4294967295, postStatus=b'\\x00\\x00\\x00\\x00', reserved2=0)>"
        )

        i = 0
        raw = 0
        ubxreader = UBXReader(self.streamMON)
        while raw is not None:
            (raw, parsed) = ubxreader.read()
            if raw is not None:
                self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
                i += 1
예제 #6
0
 def testIterator2(self):  # test iterator function with mixed data stream
     EXPECTED_ERROR = "Unknown data header b'$G'. Looks like NMEA data. Set ubxonly flag to 'False' to ignore."
     ubxreader = UBXReader(self.streamMIX, ubxonly=True)
     with self.assertRaises(UBXStreamError) as context:
         i = 0
         #             (raw, parsed) = ubxreader.read()
         for (_, _) in ubxreader:
             i += 1
     self.assertTrue(EXPECTED_ERROR in str(context.exception))
예제 #7
0
 def testRXMRLML(self):  # test parser of RXM-RLM-L message
     rxm_rlms = b'\xb5b\x02\x59\x1c\x00\x00\x02\x00\x00'
     for i in range(8):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b'\x00'
     for i in range(12):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b'\x00\x01\x02\xda\x81'
     res = UBXReader.parse(rxm_rlms)
     self.assertEqual(str(res), "<UBX(RXM-RLM, version=0, type=2, svId=0, reserved0=0, beacon_01=0, beacon_02=1, beacon_03=2, beacon_04=3, beacon_05=4, beacon_06=5, beacon_07=6, beacon_08=7, message=0, params_01=0, params_02=1, params_03=2, params_04=3, params_05=4, params_06=5, params_07=6, params_08=7, params_09=8, params_10=9, params_11=10, params_12=11, reserved1=131328)>")
예제 #8
0
 def testRXMRLMS(self):  # test parser of RXM-RLM-S message
     rxm_rlms = b"\xb5b\x02\x59\x10\x00\x00\x01\x00\x00"
     for i in range(8):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b"\x00\x01\x02\x00\x8b\xbd"
     res = UBXReader.parse(rxm_rlms)
     self.assertEqual(
         str(res),
         "<UBX(RXM-RLM, version=0, type=1, svId=0, reserved0=0, beacon=506097522914230528, message=0, params=513, reserved1=0)>",
     )
예제 #9
0
 def testRXMRLMS(self):  # test parser of RXM-RLM-S message
     rxm_rlms = b'\xb5b\x02\x59\x10\x00\x00\x01\x00\x00'
     for i in range(8):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b'\x00\x01\x02\x00\x8b\xbd'
     res = UBXReader.parse(rxm_rlms, True)
     self.assertEqual(
         str(res),
         "<UBX(RXM-RLM, version=0, type=1, svId=0, reserved0=0, beacon_01=0, beacon_02=1, beacon_03=2, beacon_04=3, beacon_05=4, beacon_06=5, beacon_07=6, beacon_08=7, message=0, params1=1, params2=2, reserved1=0)>"
     )
예제 #10
0
 def testRXMPMPV1(self):  # test parser of RXM-PMP v1 message
     rxm_pmpv1 = b"\xb5b\x02\x72\x23\x00\x01\x00\x0b\x00\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x00\x01\x01\x02\x01\x00"
     for i in range(11):
         rxm_pmpv1 += i.to_bytes(1, "little", signed=False)
     rxm_pmpv1 += b"\x00\x20"
     res = UBXReader.parse(rxm_pmpv1)
     self.assertEqual(
         str(res),
         "<UBX(RXM-PMP, version=1, reserved0=0, numBytesUserData=11, timeTag=67305985, uniqueWord1=67305985, uniqueWord2=67305985, serviceIdentifier=513, spare=0, uniqueWordBitErrors=1, fecBits=513, ebno=0.125, reserved1=0, userData_01=0, userData_02=1, userData_03=2, userData_04=3, userData_05=4, userData_06=5, userData_07=6, userData_08=7, userData_09=8, userData_10=9, userData_11=10)>",
     )
예제 #11
0
 def testMONSPAN(self):  # test parser of MON-SPAN message (nested repeating groups)
     mon_span = b'\xb5b\x0a\x31\x34\x03\x00\x03\x01\x02'
     for i in range(3):
         for s in range(256):
             mon_span += s.to_bytes(1, "little", signed=False)
         mon_span += b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04'
         mon_span += i.to_bytes(1, "little", signed=False)
         mon_span += b'\x01\x02\x03'
     mon_span += b'\x67\x79'
     res = UBXReader.parse(mon_span)
     self.assertEqual(str(res), "<UBX(MON-SPAN, version=0, numRfBlocks=3, reserved0=513, spectrum_01_01=0, spectrum_01_02=1, spectrum_01_03=2, spectrum_01_04=3, spectrum_01_05=4, spectrum_01_06=5, spectrum_01_07=6, spectrum_01_08=7, spectrum_01_09=8, spectrum_01_10=9, spectrum_01_11=10, spectrum_01_12=11, spectrum_01_13=12, spectrum_01_14=13, spectrum_01_15=14, spectrum_01_16=15, spectrum_01_17=16, spectrum_01_18=17, spectrum_01_19=18, spectrum_01_20=19, spectrum_01_21=20, spectrum_01_22=21, spectrum_01_23=22, spectrum_01_24=23, spectrum_01_25=24, spectrum_01_26=25, spectrum_01_27=26, spectrum_01_28=27, spectrum_01_29=28, spectrum_01_30=29, spectrum_01_31=30, spectrum_01_32=31, spectrum_01_33=32, spectrum_01_34=33, spectrum_01_35=34, spectrum_01_36=35, spectrum_01_37=36, spectrum_01_38=37, spectrum_01_39=38, spectrum_01_40=39, spectrum_01_41=40, spectrum_01_42=41, spectrum_01_43=42, spectrum_01_44=43, spectrum_01_45=44, spectrum_01_46=45, spectrum_01_47=46, spectrum_01_48=47, spectrum_01_49=48, spectrum_01_50=49, spectrum_01_51=50, spectrum_01_52=51, spectrum_01_53=52, spectrum_01_54=53, spectrum_01_55=54, spectrum_01_56=55, spectrum_01_57=56, spectrum_01_58=57, spectrum_01_59=58, spectrum_01_60=59, spectrum_01_61=60, spectrum_01_62=61, spectrum_01_63=62, spectrum_01_64=63, spectrum_01_65=64, spectrum_01_66=65, spectrum_01_67=66, spectrum_01_68=67, spectrum_01_69=68, spectrum_01_70=69, spectrum_01_71=70, spectrum_01_72=71, spectrum_01_73=72, spectrum_01_74=73, spectrum_01_75=74, spectrum_01_76=75, spectrum_01_77=76, spectrum_01_78=77, spectrum_01_79=78, spectrum_01_80=79, spectrum_01_81=80, spectrum_01_82=81, spectrum_01_83=82, spectrum_01_84=83, spectrum_01_85=84, spectrum_01_86=85, spectrum_01_87=86, spectrum_01_88=87, spectrum_01_89=88, spectrum_01_90=89, spectrum_01_91=90, spectrum_01_92=91, spectrum_01_93=92, spectrum_01_94=93, spectrum_01_95=94, spectrum_01_96=95, spectrum_01_97=96, spectrum_01_98=97, spectrum_01_99=98, spectrum_01_100=99, spectrum_01_101=100, spectrum_01_102=101, spectrum_01_103=102, spectrum_01_104=103, spectrum_01_105=104, spectrum_01_106=105, spectrum_01_107=106, spectrum_01_108=107, spectrum_01_109=108, spectrum_01_110=109, spectrum_01_111=110, spectrum_01_112=111, spectrum_01_113=112, spectrum_01_114=113, spectrum_01_115=114, spectrum_01_116=115, spectrum_01_117=116, spectrum_01_118=117, spectrum_01_119=118, spectrum_01_120=119, spectrum_01_121=120, spectrum_01_122=121, spectrum_01_123=122, spectrum_01_124=123, spectrum_01_125=124, spectrum_01_126=125, spectrum_01_127=126, spectrum_01_128=127, spectrum_01_129=128, spectrum_01_130=129, spectrum_01_131=130, spectrum_01_132=131, spectrum_01_133=132, spectrum_01_134=133, spectrum_01_135=134, spectrum_01_136=135, spectrum_01_137=136, spectrum_01_138=137, spectrum_01_139=138, spectrum_01_140=139, spectrum_01_141=140, spectrum_01_142=141, spectrum_01_143=142, spectrum_01_144=143, spectrum_01_145=144, spectrum_01_146=145, spectrum_01_147=146, spectrum_01_148=147, spectrum_01_149=148, spectrum_01_150=149, spectrum_01_151=150, spectrum_01_152=151, spectrum_01_153=152, spectrum_01_154=153, spectrum_01_155=154, spectrum_01_156=155, spectrum_01_157=156, spectrum_01_158=157, spectrum_01_159=158, spectrum_01_160=159, spectrum_01_161=160, spectrum_01_162=161, spectrum_01_163=162, spectrum_01_164=163, spectrum_01_165=164, spectrum_01_166=165, spectrum_01_167=166, spectrum_01_168=167, spectrum_01_169=168, spectrum_01_170=169, spectrum_01_171=170, spectrum_01_172=171, spectrum_01_173=172, spectrum_01_174=173, spectrum_01_175=174, spectrum_01_176=175, spectrum_01_177=176, spectrum_01_178=177, spectrum_01_179=178, spectrum_01_180=179, spectrum_01_181=180, spectrum_01_182=181, spectrum_01_183=182, spectrum_01_184=183, spectrum_01_185=184, spectrum_01_186=185, spectrum_01_187=186, spectrum_01_188=187, spectrum_01_189=188, spectrum_01_190=189, spectrum_01_191=190, spectrum_01_192=191, spectrum_01_193=192, spectrum_01_194=193, spectrum_01_195=194, spectrum_01_196=195, spectrum_01_197=196, spectrum_01_198=197, spectrum_01_199=198, spectrum_01_200=199, spectrum_01_201=200, spectrum_01_202=201, spectrum_01_203=202, spectrum_01_204=203, spectrum_01_205=204, spectrum_01_206=205, spectrum_01_207=206, spectrum_01_208=207, spectrum_01_209=208, spectrum_01_210=209, spectrum_01_211=210, spectrum_01_212=211, spectrum_01_213=212, spectrum_01_214=213, spectrum_01_215=214, spectrum_01_216=215, spectrum_01_217=216, spectrum_01_218=217, spectrum_01_219=218, spectrum_01_220=219, spectrum_01_221=220, spectrum_01_222=221, spectrum_01_223=222, spectrum_01_224=223, spectrum_01_225=224, spectrum_01_226=225, spectrum_01_227=226, spectrum_01_228=227, spectrum_01_229=228, spectrum_01_230=229, spectrum_01_231=230, spectrum_01_232=231, spectrum_01_233=232, spectrum_01_234=233, spectrum_01_235=234, spectrum_01_236=235, spectrum_01_237=236, spectrum_01_238=237, spectrum_01_239=238, spectrum_01_240=239, spectrum_01_241=240, spectrum_01_242=241, spectrum_01_243=242, spectrum_01_244=243, spectrum_01_245=244, spectrum_01_246=245, spectrum_01_247=246, spectrum_01_248=247, spectrum_01_249=248, spectrum_01_250=249, spectrum_01_251=250, spectrum_01_252=251, spectrum_01_253=252, spectrum_01_254=253, spectrum_01_255=254, spectrum_01_256=255, span_01=67305985, res_01=67305985, center_01=67305985, pga_01=0, reserved1_01=197121, spectrum_02_01=0, spectrum_02_02=1, spectrum_02_03=2, spectrum_02_04=3, spectrum_02_05=4, spectrum_02_06=5, spectrum_02_07=6, spectrum_02_08=7, spectrum_02_09=8, spectrum_02_10=9, spectrum_02_11=10, spectrum_02_12=11, spectrum_02_13=12, spectrum_02_14=13, spectrum_02_15=14, spectrum_02_16=15, spectrum_02_17=16, spectrum_02_18=17, spectrum_02_19=18, spectrum_02_20=19, spectrum_02_21=20, spectrum_02_22=21, spectrum_02_23=22, spectrum_02_24=23, spectrum_02_25=24, spectrum_02_26=25, spectrum_02_27=26, spectrum_02_28=27, spectrum_02_29=28, spectrum_02_30=29, spectrum_02_31=30, spectrum_02_32=31, spectrum_02_33=32, spectrum_02_34=33, spectrum_02_35=34, spectrum_02_36=35, spectrum_02_37=36, spectrum_02_38=37, spectrum_02_39=38, spectrum_02_40=39, spectrum_02_41=40, spectrum_02_42=41, spectrum_02_43=42, spectrum_02_44=43, spectrum_02_45=44, spectrum_02_46=45, spectrum_02_47=46, spectrum_02_48=47, spectrum_02_49=48, spectrum_02_50=49, spectrum_02_51=50, spectrum_02_52=51, spectrum_02_53=52, spectrum_02_54=53, spectrum_02_55=54, spectrum_02_56=55, spectrum_02_57=56, spectrum_02_58=57, spectrum_02_59=58, spectrum_02_60=59, spectrum_02_61=60, spectrum_02_62=61, spectrum_02_63=62, spectrum_02_64=63, spectrum_02_65=64, spectrum_02_66=65, spectrum_02_67=66, spectrum_02_68=67, spectrum_02_69=68, spectrum_02_70=69, spectrum_02_71=70, spectrum_02_72=71, spectrum_02_73=72, spectrum_02_74=73, spectrum_02_75=74, spectrum_02_76=75, spectrum_02_77=76, spectrum_02_78=77, spectrum_02_79=78, spectrum_02_80=79, spectrum_02_81=80, spectrum_02_82=81, spectrum_02_83=82, spectrum_02_84=83, spectrum_02_85=84, spectrum_02_86=85, spectrum_02_87=86, spectrum_02_88=87, spectrum_02_89=88, spectrum_02_90=89, spectrum_02_91=90, spectrum_02_92=91, spectrum_02_93=92, spectrum_02_94=93, spectrum_02_95=94, spectrum_02_96=95, spectrum_02_97=96, spectrum_02_98=97, spectrum_02_99=98, spectrum_02_100=99, spectrum_02_101=100, spectrum_02_102=101, spectrum_02_103=102, spectrum_02_104=103, spectrum_02_105=104, spectrum_02_106=105, spectrum_02_107=106, spectrum_02_108=107, spectrum_02_109=108, spectrum_02_110=109, spectrum_02_111=110, spectrum_02_112=111, spectrum_02_113=112, spectrum_02_114=113, spectrum_02_115=114, spectrum_02_116=115, spectrum_02_117=116, spectrum_02_118=117, spectrum_02_119=118, spectrum_02_120=119, spectrum_02_121=120, spectrum_02_122=121, spectrum_02_123=122, spectrum_02_124=123, spectrum_02_125=124, spectrum_02_126=125, spectrum_02_127=126, spectrum_02_128=127, spectrum_02_129=128, spectrum_02_130=129, spectrum_02_131=130, spectrum_02_132=131, spectrum_02_133=132, spectrum_02_134=133, spectrum_02_135=134, spectrum_02_136=135, spectrum_02_137=136, spectrum_02_138=137, spectrum_02_139=138, spectrum_02_140=139, spectrum_02_141=140, spectrum_02_142=141, spectrum_02_143=142, spectrum_02_144=143, spectrum_02_145=144, spectrum_02_146=145, spectrum_02_147=146, spectrum_02_148=147, spectrum_02_149=148, spectrum_02_150=149, spectrum_02_151=150, spectrum_02_152=151, spectrum_02_153=152, spectrum_02_154=153, spectrum_02_155=154, spectrum_02_156=155, spectrum_02_157=156, spectrum_02_158=157, spectrum_02_159=158, spectrum_02_160=159, spectrum_02_161=160, spectrum_02_162=161, spectrum_02_163=162, spectrum_02_164=163, spectrum_02_165=164, spectrum_02_166=165, spectrum_02_167=166, spectrum_02_168=167, spectrum_02_169=168, spectrum_02_170=169, spectrum_02_171=170, spectrum_02_172=171, spectrum_02_173=172, spectrum_02_174=173, spectrum_02_175=174, spectrum_02_176=175, spectrum_02_177=176, spectrum_02_178=177, spectrum_02_179=178, spectrum_02_180=179, spectrum_02_181=180, spectrum_02_182=181, spectrum_02_183=182, spectrum_02_184=183, spectrum_02_185=184, spectrum_02_186=185, spectrum_02_187=186, spectrum_02_188=187, spectrum_02_189=188, spectrum_02_190=189, spectrum_02_191=190, spectrum_02_192=191, spectrum_02_193=192, spectrum_02_194=193, spectrum_02_195=194, spectrum_02_196=195, spectrum_02_197=196, spectrum_02_198=197, spectrum_02_199=198, spectrum_02_200=199, spectrum_02_201=200, spectrum_02_202=201, spectrum_02_203=202, spectrum_02_204=203, spectrum_02_205=204, spectrum_02_206=205, spectrum_02_207=206, spectrum_02_208=207, spectrum_02_209=208, spectrum_02_210=209, spectrum_02_211=210, spectrum_02_212=211, spectrum_02_213=212, spectrum_02_214=213, spectrum_02_215=214, spectrum_02_216=215, spectrum_02_217=216, spectrum_02_218=217, spectrum_02_219=218, spectrum_02_220=219, spectrum_02_221=220, spectrum_02_222=221, spectrum_02_223=222, spectrum_02_224=223, spectrum_02_225=224, spectrum_02_226=225, spectrum_02_227=226, spectrum_02_228=227, spectrum_02_229=228, spectrum_02_230=229, spectrum_02_231=230, spectrum_02_232=231, spectrum_02_233=232, spectrum_02_234=233, spectrum_02_235=234, spectrum_02_236=235, spectrum_02_237=236, spectrum_02_238=237, spectrum_02_239=238, spectrum_02_240=239, spectrum_02_241=240, spectrum_02_242=241, spectrum_02_243=242, spectrum_02_244=243, spectrum_02_245=244, spectrum_02_246=245, spectrum_02_247=246, spectrum_02_248=247, spectrum_02_249=248, spectrum_02_250=249, spectrum_02_251=250, spectrum_02_252=251, spectrum_02_253=252, spectrum_02_254=253, spectrum_02_255=254, spectrum_02_256=255, span_02=67305985, res_02=67305985, center_02=67305985, pga_02=1, reserved1_02=197121, spectrum_03_01=0, spectrum_03_02=1, spectrum_03_03=2, spectrum_03_04=3, spectrum_03_05=4, spectrum_03_06=5, spectrum_03_07=6, spectrum_03_08=7, spectrum_03_09=8, spectrum_03_10=9, spectrum_03_11=10, spectrum_03_12=11, spectrum_03_13=12, spectrum_03_14=13, spectrum_03_15=14, spectrum_03_16=15, spectrum_03_17=16, spectrum_03_18=17, spectrum_03_19=18, spectrum_03_20=19, spectrum_03_21=20, spectrum_03_22=21, spectrum_03_23=22, spectrum_03_24=23, spectrum_03_25=24, spectrum_03_26=25, spectrum_03_27=26, spectrum_03_28=27, spectrum_03_29=28, spectrum_03_30=29, spectrum_03_31=30, spectrum_03_32=31, spectrum_03_33=32, spectrum_03_34=33, spectrum_03_35=34, spectrum_03_36=35, spectrum_03_37=36, spectrum_03_38=37, spectrum_03_39=38, spectrum_03_40=39, spectrum_03_41=40, spectrum_03_42=41, spectrum_03_43=42, spectrum_03_44=43, spectrum_03_45=44, spectrum_03_46=45, spectrum_03_47=46, spectrum_03_48=47, spectrum_03_49=48, spectrum_03_50=49, spectrum_03_51=50, spectrum_03_52=51, spectrum_03_53=52, spectrum_03_54=53, spectrum_03_55=54, spectrum_03_56=55, spectrum_03_57=56, spectrum_03_58=57, spectrum_03_59=58, spectrum_03_60=59, spectrum_03_61=60, spectrum_03_62=61, spectrum_03_63=62, spectrum_03_64=63, spectrum_03_65=64, spectrum_03_66=65, spectrum_03_67=66, spectrum_03_68=67, spectrum_03_69=68, spectrum_03_70=69, spectrum_03_71=70, spectrum_03_72=71, spectrum_03_73=72, spectrum_03_74=73, spectrum_03_75=74, spectrum_03_76=75, spectrum_03_77=76, spectrum_03_78=77, spectrum_03_79=78, spectrum_03_80=79, spectrum_03_81=80, spectrum_03_82=81, spectrum_03_83=82, spectrum_03_84=83, spectrum_03_85=84, spectrum_03_86=85, spectrum_03_87=86, spectrum_03_88=87, spectrum_03_89=88, spectrum_03_90=89, spectrum_03_91=90, spectrum_03_92=91, spectrum_03_93=92, spectrum_03_94=93, spectrum_03_95=94, spectrum_03_96=95, spectrum_03_97=96, spectrum_03_98=97, spectrum_03_99=98, spectrum_03_100=99, spectrum_03_101=100, spectrum_03_102=101, spectrum_03_103=102, spectrum_03_104=103, spectrum_03_105=104, spectrum_03_106=105, spectrum_03_107=106, spectrum_03_108=107, spectrum_03_109=108, spectrum_03_110=109, spectrum_03_111=110, spectrum_03_112=111, spectrum_03_113=112, spectrum_03_114=113, spectrum_03_115=114, spectrum_03_116=115, spectrum_03_117=116, spectrum_03_118=117, spectrum_03_119=118, spectrum_03_120=119, spectrum_03_121=120, spectrum_03_122=121, spectrum_03_123=122, spectrum_03_124=123, spectrum_03_125=124, spectrum_03_126=125, spectrum_03_127=126, spectrum_03_128=127, spectrum_03_129=128, spectrum_03_130=129, spectrum_03_131=130, spectrum_03_132=131, spectrum_03_133=132, spectrum_03_134=133, spectrum_03_135=134, spectrum_03_136=135, spectrum_03_137=136, spectrum_03_138=137, spectrum_03_139=138, spectrum_03_140=139, spectrum_03_141=140, spectrum_03_142=141, spectrum_03_143=142, spectrum_03_144=143, spectrum_03_145=144, spectrum_03_146=145, spectrum_03_147=146, spectrum_03_148=147, spectrum_03_149=148, spectrum_03_150=149, spectrum_03_151=150, spectrum_03_152=151, spectrum_03_153=152, spectrum_03_154=153, spectrum_03_155=154, spectrum_03_156=155, spectrum_03_157=156, spectrum_03_158=157, spectrum_03_159=158, spectrum_03_160=159, spectrum_03_161=160, spectrum_03_162=161, spectrum_03_163=162, spectrum_03_164=163, spectrum_03_165=164, spectrum_03_166=165, spectrum_03_167=166, spectrum_03_168=167, spectrum_03_169=168, spectrum_03_170=169, spectrum_03_171=170, spectrum_03_172=171, spectrum_03_173=172, spectrum_03_174=173, spectrum_03_175=174, spectrum_03_176=175, spectrum_03_177=176, spectrum_03_178=177, spectrum_03_179=178, spectrum_03_180=179, spectrum_03_181=180, spectrum_03_182=181, spectrum_03_183=182, spectrum_03_184=183, spectrum_03_185=184, spectrum_03_186=185, spectrum_03_187=186, spectrum_03_188=187, spectrum_03_189=188, spectrum_03_190=189, spectrum_03_191=190, spectrum_03_192=191, spectrum_03_193=192, spectrum_03_194=193, spectrum_03_195=194, spectrum_03_196=195, spectrum_03_197=196, spectrum_03_198=197, spectrum_03_199=198, spectrum_03_200=199, spectrum_03_201=200, spectrum_03_202=201, spectrum_03_203=202, spectrum_03_204=203, spectrum_03_205=204, spectrum_03_206=205, spectrum_03_207=206, spectrum_03_208=207, spectrum_03_209=208, spectrum_03_210=209, spectrum_03_211=210, spectrum_03_212=211, spectrum_03_213=212, spectrum_03_214=213, spectrum_03_215=214, spectrum_03_216=215, spectrum_03_217=216, spectrum_03_218=217, spectrum_03_219=218, spectrum_03_220=219, spectrum_03_221=220, spectrum_03_222=221, spectrum_03_223=222, spectrum_03_224=223, spectrum_03_225=224, spectrum_03_226=225, spectrum_03_227=226, spectrum_03_228=227, spectrum_03_229=228, spectrum_03_230=229, spectrum_03_231=230, spectrum_03_232=231, spectrum_03_233=232, spectrum_03_234=233, spectrum_03_235=234, spectrum_03_236=235, spectrum_03_237=236, spectrum_03_238=237, spectrum_03_239=238, spectrum_03_240=239, spectrum_03_241=240, spectrum_03_242=241, spectrum_03_243=242, spectrum_03_244=243, spectrum_03_245=244, spectrum_03_246=245, spectrum_03_247=246, spectrum_03_248=247, spectrum_03_249=248, spectrum_03_250=249, spectrum_03_251=250, spectrum_03_252=251, spectrum_03_253=252, spectrum_03_254=253, spectrum_03_255=254, spectrum_03_256=255, span_03=67305985, res_03=67305985, center_03=67305985, pga_03=2, reserved1_03=197121)>")
예제 #12
0
 def testFill_ESFMEASSETCT(
     self, ):  #  test ESF_MEAS GET constructor with calibTtagValid = 1
     EXPECTED_RESULT = "<UBX(ESF-MEAS, timeTag=0, timeMarkSent=0, timeMarkEdge=0, calibTtagValid=1, numMeas=0, id=0)>"
     res = UBXMessage("ESF",
                      "ESF-MEAS",
                      GET,
                      timeTag=0,
                      flags=b"\x18\x00",
                      parsebitfield=0)
     res2 = UBXReader.parse(res.serialize())
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #13
0
    def testMIX2(
            self):  # test mixed UBX/NMEA stream with validate set to False
        EXPECTED_RESULTS = (
            "<UBX(NAV-EOE, iTOW=09:08:04)>",
            "<UBX(NAV-PVT, iTOW=09:08:09, year=2021, month=2, day=22, hour=9, min=8, second=7, valid=b'\\xf7', tAcc=1071, nano=332985, fixType=3, flags=b'\\x01', flags2=b'\\xa6', numSV=4, lon=-22401762, lat=534506799, height=72728, hMSL=24245, hAcc=55374, vAcc=35349, velN=362, velE=-50, velD=-71, gSpeed=365, headMot=0, sAcc=4508, headAcc=13597116, pDOP=520, reserved1=52016683286528, headVeh=0, magDec=0, magAcc=0)>",
            "<UBX(NAV-ORB, iTOW=09:08:09, version=1, numSv=33, reserved1=0, gnssId_01=GPS, svId_01=1, svFlag_01=b'\\x05', eph_01=b'\\x00', alm_01=b'1', otherOrb_01=b'\\x00', gnssId_02=GPS, svId_02=14, svFlag_02=b'\\r', eph_02=b',', alm_02=b'o', otherOrb_02=b'G', gnssId_03=GPS, svId_03=19, svFlag_03=b'\\x05', eph_03=b'\\x00', alm_03=b'0', otherOrb_03=b'\\x00', gnssId_04=GPS, svId_04=20, svFlag_04=b'\\r', eph_04=b'\\x00', alm_04=b'1', otherOrb_04=b'\\x00', gnssId_05=GPS, svId_05=21, svFlag_05=b'\\x05', eph_05=b'\\x00', alm_05=b'1', otherOrb_05=b'\\x00', gnssId_06=GPS, svId_06=22, svFlag_06=b'\\x05', eph_06=b'\\x00', alm_06=b'1', otherOrb_06=b'\\x00', gnssId_07=GPS, svId_07=23, svFlag_07=b'\\r', eph_07=b'\\x00', alm_07=b'1', otherOrb_07=b'\\x00', gnssId_08=GPS, svId_08=24, svFlag_08=b'\\r', eph_08=b',', alm_08=b'o', otherOrb_08=b'G', gnssId_09=GPS, svId_09=25, svFlag_09=b'\\x01', eph_09=b'\\x00', alm_09=b'1', otherOrb_09=b'\\x00', gnssId_10=GLONASS, svId_10=1, svFlag_10=b'\\x05', eph_10=b'\\x00', alm_10=b'5', otherOrb_10=b'\\x00', gnssId_11=GLONASS, svId_11=2, svFlag_11=b'\\x05', eph_11=b'\\x00', alm_11=b'5', otherOrb_11=b'\\x00', gnssId_12=GLONASS, svId_12=3, svFlag_12=b'\\x05', eph_12=b'\\x00', alm_12=b'5', otherOrb_12=b'\\x00', gnssId_13=GLONASS, svId_13=4, svFlag_13=b'\\r', eph_13=b'\\x00', alm_13=b'5', otherOrb_13=b'\\x00', gnssId_14=GLONASS, svId_14=5, svFlag_14=b'\\r', eph_14=b'&', alm_14=b'5', otherOrb_14=b'G', gnssId_15=GLONASS, svId_15=6, svFlag_15=b'\\r', eph_15=b'\\x00', alm_15=b'5', otherOrb_15=b'\\x00', gnssId_16=GLONASS, svId_16=7, svFlag_16=b'\\x05', eph_16=b'\\x00', alm_16=b'5', otherOrb_16=b'\\x00', gnssId_17=GLONASS, svId_17=8, svFlag_17=b'\\x05', eph_17=b'\\x00', alm_17=b'5', otherOrb_17=b'\\x00', gnssId_18=GLONASS, svId_18=9, svFlag_18=b'\\x05', eph_18=b'\\x00', alm_18=b'5', otherOrb_18=b'\\x00', gnssId_19=GLONASS, svId_19=10, svFlag_19=b'\\x05', eph_19=b'\\x00', alm_19=b'5', otherOrb_19=b'\\x00', gnssId_20=GLONASS, svId_20=11, svFlag_20=b'\\x06', eph_20=b'\\x00', alm_20=b'5', otherOrb_20=b'\\x00', gnssId_21=GLONASS, svId_21=12, svFlag_21=b'\\x05', eph_21=b'\\x00', alm_21=b'5', otherOrb_21=b'\\x00', gnssId_22=GLONASS, svId_22=13, svFlag_22=b'\\t', eph_22=b'\\x00', alm_22=b'5', otherOrb_22=b'\\x00', gnssId_23=GLONASS, svId_23=14, svFlag_23=b'\\r', eph_23=b'\\x00', alm_23=b'5', otherOrb_23=b'\\x00', gnssId_24=GLONASS, svId_24=15, svFlag_24=b'\\r', eph_24=b'&', alm_24=b'5', otherOrb_24=b'G', gnssId_25=GLONASS, svId_25=16, svFlag_25=b'\\r', eph_25=b'\\x00', alm_25=b'5', otherOrb_25=b'\\x00', gnssId_26=GLONASS, svId_26=17, svFlag_26=b'\\x05', eph_26=b'\\x00', alm_26=b'5', otherOrb_26=b'\\x00', gnssId_27=GLONASS, svId_27=18, svFlag_27=b'\\x05', eph_27=b'\\x00', alm_27=b'5', otherOrb_27=b'\\x00', gnssId_28=GLONASS, svId_28=19, svFlag_28=b'\\x05', eph_28=b'\\x00', alm_28=b'5', otherOrb_28=b'\\x00', gnssId_29=GLONASS, svId_29=20, svFlag_29=b'\\x05', eph_29=b'\\x00', alm_29=b'5', otherOrb_29=b'\\x00', gnssId_30=GLONASS, svId_30=21, svFlag_30=b'\\t', eph_30=b'\\x00', alm_30=b'5', otherOrb_30=b'\\x00', gnssId_31=GLONASS, svId_31=22, svFlag_31=b'\\r', eph_31=b'\\x00', alm_31=b'5', otherOrb_31=b'\\x00', gnssId_32=GLONASS, svId_32=23, svFlag_32=b'\\t', eph_32=b'\\x00', alm_32=b'5', otherOrb_32=b'\\x00', gnssId_33=GLONASS, svId_33=24, svFlag_33=b'\\x05', eph_33=b'\\x00', alm_33=b'5', otherOrb_33=b'\\x00')>",
            "<UBX(NAV-SAT, iTOW=09:08:09, version=1, numCh=19, reserved11=0, reserved12=0, gnssId_01=GPS, svId_01=3, cno_01=0, elev_01=-91, azim_01=0, prRes_01=0, flags_01=b'\\x11\\x00\\x00\\x00', gnssId_02=GPS, svId_02=14, cno_02=23, elev_02=50, azim_02=87, prRes_02=31, flags_02=b'\\x1cY\\x00\\x00', gnssId_03=GPS, svId_03=15, cno_03=26, elev_03=-91, azim_03=0, prRes_03=0, flags_03=b'\\x17\\x00\\x00\\x00', gnssId_04=GPS, svId_04=20, cno_04=15, elev_04=24, azim_04=313, prRes_04=0, flags_04=b'\\x14\\x12\\x00\\x00', gnssId_05=GPS, svId_05=23, cno_05=17, elev_05=24, azim_05=315, prRes_05=0, flags_05=b'\\x14\\x12\\x00\\x00', gnssId_06=GPS, svId_06=24, cno_06=36, elev_06=25, azim_06=247, prRes_06=-3, flags_06=b'\\x1fY\\x00\\x00', gnssId_07=GPS, svId_07=30, cno_07=16, elev_07=-91, azim_07=0, prRes_07=0, flags_07=b'\\x14\\x00\\x00\\x00', gnssId_08=SBAS, svId_08=127, cno_08=0, elev_08=10, azim_08=117, prRes_08=0, flags_08=b'\\x01\\x07\\x00\\x00', gnssId_09=BeiDou, svId_09=15, cno_09=0, elev_09=-91, azim_09=0, prRes_09=0, flags_09=b'\\x01\\x00\\x00\\x00', gnssId_10=GLONASS, svId_10=4, cno_10=0, elev_10=38, azim_10=144, prRes_10=0, flags_10=b'\\x10\\x12\\x00\\x00', gnssId_11=GLONASS, svId_11=5, cno_11=22, elev_11=84, azim_11=272, prRes_11=53, flags_11=b'\\x1cY\\x00\\x00', gnssId_12=GLONASS, svId_12=6, cno_12=0, elev_12=23, azim_12=318, prRes_12=0, flags_12=b'\\x10\\x12\\x00\\x00', gnssId_13=GLONASS, svId_13=13, cno_13=0, elev_13=2, azim_13=39, prRes_13=0, flags_13=b'\\x10\\x12\\x00\\x00', gnssId_14=GLONASS, svId_14=14, cno_14=23, elev_14=53, azim_14=47, prRes_14=0, flags_14=b'\\x14\\x12\\x00\\x00', gnssId_15=GLONASS, svId_15=15, cno_15=36, elev_15=67, azim_15=201, prRes_15=9, flags_15=b'\\x1fY\\x00\\x00', gnssId_16=GLONASS, svId_16=16, cno_16=0, elev_16=11, azim_16=216, prRes_16=0, flags_16=b'\\x10\\x12\\x00\\x00', gnssId_17=GLONASS, svId_17=21, cno_17=0, elev_17=4, azim_17=301, prRes_17=0, flags_17=b'\\x10\\x12\\x00\\x00', gnssId_18=GLONASS, svId_18=22, cno_18=0, elev_18=15, azim_18=346, prRes_18=0, flags_18=b'\\x10\\x12\\x00\\x00', gnssId_19=GLONASS, svId_19=23, cno_19=0, elev_19=4, azim_19=47, prRes_19=0, flags_19=b'\\x10\\x12\\x00\\x00')>",
            "<UBX(NAV-SIG, iTOW=09:08:09, version=0, numSigs=12, reserved0=0, gnssId_01=GPS, svId_01=3, sigId_01=0, freqId_01=0, prRes_01=0, cno_01=0, qualityInd_01=1, corrSource_01=0, ionoModel_01=0, sigFlags_01=b'\\x01\\x00', reserved1_01=0, gnssId_02=GPS, svId_02=14, sigId_02=0, freqId_02=0, prRes_02=31, cno_02=23, qualityInd_02=4, corrSource_02=0, ionoModel_02=0, sigFlags_02=b')\\x00', reserved1_02=0, gnssId_03=GPS, svId_03=15, sigId_03=0, freqId_03=0, prRes_03=0, cno_03=26, qualityInd_03=7, corrSource_03=0, ionoModel_03=0, sigFlags_03=b'\\x01\\x00', reserved1_03=0, gnssId_04=GPS, svId_04=20, sigId_04=0, freqId_04=0, prRes_04=0, cno_04=15, qualityInd_04=4, corrSource_04=0, ionoModel_04=0, sigFlags_04=b'\\x01\\x00', reserved1_04=0, gnssId_05=GPS, svId_05=23, sigId_05=0, freqId_05=0, prRes_05=0, cno_05=17, qualityInd_05=4, corrSource_05=0, ionoModel_05=0, sigFlags_05=b'\\x01\\x00', reserved1_05=0, gnssId_06=GPS, svId_06=24, sigId_06=0, freqId_06=0, prRes_06=-3, cno_06=36, qualityInd_06=7, corrSource_06=0, ionoModel_06=0, sigFlags_06=b')\\x00', reserved1_06=0, gnssId_07=GPS, svId_07=30, sigId_07=0, freqId_07=0, prRes_07=0, cno_07=16, qualityInd_07=4, corrSource_07=0, ionoModel_07=0, sigFlags_07=b'\\x01\\x00', reserved1_07=0, gnssId_08=SBAS, svId_08=127, sigId_08=0, freqId_08=0, prRes_08=0, cno_08=0, qualityInd_08=1, corrSource_08=0, ionoModel_08=0, sigFlags_08=b'\\x00\\x00', reserved1_08=0, gnssId_09=BeiDou, svId_09=15, sigId_09=0, freqId_09=0, prRes_09=0, cno_09=0, qualityInd_09=1, corrSource_09=0, ionoModel_09=0, sigFlags_09=b'\\x00\\x00', reserved1_09=0, gnssId_10=GLONASS, svId_10=5, sigId_10=0, freqId_10=8, prRes_10=53, cno_10=22, qualityInd_10=4, corrSource_10=0, ionoModel_10=0, sigFlags_10=b')\\x00', reserved1_10=0, gnssId_11=GLONASS, svId_11=14, sigId_11=0, freqId_11=0, prRes_11=0, cno_11=23, qualityInd_11=4, corrSource_11=0, ionoModel_11=0, sigFlags_11=b'\\x01\\x00', reserved1_11=0, gnssId_12=GLONASS, svId_12=15, sigId_12=0, freqId_12=7, prRes_12=9, cno_12=36, qualityInd_12=7, corrSource_12=0, ionoModel_12=0, sigFlags_12=b')\\x00', reserved1_12=0)>",
            "<UBX(NAV-STATUS, iTOW=09:08:09, gpsFix=3, flags=b']', fixStat=b'\\x00', flags2=b'\\x08', ttff=179368, msss=366244)>",
            "<UBX(NAV-POSECEF, iTOW=09:08:09, ecefX=380363892, ecefY=-14879221, ecefZ=510062895, pAcc=6570)>",
            "<UBX(NAV-POSLLH, iTOW=09:08:09, lon=-22401762, lat=534506799, height=72728, hMSL=24245, hAcc=55374, vAcc=35349)>",
            "<UBX(NAV-DOP, iTOW=09:08:09, gDOP=570, pDOP=520, tDOP=233, vDOP=276, hDOP=441, nDOP=410, eDOP=161)>",
            "<UBX(NAV-VELECEF, iTOW=09:08:09, ecefVX=-25, ecefVY=-4, ecefVZ=27, sAcc=451)>",
            "<UBX(NAV-VELNED, iTOW=09:08:09, velN=36, velE=-5, velD=-7, speed=37, gSpeed=37, heading=0, sAcc=451, cAcc=13597116)>",
            "<UBX(NAV-TIMEGPS, iTOW=09:08:09, fTOW=332986, week=2146, leapS=18, valid=b'\\x07', tAcc=71)>",
            "<UBX(NAV-TIMEGLO, iTOW=09:08:09, TOD=43687, fTOD=332964, Nt=419, N4=7, valid=b'\\x03', tAcc=101)>",
            "<UBX(NAV-TIMEBDS, iTOW=09:08:09, SOW=119291, fSOW=332986, week=790, leapS=4, valid=b'\\x07', tAcc=3406)>",
            "<UBX(NAV-TIMEGAL, iTOW=09:08:09, galTow=119305, fGalTow=332986, galWno=1122, leapS=18, valid=b'\\x07', tAcc=3406)>",
            "<UBX(NAV-TIMEUTC, iTOW=09:08:09, tAcc=1071, nano=332985, year=2021, month=2, day=22, hour=9, min=8, sec=7, validflags=b'\\xf7')>",
            "<UBX(NAV-TIMELS, iTOW=09:08:09, version=0, reserved1=0, srcOfCurrLs=255, currLs=18, srcOfLsChange=6, lsChange=0, timeToLsEvent=-32887, dateOfLsGpsWn=2146, dateOfLsGpsDn=1, reserved2=0, valid=b'\\x03')>",
            "<UBX(NAV-TIMEQZSS, iTOW=09:08:09, qzssTow=119305, fQzssTow=332986, qzssWno=2146, leapS=18, valid=b'\\x07', tAcc=3406)>",
            "<UBX(NAV-CLOCK, iTOW=09:08:09, clkB=667014, clkD=-71, tAcc=71, fAcc=5239)>",
            "<UBX(NAV-SBAS, iTOW=09:08:09, geo=0, mode:=0, sys=0, service=b'\\x00', numCh=0, reserved0=0)>",
            "<UBX(NAV-SLAS, iTOW=09:08:09, version=0, reserved1=0, gmsLon=0, gmsLat=0, gmsCode=0, qzssSvId=0, serviceFlags=b'\\x00', cnt=0)>",
            "<UBX(NAV-AOPSTATUS, iTOW=09:08:09, config=1, status=0, reserved0=0, reserved1=10, avail=0, reserved2=0, reserved3=0)>",
            "<UBX(NAV-ODO, version=0, reserved0=466035, iTOW=09:08:09, distance=0, totalDistance=0, distanceStd=0)>",
            "<UBX(NAV-COV, iTOW=09:08:09, version=0, posCovValid=1, velCovValid=1, reserved0=1172170281114452235776, posCovNN=2530.31201171875, posCovNE=-856.8651123046875, posCovND=-1116.0887451171875, posCovEE=535.9963989257812, posCovED=742.3728637695312, posCovDD=1249.5338134765625, velCovNN=17.608617782592773, velCovNE=-4.361900329589844, velCovND=-5.844054222106934, velCovEE=2.3484761714935303, velCovED=2.9350130558013916, velCovDD=4.592257499694824)>",
            "<UBX(NAV-EELL, iTOW=09:08:09, version=0, reserved1=0, errEllipseOrient=15966, errEllipseMajor=132667, errEllipseMinor=36740)>",
            "<UBX(NAV-GEOFENCE, iTOW=09:08:09, version=0, status=0, numFences=0, combState=0)>",
        )

        i = 0
        raw = 0
        ubxreader = UBXReader(self.streamMIX2, False)
        while raw is not None:
            (raw, parsed) = ubxreader.read()
            if raw is not None:
                self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
                i += 1
예제 #14
0
    def testIterator(self):  # test iterator function with UBX data stream
        EXPECTED_RESULTS = (
            "<UBX(RXM-MEASX, version=1, reserved0=0, gpsTOW=231234000, gloTOW=242016000, bdsTOW=231220000, reserved1=231234000, qzssTOW=1000, gpsTOWacc=0, gloTOWacc=0, bdsTOWacc=0, reserved2=0, qzssTOWacc=0, numSv=9, flags=46, reserved3=0, gnssId_01=QZSS, svId_01=1, cNo_01=12, mpathIndic_01=1, dopplerMS_01=11538, dopplerHz_01=12126, wholeChips_01=809, fracChips_01=24, codePhase_01=1658502, intCodePhase_01=0, pseuRangeRMSErr_01=52, reserved4_01=0, gnssId_02=GPS, svId_02=18, cNo_02=17, mpathIndic_02=1, dopplerMS_02=2646, dopplerHz_02=2781, wholeChips_02=858, fracChips_02=265, codePhase_02=1759434, intCodePhase_02=0, pseuRangeRMSErr_02=46, reserved4_02=0, gnssId_03=GPS, svId_03=28, cNo_03=18, mpathIndic_03=1, dopplerMS_03=10576, dopplerHz_03=11115, wholeChips_03=536, fracChips_03=533, codePhase_03=1099868, intCodePhase_03=0, pseuRangeRMSErr_03=46, reserved4_03=0, gnssId_04=GLONASS, svId_04=8, cNo_04=17, mpathIndic_04=1, dopplerMS_04=11949, dopplerHz_04=12797, wholeChips_04=55, fracChips_04=693, codePhase_04=228499, intCodePhase_04=0, pseuRangeRMSErr_04=46, reserved4_04=0, gnssId_05=GLONASS, svId_05=9, cNo_05=25, mpathIndic_05=1, dopplerMS_05=4320, dopplerHz_05=4614, wholeChips_05=279, fracChips_05=102, codePhase_05=1145429, intCodePhase_05=0, pseuRangeRMSErr_05=27, reserved4_05=0, gnssId_06=GLONASS, svId_06=7, cNo_06=24, mpathIndic_06=1, dopplerMS_06=-3672, dopplerHz_06=-3931, wholeChips_06=100, fracChips_06=156, codePhase_06=411030, intCodePhase_06=0, pseuRangeRMSErr_06=46, reserved4_06=0, gnssId_07=GPS, svId_07=7, cNo_07=13, mpathIndic_07=1, dopplerMS_07=-14783, dopplerHz_07=-15537, wholeChips_07=947, fracChips_07=989, codePhase_07=1943334, intCodePhase_07=0, pseuRangeRMSErr_07=52, reserved4_07=0, gnssId_08=GPS, svId_08=13, cNo_08=28, mpathIndic_08=1, dopplerMS_08=5649, dopplerHz_08=5937, wholeChips_08=239, fracChips_08=545, codePhase_08=491043, intCodePhase_08=0, pseuRangeRMSErr_08=15, reserved4_08=0, gnssId_09=GPS, svId_09=5, cNo_09=32, mpathIndic_09=1, dopplerMS_09=-9606, dopplerHz_09=-10096, wholeChips_09=220, fracChips_09=411, codePhase_09=451825, intCodePhase_09=0, pseuRangeRMSErr_09=18, reserved4_09=0)>",
            "<UBX(RXM-SVSI, iTOW=16:13:38, week=2128, numVis=24, numSV=190, svid=1, svFlag=b'_', azim=82, elev=-49, age=b'\\xf2')>",
            "<UBX(RXM-IMES, numTx=0, version=1, reserved1=0)>",
            "<UBX(RXM-SFRBX, gnssId=GPS, svId=5, reserved0=0, freqId=0, numWords=10, chn=0, version=2, reserved1=0, dwrd_01=583028782, dwrd_02=2463198336, dwrd_03=394902765, dwrd_04=2566867280, dwrd_05=1062207503, dwrd_06=675481840, dwrd_07=616371498, dwrd_08=2740700967, dwrd_09=768066377, dwrd_10=3045061856)>"
        )

        i = 0
        ubxreader = UBXReader(self.streamRXM, True)
        for (_, parsed) in ubxreader:
            self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
            i += 1
예제 #15
0
 def testRXMRLML(self):  # test parser of RXM-RLM-L message
     rxm_rlms = b"\xb5b\x02\x59\x1c\x00\x00\x02\x00\x00"
     for i in range(8):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b"\x00"
     for i in range(12):
         rxm_rlms += i.to_bytes(1, "little", signed=False)
     rxm_rlms += b"\x00\x01\x02\xda\x81"
     res = UBXReader.parse(rxm_rlms)
     self.assertEqual(
         str(res),
         "<UBX(RXM-RLM, version=0, type=2, svId=0, reserved0=0, beacon=506097522914230528, message=0, params=3416467015609337987117220096, reserved1=131328)>",
     )
예제 #16
0
 def testFill_CFGDATPARSE2(
     self,
 ):  # check that raw payload is correctly populated and parses back to original message
     EXPECTED_RESULT = "<UBX(CFG-DAT, 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,
         dX=-1.2345678,
         dY=27.40654,
     )
     res2 = UBXReader.parse(res.serialize(), msgmode=SET)
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #17
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 = UBXReader.parse(res.serialize())
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #18
0
파일: ubxdump.py 프로젝트: Nerolf05/pyubx2
def stream_ubx(**kwargs):
    """
    Stream output to terminal.

    :param int port: (kwarg)  baud rate (/dev/ttyACM1)
    :param int baud: (kwarg) baud rate (9600)
    :param int timeout: (kwarg) timeout in seconds (5)
    :param int ubxonly: (kwarg) set to True to generate error on non-UBX data (0)
    :param int validate: (kwarg) validate checksum (1)
    :param int parsebf: (kwarg) parse bitfields (1)
    :param int decodenavdata: (kwarg) decode RXM-SFRBX nav data (0)
    :param int output: (kwarg) 0=parsed, 1=binary, 2=hexadecimal (0)
    :param int filter: (kwarg) comma-separated list of UBX message identities to display (*)
    :raises: UBXStreamError (if ubxonly flag is 1 and stream contains non-UBX data)

    """

    try:
        port = kwargs.get("port", PORT).strip('"')
        baud = int(kwargs.get("baud", BAUD))
        timeout = int(kwargs.get("timeout", TIMEOUT))
        ubxonly = int(kwargs.get("ubxonly", 0))
        validate = int(kwargs.get("validate", VALCKSUM))
        output = int(kwargs.get("output", PARSED))
        parsebf = int(kwargs.get("parsebitfield", True))
        decodenavdata = int(kwargs.get("decodenavdata", False))
        filter = kwargs.get("filter", "*")
        filtertxt = "" if filter == "*" else f", filtered by {filter}"
        print(
            f"\nStreaming from {port} at {baud} baud in",
            f"{['parsed','binary','hexadecimal'][output]} format{filtertxt}...\n",
        )
        stream = Serial(port, baud, timeout=timeout)
        ubr = UBXReader(
            stream,
            ubxonly=ubxonly,
            validate=validate,
            msgmode=GET,
            parsebitfield=parsebf,
            decodenavdata=decodenavdata,
        )
        for (raw, parsed) in ubr:
            if filter == "*" or parsed.identity in filter:
                if output == BIN:
                    print(raw)
                elif output == HEX:
                    print(raw.hex())
                else:
                    print(parsed)
    except KeyboardInterrupt:
        print("\nStreaming terminated by user\n")
예제 #19
0
    def testINF(self):
        EXPECTED_RESULTS = (
            "<UBX(INF-NOTICE, message=u-blox AG - www.u-blox.com)>",
            "<UBX(INF-NOTICE, message=HW UBX-M8030 00080000)>",
            "<UBX(INF-NOTICE, message=ROM CORE 3.01 (107888))>",
            "<UBX(INF-NOTICE, message=FWVER=SPG 3.01)>",
            "<UBX(INF-NOTICE, message=PROTVER=18.00)>",
            "<UBX(INF-NOTICE, message=GPS;GLO;GAL;BDS)>",
            "<UBX(INF-NOTICE, message=SBAS;IMES;QZSS)>",
            "<UBX(INF-NOTICE, message=GNSS OTP=GPS;GLO)>",
            "<UBX(INF-NOTICE, message=LLC=FFFFFFFF-FFFFFFFF-FFFFFFFF-FFFFFFFF-FFFFFFFD)>",
            "<UBX(INF-NOTICE, message=ANTSUPERV=AC SD PDoS SR)>",
            "<UBX(INF-NOTICE, message=ANTSTATUS=OK)>",
            "<UBX(INF-NOTICE, message=PF=3FF)>")

        i = 0
        raw = 0
        ubxreader = UBXReader(self.streamINF, ubxonly=False)
        while raw is not None:
            (raw, parsed) = ubxreader.read()
            if raw is not None:
                self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
                i += 1
예제 #20
0
    def testNAV(self):
        EXPECTED_RESULTS = (
        "<UBX(NAV-SOL, iTOW=14:04:51, fTOW=-77264, week=2128, gpsFix=3, flags=b'\\xdd', ecefX=380363769, ecefY=-14880401, ecefZ=510064462, pAcc=2632, ecefVX=-13, ecefVY=-2, ecefVZ=-6, sAcc=114, pDOP=194, reserved1=2, numSV=10, reserved2=215776)>",
        "<UBX(NAV-PVT, iTOW=14:04:51, year=2020, month=10, day=20, hour=14, min=4, second=49, valid=b'7', tAcc=38, nano=-77262, fixType=3, flags=b'\\x01', flags2=b'\\n', numSV=10, lon=-22403544, lat=534507692, height=84862, hMSL=36378, hAcc=16719, vAcc=20330, velN=68, velE=-26, velD=131, gSpeed=73, headMot=16142809, sAcc=1139, headAcc=2991983, pDOP=194, reserved1=151580049408, headVeh=0, magDec=0, magAcc=0)>",
        "<UBX(NAV-SVINFO, iTOW=14:04:51, numCh=23, globalFlags=b'\\x04', reserved2=0, chn_01=2, svid_01=2, flags_01=b'\\r', quality_01=b'\\x07', cno_01=35, elev_01=47, azim_01=255, prRes_01=-134, chn_02=6, svid_02=4, flags_02=b'\\r', quality_02=b'\\x04', cno_02=18, elev_02=15, azim_02=70, prRes_02=734, chn_03=3, svid_03=5, flags_03=b'\\r', quality_03=b'\\x04', cno_03=22, elev_03=39, azim_03=295, prRes_03=-1203, chn_04=4, svid_04=6, flags_04=b'\\x0c', quality_04=b'\\x03', cno_04=13, elev_04=30, azim_04=194, prRes_04=43, chn_05=0, svid_05=7, flags_05=b'\\r', quality_05=b'\\x04', cno_05=12, elev_05=57, azim_05=135, prRes_05=317, chn_06=1, svid_06=9, flags_06=b'\\r', quality_06=b'\\x04', cno_06=19, elev_06=52, azim_06=73, prRes_06=1223, chn_07=20, svid_07=13, flags_07=b'\\x04', quality_07=b'\\x01', cno_07=0, elev_07=6, azim_07=244, prRes_07=0, chn_08=16, svid_08=16, flags_08=b'\\x04', quality_08=b'\\x01', cno_08=0, elev_08=14, azim_08=41, prRes_08=0, chn_09=21, svid_09=26, flags_09=b'\\x04', quality_09=b'\\x01', cno_09=0, elev_09=3, azim_09=11, prRes_09=0, chn_10=18, svid_10=29, flags_10=b'\\x04', quality_10=b'\\x04', cno_10=18, elev_10=13, azim_10=320, prRes_10=0, chn_11=15, svid_11=30, flags_11=b'\\x04', quality_11=b'\\x03', cno_11=13, elev_11=38, azim_11=174, prRes_11=0, chn_12=17, svid_12=120, flags_12=b'\\x14', quality_12=b'\\x01', cno_12=0, elev_12=28, azim_12=196, prRes_12=0, chn_13=19, svid_13=123, flags_13=b'\\x14', quality_13=b'\\x01', cno_13=0, elev_13=22, azim_13=140, prRes_13=0, chn_14=8, svid_14=136, flags_14=b'\\x14', quality_14=b'\\x01', cno_14=0, elev_14=29, azim_14=171, prRes_14=0, chn_15=12, svid_15=69, flags_15=b'\\r', quality_15=b'\\x04', cno_15=22, elev_15=29, azim_15=84, prRes_15=-832, chn_16=9, svid_16=70, flags_16=b'\\r', quality_16=b'\\x06', cno_16=26, elev_16=75, azim_16=347, prRes_16=-77, chn_17=11, svid_17=71, flags_17=b'\\r', quality_17=b'\\x04', cno_17=26, elev_17=30, azim_17=285, prRes_17=-521, chn_18=14, svid_18=78, flags_18=b'\\x04', quality_18=b'\\x01', cno_18=0, elev_18=10, azim_18=16, prRes_18=0, chn_19=10, svid_19=79, flags_19=b'\\r', quality_19=b'\\x05', cno_19=26, elev_19=42, azim_19=61, prRes_19=-177, chn_20=7, svid_20=80, flags_20=b'\\x04', quality_20=b'\\x01', cno_20=0, elev_20=33, azim_20=136, prRes_20=0, chn_21=13, svid_21=85, flags_21=b'\\r', quality_21=b'\\x04', cno_21=25, elev_21=24, azim_21=232, prRes_21=232, chn_22=5, svid_22=86, flags_22=b'\\x04', quality_22=b'\\x01', cno_22=0, elev_22=39, azim_22=290, prRes_22=0, chn_23=22, svid_23=87, flags_23=b'\\x04', quality_23=b'\\x01', cno_23=0, elev_23=7, azim_23=354, prRes_23=0)>",
        "<UBX(NAV-ORB, iTOW=14:04:51, version=1, numCh=54, reserved1=0, gnssId_01=GPS, svId_01=1, svFlag_01=b'\\x05', eph_01=b'\\x00', alm_01=b'1', otherOrb_01=b'\\x00', gnssId_02=GPS, svId_02=2, svFlag_02=b'\\r', eph_02=b'0', alm_02=b'1', otherOrb_02=b'\\x00', gnssId_03=GPS, svId_03=3, svFlag_03=b'\\x05', eph_03=b'\\x00', alm_03=b'1', otherOrb_03=b'\\x00', gnssId_04=GPS, svId_04=4, svFlag_04=b'\\x1d', eph_04=b'(', alm_04=b'1', otherOrb_04=b'\\x00', gnssId_05=GPS, svId_05=5, svFlag_05=b'\\r', eph_05=b'0', alm_05=b'1', otherOrb_05=b'\\x00', gnssId_06=GPS, svId_06=6, svFlag_06=b'\\x1d', eph_06=b'(', alm_06=b'1', otherOrb_06=b'\\x00', gnssId_07=GPS, svId_07=7, svFlag_07=b'\\x1d', eph_07=b'(', alm_07=b'1', otherOrb_07=b'\\x00', gnssId_08=GPS, svId_08=8, svFlag_08=b'\\x05', eph_08=b'\\x00', alm_08=b'1', otherOrb_08=b'\\x00', gnssId_09=GPS, svId_09=9, svFlag_09=b'\\x1d', eph_09=b'(', alm_09=b'1', otherOrb_09=b'\\x00', gnssId_10=GPS, svId_10=10, svFlag_10=b'\\x05', eph_10=b'\\x00', alm_10=b'1', otherOrb_10=b'\\x00', gnssId_11=GPS, svId_11=11, svFlag_11=b'\\x05', eph_11=b'\\x00', alm_11=b'0', otherOrb_11=b'\\x00', gnssId_12=GPS, svId_12=12, svFlag_12=b'\\x05', eph_12=b'\\x00', alm_12=b'0', otherOrb_12=b'\\x00', gnssId_13=GPS, svId_13=13, svFlag_13=b'\\r', eph_13=b'\\x00', alm_13=b'0', otherOrb_13=b'\\x00', gnssId_14=GPS, svId_14=15, svFlag_14=b'\\x05', eph_14=b'\\x00', alm_14=b'0', otherOrb_14=b'\\x00', gnssId_15=GPS, svId_15=16, svFlag_15=b'\\r', eph_15=b'\\x00', alm_15=b'0', otherOrb_15=b'\\x00', gnssId_16=GPS, svId_16=17, svFlag_16=b'\\x05', eph_16=b'\\x00', alm_16=b'1', otherOrb_16=b'\\x00', gnssId_17=GPS, svId_17=18, svFlag_17=b'\\x05', eph_17=b'\\x00', alm_17=b'0', otherOrb_17=b'\\x00', gnssId_18=GPS, svId_18=19, svFlag_18=b'\\x05', eph_18=b'\\x00', alm_18=b'0', otherOrb_18=b'\\x00', gnssId_19=GPS, svId_19=20, svFlag_19=b'\\x05', eph_19=b'\\x00', alm_19=b'0', otherOrb_19=b'\\x00', gnssId_20=GPS, svId_20=22, svFlag_20=b'\\x05', eph_20=b'\\x00', alm_20=b'1', otherOrb_20=b'\\x00', gnssId_21=GPS, svId_21=23, svFlag_21=b'\\x05', eph_21=b'\\x00', alm_21=b'1', otherOrb_21=b'\\x00', gnssId_22=GPS, svId_22=24, svFlag_22=b'\\x05', eph_22=b'\\x00', alm_22=b'1', otherOrb_22=b'\\x00', gnssId_23=GPS, svId_23=25, svFlag_23=b'\\x05', eph_23=b'\\x00', alm_23=b'1', otherOrb_23=b'\\x00', gnssId_24=GPS, svId_24=26, svFlag_24=b'\\t', eph_24=b'\\x00', alm_24=b'1', otherOrb_24=b'\\x00', gnssId_25=GPS, svId_25=27, svFlag_25=b'\\x05', eph_25=b'\\x00', alm_25=b'1', otherOrb_25=b'\\x00', gnssId_26=GPS, svId_26=28, svFlag_26=b'\\x05', eph_26=b'\\x00', alm_26=b'1', otherOrb_26=b'\\x00', gnssId_27=GPS, svId_27=29, svFlag_27=b'\\r', eph_27=b'\\x00', alm_27=b'1', otherOrb_27=b'\\x00', gnssId_28=GPS, svId_28=30, svFlag_28=b'\\r', eph_28=b'\\x00', alm_28=b'1', otherOrb_28=b'\\x00', gnssId_29=GPS, svId_29=31, svFlag_29=b'\\x05', eph_29=b'\\x00', alm_29=b'1', otherOrb_29=b'\\x00', gnssId_30=GPS, svId_30=32, svFlag_30=b'\\x05', eph_30=b'\\x00', alm_30=b'1', otherOrb_30=b'\\x00', gnssId_31=GLONASS, svId_31=1, svFlag_31=b'\\x05', eph_31=b'\\x00', alm_31=b'?', otherOrb_31=b'\\x00', gnssId_32=GLONASS, svId_32=2, svFlag_32=b'\\x05', eph_32=b'\\x00', alm_32=b'?', otherOrb_32=b'\\x00', gnssId_33=GLONASS, svId_33=3, svFlag_33=b'\\x05', eph_33=b'\\x00', alm_33=b'?', otherOrb_33=b'\\x00', gnssId_34=GLONASS, svId_34=4, svFlag_34=b'\\x05', eph_34=b'\\x00', alm_34=b'?', otherOrb_34=b'\\x00', gnssId_35=GLONASS, svId_35=5, svFlag_35=b'\\r', eph_35=b'?', alm_35=b'?', otherOrb_35=b'\\x00', gnssId_36=GLONASS, svId_36=6, svFlag_36=b'\\r', eph_36=b'?', alm_36=b'?', otherOrb_36=b'\\x00', gnssId_37=GLONASS, svId_37=7, svFlag_37=b'\\r', eph_37=b'?', alm_37=b'?', otherOrb_37=b'\\x00', gnssId_38=GLONASS, svId_38=8, svFlag_38=b'\\x05', eph_38=b'\\x00', alm_38=b'?', otherOrb_38=b'\\x00', gnssId_39=GLONASS, svId_39=9, svFlag_39=b'\\x05', eph_39=b'\\x00', alm_39=b'?', otherOrb_39=b'\\x00', gnssId_40=GLONASS, svId_40=10, svFlag_40=b'\\x05', eph_40=b'\\x00', alm_40=b'?', otherOrb_40=b'\\x00', gnssId_41=GLONASS, svId_41=11, svFlag_41=b'\\x05', eph_41=b'\\x00', alm_41=b'?', otherOrb_41=b'\\x00', gnssId_42=GLONASS, svId_42=12, svFlag_42=b'\\x05', eph_42=b'\\x00', alm_42=b'?', otherOrb_42=b'\\x00', gnssId_43=GLONASS, svId_43=13, svFlag_43=b'\\x05', eph_43=b'\\x00', alm_43=b'?', otherOrb_43=b'\\x00', gnssId_44=GLONASS, svId_44=14, svFlag_44=b'\\r', eph_44=b'\\x00', alm_44=b'?', otherOrb_44=b'\\x00', gnssId_45=GLONASS, svId_45=15, svFlag_45=b'\\r', eph_45=b'?', alm_45=b'?', otherOrb_45=b'\\x00', gnssId_46=GLONASS, svId_46=16, svFlag_46=b'\\r', eph_46=b'\\x00', alm_46=b'?', otherOrb_46=b'\\x00', gnssId_47=GLONASS, svId_47=17, svFlag_47=b'\\x05', eph_47=b'\\x00', alm_47=b'?', otherOrb_47=b'\\x00', gnssId_48=GLONASS, svId_48=18, svFlag_48=b'\\x05', eph_48=b'\\x00', alm_48=b'?', otherOrb_48=b'\\x00', gnssId_49=GLONASS, svId_49=19, svFlag_49=b'\\x05', eph_49=b'\\x00', alm_49=b'?', otherOrb_49=b'\\x00', gnssId_50=GLONASS, svId_50=20, svFlag_50=b'\\x05', eph_50=b'\\x00', alm_50=b'?', otherOrb_50=b'\\x00', gnssId_51=GLONASS, svId_51=21, svFlag_51=b'\\r', eph_51=b'?', alm_51=b'?', otherOrb_51=b'\\x00', gnssId_52=GLONASS, svId_52=22, svFlag_52=b'\\r', eph_52=b'\\x00', alm_52=b'?', otherOrb_52=b'\\x00', gnssId_53=GLONASS, svId_53=23, svFlag_53=b'\\r', eph_53=b'\\x00', alm_53=b'?', otherOrb_53=b'\\x00', gnssId_54=GLONASS, svId_54=24, svFlag_54=b'\\x05', eph_54=b'\\x00', alm_54=b'?', otherOrb_54=b'\\x00')>",
        "<UBX(NAV-SAT, iTOW=14:04:51, version=1, numCh=23, reserved11=0, reserved12=0, gnssId_01=GPS, svId_01=2, cno_01=35, elev_01=47, azim_01=255, prRes_01=-13, flags_01=b'\\x1f\\x19\\x00\\x00', gnssId_02=GPS, svId_02=4, cno_02=18, elev_02=15, azim_02=70, prRes_02=73, flags_02=b'\\x1c\\x19\\x00\\x00', gnssId_03=GPS, svId_03=5, cno_03=22, elev_03=39, azim_03=295, prRes_03=-120, flags_03=b'\\x1c\\x19\\x00\\x00', gnssId_04=GPS, svId_04=6, cno_04=13, elev_04=30, azim_04=194, prRes_04=4, flags_04=b'\\x13\\x19\\x00\\x00', gnssId_05=GPS, svId_05=7, cno_05=12, elev_05=57, azim_05=135, prRes_05=32, flags_05=b'\\x1c\\x19\\x00\\x00', gnssId_06=GPS, svId_06=9, cno_06=19, elev_06=52, azim_06=73, prRes_06=122, flags_06=b'\\x1c\\x19\\x00\\x00', gnssId_07=GPS, svId_07=13, cno_07=0, elev_07=6, azim_07=244, prRes_07=0, flags_07=b'\\x11\\x12\\x00\\x00', gnssId_08=GPS, svId_08=16, cno_08=0, elev_08=14, azim_08=41, prRes_08=0, flags_08=b'\\x11\\x12\\x00\\x00', gnssId_09=GPS, svId_09=26, cno_09=0, elev_09=3, azim_09=11, prRes_09=0, flags_09=b'\\x11\\x12\\x00\\x00', gnssId_10=GPS, svId_10=29, cno_10=18, elev_10=13, azim_10=320, prRes_10=0, flags_10=b'\\x14\\x12\\x00\\x00', gnssId_11=GPS, svId_11=30, cno_11=13, elev_11=38, azim_11=174, prRes_11=0, flags_11=b'\\x13\\x12\\x00\\x00', gnssId_12=SBAS, svId_12=120, cno_12=0, elev_12=28, azim_12=196, prRes_12=0, flags_12=b'\\x01\\x07\\x00\\x00', gnssId_13=SBAS, svId_13=123, cno_13=0, elev_13=22, azim_13=140, prRes_13=0, flags_13=b'\\x01\\x07\\x00\\x00', gnssId_14=SBAS, svId_14=136, cno_14=0, elev_14=29, azim_14=171, prRes_14=0, flags_14=b'\\x01\\x07\\x00\\x00', gnssId_15=GLONASS, svId_15=5, cno_15=22, elev_15=29, azim_15=84, prRes_15=-83, flags_15=b'\\x1c\\x19\\x00\\x00', gnssId_16=GLONASS, svId_16=6, cno_16=26, elev_16=75, azim_16=347, prRes_16=-8, flags_16=b'\\x1e\\x19\\x00\\x00', gnssId_17=GLONASS, svId_17=7, cno_17=26, elev_17=30, azim_17=285, prRes_17=-52, flags_17=b'\\x1c\\x19\\x00\\x00', gnssId_18=GLONASS, svId_18=14, cno_18=0, elev_18=10, azim_18=16, prRes_18=0, flags_18=b'\\x11\\x12\\x00\\x00', gnssId_19=GLONASS, svId_19=15, cno_19=26, elev_19=42, azim_19=61, prRes_19=-18, flags_19=b'\\x1d\\x19\\x00\\x00', gnssId_20=GLONASS, svId_20=16, cno_20=0, elev_20=33, azim_20=136, prRes_20=0, flags_20=b'\\x11\\x12\\x00\\x00', gnssId_21=GLONASS, svId_21=21, cno_21=25, elev_21=24, azim_21=232, prRes_21=23, flags_21=b'\\x1c\\x19\\x00\\x00', gnssId_22=GLONASS, svId_22=22, cno_22=0, elev_22=39, azim_22=290, prRes_22=0, flags_22=b'\\x11\\x12\\x00\\x00', gnssId_23=GLONASS, svId_23=23, cno_23=0, elev_23=7, azim_23=354, prRes_23=0, flags_23=b'\\x11\\x12\\x00\\x00')>",
        "<UBX(NAV-STATUS, iTOW=14:04:51, gpsFix=3, flags=b'\\xdd', fixStat=b'\\x00', flags2=b'\\x08', ttff=1882, msss=23382)>",
        "<UBX(NAV-POSECEF, iTOW=14:04:51, ecefX=380363769, ecefY=-14880401, ecefZ=510064462, pAcc=2632)>",
        "<UBX(NAV-POSLLH, iTOW=14:04:51, lon=-22403544, lat=534507692, height=84862, hMSL=36378, hAcc=16719, vAcc=20330)>",
        "<UBX(NAV-DOP, iTOW=14:04:51, gDOP=219, pDOP=194, tDOP=102, vDOP=154, hDOP=118, nDOP=107, eDOP=49)>",
        "<UBX(NAV-VELECEF, iTOW=14:04:51, ecefVX=-13, ecefVY=-2, ecefVZ=-6, sAcc=114)>",
        "<UBX(NAV-VELNED, iTOW=14:04:51, velN=7, velE=-3, velD=13, speed=15, gSpeed=7, heading=16142809, sAcc=114, cAcc=2991983)>",
        "<UBX(NAV-TIMEGPS, iTOW=14:04:51, fTOW=-77264, week=2128, leapS=18, valid=b'\\x07', tAcc=38)>",
        "<UBX(NAV-TIMEGLO, iTOW=14:04:51, TOD=61489, fTOD=-77299, Nt=294, N4=7, valid=b'\\x03', tAcc=41)>",
        "<UBX(NAV-TIMEBDS, iTOW=14:04:51, SOW=223493, fSOW=-77264, week=772, leapS=4, valid=b'\\x07', tAcc=3374)>",
        "<UBX(NAV-TIMEGAL, iTOW=14:04:51, galTow=223507, fGalTow=-77264, galWno=1104, leapS=18, valid=b'\\x07', tAcc=3374)>",
        "<UBX(NAV-TIMEUTC, iTOW=14:04:51, tAcc=38, nano=838860800, year=65234, month=255, day=228, hour=7, min=10, sec=20, validflags=b'\\x0e')>",
        "<UBX(NAV-TIMELS, iTOW=14:04:51, version=0, reserved1=0, srcOfCurrLs=2, currLs=18, srcOfLsChange=2, lsChange=0, timeToLsEvent=34854912, dateOfLsGpsWn=2185, dateOfLsGpsDn=7, reserved2=0, valid=b'\\x03')>",
        "<UBX(NAV-CLOCK, iTOW=14:04:51, clkB=77264, clkD=346, tAcc=38, fAcc=1902)>",
        "<UBX(NAV-SBAS, iTOW=14:04:51, geo=0, mode:=0, sys=0, service=b'\\x00', numCh=0, reserved0=0)>",
        "<UBX(NAV-DGPS, iTOW=14:04:51, age=0, baseId=0, baseHealth=0, numCh=0, status=0, reserved1=0)>",
        "<UBX(NAV-AOPSTATUS, iTOW=14:04:51, config=0, status=0, reserved0=0, reserved1=10, avail=0, reserved2=0, reserved3=0)>",
        "<UBX(NAV-ODO, version=0, reserved13=67, iTOW=04:17:36.641000, distance=3410, totalDistance=0, distanceStd=0)>",
        "<UBX(NAV-GEOFENCE, iTOW=14:04:51, version=0, status=0, numFences=0, combState=0)>",
        "<UBX(NAV-EOE, iTOW=14:04:51)>"
        )

        i = 0
        raw = 0
        ubxreader = UBXReader(self.streamNAV)
        while raw is not None:
            (raw, parsed) = ubxreader.read()
            if raw is not None:
                self.assertEqual(str(parsed), EXPECTED_RESULTS[i])
                i += 1
예제 #21
0
    def connect(self):
        """
        Open serial connection.
        """

        self._connected = False
        try:
            print(
                f"Connecting to serial port {self._port} at {self._baudrate} baud..."
            )
            self._serial_object = Serial(self._port,
                                         self._baudrate,
                                         timeout=self._timeout)
            self._ubxreader = UBXReader(
                BufferedReader(self._serial_object),
                protfilter=UBX_PROTOCOL,
                validate=self._validate,
                msgmode=GET,
            )
            self._connected = True
        except (SerialException, SerialTimeoutException) as err:
            print(f"Error connecting to serial port {err}")

        return self._connected
예제 #22
0
 def testFill_CFGDOSCPARSE(
     self
 ):  # test CFG-DOSC 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 = UBXReader.parse(res.serialize())
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #23
0
 def testFill_CFGDOSCPARSE(
     self,
 ):  # test CFG-DOSC 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, isCalibrated_01=0, controlIf_01=0, freq_01=53.0, phaseOffset_01=26, withTemp_01=0.0, withAge_01=0.0, timeToTemp_01=0, reserved3_01=0, gainVco_01=4.0, gainUncertainty_01=0.296875, 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=0.3,
     )
     res2 = UBXReader.parse(res.serialize())
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #24
0
def stream_ubx(**kwargs):
    """
    Stream output
    """

    try:
        port = kwargs.get("port", PORT).strip('"')
        baud = int(kwargs.get("baud", BAUD))
        timeout = int(kwargs.get("timeout", TIMEOUT))
        ubx_only = int(kwargs.get("ubx_only", 0))
        rawformat = int(kwargs.get("raw", 0))
        print(f"\nStreaming from {port} at {baud} baud in",
              f"{'raw' if rawformat else 'parsed'} format...\n")
        stream = Serial(port, baud, timeout=timeout)
        ubr = UBXReader(stream, ubx_only)
        for (raw, parsed) in ubr:
            if rawformat:
                print(raw)
            else:
                print(parsed)
    except KeyboardInterrupt:
        print("\nStreaming terminated by user\n")
예제 #25
0
 def testNavSat5(self):  # check message bytes match original byte stream
     res = UBXReader.parse(self.nav_sat4)
     self.assertEqual(res.serialize(), self.nav_sat4)
예제 #26
0
class GPSReader:
    """
    GPSReader class
    """
    def __init__(self, port, baudrate, timeout=5, ubx_only=False):
        """
        Constructor.
        """

        self._serial_object = None
        self._serial_thread = None
        self._ubxreader = None
        self._connected = False
        self._reading = False
        self._port = port
        self._baudrate = baudrate
        self._timeout = timeout
        self._ubx_only = ubx_only

    def __del__(self):
        """
        Destructor.
        """

        self.disconnect()

    def connect(self):
        """
        Open serial connection.
        """

        self._connected = False
        try:
            self._serial_object = Serial(self._port,
                                         self._baudrate,
                                         timeout=self._timeout)
            self._ubxreader = UBXReader(BufferedReader(self._serial_object,
                                                       buffer_size=1),
                                        ubxonly=self._ubx_only)
            self._connected = True
        except (SerialException, SerialTimeoutException) as err:
            print(f"Error connecting to serial port {err}")

        return self._connected

    def disconnect(self):
        """
        Close serial connection.
        """

        if self._connected and self._serial_object:
            try:
                self._serial_object.close()
            except (SerialException, SerialTimeoutException) as err:
                print(f"Error disconnecting from serial port {err}")
        self._connected = False

        return self._connected

    def read(self):
        """
        """
        if self._serial_object:
            if self._serial_object.in_waiting:
                try:
                    (raw_data, parsed_data) = self._ubxreader.read()
                    if parsed_data:
                        return parsed_data
                except (
                        ube.UBXStreamError,
                        ube.UBXMessageError,
                        ube.UBXTypeError,
                        ube.UBXParseError,
                ) as err:
                    print(f"Something went wrong {err}")
                    return False
        return False

    '''
    def start_read_thread(self):
        """
        Start the serial reader thread.
        """

        if self._connected:
            self._reading = True
            self._serial_thread = Thread(target=self._read_thread, daemon=True)
            self._serial_thread.start()

    def stop_read_thread(self):
        """
        Stop the serial reader thread.
        """

        if self._serial_thread is not None:
            self._reading = False

    '''

    def _send(self, data):
        """
        Send data to serial connection.
        """

        self._serial_object.write(data)

    def config_msg(self, config):
        """
        Creates a series of CFG-MSG configuration messages and
        sends them to the receiver.
        """

        try:

            msgs = []

            # compile all the UBX-NAV config message types
            for key, val in UBX_MSGIDS.items():
                if val == "NAV-PVT":
                    # if val[0:3] == "NAV":
                    msgs.append(key)

            # send each UBX-NAV config message in turn
            for msgtype in msgs:
                payload = msgtype + config
                msg = UBXMessage("CFG", "CFG-MSG", SET, payload=payload)
                print(f"Sending {msg}")
                self._send(msg.serialize())
                sleep(1)

        except (ube.UBXMessageError, ube.UBXTypeError,
                ube.UBXParseError) as err:
            print(f"Something went wrong {err}")

    def config_timepulse(self):
        '''
        Not working.
        '''
        try:
            # {'tpIdx': 'U001', 'reserved0': 'U001', 'reserved1': 'U002', 'antCableDelay': 'I002', 'rfGroupDelay': 'I002',
            # 'freqPeriod': 'U004', 'freqPeriodLock': 'U004', 'pulseLenRatio': 'U004', 'pulseLenRatioLock': 'U004',
            # 'userConfigDelay': 'I004', 'flags': 'X004'}
            payload = {
                "tpIdx": 0,  # b"\x00", # timepulse selection
                # 0x00, # message version
                "reserved0": int.from_bytes(b"\x00", "little"),  # reserved
                "reserved1": int.from_bytes(b"\x00", "little"),  # reserved
                "antCableDelay": int.from_bytes(b"\x00\x00",
                                                "little"),  # Antenna delay
                "rfGroupDelay": int.from_bytes(b"\x00\x00",
                                               "little"),  # RF delay
                "freqPeriod": int.from_bytes(b"\x01\x00\x00\x00",
                                             "little"),  # frequency in Hz
                "freqPeriodLock": int.from_bytes(
                    b"\x01\x00\x00\x00",
                    "little"),  # frequency in Hz when GPS time is locked in
                "pulseLenRatio": int.from_bytes(b"\xff\xff\xff\x7f",
                                                "little"),  # 50% pulse width
                "pulseLenRatioLock": int.from_bytes(
                    b"\xff\xff\xff\x7f",
                    "little"),  # 50% pulse width when locked to GPS time
                "userConfigDelay":
                int.from_bytes(b"\x00\x00\x00\x00",
                               "little"),  # user configurable delay
                "flags": b"\x00\x00\x00\x69"  # flags
            }
            msg = UBXMessage("CFG", "CFG-TP5", SET, **payload)
            print(f"Sending {msg.serialize()}")
            self._send(msg.serialize())
            sleep(1)
        except (ube.UBXMessageError, ube.UBXTypeError,
                ube.UBXParseError) as err:
            print(f"Something went wrong {err}")

    def config_timepulse_badly(self):
        custom_string = b"\xb5\x62\x06\x31\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\x7f\xff\xff\xff\x7f\x00\x00\x00\x00\x69\x00\x00\x00\xba\x37"
        print(f"Sending {custom_string}")
        self._send(custom_string)
        sleep(0.1)

    def flush(self):
        """
        Flush input buffer
        """

        self._serial_object.reset_input_buffer()

    def waiting(self):
        """
        Check if any messages remaining in the input buffer
        """

        return self._serial_object.in_waiting

    '''
예제 #27
0
 def testFill_CFGNMEAPOLL2(self):  # test POLL constructor, no payload
     EXPECTED_RESULT = "<UBX(CFG-NMEA)>"
     res = UBXMessage("CFG", "CFG-NMEA", POLL)
     res2 = UBXReader.parse(res.serialize())
     self.assertEqual(str(res2), EXPECTED_RESULT)
예제 #28
0
 def testNavVelNed(self):
     res = UBXReader.parse(self.nav_velned, validate=VALCKSUM)
     self.assertIsInstance(res, UBXMessage)
예제 #29
0
 def testCfgProp2(self):
     res = UBXReader.parse(self.cfg_msg)
     self.assertEqual(res.rateSPI, 0)
예제 #30
0
 def testCfgProp1(self):
     res = UBXReader.parse(self.cfg_msg, validate=VALCKSUM)
     self.assertEqual(res.rateUART1, 1)