Use White channel on RGBW LEDs (#7678)
* Use White channel on RGBW LEDs Co-authored-by: kwerdenker <sebastian.spindler@gmail.com> * Manually apply white channel to array * Move where convert_rgb_to_rgbw is called * Fix type for rgbw led struct * Add changes to Ergodox EZ can revert if deemed necessary * Revert "Add changes to Ergodox EZ" This reverts commit aa44db198d40d758ca10470eb94615513592d1dd. * Revert "Fix type for rgbw led struct" This reverts commit c5c744cba040201cc0d124400773cf13f8a2cf22. * Revert "Move where convert_rgb_to_rgbw is called" This reverts commit cd7f17caf6dd30731c54b3be54490fe4519444f9. * Revert changes and fix up functions * Enable white channel for Ergodox EZ as well * Only run conversion of rgblight is enabled Co-authored-by: kwerdenker <sebastian.spindler@gmail.com>
This commit is contained in:
parent
a52e55ec09
commit
7ba6456c0b
5 changed files with 33 additions and 4 deletions
|
@ -51,7 +51,13 @@ void rgblight_set(void) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef RGBW
|
||||||
|
else {
|
||||||
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
convert_rgb_to_rgbw(&led[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t led_num = RGBLED_NUM;
|
uint8_t led_num = RGBLED_NUM;
|
||||||
i2c_init();
|
i2c_init();
|
||||||
|
|
|
@ -85,3 +85,17 @@ RGB hsv_to_rgb(HSV hsv) {
|
||||||
|
|
||||||
return rgb;
|
return rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RGBW
|
||||||
|
#ifndef MIN
|
||||||
|
# define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
void convert_rgb_to_rgbw(LED_TYPE *led) {
|
||||||
|
// Determine lowest value in all three colors, put that into
|
||||||
|
// the white channel and then shift all colors by that amount
|
||||||
|
led->w = MIN(led->r, MIN(led->g, led->b));
|
||||||
|
led->r -= led->w;
|
||||||
|
led->g -= led->w;
|
||||||
|
led->b -= led->w;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -64,5 +64,7 @@ typedef struct PACKED {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RGB hsv_to_rgb(HSV hsv);
|
RGB hsv_to_rgb(HSV hsv);
|
||||||
|
#ifdef RGBW
|
||||||
|
void convert_rgb_to_rgbw(LED_TYPE *led);
|
||||||
|
#endif
|
||||||
#endif // COLOR_H
|
#endif // COLOR_H
|
||||||
|
|
|
@ -113,7 +113,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
|
||||||
led[i].g = g;
|
led[i].g = g;
|
||||||
led[i].b = b;
|
led[i].b = b;
|
||||||
# ifdef RGBW
|
# ifdef RGBW
|
||||||
led[i].w = 0;
|
convert_rgb_to_rgbw(led[i]);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -611,6 +611,7 @@ void rgblight_set(void) {
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef RGBLIGHT_LED_MAP
|
# ifdef RGBLIGHT_LED_MAP
|
||||||
LED_TYPE led0[RGBLED_NUM];
|
LED_TYPE led0[RGBLED_NUM];
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
@ -620,6 +621,12 @@ void rgblight_set(void) {
|
||||||
# else
|
# else
|
||||||
start_led = led + clipping_start_pos;
|
start_led = led + clipping_start_pos;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
#ifdef RGBW
|
||||||
|
for (uint8_t i = 0; i < num_leds; i++) {
|
||||||
|
convert_rgb_to_rgbw(&start_led[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ws2812_setleds(start_led, num_leds);
|
ws2812_setleds(start_led, num_leds);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue