def test_offset_mult(self): with self.subTest('encode / decode with offset=5'): field = codec.Uint('foo', offset=5) self.assertEqual(field.to_bytes({'foo': 10}), b'\x05') self.assertEqual(field.to_bytes({'foo': 5}), b'\x00') vals = {'foo': 'overriden'} field.from_bytes(vals, b'\xff') self.assertEqual(vals['foo'], 260) field.from_bytes(vals, b'\x00') self.assertEqual(vals['foo'], 5) with self.subTest('encode / decode with mult=2'): field = codec.Uint('foo', mult=2) self.assertEqual(field.to_bytes({'foo': 0}), b'\x00') self.assertEqual(field.to_bytes({'foo': 3}), b'\x01') self.assertEqual(field.to_bytes({'foo': 32}), b'\x10') self.assertEqual(field.to_bytes({'foo': 64}), b'\x20') vals = {'foo': 'overriden'} field.from_bytes(vals, b'\x00') self.assertEqual(vals['foo'], 0 * 2) field.from_bytes(vals, b'\x0f') self.assertEqual(vals['foo'], 15 * 2) field.from_bytes(vals, b'\xff') self.assertEqual(vals['foo'], 255 * 2)
class TLV(codec.Envelope): STRUCT = ( codec.Uint('T'), codec.Uint('L'), codec.Buf('V'), ) def __init__(self, *args, **kw) -> None: codec.Envelope.__init__(self, *args, **kw) self.STRUCT[-2].get_val = lambda v: len(v['V']) self.STRUCT[-1].get_len = lambda v, _: v['L']
class PDUv0Tx(codec.Envelope): STRUCT = ( Header(ver=0), codec.Uint32BE('fn'), codec.Uint('pwr'), codec.Buf('hard-bits'), )
class BPDU(codec.Envelope): ''' Batched PDU part. ''' STRUCT = ( Header(ver=2, batched=True), MTS(), codec.Uint('pwr'), codec.Int('scpir'), codec.Spare(len=3), BurstBits('hard-bits'), )
class BPDU(codec.Envelope): ''' Batched PDU part. ''' STRUCT = ( Header(ver=2, batched=True), MTS(), codec.Uint('rssi', mult=-1), codec.Int16BE('toa256'), codec.Int16BE('cir'), BurstBits('soft-bits'), )
class PDUv1Rx(codec.Envelope): STRUCT = ( Header(ver=1), codec.Uint32BE('fn'), codec.Uint('rssi', mult=-1), codec.Int16BE('toa256'), MTS(), codec.Int16BE('cir'), BurstBits('soft-bits'), )
class PDUv0Rx(codec.Envelope): STRUCT = ( Header(ver=0), codec.Uint32BE('fn'), codec.Uint('rssi', mult=-1), codec.Int16BE('toa256'), codec.Buf('soft-bits'), codec.Buf('pad'), # Optional ) def __init__(self, *args, **kw): codec.Envelope.__init__(self, *args, **kw) # Field 'soft-bits' is either 148 (GMSK) or 444 (8-PSK) octets long self.STRUCT[-2].get_len = lambda _, data: 444 if len(data ) > 148 else 148
class PDUv2Tx(codec.Envelope): class BPDU(codec.Envelope): ''' Batched PDU part. ''' STRUCT = ( Header(ver=2, batched=True), MTS(), codec.Uint('pwr'), codec.Int('scpir'), codec.Spare(len=3), BurstBits('hard-bits'), ) STRUCT = ( Header(ver=2), MTS(), codec.Uint('pwr'), codec.Int('scpir'), codec.Spare(len=3), codec.Uint32BE('fn'), BurstBits('hard-bits'), codec.Sequence(item=BPDU()).f('bpdu'), )
class PDUv2Rx(codec.Envelope): class BPDU(codec.Envelope): ''' Batched PDU part. ''' STRUCT = ( Header(ver=2, batched=True), MTS(), codec.Uint('rssi', mult=-1), codec.Int16BE('toa256'), codec.Int16BE('cir'), BurstBits('soft-bits'), ) STRUCT = ( Header(ver=2), MTS(), codec.Uint('rssi', mult=-1), codec.Int16BE('toa256'), codec.Int16BE('cir'), codec.Uint32BE('fn'), BurstBits('soft-bits'), codec.Sequence(item=BPDU()).f('bpdu'), )
def test_uint8(self): self._test_uint(codec.Uint('foo'), 'B', range(2**8))