X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fnrf24l01%2Fpd.py;h=38e5ac6b09e093d90bc6bfc52a1b6d00c7fc1a99;hp=410a84704923bd28928e23b2e81e5595201b9fec;hb=22630a3d54361f083877a68724e8b823d5e063a7;hpb=8aeedf9ee376f1b48fe9c42924ebf34f9c8c2ddd diff --git a/decoders/nrf24l01/pd.py b/decoders/nrf24l01/pd.py index 410a847..38e5ac6 100644 --- a/decoders/nrf24l01/pd.py +++ b/decoders/nrf24l01/pd.py @@ -20,7 +20,7 @@ import sigrokdecode as srd -class MissingDataError(Exception): +class ChannelError(Exception): pass regs = { @@ -86,6 +86,8 @@ class Decoder(srd.Decoder): def __init__(self, **kwargs): self.next() + self.requirements_met = True + self.cs_was_released = False def start(self): self.out_ann = self.register(srd.OUTPUT_ANN) @@ -264,9 +266,19 @@ class Decoder(srd.Decoder): self.warn(pos, 'wrong data for "ACTIVATE" command') def decode(self, ss, es, data): + if not self.requirements_met: + return + ptype, data1, data2 = data if ptype == 'CS-CHANGE': + if data1 == -1: + if data2 == -1: + self.requirements_met = False + raise ChannelError('CS# pin required.') + elif data2 == 1: + self.cs_was_released = True + if data1 == 0 and data2 == 1: # Rising edge, the complete command is transmitted, process # the bytes that were send after the command byte. @@ -279,12 +291,14 @@ class Decoder(srd.Decoder): self.finish_command((self.mb_s, self.mb_e)) self.next() - elif ptype == 'DATA': + self.cs_was_released = True + elif ptype == 'DATA' and self.cs_was_released: mosi, miso = data1, data2 pos = (ss, es) if miso is None or mosi is None: - raise MissingDataError('Both MISO and MOSI pins required.') + self.requirements_met = False + raise ChannelError('Both MISO and MOSI pins required.') if self.first: self.first = False