Receive samplerate via metadata(), not start()
authorBert Vermeulen <bert@biot.com>
Wed, 30 Oct 2013 21:25:45 +0000 (22:25 +0100)
committerBert Vermeulen <bert@biot.com>
Wed, 30 Oct 2013 21:41:22 +0000 (22:41 +0100)
decoders/can/pd.py
decoders/dcf77/pd.py
decoders/i2s/pd.py
decoders/onewire_link/pd.py
decoders/uart/pd.py
decoders/usb_signalling/pd.py

index 61b0a744cacb217f56a3ded29e95f6db9e49c5f9..91ccf4233ef364e81b3f4b19e3ba3169412791cb 100644 (file)
@@ -60,15 +60,18 @@ class Decoder(srd.Decoder):
     ]
 
     def __init__(self, **kwargs):
+        self.samplerate = None
         self.reset_variables()
 
-    def start(self, metadata):
+    def start(self):
         # self.out_proto = self.add(srd.OUTPUT_PROTO, 'can')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'can')
 
-        self.samplerate = metadata['samplerate']
-        self.bit_width = float(self.samplerate) / float(self.options['bitrate'])
-        self.bitpos = (self.bit_width / 100.0) * self.options['sample_point']
+    def metadata(self, key, value):
+        if key == srd.SRD_CONF_SAMPLERATE:
+            self.samplerate = value
+            self.bit_width = float(self.samplerate) / float(self.options['bitrate'])
+            self.bitpos = (self.bit_width / 100.0) * self.options['sample_point']
 
     def report(self):
         pass
@@ -362,6 +365,8 @@ class Decoder(srd.Decoder):
         self.curbit += 1
 
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         for (self.samplenum, pins) in data:
 
             (can_rx,) = pins
index a31c313cb8f020a890d63c03911d682d009b810a..57cd448d5cddd3e6bc89d4f4914bc922107f5832 100644 (file)
@@ -65,6 +65,7 @@ class Decoder(srd.Decoder):
     ]
 
     def __init__(self, **kwargs):
+        self.samplerate = None
         self.state = 'WAIT FOR RISING EDGE'
         self.oldpins = None
         self.oldval = None
@@ -74,11 +75,14 @@ class Decoder(srd.Decoder):
         self.bitcount = 0 # Counter for the DCF77 bits (0..58)
         self.dcf77_bitnumber_is_known = 0
 
-    def start(self, metadata):
-        self.samplerate = metadata['samplerate']
+    def start(self):
         # self.out_proto = self.add(srd.OUTPUT_PROTO, 'dcf77')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'dcf77')
 
+    def metadata(self, key, value):
+        if key == srd.SRD_CONF_SAMPLERATE:
+            self.samplerate = value
+
     def report(self):
         pass
 
@@ -244,6 +248,8 @@ class Decoder(srd.Decoder):
             raise Exception('Invalid DCF77 bit: %d' % c)
 
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         for (self.samplenum, pins) in data:
 
             # Ignore identical samples early on (for performance reasons).
index 9fbcef7c7ed5ceb49015e3f0ea8bf62db9eeb070..91d261a2c9c88bceb890ba62eb6690d34d08b823 100644 (file)
@@ -58,6 +58,7 @@ class Decoder(srd.Decoder):
     ]
 
     def __init__(self, **kwargs):
+        self.samplerate = None
         self.oldsck = 1
         self.oldws = 1
         self.bitcount = 0
@@ -67,11 +68,14 @@ class Decoder(srd.Decoder):
         self.start_sample = None
         self.wordlength = -1
 
-    def start(self, metadata):
-        self.samplerate = metadata['samplerate']
+    def start(self):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'i2s')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'i2s')
 
+    def metadata(self, key, value):
+        if key == srd.SRD_CONF_SAMPLERATE:
+            self.samplerate = value
+
     def putpb(self, data):
         self.put(self.start_sample, self.samplenum, self.out_proto, data)
 
@@ -93,6 +97,8 @@ class Decoder(srd.Decoder):
             (self.samplesreceived, self.wordlength, samplerate)
 
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         for self.samplenum, (sck, ws, sd) in data:
 
             # Ignore sample if the bit clock hasn't changed.
index a309cc3229f157bb64f8f2fb5a862908559790bf..4a826d195b396fd56b4c2c8850d1c59c79deb441 100644 (file)
@@ -80,6 +80,7 @@ class Decoder(srd.Decoder):
         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 +91,14 @@ class Decoder(srd.Decoder):
         self.fall = 0
         self.rise = 0
 
-    def start(self, metadata):
+    def start(self):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'onewire_link')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'onewire_link')
 
-        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':
@@ -173,6 +177,8 @@ class Decoder(srd.Decoder):
         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':
index 6ecc8cf3fffce22bc4b1702c603f49007b8bf5f3..ab96886e35b3425a3fe743458e2a0dc79ad2e6ee 100644 (file)
@@ -118,6 +118,7 @@ class Decoder(srd.Decoder):
         self.put(s - halfbit, s + halfbit, self.out_proto, data)
 
     def __init__(self, **kwargs):
+        self.samplerate = None
         self.samplenum = 0
         self.frame_start = [-1, -1]
         self.startbit = [-1, -1]
@@ -130,14 +131,15 @@ class Decoder(srd.Decoder):
         self.oldbit = [1, 1]
         self.oldpins = [1, 1]
 
-    def start(self, metadata):
-        self.samplerate = metadata['samplerate']
+    def start(self):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'uart')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'uart')
 
-        # The width of one UART bit in number of samples.
-        self.bit_width = \
-            float(self.samplerate) / float(self.options['baudrate'])
+    def metadata(self, key, value):
+        if key == srd.SRD_CONF_SAMPLERATE:
+            self.samplerate = value;
+            # The width of one UART bit in number of samples.
+            self.bit_width = float(self.samplerate) / float(self.options['baudrate'])
 
     def report(self):
         pass
@@ -280,6 +282,8 @@ class Decoder(srd.Decoder):
         self.putg([4, ['Stop bit', 'Stop', 'T']])
 
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         # TODO: Either RX or TX could be omitted (optional probe).
         for (self.samplenum, pins) in data:
 
index d2a1e8add21a7fd0ff9f7b0b0fc254065db579cd..8a323e0c37af1cc8d7c63c04e727472607e2c7fa 100644 (file)
@@ -94,6 +94,7 @@ class Decoder(srd.Decoder):
     ]
 
     def __init__(self):
+        self.samplerate = None
         self.oldsym = 'J' # The "idle" state is J.
         self.ss_sop = None
         self.ss_block = None
@@ -107,12 +108,16 @@ class Decoder(srd.Decoder):
         self.consecutive_ones = 0
         self.state = 'IDLE'
 
-    def start(self, metadata):
+    def start(self):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'usb_signalling')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'usb_signalling')
-        self.bitrate = bitrates[self.options['signalling']]
-        self.bitwidth = float(metadata['samplerate']) / float(self.bitrate)
-        self.halfbit = int(self.bitwidth / 2)
+
+    def metadata(self, key, value):
+        if key == srd.SRD_CONF_SAMPLERATE:
+            self.samplerate = value
+            self.bitrate = bitrates[self.options['signalling']]
+            self.bitwidth = float(self.samplerate) / float(self.bitrate)
+            self.halfbit = int(self.bitwidth / 2)
 
     def report(self):
         pass
@@ -201,6 +206,8 @@ class Decoder(srd.Decoder):
         self.oldsym = sym
 
     def decode(self, ss, es, data):
+        if self.samplerate is None:
+            raise Exception("Cannot decode without samplerate.")
         for (self.samplenum, pins) in data:
             # State machine.
             if self.state == 'IDLE':