diff options
| author | Joey Castillo <jose.castillo@gmail.com> | 2021-10-03 12:31:51 -0400 | 
|---|---|---|
| committer | Joey Castillo <jose.castillo@gmail.com> | 2021-10-03 12:31:51 -0400 | 
| commit | 399caa2582a4c139bd37ea0ce4480d06cfa53914 (patch) | |
| tree | a02b8fd09e459f13735071c6797c746a85af6f06 | |
| parent | 624ff19580e87915575118ca5ab4f6c33d811003 (diff) | |
| download | Sensor-Watch-399caa2582a4c139bd37ea0ce4480d06cfa53914.tar.gz Sensor-Watch-399caa2582a4c139bd37ea0ce4480d06cfa53914.tar.bz2 Sensor-Watch-399caa2582a4c139bd37ea0ce4480d06cfa53914.zip | |
more wip launcher stuff
| -rw-r--r-- | launcher/launcher.c | 37 | ||||
| -rw-r--r-- | launcher/launcher.h | 33 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget.c | 6 | ||||
| -rw-r--r-- | launcher/widgets/fake_widget.h | 12 | 
4 files changed, 48 insertions, 40 deletions
| diff --git a/launcher/launcher.c b/launcher/launcher.c index 1ad0b9da..26fec93e 100644 --- a/launcher/launcher.c +++ b/launcher/launcher.c @@ -7,8 +7,19 @@  LauncherState launcher_state;  void * widget_contexts[LAUNCHER_NUM_WIDGETS]; +void launcher_request_tick_frequency(uint8_t freq) { +    watch_rtc_disable_all_periodic_callbacks(); +    watch_rtc_register_periodic_callback(cb_tick, freq); +} + +void launcher_illuminate_led() { +    launcher_state.light_ticks = 3; +} + +  void app_init() {      memset(&launcher_state, 0, sizeof(launcher_state)); +    launcher_state.launcher_settings.bit.led_green_color = 0xF;  }  void app_wake_from_deep_sleep() { @@ -25,10 +36,10 @@ void app_setup() {      watch_enable_leds();      watch_enable_display(); -    watch_register_tick_callback(cb_tick); +    launcher_request_tick_frequency(1);      for(uint8_t i = 0; i < LAUNCHER_NUM_WIDGETS; i++) { -        widgets[i].setup(&launcher_state.launcherSettings, widget_contexts[i]); +        widgets[i].setup(&launcher_state.launcher_settings, widget_contexts[i]);      }  } @@ -50,7 +61,7 @@ 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_green(); +        watch_set_led_color(launcher_state.launcher_settings.bit.led_red_color, launcher_state.launcher_settings.bit.led_green_color);          launcher_state.led_on = true;      } @@ -67,32 +78,26 @@ bool app_loop() {      if (event) {          event = 0; -        bool can_sleep = widgets[launcher_state.current_widget].loop(event, &launcher_state.launcherSettings, widget_contexts[launcher_state.current_widget]); -        if (can_sleep) return true; - -        event = EVENT_LOOP; -        return false; +        widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);      } +    if (launcher_state.led_on) return false; +      return true;  }  void move_to_next_widget() {      launcher_state.widget_changed = true; -    widgets[launcher_state.current_widget].enter_background(&launcher_state.launcherSettings, widget_contexts[launcher_state.current_widget]); +    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].enter_foreground(&launcher_state.launcherSettings, widget_contexts[launcher_state.current_widget]); +    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].enter_background(&launcher_state.launcherSettings, widget_contexts[launcher_state.current_widget]); +    widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]);      launcher_state.current_widget = 0; -    widgets[0].enter_foreground(&launcher_state.launcherSettings, widget_contexts[0]); -} - -void illuminate_led() { -    launcher_state.light_ticks = 3; +    widgets[0].activate(&launcher_state.launcher_settings, widget_contexts[0]);  }  void cb_light_pressed() { diff --git a/launcher/launcher.h b/launcher/launcher.h index 888d1adb..bc8d9191 100644 --- a/launcher/launcher.h +++ b/launcher/launcher.h @@ -6,16 +6,16 @@  // TODO: none of this is implemented  typedef union {      struct { -        uint32_t reserved : 1; -        uint32_t clock_mode_24h : 1;        // determines whether display should use 12 or 24 hour mode. +        uint32_t clock_mode_24h : 1;        // determines whether clock should use 12 or 24 hour mode.          uint32_t signal_should_sound : 1;   // if true, a double beep is played at the top of each hour. -        uint32_t alarm_should_sound : 1;    // if true, the alarm interrupt plays a song. -        uint32_t note_index : 7;            // the index of the tone to play, or 0x7F for no tone. -        uint32_t snapback_enabled : 1;      // if true, snaps back to the main screen after 5 minutes -        uint32_t sleep_interval : 3;        // 0 to disable sleep, or a number of days to sleep after. -        uint32_t sleep_blanks_screen : 1;   // blank screen or display "SLEEP" when asleep -        uint32_t led_red_color : 8;         // for general purpose illumination, the red LED value -        uint32_t led_green_color : 8;       // for general purpose illumination, the green LED value +        uint32_t alarm_should_sound : 1;    // if true, the alarm interrupt can match a time and play a song. +        uint32_t alarm_minute : 6;          // the minute of the alarm we want to match +        uint32_t alarm_hour : 5;            // the second of the alarm we want to match +        uint32_t note_index : 4;            // the index of the tone to play on button press, or 0xF for no tone. +        uint32_t screensaver_interval : 3;  // 0 to disable screensaver, or a screensaver activation interval. +        uint32_t led_duration : 3;          // how many seconds to shine the LED for, or 0 to disable it. +        uint32_t led_red_color : 4;         // for general purpose illumination, the red LED value (0-15) +        uint32_t led_green_color : 4;       // for general purpose illumination, the green LED value (0-15)      } bit;      uint32_t value;  } LauncherSettings; @@ -24,7 +24,6 @@ typedef enum LauncherEvent {      EVENT_NONE = 0,             // There is no event to report.      EVENT_ACTIVATE,             // Your widget is entering the foreground.      EVENT_TICK,                 // Most common event type. Your widget is being called from the tick callback. -    EVENT_LOOP,                 // The app did not sleep, and is going into another invocation of the run loop.      EVENT_LIGHT_BUTTON_DOWN,    // The light button has been pressed, but not yet released.      EVENT_LIGHT_BUTTON_UP,      // The light button was pressed and released.      EVENT_LIGHT_LONG_PRESS,     // The light button was held for >2 seconds, and released. @@ -37,20 +36,22 @@ typedef enum LauncherEvent {  } LauncherEvent;  typedef void (*launcher_widget_setup)(LauncherSettings *settings, void ** context_ptr); -typedef void (*launcher_widget_enter_foreground)(LauncherSettings *settings, void *context); -typedef bool (*launcher_widget_loop)(LauncherEvent event, LauncherSettings *settings, void *context); -typedef void (*launcher_widget_enter_background)(LauncherSettings *settings, void *context); +typedef void (*launcher_widget_activate)(LauncherSettings *settings, void *context); +typedef void (*launcher_widget_loop)(LauncherEvent event, LauncherSettings *settings, void *context); +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_enter_foreground enter_foreground; +    launcher_widget_activate activate;      launcher_widget_loop loop; -    launcher_widget_enter_background enter_background; +    launcher_widget_resign resign;  } WatchWidget;  typedef struct LauncherState {      // properties stored in BACKUP register -    LauncherSettings launcherSettings; +    LauncherSettings launcher_settings;      // transient properties      int16_t current_widget; diff --git a/launcher/widgets/fake_widget.c b/launcher/widgets/fake_widget.c index 15e3cf2a..70b6918c 100644 --- a/launcher/widgets/fake_widget.c +++ b/launcher/widgets/fake_widget.c @@ -5,12 +5,12 @@ void fake_widget_setup(LauncherSettings *settings, void ** context_ptr) {      *context_ptr = NULL;  } -void fake_widget_enter_foreground(LauncherSettings *settings, void *context) { +void fake_widget_activate(LauncherSettings *settings, void *context) {      (void) settings;      (void) context;  } -bool fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +void fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) {      (void) event;      (void) settings;      (void) context; @@ -18,7 +18,7 @@ bool fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *con      return true;  } -void fake_widget_enter_background(LauncherSettings *settings, void *context) { +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 index 5a4b33db..470cdf99 100644 --- a/launcher/widgets/fake_widget.h +++ b/launcher/widgets/fake_widget.h @@ -4,15 +4,17 @@  #include "launcher.h"  void fake_widget_setup(LauncherSettings *settings, void ** context_ptr); -void fake_widget_enter_foreground(LauncherSettings *settings, void *context); -bool fake_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void fake_widget_enter_background(LauncherSettings *settings, void *context); +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_enter_foreground, \ +    fake_widget_activate, \      fake_widget_loop, \ -    fake_widget_enter_background, \ +    fake_widget_resign, \  }  #endif // FAKE_WIDGET_H_
\ No newline at end of file | 
