From 5fcd744ddba591829a129560992b2e43fb615d4d Mon Sep 17 00:00:00 2001 From: XScorpion2 Date: Sun, 14 Apr 2019 20:50:35 -0400 Subject: Features/ws2812 matrix driver (#5418) * WS2812 driver implementation for RGB Matrix * Added driver configuration docs --- quantum/rgb_matrix.h | 6 ++++-- quantum/rgb_matrix_drivers.c | 21 +++++++++++++++++++++ quantum/rgblight.c | 4 ++++ 3 files changed, 29 insertions(+), 2 deletions(-) (limited to 'quantum') diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 0e193dcb2..0a11f2692 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -28,9 +28,11 @@ #ifdef IS31FL3731 #include "is31fl3731.h" #elif defined (IS31FL3733) - #include "is31fl3733.h" + #include "is31fl3733.h" #elif defined (IS31FL3737) - #include "is31fl3737.h" + #include "is31fl3737.h" +#elif defined (WS2812) + #include "ws2812.h" #endif #ifndef RGB_MATRIX_LED_FLUSH_LIMIT diff --git a/quantum/rgb_matrix_drivers.c b/quantum/rgb_matrix_drivers.c index 3b7d58483..3814dd61f 100644 --- a/quantum/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix_drivers.c @@ -97,4 +97,25 @@ const rgb_matrix_driver_t rgb_matrix_driver = { }; #endif +#elif defined(WS2812) + +extern LED_TYPE led[RGBLED_NUM]; + + static void flush( void ) + { + // Assumes use of RGB_DI_PIN + ws2812_setleds(led, RGBLED_NUM); + } + + static void init( void ) + { + + } + + const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = ws2812_setled, + .set_color_all = ws2812_setled_all, + }; #endif diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 08515564b..e2410424e 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -63,7 +63,11 @@ const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90}; rgblight_config_t rgblight_config; bool is_rgblight_initialized = false; +#ifndef LED_ARRAY LED_TYPE led[RGBLED_NUM]; + #define LED_ARRAY led +#endif + bool rgblight_timer_enabled = false; static uint8_t clipping_start_pos = 0; -- cgit v1.2.3-24-g4f1b