]> sigrok.org Git - libsigrokdecode.git/commitdiff
srd: All PDs: Various fixes, cosmetics.
authorUwe Hermann <redacted>
Wed, 25 Jan 2012 21:11:38 +0000 (22:11 +0100)
committerUwe Hermann <redacted>
Wed, 25 Jan 2012 22:49:32 +0000 (23:49 +0100)
 - List all API methods and metadata variables in all PDs to make things
   easier and more consistent for new PD writers.

 - Fix probe assignment in a few PDs.

 - Raise exceptions upon invalid states of the PD state machines (bug).

13 files changed:
decoders/dcf77/dcf77.py
decoders/ddc/ddc.py
decoders/ebr30a_i2c_demux/ebr30a_i2c_demux.py
decoders/i2c/i2c.py
decoders/i2cdemux/i2cdemux.py
decoders/mx25lxx05d/mx25lxx05d.py
decoders/nunchuk/nunchuk.py
decoders/pan1321/pan1321.py
decoders/rtc8564/rtc8564.py
decoders/spi/spi.py
decoders/transitioncounter/transitioncounter.py
decoders/uart/uart.py
decoders/usb/usb.py

index b7e029dab8ff3c270a327d1a59d5550179de84b8..53795926177345ffd9e22ad59586e12d9497e7c8 100644 (file)
@@ -57,6 +57,9 @@ class Decoder(srd.Decoder):
     probes = [
         {'id': 'data', 'name': 'DATA', 'desc': 'DATA line'},
     ]
+    extra_probes = [
+        {'id': 'pon', 'name': 'PON', 'desc': 'TODO'},
+    ]
     options = {}
     annotations = [
         # ANN_ASCII
@@ -211,7 +214,7 @@ class Decoder(srd.Decoder):
             raise Exception('Invalid DCF77 bit: %d' % c)
 
     def decode(self, ss, es, data):
-        for samplenum, (pon, val) in data: # FIXME
+        for samplenum, (val) in data: # TODO: Handle optional PON.
 
             self.samplenum += 1 # FIXME. Use samplenum. Off-by-one?
 
@@ -272,7 +275,7 @@ class Decoder(srd.Decoder):
                 self.state = WAIT_FOR_RISING_EDGE
 
             else:
-                raise Exception('Invalid state: %s' % self.state)
+                raise Exception('Invalid state: %d' % self.state)
 
             self.oldval = val
 
index 349b2ec4617af0636fecd2294730137a888eb922..f59be8e26190649ab0c6b158dff252fadd5b9752 100644 (file)
@@ -38,6 +38,7 @@ class Decoder(srd.Decoder):
     inputs = ['i2c']
     outputs = ['ddc']
     probes = []
+    extra_probes = []
     options = {}
     annotations = [
         ['Byte stream', 'DDC byte stream as read from display.'],
@@ -49,11 +50,14 @@ class Decoder(srd.Decoder):
     def start(self, metadata):
         self.out_ann = self.add(srd.OUTPUT_ANN, 'ddc')
 
+    def report(self):
+        pass
+
     def decode(self, ss, es, data):
         try:
             cmd, data, ack_bit = data
         except Exception as e:
-            raise Exception('malformed I2C input: %s' % str(e)) from e
+            raise Exception('Malformed I2C input: %s' % str(e)) from e
 
         if self.state is None:
             # Wait for the DDC session to start.
@@ -72,4 +76,6 @@ class Decoder(srd.Decoder):
                 # There shouldn't be anything but data reads on this
                 # address, so ignore everything else.
                 self.put(ss, es, self.out_ann, [0, ['0x%.2x' % data]])
+        else:
+            raise Exception('Invalid state: %s' % self.state)
 
index 1c704e3f2a5d70f94b73214dfeb0cb6e5bfa86d9..59649fd529e51fcffecacdc10bf2adb5122272d5 100644 (file)
@@ -48,8 +48,9 @@ class Decoder(srd.Decoder):
     longdesc = 'TODO.'
     license = 'gplv2+'
     inputs = ['i2c']
-    outputs = ['i2c-axp199', 'i2c-h8563s', 'i2c-accel']
+    outputs = ['i2c-axp199', 'i2c-h8563s', 'i2c-accel'] # TODO: type vs. inst.
     probes = []
+    extra_probes = []
     options = {}
     annotations = []
 
@@ -102,4 +103,6 @@ class Decoder(srd.Decoder):
                 print('Error: Could not determine correct stream!') # FIXME
             self.packets = []
             self.stream = -1
+        else:
+            pass # Do nothing, only add the I2C packet to our cache.
 
index 4352c36246a3edb117c03ae49c2103c7ab4ae693..816fd790baa33fb4ca0d2091390911ad4b91596a 100644 (file)
@@ -129,6 +129,7 @@ class Decoder(srd.Decoder):
         {'id': 'scl', 'name': 'SCL', 'desc': 'Serial clock line'},
         {'id': 'sda', 'name': 'SDA', 'desc': 'Serial data line'},
     ]
+    extra_probes = []
     options = {
         'addressing': ['Slave addressing (in bits)', 7], # 7 or 10
     }
@@ -158,6 +159,9 @@ class Decoder(srd.Decoder):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'i2c')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'i2c')
 
+    def report(self):
+        pass
+
     def is_start_condition(self, scl, sda):
         # START condition (S): SDA = falling, SCL = high
         if (self.oldsda == 1 and sda == 0) and scl == 1:
@@ -290,8 +294,7 @@ class Decoder(srd.Decoder):
                 elif self.is_stop_condition(scl, sda):
                     self.found_stop(scl, sda)
             else:
-                # Shouldn't happen.
-                raise Exception("unknown state %d" % self.STATE)
+                raise Exception('Invalid state %d' % self.STATE)
 
             # Save current SDA/SCL values for the next round.
             self.oldscl = scl
index ff597fe6d5e9d71b1fee93d08ec1eb58ccfcd776..49261600495bb88b6885d4fea40b0d97bf31768b 100644 (file)
@@ -38,6 +38,7 @@ class Decoder(srd.Decoder):
     inputs = ['i2c']
     outputs = [] # TODO: Only known at run-time.
     probes = []
+    extra_probes = []
     options = {}
     annotations = []
 
@@ -87,4 +88,6 @@ class Decoder(srd.Decoder):
 
             self.packets = []
             self.stream = -1
+        else:
+            pass # Do nothing, only add the I2C packet to our cache.
 
index 61ec185fc184597e70d11b39a7922c7d2280e7f9..4139fcb6e57d7ba6ecb885c76d3198f86f5eeff8 100644 (file)
@@ -256,8 +256,6 @@ class Decoder(srd.Decoder):
                 self.cmdstate = 1
             else:
                 pass # TODO
-        else:
-            pass
 
         # Handle commands.
         # TODO: Use some generic way to invoke the resp. method.
index 3308bef392095500bd064045205ec170486d5240..0f1e35603612ecdcf0a413e924706d7005aa7db1 100644 (file)
@@ -49,7 +49,8 @@ class Decoder(srd.Decoder):
     license = 'gplv2+'
     inputs = ['i2c']
     outputs = ['nunchuck']
-    probes = [] # TODO
+    probes = []
+    extra_probes = [] # TODO
     options = {}
     annotations = [
         ['TODO', 'TODO'], 
index 2c86449d797ad3f668d041e7fbbdb14331aea9e7..f383e00ccd4923fa53382085514fd58b7c7810ff 100644 (file)
@@ -47,6 +47,7 @@ class Decoder(srd.Decoder):
     inputs = ['uart']
     outputs = ['pan1321']
     probes = []
+    extra_probes = []
     options = {}
     annotations = [
         ['ASCII', 'TODO: description'],
@@ -73,7 +74,7 @@ class Decoder(srd.Decoder):
                      [ANN_ASCII, ['Host set the Bluetooth name to ' + name]])
         else:
             self.put(ss, es, self.out_ann,
-                     [ANN_ASCII, ['Host sent unsupported command']])
+                     [ANN_ASCII, ['Host sent unsupported command: %s' % s]])
         self.cmd[rxtx] = ''
 
     def handle_device_reply(self, ss, es, rxtx, s):
@@ -89,7 +90,7 @@ class Decoder(srd.Decoder):
                      [ANN_ASCII, ['Device sent error code ' + error]])
         else:
             self.put(ss, es, self.out_ann,
-                     [ANN_ASCII, ['Device sent an unknown reply']])
+                     [ANN_ASCII, ['Device sent an unknown reply: %s' % s]])
         self.cmd[rxtx] = ''
 
     def decode(self, ss, es, data):
@@ -112,5 +113,5 @@ class Decoder(srd.Decoder):
         elif rxtx == TX:
             self.handle_host_command(ss, es, rxtx, self.cmd[rxtx])
         else:
-            pass # TODO: Error.
+            raise Exception('Invalid rxtx value: %d' % rxtx)
 
index 0e7a532f5d8de55289704feb8c56f0fb63e5bb91..97b08087da2280c874dccee5fddec43b4e5658be 100644 (file)
@@ -223,6 +223,5 @@ class Decoder(srd.Decoder):
             else:
                 pass # TODO?
         else:
-            # Shouldn't happen.
-            raise Exception('Unknown state: %d', self.state)
+            raise Exception('Invalid state: %d' % self.state)
 
index 57f55624ffe4c5ed5d27de921c6ada1d6ffc74d0..7789e34c36cb96c1495a1e9af2fbf42753565331 100644 (file)
@@ -59,13 +59,14 @@ class Decoder(srd.Decoder):
     inputs = ['logic']
     outputs = ['spi']
     probes = [
-        {'id': 'mosi', 'name': 'MOSI',
-         'desc': 'SPI MOSI line (Master out, slave in)'},
         {'id': 'miso', 'name': 'MISO',
          'desc': 'SPI MISO line (Master in, slave out)'},
+        {'id': 'mosi', 'name': 'MOSI',
+         'desc': 'SPI MOSI line (Master out, slave in)'},
         {'id': 'sck', 'name': 'CLK', 'desc': 'SPI clock line'},
         {'id': 'cs', 'name': 'CS#', 'desc': 'SPI CS (chip select) line'},
     ]
+    extra_probes = [] # TODO
     options = {
         'cs_polarity': ['CS# polarity', ACTIVE_LOW],
         'cpol': ['Clock polarity', CPOL_0],
@@ -94,11 +95,8 @@ class Decoder(srd.Decoder):
         return 'SPI: %d bytes received' % self.bytesreceived
 
     def decode(self, ss, es, data):
-        # HACK! At the moment the number of probes is not handled correctly.
-        # E.g. if an input file (-i foo.sr) has more than two probes enabled.
-        # for (samplenum, (mosi, sck, x, y, z, a)) in data:
-        # for (samplenum, (cs, miso, sck, mosi, wp, hold)) in data:
-        for (samplenum, (cs, miso, sck, mosi, wp, hold)) in data:
+        # TODO: Either MISO or MOSI could be optional. CS# is optional.
+        for (samplenum, (miso, mosi, sck, cs)) in data:
 
             self.samplenum += 1 # FIXME
 
index 9cf19188a31fdbac8fdcf59d0c526c45590c55f8..86bbfbe1ed2dd5833a1d0ba48285623c1a7dc32f 100644 (file)
@@ -31,6 +31,7 @@ class Decoder(srd.Decoder):
     inputs = ['logic']
     outputs = ['transitioncounts']
     probes = []
+    extra_probes = []
     options = {}
     annotations = [
         ['TODO', 'TODO'],
index f827a22d8a3d26b999e76f70b2c82f5906f0337b..a0f915cc2da2183f291fdbd11f7928a02b5906f0 100644 (file)
@@ -199,6 +199,7 @@ class Decoder(srd.Decoder):
         {'id': 'rx', 'name': 'RX', 'desc': 'UART receive line'},
         {'id': 'tx', 'name': 'TX', 'desc': 'UART transmit line'},
     ]
+    extra_probes = []
     options = {
         'baudrate': ['Baud rate', 115200],
         'num_data_bits': ['Data bits', 8], # Valid: 5-9.
@@ -391,7 +392,8 @@ class Decoder(srd.Decoder):
         self.put(self.samplenum, self.samplenum, self.out_ann,
                  [ANN_ASCII, ['Stop bit', 'Stop', 'P']])
 
-    def decode(self, ss, es, data): # TODO
+    def decode(self, ss, es, data):
+        # TODO: Either RX or TX could be omitted (optional probe).
         for (samplenum, (rx, tx)) in data:
 
             # TODO: Start counting at 0 or 1? Increase before or after?
@@ -420,7 +422,7 @@ class Decoder(srd.Decoder):
                 elif self.state[rxtx] == GET_STOP_BITS:
                     self.get_stop_bits(rxtx, signal)
                 else:
-                    raise Exception('Invalid state: %s' % self.state[rxtx])
+                    raise Exception('Invalid state: %d' % self.state[rxtx])
 
                 # Save current RX/TX values for the next round.
                 self.oldbit[rxtx] = signal
index 2df03c0a82b7c8aef5d6e7a2d6df542128081924..644152634da444f0c5adcb0a0277b17d22a5bd8a 100644 (file)
@@ -118,6 +118,7 @@ class Decoder(srd.Decoder):
         {'id': 'dp', 'name': 'D+', 'desc': 'USB D+ signal'},
         {'id': 'dm', 'name': 'D-', 'desc': 'USB D- signal'},
     ]
+    extra_probes = []
     options = {}
     annotations = [
         ['TODO', 'TODO']
@@ -133,17 +134,18 @@ class Decoder(srd.Decoder):
         self.out_ann = self.add(srd.OUTPUT_ANN, 'usb')
 
         if self.rate < 48000000:
-            raise Exception('Sample rate not sufficient for USB decoding')
+            raise Exception('Sample rate (%d) not sufficient for USB '
+                            'decoding, need at least 48MHz' % self.rate)
 
         # Initialise decoder state.
         self.sym = J
         self.scount = 0
         self.packet = ''
 
-    def decode(self, ss, es, data):
+    def report(self):
+        pass
 
-        # FIXME
-        # for (samplenum, (dp, dm, x, y, z, a)) in data:
+    def decode(self, ss, es, data):
         for (samplenum, (dm, dp)) in data:
 
             self.scount += 1