rgblight split transfer non-eeprom config (#5396)

* Make rgblight_update_dword not update eeprom (we already have
eeconfig_update_rgblight for that).

Make split i2c keyboards transfer active rgblight config rather than
eeprom saved version of rgblight config, enabling runtime changes
that aren't persisted to eeprom.

* prev_level and prev_rgb only store successfully transmitted values
This commit is contained in:
Len Trigg 2019-03-16 09:46:49 +13:00 committed by Drashna Jaelre
parent fabdb3c4e8
commit 9c4424ae2c
4 changed files with 14 additions and 8 deletions

View File

@ -67,7 +67,7 @@ void process_api(uint16_t length, uint8_t * data) {
case DT_RGBLIGHT: { case DT_RGBLIGHT: {
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
uint32_t rgblight = bytes_to_dword(data, 2); uint32_t rgblight = bytes_to_dword(data, 2);
rgblight_update_dword(rgblight); eeconfig_update_rgblight(rgblight);
#endif #endif
break; break;
} }

View File

@ -225,11 +225,14 @@ void rgblight_init(void) {
} }
uint32_t rgblight_read_dword(void) {
return rgblight_config.raw;
}
void rgblight_update_dword(uint32_t dword) { void rgblight_update_dword(uint32_t dword) {
rgblight_config.raw = dword; rgblight_config.raw = dword;
eeconfig_update_rgblight(rgblight_config.raw);
if (rgblight_config.enable) if (rgblight_config.enable)
rgblight_mode(rgblight_config.mode); rgblight_mode_noeeprom(rgblight_config.mode);
else { else {
#ifdef RGBLIGHT_USE_TIMER #ifdef RGBLIGHT_USE_TIMER
rgblight_timer_disable(); rgblight_timer_disable();

View File

@ -174,6 +174,7 @@ void rgblight_step_reverse(void);
uint8_t rgblight_get_mode(void); uint8_t rgblight_get_mode(void);
void rgblight_mode(uint8_t mode); void rgblight_mode(uint8_t mode);
void rgblight_set(void); void rgblight_set(void);
uint32_t rgblight_read_dword(void);
void rgblight_update_dword(uint32_t dword); void rgblight_update_dword(uint32_t dword);
void rgblight_increase_hue(void); void rgblight_increase_hue(void);
void rgblight_decrease_hue(void); void rgblight_decrease_hue(void);

View File

@ -39,17 +39,19 @@ bool transport_master(matrix_row_t matrix[]) {
static uint8_t prev_level = ~0; static uint8_t prev_level = ~0;
uint8_t level = get_backlight_level(); uint8_t level = get_backlight_level();
if (level != prev_level) { if (level != prev_level) {
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIT_START, (void *)&level, sizeof(level), TIMEOUT); if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIT_START, (void *)&level, sizeof(level), TIMEOUT) >= 0) {
prev_level = level; prev_level = level;
}
} }
# endif # endif
# ifdef RGBLIGHT_ENABLE # ifdef RGBLIGHT_ENABLE
static uint32_t prev_rgb = ~0; static uint32_t prev_rgb = ~0;
uint32_t rgb = eeconfig_read_rgblight(); uint32_t rgb = rgblight_read_dword();
if (rgb != prev_rgb) { if (rgb != prev_rgb) {
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT); if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT) >= 0) {
prev_rgb = rgb; prev_rgb = rgb;
}
} }
# endif # endif