def __init__(self): super().__init__() self.f = Fields() self.f.add(U4('iTow')) self.f.add(U1_GpsFix('gpsFix')) self.f.add(X1_Flags('flags')) self.f.add(X1('fixStat')) self.f.add(X1('flags2')) self.f.add(U4('ttff')) self.f.add(U4('msss'))
def __init__(self): super().__init__() self.f = Fields() self.f.add(U4('iTow')) self.f.add(U1('version')) self.f.add(U1_Flags('flags')) self.f.add(U1('error')) self.f.add(Padding(1, 'res1')) self.f.add(U4('yaw')) # 1e-2, 0..+360 self.f.add(I2('pitch')) # 1e-2, -90..+90 self.f.add(I2('roll')) # 1e-2, -180..180
def __init__(self): super().__init__() self.f.add(X4('bitfield')) # u-blox describes as U4, bit is X4 self.f.add(U4('yaw')) # 1e-2, 0..360° self.f.add(I2('pitch')) # 1e-2, -90..90° self.f.add(I2('roll')) # 1e-2, -180..180°
def __init__(self): super().__init__() self.f = Fields() self.f.add(U4('timeTag')) self.f.add(X2('flags')) self.f.add(U2('id')) self.f.add(X4('data'))
def __init__(self): super().__init__() self.f.add(U1('type')) self.f.add(U1('version')) self.f.add(X1('ref')) self.f.add(I1('leapSecs')) self.f.add(U2('year')) self.f.add(U1('month')) self.f.add(U1('day')) self.f.add(U1('hour')) self.f.add(U1('minute')) self.f.add(U1('second')) self.f.add(Padding(1, 'res1')) self.f.add(U4('ns')) self.f.add(U2('tAccS')) self.f.add(Padding(2, 'res2')) self.f.add(U4('tAccNs'))
def __init__(self): super().__init__() self.f = Fields() self.f.add(U4('iTow')) self.f.add(U1('version')) self.f.add(X1('bitfield0')) self.f.add(Padding(2, 'res1')) self.f.add(I4('yaw')) # 1e-1 -> more likely 1e-2 self.f.add(I2('pitch')) # 1e-1 self.f.add(I2('roll')) # 1e-1
def __init__(self): super().__init__() self.f.add(U1('PortId')) self.f.add(Padding(1, 'res1')) self.f.add(X2('txReady')) self.f.add(X4_Mode('mode')) self.f.add(U4('baudRate')) self.f.add(X2_Proto('inProtoMask')) self.f.add(X2_Proto('outProtoMask')) self.f.add(X2('flags')) self.f.add(Padding(2, 'res2'))
def test_pack1(self): u = Fields() u.add(I4('test')) u.add(U1('val')) u.add(Padding(3, 'res1')) u.add(U4('test2')) u.test = 0x76543210 u.val = 0xAF u.test2 = 0xcafebabe data = u.pack() print(data) assert data == bytearray.fromhex('10 32 54 76 AF 00 00 00 be ba fe ca')
def __init__(self): super().__init__() self.f.add(X2('mask')) self.f.add(U1('dynModel')) self.f.add(U1('fixMode')) self.f.add(I4('fixedAlt')) self.f.add(U4('fixedAltVar')) self.f.add(I1('minElev')) self.f.add(U1('drLimit')) # reserved self.f.add(U2('pDop')) self.f.add(U2('tDop')) self.f.add(U2('pAcc')) self.f.add(U2('tAcc')) self.f.add(U1('staticHoldThresh')) self.f.add(U1('dgpsTimeOut')) self.f.add(U1('cnoThreshNumSVs')) self.f.add(U1('cnoThresh')) self.f.add(U2('pAccAdr')) self.f.add(U2('staticHoldMaxDist')) self.f.add(U1('utcStandard')) self.f.add(Padding(5, 'res1'))
def unpack(self): # Dynamically build fields based on message length self.f = Fields() self.f.add(U4('iTow')) self.f.add(U1('version')) self.f.add(X1_InitStatus1('initStatus1')) self.f.add(X1_InitStatus2('initStatus2')) self.f.add(Padding(5, 'res1')) self.f.add(U1_FusionMode('fusionMode')) self.f.add(Padding(2, 'res2')) self.f.add(U1('numSens')) # Extract upto this place to read number of sensors super().unpack() # Build final list for sensor in range(self.f.numSens): self.f.add(X1_SensStatus1(f'sensStatus1_{sensor}')) self.f.add(X1_SensStatus2(f'sensStatus2_{sensor}')) self.f.add(U1(f'freq_{sensor}')) self.f.add(X1(f'faults_{sensor}')) super().unpack()