From 647c2835e65995339fb9380830c53725a62f6299 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 30 Mar 2023 12:21:02 +1100 Subject: WS2812 driver improvements (#20262) --- keyboards/1k/keymaps/default/rules.mk | 2 +- keyboards/1k/keymaps/media/rules.mk | 2 +- keyboards/dp60/keymaps/indicator/led_driver.c | 2 +- keyboards/handwired/promethium/rules.mk | 2 +- keyboards/matrix/noah/rules.mk | 3 +- keyboards/mschwingen/modelm/led_ws2812/rules.mk | 3 +- keyboards/oddforge/vea/info.json | 2 +- keyboards/oddforge/vea/vea.c | 33 --------------------- keyboards/oddforge/vea/vea.h | 11 +------ keyboards/oddforge/vea/ws2812_custom.c | 34 ++++++++++++++++++++++ keyboards/work_louder/rgb_functions.c | 2 +- keyboards/xelus/dawn60/rev1/rules.mk | 4 +-- keyboards/xelus/dawn60/rev1_qmk/rules.mk | 4 +-- .../xiudi/xd002/keymaps/multilayer_rgb/rules.mk | 2 +- keyboards/xiudi/xd002/keymaps/rgb_lite/rules.mk | 2 +- 15 files changed, 50 insertions(+), 58 deletions(-) delete mode 100644 keyboards/oddforge/vea/vea.c create mode 100644 keyboards/oddforge/vea/ws2812_custom.c (limited to 'keyboards') diff --git a/keyboards/1k/keymaps/default/rules.mk b/keyboards/1k/keymaps/default/rules.mk index ff480ff890..3f8ac1d4bb 100644 --- a/keyboards/1k/keymaps/default/rules.mk +++ b/keyboards/1k/keymaps/default/rules.mk @@ -1,2 +1,2 @@ -SRC += ws2812.c +WS2812_DRIVER_REQUIRED = yes SRC += color.c diff --git a/keyboards/1k/keymaps/media/rules.mk b/keyboards/1k/keymaps/media/rules.mk index 2368727640..76db8f131e 100644 --- a/keyboards/1k/keymaps/media/rules.mk +++ b/keyboards/1k/keymaps/media/rules.mk @@ -1,3 +1,3 @@ -SRC += ws2812.c +WS2812_DRIVER_REQUIRED = yes SRC += color.c EXTRAKEY_ENABLE = yes diff --git a/keyboards/dp60/keymaps/indicator/led_driver.c b/keyboards/dp60/keymaps/indicator/led_driver.c index 2a1ac5a385..f4a2dcc47c 100644 --- a/keyboards/dp60/keymaps/indicator/led_driver.c +++ b/keyboards/dp60/keymaps/indicator/led_driver.c @@ -18,7 +18,7 @@ #define RGB_DI_PIN RGB_INDICATOR_PIN #define ws2812_setleds indicator_setleds #define ws2812_setleds_pin indicator_setleds_pin -#include "ws2812.c" +#include "ws2812_bitbang.c" void indicator_write(LED_TYPE *start_led, uint8_t num_leds) { diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk index 038266add8..a0be87690e 100644 --- a/keyboards/handwired/promethium/rules.mk +++ b/keyboards/handwired/promethium/rules.mk @@ -19,8 +19,8 @@ PS2_DRIVER = interrupt CUSTOM_MATRIX = yes BLUETOOTH_ENABLE = yes BLUETOOTH_DRIVER = BluefruitLE +WS2812_DRIVER_REQUIRED = yes -SRC += ws2812.c SRC += rgbsps.c SRC += analog.c SRC += matrix.c diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk index 616574f4ae..e4ce6d5243 100644 --- a/keyboards/matrix/noah/rules.mk +++ b/keyboards/matrix/noah/rules.mk @@ -29,7 +29,8 @@ RGB_MATRIX_DRIVER = IS31FL3731 RGBLIGHT_ENABLE = yes RGBLIGHT_CUSTOM_DRIVER = yes +WS2812_DRIVER_REQUIRED = yes CUSTOM_MATRIX = yes # project specific files -SRC += ws2812.c matrix.c +SRC += matrix.c diff --git a/keyboards/mschwingen/modelm/led_ws2812/rules.mk b/keyboards/mschwingen/modelm/led_ws2812/rules.mk index 424388fd8f..9a69649289 100644 --- a/keyboards/mschwingen/modelm/led_ws2812/rules.mk +++ b/keyboards/mschwingen/modelm/led_ws2812/rules.mk @@ -1,2 +1 @@ -# variant for WS2812 LEDs -SRC += ws2812.c +WS2812_DRIVER_REQUIRED = yes diff --git a/keyboards/oddforge/vea/info.json b/keyboards/oddforge/vea/info.json index daf69e8a42..713ea5186e 100644 --- a/keyboards/oddforge/vea/info.json +++ b/keyboards/oddforge/vea/info.json @@ -12,7 +12,7 @@ "pin": "D4" }, "ws2812": { - "driver": "i2c" + "driver": "custom" }, "indicators": { "caps_lock": "D1", diff --git a/keyboards/oddforge/vea/vea.c b/keyboards/oddforge/vea/vea.c deleted file mode 100644 index 220083e403..0000000000 --- a/keyboards/oddforge/vea/vea.c +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2021 MajorKoos - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include "vea.h" - -void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { vea_setleds(start_led, num_leds); } - -void vea_rgb_init(void) { i2c_init(); } - -// Setleds for standard RGB -void vea_setleds(LED_TYPE *ledarray, uint16_t leds) { - static bool s_init = false; - if (!s_init) { - vea_rgb_init(); - s_init = true; - } - - i2c_transmit(WS2812_ADDRESS, (uint8_t *)ledarray, sizeof(LED_TYPE) * (leds >> 1), WS2812_TIMEOUT); - i2c_transmit(WS2812_ADDRESS_SPLIT, (uint8_t *)ledarray+(sizeof(LED_TYPE) * (leds >> 1)), sizeof(LED_TYPE) * (leds - (leds >> 1)), WS2812_TIMEOUT); -}; diff --git a/keyboards/oddforge/vea/vea.h b/keyboards/oddforge/vea/vea.h index 8e5851b84d..158b82d944 100644 --- a/keyboards/oddforge/vea/vea.h +++ b/keyboards/oddforge/vea/vea.h @@ -16,17 +16,8 @@ along with this program. If not, see . */ #pragma once -#include "quantum.h" -#include "i2c_master.h" -#include "rgblight.h" -#include "ws2812.h" -#include "led.h" - -#define WS2812_ADDRESS 0xb0 -#define WS2812_ADDRESS_SPLIT 0xb8 -#define WS2812_TIMEOUT 100 -void vea_setleds(LED_TYPE *ledarray, uint16_t leds); +#include "quantum.h" /* LEFT diff --git a/keyboards/oddforge/vea/ws2812_custom.c b/keyboards/oddforge/vea/ws2812_custom.c new file mode 100644 index 0000000000..0dc5a2d0f1 --- /dev/null +++ b/keyboards/oddforge/vea/ws2812_custom.c @@ -0,0 +1,34 @@ +#include "ws2812.h" +#include "i2c_master.h" + +#ifdef RGBW +# error "RGBW not supported" +#endif + +#ifndef WS2812_I2C_ADDRESS +# define WS2812_I2C_ADDRESS 0xB0 +#endif + +#ifndef WS2812_I2C_ADDRESS_RIGHT +# define WS2812_I2C_ADDRESS_RIGHT 0xB8 +#endif + +#ifndef WS2812_I2C_TIMEOUT +# define WS2812_I2C_TIMEOUT 100 +#endif + +void ws2812_init(void) { + i2c_init(); +} + +// Setleds for standard RGB +void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) { + static bool s_init = false; + if (!s_init) { + ws2812_init(); + s_init = true; + } + + i2c_transmit(WS2812_I2C_ADDRESS, (uint8_t *)ledarray, sizeof(LED_TYPE) * (leds >> 1), WS2812_I2C_TIMEOUT); + i2c_transmit(WS2812_I2C_ADDRESS_RIGHT, (uint8_t *)ledarray+(sizeof(LED_TYPE) * (leds >> 1)), sizeof(LED_TYPE) * (leds - (leds >> 1)), WS2812_I2C_TIMEOUT); +} diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c index cde435134a..a425eb763a 100644 --- a/keyboards/work_louder/rgb_functions.c +++ b/keyboards/work_louder/rgb_functions.c @@ -22,7 +22,7 @@ #define ws2812_setleds ws2812_rgb_setleds -#include "ws2812.c" +#include "ws2812_bitbang.c" void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); diff --git a/keyboards/xelus/dawn60/rev1/rules.mk b/keyboards/xelus/dawn60/rev1/rules.mk index e641678ecb..d4e70bfbec 100644 --- a/keyboards/xelus/dawn60/rev1/rules.mk +++ b/keyboards/xelus/dawn60/rev1/rules.mk @@ -17,13 +17,13 @@ AUDIO_ENABLE = no # Audio output RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. - We have custom RGB underglow CIE1931_CURVE = yes +WS2812_DRIVER_REQUIRED = yes # project specific files SRC += keyboards/wilba_tech/wt_main.c \ keyboards/wilba_tech/wt_rgb_backlight.c \ quantum/color.c \ - drivers/led/issi/is31fl3731.c \ - ws2812.c + drivers/led/issi/is31fl3731.c QUANTUM_LIB_SRC += i2c_master.c diff --git a/keyboards/xelus/dawn60/rev1_qmk/rules.mk b/keyboards/xelus/dawn60/rev1_qmk/rules.mk index 2101e1cd1c..71a023f2d0 100644 --- a/keyboards/xelus/dawn60/rev1_qmk/rules.mk +++ b/keyboards/xelus/dawn60/rev1_qmk/rules.mk @@ -19,12 +19,12 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. - We have custom RGB RGB_MATRIX_ENABLE = yes # Enable RGB matrix effects. RGB_MATRIX_DRIVER = custom # Enable RGB matrix effects. +WS2812_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/issi # project specific files -SRC += drivers/led/issi/is31fl3731.c \ - ws2812.c +SRC += drivers/led/issi/is31fl3731.c QUANTUM_LIB_SRC += i2c_master.c diff --git a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rules.mk b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rules.mk index 69d592aa4b..07c75adb47 100644 --- a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rules.mk +++ b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rules.mk @@ -1,2 +1,2 @@ -SRC += ws2812.c +WS2812_DRIVER_REQUIRED = yes EXTRAKEY_ENABLE = yes diff --git a/keyboards/xiudi/xd002/keymaps/rgb_lite/rules.mk b/keyboards/xiudi/xd002/keymaps/rgb_lite/rules.mk index 227bbcae32..9a69649289 100644 --- a/keyboards/xiudi/xd002/keymaps/rgb_lite/rules.mk +++ b/keyboards/xiudi/xd002/keymaps/rgb_lite/rules.mk @@ -1 +1 @@ -SRC += ws2812.c +WS2812_DRIVER_REQUIRED = yes -- cgit v1.2.3