Skip to content

Commit

Permalink
Rework RGBLight driver system (qmk#22529)
Browse files Browse the repository at this point in the history
  • Loading branch information
fauxpark authored and mechlovin committed Jan 17, 2024
1 parent 50de498 commit fb82222
Show file tree
Hide file tree
Showing 33 changed files with 116 additions and 82 deletions.
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
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
1 change: 1 addition & 0 deletions keyboards/work_louder/loop/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"pin": "F1"
},
"rgblight": {
"driver": "custom",
"max_brightness": 120,
"sleep": true,
"animations": {
Expand Down
1 change: 1 addition & 0 deletions keyboards/work_louder/micro/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
},
"processor": "atmega32u4",
"rgblight": {
"driver": "custom",
"animations": {
"alternating": false,
"breathing": true,
Expand Down
1 change: 1 addition & 0 deletions keyboards/work_louder/nano/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
},
"rgblight": {
"led_count": 6,
"driver": "custom",
"max_brightness": 120,
"sleep": true,
"animations": {
Expand Down
1 change: 1 addition & 0 deletions keyboards/work_louder/numpad/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
]
},
"rgblight": {
"driver": "custom",
"animations": {
"breathing": true,
"knight": true,
Expand Down
6 changes: 3 additions & 3 deletions keyboards/work_louder/rgb_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@

#include "ws2812_bitbang.c"

void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
ws2812_setleds(start_led, num_leds);
}
const rgblight_driver_t rgblight_driver = {
.setleds = ws2812_setleds,
};
#endif

#ifdef RGB_MATRIX_ENABLE
Expand Down
Loading

0 comments on commit fb82222

Please sign in to comment.