aboutsummaryrefslogtreecommitdiff
path: root/users/drashna/rgb_stuff.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/drashna/rgb_stuff.c')
-rw-r--r--users/drashna/rgb_stuff.c194
1 files changed, 101 insertions, 93 deletions
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index a9af0566e..52ec61c22 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -12,9 +12,9 @@ void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight
12#if defined(RGB_MATRIX_ENABLE) 12#if defined(RGB_MATRIX_ENABLE)
13static uint32_t hypno_timer; 13static uint32_t hypno_timer;
14# if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd) 14# if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd)
15# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL 15# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
16# else 16# else
17# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN 17# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
18# endif 18# endif
19#endif 19#endif
20 20
@@ -23,68 +23,68 @@ static uint32_t hypno_timer;
23 * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up. 23 * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up.
24 */ 24 */
25#ifdef RGBLIGHT_ENABLE 25#ifdef RGBLIGHT_ENABLE
26#ifdef INDICATOR_LIGHTS 26# ifdef INDICATOR_LIGHTS
27void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) { 27void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
28 if (userspace_config.rgb_layer_change && biton32(layer_state) == 0) { 28 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)) { 29 if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) {
30# ifdef SHFT_LED1 30# ifdef SHFT_LED1
31 rgblight_sethsv_at(120, 255, 255, SHFT_LED1); 31 rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
32# endif // SHFT_LED1 32# endif // SHFT_LED1
33# ifdef SHFT_LED2 33# ifdef SHFT_LED2
34 rgblight_sethsv_at(120, 255, 255, SHFT_LED2); 34 rgblight_sethsv_at(120, 255, 255, SHFT_LED2);
35# endif // SHFT_LED2 35# endif // SHFT_LED2
36 } else { 36 } else {
37# ifdef SHFT_LED1 37# ifdef SHFT_LED1
38 rgblight_sethsv_default_helper(SHFT_LED1); 38 rgblight_sethsv_default_helper(SHFT_LED1);
39# endif // SHFT_LED1 39# endif // SHFT_LED1
40# ifdef SHFT_LED2 40# ifdef SHFT_LED2
41 rgblight_sethsv_default_helper(SHFT_LED2); 41 rgblight_sethsv_default_helper(SHFT_LED2);
42# endif // SHFT_LED2 42# endif // SHFT_LED2
43 } 43 }
44 if ((this_mod | this_osm) & MOD_MASK_CTRL) { 44 if ((this_mod | this_osm) & MOD_MASK_CTRL) {
45# ifdef CTRL_LED1 45# ifdef CTRL_LED1
46 rgblight_sethsv_at(0, 255, 255, CTRL_LED1); 46 rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
47# endif // CTRL_LED1 47# endif // CTRL_LED1
48# ifdef CTRL_LED2 48# ifdef CTRL_LED2
49 rgblight_sethsv_at(0, 255, 255, CTRL_LED2); 49 rgblight_sethsv_at(0, 255, 255, CTRL_LED2);
50# endif // CTRL_LED2 50# endif // CTRL_LED2
51 } else { 51 } else {
52# ifdef CTRL_LED1 52# ifdef CTRL_LED1
53 rgblight_sethsv_default_helper(CTRL_LED1); 53 rgblight_sethsv_default_helper(CTRL_LED1);
54# endif // CTRL_LED1 54# endif // CTRL_LED1
55# ifdef CTRL_LED2 55# ifdef CTRL_LED2
56 rgblight_sethsv_default_helper(CTRL_LED2); 56 rgblight_sethsv_default_helper(CTRL_LED2);
57# endif // CTRL_LED2 57# endif // CTRL_LED2
58 } 58 }
59 if ((this_mod | this_osm) & MOD_MASK_GUI) { 59 if ((this_mod | this_osm) & MOD_MASK_GUI) {
60# ifdef GUI_LED1 60# ifdef GUI_LED1
61 rgblight_sethsv_at(51, 255, 255, GUI_LED1); 61 rgblight_sethsv_at(51, 255, 255, GUI_LED1);
62# endif // GUI_LED1 62# endif // GUI_LED1
63# ifdef GUI_LED2 63# ifdef GUI_LED2
64 rgblight_sethsv_at(51, 255, 255, GUI_LED2); 64 rgblight_sethsv_at(51, 255, 255, GUI_LED2);
65# endif // GUI_LED2 65# endif // GUI_LED2
66 } else { 66 } else {
67# ifdef GUI_LED1 67# ifdef GUI_LED1
68 rgblight_sethsv_default_helper(GUI_LED1); 68 rgblight_sethsv_default_helper(GUI_LED1);
69# endif // GUI_LED1 69# endif // GUI_LED1
70# ifdef GUI_LED2 70# ifdef GUI_LED2
71 rgblight_sethsv_default_helper(GUI_LED2); 71 rgblight_sethsv_default_helper(GUI_LED2);
72# endif // GUI_LED2 72# endif // GUI_LED2
73 } 73 }
74 if ((this_mod | this_osm) & MOD_MASK_ALT) { 74 if ((this_mod | this_osm) & MOD_MASK_ALT) {
75# ifdef ALT_LED1 75# ifdef ALT_LED1
76 rgblight_sethsv_at(240, 255, 255, ALT_LED1); 76 rgblight_sethsv_at(240, 255, 255, ALT_LED1);
77# endif // ALT_LED1 77# endif // ALT_LED1
78# ifdef GUI_LED2 78# ifdef GUI_LED2
79 rgblight_sethsv_at(240, 255, 255, ALT_LED2); 79 rgblight_sethsv_at(240, 255, 255, ALT_LED2);
80# endif // GUI_LED2 80# endif // GUI_LED2
81 } else { 81 } else {
82# ifdef GUI_LED1 82# ifdef GUI_LED1
83 rgblight_sethsv_default_helper(ALT_LED1); 83 rgblight_sethsv_default_helper(ALT_LED1);
84# endif // GUI_LED1 84# endif // GUI_LED1
85# ifdef GUI_LED2 85# ifdef GUI_LED2
86 rgblight_sethsv_default_helper(ALT_LED2); 86 rgblight_sethsv_default_helper(ALT_LED2);
87# endif // GUI_LED2 87# endif // GUI_LED2
88 } 88 }
89 } 89 }
90} 90}
@@ -95,9 +95,9 @@ void matrix_scan_indicator(void) {
95 set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods()); 95 set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
96 } 96 }
97} 97}
98#endif // INDICATOR_LIGHTS 98# endif // INDICATOR_LIGHTS
99 99
100#ifdef RGBLIGHT_TWINKLE 100# ifdef RGBLIGHT_TWINKLE
101static rgblight_fadeout lights[RGBLED_NUM]; 101static rgblight_fadeout lights[RGBLED_NUM];
102 102
103__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; } 103__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; }
@@ -105,40 +105,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 */ 105/* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */
106bool rgblight_twinkle_is_led_used(uint8_t index) { 106bool rgblight_twinkle_is_led_used(uint8_t index) {
107 switch (index) { 107 switch (index) {
108# ifdef INDICATOR_LIGHTS 108# ifdef INDICATOR_LIGHTS
109# ifdef SHFT_LED1 109# ifdef SHFT_LED1
110 case SHFT_LED1: 110 case SHFT_LED1:
111 return true; 111 return true;
112# endif // SHFT_LED1 112# endif // SHFT_LED1
113# ifdef SHFT_LED2 113# ifdef SHFT_LED2
114 case SHFT_LED2: 114 case SHFT_LED2:
115 return true; 115 return true;
116# endif // SHFT_LED2 116# endif // SHFT_LED2
117# ifdef CTRL_LED1 117# ifdef CTRL_LED1
118 case CTRL_LED1: 118 case CTRL_LED1:
119 return true; 119 return true;
120# endif // CTRL_LED1 120# endif // CTRL_LED1
121# ifdef CTRL_LED2 121# ifdef CTRL_LED2
122 case CTRL_LED2: 122 case CTRL_LED2:
123 return true; 123 return true;
124# endif // CTRL_LED2 124# endif // CTRL_LED2
125# ifdef GUI_LED1 125# ifdef GUI_LED1
126 case GUI_LED1: 126 case GUI_LED1:
127 return true; 127 return true;
128# endif // GUI_LED1 128# endif // GUI_LED1
129# ifdef GUI_LED2 129# ifdef GUI_LED2
130 case GUI_LED2: 130 case GUI_LED2:
131 return true; 131 return true;
132# endif // GUI_LED2 132# endif // GUI_LED2
133# ifdef ALT_LED1 133# ifdef ALT_LED1
134 case ALT_LED1: 134 case ALT_LED1:
135 return true; 135 return true;
136# endif // ALT_LED1 136# endif // ALT_LED1
137# ifdef ALT_LED2 137# ifdef ALT_LED2
138 case ALT_LED2: 138 case ALT_LED2:
139 return true; 139 return true;
140# endif // ALT_LED2 140# endif // ALT_LED2
141# endif // INDICATOR_LIGHTS 141# endif // INDICATOR_LIGHTS
142 default: 142 default:
143 return rgblight_twinkle_is_led_used_keymap(index); 143 return rgblight_twinkle_is_led_used_keymap(index);
144 } 144 }
@@ -154,19 +154,19 @@ void scan_rgblight_fadeout(void) { // Don't effing change this function .... rg
154 154
155 if (light->life) { 155 if (light->life) {
156 light->life -= 1; 156 light->life -= 1;
157 if (biton32(layer_state) == 0) { 157 if (get_highest_layer(layer_state) == 0) {
158 sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]); 158 sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
159 } 159 }
160 light->timer = timer_read(); 160 light->timer = timer_read();
161 } else { 161 } else {
162 if (light->enabled && biton32(layer_state) == 0) { 162 if (light->enabled && get_highest_layer(layer_state) == 0) {
163 rgblight_sethsv_default_helper(light_index); 163 rgblight_sethsv_default_helper(light_index);
164 } 164 }
165 litup = light->enabled = false; 165 litup = light->enabled = false;
166 } 166 }
167 } 167 }
168 } 168 }
169 if (litup && biton32(layer_state) == 0) { 169 if (litup && get_highest_layer(layer_state) == 0) {
170 rgblight_set(); 170 rgblight_set();
171 } 171 }
172} 172}
@@ -211,8 +211,8 @@ void start_rgb_light(void) {
211 211
212 rgblight_sethsv_at(light->hue, 255, light->life, light_index); 212 rgblight_sethsv_at(light->hue, 255, light->life, light_index);
213} 213}
214#endif 214# endif
215#endif // RGBLIGHT_ENABLE 215#endif // RGBLIGHT_ENABLE
216 216
217bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { 217bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
218 uint16_t temp_keycode = keycode; 218 uint16_t temp_keycode = keycode;
@@ -259,7 +259,9 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
259 userspace_config.rgb_matrix_idle_anim ^= 1; 259 userspace_config.rgb_matrix_idle_anim ^= 1;
260 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim); 260 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
261 eeconfig_update_user(userspace_config.raw); 261 eeconfig_update_user(userspace_config.raw);
262 if (userspace_config.rgb_matrix_idle_anim) { rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); } 262 if (userspace_config.rgb_matrix_idle_anim) {
263 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
264 }
263 } 265 }
264#endif 266#endif
265 break; 267 break;
@@ -281,7 +283,9 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
281 is_eeprom_updated = true; 283 is_eeprom_updated = true;
282 } 284 }
283#endif 285#endif
284 if (is_eeprom_updated) { eeconfig_update_user(userspace_config.raw); } 286 if (is_eeprom_updated) {
287 eeconfig_update_user(userspace_config.raw);
288 }
285 } 289 }
286 break; 290 break;
287 } 291 }
@@ -290,7 +294,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
290 294
291void keyboard_post_init_rgb(void) { 295void keyboard_post_init_rgb(void) {
292#if defined(RGBLIGHT_ENABLE) 296#if defined(RGBLIGHT_ENABLE)
293# if defined(RGBLIGHT_STARTUP_ANIMATION) 297# if defined(RGBLIGHT_STARTUP_ANIMATION)
294 bool is_enabled = rgblight_config.enable; 298 bool is_enabled = rgblight_config.enable;
295 if (userspace_config.rgb_layer_change) { 299 if (userspace_config.rgb_layer_change) {
296 rgblight_enable_noeeprom(); 300 rgblight_enable_noeeprom();
@@ -309,13 +313,13 @@ void keyboard_post_init_rgb(void) {
309 rgblight_disable_noeeprom(); 313 rgblight_disable_noeeprom();
310 } 314 }
311 315
312# endif 316# endif
313 layer_state_set_user(layer_state); 317 layer_state_set_user(layer_state);
314#endif 318#endif
315#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) 319#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
316 if (userspace_config.rgb_matrix_idle_anim) { 320 if (userspace_config.rgb_matrix_idle_anim) {
317 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); 321 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
318 } 322 }
319#endif 323#endif
320} 324}
321 325
@@ -337,67 +341,70 @@ void matrix_scan_rgb(void) {
337#endif 341#endif
338} 342}
339 343
344#ifdef RGBLIGHT_ENABLE
345void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
346 rgblight_sethsv_noeeprom(hue, sat, val);
347 wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
348 rgblight_mode_noeeprom(mode);
349}
350#endif
351
340layer_state_t layer_state_set_rgb(layer_state_t state) { 352layer_state_t layer_state_set_rgb(layer_state_t state) {
341#ifdef RGBLIGHT_ENABLE 353#ifdef RGBLIGHT_ENABLE
342 if (userspace_config.rgb_layer_change) { 354 if (userspace_config.rgb_layer_change) {
343 switch (biton32(state)) { 355 switch (get_highest_layer(state)) {
344 case _MACROS: 356 case _MACROS:
345 rgblight_sethsv_noeeprom_orange(); 357 rgblight_set_hsv_and_mode(HSV_ORANGE, userspace_config.is_overwatch ? RGBLIGHT_MODE_SNAKE + 2 : RGBLIGHT_MODE_SNAKE + 3);
346 userspace_config.is_overwatch ? rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2) : rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 3);
347 break; 358 break;
348 case _MEDIA: 359 case _MEDIA:
349 rgblight_sethsv_noeeprom_chartreuse(); 360 rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1);
350 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 1);
351 break; 361 break;
352 case _GAMEPAD: 362 case _GAMEPAD:
353 rgblight_sethsv_noeeprom_orange(); 363 rgblight_set_hsv_and_mode(HSV_ORANGE, RGBLIGHT_MODE_SNAKE + 2);
354 rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2);
355 break; 364 break;
356 case _DIABLO: 365 case _DIABLO:
357 rgblight_sethsv_noeeprom_red(); 366 rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_BREATHING + 3);
358 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
359 break; 367 break;
360 case _RAISE: 368 case _RAISE:
361 rgblight_sethsv_noeeprom_yellow(); 369 rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3);
362 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
363 break; 370 break;
364 case _LOWER: 371 case _LOWER:
365 rgblight_sethsv_noeeprom_green(); 372 rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3);
366 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
367 break; 373 break;
368 case _ADJUST: 374 case _ADJUST:
369 rgblight_sethsv_noeeprom_red(); 375 rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
370 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
371 break; 376 break;
372 default: // for any other layers, or the default layer 377 default: // for any other layers, or the default layer
373 switch (biton32(default_layer_state)) { 378 {
379 uint8_t mode = get_highest_layer(state) == _MODS ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT;
380 switch (get_highest_layer(default_layer_state)) {
374 case _COLEMAK: 381 case _COLEMAK:
375 rgblight_sethsv_noeeprom_magenta(); 382 rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
376 break; 383 break;
377 case _DVORAK: 384 case _DVORAK:
378 rgblight_sethsv_noeeprom_springgreen(); 385 rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
379 break; 386 break;
380 case _WORKMAN: 387 case _WORKMAN:
381 rgblight_sethsv_noeeprom_goldenrod(); 388 rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
382 break; 389 break;
383 case _NORMAN: 390 case _NORMAN:
384 rgblight_sethsv_noeeprom_coral(); 391 rgblight_set_hsv_and_mode(HSV_CORAL, mode);
385 break; 392 break;
386 case _MALTRON: 393 case _MALTRON:
387 rgblight_sethsv_noeeprom_yellow(); 394 rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
388 break; 395 break;
389 case _EUCALYN: 396 case _EUCALYN:
390 rgblight_sethsv_noeeprom_pink(); 397 rgblight_set_hsv_and_mode(HSV_PINK, mode);
391 break; 398 break;
392 case _CARPLAX: 399 case _CARPLAX:
393 rgblight_sethsv_noeeprom_blue(); 400 rgblight_set_hsv_and_mode(HSV_BLUE, mode);
394 break; 401 break;
395 default: 402 default:
396 rgblight_sethsv_noeeprom_cyan(); 403 rgblight_set_hsv_and_mode(HSV_CYAN, mode);
397 break; 404 break;
398 } 405 }
399 biton32(state) == _MODS ? rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING) : rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); // if _MODS layer is on, then breath to denote it
400 break; 406 break;
407 }
401 } 408 }
402 } 409 }
403#endif // RGBLIGHT_ENABLE 410#endif // RGBLIGHT_ENABLE
@@ -408,6 +415,7 @@ layer_state_t layer_state_set_rgb(layer_state_t state) {
408#ifdef RGB_MATRIX_ENABLE 415#ifdef RGB_MATRIX_ENABLE
409# include "lib/lib8tion/lib8tion.h" 416# include "lib/lib8tion/lib8tion.h"
410extern led_config_t g_led_config; 417extern led_config_t g_led_config;
418
411void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) { 419void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
412 HSV hsv = {hue, sat, val}; 420 HSV hsv = {hue, sat, val};
413 if (hsv.v > rgb_matrix_config.hsv.v) { 421 if (hsv.v > rgb_matrix_config.hsv.v) {