]> sigrok.org Git - libsigrokdecode.git/commitdiff
gpib: Convert to PD API version 3
authorGerhard Sittig <redacted>
Tue, 6 Jun 2017 19:13:27 +0000 (21:13 +0200)
committerGerhard Sittig <redacted>
Tue, 6 Jun 2017 19:22:02 +0000 (21:22 +0200)
Have edges detected in common library code. Cope with optional initial
low level (without an edge) at the start of sample data. Handle the
optionally enforced processing at a specified sample number.

decoders/gpib/pd.py

index 369a094c0352cf078aa7fed1a24fe419f19d26c9..01801bc592161009898a64c28249d626012952df 100644 (file)
@@ -20,7 +20,7 @@
 import sigrokdecode as srd
 
 class Decoder(srd.Decoder):
-    api_version = 2
+    api_version = 3
     id = 'gpib'
     name = 'GPIB'
     longname = 'General Purpose Interface Bus'
@@ -61,14 +61,12 @@ class Decoder(srd.Decoder):
     )
 
     def __init__(self):
-        self.olddav = None
         self.items = []
         self.itemcount = 0
         self.saved_item = None
         self.saved_ATN = False
         self.saved_EOI = False
         self.samplenum = 0
-        self.oldpins = None
         self.ss_item = self.es_item = None
         self.first = True
 
@@ -160,29 +158,19 @@ class Decoder(srd.Decoder):
 
         self.itemcount, self.items = 0, []
 
-    def find_falling_dav_edge(self, dav, datapins):
-        # Ignore sample if the DAV pin hasn't changed.
-        if dav == self.olddav:
-            return
-        self.olddav = dav
-        # Sample on falling DAV edge.
-        if dav == 1:
-            return
-
-        # Found the correct DAV edge, now get the bits.
-        self.handle_bits(datapins)
+    def decode(self):
 
-    def decode(self, ss, es, data):
+        # Inspect samples at falling edge of DAV. But make sure to also
+        # start inspection when the capture happens to start with low
+        # DAV level. Optionally enforce processing when a user specified
+        # sample number was reached.
+        waitcond = [{9: 'l'}]
         lsn = self.options['sample_total']
-
-        for (self.samplenum, pins) in data:
-            if lsn > 0:
-                if (lsn - self.samplenum) == 1: # Show the last data word.
-                    self.handle_bits(pins)
-
-            # Ignore identical samples early on (for performance reasons).
-            if self.oldpins == pins:
-                continue
-            self.oldpins = pins
-
-            self.find_falling_dav_edge(pins[9], pins)
+        if lsn:
+            waitcond.append({'skip': lsn})
+        while True:
+            if lsn:
+                waitcond[1]['skip'] = lsn - self.samplenum - 1
+            pins = self.wait(waitcond)
+            self.handle_bits(pins)
+            waitcond[0][9] = 'f'