]> sigrok.org Git - libsigrokdecode.git/commitdiff
can: Skip stuff bit inspection where not applicable
authorGerhard Sittig <redacted>
Sun, 14 May 2017 17:08:37 +0000 (19:08 +0200)
committerUwe Hermann <redacted>
Fri, 26 May 2017 13:49:49 +0000 (15:49 +0200)
Bit stuffing does not apply to the last fields of a frame, specifically
the CRC delimiter, the ACK, and the end-of-frame fields. Adjust the
respective bit handling logic.

This fixes bug #656.

decoders/can/pd.py

index 46054cda851865be1abc33c911368cb9761f4832..375069f2042a1b1ea0d10a36857fc874cc27fc16 100644 (file)
@@ -113,6 +113,9 @@ class Decoder(srd.Decoder):
     def is_stuff_bit(self):
         # CAN uses NRZ encoding and bit stuffing.
         # After 5 identical bits, a stuff bit of opposite value is added.
+        # But not in the CRC delimiter, ACK, and end of frame fields.
+        if len(self.bits) > self.last_databit + 16:
+            return False
         last_6_bits = self.rawbits[-6:]
         if last_6_bits not in ([0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 0]):
             return False