summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerhard Sittig <gerhard.sittig@gmx.net>2020-07-25 17:48:07 +0200
committerGerhard Sittig <gerhard.sittig@gmx.net>2020-07-25 23:13:05 +0200
commit34ed4b3fb179f4ff7972879534a7395c90fe8d84 (patch)
tree71875d2e74d82d02fc9c5ed8d6565f40ef03a054
parent32d1c3503d2c5402140c31fab37438861e0d7cb3 (diff)
downloadlibsigrokdecode-34ed4b3fb179f4ff7972879534a7395c90fe8d84.tar.gz
libsigrokdecode-34ed4b3fb179f4ff7972879534a7395c90fe8d84.zip
ir_nec: rephrase annotation logic, symbolic names, format() call
Eliminate magic numbers, use symbolic names for annotation classes and pin numbers. Also vertically align text variants for zoom levels in the more complex cases, to simplify maintenance. Prefer .format() calls to improve readability in the more complex invocations.
-rw-r--r--decoders/ir_nec/pd.py62
1 files changed, 40 insertions, 22 deletions
diff --git a/decoders/ir_nec/pd.py b/decoders/ir_nec/pd.py
index 3ee3716..2e547d5 100644
--- a/decoders/ir_nec/pd.py
+++ b/decoders/ir_nec/pd.py
@@ -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':