X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fspi%2Fpd.py;h=97d5571c066a3d8ec6664de9ef04cc766b4d756b;hb=95d11271b46a46788d497481d03177e883c8554e;hp=7250dbd518eedec23f2c4afd52879c4f3dba74df;hpb=12851357e784b893e24880efc6cd22a0cbcc64ce;p=libsigrokdecode.git diff --git a/decoders/spi/pd.py b/decoders/spi/pd.py index 7250dbd..97d5571 100644 --- a/decoders/spi/pd.py +++ b/decoders/spi/pd.py @@ -24,15 +24,15 @@ import sigrokdecode as srd ''' OUTPUT_PYTHON format: -SPI packet: -[, , ] +Packet: +[, , ] -Commands: - - 'DATA': contains the MISO data, contains the MOSI data. +: + - 'DATA': contains the MOSI data, contains the MISO data. The data is _usually_ 8 bits (but can also be fewer or more bits). Both data items are Python numbers (not strings), or None if the respective channel was not supplied. - - 'BITS': / contain a list of bit values in this MISO/MOSI data + - 'BITS': / contain a list of bit values in this MOSI/MISO data item, and for each of those also their respective start-/endsample numbers. - 'CS CHANGE': is the old CS# pin value, is the new value. Both data items are Python numbers (0/1), not strings. @@ -60,6 +60,12 @@ spi_mode = { (1, 1): 3, # Mode 3 } +class SamplerateError(Exception): + pass + +class ChannelError(Exception): + pass + class Decoder(srd.Decoder): api_version = 2 id = 'spi' @@ -116,7 +122,6 @@ class Decoder(srd.Decoder): self.oldcs = -1 self.oldpins = None self.have_cs = self.have_miso = self.have_mosi = None - self.state = 'IDLE' def metadata(self, key, value): if key == srd.SRD_CONF_SAMPLERATE: @@ -174,9 +179,7 @@ class Decoder(srd.Decoder): self.cs_was_deasserted = False if self.have_cs: active_low = (self.options['cs_polarity'] == 'active-low') - deasserted = (cs == 1) if active_low else (cs == 0) - if deasserted: - self.cs_was_deasserted = True + self.cs_was_deasserted = (cs == 1) if active_low else (cs == 0) ws = self.options['wordsize'] @@ -261,8 +264,8 @@ class Decoder(srd.Decoder): self.handle_bit(miso, mosi, clk, cs) def decode(self, ss, es, data): - if self.samplerate is None: - raise Exception("Cannot decode without samplerate.") + if not self.samplerate: + raise SamplerateError('Cannot decode without samplerate.') # Either MISO or MOSI can be omitted (but not both). CS# is optional. for (self.samplenum, pins) in data: @@ -276,11 +279,6 @@ class Decoder(srd.Decoder): # Either MISO or MOSI (but not both) can be omitted. if not (self.have_miso or self.have_mosi): - raise Exception('Either MISO or MOSI (or both) pins required.') - - # State machine. - if self.state == 'IDLE': - self.find_clk_edge(miso, mosi, clk, cs) - else: - raise Exception('Invalid state: %s' % self.state) + raise ChannelError('Either MISO or MOSI (or both) pins required.') + self.find_clk_edge(miso, mosi, clk, cs)