summaryrefslogtreecommitdiff
path: root/decoders
diff options
context:
space:
mode:
authorGerhard Sittig <gerhard.sittig@gmx.net>2020-08-01 09:17:37 +0200
committerGerhard Sittig <gerhard.sittig@gmx.net>2020-08-30 10:24:33 +0200
commitf559daba9dff62b836ac031bf7b77f0d4412032c (patch)
tree9f154e3f59674f023dcdc8c77fcfe693efa3ed24 /decoders
parent302266c00577e9ebb11b91fd000ac397271b4662 (diff)
downloadlibsigrokdecode-f559daba9dff62b836ac031bf7b77f0d4412032c.tar.gz
libsigrokdecode-f559daba9dff62b836ac031bf7b77f0d4412032c.zip
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.
Diffstat (limited to 'decoders')
-rw-r--r--decoders/ir_nec/pd.py27
1 files changed, 19 insertions, 8 deletions
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)