|
|
@ -2,12 +2,9 @@ |
|
|
|
#include <avr/sleep.h> |
|
|
|
#include <avr/wdt.h> |
|
|
|
#include <avr/interrupt.h> |
|
|
|
#include "matrix.h" |
|
|
|
#include "action.h" |
|
|
|
#include "suspend.h" |
|
|
|
#include "action.h" |
|
|
|
#include "timer.h" |
|
|
|
#include "led.h" |
|
|
|
#include "host.h" |
|
|
|
|
|
|
|
#ifdef PROTOCOL_LUFA |
|
|
|
# include "lufa.h" |
|
|
@ -78,6 +75,18 @@ static void power_down(uint8_t wdto) { |
|
|
|
// Disable watchdog after sleep |
|
|
|
wdt_disable(); |
|
|
|
} |
|
|
|
|
|
|
|
/* watchdog timeout */ |
|
|
|
ISR(WDT_vect) { |
|
|
|
// compensate timer for sleep |
|
|
|
switch (wdt_timeout) { |
|
|
|
case WDTO_15MS: |
|
|
|
timer_count += 15 + 2; // WDTO_15MS + 2(from observation) |
|
|
|
break; |
|
|
|
default:; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
/** \brief Suspend power down |
|
|
@ -102,18 +111,6 @@ void suspend_power_down(void) { |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
__attribute__((weak)) void matrix_power_up(void) {} |
|
|
|
__attribute__((weak)) void matrix_power_down(void) {} |
|
|
|
bool suspend_wakeup_condition(void) { |
|
|
|
matrix_power_up(); |
|
|
|
matrix_scan(); |
|
|
|
matrix_power_down(); |
|
|
|
for (uint8_t r = 0; r < MATRIX_ROWS; r++) { |
|
|
|
if (matrix_get_row(r)) return true; |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/** \brief run immediately after wakeup |
|
|
|
* |
|
|
|
* FIXME: needs doc |
|
|
@ -124,16 +121,3 @@ void suspend_wakeup_init(void) { |
|
|
|
|
|
|
|
suspend_wakeup_init_quantum(); |
|
|
|
} |
|
|
|
|
|
|
|
#if !defined(NO_SUSPEND_POWER_DOWN) && defined(WDT_vect) |
|
|
|
/* watchdog timeout */ |
|
|
|
ISR(WDT_vect) { |
|
|
|
// compensate timer for sleep |
|
|
|
switch (wdt_timeout) { |
|
|
|
case WDTO_15MS: |
|
|
|
timer_count += 15 + 2; // WDTO_15MS + 2(from observation) |
|
|
|
break; |
|
|
|
default:; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |