Improve RGB Light code (#4326)
* Improve RGB Light code * Add is_rgblight_initialized as an externed value in rgblight.h * Use remander of hue
This commit is contained in:
parent
68fad7b777
commit
cc146e32dc
@ -58,6 +58,7 @@ const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
|
||||
#endif
|
||||
|
||||
rgblight_config_t rgblight_config;
|
||||
bool is_rgblight_initialized = false;
|
||||
|
||||
LED_TYPE led[RGBLED_NUM];
|
||||
bool rgblight_timer_enabled = false;
|
||||
@ -123,6 +124,35 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
||||
(*led1).b = b;
|
||||
}
|
||||
|
||||
void rgblight_check_config(void) {
|
||||
/* Add some out of bound checks for RGB light config */
|
||||
|
||||
if (rgblight_config.mode < RGBLIGHT_MODE_STATIC_LIGHT) {
|
||||
rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT;
|
||||
}
|
||||
else if (rgblight_config.mode > RGBLIGHT_MODES) {
|
||||
rgblight_config.mode = RGBLIGHT_MODES;
|
||||
}
|
||||
|
||||
if (rgblight_config.hue < 0) {
|
||||
rgblight_config.hue = 0;
|
||||
} else if (rgblight_config.hue > 360) {
|
||||
rgblight_config.hue %= 360;
|
||||
}
|
||||
|
||||
if (rgblight_config.sat < 0) {
|
||||
rgblight_config.sat = 0;
|
||||
} else if (rgblight_config.sat > 255) {
|
||||
rgblight_config.sat = 255;
|
||||
}
|
||||
|
||||
if (rgblight_config.val < 0) {
|
||||
rgblight_config.val = 0;
|
||||
} else if (rgblight_config.val > RGBLIGHT_LIMIT_VAL) {
|
||||
rgblight_config.val = RGBLIGHT_LIMIT_VAL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint32_t eeconfig_read_rgblight(void) {
|
||||
#if defined(__AVR__) || defined(STM32_EEPROM_ENABLE) || defined(PROTOCOL_ARM_ATSAM) || defined(EEPROM_SIZE)
|
||||
@ -131,13 +161,14 @@ uint32_t eeconfig_read_rgblight(void) {
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void eeconfig_update_rgblight(uint32_t val) {
|
||||
#if defined(__AVR__) || defined(STM32_EEPROM_ENABLE) || defined(PROTOCOL_ARM_ATSAM) || defined(EEPROM_SIZE)
|
||||
if (eeconfig_read_rgblight() != val) {
|
||||
rgblight_check_config();
|
||||
eeprom_update_dword(EECONFIG_RGBLIGHT, val);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void eeconfig_update_rgblight_default(void) {
|
||||
//dprintf("eeconfig_update_rgblight_default\n");
|
||||
rgblight_config.enable = 1;
|
||||
@ -148,6 +179,7 @@ void eeconfig_update_rgblight_default(void) {
|
||||
rgblight_config.speed = 0;
|
||||
eeconfig_update_rgblight(rgblight_config.raw);
|
||||
}
|
||||
|
||||
void eeconfig_debug_rgblight(void) {
|
||||
dprintf("rgblight_config eprom\n");
|
||||
dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
|
||||
@ -159,6 +191,11 @@ void eeconfig_debug_rgblight(void) {
|
||||
}
|
||||
|
||||
void rgblight_init(void) {
|
||||
/* if already initialized, don't do it again.
|
||||
If you must do it again, extern this and set to false, first.
|
||||
This is a dirty, dirty hack until proper hooks can be added for keyboard startup. */
|
||||
if (is_rgblight_initialized) { return; }
|
||||
|
||||
debug_enable = 1; // Debug ON!
|
||||
dprintf("rgblight_init called.\n");
|
||||
dprintf("rgblight_init start!\n");
|
||||
@ -173,6 +210,8 @@ void rgblight_init(void) {
|
||||
eeconfig_update_rgblight_default();
|
||||
rgblight_config.raw = eeconfig_read_rgblight();
|
||||
}
|
||||
rgblight_check_config();
|
||||
|
||||
eeconfig_debug_rgblight(); // display current eeprom values
|
||||
|
||||
#ifdef RGBLIGHT_USE_TIMER
|
||||
@ -182,6 +221,9 @@ void rgblight_init(void) {
|
||||
if (rgblight_config.enable) {
|
||||
rgblight_mode_noeeprom(rgblight_config.mode);
|
||||
}
|
||||
|
||||
is_rgblight_initialized = true;
|
||||
|
||||
}
|
||||
|
||||
void rgblight_update_dword(uint32_t dword) {
|
||||
|
@ -146,6 +146,7 @@ extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM;
|
||||
extern const uint8_t RGBLED_SNAKE_INTERVALS[3] PROGMEM;
|
||||
extern const uint8_t RGBLED_KNIGHT_INTERVALS[3] PROGMEM;
|
||||
extern const uint16_t RGBLED_RGBTEST_INTERVALS[1] PROGMEM;
|
||||
extern bool is_rgblight_initialized;
|
||||
|
||||
typedef union {
|
||||
uint32_t raw;
|
||||
|
Loading…
Reference in New Issue
Block a user