- def find_clk_edge(self, clock_pin, data_pin):
- # Ignore sample if the clock pin hasn't changed.
- if clock_pin == self.prev_clock:
- return
- self.prev_clock = clock_pin
-
- # Sample on falling clock edge.
- if clock_pin == 1:
- return
-
- # Found the correct clock edge, now get the bits.
- self.handle_bits(data_pin)
-
- def decode(self, ss, es, data):
- for (self.samplenum, pins) in data:
- clock_pin, data_pin = pins[0], pins[1]
-
- # Ignore identical samples.
- if self.prev_pins == pins:
- continue
- self.prev_pins = pins
-
- if clock_pin == 0 and not self.clock_was_high:
- continue
- self.clock_was_high = True
-
- self.find_clk_edge(clock_pin, data_pin)
+ def decode(self):
+ while True:
+ # Sample data bits on the falling clock edge (assume the device
+ # is the transmitter). Expect the data byte transmission to end
+ # at the rising clock edge. Cope with the absence of host activity.
+ _, data_pin = self.wait({0: 'f'})
+ self.handle_bits(data_pin)
+ if self.bitcount == 1 + 8 + 1 + 1:
+ _, data_pin = self.wait({0: 'r'})
+ self.handle_bits(data_pin)