Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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']
Exemplo n.º 3
0
class PDUv0Tx(codec.Envelope):
    STRUCT = (
        Header(ver=0),
        codec.Uint32BE('fn'),
        codec.Uint('pwr'),
        codec.Buf('hard-bits'),
    )
Exemplo n.º 4
0
 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'),
     )
Exemplo n.º 5
0
 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'),
     )
Exemplo n.º 6
0
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'),
    )
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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'),
    )
Exemplo n.º 9
0
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'),
    )
Exemplo n.º 10
0
 def test_uint8(self):
     self._test_uint(codec.Uint('foo'), 'B', range(2**8))