]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/i2c.py
srd: rename srd_usb to what it thinks it's called
[libsigrokdecode.git] / decoders / i2c.py
index 967899ed5c24d282e86809403a0aa2b5f2398ba0..e63ab8525454eb48ae10a2b244e01bb0862aa4b1 100644 (file)
@@ -22,7 +22,6 @@
 # I2C protocol decoder
 #
 
-#
 # The Inter-Integrated Circuit (I2C) bus is a bidirectional, multi-master
 # bus using two signals (SCL = serial clock line, SDA = serial data line).
 #
 # TODO: Handle multiple different I2C devices on same bus
 #       -> we need to decode multiple protocols at the same time.
 
-#
-I2C protocol output format:
-#
-The protocol output consists of a (Python) list of I2C "packets", each of
-which is of the form
-#
-#        [<i2c_command>, <data>, <ack_bit>]
-#
-# <i2c_command> is one of:
-  - 'START' (START condition)
-  - 'START_REPEAT' (Repeated START)
-#   - 'ADDRESS_READ' (Slave address, read)
-#   - 'ADDRESS_WRITE' (Slave address, write)
-  - 'DATA_READ' (Data, read)
-  - 'DATA_WRITE' (Data, write)
-  - 'STOP' (STOP condition)
-#
-# <data> is the data or address byte associated with the ADDRESS_* and DATA_*
-command. For START, START_REPEAT and STOP, this is None.
-#
-# <ack_bit> is either 'ACK' or 'NACK', but may also be None.
-#
+"""
+I2C protocol output format:
+
+The protocol output consists of a (Python) list of I2C "packets", each of
+which is of the form
+
+       [ _i2c_command_, _data_, _ack_bit_ ]
+
+_i2c_command_ is one of:
+  - 'START' (START condition)
+  - 'START_REPEAT' (Repeated START)
+  - 'ADDRESS_READ' (Address, read)
+  - 'ADDRESS_WRITE' (Address, write)
+  - 'DATA_READ' (Data, read)
+  - 'DATA_WRITE' (Data, write)
+  - 'STOP' (STOP condition)
+
+_data_ is the data or address byte associated with the ADDRESS_* and DATA_*
+command. For START, START_REPEAT and STOP, this is None.
+
+_ack_bit_ is either 'ACK' or 'NACK', but may also be None.
+"""
 
 import sigrokdecode as srd
 
@@ -102,14 +101,14 @@ ANN_RAW           = 2
 # Values are verbose and short annotation, respectively.
 protocol = {
     'START':           ['START',         'S'],
-    'START_REPEAT':    ['START REPEAT',  'Sr'],
+    'START REPEAT':    ['START REPEAT',  'Sr'],
     'STOP':            ['STOP',          'P'],
     'ACK':             ['ACK',           'A'],
     'NACK':            ['NACK',          'N'],
-    'ADDRESS_READ':    ['ADDRESS READ',  'AR'],
-    'ADDRESS_WRITE':   ['ADDRESS WRITE', 'AW'],
-    'DATA_READ':       ['DATA READ',     'DR'],
-    'DATA_WRITE':      ['DATA WRITE',    'DW'],
+    'ADDRESS READ':    ['ADDRESS READ',  'AR'],
+    'ADDRESS WRITE':   ['ADDRESS WRITE', 'AW'],
+    'DATA READ':       ['DATA READ',     'DR'],
+    'DATA WRITE':      ['DATA WRITE',    'DW'],
 }
 
 # States
@@ -133,7 +132,7 @@ class Decoder(srd.Decoder):
         {'id': 'sda', 'name': 'SDA', 'desc': 'Serial data line'},
     ]
     options = {
-        'address-space': ['Address space (in bits)', 7],
+        'addressing': ['Slave addressing (in bits)', 7], # 7 or 10
     }
     annotations = [
         # ANN_SHIFTED
@@ -157,6 +156,9 @@ class Decoder(srd.Decoder):
         self.oldscl = None
         self.oldsda = None
 
+        # Set protocol decoder option defaults.
+        self.addressing = Decoder.options['addressing'][1]
+
     def start(self, metadata):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'i2c')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'i2c')
@@ -183,7 +185,7 @@ class Decoder(srd.Decoder):
         return False
 
     def found_start(self, scl, sda):
-        cmd = 'START_REPEAT' if (self.is_repeat_start == 1) else 'START'
+        cmd = 'START REPEAT' if (self.is_repeat_start == 1) else 'START'
 
         self.put(self.out_proto, [cmd, None, None])
         self.put(self.out_ann, [ANN_SHIFTED, [protocol[cmd][0]]])
@@ -231,13 +233,13 @@ class Decoder(srd.Decoder):
         ack_bit = 'NACK' if (sda == 1) else 'ACK'
 
         if self.state == FIND_ADDRESS and self.wr == 1:
-            cmd = 'ADDRESS_WRITE'
+            cmd = 'ADDRESS WRITE'
         elif self.state == FIND_ADDRESS and self.wr == 0:
-            cmd = 'ADDRESS_READ'
+            cmd = 'ADDRESS READ'
         elif self.state == FIND_DATA and self.wr == 1:
-            cmd = 'DATA_WRITE'
+            cmd = 'DATA WRITE'
         elif self.state == FIND_DATA and self.wr == 0:
-            cmd = 'DATA_READ'
+            cmd = 'DATA READ'
 
         self.put(self.out_proto, [cmd, d, ack_bit])
         self.put(self.out_ann, [ANN_SHIFTED,
@@ -269,7 +271,7 @@ class Decoder(srd.Decoder):
         # TODO: 0-0 sample range for now.
         super(Decoder, self).put(0, 0, output_id, data)
 
-    def decode(self, timeoffset, duration, data):
+    def decode(self, ss, es, data):
         for samplenum, (scl, sda) in data:
             self.samplecnt += 1