diff options
| -rw-r--r-- | quantum/quantum.c | 96 | ||||
| -rw-r--r-- | tmk_core/common/avr/suspend.c | 98 | ||||
| -rw-r--r-- | tmk_core/common/chibios/suspend.c | 85 | ||||
| -rw-r--r-- | tmk_core/common/suspend.h | 2 | 
4 files changed, 102 insertions, 179 deletions
| diff --git a/quantum/quantum.c b/quantum/quantum.c index e60378afe4..9d77fa4383 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -480,3 +480,99 @@ void api_send_unicode(uint32_t unicode) {  __attribute__((weak)) void startup_user() {}  __attribute__((weak)) void shutdown_user() {} + +/** \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(); } + +void suspend_power_down_quantum(void) { +#ifndef NO_SUSPEND_POWER_DOWN +// Turn off backlight +#    ifdef BACKLIGHT_ENABLE +    backlight_set(0); +#    endif + +#    ifdef LED_MATRIX_ENABLE +    led_matrix_task(); +#    endif +#    ifdef RGB_MATRIX_ENABLE +    rgb_matrix_task(); +#    endif + +    // 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 << USB_LED_CAPS_LOCK); +    } +#    endif +    led_set(leds_off); + +// Turn off audio +#    ifdef AUDIO_ENABLE +    stop_all_notes(); +#    endif + +// Turn off underglow +#    if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) +    rgblight_suspend(); +#    endif + +#    if defined(LED_MATRIX_ENABLE) +    led_matrix_set_suspend_state(true); +#    endif +#    if defined(RGB_MATRIX_ENABLE) +    rgb_matrix_set_suspend_state(true); +#    endif + +#    ifdef OLED_ENABLE +    oled_off(); +#    endif +#    ifdef ST7565_ENABLE +    st7565_off(); +#    endif +#endif +} + +/** \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(); } + +__attribute__((weak)) void suspend_wakeup_init_quantum(void) { +// Turn on backlight +#ifdef BACKLIGHT_ENABLE +    backlight_init(); +#endif + +    // Restore LED indicators +    led_set(host_keyboard_leds()); + +// Wake up underglow +#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) +    rgblight_wakeup(); +#endif + +#if defined(LED_MATRIX_ENABLE) +    led_matrix_set_suspend_state(false); +#endif +#if defined(RGB_MATRIX_ENABLE) +    rgb_matrix_set_suspend_state(false); +#endif +    suspend_wakeup_init_kb(); +} diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 690d7f38ca..b614746e6c 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -16,25 +16,6 @@  #    include "vusb.h"  #endif -#ifdef BACKLIGHT_ENABLE -#    include "backlight.h" -#endif - -#ifdef AUDIO_ENABLE -#    include "audio.h" -#endif /* AUDIO_ENABLE */ - -#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) -#    include "rgblight.h" -#endif - -#ifdef LED_MATRIX_ENABLE -#    include "led_matrix.h" -#endif -#ifdef RGB_MATRIX_ENABLE -#    include "rgb_matrix.h" -#endif -  /** \brief Suspend idle   *   * FIXME: needs doc @@ -50,17 +31,6 @@ void suspend_idle(uint8_t time) {  // 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(); } -  #if !defined(NO_SUSPEND_POWER_DOWN) && defined(WDT_vect)  // clang-format off @@ -135,41 +105,9 @@ void suspend_power_down(void) {      if (!vusb_suspended) return;  #endif -    suspend_power_down_kb(); +    suspend_power_down_quantum();  #ifndef NO_SUSPEND_POWER_DOWN -    // Turn off backlight -#    ifdef BACKLIGHT_ENABLE -    backlight_set(0); -#    endif - -    // 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 << USB_LED_CAPS_LOCK); -    } -#    endif -    led_set(leds_off); - -    // Turn off audio -#    ifdef AUDIO_ENABLE -    stop_all_notes(); -#    endif - -    // Turn off underglow -#    if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) -    rgblight_suspend(); -#    endif - -#    if defined(LED_MATRIX_ENABLE) -    led_matrix_set_suspend_state(true); -#    endif -#    if defined(RGB_MATRIX_ENABLE) -    rgb_matrix_set_suspend_state(true); -#    endif -      // Enter sleep state if possible (ie, the MCU has a watchdog timeout interrupt)  #    if defined(WDT_vect)      power_down(WDTO_15MS); @@ -189,18 +127,6 @@ 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 @@ -209,27 +135,7 @@ void suspend_wakeup_init(void) {      // clear keyboard state      clear_keyboard(); -    // Turn on backlight -#ifdef BACKLIGHT_ENABLE -    backlight_init(); -#endif - -    // Restore LED indicators -    led_set(host_keyboard_leds()); - -    // Wake up underglow -#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) -    rgblight_wakeup(); -#endif - -#if defined(LED_MATRIX_ENABLE) -    led_matrix_set_suspend_state(false); -#endif -#if defined(RGB_MATRIX_ENABLE) -    rgb_matrix_set_suspend_state(false); -#endif - -    suspend_wakeup_init_kb(); +    suspend_wakeup_init_quantum();  }  #if !defined(NO_SUSPEND_POWER_DOWN) && defined(WDT_vect) diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c index 38517e06f0..991fe6e08b 100644 --- a/tmk_core/common/chibios/suspend.c +++ b/tmk_core/common/chibios/suspend.c @@ -12,25 +12,6 @@  #include "led.h"  #include "wait.h" -#ifdef AUDIO_ENABLE -#    include "audio.h" -#endif /* AUDIO_ENABLE */ - -#ifdef BACKLIGHT_ENABLE -#    include "backlight.h" -#endif - -#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) -#    include "rgblight.h" -#endif - -#ifdef LED_MATRIX_ENABLE -#    include "led_matrix.h" -#endif -#ifdef RGB_MATRIX_ENABLE -#    include "rgb_matrix.h" -#endif -  /** \brief suspend idle   *   * FIXME: needs doc @@ -40,61 +21,12 @@ void suspend_idle(uint8_t time) {      wait_ms(time);  } -/** \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(); } -  /** \brief suspend power down   *   * FIXME: needs doc   */  void suspend_power_down(void) { -#ifdef BACKLIGHT_ENABLE -    backlight_set(0); -#endif - -#ifdef LED_MATRIX_ENABLE -    led_matrix_task(); -#endif -#ifdef RGB_MATRIX_ENABLE -    rgb_matrix_task(); -#endif - -    // 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 << USB_LED_CAPS_LOCK); -    } -#endif -    led_set(leds_off); - -    // TODO: figure out what to power down and how -    // 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_suspend(); -#endif - -#if defined(LED_MATRIX_ENABLE) -    led_matrix_set_suspend_state(true); -#endif -#if defined(RGB_MATRIX_ENABLE) -    rgb_matrix_set_suspend_state(true); -#endif -#ifdef AUDIO_ENABLE -    stop_all_notes(); -#endif /* AUDIO_ENABLE */ - -    suspend_power_down_kb(); +    suspend_power_down_quantum();      // on AVR, this enables the watchdog for 15ms (max), and goes to      // SLEEP_MODE_PWR_DOWN @@ -151,19 +83,6 @@ void suspend_wakeup_init(void) {      host_system_send(0);      host_consumer_send(0);  #endif /* EXTRAKEY_ENABLE */ -#ifdef BACKLIGHT_ENABLE -    backlight_init(); -#endif /* BACKLIGHT_ENABLE */ -    led_set(host_keyboard_leds()); -#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) -    rgblight_wakeup(); -#endif -#if defined(LED_MATRIX_ENABLE) -    led_matrix_set_suspend_state(false); -#endif -#if defined(RGB_MATRIX_ENABLE) -    rgb_matrix_set_suspend_state(false); -#endif -    suspend_wakeup_init_kb(); +    suspend_wakeup_init_quantum();  } diff --git a/tmk_core/common/suspend.h b/tmk_core/common/suspend.h index 95845e4b63..081735f90e 100644 --- a/tmk_core/common/suspend.h +++ b/tmk_core/common/suspend.h @@ -10,8 +10,10 @@ void suspend_wakeup_init(void);  void suspend_wakeup_init_user(void);  void suspend_wakeup_init_kb(void); +void suspend_wakeup_init_quantum(void);  void suspend_power_down_user(void);  void suspend_power_down_kb(void); +void suspend_power_down_quantum(void);  #ifndef USB_SUSPEND_WAKEUP_DELAY  #    define USB_SUSPEND_WAKEUP_DELAY 0 | 
