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