]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/pwm/pd.py
decoders: Fix incorrect 'outputs' fields.
[libsigrokdecode.git] / decoders / pwm / pd.py
index d6411ae42fd8fea4740cd1a21b9451a161743eec..d8626ee00824d427a53672e76b298e84f9233191 100644 (file)
@@ -20,6 +20,9 @@
 
 import sigrokdecode as srd
 
+class SamplerateError(Exception):
+    pass
+
 class Decoder(srd.Decoder):
     api_version = 3
     id = 'pwm'
@@ -28,7 +31,8 @@ class Decoder(srd.Decoder):
     desc = 'Analog level encoded in duty cycle percentage.'
     license = 'gplv2+'
     inputs = ['logic']
-    outputs = ['pwm']
+    outputs = []
+    tags = ['Encoding']
     channels = (
         {'id': 'data', 'name': 'Data', 'desc': 'Data line'},
     )
@@ -49,8 +53,11 @@ class Decoder(srd.Decoder):
     )
 
     def __init__(self):
+        self.reset()
+
+    def reset(self):
+        self.samplerate = None
         self.ss_block = self.es_block = None
-        self.num_cycles = 0
 
     def metadata(self, key, value):
         if key == srd.SRD_CONF_SAMPLERATE:
@@ -84,13 +91,13 @@ class Decoder(srd.Decoder):
         self.put(self.ss_block, self.es_block, self.out_ann, [1, [period_s]])
 
     def putb(self, data):
-        # TODO Are these ss/es specs appropriate? It's the same value,
-        # which represents a mere period counter, not sample numbers.
-        # Probably should be:
-        # self.put(self.ss_block, self.es_block, self.out_binary, data)
-        self.put(self.num_cycles, self.num_cycles, self.out_binary, data)
+        self.put(self.ss_block, self.es_block, self.out_binary, data)
 
     def decode(self):
+        if not self.samplerate:
+            raise SamplerateError('Cannot decode without samplerate.')
+
+        num_cycles = 0
         average = 0
 
         # Wait for an "active" edge (depends on config). This starts
@@ -105,9 +112,9 @@ class Decoder(srd.Decoder):
             # Get the next two edges. Setup some variables that get
             # referenced in the calculation and in put() routines.
             start_samplenum = self.samplenum
-            pins = self.wait({0: 'e'})
+            self.wait({0: 'e'})
             end_samplenum = self.samplenum
-            pins = self.wait({0: 'e'})
+            self.wait({0: 'e'})
             self.ss_block = start_samplenum
             self.es_block = self.samplenum
 
@@ -128,7 +135,7 @@ class Decoder(srd.Decoder):
             self.putp(period_t)
 
             # Update and report the new duty cycle average.
-            self.num_cycles += 1
+            num_cycles += 1
             average += percent
             self.put(self.first_samplenum, self.es_block, self.out_average,
-                     float(average / self.num_cycles))
+                     float(average / num_cycles))