Skip to content

Commit

Permalink
Lighting Layers should be disabled when suspended (qmk#11442)
Browse files Browse the repository at this point in the history
* Lighting Layers should be disabled when suspended

* bugfixes
  • Loading branch information
spidey3 authored and drashna committed Feb 2, 2021
1 parent f1a8269 commit dc11c3d
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 29 deletions.
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 @@ -710,6 +715,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 @@ -731,8 +772,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 @@ -103,12 +100,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

// TODO: more power saving
Expand Down Expand Up @@ -176,11 +168,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 @@ -22,9 +22,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 @@ -70,12 +67,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
#ifdef AUDIO_ENABLE
stop_all_notes();
Expand Down Expand Up @@ -143,11 +135,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();
}

0 comments on commit dc11c3d

Please sign in to comment.