From f559daba9dff62b836ac031bf7b77f0d4412032c Mon Sep 17 00:00:00 2001 From: Gerhard Sittig Date: Sat, 1 Aug 2020 09:17:37 +0200 Subject: ir_nec: concentrate timing at the top of the source file Move IR NEC protocol timing details to the top of the source file, for raised awareness and easier adjustment. Specs are "unit-less" (only have comments), but are scaled for improved readability. Values are copies of the previous implementation. --- decoders/ir_nec/pd.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'decoders') diff --git a/decoders/ir_nec/pd.py b/decoders/ir_nec/pd.py index 3c272db..ecd2b7a 100644 --- a/decoders/ir_nec/pd.py +++ b/decoders/ir_nec/pd.py @@ -21,6 +21,17 @@ from common.srdhelper import bitpack from .lists import * import sigrokdecode as srd +# Concentrate all timing constraints of the IR protocol here in a single +# location at the top of the source, to raise awareness and to simplify +# review and adjustment. +_TIME_TOL = 5 # tolerance, in percent +_TIME_LC = 13.5 # leader code, in ms +_TIME_RC = 11.25 # repeat code, in ms +_TIME_ZERO = 1.125 # zero data bit, in ms +_TIME_ONE = 2.25 # one data bit, in ms +_TIME_STOP = 0.652 # stop bit, in ms +_TIME_IDLE = 20.0 # inter frame timeout, in ms, arbitrary choice + class SamplerateError(Exception): pass @@ -48,7 +59,7 @@ class Decoder(srd.Decoder): options = ( {'id': 'polarity', 'desc': 'Polarity', 'default': 'active-low', 'values': ('auto', 'active-low', 'active-high')}, - {'id': 'tolerance', 'desc': 'Timing tolerance (%)', 'default': 5}, + {'id': 'tolerance', 'desc': 'Timing tolerance (%)', 'default': _TIME_TOL}, {'id': 'cd_freq', 'desc': 'Carrier Frequency', 'default': 0}, {'id': 'extended', 'desc': 'Extended NEC Protocol', 'default': 'no', 'values': ('yes', 'no')}, @@ -137,13 +148,13 @@ class Decoder(srd.Decoder): self.samplerate = value def calc_rate(self): - self.tolerance = self.options['tolerance'] / 100 # 5% by default - self.lc = int(self.samplerate * 0.0135) - 1 # 13.5ms - self.rc = int(self.samplerate * 0.01125) - 1 # 11.25ms - self.dazero = int(self.samplerate * 0.001125) - 1 # 1.125ms - self.daone = int(self.samplerate * 0.00225) - 1 # 2.25ms - self.stop = int(self.samplerate * 0.000652) - 1 # 0.652ms - self.idle_to = int(self.samplerate * 0.020) - 1 # 20ms, arbitrary choice + self.tolerance = self.options['tolerance'] / 100 + self.lc = int(self.samplerate * _TIME_LC / 1000) - 1 + self.rc = int(self.samplerate * _TIME_RC / 1000) - 1 + self.dazero = int(self.samplerate * _TIME_ZERO / 1000) - 1 + self.daone = int(self.samplerate * _TIME_ONE / 1000) - 1 + self.stop = int(self.samplerate * _TIME_STOP / 1000) - 1 + self.idle_to = int(self.samplerate * _TIME_IDLE / 1000) - 1 def compare_with_tolerance(self, measured, base): return (measured >= base * (1 - self.tolerance) -- cgit v1.2.3-70-g09d2