X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fir_rc5%2Fpd.py;h=cd94eae1159a59d816bb940622017e023e5d3d23;hp=25a4576e71b378b03290dc5c12bd6e4429719ddc;hb=16211e24f7a34590f02e9f8a327b1eb3647c7c62;hpb=92d992d2e50a1996fa2f436f5217b5a9fb3b7e62 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