wasp-os/wasp/drivers/nrf_rtc.py
Daniel Thompson 127df66335 wasp: pinetime: Basic RTC support
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.
2020-02-03 19:12:04 +00:00

59 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)