]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/mrf24j40/pd.py
avr_isp: Add more parts
[libsigrokdecode.git] / decoders / mrf24j40 / pd.py
index 58d3dfde1677fd419dc05554d81c360a9692ee7d..87022dd71b46710928e93b1213a36c4d21d03c04 100644 (file)
@@ -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]