From 208ebf54a905ce6e4e563a6811eca8c8dc8b17e1 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 6 Oct 2024 19:01:07 +1100 Subject: WS2812 API rework (#24364) * Begin WS2812 API rework * Move RGBW conversion, clean up color.h, fix RGBW for AVR bitbang * Formatting & update PS2AVRGB I2C driver (untested) * Tested ARM bitbang RGB+RGBW * Tested ARM SPI RGB - RGBW not working * Tested ARM PWM RGB+RGBW * Tested RP2040 PIO driver RGB+RGBW * Update RGBLight * Formatting * Fix BM60HSRGB rev2 * Fix oddforge/vea * Fix 1k and XD002 RGBLite * Fix model_m/mschwingen * Fix handwired/promethium * Rename `WS2812_LED_TOTAL` for BM60HSRGB * Fix work_louder boards * Fix dawn60 * Fix rgbkb/pan * Fix neson_design/700e and n6 * Fix ergodox_ez/shine * ergodox_ez/shine: invert indices for left half * Fix matrix/abelx * Fix matrix/m20add * Remove custom rgblight driver for matrix/noah - should be done with lighting layers * Fix LED indexes for RGBLight split * Rename `convert_rgb_to_rgbw()` to `ws2812_rgb_to_rgbw()` * Update WS2812 API docs * `ergodox_ez/shine`: simplify LED index calculation * LED/RGB Matrix: Add weak function for LED index resolution * Bandaid fix for RGB Matrix splits not using WS2812 * `steelseries/prime_plus`: redo custom RGBLight driver * Update keyboards/steelseries/prime_plus/rgblight_custom.c Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com> --------- Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com> --- quantum/rgb_matrix/rgb_matrix_drivers.c | 58 +++------------------------------ 1 file changed, 4 insertions(+), 54 deletions(-) (limited to 'quantum/rgb_matrix/rgb_matrix_drivers.c') diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index bf5209a9d3..3b45e82cb9 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -146,61 +146,11 @@ const rgb_matrix_driver_t rgb_matrix_driver = { # pragma message "You need to use a custom driver, or re-implement the WS2812 driver to use a different configuration." # endif -// LED color buffer -rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_COUNT]; -bool ws2812_dirty = false; - -static void init(void) { - ws2812_init(); - ws2812_dirty = false; -} - -static void flush(void) { - if (ws2812_dirty) { - ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_COUNT); - ws2812_dirty = false; - } -} - -// Set an led in the buffer to a color -static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { -# if defined(RGB_MATRIX_SPLIT) - const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; - if (!is_keyboard_left()) { - if (i >= k_rgb_matrix_split[0]) { - i -= k_rgb_matrix_split[0]; - } else { - return; - } - } else if (i >= k_rgb_matrix_split[0]) { - return; - } -# endif - - if (rgb_matrix_ws2812_array[i].r == r && rgb_matrix_ws2812_array[i].g == g && rgb_matrix_ws2812_array[i].b == b) { - return; - } - - ws2812_dirty = true; - rgb_matrix_ws2812_array[i].r = r; - rgb_matrix_ws2812_array[i].g = g; - rgb_matrix_ws2812_array[i].b = b; -# ifdef WS2812_RGBW - convert_rgb_to_rgbw(&rgb_matrix_ws2812_array[i]); -# endif -} - -static void setled_all(uint8_t r, uint8_t g, uint8_t b) { - for (int i = 0; i < ARRAY_SIZE(rgb_matrix_ws2812_array); i++) { - setled(i, r, g, b); - } -} - const rgb_matrix_driver_t rgb_matrix_driver = { - .init = init, - .flush = flush, - .set_color = setled, - .set_color_all = setled_all, + .init = ws2812_init, + .flush = ws2812_flush, + .set_color = ws2812_set_color, + .set_color_all = ws2812_set_color_all, }; #endif -- cgit v1.2.3