diff options
Diffstat (limited to 'wasp/manager.py')
| -rw-r--r-- | wasp/manager.py | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/wasp/manager.py b/wasp/manager.py index 2c9ab8c..879c3f2 100644 --- a/wasp/manager.py +++ b/wasp/manager.py @@ -2,21 +2,51 @@ import clock import gc import machine +EVENT_TICK = 0x100 +EVENT_KEYMASK = 0xff + class Manager(object): def __init__(self, watch): self.watch = watch + + self.app = None self.switch(clock.ClockApp()) self.sleep_at = watch.rtc.uptime + 90 self.charging = True def switch(self, app): + if self.app: + self.app.background(self) + + # Clear out any configuration from the old application + self.tick_period_ms = 0 + self.tick_expiry = None + self.app = app - app.draw(self.watch) + app.foreground(self) + + def request_tick(self, period_ms=None): + """Request (and subscribe to) a periodic tick event. + + Note: With the current simplistic timer implementation sub-second + tick intervals are not possible. + """ + self.tick_period_ms = period_ms + self.tick_expiry = self.watch.rtc.get_uptime_ms() + period_ms def tick(self): + rtc = self.watch.rtc + if self.sleep_at: - if self.watch.rtc.update(): - self.app.update(self.watch) + if rtc.update() and self.tick_expiry: + now = rtc.get_uptime_ms() + + if self.tick_expiry <= now: + ticks = 0 + while self.tick_expiry <= now: + self.tick_expiry += self.tick_period_ms + ticks += 1 + self.app.tick(ticks) if self.watch.button.value(): self.sleep_at = self.watch.rtc.uptime + 15 @@ -34,7 +64,7 @@ class Manager(object): charging = self.watch.battery.charging() if self.watch.button.value() or self.charging != charging: self.watch.display.poweron() - self.app.update(self.watch) + self.app.tick(None) self.watch.backlight.set(2) self.sleep_at = self.watch.rtc.uptime + 15 |
