diff options
Diffstat (limited to 'users/drashna/rgb')
| -rw-r--r-- | users/drashna/rgb/rgb_stuff.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/users/drashna/rgb/rgb_stuff.c b/users/drashna/rgb/rgb_stuff.c index e0422334a..09071f715 100644 --- a/users/drashna/rgb/rgb_stuff.c +++ b/users/drashna/rgb/rgb_stuff.c | |||
| @@ -23,9 +23,29 @@ static bool is_enabled; | |||
| 23 | static bool is_rgblight_startup; | 23 | static bool is_rgblight_startup; |
| 24 | static HSV old_hsv; | 24 | static HSV old_hsv; |
| 25 | static uint8_t old_mode; | 25 | static uint8_t old_mode; |
| 26 | static uint16_t rgblight_startup_loop_timer; | 26 | deferred_token rgb_startup_token; |
| 27 | # endif | 27 | # endif |
| 28 | 28 | ||
| 29 | uint32_t rgb_startup_animation(uint32_t triger_time, void *cb_arg) { | ||
| 30 | if (is_rgblight_startup && is_keyboard_master()) { | ||
| 31 | static uint8_t counter = 0; | ||
| 32 | counter++; | ||
| 33 | rgblight_sethsv_noeeprom((counter + old_hsv.h) % 255, 255, 255); | ||
| 34 | if (counter >= 255) { | ||
| 35 | is_rgblight_startup = false; | ||
| 36 | if (userspace_config.rgb_layer_change) { | ||
| 37 | layer_state_set_rgb_light(layer_state); | ||
| 38 | } else { | ||
| 39 | rgblight_set_hsv_and_mode(old_hsv.h, old_hsv.s, old_hsv.v, old_mode); | ||
| 40 | } | ||
| 41 | if (!is_enabled) { | ||
| 42 | rgblight_disable_noeeprom(); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | } | ||
| 46 | return is_rgblight_startup ? 10 : 0; | ||
| 47 | } | ||
| 48 | |||
| 29 | void keyboard_post_init_rgb_light(void) { | 49 | void keyboard_post_init_rgb_light(void) { |
| 30 | # if defined(RGBLIGHT_STARTUP_ANIMATION) | 50 | # if defined(RGBLIGHT_STARTUP_ANIMATION) |
| 31 | is_enabled = rgblight_is_enabled(); | 51 | is_enabled = rgblight_is_enabled(); |
| @@ -40,30 +60,8 @@ void keyboard_post_init_rgb_light(void) { | |||
| 40 | if (userspace_config.rgb_layer_change) { | 60 | if (userspace_config.rgb_layer_change) { |
| 41 | layer_state_set_rgb_light(layer_state); | 61 | layer_state_set_rgb_light(layer_state); |
| 42 | } | 62 | } |
| 43 | } | 63 | rgb_startup_token = defer_exec(300, rgb_startup_animation, NULL); |
| 44 | 64 | ||
| 45 | void matrix_scan_rgb_light(void) { | ||
| 46 | # if defined(RGBLIGHT_STARTUP_ANIMATION) | ||
| 47 | if (is_rgblight_startup && is_keyboard_master()) { | ||
| 48 | if (sync_timer_elapsed(rgblight_startup_loop_timer) > 10) { | ||
| 49 | static uint8_t counter; | ||
| 50 | counter++; | ||
| 51 | rgblight_sethsv_noeeprom((counter + old_hsv.h) % 255, 255, 255); | ||
| 52 | rgblight_startup_loop_timer = sync_timer_read(); | ||
| 53 | if (counter == 255) { | ||
| 54 | is_rgblight_startup = false; | ||
| 55 | if (userspace_config.rgb_layer_change) { | ||
| 56 | layer_state_set_rgb_light(layer_state); | ||
| 57 | } else { | ||
| 58 | rgblight_set_hsv_and_mode(old_hsv.h, old_hsv.s, old_hsv.v, old_mode); | ||
| 59 | } | ||
| 60 | if (!is_enabled) { | ||
| 61 | rgblight_disable_noeeprom(); | ||
| 62 | } | ||
| 63 | } | ||
| 64 | } | ||
| 65 | } | ||
| 66 | # endif | ||
| 67 | } | 65 | } |
| 68 | 66 | ||
| 69 | layer_state_t layer_state_set_rgb_light(layer_state_t state) { | 67 | layer_state_t layer_state_set_rgb_light(layer_state_t state) { |
