summaryrefslogtreecommitdiffstats
path: root/quantum/rgblight.c
diff options
context:
space:
mode:
authorColin T.A. Gray <colinta@gmail.com>2017-12-05 19:56:15 +0100
committerJack Humbert <jack.humb@gmail.com>2017-12-08 22:10:42 +0100
commit16546ee06fa71bd9b9e9d3fda7c8816675e12185 (patch)
tree0fb62a810727a5c0745f94573715b6c027f577a3 /quantum/rgblight.c
parent1620d78e73f8e01ed1d48255c655d9eb6cc1b135 (diff)
downloadqmk_firmware-16546ee06fa71bd9b9e9d3fda7c8816675e12185.tar.gz
qmk_firmware-16546ee06fa71bd9b9e9d3fda7c8816675e12185.tar.xz
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
Diffstat (limited to 'quantum/rgblight.c')
-rw-r--r--quantum/rgblight.c46
1 files changed, 35 insertions, 11 deletions
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 78072a61d..63eda47cd 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -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) {