diff options
author | Uwe Hermann <uwe@hermann-uwe.de> | 2011-12-01 11:04:35 +0100 |
---|---|---|
committer | Uwe Hermann <uwe@hermann-uwe.de> | 2011-12-01 11:04:35 +0100 |
commit | 400f9ae7ff16bb611d758d75ff4931b667561b11 (patch) | |
tree | 6cd47d3e2766e0f473405899a21b8833deb61d0f /decoders | |
parent | 9611dc5f8b88f0dc43fbb00a91d1222ee720d2b6 (diff) | |
download | libsigrokdecode-400f9ae7ff16bb611d758d75ff4931b667561b11.tar.gz libsigrokdecode-400f9ae7ff16bb611d758d75ff4931b667561b11.zip |
srd: i2c.py: States are global, not per-instance.
Diffstat (limited to 'decoders')
-rw-r--r-- | decoders/i2c.py | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/decoders/i2c.py b/decoders/i2c.py index 7c3b087..93cf167 100644 --- a/decoders/i2c.py +++ b/decoders/i2c.py @@ -126,6 +126,11 @@ # 'signals': [{'SCL': }]} # +# States +FIND_START = 0 +FIND_ADDRESS = 1 +FIND_DATA = 2 + class Sample(): def __init__(self, data): self.data = data @@ -168,8 +173,7 @@ class Decoder(): self.startsample = -1 self.is_repeat_start = 0 - self.FIND_START, self.FIND_ADDRESS, self.FIND_DATA = range(3) - self.state = self.FIND_START + self.state = FIND_START # Get the channel/probe number of the SCL/SDA signals. self.scl_bit = self.probes['scl']['ch'] @@ -208,7 +212,7 @@ class Decoder(): # 'data': None, 'ann': None}, o = (self.is_repeat_start == 1) and 'Sr' or 'S' out.append(o) - self.state = self.FIND_ADDRESS + self.state = FIND_ADDRESS self.bitcount = self.databyte = 0 self.is_repeat_start = 1 self.wr = -1 @@ -235,11 +239,11 @@ class Decoder(): ack = (sda == 1) and 'N' or 'A' - if self.state == self.FIND_ADDRESS: + if self.state == FIND_ADDRESS: d = self.databyte & 0xfe # The READ/WRITE bit is only in address bytes, not data bytes. self.wr = (self.databyte & 1) and 1 or 0 - elif self.state == self.FIND_DATA: + elif self.state == FIND_DATA: d = self.databyte else: # TODO: Error? @@ -252,13 +256,13 @@ class Decoder(): o = {'data': '0x%02x' % d} # TODO: Simplify. - if self.state == self.FIND_ADDRESS and self.wr == 1: + if self.state == FIND_ADDRESS and self.wr == 1: o['type'] = 'AW' - elif self.state == self.FIND_ADDRESS and self.wr == 0: + elif self.state == FIND_ADDRESS and self.wr == 0: o['type'] = 'AR' - elif self.state == self.FIND_DATA and self.wr == 1: + elif self.state == FIND_DATA and self.wr == 1: o['type'] = 'DW' - elif self.state == self.FIND_DATA and self.wr == 0: + elif self.state == FIND_DATA and self.wr == 0: o['type'] = 'DR' out.append(o) @@ -270,9 +274,9 @@ class Decoder(): self.bitcount = self.databyte = 0 self.startsample = -1 - if self.state == self.FIND_ADDRESS: - self.state = self.FIND_DATA - elif self.state == self.FIND_DATA: + if self.state == FIND_ADDRESS: + self.state = FIND_DATA + elif self.state == FIND_DATA: # There could be multiple data bytes in a row. # So, either find a STOP condition or another data byte next. pass @@ -286,7 +290,7 @@ class Decoder(): # 'data': None, 'ann': None}, o = 'P' out.append(o) - self.state = self.FIND_START + self.state = FIND_START self.is_repeat_start = 0 self.wr = -1 @@ -321,13 +325,13 @@ class Decoder(): # TODO: Wait until the bus is idle (SDA = SCL = 1) first? # State machine. - if self.state == self.FIND_START: + if self.state == FIND_START: if self.is_start_condition(scl, sda): out += self.find_start(scl, sda) - elif self.state == self.FIND_ADDRESS: + elif self.state == FIND_ADDRESS: if self.is_data_bit(scl, sda): out += self.find_address_or_data(scl, sda) - elif self.state == self.FIND_DATA: + elif self.state == FIND_DATA: if self.is_data_bit(scl, sda): out += self.find_address_or_data(scl, sda) elif self.is_start_condition(scl, sda): |