]> git.earman.xyz Git - sensor-watch.git/commitdiff
refactor movement's LED color to a function call
authorjoeycastillo <joeycastillo@utexas.edu>
Sun, 29 Sep 2024 12:31:23 +0000 (08:31 -0400)
committerjoeycastillo <joeycastillo@utexas.edu>
Sun, 29 Sep 2024 12:31:23 +0000 (08:31 -0400)
movement.c
movement.h
movement/watch_faces/complication/morsecalc_face.c
watch-faces/settings/preferences_face.c

index 390edc3be4dcd1cbd87e661a222c70379c4440f6..0e5d17fbc5f4e6bd03e7b946c8628be18cd3c977 100644 (file)
@@ -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;
 }
index 494a88ce931347c598858d6da0b07c6358045cbf..2c1e5ba3803a04f59b0cee6b47f977f66dc5a4cd 100644 (file)
@@ -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.
index 30118e2e8d366acc1095572a30c352b5bd4fc433..c92a402b088510d5b5902d1115883787257308e6 100644 (file)
@@ -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:
index 344f0f35b58df30936ddc546fe2d0e670aef7f8e..1eaf4b73566caf026a0474e593dc5424dcf33820 100644 (file)
@@ -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();