summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoey Castillo <jose.castillo@gmail.com>2021-10-03 14:26:17 -0400
committerJoey Castillo <jose.castillo@gmail.com>2021-10-03 14:26:17 -0400
commit95ea714d61b058f2b25aea6c01021cb3b3b2c3be (patch)
tree57e44cc75269423c9b616ed16ab95a7a2a7e11d3
parent399caa2582a4c139bd37ea0ce4480d06cfa53914 (diff)
downloadSensor-Watch-95ea714d61b058f2b25aea6c01021cb3b3b2c3be.tar.gz
Sensor-Watch-95ea714d61b058f2b25aea6c01021cb3b3b2c3be.tar.bz2
Sensor-Watch-95ea714d61b058f2b25aea6c01021cb3b3b2c3be.zip
basic launcher switching between two widgets
-rw-r--r--launcher/launcher.c90
-rw-r--r--launcher/launcher.h8
-rw-r--r--launcher/launcher_config.h8
-rwxr-xr-xlauncher/make/Makefile3
-rw-r--r--launcher/widgets/fake_widget.c24
-rw-r--r--launcher/widgets/fake_widget.h20
-rw-r--r--launcher/widgets/fake_widget_1.c32
-rw-r--r--launcher/widgets/fake_widget_1.h19
-rw-r--r--launcher/widgets/fake_widget_2.c32
-rw-r--r--launcher/widgets/fake_widget_2.h19
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