Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework RGBLight driver system #22529

Merged
merged 6 commits into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions builddefs/common_features.mk
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_$(strip $(shell echo $(RGBLIGHT_DRIVER) | tr '[:lower:]' '[:upper:]'))
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
SRC += $(QUANTUM_DIR)/rgblight/rgblight_drivers.c
CIE1931_CURVE := yes
RGB_KEYCODES_ENABLE := yes
endif
Expand Down
5 changes: 0 additions & 5 deletions drivers/led/apa102.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,6 @@ void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
apa102_end_frame(num_leds);
}

// Overwrite the default rgblight_call_driver to use apa102 driver
void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
apa102_setleds(start_led, num_leds);
}

void static apa102_init(void) {
setPinOutput(APA102_DI_PIN);
setPinOutput(APA102_CI_PIN);
Expand Down
12 changes: 7 additions & 5 deletions keyboards/dp60/keymaps/indicator/indicator.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include "dp60.h"

#include "rgblight.h"

#include QMK_KEYBOARD_H
#include "ws2812.h"

// caps led
const rgblight_segment_t PROGMEM dp60_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
Expand Down Expand Up @@ -72,13 +70,17 @@ extern rgblight_config_t rgblight_config;
extern void rgblight_layers_write(void);
extern void indicator_write(rgb_led_t *start_led, uint8_t num_leds);

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
ws2812_setleds(start_led, RGBLED_NUM-RGB_INDICATOR_NUM);

indicator_write(start_led + (RGBLED_NUM - RGB_INDICATOR_NUM), RGB_INDICATOR_NUM);
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};

void led_update_ports(led_t led_state) {
rgblight_set_layer_state(0, led_state.caps_lock);
rgblight_set_layer_state(1, led_state.scroll_lock);
Expand Down
2 changes: 2 additions & 0 deletions keyboards/dp60/keymaps/indicator/rules.mk
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@

RGBLIGHT_ENABLE = yes # Use RGB underglow light
RGBLIGHT_DRIVER = custom
WS2812_DRIVER_REQUIRED = yes

SRC += indicator.c led_driver.c
6 changes: 5 additions & 1 deletion keyboards/ergodox_ez/led_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE

# include "ergodox_ez.h"
# include "ws2812.h"

void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) {
void setleds_custom(rgb_led_t *led, uint16_t led_num) {
i2c_init();
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
int i = 0;
Expand Down Expand Up @@ -51,5 +52,8 @@ void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) {
ws2812_setleds(led, led_num);
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};

#endif // RGBLIGHT_ENABLE
3 changes: 3 additions & 0 deletions keyboards/ergodox_ez/shine/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
"keyboard_name": "ErgoDox EZ Shine",
"usb": {
"pid": "0x4975"
},
"rgblight": {
"driver": "custom"
}
}
1 change: 1 addition & 0 deletions keyboards/ergodox_ez/shine/rules.mk
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
RGBLIGHT_ENABLE = yes
WS2812_DRIVER_REQUIRED = yes
7 changes: 6 additions & 1 deletion keyboards/matrix/abelx/abelx.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ void housekeeping_task_kb(void) {

#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#include "ws2812.h"
#include "i2c_master.h"

const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = {
Expand All @@ -66,7 +67,7 @@ const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = {
{AW9523B_P07_PWM, AW9523B_P06_PWM, AW9523B_P05_PWM},
};

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
uint8_t num = num_leds < AW9523B_RGB_NUM ? num_leds : AW9523B_RGB_NUM;

Expand All @@ -77,6 +78,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
}
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};

#endif

static uint16_t caps_lock_pin = DEF_PIN(TCA6424_PORT2, 3);
Expand Down
1 change: 1 addition & 0 deletions keyboards/matrix/abelx/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
},
"rgblight": {
"led_count": 9,
"driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
Expand Down
1 change: 1 addition & 0 deletions keyboards/matrix/abelx/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,4 @@ CUSTOM_MATRIX = lite
# project specific files
SRC += matrix.c tca6424.c aw9523b.c
I2C_DRIVER_REQUIRED = yes
WS2812_DRIVER_REQUIRED = yes
1 change: 1 addition & 0 deletions keyboards/matrix/m20add/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
},
"rgblight": {
"led_count": 20,
"driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
Expand Down
6 changes: 5 additions & 1 deletion keyboards/matrix/m20add/rgb_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ static void custom_effects(void)
effect_funcs[rgb_ring.effect]();
}

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_ring.state != RING_STATE_QMK) {
return;
Expand All @@ -368,6 +368,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
}
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};


void rgb_ring_init(void)
{
Expand Down
27 changes: 12 additions & 15 deletions keyboards/matrix/noah/noah.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,45 +22,42 @@ extern rgblight_config_t rgblight_config;
#endif
rgb_led_t noah_leds[RGBLED_NUM];
static bool noah_led_mode = false;
void rgblight_set(void) {
void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) {
memset(&noah_leds[0], 0, sizeof(noah_leds));
if (!rgblight_config.enable) {
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
ledarray[i].r = 0;
ledarray[i].g = 0;
ledarray[i].b = 0;
}
}
if (noah_led_mode) {
led_t led_state = host_keyboard_led_state();
if (led_state.caps_lock) {
noah_leds[0] = led[0];
noah_leds[0] = ledarray[0];
}
if (led_state.scroll_lock) {
noah_leds[1] = led[1];
noah_leds[1] = ledarray[1];
}
if (led_state.num_lock) {
noah_leds[2] = led[2];
noah_leds[2] = ledarray[2];
}
for (int32_t i = 0; i < 4; i++) {
if(layer_state_is(i+1)) {
noah_leds[i + 3] = led[i + 3];
noah_leds[i + 3] = ledarray[i + 3];
}
}
} else {
memcpy(&noah_leds[0], &led[0], sizeof(noah_leds));
memcpy(&noah_leds[0], &ledarray[0], sizeof(noah_leds));
}

ws2812_setleds(noah_leds, RGBLED_NUM);
}
#endif

void matrix_scan_kb(void) {
#ifdef RGBLIGHT_ENABLE
rgblight_task();
const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};
#endif
matrix_scan_user();
}

#ifdef RGB_MATRIX_ENABLE
const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = {
Expand Down
7 changes: 6 additions & 1 deletion keyboards/neson_design/700e/700e.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "quantum.h"
#include "i2c_master.h"
#include "drivers/led/issi/is31fl3731.h"
#include "ws2812.h"

enum {
SELF_TESTING,
Expand Down Expand Up @@ -336,7 +337,7 @@ void housekeeping_task_kb(void)
housekeeping_task_user();
}

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_state.state != NORMAL) return;

Expand All @@ -353,6 +354,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
ws2812_setleds(leds, 4);
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};

bool led_update_kb(led_t led_state)
{
bool res = led_update_user(led_state);
Expand Down
1 change: 1 addition & 0 deletions keyboards/neson_design/700e/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"saturation_steps": 8,
"brightness_steps": 8,
"led_count": 68,
"driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
Expand Down
1 change: 1 addition & 0 deletions keyboards/neson_design/700e/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
NO_USB_STARTUP_CHECK = yes

QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
WS2812_DRIVER_REQUIRED = yes
I2C_DRIVER_REQUIRED = yes
1 change: 1 addition & 0 deletions keyboards/neson_design/n6/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"saturation_steps": 8,
"brightness_steps": 8,
"led_count": 65,
"driver": "custom",
"max_brightness": 192,
"animations": {
"breathing": true,
Expand Down
7 changes: 6 additions & 1 deletion keyboards/neson_design/n6/n6.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "quantum.h"
#include "i2c_master.h"
#include "drivers/led/issi/is31fl3731.h"
#include "ws2812.h"

enum {
SELF_TESTING,
Expand Down Expand Up @@ -338,7 +339,7 @@ void housekeeping_task_kb(void)
housekeeping_task_user();
}

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_state.state != NORMAL) return;

Expand All @@ -348,6 +349,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
ws2812_setleds(start_led+IS31FL3731_LED_COUNT, 1);
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};

bool led_update_kb(led_t led_state)
{
bool res = led_update_user(led_state);
Expand Down
1 change: 1 addition & 0 deletions keyboards/neson_design/n6/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow

QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
WS2812_DRIVER_REQUIRED = yes
I2C_DRIVER_REQUIRED = yes
3 changes: 2 additions & 1 deletion keyboards/neson_design/nico/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
"pin": "B0"
},
"rgblight": {
"led_count": 5
"led_count": 5,
"driver": "custom"
},
"url": "",
"usb": {
Expand Down
6 changes: 5 additions & 1 deletion keyboards/neson_design/nico/nico.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

#include "quantum.h"
#include "ws2812.h"
#ifdef RGBLIGHT_ENABLE

static bool alert = false;
Expand Down Expand Up @@ -66,7 +67,7 @@ void housekeeping_task_kb(void)
housekeeping_task_user();
}

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
start_led[2].r = start_led[0].r;
start_led[2].g = start_led[0].g;
Expand All @@ -82,4 +83,7 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
ws2812_setleds(start_led, RGBLED_NUM);
}

const rgblight_driver_t rgblight_driver = {
.setleds = setleds_custom,
};
#endif
2 changes: 1 addition & 1 deletion keyboards/neson_design/nico/rules.mk
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# This file intentionally left blank
WS2812_DRIVER_REQUIRED = yes
16 changes: 0 additions & 16 deletions keyboards/v60_type_r/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,6 @@
"pin": "F7",
"on_state": 0
},
"rgblight": {
"driver": "custom",
"led_count": 1,
"animations": {
"breathing": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"knight": true,
"christmas": true,
"static_gradient": true,
"rgb_test": true,
"alternating": true,
"twinkle": true
}
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"community_layouts": ["60_ansi", "60_iso"],
Expand Down
2 changes: 1 addition & 1 deletion keyboards/v60_type_r/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable the RGB Underglow
RGBLIGHT_ENABLE = no # Enable the RGB Underglow
AUDIO_ENABLE = no # Audio output

LTO_ENABLE = yes
14 changes: 0 additions & 14 deletions keyboards/v60_type_r/v60_type_r.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,20 +131,6 @@ void set_rgb_pin_off(uint8_t pin) {
PORTF |= _BV(pin);
}

void rgblight_set(void) {
// xprintf("Setting RGB underglow\n");
if (!rgblight_config.enable) {
led[0].r = 0;
led[0].g = 0;
led[0].b = 0;
set_rgb_pin_off(RGB_RED_PIN);
set_rgb_pin_off(RGB_GREEN_PIN);
set_rgb_pin_off(RGB_BLUE_PIN);
}

// //xprintf("Red: %u, Green: %u, Blue: %u\n", led[0].r, led[0].g, led[0].b);
}

ISR(TIMER3_COMPA_vect)
{
static uint8_t pwm = 0;
Expand Down
Loading
Loading