X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fpjdl%2Fpd.py;h=d5cc39f22ba37c36eb1657843595c19f9b433195;hb=5eb664089f9123a91841f66535ffb1689d9ddd98;hp=11f72ab98a99e04d04a64a1f3f5779fdee7ad162;hpb=0fb7ce22ec8641ef68b6805259ee84cf4c88a084;p=libsigrokdecode.git diff --git a/decoders/pjdl/pd.py b/decoders/pjdl/pd.py index 11f72ab..d5cc39f 100644 --- a/decoders/pjdl/pd.py +++ b/decoders/pjdl/pd.py @@ -120,7 +120,7 @@ class Decoder(srd.Decoder): license = 'gplv2+' inputs = ['logic'] outputs = ['pjon_link'] - tags = ['Embedded'] + tags = ['Embedded/industrial'] channels = ( {'id': 'data' , 'name': 'DATA', 'desc': 'Single wire data'}, ) @@ -510,7 +510,9 @@ class Decoder(srd.Decoder): is_short = bit_level and self.span_is_short(span) if is_pad: - ss, es = last_snum, curr_snum + # BEWARE! Use ss value of last edge (genuinely seen, or + # inserted after a DATA byte) for PAD bit annotations. + ss, es = self.edges[-2], curr_snum texts = ['PAD', '{:d}'.format(bit_level)] self.putg(ss, es, [ANN_PAD_BIT, texts]) self.symbols_append(ss, es, 'PAD_BIT', bit_level) @@ -674,10 +676,20 @@ class Decoder(srd.Decoder): # the transmitter's and the sender's timings differ within a # margin, and the transmitter may hold the last DATA bit's # HIGH level for a little longer. + # + # When no falling edge is seen within the maximum tolerance + # for the last DATA bit, then this could be the combination + # of a HIGH DATA bit and a PAD bit without a LOW in between. + # Fake an edge in that case, to re-use existing code paths. + # Make sure to keep referencing times to the last SYNC pad's + # falling edge. This is the last reliable condition we have. if curr_level: hold = self.hold_high_width curr_level, = self.wait([{PIN_DATA: 'l'}, {'skip': int(hold)}]) self.carrier_check(curr_level, self.samplenum) + if self.matched[1]: + self.edges.append(curr_snum) + curr_level = 1 - curr_level curr_snum = self.samplenum # Get the byte value from the bits (when available).