diff options
Diffstat (limited to 'quantum/rgblight.c')
| -rw-r--r-- | quantum/rgblight.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 59b3f4026..b16c3e7c2 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c | |||
| @@ -98,6 +98,11 @@ rgblight_config_t rgblight_config; | |||
| 98 | rgblight_status_t rgblight_status = {.timer_enabled = false}; | 98 | rgblight_status_t rgblight_status = {.timer_enabled = false}; |
| 99 | bool is_rgblight_initialized = false; | 99 | bool is_rgblight_initialized = false; |
| 100 | 100 | ||
| 101 | #ifdef RGBLIGHT_SLEEP | ||
| 102 | static bool is_suspended; | ||
| 103 | static bool pre_suspend_enabled; | ||
| 104 | #endif | ||
| 105 | |||
| 101 | #ifdef RGBLIGHT_USE_TIMER | 106 | #ifdef RGBLIGHT_USE_TIMER |
| 102 | animation_status_t animation_status = {}; | 107 | animation_status_t animation_status = {}; |
| 103 | #endif | 108 | #endif |
| @@ -709,6 +714,42 @@ void rgblight_unblink_layers(void) { | |||
| 709 | 714 | ||
| 710 | #endif | 715 | #endif |
| 711 | 716 | ||
| 717 | #ifdef RGBLIGHT_SLEEP | ||
| 718 | |||
| 719 | void rgblight_suspend(void) { | ||
| 720 | rgblight_timer_disable(); | ||
| 721 | if (!is_suspended) { | ||
| 722 | is_suspended = true; | ||
| 723 | pre_suspend_enabled = rgblight_config.enable; | ||
| 724 | |||
| 725 | # ifdef RGBLIGHT_LAYER_BLINK | ||
| 726 | // make sure any layer blinks don't come back after suspend | ||
| 727 | rgblight_status.enabled_layer_mask &= ~_blinked_layer_mask; | ||
| 728 | _blinked_layer_mask = 0; | ||
| 729 | # endif | ||
| 730 | |||
| 731 | rgblight_disable_noeeprom(); | ||
| 732 | } | ||
| 733 | } | ||
| 734 | |||
| 735 | void rgblight_wakeup(void) { | ||
| 736 | is_suspended = false; | ||
| 737 | |||
| 738 | if (pre_suspend_enabled) { | ||
| 739 | rgblight_enable_noeeprom(); | ||
| 740 | } | ||
| 741 | # ifdef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF | ||
| 742 | // Need this or else the LEDs won't be set | ||
| 743 | else if (rgblight_status.enabled_layer_mask != 0) { | ||
| 744 | rgblight_set(); | ||
| 745 | } | ||
| 746 | # endif | ||
| 747 | |||
| 748 | rgblight_timer_enable(); | ||
| 749 | } | ||
| 750 | |||
| 751 | #endif | ||
| 752 | |||
| 712 | __attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); } | 753 | __attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); } |
| 713 | 754 | ||
| 714 | #ifndef RGBLIGHT_CUSTOM_DRIVER | 755 | #ifndef RGBLIGHT_CUSTOM_DRIVER |
| @@ -730,8 +771,10 @@ void rgblight_set(void) { | |||
| 730 | 771 | ||
| 731 | # ifdef RGBLIGHT_LAYERS | 772 | # ifdef RGBLIGHT_LAYERS |
| 732 | if (rgblight_layers != NULL | 773 | if (rgblight_layers != NULL |
| 733 | # ifndef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF | 774 | # if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF) |
| 734 | && rgblight_config.enable | 775 | && rgblight_config.enable |
| 776 | # elif defined(RGBLIGHT_SLEEP) | ||
| 777 | && !is_suspended | ||
| 735 | # endif | 778 | # endif |
| 736 | ) { | 779 | ) { |
| 737 | rgblight_layers_write(); | 780 | rgblight_layers_write(); |
