diff options
Diffstat (limited to 'quantum/led_matrix')
11 files changed, 49 insertions, 28 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; |