summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wasp/boards/pinetime/manifest.py1
-rw-r--r--wasp/boards/pinetime/watch.py8
-rw-r--r--wasp/drivers/nrf_rtc.py58
3 files changed, 64 insertions, 3 deletions
diff --git a/wasp/boards/pinetime/manifest.py b/wasp/boards/pinetime/manifest.py
index 5e525e3..ea772ac 100644
--- a/wasp/boards/pinetime/manifest.py
+++ b/wasp/boards/pinetime/manifest.py
@@ -3,6 +3,7 @@ freeze('../..',
'boot.py',
'demo.py',
'drivers/battery.py',
+ 'drivers/nrf_rtc.py',
'drivers/signal.py',
'drivers/st7789.py',
'drivers/vibrator.py',
diff --git a/wasp/boards/pinetime/watch.py b/wasp/boards/pinetime/watch.py
index d6a8210..a8708c7 100644
--- a/wasp/boards/pinetime/watch.py
+++ b/wasp/boards/pinetime/watch.py
@@ -1,9 +1,10 @@
from machine import Pin
-from machine import RTCounter as RTC
+from machine import RTCounter
#from machine import Signal
from machine import SPI
from drivers.battery import Battery
+from drivers.nrf_rtc import RTC
from drivers.signal import Signal
from drivers.st7789 import ST7789_SPI
from drivers.vibrator import Vibrator
@@ -50,11 +51,12 @@ display = Display()
backlight.set(1)
# Start measuring time (and feeding the watchdog)
-rtc = RTC(1, mode=RTC.PERIODIC)
-rtc.start()
+rtc = RTC(RTCounter(1, mode=RTCounter.PERIODIC))
+rtc.counter.start()
battery = Battery(
Pin('BATTERY', Pin.IN),
Signal(Pin('CHARGING', Pin.IN), invert=True),
Signal(Pin('USB_PWR', Pin.IN), invert=True))
vibrator = Vibrator(Pin('MOTOR', Pin.OUT, value=0), active_low=True)
+button = Pin('BUTTON', Pin.IN)
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)