aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Diamond <josh@windowoffire.com>2021-01-11 03:07:09 -0500
committerGitHub <noreply@github.com>2021-01-11 00:07:09 -0800
commit4d96b85b6f39e89bdcc74853958f91153f27bfc1 (patch)
tree55bec712ab1e48867c68809aed89988e0d7c5a8f
parentd877f40b7076ed1594aef61aff7940793b896403 (diff)
downloadqmk_firmware-4d96b85b6f39e89bdcc74853958f91153f27bfc1.tar.gz
qmk_firmware-4d96b85b6f39e89bdcc74853958f91153f27bfc1.zip
Lighting Layers should be disabled when suspended (#11442)
* Lighting Layers should be disabled when suspended * bugfixes
-rw-r--r--quantum/rgblight.c45
-rw-r--r--quantum/rgblight.h2
-rw-r--r--tmk_core/common/avr/suspend.c16
-rw-r--r--tmk_core/common/chibios/suspend.c16
4 files changed, 50 insertions, 29 deletions
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index beeef6568..d856f6d6c 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -95,6 +95,11 @@ rgblight_config_t rgblight_config;
95rgblight_status_t rgblight_status = {.timer_enabled = false}; 95rgblight_status_t rgblight_status = {.timer_enabled = false};
96bool is_rgblight_initialized = false; 96bool is_rgblight_initialized = false;
97 97
98#ifdef RGBLIGHT_SLEEP
99static bool is_suspended;
100static bool pre_suspend_enabled;
101#endif
102
98#ifdef RGBLIGHT_USE_TIMER 103#ifdef RGBLIGHT_USE_TIMER
99animation_status_t animation_status = {}; 104animation_status_t animation_status = {};
100#endif 105#endif
@@ -708,6 +713,42 @@ void rgblight_unblink_layers(void) {
708 713
709#endif 714#endif
710 715
716#ifdef RGBLIGHT_SLEEP
717
718void rgblight_suspend(void) {
719 rgblight_timer_disable();
720 if (!is_suspended) {
721 is_suspended = true;
722 pre_suspend_enabled = rgblight_config.enable;
723
724# ifdef RGBLIGHT_LAYER_BLINK
725 // make sure any layer blinks don't come back after suspend
726 rgblight_status.enabled_layer_mask &= ~_blinked_layer_mask;
727 _blinked_layer_mask = 0;
728# endif
729
730 rgblight_disable_noeeprom();
731 }
732}
733
734void rgblight_wakeup(void) {
735 is_suspended = false;
736
737 if (pre_suspend_enabled) {
738 rgblight_enable_noeeprom();
739 }
740# ifdef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
741 // Need this or else the LEDs won't be set
742 else if (rgblight_status.enabled_layer_mask != 0) {
743 rgblight_set();
744 }
745# endif
746
747 rgblight_timer_enable();
748}
749
750#endif
751
711__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); } 752__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); }
712 753
713#ifndef RGBLIGHT_CUSTOM_DRIVER 754#ifndef RGBLIGHT_CUSTOM_DRIVER
@@ -729,8 +770,10 @@ void rgblight_set(void) {
729 770
730# ifdef RGBLIGHT_LAYERS 771# ifdef RGBLIGHT_LAYERS
731 if (rgblight_layers != NULL 772 if (rgblight_layers != NULL
732# ifndef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF 773# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF)
733 && rgblight_config.enable 774 && rgblight_config.enable
775# elif defined(RGBLIGHT_SLEEP)
776 && !is_suspended
734# endif 777# endif
735 ) { 778 ) {
736 rgblight_layers_write(); 779 rgblight_layers_write();
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index c02fd4f37..efbffa7fd 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -357,6 +357,8 @@ HSV rgblight_get_hsv(void);
357 357
358/* === qmk_firmware (core)internal Functions === */ 358/* === qmk_firmware (core)internal Functions === */
359void rgblight_init(void); 359void rgblight_init(void);
360void rgblight_suspend(void);
361void rgblight_wakeup(void);
360uint32_t rgblight_read_dword(void); 362uint32_t rgblight_read_dword(void);
361void rgblight_update_dword(uint32_t dword); 363void rgblight_update_dword(uint32_t dword);
362uint32_t eeconfig_read_rgblight(void); 364uint32_t eeconfig_read_rgblight(void);
diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c
index aa0d42680..86c3df040 100644
--- a/tmk_core/common/avr/suspend.c
+++ b/tmk_core/common/avr/suspend.c
@@ -24,9 +24,6 @@
24 24
25#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 25#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
26# include "rgblight.h" 26# include "rgblight.h"
27extern rgblight_config_t rgblight_config;
28static bool rgblight_enabled;
29static bool is_suspended;
30#endif 27#endif
31 28
32/** \brief Suspend idle 29/** \brief Suspend idle
@@ -104,12 +101,7 @@ static void power_down(uint8_t wdto) {
104 // stop_all_notes(); 101 // stop_all_notes();
105# endif /* AUDIO_ENABLE */ 102# endif /* AUDIO_ENABLE */
106# if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 103# if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
107 rgblight_timer_disable(); 104 rgblight_suspend();
108 if (!is_suspended) {
109 is_suspended = true;
110 rgblight_enabled = rgblight_config.enable;
111 rgblight_disable_noeeprom();
112 }
113# endif 105# endif
114 suspend_power_down_kb(); 106 suspend_power_down_kb();
115 107
@@ -177,11 +169,7 @@ void suspend_wakeup_init(void) {
177#endif 169#endif
178 led_set(host_keyboard_leds()); 170 led_set(host_keyboard_leds());
179#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 171#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
180 is_suspended = false; 172 rgblight_wakeup();
181 if (rgblight_enabled) {
182 rgblight_enable_noeeprom();
183 }
184 rgblight_timer_enable();
185#endif 173#endif
186 suspend_wakeup_init_kb(); 174 suspend_wakeup_init_kb();
187} 175}
diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c
index 24efb0ac4..796056019 100644
--- a/tmk_core/common/chibios/suspend.c
+++ b/tmk_core/common/chibios/suspend.c
@@ -18,9 +18,6 @@
18 18
19#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 19#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
20# include "rgblight.h" 20# include "rgblight.h"
21extern rgblight_config_t rgblight_config;
22static bool rgblight_enabled;
23static bool is_suspended;
24#endif 21#endif
25 22
26/** \brief suspend idle 23/** \brief suspend idle
@@ -66,12 +63,7 @@ void suspend_power_down(void) {
66 // shouldn't power down TPM/FTM if we want a breathing LED 63 // shouldn't power down TPM/FTM if we want a breathing LED
67 // also shouldn't power down USB 64 // also shouldn't power down USB
68#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 65#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
69 rgblight_timer_disable(); 66 rgblight_suspend();
70 if (!is_suspended) {
71 is_suspended = true;
72 rgblight_enabled = rgblight_config.enable;
73 rgblight_disable_noeeprom();
74 }
75#endif 67#endif
76 68
77 suspend_power_down_kb(); 69 suspend_power_down_kb();
@@ -136,11 +128,7 @@ void suspend_wakeup_init(void) {
136#endif /* BACKLIGHT_ENABLE */ 128#endif /* BACKLIGHT_ENABLE */
137 led_set(host_keyboard_leds()); 129 led_set(host_keyboard_leds());
138#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) 130#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
139 is_suspended = false; 131 rgblight_wakeup();
140 if (rgblight_enabled) {
141 rgblight_enable_noeeprom();
142 }
143 rgblight_timer_enable();
144#endif 132#endif
145 suspend_wakeup_init_kb(); 133 suspend_wakeup_init_kb();
146} 134}