diff options
Diffstat (limited to 'wasp/drivers/nrf_rtc.py')
| -rw-r--r-- | wasp/drivers/nrf_rtc.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/wasp/drivers/nrf_rtc.py b/wasp/drivers/nrf_rtc.py new file mode 100644 index 0000000..c130a76 --- /dev/null +++ b/wasp/drivers/nrf_rtc.py @@ -0,0 +1,58 @@ +""" 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) |
