X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fmrf24j40%2Fpd.py;h=87022dd71b46710928e93b1213a36c4d21d03c04;hb=24ba9e1bdfe107e394176eda3116b714463a8437;hp=58d3dfde1677fd419dc05554d81c360a9692ee7d;hpb=739b654a10c34065c021f0bb1152e3a47c8b3b7d;p=libsigrokdecode.git diff --git a/decoders/mrf24j40/pd.py b/decoders/mrf24j40/pd.py index 58d3dfd..87022dd 100644 --- a/decoders/mrf24j40/pd.py +++ b/decoders/mrf24j40/pd.py @@ -33,20 +33,30 @@ class Decoder(srd.Decoder): outputs = [] tags = ['IC', 'Wireless/RF'] annotations = ( - ('sread', 'Short register read commands'), - ('swrite', 'Short register write commands'), - ('lread', 'Long register read commands'), - ('lwrite', 'Long register write commands'), - ('warning', 'Warnings'), + ('sread', 'Short register read'), + ('swrite', 'Short register write'), + ('lread', 'Long register read'), + ('lwrite', 'Long register write'), + ('warning', 'Warning'), ('tx-frame', 'TX frame'), ('rx-frame', 'RX frame'), + ('tx-retry-1', '1x TX retry'), + ('tx-retry-2', '2x TX retry'), + ('tx-retry-3', '3x TX retry'), + ('tx-fail', 'TX fail (too many retries)'), + ('ccafail', 'CCAFAIL (channel busy)'), ) annotation_rows = ( - ('read', 'Read', (0, 2)), - ('write', 'Write', (1, 3)), + ('reads', 'Reads', (0, 2)), + ('writes', 'Writes', (1, 3)), ('warnings', 'Warnings', (4,)), ('tx-frames', 'TX frames', (5,)), ('rx-frames', 'RX frames', (6,)), + ('tx-retries-1', '1x TX retries', (7,)), + ('tx-retries-2', '2x TX retries', (8,)), + ('tx-retries-3', '3x TX retries', (9,)), + ('tx-fails', 'TX fails', (10,)), + ('ccafails', 'CCAFAILs', (11,)), ) def __init__(self): @@ -93,6 +103,16 @@ class Decoder(srd.Decoder): self.putx([1, ['%s: %#x' % (reg_desc, self.mosi_bytes[1])]]) else: self.putx([0, ['%s: %#x' % (reg_desc, self.miso_bytes[1])]]) + numretries = (self.miso_bytes[1] & 0xc0) >> 6 + if reg_desc == 'TXSTAT' and numretries > 0: + txfail = 1 if ((self.miso_bytes[1] & (1 << 0)) != 0) else 0 + idx = 6 + numretries + txfail + if txfail: + self.putx([idx, ['TX fail (>= 4 retries)', 'TX fail']]) + else: + self.putx([idx, ['TX retries: %d' % numretries]]) + if reg_desc == 'TXSTAT' and (self.miso_bytes[1] & (1 << 5)) != 0: + self.putx([11, ['CCAFAIL (channel busy)', 'CCAFAIL']]) def handle_long(self): dword = self.mosi_bytes[0] << 8 | self.mosi_bytes[1]