~ruther/qmk_firmware

9c4424ae2cd86002cd2f4140eff7108212ef884e — Len Trigg 6 years ago fabdb3c
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
4 files changed, 14 insertions(+), 8 deletions(-)

M quantum/api.c
M quantum/rgblight.c
M quantum/rgblight.h
M quantum/split_common/transport.c
M quantum/api.c => quantum/api.c +1 -1
@@ 67,7 67,7 @@ void process_api(uint16_t length, uint8_t * data) {
                case DT_RGBLIGHT: {
                    #ifdef RGBLIGHT_ENABLE
                        uint32_t rgblight = bytes_to_dword(data, 2);
                        rgblight_update_dword(rgblight);
                        eeconfig_update_rgblight(rgblight);
                    #endif
                    break;
                }

M quantum/rgblight.c => quantum/rgblight.c +5 -2
@@ 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) {
  rgblight_config.raw = dword;
  eeconfig_update_rgblight(rgblight_config.raw);
  if (rgblight_config.enable)
    rgblight_mode(rgblight_config.mode);
    rgblight_mode_noeeprom(rgblight_config.mode);
  else {
#ifdef RGBLIGHT_USE_TIMER
      rgblight_timer_disable();

M quantum/rgblight.h => quantum/rgblight.h +1 -0
@@ 174,6 174,7 @@ void rgblight_step_reverse(void);
uint8_t rgblight_get_mode(void);
void rgblight_mode(uint8_t mode);
void rgblight_set(void);
uint32_t rgblight_read_dword(void);
void rgblight_update_dword(uint32_t dword);
void rgblight_increase_hue(void);
void rgblight_decrease_hue(void);

M quantum/split_common/transport.c => quantum/split_common/transport.c +7 -5
@@ 39,17 39,19 @@ bool transport_master(matrix_row_t matrix[]) {
  static uint8_t prev_level = ~0;
  uint8_t        level      = get_backlight_level();
  if (level != prev_level) {
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIT_START, (void *)&level, sizeof(level), TIMEOUT);
    prev_level = level;
    if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIT_START, (void *)&level, sizeof(level), TIMEOUT) >= 0) {
      prev_level = level;
    }
  }
#  endif

#  ifdef RGBLIGHT_ENABLE
  static uint32_t prev_rgb = ~0;
  uint32_t        rgb      = eeconfig_read_rgblight();
  uint32_t        rgb      = rgblight_read_dword();
  if (rgb != prev_rgb) {
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT);
    prev_rgb = rgb;
    if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT) >= 0) {
      prev_rgb = rgb;
    }
  }
#  endif