- if self.state == 'INIT':
- sdq, = self.wait({0: 'h'}) # Wait until the line is high before starting
- self.state = 'DATA'
-
- elif self.state == 'DATA':
- sdq, = self.wait({0: 'f'}) # Falling edge
-
- self.startsample = self.samplenum
- if self.bytepos == 0:
- self.bytepos = self.samplenum
-
- sdq, = self.wait({0: 'r'}) # Rising edge
-
- delta = self.samplenum - self.startsample
- if delta > self.break_threshold:
- self.state = 'BREAK'
- elif delta > self.half_bit_width:
- self.handle_bit(0)
- else:
- self.handle_bit(1)
-
- elif self.state == 'BREAK':
+ # Get the length of a low pulse (falling to rising edge).
+ sdq, = self.wait({Pin.SDQ: 'f'})
+ self.startsample = self.samplenum
+ if self.bytepos == 0:
+ self.bytepos = self.samplenum
+ sdq, = self.wait({Pin.SDQ: 'r'})
+
+ # Check for 0 or 1 data bits, or the BREAK symbol.
+ delta = self.samplenum - self.startsample
+ if delta > break_threshold: