From 1d81e54c357f5ae86798c647851898777e10ac7d Mon Sep 17 00:00:00 2001 From: casuanoob Date: Thu, 16 Nov 2023 00:27:19 +1100 Subject: [PATCH] 3x5_3 migrate RGB indicator code to kb level - use *_kb function to keep via keymap pristine - allows user to override default behaviour easily from keymap level --- keyboards/bastardkb/dilemma/3x5_3/3x5_3.c | 57 +++++++++++++++++ .../dilemma/3x5_3/keymaps/via/keymap.c | 63 ++----------------- 2 files changed, 61 insertions(+), 59 deletions(-) diff --git a/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c index 8a1fa43a578..55c11982a2b 100644 --- a/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c +++ b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c @@ -36,3 +36,60 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } #endif // ENCODER_ENABLE + +#ifdef RGB_MATRIX_ENABLE +#define rgb_min(a,b) (((a)<(b))?(a):(b)) + +// Layer state indicator +bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { + if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } + if (host_keyboard_led_state().caps_lock) { + for (int i = led_min; i <= led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) { + rgb_matrix_set_color(i, rgb_min(rgb_matrix_get_val() + 76, 255), 0x00, 0x00); + } + } + } + + uint8_t layer = get_highest_layer(layer_state); + if (layer > 0) { + HSV hsv = rgb_matrix_get_hsv(); + switch (get_highest_layer(layer_state)) { + case 1: + hsv = (HSV){HSV_BLUE}; + break; + case 2: + hsv = (HSV){HSV_AZURE}; + break; + case 3: + hsv = (HSV){HSV_ORANGE}; + break; + case 4: + hsv = (HSV){HSV_GREEN}; + break; + case 5: + hsv = (HSV){HSV_TEAL}; + break; + case 6: + hsv = (HSV){HSV_PURPLE}; + break; + case 7: + default: + hsv = (HSV){HSV_RED}; + break; + }; + + if (hsv.v > rgb_matrix_get_val()) { + hsv.v = rgb_min(rgb_matrix_get_val() + 22, 255); + } + RGB rgb = hsv_to_rgb(hsv); + + for (uint8_t i = led_min; i < led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { + rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } + } + } + return false; +}; +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c index a976becfb89..d8c3349d94e 100644 --- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c +++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c @@ -156,64 +156,6 @@ layer_state_t layer_state_set_user(layer_state_t state) { # endif // DILEMMA_AUTO_SNIPING_ON_LAYER #endif // POINTING_DEVICE_ENABLE -#ifdef RGB_MATRIX_ENABLE -#define rgb_min(a,b) (((a)<(b))?(a):(b)) -// Forward-declare this helper function since it is defined in rgb_matrix.c. -void rgb_matrix_update_pwm_buffers(void); - -// Layer state indicator -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (host_keyboard_led_state().caps_lock) { - for (int i = led_min; i <= led_max; i++) { - if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) { - rgb_matrix_set_color(i, rgb_min(rgb_matrix_get_val() + 76, 255), 0x00, 0x00); - } - } - } - - uint8_t layer = get_highest_layer(layer_state); - if (layer > 0) { - HSV hsv = rgb_matrix_get_hsv(); - switch (get_highest_layer(layer_state)) { - case 1: - hsv = (HSV){HSV_BLUE}; - break; - case 2: - hsv = (HSV){HSV_AZURE}; - break; - case 3: - hsv = (HSV){HSV_ORANGE}; - break; - case 4: - hsv = (HSV){HSV_GREEN}; - break; - case 5: - hsv = (HSV){HSV_TEAL}; - break; - case 6: - hsv = (HSV){HSV_PURPLE}; - break; - case 7: - default: - hsv = (HSV){HSV_RED}; - break; - }; - - if (hsv.v > rgb_matrix_get_val()) { - hsv.v = rgb_min(rgb_matrix_get_val() + 22, 255); - } - RGB rgb = hsv_to_rgb(hsv); - - for (uint8_t i = led_min; i < led_max; i++) { - if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } - } - } - return false; -}; -#endif // RGB_MATRIX_ENABLE - #ifdef ENCODER_MAP_ENABLE // clang-format off const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { @@ -227,8 +169,11 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { // clang-format on #endif // ENCODER_MAP_ENABL -void shutdown_user(void) { #ifdef RGB_MATRIX_ENABLE +// Forward-declare this helper function since it is defined in rgb_matrix.c. +void rgb_matrix_update_pwm_buffers(void); + +void shutdown_user(void) { rgb_matrix_set_color_all(rgb_matrix_get_val(), 0x00, 0x00); rgb_matrix_update_pwm_buffers(); #endif // RGB_MATRIX_ENABLE