127df66335
Currently this supports time only (no date) and it based on the RTCounter class which is customized for nRF ports. At present the nRF port doesn't have proper machine.rtc support so we have implemented within wasp instead.
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
""" Real Time Clock based on the nRF-family low power counter """
|
|
|
|
#class Stim(object):
|
|
# def __init__(self):
|
|
# self(0)
|
|
#
|
|
# def __call__(self, v):
|
|
# self.c = v
|
|
#
|
|
# def counter(self):
|
|
# return self.c
|
|
|
|
class RTC(object):
|
|
"""Real Time Clock based on the nRF-family low power counter.
|
|
|
|
TODO: Maintain hh:mm:ss as an array so we can report time
|
|
without memory allocation.
|
|
"""
|
|
|
|
def __init__(self, counter):
|
|
self.counter = counter
|
|
self.uptime = 0
|
|
self.set_time((12, 0, 0))
|
|
|
|
def update(self):
|
|
newcount = self.counter.counter()
|
|
split = newcount - self.lastcount
|
|
if split == 0:
|
|
return False
|
|
if split < 0:
|
|
split += (1 << 24)
|
|
elapsed = split // 8
|
|
self.lastcount += elapsed * 8
|
|
self.lastcount &= (1 << 24) - 1
|
|
|
|
self.uptime += elapsed
|
|
|
|
self.ss += elapsed
|
|
if self.ss >= 60:
|
|
self.mm += self.ss // 60
|
|
self.ss %= 60
|
|
|
|
if self.mm >= 60:
|
|
self.hh += self.mm // 60
|
|
self.mm %= 60
|
|
self.hh %= 24
|
|
|
|
return True
|
|
|
|
def set_time(self, t):
|
|
self.lastcount = self.counter.counter()
|
|
self.hh = t[0]
|
|
self.mm = t[1]
|
|
self.ss = t[2]
|
|
|
|
def get_time(self):
|
|
self.update()
|
|
return (self.hh, self.mm, self.ss)
|