From fcd8c14d65034400bdd70aff28bda185f84d9196 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Fri, 8 Jun 2012 21:39:09 +0200 Subject: [PATCH] srd: dcf77: Initial PON handling. --- decoders/dcf77/dcf77.py | 26 ++++++++++++++++++++++++-- 1 file 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. -- 2.30.2