~ruther/qmk_firmware

4d96b85b6f39e89bdcc74853958f91153f27bfc1 — Joshua Diamond 4 years ago d877f40
Lighting Layers should be disabled when suspended (#11442)

* Lighting Layers should be disabled when suspended

* bugfixes
M quantum/rgblight.c => quantum/rgblight.c +44 -1
@@ 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


@@ 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


@@ 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();

M quantum/rgblight.h => quantum/rgblight.h +2 -0
@@ 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);

M tmk_core/common/avr/suspend.c => tmk_core/common/avr/suspend.c +2 -14
@@ 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();
}

M tmk_core/common/chibios/suspend.c => tmk_core/common/chibios/suspend.c +2 -14
@@ 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();
}