can: Fix incorrect stuff bit handling.
authorUwe Hermann <uwe@hermann-uwe.de>
Thu, 12 Apr 2018 07:02:38 +0000 (09:02 +0200)
committerUwe Hermann <uwe@hermann-uwe.de>
Thu, 12 Apr 2018 11:06:19 +0000 (13:06 +0200)
The decoder assumed a CRC cannot end with a stuffed bit but it actually can,
and the CRC delimiter then comes after the stuffed bit.

Patch by IRC/github user celeron55, wide testing by PeterMortensen, thanks!

decoders/can/pd.py

index 056736b85de83560b13d10283ea1ca892e393fe2..d76d649cc593bfeb7101f636cbb5b4d476d64619 100644 (file)
@@ -132,7 +132,7 @@ class Decoder(srd.Decoder):
         # 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:
+        if len(self.bits) > self.last_databit + 17:
             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]):