## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##
-#
# DCF77 protocol decoder
-#
-# More information:
-# http://en.wikipedia.org/wiki/DCF77
-#
-
-#
-# Protocol output format:
-# TODO
-#
import sigrokdecode as srd
import calendar
-# States
-WAIT_FOR_RISING_EDGE = 0
-GET_BIT = 1
-
# Annotation feed formats
-ANN_ASCII = 0
+ANN_TEXT = 0
# Return the specified BCD number (max. 8 bits) as integer.
def bcd2int(b):
return (b & 0x0f) + ((b >> 4) * 10)
class Decoder(srd.Decoder):
+ api_version = 1
id = 'dcf77'
name = 'DCF77'
longname = 'DCF77 time protocol'
- desc = 'TODO.'
- longdesc = 'TODO.'
+ desc = 'European longwave time signal (77.5kHz carrier signal).'
license = 'gplv2+'
inputs = ['logic']
outputs = ['dcf77']
probes = [
{'id': 'data', 'name': 'DATA', 'desc': 'DATA line'},
]
+ optional_probes = [
+ {'id': 'pon', 'name': 'PON', 'desc': 'TODO'},
+ ]
options = {}
annotations = [
- # ANN_ASCII
- ['ASCII', 'TODO: description'],
+ # ANN_TEXT
+ ['Text', 'Human-readable text'],
]
def __init__(self, **kwargs):
- self.state = WAIT_FOR_RISING_EDGE
+ self.state = 'WAIT FOR RISING EDGE'
self.oldval = None
self.samplenum = 0
self.bit_start = 0
raise Exception('Invalid DCF77 bit: %d' % c)
def decode(self, ss, es, data):
- for samplenum, (pon, val) in data: # FIXME
-
- self.samplenum += 1 # FIXME. Use samplenum. Off-by-one?
+ for (self.samplenum, (val)) in data: # TODO: Handle optional PON.
- if self.state == WAIT_FOR_RISING_EDGE:
+ if self.state == 'WAIT FOR RISING EDGE':
# Wait until the next rising edge occurs.
if not (self.oldval == 0 and val == 1):
self.oldval = val
self.handle_dcf77_bit(bit)
self.bitcount += 1
- self.state = WAIT_FOR_RISING_EDGE
+ self.state = 'WAIT FOR RISING EDGE'
else:
- raise Exception('Invalid state: %s' % self.state)
+ raise Exception('Invalid state: %d' % self.state)
self.oldval = val