summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--decoders/caliper/pd.py35
1 files changed, 18 insertions, 17 deletions
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.