X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=decoders%2Fnrf24l01%2Fpd.py;h=2337d4b6d01faed86c778e4b49ff89cbdebb9b4b;hb=428e40cb08410595126f245e5379cd3104747937;hp=a40f454b40f04270c6c4bf364558e7ff3fb28677;hpb=3cc4c4a96dba8390ec4eabbd62cc1d50d653640e;p=libsigrokdecode.git diff --git a/decoders/nrf24l01/pd.py b/decoders/nrf24l01/pd.py index a40f454..2337d4b 100644 --- a/decoders/nrf24l01/pd.py +++ b/decoders/nrf24l01/pd.py @@ -53,6 +53,12 @@ regs = { 0x1d: ('FEATURE', 1), } +xn297_regs = { + 0x19: ('DEMOD_CAL', 5), + 0x1e: ('RF_CAL', 7), + 0x1f: ('BB_CAL', 5), +} + class Decoder(srd.Decoder): api_version = 2 id = 'nrf24l01' @@ -62,6 +68,10 @@ class Decoder(srd.Decoder): license = 'gplv2+' inputs = ['spi'] outputs = ['nrf24l01'] + options = ( + {'id': 'chip', 'desc': 'Chip type', + 'default': 'nrf24l01', 'values': ('nrf24l01', 'xn297')}, + ) annotations = ( # Sent from the host to the chip. ('cmd', 'Commands sent to the device'), @@ -87,9 +97,12 @@ 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) + if self.options['chip'] == 'xn297': + regs.update(xn297_regs) def warn(self, pos, msg): '''Put a warning message 'msg' at 'pos'.''' @@ -271,10 +284,12 @@ class Decoder(srd.Decoder): ptype, data1, data2 = data if ptype == 'CS-CHANGE': - if data1 == -1: - if data2 == -1: + if data1 is None: + if data2 is None: 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 @@ -288,7 +303,8 @@ 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)