summaryrefslogtreecommitdiff
path: root/decoders
diff options
context:
space:
mode:
Diffstat (limited to 'decoders')
-rw-r--r--decoders/i2c/pd.py46
1 files changed, 27 insertions, 19 deletions
diff --git a/decoders/i2c/pd.py b/decoders/i2c/pd.py
index d9061f5..70795c0 100644
--- a/decoders/i2c/pd.py
+++ b/decoders/i2c/pd.py
@@ -48,18 +48,19 @@ For example, a slave address field could be 0x51 (instead of 0xa2).
For 'START', 'START REPEAT', 'STOP', 'ACK', and 'NACK' <pdata> is None.
'''
-# CMD: [annotation-type-index, long annotation, short annotation]
+# Meaning of table items:
+# command -> [annotation class, annotation text in order of decreasing length]
proto = {
- 'START': [0, 'Start', 'S'],
- 'START REPEAT': [1, 'Start repeat', 'Sr'],
- 'STOP': [2, 'Stop', 'P'],
- 'ACK': [3, 'ACK', 'A'],
- 'NACK': [4, 'NACK', 'N'],
- 'BIT': [5, 'Bit', 'B'],
- 'ADDRESS READ': [6, 'Address read', 'AR'],
- 'ADDRESS WRITE': [7, 'Address write', 'AW'],
- 'DATA READ': [8, 'Data read', 'DR'],
- 'DATA WRITE': [9, 'Data write', 'DW'],
+ 'START': [0, 'Start', 'S'],
+ 'START REPEAT': [1, 'Start repeat', 'Sr'],
+ 'STOP': [2, 'Stop', 'P'],
+ 'ACK': [3, 'ACK', 'A'],
+ 'NACK': [4, 'NACK', 'N'],
+ 'BIT': [5, '{b:1d}'],
+ 'ADDRESS READ': [6, 'Address read: {b:02X}', 'AR: {b:02X}', '{b:02X}'],
+ 'ADDRESS WRITE': [7, 'Address write: {b:02X}', 'AW: {b:02X}', '{b:02X}'],
+ 'DATA READ': [8, 'Data read: {b:02X}', 'DR: {b:02X}', '{b:02X}'],
+ 'DATA WRITE': [9, 'Data write: {b:02X}', 'DW: {b:02X}', '{b:02X}'],
}
class Decoder(srd.Decoder):
@@ -145,7 +146,8 @@ class Decoder(srd.Decoder):
self.pdu_bits = 0
cmd = 'START REPEAT' if self.is_repeat_start else 'START'
self.putp([cmd, None])
- self.putx([proto[cmd][0], proto[cmd][1:]])
+ cls, texts = proto[cmd][0], proto[cmd][1:]
+ self.putx([cls, texts])
self.state = 'FIND ADDRESS'
self.is_repeat_start = True
self.is_write = None
@@ -230,17 +232,21 @@ class Decoder(srd.Decoder):
self.putb([bin_class, bytes([d])])
- for bit in self.data_bits:
- self.put(bit[1], bit[2], self.out_ann, [5, ['%d' % bit[0]]])
+ for b, ss, es in self.data_bits:
+ cls, texts = proto['BIT'][0], proto['BIT'][1:]
+ texts = [t.format(b = b) for t in texts]
+ self.put(ss, es, self.out_ann, [cls, texts])
if cmd.startswith('ADDRESS') and is_seven:
self.ss, self.es = self.samplenum, self.samplenum + self.bitwidth
+ cls = proto[cmd][0]
w = ['Write', 'Wr', 'W'] if self.is_write else ['Read', 'Rd', 'R']
- self.putx([proto[cmd][0], w])
+ self.putx([cls, w])
self.ss, self.es = self.ss_byte, self.samplenum
- self.putx([proto[cmd][0], ['%s: %02X' % (proto[cmd][1], d),
- '%s: %02X' % (proto[cmd][2], d), '%02X' % d]])
+ cls, texts = proto[cmd][0], proto[cmd][1:]
+ texts = [t.format(b = d) for t in texts]
+ self.putx([cls, texts])
# Done with this packet.
self.data_bits.clear()
@@ -251,7 +257,8 @@ class Decoder(srd.Decoder):
self.ss, self.es = self.samplenum, self.samplenum + self.bitwidth
cmd = 'NACK' if (sda == 1) else 'ACK'
self.putp([cmd, None])
- self.putx([proto[cmd][0], proto[cmd][1:]])
+ cls, texts = proto[cmd][0], proto[cmd][1:]
+ self.putx([cls, texts])
# Slave addresses can span one or two bytes, before data bytes
# follow. There can be an arbitrary number of data bytes. Stick
# with getting more address bytes if applicable, or enter or
@@ -273,7 +280,8 @@ class Decoder(srd.Decoder):
cmd = 'STOP'
self.ss, self.es = self.samplenum, self.samplenum
self.putp([cmd, None])
- self.putx([proto[cmd][0], proto[cmd][1:]])
+ cls, texts = proto[cmd][0], proto[cmd][1:]
+ self.putx([cls, texts])
self.state = 'FIND START'
self.is_repeat_start = False
self.is_write = None