diff options
| author | Daniel Thompson <daniel@redfelineninja.org.uk> | 2020-03-07 11:52:42 (GMT) |
|---|---|---|
| committer | Daniel Thompson <daniel@redfelineninja.org.uk> | 2020-03-07 11:52:42 (GMT) |
| commit | 138425f4d42bbe22ab389139916812384aedb972 (patch) | |
| tree | a12f63d1633edf4b40413bd0223d4829e00efc84 /wasp/manager.py | |
| parent | 1ebafc083b3bcc1fd162834054a1b854201da2dc (diff) | |
wasp: manager: Start refining the application interface
This is the first step in starting to formalize the seperation of
applications from the system manager.
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 |
