diff options
| author | Vlad K <vkvitnevski@gmail.com> | 2021-11-01 15:04:37 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-02 09:04:37 +1100 |
| commit | a29ca1e7f1a5addfde163b158399684505453fc9 (patch) | |
| tree | 3a98dc034d034c4a5e8a30b1e744d7793ecbc00b /quantum | |
| parent | 7f8faa429e0c0662cec34a7d60e33ca58333d6d7 (diff) | |
| download | qmk_firmware-a29ca1e7f1a5addfde163b158399684505453fc9.tar.gz qmk_firmware-a29ca1e7f1a5addfde163b158399684505453fc9.zip | |
Add support for ISSI drivers on both sides of a split keyboard (#13842)
* Gets RGB working on a split keyboard with IS31FL3733. Currently needs small tweak to re-enable WS2812
* Added helper function
* Trying to integrate the function
* Moved functionality into a macro
* Swapped conditional for a macro everywhere
* Tidying up
* More code cleanup
* Documentation updates
* Fixed formatting via linter
* Switching to a function from a macro
* Fixed compile error
* Fixing WS2812 behavior. UNTESTED.
* Updated documentation about the driver addresses.
* Fixed code for WS2812
* Trying to add in LED_MATRIX support
* Updated effects for LED matrix
* Updated third-party effect defines.
* Ran format-c on modified files
* Apply suggestions from code review
Co-authored-by: Ryan <fauxpark@gmail.com>
* Move to static inline. Avoids issues with gcc v8+
* Move helper function for LED_matrix to static inline to avoid issues with gcc v8+
Co-authored-by: Vlad Kvitnevskiy <vladkvit@outlook.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'quantum')
28 files changed, 110 insertions, 57 deletions
diff --git a/quantum/led_matrix/animations/alpha_mods_anim.h b/quantum/led_matrix/animations/alpha_mods_anim.h index 14038cd08..c82b2aa38 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) { | |||
| 17 | led_matrix_set_value(i, val1); | 17 | led_matrix_set_value(i, val1); |
| 18 | } | 18 | } |
| 19 | } | 19 | } |
| 20 | return led_max < DRIVER_LED_TOTAL; | 20 | return led_matrix_check_finished_leds(led_max); |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | # endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS | 23 | # 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 e3f600c45..d9cc2de23 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) { | |||
| 12 | LED_MATRIX_TEST_LED_FLAGS(); | 12 | LED_MATRIX_TEST_LED_FLAGS(); |
| 13 | led_matrix_set_value(i, val); | 13 | led_matrix_set_value(i, val); |
| 14 | } | 14 | } |
| 15 | return led_max < DRIVER_LED_TOTAL; | 15 | return led_matrix_check_finished_leds(led_max); |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | # endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS | 18 | # 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 ef97631b9..fa9b7dbbf 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) { | |||
| 12 | int16_t dy = g_led_config.point[i].y - k_led_matrix_center.y; | 12 | int16_t dy = g_led_config.point[i].y - k_led_matrix_center.y; |
| 13 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, time)); | 13 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, time)); |
| 14 | } | 14 | } |
| 15 | return led_max < DRIVER_LED_TOTAL; | 15 | return led_matrix_check_finished_leds(led_max); |
| 16 | } | 16 | } |
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 5ef5938be..061a5f07f 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) | |||
| 13 | uint8_t dist = sqrt16(dx * dx + dy * dy); | 13 | uint8_t dist = sqrt16(dx * dx + dy * dy); |
| 14 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, dist, time)); | 14 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, dx, dy, dist, time)); |
| 15 | } | 15 | } |
| 16 | return led_max < DRIVER_LED_TOTAL; | 16 | return led_matrix_check_finished_leds(led_max); |
| 17 | } | 17 | } |
diff --git a/quantum/led_matrix/animations/runners/effect_runner_i.h b/quantum/led_matrix/animations/runners/effect_runner_i.h index b3015759b..f6f8c0dee 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) { | |||
| 10 | LED_MATRIX_TEST_LED_FLAGS(); | 10 | LED_MATRIX_TEST_LED_FLAGS(); |
| 11 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, i, time)); | 11 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, i, time)); |
| 12 | } | 12 | } |
| 13 | return led_max < DRIVER_LED_TOTAL; | 13 | return led_matrix_check_finished_leds(led_max); |
| 14 | } | 14 | } |
diff --git a/quantum/led_matrix/animations/runners/effect_runner_reactive.h b/quantum/led_matrix/animations/runners/effect_runner_reactive.h index 4369ea8c4..be3090aa5 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) { | |||
| 22 | uint16_t offset = scale16by8(tick, led_matrix_eeconfig.speed); | 22 | uint16_t offset = scale16by8(tick, led_matrix_eeconfig.speed); |
| 23 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, offset)); | 23 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, offset)); |
| 24 | } | 24 | } |
| 25 | return led_max < DRIVER_LED_TOTAL; | 25 | return led_matrix_check_finished_leds(led_max); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | #endif // LED_MATRIX_KEYREACTIVE_ENABLED | 28 | #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 d6eb9731e..f6ffc825a 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 | |||
| 20 | } | 20 | } |
| 21 | led_matrix_set_value(i, scale8(val, led_matrix_eeconfig.val)); | 21 | led_matrix_set_value(i, scale8(val, led_matrix_eeconfig.val)); |
| 22 | } | 22 | } |
| 23 | return led_max < DRIVER_LED_TOTAL; | 23 | return led_matrix_check_finished_leds(led_max); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | #endif // LED_MATRIX_KEYREACTIVE_ENABLED | 26 | #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 4a5219abd..3145e2713 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) { | |||
| 12 | LED_MATRIX_TEST_LED_FLAGS(); | 12 | LED_MATRIX_TEST_LED_FLAGS(); |
| 13 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, cos_value, sin_value, i, time)); | 13 | led_matrix_set_value(i, effect_func(led_matrix_eeconfig.val, cos_value, sin_value, i, time)); |
| 14 | } | 14 | } |
| 15 | return led_max < DRIVER_LED_TOTAL; | 15 | return led_matrix_check_finished_leds(led_max); |
| 16 | } | 16 | } |
diff --git a/quantum/led_matrix/animations/solid_anim.h b/quantum/led_matrix/animations/solid_anim.h index 4c9e43c58..c728dbcc9 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) { | |||
| 9 | LED_MATRIX_TEST_LED_FLAGS(); | 9 | LED_MATRIX_TEST_LED_FLAGS(); |
| 10 | led_matrix_set_value(i, val); | 10 | led_matrix_set_value(i, val); |
| 11 | } | 11 | } |
| 12 | return led_max < DRIVER_LED_TOTAL; | 12 | return led_matrix_check_finished_leds(led_max); |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | #endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS | 15 | #endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS |
diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 85556d157..8d6a56f27 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c | |||
| @@ -156,20 +156,10 @@ uint8_t led_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l | |||
| 156 | void led_matrix_update_pwm_buffers(void) { led_matrix_driver.flush(); } | 156 | void led_matrix_update_pwm_buffers(void) { led_matrix_driver.flush(); } |
| 157 | 157 | ||
| 158 | void led_matrix_set_value(int index, uint8_t value) { | 158 | void led_matrix_set_value(int index, uint8_t value) { |
| 159 | #if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 160 | if (!is_keyboard_left() && index >= k_led_matrix_split[0]) | ||
| 161 | # ifdef USE_CIE1931_CURVE | ||
| 162 | led_matrix_driver.set_value(index - k_led_matrix_split[0], pgm_read_byte(&CIE1931_CURVE[value])); | ||
| 163 | # else | ||
| 164 | led_matrix_driver.set_value(index - k_led_matrix_split[0], value); | ||
| 165 | # endif | ||
| 166 | else if (is_keyboard_left() && index < k_led_matrix_split[0]) | ||
| 167 | #endif | ||
| 168 | #ifdef USE_CIE1931_CURVE | 159 | #ifdef USE_CIE1931_CURVE |
| 169 | led_matrix_driver.set_value(index, pgm_read_byte(&CIE1931_CURVE[value])); | 160 | value = pgm_read_byte(&CIE1931_CURVE[value]); |
| 170 | #else | ||
| 171 | led_matrix_driver.set_value(index, value); | ||
| 172 | #endif | 161 | #endif |
| 162 | led_matrix_driver.set_value(index, value); | ||
| 173 | } | 163 | } |
| 174 | 164 | ||
| 175 | void led_matrix_set_value_all(uint8_t value) { | 165 | 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 a7a1c983f..f540be44c 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h | |||
| @@ -38,14 +38,33 @@ | |||
| 38 | #endif | 38 | #endif |
| 39 | 39 | ||
| 40 | #if defined(LED_MATRIX_LED_PROCESS_LIMIT) && LED_MATRIX_LED_PROCESS_LIMIT > 0 && LED_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL | 40 | #if defined(LED_MATRIX_LED_PROCESS_LIMIT) && LED_MATRIX_LED_PROCESS_LIMIT > 0 && LED_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL |
| 41 | # define LED_MATRIX_USE_LIMITS(min, max) \ | 41 | # if defined(LED_MATRIX_SPLIT) |
| 42 | uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; \ | 42 | # define LED_MATRIX_USE_LIMITS(min, max) |
| 43 | uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; \ | 43 | uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; |
| 44 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; | 44 | uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; |
| 45 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; | ||
| 46 | uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; | ||
| 47 | if (is_keyboard_left() && (max > k_led_matrix_split[0])) max = k_led_matrix_split[0]; | ||
| 48 | if (!(is_keyboard_left()) && (min < k_led_matrix_split[0])) min = k_led_matrix_split[0]; | ||
| 49 | # else | ||
| 50 | # define LED_MATRIX_USE_LIMITS(min, max) \ | ||
| 51 | uint8_t min = LED_MATRIX_LED_PROCESS_LIMIT * params->iter; \ | ||
| 52 | uint8_t max = min + LED_MATRIX_LED_PROCESS_LIMIT; \ | ||
| 53 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; | ||
| 54 | # endif | ||
| 45 | #else | 55 | #else |
| 46 | # define LED_MATRIX_USE_LIMITS(min, max) \ | 56 | # if defined(LED_MATRIX_SPLIT) |
| 47 | uint8_t min = 0; \ | 57 | # define LED_MATRIX_USE_LIMITS(min, max) \ |
| 48 | uint8_t max = DRIVER_LED_TOTAL; | 58 | uint8_t min = 0; \ |
| 59 | uint8_t max = DRIVER_LED_TOTAL; \ | ||
| 60 | const uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; \ | ||
| 61 | if (is_keyboard_left() && (max > k_led_matrix_split[0])) max = k_led_matrix_split[0]; \ | ||
| 62 | if (!(is_keyboard_left()) && (min < k_led_matrix_split[0])) min = k_led_matrix_split[0]; | ||
| 63 | # else | ||
| 64 | # define LED_MATRIX_USE_LIMITS(min, max) \ | ||
| 65 | uint8_t min = 0; \ | ||
| 66 | uint8_t max = DRIVER_LED_TOTAL; | ||
| 67 | # endif | ||
| 49 | #endif | 68 | #endif |
| 50 | 69 | ||
| 51 | #define LED_MATRIX_TEST_LED_FLAGS() \ | 70 | #define LED_MATRIX_TEST_LED_FLAGS() \ |
| @@ -147,6 +166,18 @@ typedef struct { | |||
| 147 | void (*flush)(void); | 166 | void (*flush)(void); |
| 148 | } led_matrix_driver_t; | 167 | } led_matrix_driver_t; |
| 149 | 168 | ||
| 169 | static inline bool led_matrix_check_finished_leds(uint8_t led_idx) { | ||
| 170 | #if defined(LED_MATRIX_SPLIT) | ||
| 171 | if (is_keyboard_left()) { | ||
| 172 | uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT; | ||
| 173 | return led_idx < k_led_matrix_split[0]; | ||
| 174 | } else | ||
| 175 | return led_idx < DRIVER_LED_TOTAL; | ||
| 176 | #else | ||
| 177 | return led_idx < DRIVER_LED_TOTAL; | ||
| 178 | #endif | ||
| 179 | } | ||
| 180 | |||
| 150 | extern const led_matrix_driver_t led_matrix_driver; | 181 | extern const led_matrix_driver_t led_matrix_driver; |
| 151 | 182 | ||
| 152 | extern led_eeconfig_t led_matrix_eeconfig; | 183 | extern led_eeconfig_t led_matrix_eeconfig; |
diff --git a/quantum/rgb_matrix/animations/alpha_mods_anim.h b/quantum/rgb_matrix/animations/alpha_mods_anim.h index 3f2c9b799..b8f507268 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) { | |||
| 19 | rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b); | 19 | rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b); |
| 20 | } | 20 | } |
| 21 | } | 21 | } |
| 22 | return led_max < DRIVER_LED_TOTAL; | 22 | return rgb_matrix_check_finished_leds(led_max); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 25 | # 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 a00ccb83a..baac51ed1 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) { | |||
| 13 | RGB_MATRIX_TEST_LED_FLAGS(); | 13 | RGB_MATRIX_TEST_LED_FLAGS(); |
| 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 15 | } | 15 | } |
| 16 | return led_max < DRIVER_LED_TOTAL; | 16 | return rgb_matrix_check_finished_leds(led_max); |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 19 | # 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 b4f2752ff..8b13d4e48 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) { | |||
| 15 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); | 15 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); |
| 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 17 | } | 17 | } |
| 18 | return led_max < DRIVER_LED_TOTAL; | 18 | return rgb_matrix_check_finished_leds(led_max); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 21 | # 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 3fd45cf99..7431ddcd9 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) { | |||
| 15 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); | 15 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); |
| 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 17 | } | 17 | } |
| 18 | return led_max < DRIVER_LED_TOTAL; | 18 | return rgb_matrix_check_finished_leds(led_max); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 21 | # 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 6d974b8c3..82be1a442 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) { | |||
| 15 | RGB_MATRIX_TEST_LED_FLAGS(); | 15 | RGB_MATRIX_TEST_LED_FLAGS(); |
| 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 16 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 17 | } | 17 | } |
| 18 | return led_max < DRIVER_LED_TOTAL; | 18 | return rgb_matrix_check_finished_leds(led_max); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 21 | # 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 7d8eafffb..d639ba9b6 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) { | |||
| 22 | for (int i = led_min; i < led_max; i++) { | 22 | for (int i = led_min; i < led_max; i++) { |
| 23 | jellybean_raindrops_set_color(i, params); | 23 | jellybean_raindrops_set_color(i, params); |
| 24 | } | 24 | } |
| 25 | return led_max < DRIVER_LED_TOTAL; | 25 | return rgb_matrix_check_finished_leds(led_max); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 28 | # 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 c01688e2c..fa61f9e0b 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) { | |||
| 32 | for (int i = led_min; i < led_max; i++) { | 32 | for (int i = led_min; i < led_max; i++) { |
| 33 | raindrops_set_color(i, params); | 33 | raindrops_set_color(i, params); |
| 34 | } | 34 | } |
| 35 | return led_max < DRIVER_LED_TOTAL; | 35 | return rgb_matrix_check_finished_leds(led_max); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 38 | # 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 4867609c8..2ad0f22c2 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) { | |||
| 13 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); | 13 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); |
| 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 15 | } | 15 | } |
| 16 | return led_max < DRIVER_LED_TOTAL; | 16 | return rgb_matrix_check_finished_leds(led_max); |
| 17 | } | 17 | } |
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 9545b418d..bcae7c79b 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) | |||
| 14 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); | 14 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); |
| 15 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 15 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 16 | } | 16 | } |
| 17 | return led_max < DRIVER_LED_TOTAL; | 17 | return rgb_matrix_check_finished_leds(led_max); |
| 18 | } | 18 | } |
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_i.h index 1881cd6c6..b4de2992b 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) { | |||
| 11 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); | 11 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); |
| 12 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 12 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 13 | } | 13 | } |
| 14 | return led_max < DRIVER_LED_TOTAL; | 14 | return rgb_matrix_check_finished_leds(led_max); |
| 15 | } | 15 | } |
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h index 75b7c0df4..d5c1a26ce 100644 --- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h +++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h | |||
| @@ -23,7 +23,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) { | |||
| 23 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset)); | 23 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset)); |
| 24 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 24 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 25 | } | 25 | } |
| 26 | return led_max < DRIVER_LED_TOTAL; | 26 | return rgb_matrix_check_finished_leds(led_max); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | #endif // RGB_MATRIX_KEYREACTIVE_ENABLED | 29 | #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 2e46ffb35..d3a6e4e72 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 | |||
| 23 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); | 23 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); |
| 24 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 24 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 25 | } | 25 | } |
| 26 | return led_max < DRIVER_LED_TOTAL; | 26 | return rgb_matrix_check_finished_leds(led_max); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | #endif // RGB_MATRIX_KEYREACTIVE_ENABLED | 29 | #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 02351de51..7776491d5 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) { | |||
| 13 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); | 13 | RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); |
| 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 14 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 15 | } | 15 | } |
| 16 | return led_max < DRIVER_LED_TOTAL; | 16 | return rgb_matrix_check_finished_leds(led_max); |
| 17 | } | 17 | } |
diff --git a/quantum/rgb_matrix/animations/solid_color_anim.h b/quantum/rgb_matrix/animations/solid_color_anim.h index 79d63cf13..420995946 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) { | |||
| 9 | RGB_MATRIX_TEST_LED_FLAGS(); | 9 | RGB_MATRIX_TEST_LED_FLAGS(); |
| 10 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | 10 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); |
| 11 | } | 11 | } |
| 12 | return led_max < DRIVER_LED_TOTAL; | 12 | return rgb_matrix_check_finished_leds(led_max); |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | #endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 15 | #endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS |
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index c260b6e1e..558c7bd41 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c | |||
| @@ -178,14 +178,7 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l | |||
| 178 | 178 | ||
| 179 | void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); } | 179 | void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); } |
| 180 | 180 | ||
| 181 | void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { | 181 | 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); } |
| 182 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 183 | if (!is_keyboard_left() && index >= k_rgb_matrix_split[0]) | ||
| 184 | rgb_matrix_driver.set_color(index - k_rgb_matrix_split[0], red, green, blue); | ||
| 185 | else if (is_keyboard_left() && index < k_rgb_matrix_split[0]) | ||
| 186 | #endif | ||
| 187 | rgb_matrix_driver.set_color(index, red, green, blue); | ||
| 188 | } | ||
| 189 | 182 | ||
| 190 | void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { | 183 | void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { |
| 191 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | 184 | #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 f53e011c1..112dfaaae 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h | |||
| @@ -48,14 +48,33 @@ | |||
| 48 | #endif | 48 | #endif |
| 49 | 49 | ||
| 50 | #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL | 50 | #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL |
| 51 | # define RGB_MATRIX_USE_LIMITS(min, max) \ | 51 | # if defined(RGB_MATRIX_SPLIT) |
| 52 | uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ | 52 | # define RGB_MATRIX_USE_LIMITS(min, max) \ |
| 53 | uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ | 53 | uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ |
| 54 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; | 54 | uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ |
| 55 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; \ | ||
| 56 | uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ | ||
| 57 | if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ | ||
| 58 | if (!(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; | ||
| 59 | # else | ||
| 60 | # define RGB_MATRIX_USE_LIMITS(min, max) \ | ||
| 61 | uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ | ||
| 62 | uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ | ||
| 63 | if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL; | ||
| 64 | # endif | ||
| 55 | #else | 65 | #else |
| 56 | # define RGB_MATRIX_USE_LIMITS(min, max) \ | 66 | # if defined(RGB_MATRIX_SPLIT) |
| 57 | uint8_t min = 0; \ | 67 | # define RGB_MATRIX_USE_LIMITS(min, max) \ |
| 58 | uint8_t max = DRIVER_LED_TOTAL; | 68 | uint8_t min = 0; \ |
| 69 | uint8_t max = DRIVER_LED_TOTAL; \ | ||
| 70 | const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; \ | ||
| 71 | if (is_keyboard_left() && (max > k_rgb_matrix_split[0])) max = k_rgb_matrix_split[0]; \ | ||
| 72 | if (!(is_keyboard_left()) && (min < k_rgb_matrix_split[0])) min = k_rgb_matrix_split[0]; | ||
| 73 | # else | ||
| 74 | # define RGB_MATRIX_USE_LIMITS(min, max) \ | ||
| 75 | uint8_t min = 0; \ | ||
| 76 | uint8_t max = DRIVER_LED_TOTAL; | ||
| 77 | # endif | ||
| 59 | #endif | 78 | #endif |
| 60 | 79 | ||
| 61 | #define RGB_MATRIX_INDICATOR_SET_COLOR(i, r, g, b) \ | 80 | #define RGB_MATRIX_INDICATOR_SET_COLOR(i, r, g, b) \ |
| @@ -214,6 +233,18 @@ typedef struct { | |||
| 214 | void (*flush)(void); | 233 | void (*flush)(void); |
| 215 | } rgb_matrix_driver_t; | 234 | } rgb_matrix_driver_t; |
| 216 | 235 | ||
| 236 | static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { | ||
| 237 | #if defined(RGB_MATRIX_SPLIT) | ||
| 238 | if (is_keyboard_left()) { | ||
| 239 | uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; | ||
| 240 | return led_idx < k_rgb_matrix_split[0]; | ||
| 241 | } else | ||
| 242 | return led_idx < DRIVER_LED_TOTAL; | ||
| 243 | #else | ||
| 244 | return led_idx < DRIVER_LED_TOTAL; | ||
| 245 | #endif | ||
| 246 | } | ||
| 247 | |||
| 217 | extern const rgb_matrix_driver_t rgb_matrix_driver; | 248 | extern const rgb_matrix_driver_t rgb_matrix_driver; |
| 218 | 249 | ||
| 219 | extern rgb_config_t rgb_matrix_config; | 250 | 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 4335088eb..949cc3661 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c | |||
| @@ -250,6 +250,14 @@ static void flush(void) { | |||
| 250 | 250 | ||
| 251 | // Set an led in the buffer to a color | 251 | // Set an led in the buffer to a color |
| 252 | static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { | 252 | static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { |
| 253 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 254 | const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT; | ||
| 255 | if (!is_keyboard_left() && (i >= k_rgb_matrix_split[0])) { | ||
| 256 | i -= k_rgb_matrix_split[0]; | ||
| 257 | } else if (is_keyboard_left() && (i >= k_rgb_matrix_split[0])) | ||
| 258 | return; | ||
| 259 | # endif | ||
| 260 | |||
| 253 | rgb_matrix_ws2812_array[i].r = r; | 261 | rgb_matrix_ws2812_array[i].r = r; |
| 254 | rgb_matrix_ws2812_array[i].g = g; | 262 | rgb_matrix_ws2812_array[i].g = g; |
| 255 | rgb_matrix_ws2812_array[i].b = b; | 263 | rgb_matrix_ws2812_array[i].b = b; |
