From 23b7a02ebe2e6df738baa624c17e821c1573b69b Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 17 Mar 2024 19:23:14 +1100 Subject: LED drivers: add support for IS31FL3236 (#23264) --- quantum/rgb_matrix/rgb_matrix_drivers.c | 8 ++++++++ 1 file changed, 8 insertions(+) (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 95d1e884f0..729dcdb439 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -36,6 +36,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3218_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3236) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3236_init_drivers, + .flush = is31fl3236_flush, + .set_color = is31fl3236_set_color, + .set_color_all = is31fl3236_set_color_all, +}; + #elif defined(RGB_MATRIX_IS31FL3729) const rgb_matrix_driver_t rgb_matrix_driver = { .init = is31fl3729_init_drivers, -- cgit v1.2.3 From f7cf40fa77164d7be9358ce83f7f5939d71b38bc Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 18 Mar 2024 22:03:27 +1100 Subject: Add init function to RGBLight driver struct (#23076) --- drivers/led/apa102.c | 10 +- drivers/ws2812.h | 2 + keyboards/1k/keymaps/default/keymap.c | 1 + keyboards/1k/keymaps/default/rgblite.h | 4 + keyboards/ergodox_ez/glow/keymaps/default/keymap.c | 200 +++++++++++++++++++++ keyboards/ergodox_ez/glow/keymaps/default/rules.mk | 2 + keyboards/ergodox_ez/keymaps/default_glow/keymap.c | 1 - keyboards/ergodox_ez/keymaps/default_glow/rules.mk | 4 - keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c | 37 ++-- keyboards/ergodox_ez/keymaps/testing/keymap.c | 27 +-- keyboards/ergodox_ez/led_i2c.c | 70 -------- keyboards/ergodox_ez/rules.mk | 3 +- keyboards/ergodox_ez/shine/rgblight_custom.c | 67 +++++++ keyboards/ergodox_ez/shine/rules.mk | 1 + keyboards/handwired/promethium/rgbsps.c | 7 + keyboards/ibm/model_m/mschwingen/mschwingen.c | 1 + keyboards/kprepublic/bm60hsrgb/rev2/rev2.c | 1 + keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c | 1 + keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c | 1 + keyboards/matrix/abelx/abelx.c | 1 + keyboards/matrix/noah/noah.c | 1 + keyboards/neson_design/700e/700e.c | 1 + keyboards/neson_design/n6/n6.c | 1 + keyboards/neson_design/nico/nico.c | 1 + keyboards/oddforge/vea/ws2812_custom.c | 6 - keyboards/rgbkb/pan/pan.c | 4 +- keyboards/wilba_tech/wt_rgb_backlight.c | 3 + keyboards/work_louder/rgb_functions.c | 2 + keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c | 2 +- .../xiudi/xd002/keymaps/multilayer_rgb/keymap.c | 1 + .../xiudi/xd002/keymaps/multilayer_rgb/rgblite.h | 8 +- keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c | 1 + keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h | 8 +- platforms/avr/drivers/ws2812_bitbang.c | 4 +- platforms/avr/drivers/ws2812_i2c.c | 6 - .../drivers/vendor/RP/RP2040/ws2812_vendor.c | 11 +- platforms/chibios/drivers/ws2812_bitbang.c | 6 - platforms/chibios/drivers/ws2812_pwm.c | 6 - platforms/chibios/drivers/ws2812_spi.c | 6 - quantum/rgb_matrix/rgb_matrix_drivers.c | 1 + quantum/rgblight/rgblight.c | 2 + quantum/rgblight/rgblight_drivers.c | 2 + quantum/rgblight/rgblight_drivers.h | 1 + 43 files changed, 369 insertions(+), 156 deletions(-) create mode 100644 keyboards/ergodox_ez/glow/keymaps/default/keymap.c create mode 100644 keyboards/ergodox_ez/glow/keymaps/default/rules.mk delete mode 100644 keyboards/ergodox_ez/keymaps/default_glow/keymap.c delete mode 100644 keyboards/ergodox_ez/keymaps/default_glow/rules.mk delete mode 100644 keyboards/ergodox_ez/led_i2c.c create mode 100644 keyboards/ergodox_ez/shine/rgblight_custom.c (limited to 'quantum/rgb_matrix/rgb_matrix_drivers.c') diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c index d6d4327495..b171b07b12 100644 --- a/drivers/led/apa102.c +++ b/drivers/led/apa102.c @@ -67,7 +67,9 @@ static void apa102_send_byte(uint8_t byte) { } static void apa102_start_frame(void) { - apa102_init(); + gpio_write_pin_low(APA102_DI_PIN); + gpio_write_pin_low(APA102_CI_PIN); + for (uint16_t i = 0; i < 4; i++) { apa102_send_byte(0); } @@ -103,7 +105,8 @@ static void apa102_end_frame(uint16_t num_leds) { apa102_send_byte(0); } - apa102_init(); + gpio_write_pin_low(APA102_DI_PIN); + gpio_write_pin_low(APA102_CI_PIN); } static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness) { @@ -116,9 +119,6 @@ static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t void apa102_init(void) { gpio_set_pin_output(APA102_DI_PIN); gpio_set_pin_output(APA102_CI_PIN); - - gpio_write_pin_low(APA102_DI_PIN); - gpio_write_pin_low(APA102_CI_PIN); } void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) { diff --git a/drivers/ws2812.h b/drivers/ws2812.h index 134de51c50..993cce8ce4 100644 --- a/drivers/ws2812.h +++ b/drivers/ws2812.h @@ -62,6 +62,8 @@ # define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT #endif +void ws2812_init(void); + /* User Interface * * Input: diff --git a/keyboards/1k/keymaps/default/keymap.c b/keyboards/1k/keymaps/default/keymap.c index b64d4d8c76..3261a9f922 100644 --- a/keyboards/1k/keymaps/default/keymap.c +++ b/keyboards/1k/keymaps/default/keymap.c @@ -21,5 +21,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } void keyboard_post_init_user(void) { + rgblite_init(); rgblite_increase_hue(); } diff --git a/keyboards/1k/keymaps/default/rgblite.h b/keyboards/1k/keymaps/default/rgblite.h index 9a7761e30d..2e0b898699 100644 --- a/keyboards/1k/keymaps/default/rgblite.h +++ b/keyboards/1k/keymaps/default/rgblite.h @@ -6,6 +6,10 @@ #include "ws2812.h" #include "color.h" +static inline void rgblite_init(void) { + ws2812_init(); +} + static inline void rgblite_setrgb(RGB rgb) { rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}}; ws2812_setleds(leds, RGBLIGHT_LED_COUNT); diff --git a/keyboards/ergodox_ez/glow/keymaps/default/keymap.c b/keyboards/ergodox_ez/glow/keymaps/default/keymap.c new file mode 100644 index 0000000000..94d68cb870 --- /dev/null +++ b/keyboards/ergodox_ez/glow/keymaps/default/keymap.c @@ -0,0 +1,200 @@ +#include QMK_KEYBOARD_H +#include "version.h" + +enum layers { + BASE, // default layer + SYMB, // symbols + MDIA, // media keys +}; + +enum custom_keycodes { + VRSN = SAFE_RANGE, +}; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +[BASE] = LAYOUT_ergodox_pretty( + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT), + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB), + ALT_T(KC_APP), KC_LGUI, KC_LALT, CTL_T(KC_ESC), + KC_HOME, KC_PGUP, + KC_SPC, KC_BSPC, KC_END, KC_PGDN, KC_TAB, KC_ENT +), +/* Keymap 1: Symbol Layer + * + * ,---------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | EPRM | | | | | | | . | 0 | = | | + * `-----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |Animat| | |Toggle|Solid | + * ,------|------|------| |------+------+------. + * |Bright|Bright| | | |Hue- |Hue+ | + * |ness- |ness+ |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[SYMB] = LAYOUT_ergodox_pretty( + // left hand + VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + EE_CLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS, + RGB_MOD, KC_TRNS, RGB_TOG, RGB_M_P, + KC_TRNS, KC_TRNS, + RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, RGB_HUD, RGB_HUI +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[MDIA] = LAYOUT_ergodox_pretty( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK +), +}; +// clang-format on + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case VRSN: + SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + return false; + } + } + return true; +} + +// Runs just one time when the keyboard initializes. +void keyboard_post_init_user(void) { +#ifdef RGBLIGHT_COLOR_LAYER_0 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); +#endif +}; + +// Runs whenever there is a layer state change. +layer_state_t layer_state_set_user(layer_state_t state) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + + uint8_t layer = get_highest_layer(state); + switch (layer) { + case 0: +#ifdef RGBLIGHT_COLOR_LAYER_0 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); +#endif + break; + case 1: + ergodox_right_led_1_on(); +#ifdef RGBLIGHT_COLOR_LAYER_1 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1); +#endif + break; + case 2: + ergodox_right_led_2_on(); +#ifdef RGBLIGHT_COLOR_LAYER_2 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2); +#endif + break; + case 3: + ergodox_right_led_3_on(); +#ifdef RGBLIGHT_COLOR_LAYER_3 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3); +#endif + break; + case 4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); +#ifdef RGBLIGHT_COLOR_LAYER_4 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4); +#endif + break; + case 5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); +#ifdef RGBLIGHT_COLOR_LAYER_5 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5); +#endif + break; + case 6: + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); +#ifdef RGBLIGHT_COLOR_LAYER_6 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); +#endif + break; + case 7: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); +#ifdef RGBLIGHT_COLOR_LAYER_7 + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_7); +#endif + break; + default: + break; + } + + return state; +}; diff --git a/keyboards/ergodox_ez/glow/keymaps/default/rules.mk b/keyboards/ergodox_ez/glow/keymaps/default/rules.mk new file mode 100644 index 0000000000..1a840036e2 --- /dev/null +++ b/keyboards/ergodox_ez/glow/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +RGBLIGHT_ENABLE = no +RGB_MATRIX_ENABLE = yes diff --git a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c deleted file mode 100644 index 526c364029..0000000000 --- a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c +++ /dev/null @@ -1 +0,0 @@ -// Placeholder. See ../default/keymap.c for details diff --git a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk deleted file mode 100644 index 20bac4ab9d..0000000000 --- a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -RGBLIGHT_ENABLE = no -RGB_MATRIX_ENABLE = yes # enable later - -SRC += keymaps/default/keymap.c diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c index 6ed204a357..b033c0ca1c 100644 --- a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c +++ b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c @@ -151,6 +151,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; +#ifdef RGBLIGHT_ENABLE void eeconfig_init_user(void) { rgblight_enable(); rgblight_sethsv(HSV_CYAN); @@ -158,7 +159,7 @@ void eeconfig_init_user(void) { user_config.rgb_layer_change = true; eeconfig_update_user(user_config.raw); } - +#endif bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { @@ -168,21 +169,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { eeconfig_init(); } return false; - break; case VRSN: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } return false; - break; +#ifdef RGBLIGHT_ENABLE case RGB_SLD: if (record->event.pressed) { - #ifdef RGBLIGHT_ENABLE rgblight_mode(1); - #endif } return false; - break; case RGB_LYR: // This allows me to use underglow as layer indication, or as normal if (record->event.pressed) { user_config.rgb_layer_change ^= 1; // Toggles the status @@ -191,7 +188,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_state_set(layer_state); // then immediately update the layer color } } - return false; break; + return false; case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled if (user_config.rgb_layer_change) { // only if this is enabled @@ -199,11 +196,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { eeconfig_update_user(user_config.raw); // write the setings to EEPROM } } - return true; break; + return true; +#endif } return true; } +#ifdef RGBLIGHT_ENABLE void matrix_init_user(void) { // Call the keymap level matrix init. @@ -217,11 +216,7 @@ void matrix_init_user(void) { rgblight_mode_noeeprom(1); } } - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - -}; +#endif layer_state_t layer_state_set_user(layer_state_t state) { ergodox_board_led_off(); @@ -231,39 +226,55 @@ layer_state_t layer_state_set_user(layer_state_t state) { switch (get_highest_layer(state)) { case SYMB: ergodox_right_led_1_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_RED); rgblight_mode_noeeprom(1); } +#endif break; case MDIA: ergodox_right_led_2_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_GREEN); rgblight_mode_noeeprom(1); } +#endif break; case 3: ergodox_right_led_3_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_BLUE); rgblight_mode_noeeprom(1); } +#endif break; case 4: ergodox_right_led_1_on(); ergodox_right_led_2_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_ORANGE); rgblight_mode_noeeprom(1); } +#endif break; case 5: ergodox_right_led_1_on(); ergodox_right_led_3_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_YELLOW); rgblight_mode_noeeprom(1); } +#endif break; case 6: ergodox_right_led_2_on(); ergodox_right_led_3_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_PINK); rgblight_mode_noeeprom(1); } +#endif break; case 7: ergodox_right_led_1_on(); ergodox_right_led_2_on(); ergodox_right_led_3_on(); +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_WHITE); rgblight_mode_noeeprom(1); } +#endif break; default: // for any other layers, or the default layer +#ifdef RGBLIGHT_ENABLE if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(1); } +#endif break; } return state; diff --git a/keyboards/ergodox_ez/keymaps/testing/keymap.c b/keyboards/ergodox_ez/keymaps/testing/keymap.c index ef8ca63e3b..ee07f264b9 100644 --- a/keyboards/ergodox_ez/keymaps/testing/keymap.c +++ b/keyboards/ergodox_ez/keymaps/testing/keymap.c @@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; void matrix_init_user(void) { -#ifdef RGBLIGHT_COLOR_LAYER_0 +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_0) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); #endif }; @@ -42,19 +42,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { eeconfig_init(); } return false; - break; case VRSN: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } return false; - break; +#ifdef RGBLIGHT_ENABLE case RGB_SLD: if (record->event.pressed) { rgblight_mode(1); } return false; - break; +#endif } return true; @@ -70,48 +69,50 @@ layer_state_t layer_state_set_user(layer_state_t state) { ergodox_right_led_3_off(); switch (layer) { case 0: - #ifdef RGBLIGHT_COLOR_LAYER_0 + #ifdef RGBLIGHT_ENABLE + #ifdef RGBLIGHT_COLOR_LAYER_0 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); - #else + #else rgblight_init(); + #endif #endif break; case 1: ergodox_right_led_1_on(); - #ifdef RGBLIGHT_COLOR_LAYER_1 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_1) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1); #endif break; case 2: ergodox_right_led_2_on(); - #ifdef RGBLIGHT_COLOR_LAYER_2 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_2) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2); #endif break; case 3: ergodox_right_led_3_on(); - #ifdef RGBLIGHT_COLOR_LAYER_3 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_3) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3); #endif break; case 4: ergodox_right_led_1_on(); ergodox_right_led_2_on(); - #ifdef RGBLIGHT_COLOR_LAYER_4 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_4) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4); #endif break; case 5: ergodox_right_led_1_on(); ergodox_right_led_3_on(); - #ifdef RGBLIGHT_COLOR_LAYER_5 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_5) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5); #endif break; case 6: ergodox_right_led_2_on(); ergodox_right_led_3_on(); - #ifdef RGBLIGHT_COLOR_LAYER_6 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_6) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); #endif break; @@ -119,7 +120,7 @@ layer_state_t layer_state_set_user(layer_state_t state) { ergodox_right_led_1_on(); ergodox_right_led_2_on(); ergodox_right_led_3_on(); - #ifdef RGBLIGHT_COLOR_LAYER_7 + #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_7) rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); #endif break; diff --git a/keyboards/ergodox_ez/led_i2c.c b/keyboards/ergodox_ez/led_i2c.c deleted file mode 100644 index 80dabf4815..0000000000 --- a/keyboards/ergodox_ez/led_i2c.c +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk -Copyright 2015 ZSA Technology Labs Inc (@zsa) -Copyright 2020 Christopher Courtney (@drashna) - -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 . -*/ - -#ifdef RGBLIGHT_ENABLE - -# include "ergodox_ez.h" -# include "ws2812.h" - -void setleds_custom(rgb_led_t *led, uint16_t led_num) { - uint16_t length = 0; - int i = 0; - int j = 0; -# ifdef RGBW - int bytes_per_led = 4; -# else - int bytes_per_led = 3; -# endif -# if defined(ERGODOX_LED_30) - // prevent right-half code from trying to bitbang all 30 - // so with 30 LEDs, we count from 29 to 15 here, and the - // other half does 0 to 14. - uint8_t half_led_num = RGBLIGHT_LED_COUNT / 2; - length = half_led_num * bytes_per_led; - uint8_t data[length]; - for (i = half_led_num + half_led_num - 1; i >= half_led_num; --i) -# elif defined(ERGODOX_LED_15_MIRROR) - length = led_num * bytes_per_led; - uint8_t data[length]; - for (i = 0; i < led_num; ++i) -# else // ERGDOX_LED_15 non-mirrored - length = led_num * bytes_per_led; - uint8_t data[length]; - for (i = led_num - 1; i >= 0; --i) -# endif - { - uint8_t *data_byte = (uint8_t *)(led + i); - data[j++] = data_byte[0]; - data[j++] = data_byte[1]; - data[j++] = data_byte[2]; -#ifdef RGBW - data[j++] = data_byte[3]; -#endif - } - i2c_transmit(0x84, data, sizeof(data), ERGODOX_EZ_I2C_TIMEOUT); - - ws2812_setleds(led, led_num); -} - -const rgblight_driver_t rgblight_driver = { - .setleds = setleds_custom, -}; - -#endif // RGBLIGHT_ENABLE diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk index bba3bd86ae..68f785f3cc 100644 --- a/keyboards/ergodox_ez/rules.mk +++ b/keyboards/ergodox_ez/rules.mk @@ -19,8 +19,7 @@ SWAP_HANDS_ENABLE= no # Allow swapping hands of keyboard RGB_MATRIX_ENABLE = no # enable later # project specific files -SRC += matrix.c \ - led_i2c.c +SRC += matrix.c I2C_DRIVER_REQUIRED = yes # Disable unsupported hardware diff --git a/keyboards/ergodox_ez/shine/rgblight_custom.c b/keyboards/ergodox_ez/shine/rgblight_custom.c new file mode 100644 index 0000000000..feac50cba0 --- /dev/null +++ b/keyboards/ergodox_ez/shine/rgblight_custom.c @@ -0,0 +1,67 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk +Copyright 2015 ZSA Technology Labs Inc (@zsa) +Copyright 2020 Christopher Courtney (@drashna) + +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 "ergodox_ez.h" +#include "ws2812.h" + +void setleds_custom(rgb_led_t *led, uint16_t led_num) { + uint16_t length = 0; + int i = 0; + int j = 0; +# ifdef RGBW + int bytes_per_led = 4; +# else + int bytes_per_led = 3; +# endif +# if defined(ERGODOX_LED_30) + // prevent right-half code from trying to bitbang all 30 + // so with 30 LEDs, we count from 29 to 15 here, and the + // other half does 0 to 14. + uint8_t half_led_num = RGBLIGHT_LED_COUNT / 2; + length = half_led_num * bytes_per_led; + uint8_t data[length]; + for (i = half_led_num + half_led_num - 1; i >= half_led_num; --i) +# elif defined(ERGODOX_LED_15_MIRROR) + length = led_num * bytes_per_led; + uint8_t data[length]; + for (i = 0; i < led_num; ++i) +# else // ERGDOX_LED_15 non-mirrored + length = led_num * bytes_per_led; + uint8_t data[length]; + for (i = led_num - 1; i >= 0; --i) +# endif + { + uint8_t *data_byte = (uint8_t *)(led + i); + data[j++] = data_byte[0]; + data[j++] = data_byte[1]; + data[j++] = data_byte[2]; +#ifdef RGBW + data[j++] = data_byte[3]; +#endif + } + i2c_transmit(0x84, data, sizeof(data), ERGODOX_EZ_I2C_TIMEOUT); + + ws2812_setleds(led, led_num); +} + +const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, + .setleds = setleds_custom, +}; diff --git a/keyboards/ergodox_ez/shine/rules.mk b/keyboards/ergodox_ez/shine/rules.mk index b035c36850..4ab494d1aa 100644 --- a/keyboards/ergodox_ez/shine/rules.mk +++ b/keyboards/ergodox_ez/shine/rules.mk @@ -1,2 +1,3 @@ RGBLIGHT_ENABLE = yes WS2812_DRIVER_REQUIRED = yes +SRC += rgblight_custom.c diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c index 957726e775..7dc26f4a5e 100644 --- a/keyboards/handwired/promethium/rgbsps.c +++ b/keyboards/handwired/promethium/rgbsps.c @@ -1,8 +1,15 @@ +#include "keyboard.h" #include "ws2812.h" #include "rgbsps.h" rgb_led_t led[RGBSPS_NUM]; +void keyboard_pre_init_kb(void) { + ws2812_init(); + + keyboard_pre_init_user(); +} + void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) { led[index].r = r; led[index].g = g; diff --git a/keyboards/ibm/model_m/mschwingen/mschwingen.c b/keyboards/ibm/model_m/mschwingen/mschwingen.c index 03dfcdc2f2..6a8a0ec8fc 100644 --- a/keyboards/ibm/model_m/mschwingen/mschwingen.c +++ b/keyboards/ibm/model_m/mschwingen/mschwingen.c @@ -90,6 +90,7 @@ void sleep_led_enable(void) { void keyboard_pre_init_kb(void) { #ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812 + ws2812_init(); ws2812_setleds(led, RGBLIGHT_LED_COUNT); #else /* Set status LEDs pins to output and Low (on) */ diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c index 3ee74755fa..5bd23a12b8 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c @@ -154,6 +154,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL]; static void rgb_matrix_driver_init(void) { i2c_init(); is31fl3733_init(0); + ws2812_init(); for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { bool enabled = true; is31fl3733_set_led_control_register(index, enabled, enabled, enabled); diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c index e7641bf4e5..794dea5176 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c @@ -154,6 +154,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL]; static void rgb_matrix_driver_init(void) { i2c_init(); is31fl3733_init(0); + ws2812_init(); for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { bool enabled = true; is31fl3733_set_led_control_register(index, enabled, enabled, enabled); diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c index 5cb6d850c9..3586dc8e80 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c @@ -150,6 +150,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL]; static void rgb_matrix_driver_init(void) { i2c_init(); is31fl3733_init(0); + ws2812_init(); for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { bool enabled = true; is31fl3733_set_led_control_register(index, enabled, enabled, enabled); diff --git a/keyboards/matrix/abelx/abelx.c b/keyboards/matrix/abelx/abelx.c index 0a3071a402..ee7ffde134 100644 --- a/keyboards/matrix/abelx/abelx.c +++ b/keyboards/matrix/abelx/abelx.c @@ -79,6 +79,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) } const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = setleds_custom, }; diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c index b5c52f9952..a01d1b11bc 100644 --- a/keyboards/matrix/noah/noah.c +++ b/keyboards/matrix/noah/noah.c @@ -55,6 +55,7 @@ void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) { } const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = setleds_custom, }; #endif diff --git a/keyboards/neson_design/700e/700e.c b/keyboards/neson_design/700e/700e.c index 31f88a71f9..a9bcbee288 100644 --- a/keyboards/neson_design/700e/700e.c +++ b/keyboards/neson_design/700e/700e.c @@ -355,6 +355,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) } const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = setleds_custom, }; diff --git a/keyboards/neson_design/n6/n6.c b/keyboards/neson_design/n6/n6.c index b878b9368d..f257735acc 100644 --- a/keyboards/neson_design/n6/n6.c +++ b/keyboards/neson_design/n6/n6.c @@ -350,6 +350,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) } const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = setleds_custom, }; diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c index bf8eeb87dd..0738a3ee98 100644 --- a/keyboards/neson_design/nico/nico.c +++ b/keyboards/neson_design/nico/nico.c @@ -84,6 +84,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) } const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = setleds_custom, }; #endif \ No newline at end of file diff --git a/keyboards/oddforge/vea/ws2812_custom.c b/keyboards/oddforge/vea/ws2812_custom.c index f52c8d06a8..a037b88b3e 100644 --- a/keyboards/oddforge/vea/ws2812_custom.c +++ b/keyboards/oddforge/vea/ws2812_custom.c @@ -23,12 +23,6 @@ void ws2812_init(void) { // Setleds for standard RGB void ws2812_setleds(rgb_led_t *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(rgb_led_t) * (leds >> 1), WS2812_I2C_TIMEOUT); i2c_transmit(WS2812_I2C_ADDRESS_RIGHT, (uint8_t *)ledarray+(sizeof(rgb_led_t) * (leds >> 1)), sizeof(rgb_led_t) * (leds - (leds >> 1)), WS2812_I2C_TIMEOUT); } diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c index d175be3641..191ff1ac1f 100644 --- a/keyboards/rgbkb/pan/pan.c +++ b/keyboards/rgbkb/pan/pan.c @@ -24,8 +24,6 @@ // LED color buffer rgb_led_t rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT]; -static void init(void) {} - static void flush(void) { ws2812_setleds(rgb_matrix_ws2812_array, RGB_MATRIX_LED_COUNT); } @@ -56,7 +54,7 @@ static void setled_all(uint8_t r, uint8_t g, uint8_t b) { } const rgb_matrix_driver_t rgb_matrix_driver = { - .init = init, + .init = ws2812_init, .flush = flush, .set_color = setled, .set_color_all = setled_all, diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c index cf36288705..d03d189b29 100644 --- a/keyboards/wilba_tech/wt_rgb_backlight.c +++ b/keyboards/wilba_tech/wt_rgb_backlight.c @@ -2237,6 +2237,9 @@ void backlight_init_drivers(void) is31fl3733_update_led_control_registers( 0 ); is31fl3733_update_led_control_registers( 1 ); #else +#if defined(RGB_BACKLIGHT_DAWN60) + ws2812_init(); +#endif // Init the #1 driver is31fl3731_init( 0 ); // Init the #2 driver (if used) diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c index 9b39555971..36f9da013e 100644 --- a/keyboards/work_louder/rgb_functions.c +++ b/keyboards/work_louder/rgb_functions.c @@ -20,11 +20,13 @@ #undef WS2812_DI_PIN #define WS2812_DI_PIN RGBLIGHT_DI_PIN +#define ws2812_init ws2812_rgb_init #define ws2812_setleds ws2812_rgb_setleds #include "ws2812_bitbang.c" const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = ws2812_setleds, }; #endif diff --git a/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c b/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c index 6b8f91bc2f..a153a7cf83 100644 --- a/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c +++ b/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c @@ -155,7 +155,7 @@ static void init(void) { is31fl3731_update_led_control_registers(1); //RGB Underglow ws2812 - + ws2812_init(); } static void flush(void) { diff --git a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c index 4ae28fd91b..d74678d76a 100644 --- a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c +++ b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c @@ -169,5 +169,6 @@ layer_state_t layer_state_set_user(layer_state_t state) { // default color void keyboard_post_init_user(void) { + rgblite_init(); rgblite_setrgb(RGB_GREEN); } diff --git a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h index 1fa6f899b9..103b228d33 100644 --- a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h +++ b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h @@ -3,7 +3,11 @@ #include "ws2812.h" #include "color.h" +static inline void rgblite_init(void) { + ws2812_init(); +} + static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) { - rgb_led_t leds[RGBLED_NUM] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; - ws2812_setleds(leds, RGBLED_NUM); + rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; + ws2812_setleds(leds, RGBLIGHT_LED_COUNT); } diff --git a/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c b/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c index a795ca8a6d..aac4dc6fde 100644 --- a/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c +++ b/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c @@ -27,5 +27,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } void keyboard_post_init_user(void) { + rgblite_init(); rgblite_increase_hue(); } diff --git a/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h b/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h index 15ee0c0f6b..0bb0582415 100644 --- a/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h +++ b/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h @@ -3,9 +3,13 @@ #include "ws2812.h" #include "color.h" +static inline void rgblite_init(void) { + ws2812_init(); +} + static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) { - rgb_led_t leds[RGBLED_NUM] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; - ws2812_setleds(leds, RGBLED_NUM); + rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; + ws2812_setleds(leds, RGBLIGHT_LED_COUNT); } static void rgblite_increase_hue(void) { diff --git a/platforms/avr/drivers/ws2812_bitbang.c b/platforms/avr/drivers/ws2812_bitbang.c index 116053591f..be127e501c 100644 --- a/platforms/avr/drivers/ws2812_bitbang.c +++ b/platforms/avr/drivers/ws2812_bitbang.c @@ -37,9 +37,11 @@ static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi); -void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) { +void ws2812_init(void) { DDRx_ADDRESS(WS2812_DI_PIN) |= pinmask(WS2812_DI_PIN); +} +void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) { uint8_t masklo = ~(pinmask(WS2812_DI_PIN)) & PORTx_ADDRESS(WS2812_DI_PIN); uint8_t maskhi = pinmask(WS2812_DI_PIN) | PORTx_ADDRESS(WS2812_DI_PIN); diff --git a/platforms/avr/drivers/ws2812_i2c.c b/platforms/avr/drivers/ws2812_i2c.c index f52a037b8e..60b466c32a 100644 --- a/platforms/avr/drivers/ws2812_i2c.c +++ b/platforms/avr/drivers/ws2812_i2c.c @@ -19,11 +19,5 @@ void ws2812_init(void) { // Setleds for standard RGB void ws2812_setleds(rgb_led_t *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(rgb_led_t) * leds, WS2812_I2C_TIMEOUT); } diff --git a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c index 799d96b3c6..95a827e4b8 100644 --- a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c +++ b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c @@ -177,7 +177,7 @@ static void ws2812_dma_callback(void* p, uint32_t ct) { osalSysUnlockFromISR(); } -bool ws2812_init(void) { +void ws2812_init(void) { uint pio_idx = pio_get_index(pio); /* Get PIOx peripheral out of reset state. */ hal_lld_peripheral_unreset(pio_idx == 0 ? RESETS_ALLREG_PIO0 : RESETS_ALLREG_PIO1); @@ -196,7 +196,7 @@ bool ws2812_init(void) { STATE_MACHINE = pio_claim_unused_sm(pio, true); if (STATE_MACHINE < 0) { dprintln("ERROR: Failed to acquire state machine for WS2812 output!"); - return false; + return; } uint offset = pio_add_program(pio, &ws2812_program); @@ -246,8 +246,6 @@ bool ws2812_init(void) { DMA_CTRL_TRIG_TREQ_SEL(pio == pio0 ? STATE_MACHINE : STATE_MACHINE + 8) | DMA_CTRL_TRIG_PRIORITY(RP_DMA_PRIORITY_WS2812); // clang-format on - - return true; } static inline void sync_ws2812_transfer(void) { @@ -269,11 +267,6 @@ static inline void sync_ws2812_transfer(void) { } void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { - static bool is_initialized = false; - if (unlikely(!is_initialized)) { - is_initialized = ws2812_init(); - } - sync_ws2812_transfer(); for (int i = 0; i < leds; i++) { diff --git a/platforms/chibios/drivers/ws2812_bitbang.c b/platforms/chibios/drivers/ws2812_bitbang.c index 1ed87c4381..9ed6bacd5a 100644 --- a/platforms/chibios/drivers/ws2812_bitbang.c +++ b/platforms/chibios/drivers/ws2812_bitbang.c @@ -82,12 +82,6 @@ void ws2812_init(void) { // Setleds for standard RGB void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) { - static bool s_init = false; - if (!s_init) { - ws2812_init(); - s_init = true; - } - // this code is very time dependent, so we need to disable interrupts chSysLock(); diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c index e0b3bfd5b5..7dc3414ead 100644 --- a/platforms/chibios/drivers/ws2812_pwm.c +++ b/platforms/chibios/drivers/ws2812_pwm.c @@ -389,12 +389,6 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b, // Setleds for standard RGB void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { - static bool s_init = false; - if (!s_init) { - ws2812_init(); - s_init = true; - } - for (uint16_t i = 0; i < leds; i++) { #ifdef RGBW ws2812_write_led_rgbw(i, ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w); diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c index 01162f07f4..5b990ccaa0 100644 --- a/platforms/chibios/drivers/ws2812_spi.c +++ b/platforms/chibios/drivers/ws2812_spi.c @@ -188,12 +188,6 @@ void ws2812_init(void) { } void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { - static bool s_init = false; - if (!s_init) { - ws2812_init(); - s_init = true; - } - for (uint8_t i = 0; i < leds; i++) { set_led_color_rgb(ledarray[i], i); } diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 729dcdb439..4370996d0e 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -151,6 +151,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_COUNT]; bool ws2812_dirty = false; static void init(void) { + ws2812_init(); ws2812_dirty = false; } diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 530cb04688..28b58feea6 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -247,6 +247,8 @@ void rgblight_init(void) { rgblight_mode_noeeprom(rgblight_config.mode); } + rgblight_driver.init(); + is_rgblight_initialized = true; } diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c index 45b60e1a5f..8902b8f842 100644 --- a/quantum/rgblight/rgblight_drivers.c +++ b/quantum/rgblight/rgblight_drivers.c @@ -7,6 +7,7 @@ # include "ws2812.h" const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = ws2812_setleds, }; @@ -14,6 +15,7 @@ const rgblight_driver_t rgblight_driver = { # include "apa102.h" const rgblight_driver_t rgblight_driver = { + .init = apa102_init, .setleds = apa102_setleds, }; diff --git a/quantum/rgblight/rgblight_drivers.h b/quantum/rgblight/rgblight_drivers.h index f7125a6f3d..af28b918e1 100644 --- a/quantum/rgblight/rgblight_drivers.h +++ b/quantum/rgblight/rgblight_drivers.h @@ -7,6 +7,7 @@ #include "color.h" typedef struct { + void (*init)(void); void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds); } rgblight_driver_t; -- cgit v1.2.3 From 0ff53b24984e88f385638e47ea076b4d2945c0c6 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 28 Apr 2024 00:36:54 +1000 Subject: Rename `RGBW` define to `WS2812_RGBW` (#23585) --- data/mappings/info_config.hjson | 3 ++- data/schemas/keyboard.jsonschema | 6 +++++- docs/config_options.md | 2 +- docs/feature_rgblight.md | 2 +- docs/reference_info_json.md | 6 +++--- docs/ws2812_driver.md | 22 ++++++++++++++++++++++ keyboards/ergodox_ez/config.h | 2 -- keyboards/ergodox_ez/info.json | 3 ++- keyboards/ergodox_ez/shine/rgblight_custom.c | 4 ++-- keyboards/handwired/tennie/config.h | 2 -- keyboards/handwired/tennie/keyboard.json | 3 ++- keyboards/oddforge/vea/ws2812_custom.c | 2 +- keyboards/rgbkb/pan/pan.c | 2 +- keyboards/westfoxtrot/aanzee/config.h | 2 -- keyboards/westfoxtrot/aanzee/keyboard.json | 3 ++- platforms/avr/drivers/ws2812_i2c.c | 2 +- .../drivers/vendor/RP/RP2040/ws2812_vendor.c | 6 +++--- platforms/chibios/drivers/ws2812_bitbang.c | 2 +- platforms/chibios/drivers/ws2812_pwm.c | 8 ++++---- platforms/chibios/drivers/ws2812_spi.c | 4 ++-- quantum/color.c | 2 +- quantum/color.h | 4 ++-- quantum/rgb_matrix/rgb_matrix_drivers.c | 2 +- quantum/rgblight/rgblight.c | 18 +++++++++--------- 24 files changed, 68 insertions(+), 44 deletions(-) (limited to 'quantum/rgb_matrix/rgb_matrix_drivers.c') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index c0417b8839..b61ca04071 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -164,7 +164,6 @@ "RGBLIGHT_DEFAULT_SAT": {"info_key": "rgblight.default.sat", "value_type": "int"}, "RGBLIGHT_DEFAULT_VAL": {"info_key": "rgblight.default.val", "value_type": "int"}, "RGBLIGHT_DEFAULT_SPD": {"info_key": "rgblight.default.speed", "value_type": "int"}, - "RGBW": {"info_key": "rgblight.rgbw", "value_type": "flag"}, // Secure "SECURE_IDLE_TIMEOUT": {"info_key": "secure.idle_timeout", "value_type": "int"}, @@ -215,6 +214,7 @@ "WS2812_DI_PIN": {"info_key": "ws2812.pin"}, "WS2812_I2C_ADDRESS": {"info_key": "ws2812.i2c_address", "value_type": "hex"}, "WS2812_I2C_TIMEOUT": {"info_key": "ws2812.i2c_timeout", "value_type": "int"}, + "WS2812_RGBW": {"info_key": "ws2812.rgbw", "value_type": "flag"}, "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, @@ -229,6 +229,7 @@ "PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true}, "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int", "deprecated": true}, "RGB_DI_PIN": {"info_key": "rgblight.pin", "invalid": true, "replace_with": "WS2812_DI_PIN or APA102_DI_PIN"}, + "RGBW": {"info_key": "rgblight.rgbw", "invalid": true, "replace_with": "WS2812_RGBW"}, "RGB_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "_invalid.rgb_matrix_sleep", "invalid": true, "replace_with": "RGB_MATRIX_SLEEP"}, "RGBLIGHT_ANIMATIONS": {"info_key": "_invalid.rgblight.animations.all", "value_type": "flag", "invalid": true}, "TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "flag", "deprecated": true}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 585c64777f..de01809b43 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -661,7 +661,10 @@ "$ref": "qmk.definitions.v1#/mcu_pin", "$comment": "Deprecated: use ws2812.pin instead" }, - "rgbw": {"type": "boolean"}, + "rgbw": { + "type": "boolean", + "$comment": "Deprecated: use ws2812.rgbw instead" + }, "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "sleep": {"type": "boolean"}, "split": {"type": "boolean"}, @@ -937,6 +940,7 @@ "enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"] }, "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "rgbw": {"type": "boolean"}, "i2c_address": {"$ref": "qmk.definitions.v1#/hex_number_2d"}, "i2c_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} } diff --git a/docs/config_options.md b/docs/config_options.md index fca80e54fd..046429a587 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -237,7 +237,7 @@ If you define these options you will enable the associated feature, which may in * units to step when in/decreasing saturation * `#define RGBLIGHT_VAL_STEP 12` * units to step when in/decreasing value (brightness) -* `#define RGBW` +* `#define WS2812_RGBW` * Enables RGBW LED support ## Mouse Key Options diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md index a6a89d1d00..ae37ceca92 100644 --- a/docs/feature_rgblight.md +++ b/docs/feature_rgblight.md @@ -6,7 +6,7 @@ QMK has the ability to control RGB LEDs attached to your keyboard. This is commo Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard. -Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported): +Currently QMK supports the following addressable LEDs: * WS2811, WS2812, WS2812B, WS2812C, etc. * SK6812, SK6812MINI, SK6805 diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index d1dc5d3bea..5b06e9a326 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -588,9 +588,6 @@ Configures the [RGB Lighting](feature_rgblight.md) feature. * `max_brightness` * The maximum value which the HSV "V" component is scaled to, from 0 to 255. * Default: `255` - * `rgbw` - * Enable RGBW LEDs. - * Default: `false` * `saturation_steps` * The number of saturation adjustment steps. * Default: `17` @@ -855,3 +852,6 @@ Configures the [WS2812](ws2812_driver.md) driver. * `i2c_timeout` * The I²C timeout in milliseconds (`i2c` driver only). * Default: `100` (100 ms) + * `rgbw` + * Enable RGBW LEDs. + * Default: `false` diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md index 006529cc8a..8851c042f0 100644 --- a/docs/ws2812_driver.md +++ b/docs/ws2812_driver.md @@ -33,6 +33,7 @@ Add the following to your `config.h`: |`WS2812_T0H` |`350` |The length of a "0" bit's high phase in nanoseconds | |`WS2812_TRST_US` |`280` |The length of the reset phase in microseconds | |`WS2812_BYTE_ORDER`|`WS2812_BYTE_ORDER_GRB`|The byte order of the RGB data | +|`WS2812_RGBW` |*Not defined* |Enables RGBW support (except `i2c` driver) | ### Timing Adjustment :id=timing-adjustment @@ -58,6 +59,27 @@ Where the byte order may be one of: |`RGB` |WS2812B-2020 | |`BGR` |TM1812 | +### RGBW Support :id=rgbw-support + +Rendering the color white with RGB LEDs is typically inconsistent due to inherent variations between each individual LED die. However, some WS2812 variants (such as SK6812RGBW) also possess a white LED along with the red, green, and blue channels, which allows for a more accurate white to be displayed. + +QMK can automatically convert the RGB data to be sent to the LEDs to mix in the white channel: + +``` +w = min(r, g, b) +r -= w +g -= w +b -= w +``` + +Thus, an RGB triplet of `255,255,255` will simply turn on the white LED fully (`0,0,0,255`). + +To enable RGBW conversion, add the following to your `config.h`: + +```c +#define WS2812_RGBW +``` + ## Driver Configuration :id=driver-configuration Driver selection can be configured in `rules.mk` as `WS2812_DRIVER`, or in `info.json` as `ws2812.driver`. Valid values are `bitbang` (default), `i2c`, `spi`, `pwm`, `vendor`, or `custom`. See below for information on individual drivers. diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h index 8209c21dba..3688e00785 100644 --- a/keyboards/ergodox_ez/config.h +++ b/keyboards/ergodox_ez/config.h @@ -73,8 +73,6 @@ along with this program. If not, see . /* fix space cadet rollover issue */ #define DISABLE_SPACE_CADET_ROLLOVER -#define RGBW - /* * The debounce filtering reports a key/switch change directly, * without any extra delay. After that the debounce logic will filter diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json index f2495a409c..a560e97a0b 100644 --- a/keyboards/ergodox_ez/info.json +++ b/keyboards/ergodox_ez/info.json @@ -27,7 +27,8 @@ "debounce_type": "sym_eager_pr" }, "ws2812": { - "pin": "D7" + "pin": "D7", + "rgbw": true }, "rgb_matrix": { "animations": { diff --git a/keyboards/ergodox_ez/shine/rgblight_custom.c b/keyboards/ergodox_ez/shine/rgblight_custom.c index feac50cba0..29060e76fc 100644 --- a/keyboards/ergodox_ez/shine/rgblight_custom.c +++ b/keyboards/ergodox_ez/shine/rgblight_custom.c @@ -25,7 +25,7 @@ void setleds_custom(rgb_led_t *led, uint16_t led_num) { uint16_t length = 0; int i = 0; int j = 0; -# ifdef RGBW +# ifdef WS2812_RGBW int bytes_per_led = 4; # else int bytes_per_led = 3; @@ -52,7 +52,7 @@ void setleds_custom(rgb_led_t *led, uint16_t led_num) { data[j++] = data_byte[0]; data[j++] = data_byte[1]; data[j++] = data_byte[2]; -#ifdef RGBW +#ifdef WS2812_RGBW data[j++] = data_byte[3]; #endif } diff --git a/keyboards/handwired/tennie/config.h b/keyboards/handwired/tennie/config.h index 7c77f53a82..dcbcfeaaa8 100644 --- a/keyboards/handwired/tennie/config.h +++ b/keyboards/handwired/tennie/config.h @@ -17,8 +17,6 @@ along with this program. If not, see . #pragma once -#define RGBW - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/keyboards/handwired/tennie/keyboard.json b/keyboards/handwired/tennie/keyboard.json index 34e6676c95..36c1266d50 100644 --- a/keyboards/handwired/tennie/keyboard.json +++ b/keyboards/handwired/tennie/keyboard.json @@ -26,7 +26,8 @@ } }, "ws2812": { - "pin": "D1" + "pin": "D1", + "rgbw": true }, "features": { "bootmagic": true, diff --git a/keyboards/oddforge/vea/ws2812_custom.c b/keyboards/oddforge/vea/ws2812_custom.c index a037b88b3e..317f98130b 100644 --- a/keyboards/oddforge/vea/ws2812_custom.c +++ b/keyboards/oddforge/vea/ws2812_custom.c @@ -1,7 +1,7 @@ #include "ws2812.h" #include "i2c_master.h" -#ifdef RGBW +#ifdef WS2812_RGBW # error "RGBW not supported" #endif diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c index 191ff1ac1f..401831e0e2 100644 --- a/keyboards/rgbkb/pan/pan.c +++ b/keyboards/rgbkb/pan/pan.c @@ -42,7 +42,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { rgb_matrix_ws2812_array[i].g = g; rgb_matrix_ws2812_array[i].b = b; } -# ifdef RGBW +# ifdef WS2812_RGBW convert_rgb_to_rgbw(&rgb_matrix_ws2812_array[i]); # endif } diff --git a/keyboards/westfoxtrot/aanzee/config.h b/keyboards/westfoxtrot/aanzee/config.h index c024f9d8d9..cd1f84bc1f 100644 --- a/keyboards/westfoxtrot/aanzee/config.h +++ b/keyboards/westfoxtrot/aanzee/config.h @@ -17,8 +17,6 @@ along with this program. If not, see . #pragma once -#define RGBW - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/keyboards/westfoxtrot/aanzee/keyboard.json b/keyboards/westfoxtrot/aanzee/keyboard.json index 7a12a3e52e..898fe9e62b 100644 --- a/keyboards/westfoxtrot/aanzee/keyboard.json +++ b/keyboards/westfoxtrot/aanzee/keyboard.json @@ -52,7 +52,8 @@ } }, "ws2812": { - "pin": "E6" + "pin": "E6", + "rgbw": true }, "processor": "atmega32u4", "bootloader": "atmel-dfu", diff --git a/platforms/avr/drivers/ws2812_i2c.c b/platforms/avr/drivers/ws2812_i2c.c index 60b466c32a..86a5ac8394 100644 --- a/platforms/avr/drivers/ws2812_i2c.c +++ b/platforms/avr/drivers/ws2812_i2c.c @@ -1,7 +1,7 @@ #include "ws2812.h" #include "i2c_master.h" -#ifdef RGBW +#ifdef WS2812_RGBW # error "RGBW not supported" #endif diff --git a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c index 95a827e4b8..41a5311719 100644 --- a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c +++ b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c @@ -161,7 +161,7 @@ static void ws2812_dma_callback(void* p, uint32_t ct) { // FIFO is already empty. rtcnt_t time_to_completion = (pio_sm_get_tx_fifo_level(pio, STATE_MACHINE) + 1) * MAX(WS2812_T1H + WS2812_T1L, WS2812_T0H + WS2812_T0L); -#if defined(RGBW) +#if defined(WS2812_RGBW) time_to_completion *= 32; #else time_to_completion *= 24; @@ -222,7 +222,7 @@ void ws2812_init(void) { sm_config_set_sideset(&config, 1, false, false); #endif -#if defined(RGBW) +#if defined(WS2812_RGBW) sm_config_set_out_shift(&config, false, true, 32); #else sm_config_set_out_shift(&config, false, true, 24); @@ -270,7 +270,7 @@ void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { sync_ws2812_transfer(); for (int i = 0; i < leds; i++) { -#if defined(RGBW) +#if defined(WS2812_RGBW) WS2812_BUFFER[i] = rgbw8888_to_u32(ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w); #else WS2812_BUFFER[i] = rgbw8888_to_u32(ledarray[i].r, ledarray[i].g, ledarray[i].b, 0); diff --git a/platforms/chibios/drivers/ws2812_bitbang.c b/platforms/chibios/drivers/ws2812_bitbang.c index 9ed6bacd5a..96378ec0ac 100644 --- a/platforms/chibios/drivers/ws2812_bitbang.c +++ b/platforms/chibios/drivers/ws2812_bitbang.c @@ -101,7 +101,7 @@ void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) { sendByte(ledarray[i].r); #endif -#ifdef RGBW +#ifdef WS2812_RGBW sendByte(ledarray[i].w); #endif } diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c index 7dc3414ead..1e9d2ebb41 100644 --- a/platforms/chibios/drivers/ws2812_pwm.c +++ b/platforms/chibios/drivers/ws2812_pwm.c @@ -16,7 +16,7 @@ /* Adapted from https://github.com/joewa/WS2812-LED-Driver_ChibiOS/ */ -#ifdef RGBW +#ifdef WS2812_RGBW # define WS2812_CHANNELS 4 #else # define WS2812_CHANNELS 3 @@ -262,7 +262,7 @@ # define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 0, (bit)) #endif -#ifdef RGBW +#ifdef WS2812_RGBW /** * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given white bit * @@ -381,7 +381,7 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b, ws2812_frame_buffer[WS2812_RED_BIT(led_number, bit)] = ((r >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0; ws2812_frame_buffer[WS2812_GREEN_BIT(led_number, bit)] = ((g >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0; ws2812_frame_buffer[WS2812_BLUE_BIT(led_number, bit)] = ((b >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0; -#ifdef RGBW +#ifdef WS2812_RGBW ws2812_frame_buffer[WS2812_WHITE_BIT(led_number, bit)] = ((w >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0; #endif } @@ -390,7 +390,7 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b, // Setleds for standard RGB void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { for (uint16_t i = 0; i < leds; i++) { -#ifdef RGBW +#ifdef WS2812_RGBW ws2812_write_led_rgbw(i, ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w); #else ws2812_write_led(i, ledarray[i].r, ledarray[i].g, ledarray[i].b); diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c index 5b990ccaa0..ad2e87781c 100644 --- a/platforms/chibios/drivers/ws2812_spi.c +++ b/platforms/chibios/drivers/ws2812_spi.c @@ -76,7 +76,7 @@ #endif #define BYTES_FOR_LED_BYTE 4 -#ifdef RGBW +#ifdef WS2812_RGBW # define WS2812_CHANNELS 4 #else # define WS2812_CHANNELS 3 @@ -131,7 +131,7 @@ static void set_led_color_rgb(rgb_led_t color, int pos) { for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j); #endif -#ifdef RGBW +#ifdef WS2812_RGBW for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j); #endif diff --git a/quantum/color.c b/quantum/color.c index 395383f428..96d548a33c 100644 --- a/quantum/color.c +++ b/quantum/color.c @@ -109,7 +109,7 @@ RGB hsv_to_rgb_nocie(HSV hsv) { return hsv_to_rgb_impl(hsv, false); } -#ifdef RGBW +#ifdef WS2812_RGBW void convert_rgb_to_rgbw(rgb_led_t *led) { // Determine lowest value in all three colors, put that into // the white channel and then shift all colors by that amount diff --git a/quantum/color.h b/quantum/color.h index 00a3bfb3f8..b6a9dd0641 100644 --- a/quantum/color.h +++ b/quantum/color.h @@ -96,7 +96,7 @@ typedef struct PACKED rgb_led_t { uint8_t g; uint8_t r; #endif -#ifdef RGBW +#ifdef WS2812_RGBW uint8_t w; #endif } rgb_led_t; @@ -111,6 +111,6 @@ typedef struct PACKED HSV { RGB hsv_to_rgb(HSV hsv); RGB hsv_to_rgb_nocie(HSV hsv); -#ifdef RGBW +#ifdef WS2812_RGBW void convert_rgb_to_rgbw(rgb_led_t *led); #endif diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 4370996d0e..db3a2ef9e0 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -185,7 +185,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { rgb_matrix_ws2812_array[i].r = r; rgb_matrix_ws2812_array[i].g = g; rgb_matrix_ws2812_array[i].b = b; -# ifdef RGBW +# ifdef WS2812_RGBW convert_rgb_to_rgbw(&rgb_matrix_ws2812_array[i]); # endif } diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 62137c020b..b0f2dfdc1d 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -149,7 +149,7 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) { led1->r = r; led1->g = g; led1->b = b; -#ifdef RGBW +#ifdef WS2812_RGBW led1->w = 0; #endif } @@ -652,7 +652,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) { led[i].r = r; led[i].g = g; led[i].b = b; -#ifdef RGBW +#ifdef WS2812_RGBW led[i].w = 0; #endif } @@ -667,7 +667,7 @@ void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) { led[index].r = r; led[index].g = g; led[index].b = b; -#ifdef RGBW +#ifdef WS2812_RGBW led[index].w = 0; #endif rgblight_set(); @@ -704,7 +704,7 @@ void rgblight_setrgb_range(uint8_t r, uint8_t g, uint8_t b, uint8_t start, uint8 led[i].r = r; led[i].g = g; led[i].b = b; -#ifdef RGBW +#ifdef WS2812_RGBW led[i].w = 0; #endif } @@ -905,7 +905,7 @@ void rgblight_set(void) { led[i].r = 0; led[i].g = 0; led[i].b = 0; -#ifdef RGBW +#ifdef WS2812_RGBW led[i].w = 0; #endif } @@ -933,7 +933,7 @@ void rgblight_set(void) { start_led = led + rgblight_ranges.clipping_start_pos; #endif -#ifdef RGBW +#ifdef WS2812_RGBW for (uint8_t i = 0; i < num_leds; i++) { convert_rgb_to_rgbw(&start_led[i]); } @@ -1263,7 +1263,7 @@ void rgblight_effect_snake(animation_status_t *anim) { ledp->r = 0; ledp->g = 0; ledp->b = 0; -# ifdef RGBW +# ifdef WS2812_RGBW ledp->w = 0; # endif for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) { @@ -1323,7 +1323,7 @@ void rgblight_effect_knight(animation_status_t *anim) { led[i].r = 0; led[i].g = 0; led[i].b = 0; -# ifdef RGBW +# ifdef WS2812_RGBW led[i].w = 0; # endif } @@ -1337,7 +1337,7 @@ void rgblight_effect_knight(animation_status_t *anim) { led[cur].r = 0; led[cur].g = 0; led[cur].b = 0; -# ifdef RGBW +# ifdef WS2812_RGBW led[cur].w = 0; # endif } -- cgit v1.2.3 From a9ba83c7beee3fd86d677eae5823fbb1e8b8bb30 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 16 May 2024 21:52:15 +1000 Subject: Remove useless `LED/RGB_MATRIX_ENABLE` ifdefs (#23726) --- quantum/led_matrix/led_matrix.c | 4 ++-- quantum/rgb_matrix/rgb_matrix.c | 4 ++-- quantum/rgb_matrix/rgb_matrix_drivers.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'quantum/rgb_matrix/rgb_matrix_drivers.c') diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 2ca62c6969..798ab9a120 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -82,7 +82,7 @@ static last_hit_t last_hit_buffer; #endif // LED_MATRIX_KEYREACTIVE_ENABLED // split led matrix -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) +#if defined(LED_MATRIX_SPLIT) const uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; #endif @@ -147,7 +147,7 @@ void led_matrix_set_value(int index, uint8_t value) { } void led_matrix_set_value_all(uint8_t value) { -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) +#if defined(LED_MATRIX_SPLIT) for (uint8_t i = 0; i < LED_MATRIX_LED_COUNT; i++) led_matrix_set_value(i, value); #else diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index aaba00b457..70175f9d50 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -84,7 +84,7 @@ static last_hit_t last_hit_buffer; #endif // RGB_MATRIX_KEYREACTIVE_ENABLED // split rgb matrix -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) +#if defined(RGB_MATRIX_SPLIT) const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; #endif @@ -148,7 +148,7 @@ void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { } void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) +#if defined(RGB_MATRIX_SPLIT) for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) rgb_matrix_set_color(i, red, green, blue); #else diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index db3a2ef9e0..bf5209a9d3 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -164,7 +164,7 @@ static void flush(void) { // 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_ENABLE) && defined(RGB_MATRIX_SPLIT) +# 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]) { -- cgit v1.2.3