def test_not_equal(self): c1 = UbxCID(0x05, 0x00) c2 = UbxCID(0x05, 0x01) assert c1 != c2 c1 = UbxCID(0x05, 0x01) c2 = UbxCID(0x06, 0x01) assert c1 != c2
def test_immutable(self): c1 = UbxCID(0x05, 0x01) with pytest.raises(AttributeError): c1.cls = 0x06 with pytest.raises(AttributeError): c1.id = 0x44 res = str(c1) assert res == 'cls:05 id:01'
def process(self, data): for d in data: if self.state == __class__.State.INIT: if d == UbxFrame.SYNC_1: self.state = __class__.State.SYNC elif self.state == __class__.State.SYNC: if d == UbxFrame.SYNC_2: self._reset() self.state = __class__.State.CLASS else: self.state = __class__.State.INIT elif self.state == __class__.State.CLASS: self.msg_class = d self.checksum.add(d) self.state = __class__.State.ID elif self.state == __class__.State.ID: self.msg_id = d self.checksum.add(d) self.state = __class__.State.LEN1 elif self.state == __class__.State.LEN1: self.msg_len = d self.checksum.add(d) self.state = __class__.State.LEN2 elif self.state == __class__.State.LEN2: self.msg_len = self.msg_len + (d * 256) self.checksum.add(d) # TODO: Handle case with len = 0 -> goto CRC directly # TODO: Handle case with unreasonable size self.ofs = 0 self.state = __class__.State.DATA elif self.state == __class__.State.DATA: self.msg_data.append(d) self.checksum.add(d) self.ofs += 1 if self.ofs == self.msg_len: self.state = __class__.State.CRC1 elif self.state == __class__.State.CRC1: self.cka = d self.state = __class__.State.CRC2 elif self.state == __class__.State.CRC2: self.ckb = d # if checksum matches received checksum put frame in receive queue if self.checksum.matches(self.cka, self.ckb): # Send CID and data as tuple to server self.rx_queue.put((UbxCID(self.msg_class, self.msg_id), self.msg_data)) else: logger.warning(f'checksum error in frame, discarding') self._reset() self.state = __class__.State.INIT
def test_frame_construct(self, frame_factory): frame_factory.register(UbxAckAck) data = bytearray.fromhex('11 22') f = frame_factory.build_with_data(UbxAckAck.CID, data) assert f.CID == UbxCID(0x05, 0x01) assert f.f.clsId == 0x11 assert f.f.msgId == 0x22
def __init__(self, device_name=None): super().__init__() self.device_name = device_name self.selected_device = None self.cmd_header = None self.connect_msg = f'?WATCH={{"enable":true,"raw":2}}'.encode() self.enabled = False self.listen_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.response_queue = queue.Queue() self.parser = UbxParser(self.response_queue) self.thread_ready_event = threading.Event() self.thread_stop_event = threading.Event() self.frame_factory = FrameFactory.getInstance() self.wait_cid = None self.gpsd_errors = 0 self.cid_error = UbxCID(0x00, 0x01)
class UbxEsfMeas_(UbxFrame): CID = UbxCID(0x10, 0x02) NAME = 'UBX-ESF-MEAS'
class UbxEsfStatus_(UbxFrame): CID = UbxCID(0x10, 0x10) NAME = 'UBX-ESF-STATUS'
class UbxCfgTp5_(UbxFrame): CID = UbxCID(0x06, 0x31) NAME = 'UBX-CFG-TP5'
class UbxCfgRst_(UbxFrame): NAME = 'UBX-CFG-RST' CID = UbxCID(0x06, 0x04)
class UbxCfgNav5_(UbxFrame): CID = UbxCID(0x06, 0x24) NAME = 'UBX-CFG-NAV5'
class UbxEsfAlg_(UbxFrame): CID = UbxCID(0x10, 0x14) NAME = 'UBX-ESF-ALG'
def test_equal(self): c1 = UbxCID(0x05, 0x01) c2 = UbxCID(0x05, 0x01) assert c1 == c2
def test_print(self): c = UbxCID(0x05, 0x01) res = str(c) assert res == 'cls:05 id:01'
class UbxCfgEsfAlg_(UbxFrame): CID = UbxCID(0x06, 0x56) NAME = 'UBX-CFG-ESFALG'
class UbxMonVer_(UbxFrame): CID = UbxCID(0x0A, 0x04) NAME = 'UBX-MON-VER'
def test_unkown_frame(self, frame_factory): frame_factory.register(UbxAckAck) with pytest.raises(KeyError): m = frame_factory.build(UbxCID(99, 99))
def test_registration(self, frame_factory): frame_factory.register(UbxAckAck) f1 = frame_factory.build(UbxCID(5, 1)) assert type(f1) == UbxAckAck
class UbxCfgPrt_(UbxFrame): CID = UbxCID(0x06, 0x00) NAME = 'UBX-CFG-PRT' PORTID_Uart = 1
class UbxEsfResetAlgAction(UbxFrame): CID = UbxCID(0x10, 0x13) NAME = 'UBX-ESF-RESETALG' def __init__(self): super().__init__()
class UbxCfgGnss_(UbxFrame): CID = UbxCID(0x06, 0x3E) NAME = 'UBX-CFG-GNSS'
class UbxNavStatus_(UbxFrame): CID = UbxCID(0x01, 0x03) NAME = 'UBX-NAV-STATUS'
class UbxUpdSos_(UbxFrame): NAME = 'UBX-UPD-SOS' CID = UbxCID(0x09, 0x14)
class UbxMgaIniTimeUtc_(UbxFrame): CID = UbxCID(0x13, 0x40) NAME = 'UBX-MGA-INI-TIME_UTC'
def test_creation(self): c = UbxCID(0x05, 0x01) assert c.cls == 0x05 assert c.id == 0x01
class UbxCfgNmea_(UbxFrame): CID = UbxCID(0x06, 0x17) NAME = 'UBX-CFG-NMEA'
class UbxCfgCfg_(UbxFrame): NAME = 'UBX-CFG-CFG' CID = UbxCID(0x06, 0x09)