X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Favr%2Fsuspend.c;h=2259201b5d99cf37c6b9bf7630c731b3606cd40c;hb=94c4b6bd740bf1dbc2ff45a4a5f6385d06440ef0;hp=e295dbe18bd226e3fa1b1c8eaea215ab37fa1508;hpb=499e3096e9021b88a6a705ad7034ccbacb97b975;p=qmk_firmware.git diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index e295dbe18..2259201b5 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -9,6 +9,8 @@ #include "suspend.h" #include "timer.h" #include "led.h" +#include "host.h" +#include "rgblight_reconfig.h" #ifdef PROTOCOL_LUFA #include "lufa.h" @@ -18,6 +20,12 @@ #include "audio.h" #endif /* AUDIO_ENABLE */ +#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 #define wdt_intr_enable(value) \ @@ -37,8 +45,11 @@ __asm__ __volatile__ ( \ ) -void suspend_idle(uint8_t time) -{ +/** \brief Suspend idle + * + * FIXME: needs doc + */ +void suspend_idle(uint8_t time) { cli(); set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); @@ -47,7 +58,27 @@ void suspend_idle(uint8_t time) sleep_disable(); } -/* Power down MCU with watchdog timer + +// TODO: This needs some cleanup + +/** \brief Run keyboard level Power down + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_power_down_user (void) { } +/** \brief Run keyboard level Power down + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_power_down_kb(void) { + suspend_power_down_user(); +} + +#ifndef NO_SUSPEND_POWER_DOWN +/** \brief Power down MCU with watchdog timer + * * wdto: watchdog timer timeout defined in * WDTO_15MS * WDTO_30MS @@ -61,26 +92,49 @@ void suspend_idle(uint8_t time) * WDTO_8S */ static uint8_t wdt_timeout = 0; -static void power_down(uint8_t wdto) -{ + +/** \brief Power down + * + * FIXME: needs doc + */ +static void power_down(uint8_t wdto) { #ifdef PROTOCOL_LUFA - if (USB_DeviceState == DEVICE_STATE_Configured) return; + if (USB_DeviceState == DEVICE_STATE_Configured) return; #endif - wdt_timeout = wdto; + wdt_timeout = wdto; - // Watchdog Interrupt Mode - wdt_intr_enable(wdto); + // Watchdog Interrupt Mode + wdt_intr_enable(wdto); #ifdef BACKLIGHT_ENABLE - backlight_set(0); + backlight_set(0); #endif - // Turn off LED indicators - led_set(0); + // Turn off LED indicators + uint8_t leds_off = 0; +#if defined(BACKLIGHT_CAPS_LOCK) && defined(BACKLIGHT_ENABLE) + if (is_backlight_enabled()) { + // Don't try to turn off Caps Lock indicator as it is backlight and backlight is already off + leds_off |= (1<