From a631a619756ca1a5e610cb27f33a0365381dd647 Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Mon, 12 Dec 2016 16:47:01 +0000 Subject: [PATCH] pwm: handle sigrok restarting decoding With live captures, sigrok is (wastefully) resubmitting older data to the decoder. Wastefully just restart in that case. Signed-off-by: Karl Palsson --- decoders/pwm/pd.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/decoders/pwm/pd.py b/decoders/pwm/pd.py index 6ca46b1..7ee36d7 100644 --- a/decoders/pwm/pd.py +++ b/decoders/pwm/pd.py @@ -49,7 +49,7 @@ class Decoder(srd.Decoder): ('raw', 'RAW file'), ) - def __init__(self): + def reinit(self): self.ss_block = self.es_block = None self.first_transition = True self.first_samplenum = None @@ -58,12 +58,17 @@ def __init__(self): self.oldpin = None self.num_cycles = 0 self.average = 0 + self.last_ss = None + + def __init__(self): + self.reinit() def metadata(self, key, value): if key == srd.SRD_CONF_SAMPLERATE: self.samplerate = value def start(self): + self.reinit() self.startedge = 0 if self.options['polarity'] == 'active-low' else 1 self.out_ann = self.register(srd.OUTPUT_ANN) self.out_binary = self.register(srd.OUTPUT_BINARY) @@ -95,6 +100,10 @@ def putb(self, data): self.put(self.num_cycles, self.num_cycles, self.out_binary, data) def decode(self, ss, es, data): + # Work around sigrok wastefully resubmitting earlier data + if self.last_ss and ss < self.last_ss: + self.start() + self.last_ss = ss for (self.samplenum, pins) in data: # Ignore identical samples early on (for performance reasons). -- 2.4.11