]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/onewire_link/pd.py
onewire_link: Define annotation rows.
[libsigrokdecode.git] / decoders / onewire_link / pd.py
index a309cc3229f157bb64f8f2fb5a862908559790bf..51eebe84af9e749de87daa95119b136442f5c9dc 100644 (file)
@@ -18,8 +18,6 @@
 ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 ##
 
-# 1-Wire protocol decoder (link layer)
-
 import sigrokdecode as srd
 
 class Decoder(srd.Decoder):
@@ -57,12 +55,17 @@ class Decoder(srd.Decoder):
         ['presence', 'Presence'],
         ['overdrive', 'Overdrive mode notifications'],
     ]
+    annotation_rows = (
+        ('bits', 'Bits', (0, 2, 3)),
+        ('info', 'Info', (4,)),
+        ('warnings', 'Warnings', (1,)),
+    )
 
     def putm(self, data):
         self.put(0, 0, self.out_ann, data)
 
     def putpb(self, data):
-        self.put(self.fall, self.samplenum, self.out_proto, data)
+        self.put(self.fall, self.samplenum, self.out_python, data)
 
     def putb(self, data):
         self.put(self.fall, self.samplenum, self.out_ann, data)
@@ -74,12 +77,13 @@ class Decoder(srd.Decoder):
         self.put(self.fall, self.rise, self.out_ann, data)
 
     def putprs(self, data):
-        self.put(self.rise, self.samplenum, self.out_proto, data)
+        self.put(self.rise, self.samplenum, self.out_python, data)
 
     def putrs(self, data):
         self.put(self.rise, self.samplenum, self.out_ann, data)
 
     def __init__(self, **kwargs):
+        self.samplerate = None
         self.samplenum = 0
         self.state = 'WAIT FOR FALLING EDGE'
         self.present = 0
@@ -90,11 +94,14 @@ class Decoder(srd.Decoder):
         self.fall = 0
         self.rise = 0
 
-    def start(self, metadata):
-        self.out_proto = self.add(srd.OUTPUT_PROTO, 'onewire_link')
-        self.out_ann = self.add(srd.OUTPUT_ANN, 'onewire_link')
+    def start(self):
+        self.out_python = self.register(srd.OUTPUT_PYTHON)
+        self.out_ann = self.register(srd.OUTPUT_ANN)
 
-        self.samplerate = metadata['samplerate']
+    def metadata(self, key, value):
+        if key != srd.SRD_CONF_SAMPLERATE:
+            return
+        self.samplerate = value
 
         # Check if samplerate is appropriate.
         if self.options['overdrive'] == 'yes':
@@ -169,10 +176,9 @@ class Decoder(srd.Decoder):
                  '(%2.1fus-%2.1fus) should be inside (7.3us, 10.0us).'
                  % (time_min*1000000, time_max*1000000)]])
 
-    def report(self):
-        pass
-
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         for (self.samplenum, (owr, pwr)) in data:
             # State machine.
             if self.state == 'WAIT FOR FALLING EDGE':