aboutsummaryrefslogtreecommitdiffstats
path: root/pico-watch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pico-watch.cpp')
-rw-r--r--pico-watch.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/pico-watch.cpp b/pico-watch.cpp
index c6a3aa8..9e22687 100644
--- a/pico-watch.cpp
+++ b/pico-watch.cpp
@@ -11,6 +11,7 @@
#include "apps/home_menu.hpp"
int current_app = 0;
+bool is_sleeping = false;
bool app_ready = true;
Api app_api;
@@ -55,7 +56,19 @@ int app_bgrefresh(int app_id) {
return (*APPS_FUNC_BGREFRESH[app_id])(&app_api, app_id==current_app);
}
-bool apps_bgrefresh(struct repeating_timer *t) { // TODO: Refresh done on core1
+bool repeating_callback(struct repeating_timer *t) {
+ // Enter shallow sleep mode when needed
+ uint32_t time_since_last_press = to_ms_since_boot(get_absolute_time())-button_last_pressed_time;
+ if (!is_sleeping && time_since_last_press > ENTER_SLEEP_DELAY) {
+ is_sleeping = true;
+ app_api.performance_set(Api::perf_modes::ENTER_SHALLOW_SLEEP);
+ app_api.display_power(false);
+ } else if (is_sleeping && time_since_last_press < ENTER_SLEEP_DELAY) {
+ is_sleeping = false;
+ app_api.performance_set(Api::perf_modes::EXIT_SHALLOW_SLEEP);
+ app_api.display_power(true);
+ }
+ // Refresh each app, but should it be done when sleeping?
for (int i=0; i < NUMBER_OF_APPS; i++) {
app_bgrefresh(i);
}
@@ -77,12 +90,12 @@ int main() {
init_buttons();
app_api.init();
struct repeating_timer timer;
- add_repeating_timer_ms(250, apps_bgrefresh, NULL, &timer);
+ add_repeating_timer_ms(250, repeating_callback, NULL, &timer); // TODO: Execute on core1
app_init(current_app);
while (1) {
- if (app_ready)
+ if (app_ready && !is_sleeping)
app_render(current_app); // FIXME: This may cause race conditions when switching app
sleep_ms(app_api.performance_render_interval_get());
}