diff options
Diffstat (limited to 'decoders/dcf77/dcf77.py')
-rw-r--r-- | decoders/dcf77/dcf77.py | 26 |
1 files changed, 24 insertions, 2 deletions
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. |