diff options
| -rw-r--r-- | launcher/launcher.c | 90 | ||||
| -rw-r--r-- | launcher/launcher.h | 8 | ||||
| -rw-r--r-- | launcher/launcher_config.h | 8 | ||||
| -rwxr-xr-x | launcher/make/Makefile | 3 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget.c | 24 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget.h | 20 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget_1.c | 32 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget_1.h | 19 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget_2.c | 32 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget_2.h | 19 | 
10 files changed, 155 insertions, 100 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--;  } diff --git a/launcher/launcher.h b/launcher/launcher.h index bc8d9191..7a794545 100644 --- a/launcher/launcher.h +++ b/launcher/launcher.h @@ -42,7 +42,6 @@ typedef void (*launcher_widget_resign)(LauncherSettings *settings, void *context  typedef struct WatchWidget {      char widget_name[11]; -    bool snapback_enabled;      launcher_widget_setup setup;      launcher_widget_activate activate;      launcher_widget_loop loop; @@ -67,9 +66,8 @@ typedef struct LauncherState {      uint8_t alarm_down_timestamp;  } LauncherState; -void cb_mode_pressed(); -void cb_light_pressed(); -void cb_alarm_pressed(); -void cb_tick(); +void launcher_move_to_next_widget(); +void launcher_move_to_first_widget(); +void launcher_illuminate_led();  #endif // LAUNCHER_H_ diff --git a/launcher/launcher_config.h b/launcher/launcher_config.h index cb820a7e..db9d1be1 100644 --- a/launcher/launcher_config.h +++ b/launcher/launcher_config.h @@ -1,12 +1,14 @@  #ifndef LAUNCHER_CONFIG_H_  #define LAUNCHER_CONFIG_H_ -#include "fake_widget.h" +#include "fake_widget_1.h" +#include "fake_widget_2.h" -#define LAUNCHER_NUM_WIDGETS 1 +#define LAUNCHER_NUM_WIDGETS 2  WatchWidget widgets[LAUNCHER_NUM_WIDGETS] = { -    fake_widget +    fake_widget_1, +    fake_widget_2,  }; diff --git a/launcher/make/Makefile b/launcher/make/Makefile index dce33f45..f02c1853 100755 --- a/launcher/make/Makefile +++ b/launcher/make/Makefile @@ -20,7 +20,8 @@ INCLUDES += \  #   ../utils/temperature.c  SRCS += \    ../launcher.c \ -  ../widgets/fake_widget.c \ +  ../widgets/fake_widget_1.c \ +  ../widgets/fake_widget_2.c \  # Leave this line at the bottom of the file; it has all the targets for making your project.  include $(TOP)/rules.mk diff --git a/launcher/widgets/fake_widget.c b/launcher/widgets/fake_widget.c deleted file mode 100644 index 70b6918c..00000000 --- a/launcher/widgets/fake_widget.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "fake_widget.h" - -void fake_widget_setup(LauncherSettings *settings, void ** context_ptr) { -    (void) settings; -    *context_ptr = NULL; -} - -void fake_widget_activate(LauncherSettings *settings, void *context) { -    (void) settings; -    (void) context; -} - -void fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) { -    (void) event; -    (void) settings; -    (void) context; - -    return true; -} - -void fake_widget_resign(LauncherSettings *settings, void *context) { -    (void) settings; -    (void) context; -} diff --git a/launcher/widgets/fake_widget.h b/launcher/widgets/fake_widget.h deleted file mode 100644 index 470cdf99..00000000 --- a/launcher/widgets/fake_widget.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef FAKE_WIDGET_H_ -#define FAKE_WIDGET_H_ - -#include "launcher.h" - -void fake_widget_setup(LauncherSettings *settings, void ** context_ptr); -void fake_widget_activate(LauncherSettings *settings, void *context); -void fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void fake_widget_resign(LauncherSettings *settings, void *context); - -#define fake_widget { \ -    "WI dGIt01", \ -    true, \ -    fake_widget_setup, \ -    fake_widget_activate, \ -    fake_widget_loop, \ -    fake_widget_resign, \ -} - -#endif // FAKE_WIDGET_H_
\ No newline at end of file diff --git a/launcher/widgets/fake_widget_1.c b/launcher/widgets/fake_widget_1.c new file mode 100644 index 00000000..aa4af2c2 --- /dev/null +++ b/launcher/widgets/fake_widget_1.c @@ -0,0 +1,32 @@ +#include "fake_widget_1.h" + +void fake_widget_1_setup(LauncherSettings *settings, void ** context_ptr) { +    (void) settings; +    // *context_ptr = NULL; +} + +void fake_widget_1_activate(LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; +} + +void fake_widget_1_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; + +    switch (event) { +        case EVENT_MODE_BUTTON_UP: +            launcher_move_to_next_widget(); +            break; +        case EVENT_LIGHT_BUTTON_UP: +            launcher_illuminate_led(); +            break; +        default: +            break; +    } +} + +void fake_widget_1_resign(LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; +} diff --git a/launcher/widgets/fake_widget_1.h b/launcher/widgets/fake_widget_1.h new file mode 100644 index 00000000..00db80cb --- /dev/null +++ b/launcher/widgets/fake_widget_1.h @@ -0,0 +1,19 @@ +#ifndef FAKE_WIDGET_1_H_ +#define FAKE_WIDGET_1_H_ + +#include "launcher.h" + +void fake_widget_1_setup(LauncherSettings *settings, void ** context_ptr); +void fake_widget_1_activate(LauncherSettings *settings, void *context); +void fake_widget_1_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void fake_widget_1_resign(LauncherSettings *settings, void *context); + +#define fake_widget_1 { \ +    "W1 d get01", \ +    fake_widget_1_setup, \ +    fake_widget_1_activate, \ +    fake_widget_1_loop, \ +    fake_widget_1_resign, \ +} + +#endif // FAKE_WIDGET_1_H_
\ No newline at end of file diff --git a/launcher/widgets/fake_widget_2.c b/launcher/widgets/fake_widget_2.c new file mode 100644 index 00000000..4ce00ce2 --- /dev/null +++ b/launcher/widgets/fake_widget_2.c @@ -0,0 +1,32 @@ +#include "fake_widget_2.h" + +void fake_widget_2_setup(LauncherSettings *settings, void ** context_ptr) { +    (void) settings; +    *context_ptr = NULL; +} + +void fake_widget_2_activate(LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; +} + +void fake_widget_2_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; + +    switch (event) { +        case EVENT_MODE_BUTTON_UP: +            launcher_move_to_next_widget(); +            break; +        case EVENT_LIGHT_BUTTON_UP: +            launcher_illuminate_led(); +            break; +        default: +            break; +    } +} + +void fake_widget_2_resign(LauncherSettings *settings, void *context) { +    (void) settings; +    (void) context; +} diff --git a/launcher/widgets/fake_widget_2.h b/launcher/widgets/fake_widget_2.h new file mode 100644 index 00000000..31bf30bc --- /dev/null +++ b/launcher/widgets/fake_widget_2.h @@ -0,0 +1,19 @@ +#ifndef FAKE_WIDGET_2_H_ +#define FAKE_WIDGET_2_H_ + +#include "launcher.h" + +void fake_widget_2_setup(LauncherSettings *settings, void ** context_ptr); +void fake_widget_2_activate(LauncherSettings *settings, void *context); +void fake_widget_2_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void fake_widget_2_resign(LauncherSettings *settings, void *context); + +#define fake_widget_2 { \ +    "W1 d get02", \ +    fake_widget_2_setup, \ +    fake_widget_2_activate, \ +    fake_widget_2_loop, \ +    fake_widget_2_resign, \ +} + +#endif // FAKE_WIDGET_2_H_
\ No newline at end of file | 
