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;
}
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 {
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.
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 {
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:
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:
}
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:
}
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
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();