]> sigrok.org Git - libsigrokdecode.git/commitdiff
common: add LSB/MSB first bitpack variant with optional index
authorGerhard Sittig <redacted>
Thu, 23 Jul 2020 15:23:24 +0000 (17:23 +0200)
committerGerhard Sittig <redacted>
Sun, 26 Jul 2020 12:38:18 +0000 (14:38 +0200)
The CAN decoder collects bits in MSB first order. The SIRC decoder keeps
lists of tuples with bits and their ss/es. Introduce common logic for
LSB and MSB first arguments, and optional array index access, to reduce
redundancy at callers'.

decoders/common/srdhelper/mod.py

index 6c45af98b7ae9232b8d115caafa6478801436d20..b56cce6df3dbb2385136f462ac7af45fc11e706c 100644 (file)
@@ -31,6 +31,20 @@ def bin2int(s: str):
 def bitpack(bits):
     return sum([b << i for i, b in enumerate(bits)])
 
+def bitpack_lsb(bits, idx=None):
+    '''Conversion from LSB first bit sequence to integer.'''
+    if idx is not None:
+        bits = [b[idx] for b in bits]
+    return bitpack(bits)
+
+def bitpack_msb(bits, idx=None):
+    '''Conversion from MSB first bit sequence to integer.'''
+    bits = bits[:]
+    if idx is not None:
+        bits = [b[idx] for b in bits]
+    bits.reverse()
+    return bitpack(bits)
+
 def bitunpack(num, minbits=0):
     res = []
     while num or minbits > 0: