Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lighting Layers should be disabled when suspended #11442

Merged
merged 2 commits into from
Jan 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion quantum/rgblight.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,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
Expand Down Expand Up @@ -708,6 +713,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
Expand All @@ -729,8 +770,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();
Expand Down
2 changes: 2 additions & 0 deletions quantum/rgblight.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
16 changes: 2 additions & 14 deletions tmk_core/common/avr/suspend.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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();
}
Expand Down
16 changes: 2 additions & 14 deletions tmk_core/common/chibios/suspend.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
}