X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fusb_signalling%2Fpd.py;h=424117dbe2cb5613744f6f54afd88b7022fa892c;hp=c0e0141d7dcfd5554d3b10ece73180b3278ed968;hb=287e2788a726732e5f29eb3f5f4fe9d68fac4d05;hpb=12c567037d3bb4b52e5553397c2f9aef6859b840 diff --git a/decoders/usb_signalling/pd.py b/decoders/usb_signalling/pd.py index c0e0141..424117d 100644 --- a/decoders/usb_signalling/pd.py +++ b/decoders/usb_signalling/pd.py @@ -135,6 +135,9 @@ class Decoder(srd.Decoder): ) def __init__(self): + self.reset() + + def reset(self): self.samplerate = None self.oldsym = 'J' # The "idle" state is J. self.ss_block = None @@ -302,7 +305,7 @@ class Decoder(srd.Decoder): raise SamplerateError('Cannot decode without samplerate.') # Seed internal state from the very first sample. - pins = self.wait({'skip': 1}) + pins = self.wait() sym = symbols[self.options['signalling']][pins] self.handle_idle(sym) @@ -329,9 +332,10 @@ class Decoder(srd.Decoder): elif self.state == 'GET EOP': self.get_eop(sym) elif self.state == 'WAIT IDLE': - pins = self.wait({'skip': 1}) - if pins == (0, 0): - continue + # Skip "all-low" input. Wait for high level on either DP or DM. + pins = self.wait() + while not pins[0] and not pins[1]: + pins = self.wait([{0: 'h'}, {1: 'h'}]) if self.samplenum - self.samplenum_lastedge > 1: sym = symbols[self.options['signalling']][pins] self.handle_idle(sym)