~ruther/qmk_firmware

16546ee06fa71bd9b9e9d3fda7c8816675e12185 — Colin T.A. Gray 7 years ago 1620d78
Add 'rgblight_disable' and 'rgblight_setrgb_at/rgblight_sethsv_at'

Refactors rgblight_toggle to use rgblight_enable or rgblight_disable
Use 'rgblight_setrgb_at/rgblight_sethsv_at' to control an individual LED
3 files changed, 52 insertions(+), 11 deletions(-)

M docs/feature_rgblight.md
M quantum/rgblight.c
M quantum/rgblight.h
M docs/feature_rgblight.md => docs/feature_rgblight.md +14 -0
@@ 80,6 80,20 @@ const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
```

### LED control

Look in `rgblights.h` for all available functions, but if you want to control all or some LEDs your goto functions are:

```c
rgblight_disable();  // turn all lights off
rgblight_enable();  // turn lights on, based on their previous state (stored in EEPROM)

rgblight_setrgb(r, g, b);  // where r/g/b is a number from 0..255.  Turns all the LEDs to this color
rgblight_sethsv(h, s, v);  // HSV color control
rgblight_setrgb_at(r,g,b, LED);  // control a single LED.  0 <= LED < RGBLED_NUM
rgblight_sethsv_at(h,s,v, LED);  // control a single LED.  0 <= LED < RGBLED_NUM
```

## RGB Lighting Keycodes

These control the RGB Lighting functionality.

M quantum/rgblight.c => quantum/rgblight.c +35 -11
@@ 245,17 245,12 @@ void rgblight_mode(uint8_t mode) {
}

void rgblight_toggle(void) {
  rgblight_config.enable ^= 1;
  eeconfig_update_rgblight(rgblight_config.raw);
  xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable);
  xprintf("rgblight toggle: rgblight_config.enable = %u\n", !rgblight_config.enable);
  if (rgblight_config.enable) {
    rgblight_mode(rgblight_config.mode);
  } else {
    #ifdef RGBLIGHT_ANIMATIONS
      rgblight_timer_disable();
    #endif
    _delay_ms(50);
    rgblight_set();
    rgblight_disable();
  }
  else {
    rgblight_enable();
  }
}



@@ 266,6 261,17 @@ void rgblight_enable(void) {
  rgblight_mode(rgblight_config.mode);
}

void rgblight_disable(void) {
  rgblight_config.enable = 0;
  eeconfig_update_rgblight(rgblight_config.raw);
  xprintf("rgblight disable: rgblight_config.enable = %u\n", rgblight_config.enable);
  #ifdef RGBLIGHT_ANIMATIONS
    rgblight_timer_disable();
  #endif
  _delay_ms(50);
  rgblight_set();
}


void rgblight_increase_hue(void) {
  uint16_t hue;


@@ 365,7 371,8 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
}

void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
  // dprintf("rgblight set rgb: %u,%u,%u\n", r,g,b);
  if (!rgblight_config.enable) { return; }

  for (uint8_t i = 0; i < RGBLED_NUM; i++) {
    led[i].r = r;
    led[i].g = g;


@@ 374,6 381,23 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
  rgblight_set();
}

void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) {
  if (!rgblight_config.enable || index >= RGBLED_NUM) { return; }

  led[index].r = r;
  led[index].g = g;
  led[index].b = b;
  rgblight_set();
}

void rgblight_sethsv_at(uint16_t hue, uint8_t sat, uint8_t val, uint8_t index) {
  if (!rgblight_config.enable) { return; }

  LED_TYPE tmp_led;
  sethsv(hue, sat, val, &tmp_led);
  rgblight_setrgb_at(tmp_led.r, tmp_led.g, tmp_led.b, index);
}

#ifndef RGBLIGHT_CUSTOM_DRIVER
void rgblight_set(void) {
  if (rgblight_config.enable) {

M quantum/rgblight.h => quantum/rgblight.h +3 -0
@@ 99,6 99,7 @@ void rgblight_increase(void);
void rgblight_decrease(void);
void rgblight_toggle(void);
void rgblight_enable(void);
void rgblight_disable(void);
void rgblight_step(void);
void rgblight_step_reverse(void);
uint32_t rgblight_get_mode(void);


@@ 113,6 114,8 @@ void rgblight_increase_val(void);
void rgblight_decrease_val(void);
void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b);
void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index);
void rgblight_sethsv_at(uint16_t hue, uint8_t sat, uint8_t val, uint8_t index);

uint32_t eeconfig_read_rgblight(void);
void eeconfig_update_rgblight(uint32_t val);