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; |