diff options
Diffstat (limited to 'users/drashna/rgb_stuff.c')
| -rw-r--r-- | users/drashna/rgb_stuff.c | 404 |
1 files changed, 62 insertions, 342 deletions
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index e7247f754..06b1e3c0c 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c | |||
| @@ -2,89 +2,77 @@ | |||
| 2 | #include "rgb_stuff.h" | 2 | #include "rgb_stuff.h" |
| 3 | #include "eeprom.h" | 3 | #include "eeprom.h" |
| 4 | 4 | ||
| 5 | #if defined(RGBLIGHT_ENABLE) | ||
| 6 | extern rgblight_config_t rgblight_config; | 5 | extern rgblight_config_t rgblight_config; |
| 7 | bool has_initialized; | 6 | bool has_initialized; |
| 8 | 7 | ||
| 9 | void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); } | 8 | void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); } |
| 10 | #endif // RGBLIGHT_ENABLE | ||
| 11 | |||
| 12 | #if defined(RGB_MATRIX_ENABLE) | ||
| 13 | static uint32_t hypno_timer; | ||
| 14 | # if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd) | ||
| 15 | # define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL | ||
| 16 | # else | ||
| 17 | # define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN | ||
| 18 | # endif | ||
| 19 | #endif | ||
| 20 | 9 | ||
| 21 | /* Custom indicators for modifiers. | 10 | /* Custom indicators for modifiers. |
| 22 | * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback. | 11 | * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback. |
| 23 | * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up. | 12 | * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up. |
| 24 | */ | 13 | */ |
| 25 | #ifdef RGBLIGHT_ENABLE | 14 | #ifdef INDICATOR_LIGHTS |
| 26 | # ifdef INDICATOR_LIGHTS | ||
| 27 | void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) { | 15 | void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) { |
| 28 | if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) { | 16 | if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) { |
| 29 | if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) { | 17 | if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) { |
| 30 | # ifdef SHFT_LED1 | 18 | # ifdef SHFT_LED1 |
| 31 | rgblight_sethsv_at(120, 255, 255, SHFT_LED1); | 19 | rgblight_sethsv_at(120, 255, 255, SHFT_LED1); |
| 32 | # endif // SHFT_LED1 | 20 | # endif // SHFT_LED1 |
| 33 | # ifdef SHFT_LED2 | 21 | # ifdef SHFT_LED2 |
| 34 | rgblight_sethsv_at(120, 255, 255, SHFT_LED2); | 22 | rgblight_sethsv_at(120, 255, 255, SHFT_LED2); |
| 35 | # endif // SHFT_LED2 | 23 | # endif // SHFT_LED2 |
| 36 | } else { | 24 | } else { |
| 37 | # ifdef SHFT_LED1 | 25 | # ifdef SHFT_LED1 |
| 38 | rgblight_sethsv_default_helper(SHFT_LED1); | 26 | rgblight_sethsv_default_helper(SHFT_LED1); |
| 39 | # endif // SHFT_LED1 | 27 | # endif // SHFT_LED1 |
| 40 | # ifdef SHFT_LED2 | 28 | # ifdef SHFT_LED2 |
| 41 | rgblight_sethsv_default_helper(SHFT_LED2); | 29 | rgblight_sethsv_default_helper(SHFT_LED2); |
| 42 | # endif // SHFT_LED2 | 30 | # endif // SHFT_LED2 |
| 43 | } | 31 | } |
| 44 | if ((this_mod | this_osm) & MOD_MASK_CTRL) { | 32 | if ((this_mod | this_osm) & MOD_MASK_CTRL) { |
| 45 | # ifdef CTRL_LED1 | 33 | # ifdef CTRL_LED1 |
| 46 | rgblight_sethsv_at(0, 255, 255, CTRL_LED1); | 34 | rgblight_sethsv_at(0, 255, 255, CTRL_LED1); |
| 47 | # endif // CTRL_LED1 | 35 | # endif // CTRL_LED1 |
| 48 | # ifdef CTRL_LED2 | 36 | # ifdef CTRL_LED2 |
| 49 | rgblight_sethsv_at(0, 255, 255, CTRL_LED2); | 37 | rgblight_sethsv_at(0, 255, 255, CTRL_LED2); |
| 50 | # endif // CTRL_LED2 | 38 | # endif // CTRL_LED2 |
| 51 | } else { | 39 | } else { |
| 52 | # ifdef CTRL_LED1 | 40 | # ifdef CTRL_LED1 |
| 53 | rgblight_sethsv_default_helper(CTRL_LED1); | 41 | rgblight_sethsv_default_helper(CTRL_LED1); |
| 54 | # endif // CTRL_LED1 | 42 | # endif // CTRL_LED1 |
| 55 | # ifdef CTRL_LED2 | 43 | # ifdef CTRL_LED2 |
| 56 | rgblight_sethsv_default_helper(CTRL_LED2); | 44 | rgblight_sethsv_default_helper(CTRL_LED2); |
| 57 | # endif // CTRL_LED2 | 45 | # endif // CTRL_LED2 |
| 58 | } | 46 | } |
| 59 | if ((this_mod | this_osm) & MOD_MASK_GUI) { | 47 | if ((this_mod | this_osm) & MOD_MASK_GUI) { |
| 60 | # ifdef GUI_LED1 | 48 | # ifdef GUI_LED1 |
| 61 | rgblight_sethsv_at(51, 255, 255, GUI_LED1); | 49 | rgblight_sethsv_at(51, 255, 255, GUI_LED1); |
| 62 | # endif // GUI_LED1 | 50 | # endif // GUI_LED1 |
| 63 | # ifdef GUI_LED2 | 51 | # ifdef GUI_LED2 |
| 64 | rgblight_sethsv_at(51, 255, 255, GUI_LED2); | 52 | rgblight_sethsv_at(51, 255, 255, GUI_LED2); |
| 65 | # endif // GUI_LED2 | 53 | # endif // GUI_LED2 |
| 66 | } else { | 54 | } else { |
| 67 | # ifdef GUI_LED1 | 55 | # ifdef GUI_LED1 |
| 68 | rgblight_sethsv_default_helper(GUI_LED1); | 56 | rgblight_sethsv_default_helper(GUI_LED1); |
| 69 | # endif // GUI_LED1 | 57 | # endif // GUI_LED1 |
| 70 | # ifdef GUI_LED2 | 58 | # ifdef GUI_LED2 |
| 71 | rgblight_sethsv_default_helper(GUI_LED2); | 59 | rgblight_sethsv_default_helper(GUI_LED2); |
| 72 | # endif // GUI_LED2 | 60 | # endif // GUI_LED2 |
| 73 | } | 61 | } |
| 74 | if ((this_mod | this_osm) & MOD_MASK_ALT) { | 62 | if ((this_mod | this_osm) & MOD_MASK_ALT) { |
| 75 | # ifdef ALT_LED1 | 63 | # ifdef ALT_LED1 |
| 76 | rgblight_sethsv_at(240, 255, 255, ALT_LED1); | 64 | rgblight_sethsv_at(240, 255, 255, ALT_LED1); |
| 77 | # endif // ALT_LED1 | 65 | # endif // ALT_LED1 |
| 78 | # ifdef GUI_LED2 | 66 | # ifdef GUI_LED2 |
| 79 | rgblight_sethsv_at(240, 255, 255, ALT_LED2); | 67 | rgblight_sethsv_at(240, 255, 255, ALT_LED2); |
| 80 | # endif // GUI_LED2 | 68 | # endif // GUI_LED2 |
| 81 | } else { | 69 | } else { |
| 82 | # ifdef GUI_LED1 | 70 | # ifdef GUI_LED1 |
| 83 | rgblight_sethsv_default_helper(ALT_LED1); | 71 | rgblight_sethsv_default_helper(ALT_LED1); |
| 84 | # endif // GUI_LED1 | 72 | # endif // GUI_LED1 |
| 85 | # ifdef GUI_LED2 | 73 | # ifdef GUI_LED2 |
| 86 | rgblight_sethsv_default_helper(ALT_LED2); | 74 | rgblight_sethsv_default_helper(ALT_LED2); |
| 87 | # endif // GUI_LED2 | 75 | # endif // GUI_LED2 |
| 88 | } | 76 | } |
| 89 | } | 77 | } |
| 90 | } | 78 | } |
| @@ -95,9 +83,9 @@ void matrix_scan_indicator(void) { | |||
| 95 | set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods()); | 83 | set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods()); |
| 96 | } | 84 | } |
| 97 | } | 85 | } |
| 98 | # endif // INDICATOR_LIGHTS | 86 | #endif // INDICATOR_LIGHTS |
| 99 | 87 | ||
| 100 | # ifdef RGBLIGHT_TWINKLE | 88 | #ifdef RGBLIGHT_TWINKLE |
| 101 | static rgblight_fadeout lights[RGBLED_NUM]; | 89 | static rgblight_fadeout lights[RGBLED_NUM]; |
| 102 | 90 | ||
| 103 | __attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; } | 91 | __attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; } |
| @@ -105,40 +93,40 @@ __attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { | |||
| 105 | /* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */ | 93 | /* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */ |
| 106 | bool rgblight_twinkle_is_led_used(uint8_t index) { | 94 | bool rgblight_twinkle_is_led_used(uint8_t index) { |
| 107 | switch (index) { | 95 | switch (index) { |
| 108 | # ifdef INDICATOR_LIGHTS | 96 | # ifdef INDICATOR_LIGHTS |
| 109 | # ifdef SHFT_LED1 | 97 | # ifdef SHFT_LED1 |
| 110 | case SHFT_LED1: | 98 | case SHFT_LED1: |
| 111 | return true; | 99 | return true; |
| 112 | # endif // SHFT_LED1 | 100 | # endif // SHFT_LED1 |
| 113 | # ifdef SHFT_LED2 | 101 | # ifdef SHFT_LED2 |
| 114 | case SHFT_LED2: | 102 | case SHFT_LED2: |
| 115 | return true; | 103 | return true; |
| 116 | # endif // SHFT_LED2 | 104 | # endif // SHFT_LED2 |
| 117 | # ifdef CTRL_LED1 | 105 | # ifdef CTRL_LED1 |
| 118 | case CTRL_LED1: | 106 | case CTRL_LED1: |
| 119 | return true; | 107 | return true; |
| 120 | # endif // CTRL_LED1 | 108 | # endif // CTRL_LED1 |
| 121 | # ifdef CTRL_LED2 | 109 | # ifdef CTRL_LED2 |
| 122 | case CTRL_LED2: | 110 | case CTRL_LED2: |
| 123 | return true; | 111 | return true; |
| 124 | # endif // CTRL_LED2 | 112 | # endif // CTRL_LED2 |
| 125 | # ifdef GUI_LED1 | 113 | # ifdef GUI_LED1 |
| 126 | case GUI_LED1: | 114 | case GUI_LED1: |
| 127 | return true; | 115 | return true; |
| 128 | # endif // GUI_LED1 | 116 | # endif // GUI_LED1 |
| 129 | # ifdef GUI_LED2 | 117 | # ifdef GUI_LED2 |
| 130 | case GUI_LED2: | 118 | case GUI_LED2: |
| 131 | return true; | 119 | return true; |
| 132 | # endif // GUI_LED2 | 120 | # endif // GUI_LED2 |
| 133 | # ifdef ALT_LED1 | 121 | # ifdef ALT_LED1 |
| 134 | case ALT_LED1: | 122 | case ALT_LED1: |
| 135 | return true; | 123 | return true; |
| 136 | # endif // ALT_LED1 | 124 | # endif // ALT_LED1 |
| 137 | # ifdef ALT_LED2 | 125 | # ifdef ALT_LED2 |
| 138 | case ALT_LED2: | 126 | case ALT_LED2: |
| 139 | return true; | 127 | return true; |
| 140 | # endif // ALT_LED2 | 128 | # endif // ALT_LED2 |
| 141 | # endif // INDICATOR_LIGHTS | 129 | # endif // INDICATOR_LIGHTS |
| 142 | default: | 130 | default: |
| 143 | return rgblight_twinkle_is_led_used_keymap(index); | 131 | return rgblight_twinkle_is_led_used_keymap(index); |
| 144 | } | 132 | } |
| @@ -213,23 +201,15 @@ void start_rgb_light(void) { | |||
| 213 | 201 | ||
| 214 | rgblight_sethsv_at(light->hue, 255, light->life, light_index); | 202 | rgblight_sethsv_at(light->hue, 255, light->life, light_index); |
| 215 | } | 203 | } |
| 216 | # endif | 204 | #endif |
| 217 | #endif // RGBLIGHT_ENABLE | ||
| 218 | 205 | ||
| 219 | bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { | 206 | bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) { |
| 220 | uint16_t temp_keycode = keycode; | 207 | uint16_t temp_keycode = keycode; |
| 221 | // Filter out the actual keycode from MT and LT keys. | 208 | // Filter out the actual keycode from MT and LT keys. |
| 222 | if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { | 209 | if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { |
| 223 | temp_keycode &= 0xFF; | 210 | temp_keycode &= 0xFF; |
| 224 | } | 211 | } |
| 225 | 212 | ||
| 226 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
| 227 | hypno_timer = timer_read32(); | ||
| 228 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) { | ||
| 229 | rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); | ||
| 230 | } | ||
| 231 | #endif | ||
| 232 | |||
| 233 | switch (temp_keycode) { | 213 | switch (temp_keycode) { |
| 234 | #ifdef RGBLIGHT_TWINKLE | 214 | #ifdef RGBLIGHT_TWINKLE |
| 235 | case KC_A ... KC_SLASH: | 215 | case KC_A ... KC_SLASH: |
| @@ -242,228 +222,19 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { | |||
| 242 | start_rgb_light(); | 222 | start_rgb_light(); |
| 243 | } | 223 | } |
| 244 | break; | 224 | break; |
| 245 | #endif // RGBLIGHT_TWINKLE | 225 | #endif // RGBLIGHT_TWINKLE |
| 246 | case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal | ||
| 247 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 248 | if (record->event.pressed) { | ||
| 249 | userspace_config.rgb_layer_change ^= 1; | ||
| 250 | dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); | ||
| 251 | eeconfig_update_user(userspace_config.raw); | ||
| 252 | if (userspace_config.rgb_layer_change) { | ||
| 253 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) | ||
| 254 | rgblight_enable_noeeprom(); | ||
| 255 | # endif | ||
| 256 | layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) | ||
| 257 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) | ||
| 258 | } else { | ||
| 259 | rgblight_disable_noeeprom(); | ||
| 260 | # endif | ||
| 261 | } | ||
| 262 | } | ||
| 263 | #endif // RGBLIGHT_ENABLE | ||
| 264 | break; | ||
| 265 | case RGB_IDL: // This allows me to use underglow as layer indication, or as normal | ||
| 266 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
| 267 | if (record->event.pressed) { | ||
| 268 | userspace_config.rgb_matrix_idle_anim ^= 1; | ||
| 269 | dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim); | ||
| 270 | eeconfig_update_user(userspace_config.raw); | ||
| 271 | if (userspace_config.rgb_matrix_idle_anim) { | ||
| 272 | rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); | ||
| 273 | } | ||
| 274 | } | ||
| 275 | #endif | ||
| 276 | break; | ||
| 277 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 278 | case RGB_TOG: | ||
| 279 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 280 | # ifndef SPLIT_KEYBOARD | ||
| 281 | if (record->event.pressed) { | ||
| 282 | # else | ||
| 283 | if (!record->event.pressed) { | ||
| 284 | # endif | ||
| 285 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 286 | rgblight_toggle(); | ||
| 287 | # endif | ||
| 288 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 289 | rgb_matrix_toggle(); | ||
| 290 | # endif | ||
| 291 | } | ||
| 292 | return false; | ||
| 293 | break; | ||
| 294 | case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions | ||
| 295 | if (record->event.pressed) { | ||
| 296 | bool is_eeprom_updated; | ||
| 297 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 298 | // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled | ||
| 299 | if (userspace_config.rgb_layer_change) { | ||
| 300 | userspace_config.rgb_layer_change = false; | ||
| 301 | dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); | ||
| 302 | is_eeprom_updated = true; | ||
| 303 | } | ||
| 304 | # endif | ||
| 305 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
| 306 | if (userspace_config.rgb_matrix_idle_anim) { | ||
| 307 | userspace_config.rgb_matrix_idle_anim = false; | ||
| 308 | dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim); | ||
| 309 | is_eeprom_updated = true; | ||
| 310 | } | ||
| 311 | # endif | ||
| 312 | if (is_eeprom_updated) { | ||
| 313 | eeconfig_update_user(userspace_config.raw); | ||
| 314 | } | ||
| 315 | } | ||
| 316 | |||
| 317 | # if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 318 | if (keycode == RGB_MODE_FORWARD && record->event.pressed) { | ||
| 319 | uint8_t shifted = get_mods() & (MOD_MASK_SHIFT); | ||
| 320 | if (shifted) { | ||
| 321 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 322 | rgblight_step_reverse(); | ||
| 323 | # endif | ||
| 324 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 325 | rgb_matrix_step_reverse(); | ||
| 326 | # endif | ||
| 327 | } else { | ||
| 328 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 329 | rgblight_step(); | ||
| 330 | # endif | ||
| 331 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 332 | rgb_matrix_step(); | ||
| 333 | # endif | ||
| 334 | } | ||
| 335 | } else if (keycode == RGB_MODE_REVERSE && record->event.pressed) { | ||
| 336 | uint8_t shifted = get_mods() & (MOD_MASK_SHIFT); | ||
| 337 | if (shifted) { | ||
| 338 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 339 | rgblight_step(); | ||
| 340 | # endif | ||
| 341 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 342 | rgb_matrix_step(); | ||
| 343 | # endif | ||
| 344 | } else { | ||
| 345 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 346 | rgblight_step_reverse(); | ||
| 347 | # endif | ||
| 348 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 349 | rgb_matrix_step_reverse(); | ||
| 350 | # endif | ||
| 351 | } | ||
| 352 | } else if (keycode == RGB_HUI) { | ||
| 353 | # ifndef SPLIT_KEYBOARD | ||
| 354 | if (record->event.pressed) { | ||
| 355 | # else | ||
| 356 | if (!record->event.pressed) { | ||
| 357 | # endif | ||
| 358 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 359 | rgblight_increase_hue(); | ||
| 360 | # endif | ||
| 361 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 362 | rgb_matrix_increase_hue(); | ||
| 363 | # endif | ||
| 364 | } | ||
| 365 | } else if (keycode == RGB_HUD) { | ||
| 366 | # ifndef SPLIT_KEYBOARD | ||
| 367 | if (record->event.pressed) { | ||
| 368 | # else | ||
| 369 | if (!record->event.pressed) { | ||
| 370 | # endif | ||
| 371 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 372 | rgblight_decrease_hue(); | ||
| 373 | # endif | ||
| 374 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 375 | rgb_matrix_decrease_hue(); | ||
| 376 | # endif | ||
| 377 | } | ||
| 378 | } else if (keycode == RGB_SAI) { | ||
| 379 | # ifndef SPLIT_KEYBOARD | ||
| 380 | if (record->event.pressed) { | ||
| 381 | # else | ||
| 382 | if (!record->event.pressed) { | ||
| 383 | # endif | ||
| 384 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 385 | rgblight_increase_sat(); | ||
| 386 | # endif | ||
| 387 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 388 | rgb_matrix_increase_sat(); | ||
| 389 | # endif | ||
| 390 | } | ||
| 391 | } else if (keycode == RGB_SAD) { | ||
| 392 | # ifndef SPLIT_KEYBOARD | ||
| 393 | if (record->event.pressed) { | ||
| 394 | # else | ||
| 395 | if (!record->event.pressed) { | ||
| 396 | # endif | ||
| 397 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 398 | rgblight_decrease_sat(); | ||
| 399 | # endif | ||
| 400 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 401 | rgb_matrix_decrease_sat(); | ||
| 402 | # endif | ||
| 403 | } | ||
| 404 | } else if (keycode == RGB_VAI) { | ||
| 405 | # ifndef SPLIT_KEYBOARD | ||
| 406 | if (record->event.pressed) { | ||
| 407 | # else | ||
| 408 | if (!record->event.pressed) { | ||
| 409 | # endif | ||
| 410 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 411 | rgblight_increase_val(); | ||
| 412 | # endif | ||
| 413 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 414 | rgb_matrix_increase_val(); | ||
| 415 | # endif | ||
| 416 | } | ||
| 417 | } else if (keycode == RGB_VAD) { | ||
| 418 | # ifndef SPLIT_KEYBOARD | ||
| 419 | if (record->event.pressed) { | ||
| 420 | # else | ||
| 421 | if (!record->event.pressed) { | ||
| 422 | # endif | ||
| 423 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 424 | rgblight_decrease_val(); | ||
| 425 | # endif | ||
| 426 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 427 | rgb_matrix_decrease_val(); | ||
| 428 | # endif | ||
| 429 | } | ||
| 430 | } else if (keycode == RGB_SPI) { | ||
| 431 | if (record->event.pressed) { | ||
| 432 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 433 | rgblight_increase_speed(); | ||
| 434 | # endif | ||
| 435 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 436 | rgb_matrix_increase_speed(); | ||
| 437 | # endif | ||
| 438 | } | ||
| 439 | } else if (keycode == RGB_SPD) { | ||
| 440 | if (record->event.pressed) { | ||
| 441 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | ||
| 442 | rgblight_decrease_speed(); | ||
| 443 | # endif | ||
| 444 | # if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES) | ||
| 445 | rgb_matrix_decrease_speed(); | ||
| 446 | # endif | ||
| 447 | } | ||
| 448 | } | ||
| 449 | return false; | ||
| 450 | # endif | ||
| 451 | #endif | ||
| 452 | |||
| 453 | break; | ||
| 454 | } | 226 | } |
| 455 | return true; | 227 | return true; |
| 456 | } | 228 | } |
| 457 | 229 | ||
| 458 | void keyboard_post_init_rgb(void) { | 230 | void keyboard_post_init_rgb_light(void) { |
| 459 | #if defined(RGBLIGHT_ENABLE) | 231 | #if defined(RGBLIGHT_STARTUP_ANIMATION) |
| 460 | # if defined(RGBLIGHT_STARTUP_ANIMATION) | ||
| 461 | bool is_enabled = rgblight_config.enable; | 232 | bool is_enabled = rgblight_config.enable; |
| 462 | if (userspace_config.rgb_layer_change) { | 233 | if (userspace_config.rgb_layer_change) { |
| 463 | rgblight_enable_noeeprom(); | 234 | rgblight_enable_noeeprom(); |
| 464 | } | 235 | } |
| 465 | if (rgblight_config.enable) { | 236 | if (rgblight_config.enable) { |
| 466 | layer_state_set_user(layer_state); | 237 | layer_state_set_rgb_light(layer_state); |
| 467 | uint16_t old_hue = rgblight_config.hue; | 238 | uint16_t old_hue = rgblight_config.hue; |
| 468 | rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); | 239 | rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); |
| 469 | for (uint16_t i = 255; i > 0; i--) { | 240 | for (uint16_t i = 255; i > 0; i--) { |
| @@ -476,17 +247,11 @@ void keyboard_post_init_rgb(void) { | |||
| 476 | rgblight_disable_noeeprom(); | 247 | rgblight_disable_noeeprom(); |
| 477 | } | 248 | } |
| 478 | 249 | ||
| 479 | # endif | ||
| 480 | layer_state_set_user(layer_state); | ||
| 481 | #endif | ||
| 482 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
| 483 | if (userspace_config.rgb_matrix_idle_anim) { | ||
| 484 | rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); | ||
| 485 | } | ||
| 486 | #endif | 250 | #endif |
| 251 | layer_state_set_rgb_light(layer_state); | ||
| 487 | } | 252 | } |
| 488 | 253 | ||
| 489 | void matrix_scan_rgb(void) { | 254 | void matrix_scan_rgb_light(void) { |
| 490 | #ifdef RGBLIGHT_ENABLE | 255 | #ifdef RGBLIGHT_ENABLE |
| 491 | # ifdef RGBLIGHT_TWINKLE | 256 | # ifdef RGBLIGHT_TWINKLE |
| 492 | scan_rgblight_fadeout(); | 257 | scan_rgblight_fadeout(); |
| @@ -496,23 +261,15 @@ void matrix_scan_rgb(void) { | |||
| 496 | matrix_scan_indicator(); | 261 | matrix_scan_indicator(); |
| 497 | # endif | 262 | # endif |
| 498 | #endif | 263 | #endif |
| 499 | |||
| 500 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
| 501 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) { | ||
| 502 | rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); | ||
| 503 | } | ||
| 504 | #endif | ||
| 505 | } | 264 | } |
| 506 | 265 | ||
| 507 | #ifdef RGBLIGHT_ENABLE | ||
| 508 | void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) { | 266 | void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) { |
| 509 | rgblight_sethsv_noeeprom(hue, sat, val); | 267 | rgblight_sethsv_noeeprom(hue, sat, val); |
| 510 | wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly | 268 | wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly |
| 511 | rgblight_mode_noeeprom(mode); | 269 | rgblight_mode_noeeprom(mode); |
| 512 | } | 270 | } |
| 513 | #endif | ||
| 514 | 271 | ||
| 515 | layer_state_t layer_state_set_rgb(layer_state_t state) { | 272 | layer_state_t layer_state_set_rgb_light(layer_state_t state) { |
| 516 | #ifdef RGBLIGHT_ENABLE | 273 | #ifdef RGBLIGHT_ENABLE |
| 517 | if (userspace_config.rgb_layer_change) { | 274 | if (userspace_config.rgb_layer_change) { |
| 518 | switch (get_highest_layer(state)) { | 275 | switch (get_highest_layer(state)) { |
| @@ -574,40 +331,3 @@ layer_state_t layer_state_set_rgb(layer_state_t state) { | |||
| 574 | 331 | ||
| 575 | return state; | 332 | return state; |
| 576 | } | 333 | } |
| 577 | |||
| 578 | #ifdef RGB_MATRIX_ENABLE | ||
| 579 | # include "lib/lib8tion/lib8tion.h" | ||
| 580 | extern led_config_t g_led_config; | ||
| 581 | |||
| 582 | void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) { | ||
| 583 | HSV hsv = {hue, sat, val}; | ||
| 584 | if (hsv.v > rgb_matrix_config.hsv.v) { | ||
| 585 | hsv.v = rgb_matrix_config.hsv.v; | ||
| 586 | } | ||
| 587 | |||
| 588 | switch (mode) { | ||
| 589 | case 1: // breathing | ||
| 590 | { | ||
| 591 | uint16_t time = scale16by8(g_rgb_counters.tick, speed / 8); | ||
| 592 | hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v); | ||
| 593 | RGB rgb = hsv_to_rgb(hsv); | ||
| 594 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { | ||
| 595 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { | ||
| 596 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | ||
| 597 | } | ||
| 598 | } | ||
| 599 | break; | ||
| 600 | } | ||
| 601 | default: // Solid Color | ||
| 602 | { | ||
| 603 | RGB rgb = hsv_to_rgb(hsv); | ||
| 604 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { | ||
| 605 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { | ||
| 606 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | ||
| 607 | } | ||
| 608 | } | ||
| 609 | break; | ||
| 610 | } | ||
| 611 | } | ||
| 612 | } | ||
| 613 | #endif | ||
