Lighting Layers should be disabled when suspended (#11442)
* Lighting Layers should be disabled when suspended * bugfixes
This commit is contained in:
		
							parent
							
								
									d877f40b70
								
							
						
					
					
						commit
						4d96b85b6f
					
				
					 4 changed files with 50 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue