X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Feeprom24xx%2Fpd.py;h=49c586d23b417ebbbd8729e05ae2dfbbc6193e24;hp=386431e12419144f53e7c7359e9e968a04d489e4;hb=8968f2fe6d561f48608a6f03e43045e10b99a689;hpb=2f37032807e19bc93b7f3223e1568db46318790c diff --git a/decoders/eeprom24xx/pd.py b/decoders/eeprom24xx/pd.py index 386431e..49c586d 100644 --- a/decoders/eeprom24xx/pd.py +++ b/decoders/eeprom24xx/pd.py @@ -14,15 +14,14 @@ ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## along with this program; if not, see . ## 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' @@ -73,9 +72,12 @@ class Decoder(srd.Decoder): ('binary', 'Binary'), ) - def __init__(self, **kwargs): + 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) @@ -91,7 +93,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 = [] @@ -180,7 +182,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 @@ -238,7 +240,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) @@ -250,18 +252,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' @@ -273,20 +275,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': @@ -295,7 +297,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': @@ -303,18 +305,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' @@ -323,7 +325,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': @@ -333,7 +335,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': @@ -341,7 +343,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: @@ -349,31 +351,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': @@ -384,9 +386,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': @@ -395,22 +397,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