X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Feeprom24xx%2Fpd.py;h=033a44b2c777d5644ae7eff623b3c8ce224f41e6;hb=3f5f3a92889e2f297ee6b94362e587a2994f896b;hp=c259dc10d4af1b44e9a492323d58d40bbfbbe280;hpb=4539e9ca58966ce3c9cad4801b16c315e86ace01;p=libsigrokdecode.git diff --git a/decoders/eeprom24xx/pd.py b/decoders/eeprom24xx/pd.py index c259dc1..033a44b 100644 --- a/decoders/eeprom24xx/pd.py +++ b/decoders/eeprom24xx/pd.py @@ -21,14 +21,15 @@ import sigrokdecode as srd from .lists import * class Decoder(srd.Decoder): - api_version = 2 + api_version = 3 id = 'eeprom24xx' name = '24xx EEPROM' longname = '24xx I²C EEPROM' desc = '24xx series I²C EEPROM protocol.' license = 'gplv2+' inputs = ['i2c'] - outputs = ['eeprom24xx'] + outputs = [] + tags = ['IC', 'Memory'] options = ( {'id': 'chip', 'desc': 'Chip', 'default': 'generic', 'values': tuple(chips.keys())}, @@ -75,6 +76,9 @@ class Decoder(srd.Decoder): def __init__(self): self.reset() + def reset(self): + self.reset_variables() + def start(self): self.out_ann = self.register(srd.OUTPUT_ANN) self.out_binary = self.register(srd.OUTPUT_BINARY) @@ -90,7 +94,7 @@ class Decoder(srd.Decoder): def putbits(self, bit1, bit2, bits, data): self.put(bits[bit1][1], bits[bit2][2], self.out_ann, data) - def reset(self): + def reset_variables(self): self.state = 'WAIT FOR START' self.packets = [] self.bytebuf = [] @@ -179,7 +183,7 @@ class Decoder(srd.Decoder): def decide_on_seq_or_rnd_read(self): if len(self.bytebuf) < 2: - self.reset() + self.reset_variables() return if len(self.bytebuf) == 2: self.is_random_access_read = True @@ -237,7 +241,7 @@ class Decoder(srd.Decoder): def handle_get_control_word(self): # The packet after START must be an ADDRESS READ or ADDRESS WRITE. if self.cmd not in ('ADDRESS READ', 'ADDRESS WRITE'): - self.reset() + self.reset_variables() return self.packet_append() self.put_control_word(self.bits) @@ -249,18 +253,18 @@ class Decoder(srd.Decoder): elif self.cmd == 'NACK': self.es_block = self.es self.putb([0, ['Warning: No reply from slave!']]) - self.reset() + self.reset_variables() else: - self.reset() + self.reset_variables() def handle_r_get_word_addr_or_byte(self): if self.cmd == 'STOP': self.es_block = self.es self.putb([0, ['Warning: Slave replied, but master aborted!']]) - self.reset() + self.reset_variables() return elif self.cmd != 'DATA READ': - self.reset() + self.reset_variables() return self.packet_append() self.state = 'R GET ACK NACK AFTER WORD ADDR OR BYTE' @@ -272,20 +276,20 @@ class Decoder(srd.Decoder): self.is_cur_addr_read = True self.state = 'GET STOP AFTER LAST BYTE' else: - self.reset() + self.reset_variables() def handle_r_get_restart(self): if self.cmd == 'RESTART': self.state = 'R READ BYTE' else: - self.reset() + self.reset_variables() def handle_r_read_byte(self): if self.cmd == 'DATA READ': self.packet_append() self.state = 'R GET ACK NACK AFTER BYTE WAS READ' else: - self.reset() + self.reset_variables() def handle_r_get_ack_nack_after_byte_was_read(self): if self.cmd == 'ACK': @@ -294,7 +298,7 @@ class Decoder(srd.Decoder): # It's either a RANDOM READ or a SEQUENTIAL READ. self.state = 'GET STOP AFTER LAST BYTE' else: - self.reset() + self.reset_variables() def handle_w_get_ack_nack_after_control_word(self): if self.cmd == 'ACK': @@ -302,18 +306,18 @@ class Decoder(srd.Decoder): elif self.cmd == 'NACK': self.es_block = self.es self.putb([0, ['Warning: No reply from slave!']]) - self.reset() + self.reset_variables() else: - self.reset() + self.reset_variables() def handle_w_get_word_addr(self): if self.cmd == 'STOP': self.es_block = self.es self.putb([0, ['Warning: Slave replied, but master aborted!']]) - self.reset() + self.reset_variables() return elif self.cmd != 'DATA WRITE': - self.reset() + self.reset_variables() return self.packet_append() self.state = 'W GET ACK AFTER WORD ADDR' @@ -322,7 +326,7 @@ class Decoder(srd.Decoder): if self.cmd == 'ACK': self.state = 'W DETERMINE EEPROM READ OR WRITE' else: - self.reset() + self.reset_variables() def handle_w_determine_eeprom_read_or_write(self): if self.cmd == 'START REPEAT': @@ -332,7 +336,7 @@ class Decoder(srd.Decoder): self.packet_append() self.state = 'W GET ACK NACK AFTER BYTE WAS WRITTEN' else: - self.reset() + self.reset_variables() def handle_w_write_byte(self): if self.cmd == 'DATA WRITE': @@ -340,7 +344,7 @@ class Decoder(srd.Decoder): self.state = 'W GET ACK NACK AFTER BYTE WAS WRITTEN' elif self.cmd == 'STOP': if len(self.bytebuf) < 2: - self.reset() + self.reset_variables() return self.es_block = self.es if len(self.bytebuf) == 2: @@ -348,31 +352,31 @@ class Decoder(srd.Decoder): else: self.is_page_write = True self.put_operation() - self.reset() + self.reset_variables() elif self.cmd == 'START REPEAT': # It's either a RANDOM ACCESS READ or SEQUENTIAL RANDOM READ. self.state = 'R2 GET CONTROL WORD' else: - self.reset() + self.reset_variables() def handle_w_get_ack_nack_after_byte_was_written(self): if self.cmd == 'ACK': self.state = 'W WRITE BYTE' else: - self.reset() + self.reset_variables() def handle_r2_get_control_word(self): if self.cmd == 'ADDRESS READ': self.packet_append() self.state = 'R2 GET ACK AFTER ADDR READ' else: - self.reset() + self.reset_variables() def handle_r2_get_ack_after_addr_read(self): if self.cmd == 'ACK': self.state = 'R2 READ BYTE' else: - self.reset() + self.reset_variables() def handle_r2_read_byte(self): if self.cmd == 'DATA READ': @@ -383,9 +387,9 @@ class Decoder(srd.Decoder): self.es_block = self.es self.putb([0, ['Warning: STOP expected after a NACK (not ACK)']]) self.put_operation() - self.reset() + self.reset_variables() else: - self.reset() + self.reset_variables() def handle_r2_get_ack_nack_after_byte_was_read(self): if self.cmd == 'ACK': @@ -394,22 +398,22 @@ class Decoder(srd.Decoder): self.decide_on_seq_or_rnd_read() self.state = 'GET STOP AFTER LAST BYTE' else: - self.reset() + self.reset_variables() def handle_get_stop_after_last_byte(self): if self.cmd == 'STOP': self.es_block = self.es self.put_operation() - self.reset() + self.reset_variables() elif self.cmd == 'START REPEAT': self.es_block = self.es self.putb([0, ['Warning: STOP expected (not RESTART)']]) self.put_operation() - self.reset() + self.reset_variables() self.ss_block = self.ss self.state = 'GET CONTROL WORD' else: - self.reset() + self.reset_variables() def decode(self, ss, es, data): self.cmd, self.databyte = data