Skip to content

Commit f2b88cb

Browse files
decoders/can: annotate decoded stuff bit count
1 parent 1d14cc7 commit f2b88cb

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

decoders/can/pd.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ class SamplerateError(Exception):
2727
def dlc2len(dlc):
2828
return [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 32, 48, 64][dlc]
2929

30+
def gray2num(gray_code):
31+
num = gray_code
32+
mask = gray_code
33+
34+
while mask:
35+
mask >>= 1
36+
num ^= mask
37+
38+
return num
39+
3040
class Decoder(srd.Decoder):
3141
api_version = 3
3242
id = 'can'
@@ -231,10 +241,13 @@ def decode_frame_end(self, can_rx, bitnum):
231241
# SBC field
232242
x = self.last_databit + 1
233243
sbc_bits = self.bits[x:x + self.last_databit + 4]
234-
sbc = bitpack_msb(sbc_bits)
244+
p_gray_sbc = bitpack_msb(sbc_bits)
245+
246+
gray_sbc = p_gray_sbc >> 1
247+
sbc = gray2num(gray_sbc) # Number of stuff bits modulo 8
235248

236-
self.putb([18, ['Raw stuff bit count: %d' % sbc,
237-
'rSBC: %d' % sbc, 'SBC']])
249+
self.putb([18, ['Stuff bit count: %d' % sbc,
250+
'SBC: %d' % sbc, 'SBC']])
238251

239252
# Remember start of FD-CRC sequence (see below).
240253
elif self.fd and bitnum == (self.last_databit + 4 + 1):

0 commit comments

Comments
 (0)