srd: spi: Document output protocol, send CS# changes.
authorUwe Hermann <uwe@hermann-uwe.de>
Wed, 16 May 2012 20:48:47 +0000 (22:48 +0200)
committerUwe Hermann <uwe@hermann-uwe.de>
Wed, 16 May 2012 22:07:27 +0000 (00:07 +0200)
As per guidelines in HACKING, the protocol "commands"/items should be ALLCAPS,
thus change 'data' to 'DATA'. Also, fix MX25Lxx05D protocol decoder
accordingly, currently the only one we have which stacks on top of SPI.

Add a new 'CS-CHANGE' output protocol item, which is sent upon every
change of the CS# pin value (either 0->1, or vice versa). This is needed
by various higher-level PDs.

decoders/mx25lxx05d/mx25lxx05d.py
decoders/spi/__init__.py
decoders/spi/spi.py

index f7c84764097cc8bbecf534fa8d0978d3d71328cf..eb0e798403ba64ccaf1d62ef1b6971124526a964 100644 (file)
@@ -232,7 +232,7 @@ class Decoder(srd.Decoder):
 
         ptype, mosi, miso = data
 
-        if ptype != 'data':
+        if ptype != 'DATA':
             return
 
         cmd = mosi
index c1b5889fdc28c8c0affc7e4035b2668f8b550114..8734acf3f36ebe57bb468351846ee2a5f97e884e 100644 (file)
@@ -23,6 +23,24 @@ Serial Peripheral Interface protocol decoder.
 
 Details:
 TODO
+
+Protocol output format:
+
+SPI packet:
+[<cmd>, <data1>, <data2>]
+
+Commands:
+ - 'DATA': <data1> contains the MISO data, <data2> contains the MOSI data.
+   The data is _usually_ 8 bits (but can also be fewer or more bits).
+   Both data items are Python numbers, not strings.
+ - 'CS CHANGE': <data1> is the old CS# pin value, <data2> is the new value.
+   Both data items are Python numbers (0/1), not strings.
+
+Example:
+ ['CS-CHANGE', 1, 0]
+ ['DATA', 0xff, 0x3a]
+ ['DATA', 0x65, 0x00]
+ ['CS-CHANGE', 0, 1]
 '''
 
 from .spi import *
index 72a3dfb8e2b202ab22466bf73e228becf006bf92..2f10ef44918f6c48c3295dd1dd01fcf16a0a49c4 100644 (file)
@@ -73,6 +73,7 @@ class Decoder(srd.Decoder):
         self.bytesreceived = 0
         self.samplenum = -1
         self.cs_was_deasserted_during_data_word = 0
+        self.oldcs = -1
 
     def start(self, metadata):
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'spi')
@@ -85,6 +86,14 @@ class Decoder(srd.Decoder):
         # TODO: Either MISO or MOSI could be optional. CS# is optional.
         for (self.samplenum, (miso, mosi, sck, cs)) in data:
 
+            if self.oldcs != cs:
+                # Send all CS# pin value changes.
+                self.put(self.samplenum, self.samplenum, self.out_proto,
+                         ['CS-CHANGE', self.oldcs, cs])
+                self.put(self.samplenum, self.samplenum, self.out_ann,
+                         [0, ['CS-CHANGE: %d->%d' % (self.oldcs, cs)]])
+                self.oldcs = cs
+
             # Ignore sample if the clock pin hasn't changed.
             if sck == self.oldsck:
                 continue
@@ -131,7 +140,7 @@ class Decoder(srd.Decoder):
                 continue
 
             self.put(self.start_sample, self.samplenum, self.out_proto,
-                     ['data', self.mosidata, self.misodata])
+                     ['DATA', self.mosidata, self.misodata])
             self.put(self.start_sample, self.samplenum, self.out_ann,
                      [ANN_HEX, ['MOSI: 0x%02x, MISO: 0x%02x' % (self.mosidata,
                      self.misodata)]])