]> git.earman.xyz Git - sensor-watch.git/commitdiff
launcher: improvements to screensaver mode
authorJoey Castillo <jose.castillo@gmail.com>
Mon, 4 Oct 2021 15:09:11 +0000 (11:09 -0400)
committerJoey Castillo <jose.castillo@gmail.com>
Mon, 4 Oct 2021 18:12:39 +0000 (14:12 -0400)
launcher/launcher.c

index 20fd7e59785ed1e61b0b78feefce12d2d69efda6..43921106e9aadfff625bc9121ae972f1076fe78a 100644 (file)
@@ -130,9 +130,19 @@ bool app_loop() {
         watch_rtc_register_alarm_callback(cb_alarm_fired, alarm_time, ALARM_MATCH_SS);
         watch_register_extwake_callback(BTN_ALARM, cb_alarm_btn_extwake, true);
         event.value = 0;
-        event.bit.event_type = EVENT_SCREENSAVER;
-        widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
-        watch_enter_shallow_sleep(true);
+
+        // this is a little mini-runloop.
+        // as long as screensaver_ticks is -1 (i.e. screensaver is active), we wake up here, update the screen, and go right back to sleep.
+        while (launcher_state.screensaver_ticks == -1) {
+            event.bit.event_type = EVENT_SCREENSAVER;
+            widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
+            watch_enter_shallow_sleep(true);
+        }
+        // as soon as screensaver_ticks is reset by the extwake handler, we bail out of the loop and reactivate ourselves.
+        event.bit.event_type = EVENT_ACTIVATE;
+        // this is a hack tho: waking from shallow sleep, app_setup does get called, but it happens before we have reset our ticks.
+        // need to figure out if there's a better heuristic for determining how we woke up.
+        app_setup();
     }
 
     bool can_sleep = true;
@@ -175,10 +185,8 @@ void cb_alarm_btn_interrupt() {
 }
 
 void cb_alarm_btn_extwake() {
+    // wake up!
     _launcher_reset_screensaver_countdown();
-    // this is a hack: waking from shallow sleep, app_setup does get called, but it happens before we reset our ticks.
-    // need to figure out if there's a better heuristic for determining how we woke up.
-    app_setup();
 }
 
 void cb_alarm_fired() {