]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/caliper/pd.py
caliper: use common code for packet timeout
[libsigrokdecode.git] / 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.