diff options
author | QMK Bot <hello@qmk.fm> | 2021-01-11 08:07:48 +0000 |
---|---|---|
committer | QMK Bot <hello@qmk.fm> | 2021-01-11 08:07:48 +0000 |
commit | 6f9db2b48e35e13930700152738579eb5f94a839 (patch) | |
tree | 901743c846c60d4d5b565e0796157c9dbdfe58b8 | |
parent | 4fdde323466a80d8abc204e093038a00047d0097 (diff) | |
parent | 4d96b85b6f39e89bdcc74853958f91153f27bfc1 (diff) |
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r-- | quantum/rgblight.c | 45 | ||||
-rw-r--r-- | quantum/rgblight.h | 2 | ||||
-rw-r--r-- | tmk_core/common/avr/suspend.c | 16 | ||||
-rw-r--r-- | tmk_core/common/chibios/suspend.c | 16 |
4 files changed, 50 insertions, 29 deletions
diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 59b3f40264..b16c3e7c26 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -98,6 +98,11 @@ rgblight_config_t rgblight_config; rgblight_status_t rgblight_status = {.timer_enabled = false}; bool is_rgblight_initialized = false; +#ifdef RGBLIGHT_SLEEP +static bool is_suspended; +static bool pre_suspend_enabled; +#endif + #ifdef RGBLIGHT_USE_TIMER animation_status_t animation_status = {}; #endif @@ -709,6 +714,42 @@ void rgblight_unblink_layers(void) { #endif +#ifdef RGBLIGHT_SLEEP + +void rgblight_suspend(void) { + rgblight_timer_disable(); + if (!is_suspended) { + is_suspended = true; + pre_suspend_enabled = rgblight_config.enable; + +# ifdef RGBLIGHT_LAYER_BLINK + // make sure any layer blinks don't come back after suspend + rgblight_status.enabled_layer_mask &= ~_blinked_layer_mask; + _blinked_layer_mask = 0; +# endif + + rgblight_disable_noeeprom(); + } +} + +void rgblight_wakeup(void) { + is_suspended = false; + + if (pre_suspend_enabled) { + rgblight_enable_noeeprom(); + } +# ifdef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF + // Need this or else the LEDs won't be set + else if (rgblight_status.enabled_layer_mask != 0) { + rgblight_set(); + } +# endif + + rgblight_timer_enable(); +} + +#endif + __attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); } #ifndef RGBLIGHT_CUSTOM_DRIVER @@ -730,8 +771,10 @@ void rgblight_set(void) { # ifdef RGBLIGHT_LAYERS if (rgblight_layers != NULL -# ifndef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF +# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF) && rgblight_config.enable +# elif defined(RGBLIGHT_SLEEP) + && !is_suspended # endif ) { rgblight_layers_write(); diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 3f0c22be34..b9306e4d2c 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -357,6 +357,8 @@ HSV rgblight_get_hsv(void); /* === qmk_firmware (core)internal Functions === */ void rgblight_init(void); +void rgblight_suspend(void); +void rgblight_wakeup(void); uint32_t rgblight_read_dword(void); void rgblight_update_dword(uint32_t dword); uint32_t eeconfig_read_rgblight(void); diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index aa0d42680a..86c3df040a 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -24,9 +24,6 @@ #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) # include "rgblight.h" -extern rgblight_config_t rgblight_config; -static bool rgblight_enabled; -static bool is_suspended; #endif /** \brief Suspend idle @@ -104,12 +101,7 @@ static void power_down(uint8_t wdto) { // stop_all_notes(); # endif /* AUDIO_ENABLE */ # if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) - rgblight_timer_disable(); - if (!is_suspended) { - is_suspended = true; - rgblight_enabled = rgblight_config.enable; - rgblight_disable_noeeprom(); - } + rgblight_suspend(); # endif suspend_power_down_kb(); @@ -177,11 +169,7 @@ void suspend_wakeup_init(void) { #endif led_set(host_keyboard_leds()); #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) - is_suspended = false; - if (rgblight_enabled) { - rgblight_enable_noeeprom(); - } - rgblight_timer_enable(); + rgblight_wakeup(); #endif suspend_wakeup_init_kb(); } diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c index 24efb0ac4c..796056019f 100644 --- a/tmk_core/common/chibios/suspend.c +++ b/tmk_core/common/chibios/suspend.c @@ -18,9 +18,6 @@ #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) # include "rgblight.h" -extern rgblight_config_t rgblight_config; -static bool rgblight_enabled; -static bool is_suspended; #endif /** \brief suspend idle @@ -66,12 +63,7 @@ void suspend_power_down(void) { // shouldn't power down TPM/FTM if we want a breathing LED // also shouldn't power down USB #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) - rgblight_timer_disable(); - if (!is_suspended) { - is_suspended = true; - rgblight_enabled = rgblight_config.enable; - rgblight_disable_noeeprom(); - } + rgblight_suspend(); #endif suspend_power_down_kb(); @@ -136,11 +128,7 @@ void suspend_wakeup_init(void) { #endif /* BACKLIGHT_ENABLE */ led_set(host_keyboard_leds()); #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) - is_suspended = false; - if (rgblight_enabled) { - rgblight_enable_noeeprom(); - } - rgblight_timer_enable(); + rgblight_wakeup(); #endif suspend_wakeup_init_kb(); } |