diff options
author | Uwe Hermann <uwe@hermann-uwe.de> | 2013-09-12 20:57:04 +0200 |
---|---|---|
committer | Uwe Hermann <uwe@hermann-uwe.de> | 2013-09-12 21:26:12 +0200 |
commit | ec0afe27db7f6e2abdd2a712ca4bbc5c01debe67 (patch) | |
tree | 470dc167700548653cddc1ee29a49b78158d2b32 /decoders/spi | |
parent | 3eda7779a7db58d76f0512940da7f6d7e4339731 (diff) | |
download | libsigrokdecode-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.py | 23 |
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 |