refactor movement's LED color to a function call
This commit is contained in:
parent
71922f8e51
commit
e2b01d4018
14
movement.c
14
movement.c
@ -353,6 +353,20 @@ void movement_set_use_imperial_units(bool value) {
|
||||
movement_state.settings.bit.use_imperial_units = value;
|
||||
}
|
||||
|
||||
movement_color_t movement_backlight_color(void) {
|
||||
return (movement_color_t) {
|
||||
.red = movement_state.settings.bit.led_red_color,
|
||||
.green = movement_state.settings.bit.led_green_color,
|
||||
.blue = movement_state.settings.bit.led_blue_color
|
||||
};
|
||||
}
|
||||
|
||||
void movement_set_backlight_color(movement_color_t color) {
|
||||
movement_state.settings.bit.led_red_color = color.red;
|
||||
movement_state.settings.bit.led_green_color = color.green;
|
||||
movement_state.settings.bit.led_blue_color = color.blue;
|
||||
}
|
||||
|
||||
bool movement_alarm_enabled(void) {
|
||||
return movement_state.settings.bit.alarm_enabled;
|
||||
}
|
||||
|
||||
10
movement.h
10
movement.h
@ -47,6 +47,13 @@ typedef enum {
|
||||
MOVEMENT_NUM_CLOCK_MODES
|
||||
} movement_clock_mode_t;
|
||||
|
||||
/// struct for Movement LED color
|
||||
typedef struct {
|
||||
uint8_t red : 4;
|
||||
uint8_t green : 4;
|
||||
uint8_t blue : 4;
|
||||
} movement_color_t;
|
||||
|
||||
// movement_settings_t contains global settings that cover watch behavior, including preferences around clock and unit
|
||||
// display, time zones, buzzer behavior, LED color and low energy mode timeouts.
|
||||
typedef union {
|
||||
@ -334,6 +341,9 @@ void movement_set_clock_mode_24h(movement_clock_mode_t value);
|
||||
bool movement_use_imperial_units(void);
|
||||
void movement_set_use_imperial_units(bool value);
|
||||
|
||||
movement_color_t movement_backlight_color(void);
|
||||
void movement_set_backlight_color(movement_color_t color);
|
||||
|
||||
/// TODO: For #SecondMovement: Should we have a counter that watch faces increment when they enable an alarm, and decrement when they disable it?
|
||||
/// Or should there be a watch face function where watch faces can tell us if they have an alarm enabled?
|
||||
/// Worth considering a better way to handle this.
|
||||
|
||||
@ -160,8 +160,9 @@ bool morsecalc_face_loop(movement_event_t event, movement_settings_t *settings,
|
||||
case EVENT_LIGHT_LONG_PRESS:
|
||||
mcs->led_is_on = !mcs->led_is_on;
|
||||
if(mcs->led_is_on) {
|
||||
watch_set_led_color(settings->bit.led_red_color ? (0xF | settings->bit.led_red_color << 4) : 0,
|
||||
settings->bit.led_green_color ? (0xF | settings->bit.led_green_color << 4) : 0);
|
||||
movement_color_t color = movement_backlight_color();
|
||||
watch_set_led_color(color.red ? (0xF | color.red << 4) : 0,
|
||||
color.green ? (0xF | color.green << 4) : 0);
|
||||
movement_request_tick_frequency(4);
|
||||
}
|
||||
else {
|
||||
@ -180,8 +181,9 @@ bool morsecalc_face_loop(movement_event_t event, movement_settings_t *settings,
|
||||
|
||||
case EVENT_TICK:
|
||||
if(mcs->led_is_on) {
|
||||
watch_set_led_color(settings->bit.led_red_color ? (0xF | settings->bit.led_red_color << 4) : 0,
|
||||
settings->bit.led_green_color ? (0xF | settings->bit.led_green_color << 4) : 0);
|
||||
movement_color_t color = movement_backlight_color();
|
||||
watch_set_led_color(color.red ? (0xF | color.red << 4) : 0,
|
||||
color.green ? (0xF | color.green << 4) : 0);
|
||||
}
|
||||
break;
|
||||
case EVENT_LIGHT_BUTTON_DOWN:
|
||||
|
||||
@ -71,6 +71,7 @@ void preferences_face_activate(movement_settings_t *settings, void *context) {
|
||||
|
||||
bool preferences_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
|
||||
preferences_state_t *state = (preferences_state_t *)context;
|
||||
movement_color_t color; // to use in the switch if we need it
|
||||
|
||||
switch (event.event_type) {
|
||||
case EVENT_TICK:
|
||||
@ -149,15 +150,18 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings
|
||||
}
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_RED:
|
||||
sprintf(buf, "%2d", settings->bit.led_red_color);
|
||||
color = movement_backlight_color();
|
||||
sprintf(buf, "%2d", color.red);
|
||||
watch_display_text(WATCH_POSITION_TOP_RIGHT, buf);
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_GREEN:
|
||||
sprintf(buf, "%2d", settings->bit.led_green_color);
|
||||
color = movement_backlight_color();
|
||||
sprintf(buf, "%2d", color.green);
|
||||
watch_display_text(WATCH_POSITION_TOP_RIGHT, buf);
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_BLUE:
|
||||
sprintf(buf, "%2d", settings->bit.led_blue_color);
|
||||
color = movement_backlight_color();
|
||||
sprintf(buf, "%2d", color.blue);
|
||||
watch_display_text(WATCH_POSITION_TOP_RIGHT, buf);
|
||||
break;
|
||||
case PREFERENCES_PAGE_NUM_PREFERENCES:
|
||||
@ -198,13 +202,19 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings
|
||||
}
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_RED:
|
||||
settings->bit.led_red_color = settings->bit.led_red_color + 1;
|
||||
color = movement_backlight_color();
|
||||
color.red++;
|
||||
movement_set_backlight_color(color);
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_GREEN:
|
||||
settings->bit.led_green_color = settings->bit.led_green_color + 1;
|
||||
color = movement_backlight_color();
|
||||
color.green++;
|
||||
movement_set_backlight_color(color);
|
||||
break;
|
||||
case PREFERENCES_PAGE_LED_BLUE:
|
||||
settings->bit.led_blue_color = settings->bit.led_blue_color + 1;
|
||||
color = movement_backlight_color();
|
||||
color.blue++;
|
||||
movement_set_backlight_color(color);
|
||||
break;
|
||||
case PREFERENCES_PAGE_NUM_PREFERENCES:
|
||||
// nothing to do here, just silencing the warning
|
||||
@ -221,9 +231,11 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings
|
||||
if (state->current_page == PREFERENCES_PAGE_LED_RED ||
|
||||
state->current_page == PREFERENCES_PAGE_LED_GREEN ||
|
||||
state->current_page == PREFERENCES_PAGE_LED_BLUE) {
|
||||
movement_force_led_on(settings->bit.led_red_color | settings->bit.led_red_color << 4,
|
||||
settings->bit.led_green_color | settings->bit.led_green_color << 4,
|
||||
settings->bit.led_blue_color | settings->bit.led_blue_color << 4);
|
||||
movement_color_t color = movement_backlight_color();
|
||||
// this bitwise math turns #000 into #000000, #111 into #111111, etc.
|
||||
movement_force_led_on(color.red | color.red << 4,
|
||||
color.green | color.green << 4,
|
||||
color.blue | color.blue << 4);
|
||||
return false;
|
||||
} else {
|
||||
movement_force_led_off();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user