]> sigrok.org Git - libsigrokdecode.git/commitdiff
pjon: unbreak CRC32 check, adjust data length
authorGerhard Sittig <redacted>
Fri, 17 Jul 2020 07:12:17 +0000 (09:12 +0200)
committerGerhard Sittig <redacted>
Fri, 17 Jul 2020 15:13:39 +0000 (17:13 +0200)
The previous implementation unconditionally assumed a CRC width of
one byte when it calculated the checksum for received frame data.
Do reflect on the CRC8/CRC32 choice instead.

This patch is based on a fix that was
Submitted-By: Julio Aguirre <redacted>
decoders/pjon/pd.py

index 0c75f8970476be62fb50aebba417b7743e5e0b5c..f9634e139f5ae3c20ecf318f4dc0c5bafbf34b18 100644 (file)
@@ -381,12 +381,13 @@ class Decoder(srd.Decoder):
         # across meta and end checksums in a frame's fields.
         caption = 'META' if is_meta else 'END'
         crc_len = 8 if is_meta else 32 if self.cfg_crc32 else 8
+        crc_bytes = crc_len // 8
         crc_fmt = '{:08x}' if crc_len == 32 else '{:02x}'
         have_text = crc_fmt.format(have)
 
         # Check received against expected checksum. Emit warnings.
         warn_texts = []
-        data = self.frame_bytes[:-1]
+        data = self.frame_bytes[:-crc_bytes]
         want = calc_crc32(data) if crc_len == 32 else calc_crc8(data)
         if want != have:
             want_text = crc_fmt.format(want)