]> sigrok.org Git - libsigrokdecode.git/commitdiff
caliper: use common code for packet timeout
authorGerhard Sittig <redacted>
Sat, 18 Jul 2020 18:05:42 +0000 (20:05 +0200)
committerGerhard Sittig <redacted>
Sat, 18 Jul 2020 18:39:48 +0000 (20:39 +0200)
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.

decoders/caliper/pd.py

index 0133b22ee8243d3131fd11688cd43fe0e608b864..ff7d3141f495f123de7d391dc0c82cee74ed543b 100644 (file)
@@ -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.