summaryrefslogtreecommitdiff
path: root/wasp/drivers/nrf_rtc.py
diff options
context:
space:
mode:
Diffstat (limited to 'wasp/drivers/nrf_rtc.py')
-rw-r--r--wasp/drivers/nrf_rtc.py58
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)