summaryrefslogtreecommitdiffstats
path: root/launcher/launcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/launcher.c')
-rw-r--r--launcher/launcher.c90
1 files changed, 43 insertions, 47 deletions
diff --git a/launcher/launcher.c b/launcher/launcher.c
index 26fec93e..ff10cf6e 100644
--- a/launcher/launcher.c
+++ b/launcher/launcher.c
@@ -7,6 +7,11 @@
LauncherState launcher_state;
void * widget_contexts[LAUNCHER_NUM_WIDGETS];
+void cb_mode_pressed();
+void cb_light_pressed();
+void cb_alarm_pressed();
+void cb_tick();
+
void launcher_request_tick_frequency(uint8_t freq) {
watch_rtc_disable_all_periodic_callbacks();
watch_rtc_register_periodic_callback(cb_tick, freq);
@@ -16,10 +21,26 @@ void launcher_illuminate_led() {
launcher_state.light_ticks = 3;
}
+void launcher_move_to_next_widget() {
+ launcher_state.widget_changed = true;
+ widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
+ launcher_state.current_widget = (launcher_state.current_widget + 1) % LAUNCHER_NUM_WIDGETS;
+ widgets[launcher_state.current_widget].activate(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
+ watch_display_string(widgets[launcher_state.current_widget].widget_name, 0);
+}
+
+void launcher_move_to_first_widget() {
+ launcher_state.widget_changed = true;
+ widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
+ launcher_state.current_widget = 0;
+ widgets[0].activate(&launcher_state.launcher_settings, widget_contexts[0]);
+ watch_display_string(widgets[launcher_state.current_widget].widget_name, 0);
+}
void app_init() {
memset(&launcher_state, 0, sizeof(launcher_state));
launcher_state.launcher_settings.bit.led_green_color = 0xF;
+ launcher_state.launcher_settings.bit.led_red_color = 0x0;
}
void app_wake_from_deep_sleep() {
@@ -41,6 +62,8 @@ void app_setup() {
for(uint8_t i = 0; i < LAUNCHER_NUM_WIDGETS; i++) {
widgets[i].setup(&launcher_state.launcher_settings, widget_contexts[i]);
}
+
+ launcher_move_to_first_widget();
}
void app_prepare_for_sleep() {
@@ -61,8 +84,10 @@ bool app_loop() {
// If the LED is off and should be on, turn it on
if (launcher_state.light_ticks > 0 && !launcher_state.led_on) {
- watch_set_led_color(launcher_state.launcher_settings.bit.led_red_color, launcher_state.launcher_settings.bit.led_green_color);
+ watch_set_led_color(launcher_state.launcher_settings.bit.led_red_color ? (0xF | launcher_state.launcher_settings.bit.led_red_color << 4) : 0,
+ launcher_state.launcher_settings.bit.led_green_color ? (0xF | launcher_state.launcher_settings.bit.led_green_color << 4) : 0);
launcher_state.led_on = true;
+
}
// if the LED is on and should be off, turn it off
@@ -77,71 +102,42 @@ bool app_loop() {
}
if (event) {
- event = 0;
widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
+ event = 0;
}
+
if (launcher_state.led_on) return false;
return true;
}
-void move_to_next_widget() {
- launcher_state.widget_changed = true;
- widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
- launcher_state.current_widget = (launcher_state.current_widget + 1) % LAUNCHER_NUM_WIDGETS;
- widgets[launcher_state.current_widget].activate(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
-}
-
-void move_to_first_widget() {
- launcher_state.widget_changed = true;
- widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);
- launcher_state.current_widget = 0;
- widgets[0].activate(&launcher_state.launcher_settings, widget_contexts[0]);
+LauncherEvent _figure_out_button_event(LauncherEvent button_down_event, uint8_t *down_timestamp) {
+ watch_date_time date_time = watch_rtc_get_date_time();
+ if (*down_timestamp) {
+ uint8_t diff = ((61 + date_time.unit.second) - *down_timestamp) % 60;
+ *down_timestamp = 0;
+ if (diff > 1) return button_down_event + 2;
+ else return button_down_event + 1;
+ } else {
+ *down_timestamp = date_time.unit.second + 1;
+ return button_down_event;
+ }
}
void cb_light_pressed() {
- struct calendar_date_time date_time;
- watch_get_date_time(&date_time);
- if (launcher_state.light_down_timestamp) {
- uint8_t diff = (61 + date_time.time.sec) - launcher_state.light_down_timestamp;
- if (diff > 1) event = EVENT_LIGHT_LONG_PRESS;
- else event = EVENT_LIGHT_BUTTON_UP;
- launcher_state.light_down_timestamp = 0;
- } else {
- launcher_state.light_down_timestamp = date_time.time.sec + 1;
- event = EVENT_LIGHT_BUTTON_DOWN;
- }
+ event = _figure_out_button_event(EVENT_LIGHT_BUTTON_DOWN, &launcher_state.light_down_timestamp);
}
void cb_mode_pressed() {
- struct calendar_date_time date_time;
- watch_get_date_time(&date_time);
- if (launcher_state.mode_down_timestamp) {
- uint8_t diff = (61 + date_time.time.sec) - launcher_state.mode_down_timestamp;
- if (diff > 1) event = EVENT_MODE_LONG_PRESS;
- else event = EVENT_MODE_BUTTON_UP;
- launcher_state.mode_down_timestamp = 0;
- } else {
- launcher_state.mode_down_timestamp = date_time.time.sec + 1;
- event = EVENT_MODE_BUTTON_DOWN;
- }
+ event = _figure_out_button_event(EVENT_MODE_BUTTON_DOWN, &launcher_state.mode_down_timestamp);
}
void cb_alarm_pressed() {
- struct calendar_date_time date_time;
- watch_get_date_time(&date_time);
- if (launcher_state.alarm_down_timestamp) {
- uint8_t diff = (61 + date_time.time.sec) - launcher_state.alarm_down_timestamp;
- if (diff > 1) event = EVENT_ALARM_LONG_PRESS;
- else event = EVENT_ALARM_BUTTON_UP;
- launcher_state.alarm_down_timestamp = 0;
- } else {
- launcher_state.alarm_down_timestamp = date_time.time.sec + 1;
- event = EVENT_ALARM_BUTTON_DOWN;
- }
+ event = _figure_out_button_event(EVENT_ALARM_BUTTON_DOWN, &launcher_state.alarm_down_timestamp);
}
void cb_tick() {
event = EVENT_TICK;
+ if (launcher_state.light_ticks) launcher_state.light_ticks--;
}