]> git.earman.xyz Git - sensor-watch.git/commitdiff
basic launcher switching between two widgets
authorJoey Castillo <jose.castillo@gmail.com>
Sun, 3 Oct 2021 18:26:17 +0000 (14:26 -0400)
committerJoey Castillo <jose.castillo@gmail.com>
Sun, 3 Oct 2021 18:26:17 +0000 (14:26 -0400)
launcher/launcher.c
launcher/launcher.h
launcher/launcher_config.h
launcher/make/Makefile
launcher/widgets/fake_widget.c [deleted file]
launcher/widgets/fake_widget.h [deleted file]
launcher/widgets/fake_widget_1.c [new file with mode: 0644]
launcher/widgets/fake_widget_1.h [new file with mode: 0644]
launcher/widgets/fake_widget_2.c [new file with mode: 0644]
launcher/widgets/fake_widget_2.h [new file with mode: 0644]

index 26fec93e0ef37ff745cd2c977f5f98610b07bc31..ff10cf6eb76d21145bf6aa31ece9562be4f23c93 100644 (file)
@@ -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--;
 }
index bc8d91919c523579d558e800211be7e3eb288939..7a794545fcf2715698ae5ee1765e5c4f0ff2b876 100644 (file)
@@ -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_
index cb820a7e997f62bb4cc7ae681a1a743a0d57cf8f..db9d1be1ad4078b12a0596049a579bfbde6ce379 100644 (file)
@@ -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,
 };
 
 
index dce33f459dc47d94ce1f975ad65210929503d8b9..f02c1853fc46542854d5210d1ffd5c5fbf744f54 100755 (executable)
@@ -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 (file)
index 70b6918..0000000
+++ /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 (file)
index 470cdf9..0000000
+++ /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 (file)
index 0000000..aa4af2c
--- /dev/null
@@ -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 (file)
index 0000000..00db80c
--- /dev/null
@@ -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 (file)
index 0000000..4ce00ce
--- /dev/null
@@ -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 (file)
index 0000000..31bf30b
--- /dev/null
@@ -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