summary refs log tree commit diff
diff options
context:
space:
mode:
authorCobraSock <128439817+CobraSock@users.noreply.github.com>2023-04-03 15:46:00 -0700
committerGitHub <noreply@github.com>2023-04-04 08:46:00 +1000
commitd82c6648f50d72820effce6077084c8a2dce1b18 (patch)
treee04c5ba01770a4df93a43478612e114d402cd705
parentb67bdf222e0bc98b846f20e22152cd0a007fb9f7 (diff)
Fixed split keyboard issue where custom LED indicators could activate incorrect LEDs (#20203) (#20204)
Co-authored-by: N M <ninja.milkman@gmail.com>
Fixed split keyboard issue where custom LED indicators could activate incorrect LEDs (#20203)
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c9
-rw-r--r--quantum/rgb_matrix/rgb_matrix.h18
2 files changed, 11 insertions, 16 deletions
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index bbb706da69..1f3912cf7e 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -459,14 +459,7 @@ void rgb_matrix_indicators_advanced(effect_params_t *params) {
      * and not sure which would be better. Otherwise, this should be called from
      * rgb_task_render, right before the iter++ line.
      */
-#if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < RGB_MATRIX_LED_COUNT
-    uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * (params->iter - 1);
-    uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT;
-    if (max > RGB_MATRIX_LED_COUNT) max = RGB_MATRIX_LED_COUNT;
-#else
-    uint8_t min = 0;
-    uint8_t max = RGB_MATRIX_LED_COUNT;
-#endif
+    RGB_MATRIX_USE_LIMITS_ITER(min, max, params->iter - 1);
     rgb_matrix_indicators_advanced_kb(min, max);
 }
 
diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h
index 62078f6e60..6b373d0bcd 100644
--- a/quantum/rgb_matrix/rgb_matrix.h
+++ b/quantum/rgb_matrix/rgb_matrix.h
@@ -52,34 +52,36 @@
 
 #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < RGB_MATRIX_LED_COUNT
 #    if defined(RGB_MATRIX_SPLIT)
-#        define RGB_MATRIX_USE_LIMITS(min, max)                                                   \
-            uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter;                            \
+#        define RGB_MATRIX_USE_LIMITS_ITER(min, max, iter)                                        \
+            uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * (iter);                                  \
             uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT;                                     \
             if (max > RGB_MATRIX_LED_COUNT) max = RGB_MATRIX_LED_COUNT;                           \
             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;          \
+#        define RGB_MATRIX_USE_LIMITS_ITER(min, max, iter)       \
+            uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * (iter); \
+            uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT;    \
             if (max > RGB_MATRIX_LED_COUNT) max = RGB_MATRIX_LED_COUNT;
 #    endif
 #else
 #    if defined(RGB_MATRIX_SPLIT)
-#        define RGB_MATRIX_USE_LIMITS(min, max)                                                   \
+#        define RGB_MATRIX_USE_LIMITS_ITER(min, max, iter)                                        \
             uint8_t       min                   = 0;                                              \
             uint8_t       max                   = RGB_MATRIX_LED_COUNT;                           \
             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;                    \
+#        define RGB_MATRIX_USE_LIMITS_ITER(min, max, iter) \
+            uint8_t min = 0;                               \
             uint8_t max = RGB_MATRIX_LED_COUNT;
 #    endif
 #endif
 
+#define RGB_MATRIX_USE_LIMITS(min, max) RGB_MATRIX_USE_LIMITS_ITER(min, max, params->iter)
+
 #define RGB_MATRIX_INDICATOR_SET_COLOR(i, r, g, b) \
     if (i >= led_min && i < led_max) {             \
         rgb_matrix_set_color(i, r, g, b);          \