summaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/rgb_matrix.c19
-rw-r--r--quantum/rgb_matrix_types.h11
2 files changed, 27 insertions, 3 deletions
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c
index 0728e2431f..413e5777fc 100644
--- a/quantum/rgb_matrix.c
+++ b/quantum/rgb_matrix.c
@@ -142,11 +142,28 @@ void rgb_matrix_update_pwm_buffers(void) {
}
void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) {
+#ifdef RGB_MATRIX_EXTRA_TOG
+ const bool is_key = g_rgb_leds[index].matrix_co.raw != 0xff;
+ if (
+ (rgb_matrix_config.enable == RGB_ZONE_KEYS && !is_key) ||
+ (rgb_matrix_config.enable == RGB_ZONE_UNDER && is_key)
+ ) {
+ rgb_matrix_driver.set_color(index, 0, 0, 0);
+ return;
+ }
+#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 ) {
+#ifdef RGB_MATRIX_EXTRA_TOG
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ rgb_matrix_set_color(i, red, green, blue);
+ }
+#else
rgb_matrix_driver.set_color_all(red, green, blue);
+#endif
}
bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
@@ -494,7 +511,7 @@ void rgb_matrix_set_suspend_state(bool state) {
}
void rgb_matrix_toggle(void) {
- rgb_matrix_config.enable ^= 1;
+ rgb_matrix_config.enable++;
if (!rgb_matrix_config.enable) {
rgb_task_state = STARTING;
}
diff --git a/quantum/rgb_matrix_types.h b/quantum/rgb_matrix_types.h
index f7643d2b0c..908e96da56 100644
--- a/quantum/rgb_matrix_types.h
+++ b/quantum/rgb_matrix_types.h
@@ -73,11 +73,18 @@ typedef struct PACKED {
uint8_t modifier:1;
} rgb_led;
+typedef enum {
+ RGB_ZONE_OFF = 0,
+ RGB_ZONE_ALL,
+ RGB_ZONE_KEYS,
+ RGB_ZONE_UNDER,
+} rgb_zone_t;
+
typedef union {
uint32_t raw;
struct PACKED {
- bool enable :1;
- uint8_t mode :7;
+ uint8_t enable :2;
+ uint8_t mode :6;
uint8_t hue :8;
uint8_t sat :8;
uint8_t val :8;