launcher is now movement

This commit is contained in:
Joey Castillo 2021-10-16 12:58:14 -04:00
parent 9d4367565b
commit e8461984d6
13 changed files with 101 additions and 101 deletions

View File

@ -18,11 +18,11 @@ INCLUDES += \
# If you add any other source files you wish to compile, add them after ../app.c # If you add any other source files you wish to compile, add them after ../app.c
# Note that you will need to add a backslash at the end of any line you wish to continue, i.e. # Note that you will need to add a backslash at the end of any line you wish to continue, i.e.
# SRCS += \ # SRCS += \
# ../launcher.c \ # ../movement.c \
# ../drivers/lis2dh.c \ # ../drivers/lis2dh.c \
# ../widgets/fitness/step_count_widget.c # ../widgets/fitness/step_count_widget.c
SRCS += \ SRCS += \
../launcher.c \ ../movement.c \
../widgets/clock/simple_clock_widget.c \ ../widgets/clock/simple_clock_widget.c \
../widgets/settings/preferences_widget.c \ ../widgets/settings/preferences_widget.c \
../widgets/settings/set_time_widget.c \ ../widgets/settings/set_time_widget.c \

View File

@ -2,12 +2,12 @@
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#include "watch.h" #include "watch.h"
#include "launcher.h" #include "movement.h"
#include "launcher_config.h" #include "movement_config.h"
LauncherState launcher_state; LauncherState movement_state;
void * widget_contexts[LAUNCHER_NUM_WIDGETS]; void * widget_contexts[MOVEMENT_NUM_WIDGETS];
const int32_t launcher_screensaver_deadlines[8] = {INT_MAX, 3600, 7200, 21600, 43200, 86400, 172800, 604800}; const int32_t movement_screensaver_deadlines[8] = {INT_MAX, 3600, 7200, 21600, 43200, 86400, 172800, 604800};
LauncherEvent event; LauncherEvent event;
void cb_mode_btn_interrupt(); void cb_mode_btn_interrupt();
@ -17,38 +17,38 @@ void cb_alarm_btn_extwake();
void cb_alarm_fired(); void cb_alarm_fired();
void cb_tick(); void cb_tick();
static inline void _launcher_reset_screensaver_countdown() { static inline void _movement_reset_screensaver_countdown() {
// for testing, make the timeout happen 60x faster. // for testing, make the timeout happen 60x faster.
launcher_state.screensaver_ticks = launcher_screensaver_deadlines[launcher_state.launcher_settings.bit.screensaver_interval] / 60; movement_state.screensaver_ticks = movement_screensaver_deadlines[movement_state.movement_settings.bit.screensaver_interval] / 60;
} }
void launcher_request_tick_frequency(uint8_t freq) { void movement_request_tick_frequency(uint8_t freq) {
watch_rtc_disable_all_periodic_callbacks(); watch_rtc_disable_all_periodic_callbacks();
launcher_state.subsecond = 0; movement_state.subsecond = 0;
launcher_state.tick_frequency = freq; movement_state.tick_frequency = freq;
watch_rtc_register_periodic_callback(cb_tick, freq); watch_rtc_register_periodic_callback(cb_tick, freq);
} }
void launcher_illuminate_led() { void movement_illuminate_led() {
launcher_state.light_ticks = 3; movement_state.light_ticks = 3;
} }
void launcher_move_to_widget(uint8_t widget_index) { void movement_move_to_widget(uint8_t widget_index) {
launcher_state.widget_changed = true; movement_state.widget_changed = true;
launcher_state.next_widget = widget_index; movement_state.next_widget = widget_index;
} }
void launcher_move_to_next_widget() { void movement_move_to_next_widget() {
launcher_move_to_widget((launcher_state.current_widget + 1) % LAUNCHER_NUM_WIDGETS); movement_move_to_widget((movement_state.current_widget + 1) % MOVEMENT_NUM_WIDGETS);
} }
void app_init() { void app_init() {
memset(&launcher_state, 0, sizeof(launcher_state)); memset(&movement_state, 0, sizeof(movement_state));
launcher_state.launcher_settings.bit.led_green_color = 0xF; movement_state.movement_settings.bit.led_green_color = 0xF;
launcher_state.launcher_settings.bit.button_should_sound = true; movement_state.movement_settings.bit.button_should_sound = true;
launcher_state.launcher_settings.bit.screensaver_interval = 1; movement_state.movement_settings.bit.screensaver_interval = 1;
_launcher_reset_screensaver_countdown(); _movement_reset_screensaver_countdown();
} }
void app_wake_from_deep_sleep() { void app_wake_from_deep_sleep() {
@ -59,12 +59,12 @@ void app_setup() {
static bool is_first_launch = true; static bool is_first_launch = true;
if (is_first_launch) { if (is_first_launch) {
for(uint8_t i = 0; i < LAUNCHER_NUM_WIDGETS; i++) { for(uint8_t i = 0; i < MOVEMENT_NUM_WIDGETS; i++) {
widget_contexts[i] = NULL; widget_contexts[i] = NULL;
is_first_launch = false; is_first_launch = false;
} }
} }
if (launcher_state.screensaver_ticks != -1) { if (movement_state.screensaver_ticks != -1) {
watch_disable_extwake_interrupt(BTN_ALARM); watch_disable_extwake_interrupt(BTN_ALARM);
watch_rtc_disable_alarm_callback(); watch_rtc_disable_alarm_callback();
@ -77,13 +77,13 @@ void app_setup() {
watch_enable_leds(); watch_enable_leds();
watch_enable_display(); watch_enable_display();
launcher_request_tick_frequency(1); movement_request_tick_frequency(1);
for(uint8_t i = 0; i < LAUNCHER_NUM_WIDGETS; i++) { for(uint8_t i = 0; i < MOVEMENT_NUM_WIDGETS; i++) {
widgets[i].setup(&launcher_state.launcher_settings, &widget_contexts[i]); widgets[i].setup(&movement_state.movement_settings, &widget_contexts[i]);
} }
widgets[0].activate(&launcher_state.launcher_settings, widget_contexts[0]); widgets[0].activate(&movement_state.movement_settings, widget_contexts[0]);
event.subsecond = 0; event.subsecond = 0;
event.event_type = EVENT_ACTIVATE; event.event_type = EVENT_ACTIVATE;
} }
@ -96,42 +96,42 @@ void app_wake_from_sleep() {
} }
bool app_loop() { bool app_loop() {
if (launcher_state.widget_changed) { if (movement_state.widget_changed) {
if (launcher_state.launcher_settings.bit.button_should_sound) { if (movement_state.movement_settings.bit.button_should_sound) {
// low note for nonzero case, high note for return to widget 0 // low note for nonzero case, high note for return to widget 0
watch_buzzer_play_note(launcher_state.next_widget ? BUZZER_NOTE_C7 : BUZZER_NOTE_C8, 50); watch_buzzer_play_note(movement_state.next_widget ? BUZZER_NOTE_C7 : BUZZER_NOTE_C8, 50);
} }
widgets[launcher_state.current_widget].resign(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]); widgets[movement_state.current_widget].resign(&movement_state.movement_settings, widget_contexts[movement_state.current_widget]);
launcher_state.current_widget = launcher_state.next_widget; movement_state.current_widget = movement_state.next_widget;
watch_clear_display(); watch_clear_display();
widgets[launcher_state.current_widget].activate(&launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]); widgets[movement_state.current_widget].activate(&movement_state.movement_settings, widget_contexts[movement_state.current_widget]);
event.subsecond = 0; event.subsecond = 0;
event.event_type = EVENT_ACTIVATE; event.event_type = EVENT_ACTIVATE;
launcher_state.widget_changed = false; movement_state.widget_changed = false;
} }
// If the LED is off and should be on, turn it on // If the LED is off and should be on, turn it on
if (launcher_state.light_ticks > 0 && !launcher_state.led_on) { if (movement_state.light_ticks > 0 && !movement_state.led_on) {
watch_set_led_color(launcher_state.launcher_settings.bit.led_red_color ? (0xF | launcher_state.launcher_settings.bit.led_red_color << 4) : 0, watch_set_led_color(movement_state.movement_settings.bit.led_red_color ? (0xF | movement_state.movement_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); movement_state.movement_settings.bit.led_green_color ? (0xF | movement_state.movement_settings.bit.led_green_color << 4) : 0);
launcher_state.led_on = true; movement_state.led_on = true;
} }
// if the LED is on and should be off, turn it off // if the LED is on and should be off, turn it off
if (launcher_state.led_on && launcher_state.light_ticks == 0) { if (movement_state.led_on && movement_state.light_ticks == 0) {
// unless the user is holding down the LIGHT button, in which case, give them more time. // unless the user is holding down the LIGHT button, in which case, give them more time.
if (watch_get_pin_level(BTN_LIGHT)) { if (watch_get_pin_level(BTN_LIGHT)) {
launcher_state.light_ticks = 3; movement_state.light_ticks = 3;
} else { } else {
watch_set_led_off(); watch_set_led_off();
launcher_state.led_on = false; movement_state.led_on = false;
} }
} }
// if we have timed out of our screensaver countdown, enter screensaver mode. // if we have timed out of our screensaver countdown, enter screensaver mode.
if (launcher_state.screensaver_ticks == 0) { if (movement_state.screensaver_ticks == 0) {
launcher_state.screensaver_ticks = -1; movement_state.screensaver_ticks = -1;
watch_date_time alarm_time; watch_date_time alarm_time;
alarm_time.reg = 0; alarm_time.reg = 0;
alarm_time.unit.second = 59; // after a match, the alarm fires at the next rising edge of CLK_RTC_CNT, so 59 seconds lets us update at :00 alarm_time.unit.second = 59; // after a match, the alarm fires at the next rising edge of CLK_RTC_CNT, so 59 seconds lets us update at :00
@ -142,9 +142,9 @@ bool app_loop() {
// this is a little mini-runloop. // this is a little mini-runloop.
// as long as screensaver_ticks is -1 (i.e. screensaver is active), we wake up here, update the screen, and go right back to sleep. // as long as screensaver_ticks is -1 (i.e. screensaver is active), we wake up here, update the screen, and go right back to sleep.
while (launcher_state.screensaver_ticks == -1) { while (movement_state.screensaver_ticks == -1) {
event.event_type = EVENT_SCREENSAVER; event.event_type = EVENT_SCREENSAVER;
widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]); widgets[movement_state.current_widget].loop(event, &movement_state.movement_settings, widget_contexts[movement_state.current_widget]);
watch_enter_shallow_sleep(true); watch_enter_shallow_sleep(true);
} }
// as soon as screensaver_ticks is reset by the extwake handler, we bail out of the loop and reactivate ourselves. // as soon as screensaver_ticks is reset by the extwake handler, we bail out of the loop and reactivate ourselves.
@ -157,13 +157,13 @@ bool app_loop() {
static bool can_sleep = true; static bool can_sleep = true;
if (event.event_type) { if (event.event_type) {
event.subsecond = launcher_state.subsecond; event.subsecond = movement_state.subsecond;
can_sleep = widgets[launcher_state.current_widget].loop(event, &launcher_state.launcher_settings, widget_contexts[launcher_state.current_widget]); can_sleep = widgets[movement_state.current_widget].loop(event, &movement_state.movement_settings, widget_contexts[movement_state.current_widget]);
event.event_type = EVENT_NONE; event.event_type = EVENT_NONE;
event.subsecond = 0; event.subsecond = 0;
} }
return can_sleep && !launcher_state.led_on; return can_sleep && !movement_state.led_on;
} }
LauncherEventType _figure_out_button_event(LauncherEventType button_down_event, uint8_t *down_timestamp) { LauncherEventType _figure_out_button_event(LauncherEventType button_down_event, uint8_t *down_timestamp) {
@ -180,23 +180,23 @@ LauncherEventType _figure_out_button_event(LauncherEventType button_down_event,
} }
void cb_light_btn_interrupt() { void cb_light_btn_interrupt() {
_launcher_reset_screensaver_countdown(); _movement_reset_screensaver_countdown();
event.event_type = _figure_out_button_event(EVENT_LIGHT_BUTTON_DOWN, &launcher_state.light_down_timestamp); event.event_type = _figure_out_button_event(EVENT_LIGHT_BUTTON_DOWN, &movement_state.light_down_timestamp);
} }
void cb_mode_btn_interrupt() { void cb_mode_btn_interrupt() {
_launcher_reset_screensaver_countdown(); _movement_reset_screensaver_countdown();
event.event_type = _figure_out_button_event(EVENT_MODE_BUTTON_DOWN, &launcher_state.mode_down_timestamp); event.event_type = _figure_out_button_event(EVENT_MODE_BUTTON_DOWN, &movement_state.mode_down_timestamp);
} }
void cb_alarm_btn_interrupt() { void cb_alarm_btn_interrupt() {
_launcher_reset_screensaver_countdown(); _movement_reset_screensaver_countdown();
event.event_type = _figure_out_button_event(EVENT_ALARM_BUTTON_DOWN, &launcher_state.alarm_down_timestamp); event.event_type = _figure_out_button_event(EVENT_ALARM_BUTTON_DOWN, &movement_state.alarm_down_timestamp);
} }
void cb_alarm_btn_extwake() { void cb_alarm_btn_extwake() {
// wake up! // wake up!
_launcher_reset_screensaver_countdown(); _movement_reset_screensaver_countdown();
} }
void cb_alarm_fired() { void cb_alarm_fired() {
@ -206,13 +206,13 @@ void cb_alarm_fired() {
void cb_tick() { void cb_tick() {
event.event_type = EVENT_TICK; event.event_type = EVENT_TICK;
watch_date_time date_time = watch_rtc_get_date_time(); watch_date_time date_time = watch_rtc_get_date_time();
if (date_time.unit.second != launcher_state.last_second) { if (date_time.unit.second != movement_state.last_second) {
if (launcher_state.light_ticks) launcher_state.light_ticks--; if (movement_state.light_ticks) movement_state.light_ticks--;
if (launcher_state.launcher_settings.bit.screensaver_interval && launcher_state.screensaver_ticks > 0) launcher_state.screensaver_ticks--; if (movement_state.movement_settings.bit.screensaver_interval && movement_state.screensaver_ticks > 0) movement_state.screensaver_ticks--;
launcher_state.last_second = date_time.unit.second; movement_state.last_second = date_time.unit.second;
launcher_state.subsecond = 0; movement_state.subsecond = 0;
} else { } else {
launcher_state.subsecond++; movement_state.subsecond++;
} }
} }

View File

@ -1,5 +1,5 @@
#ifndef LAUNCHER_H_ #ifndef MOVEMENT_H_
#define LAUNCHER_H_ #define MOVEMENT_H_
#include <stdio.h> #include <stdio.h>
#include <stdbool.h> #include <stdbool.h>
@ -42,21 +42,21 @@ typedef struct {
uint8_t subsecond; uint8_t subsecond;
} LauncherEvent; } LauncherEvent;
typedef void (*launcher_widget_setup)(LauncherSettings *settings, void ** context_ptr); typedef void (*movement_widget_setup)(LauncherSettings *settings, void ** context_ptr);
typedef void (*launcher_widget_activate)(LauncherSettings *settings, void *context); typedef void (*movement_widget_activate)(LauncherSettings *settings, void *context);
typedef bool (*launcher_widget_loop)(LauncherEvent event, LauncherSettings *settings, void *context); typedef bool (*movement_widget_loop)(LauncherEvent event, LauncherSettings *settings, void *context);
typedef void (*launcher_widget_resign)(LauncherSettings *settings, void *context); typedef void (*movement_widget_resign)(LauncherSettings *settings, void *context);
typedef struct { typedef struct {
launcher_widget_setup setup; movement_widget_setup setup;
launcher_widget_activate activate; movement_widget_activate activate;
launcher_widget_loop loop; movement_widget_loop loop;
launcher_widget_resign resign; movement_widget_resign resign;
} WatchWidget; } WatchWidget;
typedef struct { typedef struct {
// properties stored in BACKUP register // properties stored in BACKUP register
LauncherSettings launcher_settings; LauncherSettings movement_settings;
// transient properties // transient properties
int16_t current_widget; int16_t current_widget;
@ -81,9 +81,9 @@ typedef struct {
uint8_t subsecond; uint8_t subsecond;
} LauncherState; } LauncherState;
void launcher_move_to_widget(uint8_t widget_index); void movement_move_to_widget(uint8_t widget_index);
void launcher_move_to_next_widget(); void movement_move_to_next_widget();
void launcher_illuminate_led(); void movement_illuminate_led();
void launcher_request_tick_frequency(uint8_t freq); void movement_request_tick_frequency(uint8_t freq);
#endif // LAUNCHER_H_ #endif // MOVEMENT_H_

View File

@ -1,18 +1,18 @@
#ifndef LAUNCHER_CONFIG_H_ #ifndef MOVEMENT_CONFIG_H_
#define LAUNCHER_CONFIG_H_ #define MOVEMENT_CONFIG_H_
#include "simple_clock_widget.h" #include "simple_clock_widget.h"
#include "preferences_widget.h" #include "preferences_widget.h"
#include "set_time_widget.h" #include "set_time_widget.h"
#include "pulseometer_widget.h" #include "pulseometer_widget.h"
#define LAUNCHER_NUM_WIDGETS 3 #define MOVEMENT_NUM_WIDGETS 3
WatchWidget widgets[LAUNCHER_NUM_WIDGETS] = { WatchWidget widgets[MOVEMENT_NUM_WIDGETS] = {
simple_clock_widget, simple_clock_widget,
preferences_widget, preferences_widget,
set_time_widget, set_time_widget,
}; };
#endif // LAUNCHER_CONFIG_H_ #endif // MOVEMENT_CONFIG_H_

View File

@ -63,10 +63,10 @@ bool simple_clock_widget_loop(LauncherEvent event, LauncherSettings *settings, v
watch_display_string(buf, pos); watch_display_string(buf, pos);
break; break;
case EVENT_MODE_BUTTON_UP: case EVENT_MODE_BUTTON_UP:
launcher_move_to_next_widget(); movement_move_to_next_widget();
return false; return false;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
launcher_illuminate_led(); movement_illuminate_led();
break; break;
case EVENT_ALARM_BUTTON_UP: case EVENT_ALARM_BUTTON_UP:
break; break;

View File

@ -1,7 +1,7 @@
#ifndef SIMPLE_CLOCK_WIDGET_H_ #ifndef SIMPLE_CLOCK_WIDGET_H_
#define SIMPLE_CLOCK_WIDGET_H_ #define SIMPLE_CLOCK_WIDGET_H_
#include "launcher.h" #include "movement.h"
void simple_clock_widget_setup(LauncherSettings *settings, void ** context_ptr); void simple_clock_widget_setup(LauncherSettings *settings, void ** context_ptr);
void simple_clock_widget_activate(LauncherSettings *settings, void *context); void simple_clock_widget_activate(LauncherSettings *settings, void *context);

View File

@ -58,21 +58,21 @@ bool pulseometer_widget_loop(LauncherEvent event, LauncherSettings *settings, vo
} }
return false; return false;
case EVENT_MODE_BUTTON_UP: case EVENT_MODE_BUTTON_UP:
launcher_move_to_next_widget(); movement_move_to_next_widget();
return false; return false;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
launcher_illuminate_led(); movement_illuminate_led();
break; break;
case EVENT_ALARM_BUTTON_DOWN: case EVENT_ALARM_BUTTON_DOWN:
pulsometer_state->ticks = 0; pulsometer_state->ticks = 0;
pulsometer_state->pulse = 0xFFFF; pulsometer_state->pulse = 0xFFFF;
pulsometer_state->measuring = true; pulsometer_state->measuring = true;
launcher_request_tick_frequency(PULSOMETER_WIDGET_FREQUENCY); movement_request_tick_frequency(PULSOMETER_WIDGET_FREQUENCY);
break; break;
case EVENT_ALARM_BUTTON_UP: case EVENT_ALARM_BUTTON_UP:
case EVENT_ALARM_LONG_PRESS: case EVENT_ALARM_LONG_PRESS:
pulsometer_state->measuring = false; pulsometer_state->measuring = false;
launcher_request_tick_frequency(1); movement_request_tick_frequency(1);
break; break;
default: default:
break; break;

View File

@ -1,7 +1,7 @@
#ifndef PULSEOMETER_WIDGET_H_ #ifndef PULSEOMETER_WIDGET_H_
#define PULSEOMETER_WIDGET_H_ #define PULSEOMETER_WIDGET_H_
#include "launcher.h" #include "movement.h"
typedef struct { typedef struct {
bool measuring; bool measuring;

View File

@ -13,7 +13,7 @@ void preferences_widget_setup(LauncherSettings *settings, void ** context_ptr) {
void preferences_widget_activate(LauncherSettings *settings, void *context) { void preferences_widget_activate(LauncherSettings *settings, void *context) {
(void) settings; (void) settings;
*((uint8_t *)context) = 0; *((uint8_t *)context) = 0;
launcher_request_tick_frequency(4); // we need to manually blink some pixels movement_request_tick_frequency(4); // we need to manually blink some pixels
} }
bool preferences_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) { bool preferences_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) {
@ -22,7 +22,7 @@ bool preferences_widget_loop(LauncherEvent event, LauncherSettings *settings, vo
switch (event.event_type) { switch (event.event_type) {
case EVENT_MODE_BUTTON_UP: case EVENT_MODE_BUTTON_UP:
watch_set_led_off(); watch_set_led_off();
launcher_move_to_next_widget(); movement_move_to_next_widget();
return false; return false;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
current_page = (current_page + 1) % PREFERENCES_WIDGET_NUM_PREFEFENCES; current_page = (current_page + 1) % PREFERENCES_WIDGET_NUM_PREFEFENCES;
@ -116,5 +116,5 @@ void preferences_widget_resign(LauncherSettings *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
watch_set_led_off(); watch_set_led_off();
launcher_request_tick_frequency(1); movement_request_tick_frequency(1);
} }

View File

@ -1,7 +1,7 @@
#ifndef PREFERENCES_WIDGET_H_ #ifndef PREFERENCES_WIDGET_H_
#define PREFERENCES_WIDGET_H_ #define PREFERENCES_WIDGET_H_
#include "launcher.h" #include "movement.h"
void preferences_widget_setup(LauncherSettings *settings, void ** context_ptr); void preferences_widget_setup(LauncherSettings *settings, void ** context_ptr);
void preferences_widget_activate(LauncherSettings *settings, void *context); void preferences_widget_activate(LauncherSettings *settings, void *context);

View File

@ -13,7 +13,7 @@ void set_time_widget_setup(LauncherSettings *settings, void ** context_ptr) {
void set_time_widget_activate(LauncherSettings *settings, void *context) { void set_time_widget_activate(LauncherSettings *settings, void *context) {
(void) settings; (void) settings;
*((uint8_t *)context) = 0; *((uint8_t *)context) = 0;
launcher_request_tick_frequency(4); movement_request_tick_frequency(4);
} }
bool set_time_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) { bool set_time_widget_loop(LauncherEvent event, LauncherSettings *settings, void *context) {
@ -23,7 +23,7 @@ bool set_time_widget_loop(LauncherEvent event, LauncherSettings *settings, void
switch (event.event_type) { switch (event.event_type) {
case EVENT_MODE_BUTTON_UP: case EVENT_MODE_BUTTON_UP:
launcher_move_to_next_widget(); movement_move_to_next_widget();
return false; return false;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
current_page = (current_page + 1) % SET_TIME_WIDGET_NUM_SETTINGS; current_page = (current_page + 1) % SET_TIME_WIDGET_NUM_SETTINGS;
@ -105,5 +105,5 @@ void set_time_widget_resign(LauncherSettings *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
watch_set_led_off(); watch_set_led_off();
launcher_request_tick_frequency(1); movement_request_tick_frequency(1);
} }

View File

@ -1,7 +1,7 @@
#ifndef SET_TIME_WIDGET_H_ #ifndef SET_TIME_WIDGET_H_
#define SET_TIME_WIDGET_H_ #define SET_TIME_WIDGET_H_
#include "launcher.h" #include "movement.h"
void set_time_widget_setup(LauncherSettings *settings, void ** context_ptr); void set_time_widget_setup(LauncherSettings *settings, void ** context_ptr);
void set_time_widget_activate(LauncherSettings *settings, void *context); void set_time_widget_activate(LauncherSettings *settings, void *context);