diff options
author | Drashna Jaelre <drashna@drashna.net> | 2023-05-08 10:56:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-08 10:56:03 -0700 |
commit | 5c4b53a1437adde49871752d8015bfc042b97c20 (patch) | |
tree | e67534e42cf3cdf95df869f8f66e23cfeba78524 /quantum/rgblight | |
parent | 01be98184363591656ed6bd5baac21e6a5d61132 (diff) |
[Bug] Realign and size check EECONFIG structures (#20541)
Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'quantum/rgblight')
-rw-r--r-- | quantum/rgblight/rgblight.c | 21 | ||||
-rw-r--r-- | quantum/rgblight/rgblight.h | 15 |
2 files changed, 19 insertions, 17 deletions
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 02188df95b..ea28801a40 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -177,18 +177,19 @@ void rgblight_check_config(void) { } } -uint32_t eeconfig_read_rgblight(void) { +uint64_t eeconfig_read_rgblight(void) { #ifdef EEPROM_ENABLE - return eeprom_read_dword(EECONFIG_RGBLIGHT); + return (uint64_t)((eeprom_read_dword(EECONFIG_RGBLIGHT)) | ((uint64_t)eeprom_read_byte(EECONFIG_RGBLIGHT_EXTENDED) << 32)); #else return 0; #endif } -void eeconfig_update_rgblight(uint32_t val) { +void eeconfig_update_rgblight(uint64_t val) { #ifdef EEPROM_ENABLE rgblight_check_config(); - eeprom_update_dword(EECONFIG_RGBLIGHT, val); + eeprom_update_dword(EECONFIG_RGBLIGHT, val & 0xFFFFFFFF); + eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, (val >> 32) & 0xFF); #endif } @@ -263,13 +264,13 @@ void rgblight_reload_from_eeprom(void) { } } -uint32_t rgblight_read_dword(void) { +uint64_t rgblight_read_qword(void) { return rgblight_config.raw; } -void rgblight_update_dword(uint32_t dword) { +void rgblight_update_qword(uint64_t qword) { RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS; - rgblight_config.raw = dword; + rgblight_config.raw = qword; if (rgblight_config.enable) rgblight_mode_noeeprom(rgblight_config.mode); else { @@ -489,7 +490,7 @@ void rgblight_increase_speed_helper(bool write_to_eeprom) { if (rgblight_config.speed < 3) rgblight_config.speed++; // RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED? if (write_to_eeprom) { - eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this + eeconfig_update_rgblight(rgblight_config.raw); } } void rgblight_increase_speed(void) { @@ -503,7 +504,7 @@ void rgblight_decrease_speed_helper(bool write_to_eeprom) { if (rgblight_config.speed > 0) rgblight_config.speed--; // RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED?? if (write_to_eeprom) { - eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this + eeconfig_update_rgblight(rgblight_config.raw); } } void rgblight_decrease_speed(void) { @@ -612,7 +613,7 @@ uint8_t rgblight_get_speed(void) { void rgblight_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) { rgblight_config.speed = speed; if (write_to_eeprom) { - eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this + eeconfig_update_rgblight(rgblight_config.raw); dprintf("rgblight set speed [EEPROM]: %u\n", rgblight_config.speed); } else { dprintf("rgblight set speed [NOEEPROM]: %u\n", rgblight_config.speed); diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h index 2e85541313..001058f962 100644 --- a/quantum/rgblight/rgblight.h +++ b/quantum/rgblight/rgblight.h @@ -244,19 +244,20 @@ extern const uint16_t RGBLED_RGBTEST_INTERVALS[1] PROGMEM; extern const uint8_t RGBLED_TWINKLE_INTERVALS[3] PROGMEM; extern bool is_rgblight_initialized; -// Should stay in sycn with rgb matrix config as we reuse eeprom storage for both (for now) typedef union { - uint32_t raw; + uint64_t raw; struct { bool enable : 1; uint8_t mode : 7; uint8_t hue : 8; uint8_t sat : 8; uint8_t val : 8; - uint8_t speed : 8; // EECONFIG needs to be increased to support this + uint8_t speed : 8; }; } rgblight_config_t; +_Static_assert(sizeof(rgblight_config_t) == sizeof(uint64_t), "RGB Light EECONFIG out of spec."); + typedef struct _rgblight_status_t { uint8_t base_mode; bool timer_enabled; @@ -367,10 +368,10 @@ HSV rgblight_get_hsv(void); void rgblight_init(void); void rgblight_suspend(void); void rgblight_wakeup(void); -uint32_t rgblight_read_dword(void); -void rgblight_update_dword(uint32_t dword); -uint32_t eeconfig_read_rgblight(void); -void eeconfig_update_rgblight(uint32_t val); +uint64_t rgblight_read_qword(void); +void rgblight_update_qword(uint64_t qword); +uint64_t eeconfig_read_rgblight(void); +void eeconfig_update_rgblight(uint64_t val); void eeconfig_update_rgblight_current(void); void eeconfig_update_rgblight_default(void); void eeconfig_debug_rgblight(void); |