X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fdcf77%2Fdcf77.py;fp=decoders%2Fdcf77%2Fdcf77.py;h=4da9bc422d55472f4ea8044d61563e05e74a8b65;hp=e84b3db0e5f05034e4527b05ee617679deeff251;hb=fcd8c14d65034400bdd70aff28bda185f84d9196;hpb=abbc128575797da7b56b08940174229ce8fa8a9b diff --git a/decoders/dcf77/dcf77.py b/decoders/dcf77/dcf77.py index e84b3db..4da9bc4 100644 --- a/decoders/dcf77/dcf77.py +++ b/decoders/dcf77/dcf77.py @@ -40,16 +40,18 @@ class Decoder(srd.Decoder): {'id': 'data', 'name': 'DATA', 'desc': 'DATA line'}, ] optional_probes = [ - {'id': 'pon', 'name': 'PON', 'desc': 'TODO'}, + {'id': 'pon', 'name': 'PON', 'desc': 'Power on'}, ] options = {} annotations = [ ['Text', 'Human-readable text'], + ['Warnings', 'Human-readable warnings'], ] def __init__(self, **kwargs): self.state = 'WAIT FOR RISING EDGE' self.oldval = None + self.oldpon = None self.samplenum = 0 self.bit_start = 0 self.bit_start_old = 0 @@ -195,7 +197,27 @@ class Decoder(srd.Decoder): raise Exception('Invalid DCF77 bit: %d' % c) def decode(self, ss, es, data): - for (self.samplenum, (val)) in data: # TODO: Handle optional PON. + for (self.samplenum, (val, pon)) in data: + + # Always remember the old PON state. + if self.oldpon != pon: + self.oldpon = pon + + # Warn if PON goes low. + if self.oldpon == 1 and pon == 0: + self.pon_ss = self.samplenum + self.put(self.samplenum, self.samplenum, self.out_ann, + [1, ['Warning: PON goes low, DCF77 reception ' + 'no longer possible']]) + elif self.oldpon == 0 and pon == 1: + self.put(self.samplenum, self.samplenum, self.out_ann, + [0, ['PON goes high, DCF77 reception now possible']]) + self.put(self.pon_ss, self.samplenum, self.out_ann, + [1, ['Warning: PON low, DCF77 reception disabled']]) + + # Ignore samples where PON == 0, they can't contain DCF77 signals. + if pon == 0: + continue if self.state == 'WAIT FOR RISING EDGE': # Wait until the next rising edge occurs.