X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Favr%2Fsuspend.c;h=5bca64685493609d9046fdadc359aca147e1094b;hb=48a992f1c037658bbacccefd2709ffdcda8bb345;hp=3aa3d124746b32ebafce45aa5065047df43cec9d;hpb=751719e6cb547db753b2f33f06ee6fa61607d544;p=qmk_firmware.git diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 3aa3d1247..5bca64685 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -10,6 +10,7 @@ #include "timer.h" #include "led.h" #include "host.h" +#include "rgblight_reconfig.h" #ifdef PROTOCOL_LUFA #include "lufa.h" @@ -19,7 +20,7 @@ #include "audio.h" #endif /* AUDIO_ENABLE */ -#ifdef RGBLIGHT_SLEEP +#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) #include "rgblight.h" #endif @@ -55,6 +56,24 @@ void suspend_idle(uint8_t time) sleep_disable(); } + +// 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 * @@ -97,12 +116,14 @@ static void power_down(uint8_t wdto) // This sometimes disables the start-up noise, so it's been disabled // stop_all_notes(); #endif /* AUDIO_ENABLE */ -#ifdef RGBLIGHT_SLEEP +#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_disable(); #endif rgblight_disable_noeeprom(); #endif + suspend_power_down_kb(); + // TODO: more power saving // See PicoPower application note // - I/O port input with pullup @@ -126,6 +147,8 @@ static void power_down(uint8_t wdto) */ void suspend_power_down(void) { + suspend_power_down_kb(); + #ifndef NO_SUSPEND_POWER_DOWN power_down(WDTO_15MS); #endif @@ -144,6 +167,21 @@ bool suspend_wakeup_condition(void) return false; } +/** \brief run user level code immediately after wakeup + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_wakeup_init_user(void) { } + +/** \brief run keyboard level code immediately after wakeup + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_wakeup_init_kb(void) { + suspend_wakeup_init_user(); +} /** \brief run immediately after wakeup * * FIXME: needs doc @@ -156,12 +194,16 @@ void suspend_wakeup_init(void) backlight_init(); #endif led_set(host_keyboard_leds()); -#ifdef RGBLIGHT_SLEEP +#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) +#ifdef BOOTLOADER_TEENSY + wait_ms(10); +#endif rgblight_enable_noeeprom(); #ifdef RGBLIGHT_ANIMATIONS rgblight_timer_enable(); #endif #endif + suspend_wakeup_init_kb(); } #ifndef NO_SUSPEND_POWER_DOWN