summaryrefslogtreecommitdiff
path: root/decoders/spi
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2013-09-12 20:57:04 +0200
committerUwe Hermann <uwe@hermann-uwe.de>2013-09-12 21:26:12 +0200
commitec0afe27db7f6e2abdd2a712ca4bbc5c01debe67 (patch)
tree470dc167700548653cddc1ee29a49b78158d2b32 /decoders/spi
parent3eda7779a7db58d76f0512940da7f6d7e4339731 (diff)
downloadlibsigrokdecode-ec0afe27db7f6e2abdd2a712ca4bbc5c01debe67.tar.gz
libsigrokdecode-ec0afe27db7f6e2abdd2a712ca4bbc5c01debe67.zip
spi: Fix start-/end-sample numbers.
This now makes the SPI decoder suitable for use in GUIs. This fixes bug #150.
Diffstat (limited to 'decoders/spi')
-rw-r--r--decoders/spi/pd.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/decoders/spi/pd.py b/decoders/spi/pd.py
index c15c882..1dff414 100644
--- a/decoders/spi/pd.py
+++ b/decoders/spi/pd.py
@@ -70,6 +70,7 @@ class Decoder(srd.Decoder):
self.mosidata = 0
self.misodata = 0
self.bytesreceived = 0
+ self.startsample = -1
self.samplenum = -1
self.cs_was_deasserted_during_data_word = 0
self.oldcs = -1
@@ -82,6 +83,12 @@ class Decoder(srd.Decoder):
def report(self):
return 'SPI: %d bytes received' % self.bytesreceived
+ def putpw(self, data):
+ self.put(self.startsample, self.samplenum, self.out_proto, data)
+
+ def putw(self, data):
+ self.put(self.startsample, self.samplenum, self.out_ann, data)
+
def decode(self, ss, es, data):
# TODO: Either MISO or MOSI could be optional. CS# is optional.
for (self.samplenum, pins) in data:
@@ -95,8 +102,6 @@ class Decoder(srd.Decoder):
# 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.
@@ -118,7 +123,7 @@ class Decoder(srd.Decoder):
# If this is the first bit, save its sample number.
if self.bitcount == 0:
- self.start_sample = self.samplenum
+ self.startsample = self.samplenum
active_low = (self.options['cs_polarity'] == 'active-low')
deasserted = cs if active_low else not cs
if deasserted:
@@ -144,16 +149,12 @@ class Decoder(srd.Decoder):
if self.bitcount != ws:
continue
- self.put(self.start_sample, self.samplenum, self.out_proto,
- ['DATA', self.mosidata, self.misodata])
- self.put(self.start_sample, self.samplenum, self.out_ann,
- [0, ['MOSI: 0x%02x, MISO: 0x%02x' % (self.mosidata,
- self.misodata)]])
+ self.putpw(['DATA', self.mosidata, self.misodata])
+ self.putw([0, ['MOSI: 0x%02x, MISO: 0x%02x' % (self.mosidata,
+ self.misodata)]])
if self.cs_was_deasserted_during_data_word:
- self.put(self.start_sample, self.samplenum, self.out_ann,
- [1, ['CS# was deasserted during this '
- 'SPI data byte!']])
+ self.putw([1, ['CS# was deasserted during this data word!']])
# Reset decoder state.
self.mosidata = 0