]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/ir_nec/pd.py
ir_nec: rephrase annotation logic, symbolic names, format() call
[libsigrokdecode.git] / decoders / ir_nec / pd.py
index 3ee3716b14bc3e572c521c02c0eb78916d5dc02f..2e547d5a793b5978e069fee99b6c5cd905da0acc 100644 (file)
@@ -23,6 +23,14 @@ from .lists import *
 class SamplerateError(Exception):
     pass
 
+class Pin:
+    IR, = range(1)
+
+class Ann:
+    BIT, AGC, LONG_PAUSE, SHORT_PAUSE, STOP_BIT, \
+    LEADER_CODE, ADDR, ADDR_INV, CMD, CMD_INV, REPEAT_CODE, \
+    REMOTE, WARN = range(13)
+
 class Decoder(srd.Decoder):
     api_version = 3
     id = 'ir_nec'
@@ -57,10 +65,10 @@ class Decoder(srd.Decoder):
         ('warning', 'Warning'),
     )
     annotation_rows = (
-        ('bits', 'Bits', (0, 1, 2, 3, 4)),
-        ('fields', 'Fields', (5, 6, 7, 8, 9, 10)),
-        ('remote-vals', 'Remote', (11,)),
-        ('warnings', 'Warnings', (12,)),
+        ('bits', 'Bits', (Ann.BIT, Ann.AGC, Ann.LONG_PAUSE, Ann.SHORT_PAUSE, Ann.STOP_BIT)),
+        ('fields', 'Fields', (Ann.LEADER_CODE, Ann.ADDR, Ann.ADDR_INV, Ann.CMD, Ann.CMD_INV, Ann.REPEAT_CODE)),
+        ('remote-vals', 'Remote', (Ann.REMOTE,)),
+        ('warnings', 'Warnings', (Ann.WARN,)),
     )
 
     def putx(self, data):
@@ -71,23 +79,31 @@ class Decoder(srd.Decoder):
 
     def putd(self, data):
         name = self.state.title()
-        d = {'ADDRESS': 6, 'ADDRESS#': 7, 'COMMAND': 8, 'COMMAND#': 9}
+        d = {'ADDRESS': Ann.ADDR, 'ADDRESS#': Ann.ADDR_INV,
+             'COMMAND': Ann.CMD, 'COMMAND#': Ann.CMD_INV}
         s = {'ADDRESS': ['ADDR', 'A'], 'ADDRESS#': ['ADDR#', 'A#'],
              'COMMAND': ['CMD', 'C'], 'COMMAND#': ['CMD#', 'C#']}
-        self.putx([d[self.state], ['%s: 0x%02X' % (name, data),
-                  '%s: 0x%02X' % (s[self.state][0], data),
-                  '%s: 0x%02X' % (s[self.state][1], data), s[self.state][1]]])
+        self.putx([d[self.state], [
+            '{}: 0x{:02X}'.format(name, data),
+            '{}: 0x{:02X}'.format(s[self.state][0], data),
+            '{}: 0x{:02X}'.format(s[self.state][1], data),
+            s[self.state][1],
+        ]])
 
     def putstop(self, ss):
         self.put(ss, ss + self.stop, self.out_ann,
-                 [4, ['Stop bit', 'Stop', 'St', 'S']])
+                 [Ann.STOP_BIT, ['Stop bit', 'Stop', 'St', 'S']])
 
     def putpause(self, p):
         self.put(self.ss_start, self.ss_other_edge, self.out_ann,
-                 [1, ['AGC pulse', 'AGC', 'A']])
-        idx = 2 if p == 'Long' else 3
-        self.put(self.ss_other_edge, self.samplenum, self.out_ann,
-                 [idx, [p + ' pause', '%s-pause' % p[0], '%sP' % p[0], 'P']])
+                 [Ann.AGC, ['AGC pulse', 'AGC', 'A']])
+        idx = Ann.LONG_PAUSE if p == 'Long' else Ann.SHORT_PAUSE
+        self.put(self.ss_other_edge, self.samplenum, self.out_ann, [idx, [
+            '{} pause'.format(p),
+            '{}-pause'.format(p[0]),
+            '{}P'.format(p[0]),
+            'P',
+        ]])
 
     def putremote(self):
         dev = address.get(self.addr, 'Unknown device')
@@ -96,9 +112,11 @@ class Decoder(srd.Decoder):
             btn = ['Unknown', 'Unk']
         else:
             btn = buttons.get(self.cmd, ['Unknown', 'Unk'])
-        self.put(self.ss_remote, self.ss_bit + self.stop, self.out_ann,
-                 [11, ['%s: %s' % (dev, btn[0]), '%s: %s' % (dev, btn[1]),
-                 '%s' % btn[1]]])
+        self.put(self.ss_remote, self.ss_bit + self.stop, self.out_ann, [Ann.REMOTE, [
+            '{}: {}'.format(dev, btn[0]),
+            '{}: {}'.format(dev, btn[1]),
+            '{}'.format(btn[1]),
+        ]])
 
     def __init__(self):
         self.reset()
@@ -133,7 +151,7 @@ class Decoder(srd.Decoder):
         elif self.compare_with_tolerance(tick, self.daone):
             ret = 1
         if ret in (0, 1):
-            self.putb([0, ['%d' % ret]])
+            self.putb([Ann.BIT, ['{:d}'.format(ret)]])
             self.data |= (ret << self.count) # LSB-first
             self.count = self.count + 1
         self.ss_bit = self.samplenum
@@ -151,7 +169,7 @@ class Decoder(srd.Decoder):
         if ret == 0:
             self.putd(self.data >> 8)
         else:
-            self.putx([12, ['%s error: 0x%04X' % (name, self.data)]])
+            self.putx([Ann.WARN, ['{} error: 0x{:04X}'.format(name, self.data)]])
         self.data = self.count = 0
         self.ss_bit = self.ss_start = self.samplenum
         return ret == 0
@@ -182,7 +200,7 @@ class Decoder(srd.Decoder):
             # active period, but will shift their signal changes by one
             # carrier period before they get passed to decoding logic.
             if cd_count:
-                (cur_ir,) = self.wait([{0: 'e'}, {'skip': cd_count}])
+                (cur_ir,) = self.wait([{Pin.IR: 'e'}, {'skip': cd_count}])
                 if self.matched[0]:
                     cur_ir = self.active
                 if cur_ir == prev_ir:
@@ -190,7 +208,7 @@ class Decoder(srd.Decoder):
                 prev_ir = cur_ir
                 self.ir = cur_ir
             else:
-                (self.ir,) = self.wait({0: 'e'})
+                (self.ir,) = self.wait({Pin.IR: 'e'})
 
             if self.ir != self.active:
                 # Save the non-active edge, then wait for the next edge.
@@ -203,7 +221,7 @@ class Decoder(srd.Decoder):
             if self.state == 'IDLE':
                 if self.compare_with_tolerance(b, self.lc):
                     self.putpause('Long')
-                    self.putx([5, ['Leader code', 'Leader', 'LC', 'L']])
+                    self.putx([Ann.LEADER_CODE, ['Leader code', 'Leader', 'LC', 'L']])
                     self.ss_remote = self.ss_start
                     self.data = self.count = 0
                     self.state = 'ADDRESS'
@@ -211,7 +229,7 @@ class Decoder(srd.Decoder):
                     self.putpause('Short')
                     self.putstop(self.samplenum)
                     self.samplenum += self.stop
-                    self.putx([10, ['Repeat code', 'Repeat', 'RC', 'R']])
+                    self.putx([Ann.REPEAT_CODE, ['Repeat code', 'Repeat', 'RC', 'R']])
                     self.data = self.count = 0
                 self.ss_bit = self.ss_start = self.samplenum
             elif self.state == 'ADDRESS':