From 16211e24f7a34590f02e9f8a327b1eb3647c7c62 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Wed, 5 Mar 2014 23:44:14 +0100 Subject: [PATCH] ir_rc5: Don't throw exception upon invalid edge distances. Instead, reset the state machine and continue with the rest of the data. --- decoders/ir_rc5/pd.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/decoders/ir_rc5/pd.py b/decoders/ir_rc5/pd.py index 25a4576..cd94eae 100644 --- a/decoders/ir_rc5/pd.py +++ b/decoders/ir_rc5/pd.py @@ -125,7 +125,11 @@ class Decoder(srd.Decoder): elif distance in range(s - margin, s + margin + 1): return 's' else: - raise Exception('Invalid edge distance: %d' % distance) + return 'e' # Error, invalid edge distance. + + def reset_decoder_state(self): + self.edges, self.bits, self.bits_ss_es = [], [], [] + self.state = 'IDLE' def decode(self, ss, es, data): if self.samplerate is None: @@ -146,6 +150,9 @@ class Decoder(srd.Decoder): self.old_ir = self.ir continue edge = self.edge_type() + if edge == 'e': + self.reset_decoder_state() # Reset state machine upon errors. + continue if self.state == 'MID1': self.state = 'START1' if edge == 's' else 'MID0' bit = None if edge == 's' else 0 @@ -169,8 +176,7 @@ class Decoder(srd.Decoder): if len(self.bits) == 14 + 1: self.handle_bits() - self.edges, self.bits, self.bits_ss_es = [], [], [] - self.state = 'IDLE' + self.reset_decoder_state() self.old_ir = self.ir -- 2.30.2