From ccc6f991bd6e1c91a9529c10331f2ffa1d8e6202 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Mon, 7 Jun 2021 18:06:27 -0700 Subject: [PATCH 01/21] Gets RGB working on a split keyboard with IS31FL3733. Currently needs small tweak to re-enable WS2812 --- .../animations/runners/effect_runner_dx_dy.h | 7 +++- .../runners/effect_runner_dx_dy_dist.h | 7 +++- .../animations/runners/effect_runner_i.h | 7 +++- .../runners/effect_runner_reactive.h | 8 ++++- .../runners/effect_runner_reactive_splash.h | 7 +++- .../runners/effect_runner_sin_cos_i.h | 7 +++- quantum/rgb_matrix/rgb_matrix.c | 11 +++--- quantum/rgb_matrix/rgb_matrix.h | 35 +++++++++++++++---- 8 files changed, 71 insertions(+), 18 deletions(-) diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h index 4867609c81f9..9da2ae988f06 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h @@ -13,5 +13,10 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h index 9545b418d93b..27f185dddbe8 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h @@ -14,5 +14,10 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func) RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_i.h index 1881cd6c6015..48d3776eb634 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_i.h @@ -11,5 +11,10 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h index 75b7c0df4eae..638941221698 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h @@ -22,8 +22,14 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { uint16_t offset = scale16by8(tick, qadd8(rgb_matrix_config.speed, 1)); RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h index 2e46ffb350e3..b7cfa585c025 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h @@ -23,7 +23,12 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h index 02351de51e2e..6a050ca4e330 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h @@ -13,5 +13,10 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif } diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index 8f00b4087780..966a295c134a 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -188,12 +188,13 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); } void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) - if (!is_keyboard_left() && index >= k_rgb_matrix_split[0]) - rgb_matrix_driver.set_color(index - k_rgb_matrix_split[0], red, green, blue); - else if (is_keyboard_left() && index < k_rgb_matrix_split[0]) -#endif +// #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) && RGB_MATRIX_DRIVER == WS2812 +// if (!is_keyboard_left() && index >= k_rgb_matrix_split[0]) +// rgb_matrix_driver.set_color(index - k_rgb_matrix_split[0], red, green, blue); +// else if (is_keyboard_left() && index < k_rgb_matrix_split[0]) +// #endif rgb_matrix_driver.set_color(index, red, green, blue); + } void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index f53e011c1bd9..5810738afe1a 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -48,14 +48,35 @@ #endif #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL -# define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ - uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ - if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + # define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ + uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ + if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; \ + uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ + k_rgb_matrix_split[1] += 1; \ + k_rgb_matrix_split[1] -= 1; \ + if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0] ; \ + if( !(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; + #else + # define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ + uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ + if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; + #endif #else -# define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = 0; \ - uint8_t max = DRIVER_LED_TOTAL; + #if defined(RGB_MATRIX_SPLIT) + # define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; \ + const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ + if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ + if( !(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; + #else + # define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; + #endif #endif #define RGB_MATRIX_INDICATOR_SET_COLOR(i, r, g, b) \ From 8cfdc33166652259704fe65c459746cf67086eb9 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 12:21:50 -0700 Subject: [PATCH 02/21] Added helper function --- quantum/led_matrix/led_matrix.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index a7a1c983f78f..70a78465d6ef 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -135,6 +135,15 @@ void led_matrix_decrease_speed_noeeprom(void); led_flags_t led_matrix_get_flags(void); void led_matrix_set_flags(led_flags_t flags); +inline bool led_matrix_finished_all_leds(uint8_t last_led_idx) { + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; + else return led_max < DRIVER_LED_TOTAL; + #else + return led_max < DRIVER_LED_TOTAL; + #endif +} + typedef struct { /* Perform any initialisation required for the other driver functions to work. */ void (*init)(void); From d2f192cc47ab9cd4ef36d5efe4004be527c7f198 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 13:25:04 -0700 Subject: [PATCH 03/21] Trying to integrate the function --- quantum/led_matrix/led_matrix.h | 8 -------- .../rgb_matrix/animations/runners/effect_runner_dx_dy.h | 7 +------ quantum/rgb_matrix/rgb_matrix.h | 9 +++++++++ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index 70a78465d6ef..fda3f2bc308f 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -135,14 +135,6 @@ void led_matrix_decrease_speed_noeeprom(void); led_flags_t led_matrix_get_flags(void); void led_matrix_set_flags(led_flags_t flags); -inline bool led_matrix_finished_all_leds(uint8_t last_led_idx) { - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif -} typedef struct { /* Perform any initialisation required for the other driver functions to work. */ diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h index 9da2ae988f06..412707679f7c 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h @@ -13,10 +13,5 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + return rgb_matrix_finished_all_leds(led_max); } diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 5810738afe1a..a16ce5e93dbc 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -235,6 +235,15 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; +inline bool rgb_matrix_finished_all_leds(uint8_t last_led_idx) { + #if defined(RGB_MATRIX_SPLIT) + if (is_keyboard_left()) return last_led_idx < k_rgb_matrix_split[0]; + else return last_led_idx < DRIVER_LED_TOTAL; + #else + return last_led_idx < DRIVER_LED_TOTAL; + #endif +} + extern const rgb_matrix_driver_t rgb_matrix_driver; extern rgb_config_t rgb_matrix_config; From f81a5c4fb47d4b578759c5d38a854a121fff6646 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 13:37:16 -0700 Subject: [PATCH 04/21] Moved functionality into a macro --- .../animations/runners/effect_runner_dx_dy.h | 2 +- quantum/rgb_matrix/rgb_matrix.h | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h index 412707679f7c..8d938c26f041 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h @@ -13,5 +13,5 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return rgb_matrix_finished_all_leds(led_max); + RGB_MATRIX_FINISHED_ALL_LEDS } diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index a16ce5e93dbc..bd7bb2f9bca7 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -235,14 +235,16 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; -inline bool rgb_matrix_finished_all_leds(uint8_t last_led_idx) { - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return last_led_idx < k_rgb_matrix_split[0]; - else return last_led_idx < DRIVER_LED_TOTAL; - #else - return last_led_idx < DRIVER_LED_TOTAL; - #endif -} + +#if defined(RGB_MATRIX_SPLIT) +#define RGB_MATRIX_FINISHED_ALL_LEDS \ + if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; \ + else return led_max < DRIVER_LED_TOTAL; +#else +#define RGB_MATRIX_FINISHED_ALL_LEDS \ + return led_max < DRIVER_LED_TOTAL; + +#endif extern const rgb_matrix_driver_t rgb_matrix_driver; From 545d238fff618c7dc17aac46a14975f63c8faae6 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 13:49:35 -0700 Subject: [PATCH 05/21] Swapped conditional for a macro everywhere --- quantum/rgb_matrix/animations/alpha_mods_anim.h | 2 +- quantum/rgb_matrix/animations/breathing_anim.h | 2 +- quantum/rgb_matrix/animations/gradient_left_right_anim.h | 2 +- quantum/rgb_matrix/animations/gradient_up_down_anim.h | 2 +- quantum/rgb_matrix/animations/hue_breathing_anim.h | 2 +- quantum/rgb_matrix/animations/jellybean_raindrops_anim.h | 2 +- quantum/rgb_matrix/animations/raindrops_anim.h | 2 +- .../animations/runners/effect_runner_dx_dy_dist.h | 7 +------ quantum/rgb_matrix/animations/runners/effect_runner_i.h | 7 +------ .../rgb_matrix/animations/runners/effect_runner_reactive.h | 7 +------ .../animations/runners/effect_runner_reactive_splash.h | 7 +------ .../animations/runners/effect_runner_sin_cos_i.h | 7 +------ quantum/rgb_matrix/animations/solid_color_anim.h | 2 +- 13 files changed, 13 insertions(+), 38 deletions(-) diff --git a/quantum/rgb_matrix/animations/alpha_mods_anim.h b/quantum/rgb_matrix/animations/alpha_mods_anim.h index 3f2c9b799a8b..e308b1b42787 100644 --- a/quantum/rgb_matrix/animations/alpha_mods_anim.h +++ b/quantum/rgb_matrix/animations/alpha_mods_anim.h @@ -19,7 +19,7 @@ bool ALPHAS_MODS(effect_params_t* params) { rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b); } } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/breathing_anim.h b/quantum/rgb_matrix/animations/breathing_anim.h index a00ccb83a25a..d3a8bb648626 100644 --- a/quantum/rgb_matrix/animations/breathing_anim.h +++ b/quantum/rgb_matrix/animations/breathing_anim.h @@ -13,7 +13,7 @@ bool BREATHING(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/gradient_left_right_anim.h b/quantum/rgb_matrix/animations/gradient_left_right_anim.h index b4f2752ff76d..4f0462efdc1b 100644 --- a/quantum/rgb_matrix/animations/gradient_left_right_anim.h +++ b/quantum/rgb_matrix/animations/gradient_left_right_anim.h @@ -15,7 +15,7 @@ bool GRADIENT_LEFT_RIGHT(effect_params_t* params) { RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/gradient_up_down_anim.h b/quantum/rgb_matrix/animations/gradient_up_down_anim.h index 3fd45cf99bc2..814bf11c76f7 100644 --- a/quantum/rgb_matrix/animations/gradient_up_down_anim.h +++ b/quantum/rgb_matrix/animations/gradient_up_down_anim.h @@ -15,7 +15,7 @@ bool GRADIENT_UP_DOWN(effect_params_t* params) { RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/hue_breathing_anim.h b/quantum/rgb_matrix/animations/hue_breathing_anim.h index 6d974b8c3966..3cfd6de427e1 100644 --- a/quantum/rgb_matrix/animations/hue_breathing_anim.h +++ b/quantum/rgb_matrix/animations/hue_breathing_anim.h @@ -15,7 +15,7 @@ bool HUE_BREATHING(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h index 7d8eafffb992..6c3bed712fcf 100644 --- a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h +++ b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h @@ -22,7 +22,7 @@ bool JELLYBEAN_RAINDROPS(effect_params_t* params) { for (int i = led_min; i < led_max; i++) { jellybean_raindrops_set_color(i, params); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h index c01688e2c7f2..b93e3cc0a830 100644 --- a/quantum/rgb_matrix/animations/raindrops_anim.h +++ b/quantum/rgb_matrix/animations/raindrops_anim.h @@ -32,7 +32,7 @@ bool RAINDROPS(effect_params_t* params) { for (int i = led_min; i < led_max; i++) { raindrops_set_color(i, params); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h index 27f185dddbe8..a92bc5cdbd35 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h @@ -14,10 +14,5 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func) RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + RGB_MATRIX_FINISHED_ALL_LEDS } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_i.h index 48d3776eb634..91c9fb729211 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_i.h @@ -11,10 +11,5 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + RGB_MATRIX_FINISHED_ALL_LEDS } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h index 638941221698..c7c0224b0925 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h @@ -24,12 +24,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + RGB_MATRIX_FINISHED_ALL_LEDS } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h index b7cfa585c025..c90717ba9f4c 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h @@ -23,12 +23,7 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + RGB_MATRIX_FINISHED_ALL_LEDS } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h index 6a050ca4e330..c426891ad9fa 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h @@ -13,10 +13,5 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; - else return led_max < DRIVER_LED_TOTAL; - #else - return led_max < DRIVER_LED_TOTAL; - #endif + RGB_MATRIX_FINISHED_ALL_LEDS } diff --git a/quantum/rgb_matrix/animations/solid_color_anim.h b/quantum/rgb_matrix/animations/solid_color_anim.h index 79d63cf133b8..99a5efca5218 100644 --- a/quantum/rgb_matrix/animations/solid_color_anim.h +++ b/quantum/rgb_matrix/animations/solid_color_anim.h @@ -9,7 +9,7 @@ bool SOLID_COLOR(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } #endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS From 534b31a98e3704041f0df5ad24f521a5c4841840 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 13:58:58 -0700 Subject: [PATCH 06/21] Tidying up --- quantum/led_matrix/led_matrix.h | 1 - 1 file changed, 1 deletion(-) diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index fda3f2bc308f..a7a1c983f78f 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -135,7 +135,6 @@ void led_matrix_decrease_speed_noeeprom(void); led_flags_t led_matrix_get_flags(void); void led_matrix_set_flags(led_flags_t flags); - typedef struct { /* Perform any initialisation required for the other driver functions to work. */ void (*init)(void); From 84ff177676f29f9e5fc3590128417be8fe0cd83a Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 14:09:57 -0700 Subject: [PATCH 07/21] More code cleanup --- quantum/rgb_matrix/rgb_matrix.c | 8 +------- quantum/rgb_matrix/rgb_matrix.h | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index 966a295c134a..b2a2cb9b00aa 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -188,13 +188,7 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); } void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { -// #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) && RGB_MATRIX_DRIVER == WS2812 -// if (!is_keyboard_left() && index >= k_rgb_matrix_split[0]) -// rgb_matrix_driver.set_color(index - k_rgb_matrix_split[0], red, green, blue); -// else if (is_keyboard_left() && index < k_rgb_matrix_split[0]) -// #endif - rgb_matrix_driver.set_color(index, red, green, blue); - + rgb_matrix_driver.set_color(index, red, green, blue); } void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index bd7bb2f9bca7..2c28d2880e08 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -54,8 +54,6 @@ uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; \ uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ - k_rgb_matrix_split[1] += 1; \ - k_rgb_matrix_split[1] -= 1; \ if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0] ; \ if( !(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; #else From ca99f7447b4b22e34c592802f754933f6ffbc0bb Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 14:13:06 -0700 Subject: [PATCH 08/21] Documentation updates --- docs/feature_rgb_matrix.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 2660aad09b03..d034e56f84ef 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -537,7 +537,7 @@ static bool my_cool_effect(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { rgb_matrix_set_color(i, 0xff, 0xff, 0x00); } - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } // e.g: A more complex effect, relying on external methods and state, with @@ -551,8 +551,7 @@ static bool my_cool_effect2_complex_run(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { rgb_matrix_set_color(i, 0xff, some_global_state++, 0xff); } - - return led_max < DRIVER_LED_TOTAL; + RGB_MATRIX_FINISHED_ALL_LEDS } static bool my_cool_effect2(effect_params_t* params) { if (params->init) my_cool_effect2_complex_init(params); From 1174ee472710d7866918c6762f4e8385362b3ee6 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 1 Aug 2021 16:39:06 -0700 Subject: [PATCH 09/21] Fixed formatting via linter --- quantum/rgb_matrix/rgb_matrix.h | 64 ++++++++++++++++----------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 2c28d2880e08..548eb6cb3225 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -48,33 +48,33 @@ #endif #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL - #if defined(RGB_MATRIX_SPLIT) - # define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ - uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ - if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; \ - uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ - if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0] ; \ - if( !(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; - #else - # define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ - uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ - if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; - #endif +# if defined(RGB_MATRIX_SPLIT) +# define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ + uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ + if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; \ + uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ + if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ + if (!(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; +# else +# define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ + uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ + if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; +# endif #else - #if defined(RGB_MATRIX_SPLIT) - # define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = 0; \ - uint8_t max = DRIVER_LED_TOTAL; \ - const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ - if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ - if( !(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; - #else - # define RGB_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = 0; \ - uint8_t max = DRIVER_LED_TOTAL; - #endif +# if defined(RGB_MATRIX_SPLIT) +# define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; \ + const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ + if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ + if (!(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; +# else +# define RGB_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; +# endif #endif #define RGB_MATRIX_INDICATOR_SET_COLOR(i, r, g, b) \ @@ -233,14 +233,14 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; - #if defined(RGB_MATRIX_SPLIT) -#define RGB_MATRIX_FINISHED_ALL_LEDS \ - if (is_keyboard_left()) return led_max < k_rgb_matrix_split[0]; \ - else return led_max < DRIVER_LED_TOTAL; +# define RGB_MATRIX_FINISHED_ALL_LEDS \ + if (is_keyboard_left()) \ + return led_max < k_rgb_matrix_split[0]; \ + else \ + return led_max < DRIVER_LED_TOTAL; #else -#define RGB_MATRIX_FINISHED_ALL_LEDS \ - return led_max < DRIVER_LED_TOTAL; +# define RGB_MATRIX_FINISHED_ALL_LEDS return led_max < DRIVER_LED_TOTAL; #endif From e9a2b82570c3928ae17fdfdac78e338091bce43b Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Mon, 2 Aug 2021 17:13:01 -0700 Subject: [PATCH 10/21] Switching to a function from a macro --- docs/feature_rgb_matrix.md | 4 ++-- quantum/rgb_matrix/animations/alpha_mods_anim.h | 2 +- quantum/rgb_matrix/animations/breathing_anim.h | 2 +- .../animations/gradient_left_right_anim.h | 2 +- .../animations/gradient_up_down_anim.h | 2 +- .../rgb_matrix/animations/hue_breathing_anim.h | 2 +- .../animations/jellybean_raindrops_anim.h | 2 +- quantum/rgb_matrix/animations/raindrops_anim.h | 2 +- .../animations/runners/effect_runner_dx_dy.h | 2 +- .../runners/effect_runner_dx_dy_dist.h | 2 +- .../animations/runners/effect_runner_i.h | 2 +- .../animations/runners/effect_runner_reactive.h | 2 +- .../runners/effect_runner_reactive_splash.h | 2 +- .../runners/effect_runner_sin_cos_i.h | 2 +- .../rgb_matrix/animations/solid_color_anim.h | 2 +- quantum/rgb_matrix/rgb_matrix.h | 17 ++++++++++------- 16 files changed, 26 insertions(+), 23 deletions(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index d034e56f84ef..8a1989a1552d 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -537,7 +537,7 @@ static bool my_cool_effect(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { rgb_matrix_set_color(i, 0xff, 0xff, 0x00); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } // e.g: A more complex effect, relying on external methods and state, with @@ -551,7 +551,7 @@ static bool my_cool_effect2_complex_run(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { rgb_matrix_set_color(i, 0xff, some_global_state++, 0xff); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } static bool my_cool_effect2(effect_params_t* params) { if (params->init) my_cool_effect2_complex_init(params); diff --git a/quantum/rgb_matrix/animations/alpha_mods_anim.h b/quantum/rgb_matrix/animations/alpha_mods_anim.h index e308b1b42787..b8f5072681b4 100644 --- a/quantum/rgb_matrix/animations/alpha_mods_anim.h +++ b/quantum/rgb_matrix/animations/alpha_mods_anim.h @@ -19,7 +19,7 @@ bool ALPHAS_MODS(effect_params_t* params) { rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b); } } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/breathing_anim.h b/quantum/rgb_matrix/animations/breathing_anim.h index d3a8bb648626..baac51ed1508 100644 --- a/quantum/rgb_matrix/animations/breathing_anim.h +++ b/quantum/rgb_matrix/animations/breathing_anim.h @@ -13,7 +13,7 @@ bool BREATHING(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/gradient_left_right_anim.h b/quantum/rgb_matrix/animations/gradient_left_right_anim.h index 4f0462efdc1b..8b13d4e4887a 100644 --- a/quantum/rgb_matrix/animations/gradient_left_right_anim.h +++ b/quantum/rgb_matrix/animations/gradient_left_right_anim.h @@ -15,7 +15,7 @@ bool GRADIENT_LEFT_RIGHT(effect_params_t* params) { RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/gradient_up_down_anim.h b/quantum/rgb_matrix/animations/gradient_up_down_anim.h index 814bf11c76f7..7431ddcd9998 100644 --- a/quantum/rgb_matrix/animations/gradient_up_down_anim.h +++ b/quantum/rgb_matrix/animations/gradient_up_down_anim.h @@ -15,7 +15,7 @@ bool GRADIENT_UP_DOWN(effect_params_t* params) { RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/hue_breathing_anim.h b/quantum/rgb_matrix/animations/hue_breathing_anim.h index 3cfd6de427e1..82be1a44241f 100644 --- a/quantum/rgb_matrix/animations/hue_breathing_anim.h +++ b/quantum/rgb_matrix/animations/hue_breathing_anim.h @@ -15,7 +15,7 @@ bool HUE_BREATHING(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h index 6c3bed712fcf..d639ba9b6cdf 100644 --- a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h +++ b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h @@ -22,7 +22,7 @@ bool JELLYBEAN_RAINDROPS(effect_params_t* params) { for (int i = led_min; i < led_max; i++) { jellybean_raindrops_set_color(i, params); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h index b93e3cc0a830..fa61f9e0b985 100644 --- a/quantum/rgb_matrix/animations/raindrops_anim.h +++ b/quantum/rgb_matrix/animations/raindrops_anim.h @@ -32,7 +32,7 @@ bool RAINDROPS(effect_params_t* params) { for (int i = led_min; i < led_max; i++) { raindrops_set_color(i, params); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h index 8d938c26f041..2ad0f22c287d 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h @@ -13,5 +13,5 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h index a92bc5cdbd35..bcae7c79b6b8 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h @@ -14,5 +14,5 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func) RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_i.h index 91c9fb729211..b4de2992b64a 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_i.h @@ -11,5 +11,5 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h index c7c0224b0925..7f3b3551ff3d 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h @@ -24,7 +24,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h index c90717ba9f4c..d3a6e4e72f0f 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h @@ -23,7 +23,7 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react RGB rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h index c426891ad9fa..7776491d5125 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h @@ -13,5 +13,5 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) { RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } diff --git a/quantum/rgb_matrix/animations/solid_color_anim.h b/quantum/rgb_matrix/animations/solid_color_anim.h index 99a5efca5218..4209959468af 100644 --- a/quantum/rgb_matrix/animations/solid_color_anim.h +++ b/quantum/rgb_matrix/animations/solid_color_anim.h @@ -9,7 +9,7 @@ bool SOLID_COLOR(effect_params_t* params) { RGB_MATRIX_TEST_LED_FLAGS(); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - RGB_MATRIX_FINISHED_ALL_LEDS + return rgb_matrix_check_finished_leds(led_max); } #endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 548eb6cb3225..21787cdba521 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -233,16 +233,19 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; + +inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #if defined(RGB_MATRIX_SPLIT) -# define RGB_MATRIX_FINISHED_ALL_LEDS \ - if (is_keyboard_left()) \ - return led_max < k_rgb_matrix_split[0]; \ - else \ - return led_max < DRIVER_LED_TOTAL; + if (is_keyboard_left()) + uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; + return led_idx < k_rgb_matrix_split[0]; + else + return led_idx < DRIVER_LED_TOTAL; #else -# define RGB_MATRIX_FINISHED_ALL_LEDS return led_max < DRIVER_LED_TOTAL; - + return led_idx < DRIVER_LED_TOTAL; #endif +} + extern const rgb_matrix_driver_t rgb_matrix_driver; From e9ccc0c05b6c5b740daa779fdac3f3a3b5316539 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Mon, 2 Aug 2021 17:42:23 -0700 Subject: [PATCH 11/21] Fixed compile error --- quantum/rgb_matrix/rgb_matrix.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 21787cdba521..c5d286826a44 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -236,9 +236,10 @@ typedef struct { inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()) + if (is_keyboard_left()){ uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; return led_idx < k_rgb_matrix_split[0]; + } else return led_idx < DRIVER_LED_TOTAL; #else From c709b6232a201f5df87cb811785b4ccc70ef8837 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Mon, 2 Aug 2021 18:11:12 -0700 Subject: [PATCH 12/21] Fixing WS2812 behavior. UNTESTED. --- quantum/rgb_matrix/rgb_matrix_drivers.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 2cec162e22cd..3f44479835b2 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -229,6 +229,14 @@ 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 (!is_keyboard_left() && index >= k_rgb_matrix_split[0]){ + i -= k_rgb_matrix_split[0]; + } + else if (is_keyboard_left() && index >= k_rgb_matrix_split[0]) + return + #endif + rgb_matrix_ws2812_array[i].r = r; rgb_matrix_ws2812_array[i].g = g; rgb_matrix_ws2812_array[i].b = b; From eff63d3895d8d661fc994a08592424eb5f3c1bdf Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Tue, 3 Aug 2021 17:33:47 -0700 Subject: [PATCH 13/21] Updated documentation about the driver addresses. --- docs/feature_rgb_matrix.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 8a1989a1552d..0a9908f23845 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -49,6 +49,8 @@ Here is an example using 2 drivers. !> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`. +For split keyboards using RGB_MATRIX_SPLIT with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_2_LED_TOTAL` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. + Define these arrays listing all the LEDs in your `.c`: ```c From 2b2bdc104f643e347e811586df44a59ad7bc77c3 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Wed, 4 Aug 2021 19:06:08 -0700 Subject: [PATCH 14/21] Fixed code for WS2812 --- quantum/rgb_matrix/rgb_matrix_drivers.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 3f44479835b2..abea043d0858 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -230,11 +230,12 @@ 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 (!is_keyboard_left() && index >= k_rgb_matrix_split[0]){ + const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; + if (!is_keyboard_left() && (i >= k_rgb_matrix_split[0])){ i -= k_rgb_matrix_split[0]; } - else if (is_keyboard_left() && index >= k_rgb_matrix_split[0]) - return + else if (is_keyboard_left() && (i >= k_rgb_matrix_split[0])) + return; #endif rgb_matrix_ws2812_array[i].r = r; From 9d707001daf2bd8f12efa9dce20deb73cc516164 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 10:50:24 -0700 Subject: [PATCH 15/21] Trying to add in LED_MATRIX support --- quantum/led_matrix/led_matrix.c | 14 ++-------- quantum/led_matrix/led_matrix.h | 45 ++++++++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 50510e49aab9..b580753b74dd 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -165,20 +165,10 @@ uint8_t led_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void led_matrix_update_pwm_buffers(void) { led_matrix_driver.flush(); } void led_matrix_set_value(int index, uint8_t value) { -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) - if (!is_keyboard_left() && index >= k_led_matrix_split[0]) -# ifdef USE_CIE1931_CURVE - led_matrix_driver.set_value(index - k_led_matrix_split[0], pgm_read_byte(&CIE1931_CURVE[value])); -# else - led_matrix_driver.set_value(index - k_led_matrix_split[0], value); -# endif - else if (is_keyboard_left() && index < k_led_matrix_split[0]) -#endif #ifdef USE_CIE1931_CURVE - led_matrix_driver.set_value(index, pgm_read_byte(&CIE1931_CURVE[value])); -#else - led_matrix_driver.set_value(index, value); + value = pgm_read_byte(&CIE1931_CURVE[value]); #endif + led_matrix_driver.set_value(index, value); } void led_matrix_set_value_all(uint8_t value) { diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index a7a1c983f78f..dddbb41bc4c8 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -38,14 +38,33 @@ #endif #if defined(LED_MATRIX_LED_PROCESS_LIMIT) && LED_MATRIX_LED_PROCESS_LIMIT > 0 && LED_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL -# define LED_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; \ - uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; \ - if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; +# if defined(LED_MATRIX_SPLIT) +# define LED_MATRIX_USE_LIMITS(min, max) +uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; +uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; +if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; +uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; +if (is_keyboard_left() && (max > k_led_matrix_split[0])) max = k_led_matrix_split[0]; +if (!(is_keyboard_left()) && (min < k_led_matrix_split[0])) min = k_led_matrix_split[0]; +# else +# define LED_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; \ + uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; \ + if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; +# endif #else -# define LED_MATRIX_USE_LIMITS(min, max) \ - uint8_t min = 0; \ - uint8_t max = DRIVER_LED_TOTAL; +# if defined(LED_MATRIX_SPLIT) +# define LED_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; \ + const uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; \ + if (is_keyboard_left() && (max > k_led_matrix_split[0])) max = k_led_matrix_split[0]; \ + if (!(is_keyboard_left()) && (min < k_led_matrix_split[0])) min = k_led_matrix_split[0]; +# else +# define LED_MATRIX_USE_LIMITS(min, max) \ + uint8_t min = 0; \ + uint8_t max = DRIVER_LED_TOTAL; +# endif #endif #define LED_MATRIX_TEST_LED_FLAGS() \ @@ -147,6 +166,18 @@ typedef struct { void (*flush)(void); } led_matrix_driver_t; +inline bool led_matrix_check_finished_leds(uint8_t led_idx) { +#if defined(LED_MATRIX_SPLIT) + if (is_keyboard_left()) { + uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; + return led_idx < k_led_matrix_split[0]; + } else + return led_idx < DRIVER_LED_TOTAL; +#else + return led_idx < DRIVER_LED_TOTAL; +#endif +} + extern const led_matrix_driver_t led_matrix_driver; extern led_eeconfig_t led_matrix_eeconfig; From 436175c200fffb74e5d7148aef5f8b9c27891a1d Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 11:03:00 -0700 Subject: [PATCH 16/21] Updated effects for LED matrix --- docs/feature_led_matrix.md | 6 ++++-- quantum/led_matrix/animations/alpha_mods_anim.h | 2 +- quantum/led_matrix/animations/breathing_anim.h | 2 +- quantum/led_matrix/animations/runners/effect_runner_dx_dy.h | 2 +- .../animations/runners/effect_runner_dx_dy_dist.h | 2 +- quantum/led_matrix/animations/runners/effect_runner_i.h | 2 +- .../led_matrix/animations/runners/effect_runner_reactive.h | 2 +- .../animations/runners/effect_runner_reactive_splash.h | 2 +- .../led_matrix/animations/runners/effect_runner_sin_cos_i.h | 2 +- quantum/led_matrix/animations/solid_anim.h | 2 +- 10 files changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index ed92bffd9963..8b325ab158de 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -49,6 +49,8 @@ Here is an example using 2 drivers. !> Note the parentheses, this is so when `LED_DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)` will give very different results than `rand() % LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL`. +For split keyboards using LED_MATRIX_SPLIT with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_2_LED_TOTAL` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. + Define these arrays listing all the LEDs in your `.c`: ```c @@ -219,7 +221,7 @@ static bool my_cool_effect(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { led_matrix_set_value(i, 0xFF); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } // e.g: A more complex effect, relying on external methods and state, with @@ -234,7 +236,7 @@ static bool my_cool_effect2_complex_run(effect_params_t* params) { led_matrix_set_value(i, some_global_state++); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } static bool my_cool_effect2(effect_params_t* params) { if (params->init) my_cool_effect2_complex_init(params); diff --git a/quantum/led_matrix/animations/alpha_mods_anim.h b/quantum/led_matrix/animations/alpha_mods_anim.h index 14038cd08221..c82b2aa38804 100644 --- a/quantum/led_matrix/animations/alpha_mods_anim.h +++ b/quantum/led_matrix/animations/alpha_mods_anim.h @@ -17,7 +17,7 @@ bool ALPHAS_MODS(effect_params_t* params) { led_matrix_set_value(i, val1); } } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } # endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/led_matrix/animations/breathing_anim.h b/quantum/led_matrix/animations/breathing_anim.h index e3f600c45c76..d9cc2de23b93 100644 --- a/quantum/led_matrix/animations/breathing_anim.h +++ b/quantum/led_matrix/animations/breathing_anim.h @@ -12,7 +12,7 @@ bool BREATHING(effect_params_t* params) { LED_MATRIX_TEST_LED_FLAGS(); led_matrix_set_value(i, val); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } # endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/quantum/led_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/led_matrix/animations/runners/effect_runner_dx_dy.h index ef97631b9089..fa9b7dbbfa55 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_dx_dy.h +++ b/quantum/led_matrix/animations/runners/effect_runner_dx_dy.h @@ -12,5 +12,5 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) { int16_t dy = g_led_config.point[i].y - k_led_matrix_center.y; led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, time)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } diff --git a/quantum/led_matrix/animations/runners/effect_runner_dx_dy_dist.h b/quantum/led_matrix/animations/runners/effect_runner_dx_dy_dist.h index 5ef5938be05d..061a5f07febd 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_dx_dy_dist.h +++ b/quantum/led_matrix/animations/runners/effect_runner_dx_dy_dist.h @@ -13,5 +13,5 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func) uint8_t dist = sqrt16(dx * dx + dy * dy); led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, dist, time)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } diff --git a/quantum/led_matrix/animations/runners/effect_runner_i.h b/quantum/led_matrix/animations/runners/effect_runner_i.h index b3015759be54..f6f8c0dee0c7 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_i.h +++ b/quantum/led_matrix/animations/runners/effect_runner_i.h @@ -10,5 +10,5 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) { LED_MATRIX_TEST_LED_FLAGS(); led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, i, time)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } diff --git a/quantum/led_matrix/animations/runners/effect_runner_reactive.h b/quantum/led_matrix/animations/runners/effect_runner_reactive.h index 4369ea8c498a..be3090aa5320 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/led_matrix/animations/runners/effect_runner_reactive.h @@ -22,7 +22,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { uint16_t offset = scale16by8(tick, led_matrix_eeconfig.speed); led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, offset)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } #endif // LED_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h index d6eb9731ee3a..f6ffc825a1ee 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h +++ b/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h @@ -20,7 +20,7 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react } led_matrix_set_value(i, scale8(val, led_matrix_eeconfig.val)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } #endif // LED_MATRIX_KEYREACTIVE_ENABLED diff --git a/quantum/led_matrix/animations/runners/effect_runner_sin_cos_i.h b/quantum/led_matrix/animations/runners/effect_runner_sin_cos_i.h index 4a5219abd120..3145e27139de 100644 --- a/quantum/led_matrix/animations/runners/effect_runner_sin_cos_i.h +++ b/quantum/led_matrix/animations/runners/effect_runner_sin_cos_i.h @@ -12,5 +12,5 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) { LED_MATRIX_TEST_LED_FLAGS(); led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, cos_value, sin_value, i, time)); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } diff --git a/quantum/led_matrix/animations/solid_anim.h b/quantum/led_matrix/animations/solid_anim.h index 4c9e43c581a3..c728dbcc98d9 100644 --- a/quantum/led_matrix/animations/solid_anim.h +++ b/quantum/led_matrix/animations/solid_anim.h @@ -9,7 +9,7 @@ bool SOLID(effect_params_t* params) { LED_MATRIX_TEST_LED_FLAGS(); led_matrix_set_value(i, val); } - return led_max < DRIVER_LED_TOTAL; + return led_matrix_check_finished_leds(led_max); } #endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS From 3e8086b9ce41aca2a4160a6c80fd7a82ef29e322 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 11:13:52 -0700 Subject: [PATCH 17/21] Updated third-party effect defines. --- keyboards/bandominedoni/rgb_matrix_user.inc | 6 +++--- keyboards/percent/canoe_gen2/rgb_matrix_kb.inc | 10 +++++----- keyboards/yushakobo/quick17/rgb_matrix_kb.inc | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/bandominedoni/rgb_matrix_user.inc b/keyboards/bandominedoni/rgb_matrix_user.inc index 72f5b4f66486..77ad22c1ce73 100644 --- a/keyboards/bandominedoni/rgb_matrix_user.inc +++ b/keyboards/bandominedoni/rgb_matrix_user.inc @@ -9,8 +9,8 @@ bool my_party_rocks(effect_params_t* params) { RGB rgb = rgb_matrix_hsv_to_rgb(hsv); // rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b); - return led_max < DRIVER_LED_TOTAL; + return rgb_matrix_check_finished_leds(led_max); } -# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS -#endif // RGB_MATRIX_KEYREACTIVE_ENABLED +# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS +#endif // RGB_MATRIX_KEYREACTIVE_ENABLED diff --git a/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc b/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc index df0a0b15c20b..94ff62b3a8cf 100644 --- a/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc +++ b/keyboards/percent/canoe_gen2/rgb_matrix_kb.inc @@ -25,13 +25,13 @@ static bool indicator_static(effect_params_t* params) { HSV hsv = rgb_matrix_config.hsv; RGB rgb = hsv_to_rgb(hsv); RGB_MATRIX_USE_LIMITS(led_min, led_max); - for (uint8_t i = led_min ; i < 74; i++) { + for (uint8_t i = led_min; i < 74; i++) { rgb_matrix_set_color(i, 0x00, 0x00, 0x00); } - for (uint8_t i = 74 ; i < led_max; i++) { + for (uint8_t i = 74; i < led_max; i++) { rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } - return led_max < DRIVER_LED_TOTAL; + return rgb_matrix_check_finished_leds(led_max); } bool effect_runner_indicator(effect_params_t* params, i_f effect_func) { @@ -47,7 +47,7 @@ bool effect_runner_indicator(effect_params_t* params, i_f effect_func) { rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } } - return led_max < DRIVER_LED_TOTAL; + return rgb_matrix_check_finished_leds(led_max); } static HSV indicator_gradient_math(HSV hsv, uint8_t i, uint8_t time) { @@ -64,4 +64,4 @@ static HSV indicator_cycle_all_math(HSV hsv, uint8_t i, uint8_t time) { bool indicator_cycle_all(effect_params_t* params) { return effect_runner_indicator(params, &indicator_cycle_all_math); } -#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS +#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/keyboards/yushakobo/quick17/rgb_matrix_kb.inc b/keyboards/yushakobo/quick17/rgb_matrix_kb.inc index 87738389b7dc..0232b05ab944 100644 --- a/keyboards/yushakobo/quick17/rgb_matrix_kb.inc +++ b/keyboards/yushakobo/quick17/rgb_matrix_kb.inc @@ -111,7 +111,7 @@ static bool quick17_rgbm_effect (effect_params_t* params) { led_color_set(i, rgb_keymaps[_CONTROL][i]); } } - return led_max < DRIVER_LED_TOTAL; + return rgb_matrix_check_finished_leds(led_max); } #endif From 4162c31da5c7b59dcb13a383fb116ffcfa13e4c6 Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 11:20:28 -0700 Subject: [PATCH 18/21] Ran format-c on modified files --- .../animations/runners/effect_runner_reactive.h | 1 - quantum/rgb_matrix/rgb_matrix.c | 4 +--- quantum/rgb_matrix/rgb_matrix.h | 9 +++------ quantum/rgb_matrix/rgb_matrix_drivers.c | 15 +++++++-------- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h index 7f3b3551ff3d..d5c1a26cefe7 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h @@ -22,7 +22,6 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { uint16_t offset = scale16by8(tick, qadd8(rgb_matrix_config.speed, 1)); RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset)); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } return rgb_matrix_check_finished_leds(led_max); } diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index b2a2cb9b00aa..d266e3ae35a6 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -187,9 +187,7 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); } -void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { - rgb_matrix_driver.set_color(index, red, green, blue); -} +void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { rgb_matrix_driver.set_color(index, red, green, 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) diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index c5d286826a44..1828ae9fcb97 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -233,21 +233,18 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; - inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #if defined(RGB_MATRIX_SPLIT) - if (is_keyboard_left()){ - uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; + if (is_keyboard_left()) { + uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; return led_idx < k_rgb_matrix_split[0]; - } - else + } else return led_idx < DRIVER_LED_TOTAL; #else return led_idx < DRIVER_LED_TOTAL; #endif } - extern const rgb_matrix_driver_t rgb_matrix_driver; extern rgb_config_t rgb_matrix_config; diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index abea043d0858..c70d0242d7be 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -229,14 +229,13 @@ 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) - const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; - if (!is_keyboard_left() && (i >= k_rgb_matrix_split[0])){ - i -= k_rgb_matrix_split[0]; - } - else if (is_keyboard_left() && (i >= k_rgb_matrix_split[0])) - return; - #endif +# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) + const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; + if (!is_keyboard_left() && (i >= k_rgb_matrix_split[0])) { + i -= k_rgb_matrix_split[0]; + } else if (is_keyboard_left() && (i >= k_rgb_matrix_split[0])) + return; +# endif rgb_matrix_ws2812_array[i].r = r; rgb_matrix_ws2812_array[i].g = g; From ea16bc022ec1d4de3edcef4811479d71a05119ac Mon Sep 17 00:00:00 2001 From: Vlad K Date: Sun, 26 Sep 2021 11:32:13 -0700 Subject: [PATCH 19/21] Apply suggestions from code review Co-authored-by: Ryan --- docs/feature_led_matrix.md | 3 +-- docs/feature_rgb_matrix.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index 8b325ab158de..d4b20b9aa26f 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -49,7 +49,7 @@ Here is an example using 2 drivers. !> Note the parentheses, this is so when `LED_DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)` will give very different results than `rand() % LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL`. -For split keyboards using LED_MATRIX_SPLIT with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_2_LED_TOTAL` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. +For split keyboards using `LED_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_ADDR_2` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. Define these arrays listing all the LEDs in your `.c`: @@ -235,7 +235,6 @@ static bool my_cool_effect2_complex_run(effect_params_t* params) { for (uint8_t i = led_min; i < led_max; i++) { led_matrix_set_value(i, some_global_state++); } - return led_matrix_check_finished_leds(led_max); } static bool my_cool_effect2(effect_params_t* params) { diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 0a9908f23845..71fbb20bad16 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -49,7 +49,7 @@ Here is an example using 2 drivers. !> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`. -For split keyboards using RGB_MATRIX_SPLIT with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_2_LED_TOTAL` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. +For split keyboards using `RGB_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_ADDR_2` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`. Define these arrays listing all the LEDs in your `.c`: From 4937eebbabd1f32add56ca8c54304526c7de1f7a Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 15:44:53 -0700 Subject: [PATCH 20/21] Move to static inline. Avoids issues with gcc v8+ --- quantum/rgb_matrix/rgb_matrix.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 1828ae9fcb97..112dfaaae56a 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -233,7 +233,7 @@ typedef struct { void (*flush)(void); } rgb_matrix_driver_t; -inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { +static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #if defined(RGB_MATRIX_SPLIT) if (is_keyboard_left()) { uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; From f534ff0ace2e73869c18b3a8e679f91ba38b6a4c Mon Sep 17 00:00:00 2001 From: Vlad Kvitnevskiy Date: Sun, 26 Sep 2021 15:48:11 -0700 Subject: [PATCH 21/21] Move helper function for LED_matrix to static inline to avoid issues with gcc v8+ --- quantum/led_matrix/led_matrix.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index dddbb41bc4c8..f540be44ca72 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -166,7 +166,7 @@ typedef struct { void (*flush)(void); } led_matrix_driver_t; -inline bool led_matrix_check_finished_leds(uint8_t led_idx) { +static inline bool led_matrix_check_finished_leds(uint8_t led_idx) { #if defined(LED_MATRIX_SPLIT) if (is_keyboard_left()) { uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT;