From: Uwe Hermann Date: Wed, 5 Mar 2014 22:44:14 +0000 (+0100) Subject: ir_rc5: Don't throw exception upon invalid edge distances. X-Git-Tag: libsigrokdecode-0.3.0~66 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=commitdiff_plain;h=16211e24f7a34590f02e9f8a327b1eb3647c7c62;ds=sidebyside ir_rc5: Don't throw exception upon invalid edge distances. Instead, reset the state machine and continue with the rest of the data. --- 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