From: Gerhard Sittig Date: Sat, 18 Jul 2020 18:05:42 +0000 (+0200) Subject: caliper: use common code for packet timeout X-Git-Url: https://sigrok.org/gitweb/?a=commitdiff_plain;h=9e208e00f7b90c7ded552e84bcc5540be39f3e48;p=libsigrokdecode.git caliper: use common code for packet timeout The previous implementation unconditionally waited for up to 1ms, and optionally handled the user configured timeout period. Use common code instead to handle the full span of the timeout period. Which somewhat unclutters the .decode() routine's body by eliminating an unnecessary step in the sequence. This change also reduces indentation, and prefers Python's .format() over the old syntax. --- diff --git a/decoders/caliper/pd.py b/decoders/caliper/pd.py index 0133b22..ff7d314 100644 --- a/decoders/caliper/pd.py +++ b/decoders/caliper/pd.py @@ -81,24 +81,25 @@ class Decoder(srd.Decoder): timeout_ms = self.options['timeout_ms'] want_unit = self.options['unit'] show_all = self.options['changes'] == 'no' - snum_per_ms = self.samplerate / 1000 - timeout_snum = timeout_ms * snum_per_ms + wait_cond = [{0: 'r'}] + if timeout_ms: + snum_per_ms = self.samplerate / 1000 + timeout_snum = timeout_ms * snum_per_ms + wait_cond.append({'skip': round(timeout_snum)}) while True: - clk, data = self.wait([{0: 'r'}, {'skip': round(snum_per_ms)}]) - - # Timeout after inactivity. - if timeout_ms > 0: - if self.samplenum > self.es + timeout_snum: - if self.number_bits or self.flags_bits: - count = len(self.number_bits) + len(self.flags_bits) - self.putg(self.ss, self.samplenum, 1, [ - 'timeout with %s bits in buffer' % (count), - 'timeout', - ]) - self.reset() - - # Do nothing if there was timeout without rising clock edge. - if self.matched == (False, True): + # Sample data at the rising clock edge. Optionally timeout + # after inactivity for a user specified period. Present the + # number of unprocessed bits to the user for diagnostics. + clk, data = self.wait(wait_cond) + if timeout_ms and not self.matched[0]: + if self.number_bits or self.flags_bits: + count = len(self.number_bits) + len(self.flags_bits) + self.putg(self.ss, self.samplenum, 1, [ + 'timeout with {} bits in buffer'.format(count), + 'timeout ({} bits)'.format(count), + 'timeout', + ]) + self.reset() continue # Store position of first bit and last activity.