forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Conflicts: .gitignore common.mk common/debug_config.h common/print.h
- Loading branch information
Showing
92 changed files
with
4,462 additions
and
402 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,3 +9,5 @@ | |
*.sym | ||
tags | ||
*~ | ||
build/ | ||
*.bak |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
#include <stdbool.h> | ||
#include <avr/sleep.h> | ||
#include <avr/wdt.h> | ||
#include <avr/interrupt.h> | ||
#include "matrix.h" | ||
#include "action.h" | ||
#include "backlight.h" | ||
#include "suspend_avr.h" | ||
#include "suspend.h" | ||
#ifdef PROTOCOL_LUFA | ||
#include "lufa.h" | ||
#endif | ||
|
||
|
||
#define wdt_intr_enable(value) \ | ||
__asm__ __volatile__ ( \ | ||
"in __tmp_reg__,__SREG__" "\n\t" \ | ||
"cli" "\n\t" \ | ||
"wdr" "\n\t" \ | ||
"sts %0,%1" "\n\t" \ | ||
"out __SREG__,__tmp_reg__" "\n\t" \ | ||
"sts %0,%2" "\n\t" \ | ||
: /* no outputs */ \ | ||
: "M" (_SFR_MEM_ADDR(_WD_CONTROL_REG)), \ | ||
"r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)), \ | ||
"r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \ | ||
_BV(WDIE) | (value & 0x07)) ) \ | ||
: "r0" \ | ||
) | ||
|
||
|
||
void suspend_idle(uint8_t time) | ||
{ | ||
cli(); | ||
set_sleep_mode(SLEEP_MODE_IDLE); | ||
sleep_enable(); | ||
sei(); | ||
sleep_cpu(); | ||
sleep_disable(); | ||
} | ||
|
||
/* Power down MCU with watchdog timer | ||
* wdto: watchdog timer timeout defined in <avr/wdt.h> | ||
* WDTO_15MS | ||
* WDTO_30MS | ||
* WDTO_60MS | ||
* WDTO_120MS | ||
* WDTO_250MS | ||
* WDTO_500MS | ||
* WDTO_1S | ||
* WDTO_2S | ||
* WDTO_4S | ||
* WDTO_8S | ||
*/ | ||
void suspend_power_down(uint8_t wdto) | ||
{ | ||
#ifdef PROTOCOL_LUFA | ||
if (USB_DeviceState == DEVICE_STATE_Configured) return; | ||
#endif | ||
|
||
// Watchdog Interrupt Mode | ||
wdt_intr_enable(wdto); | ||
|
||
// TODO: more power saving | ||
// See PicoPower application note | ||
// - I/O port input with pullup | ||
// - prescale clock | ||
// - BOD disable | ||
// - Power Reduction Register PRR | ||
|
||
set_sleep_mode(SLEEP_MODE_PWR_DOWN); | ||
sleep_enable(); | ||
sei(); | ||
sleep_cpu(); | ||
sleep_disable(); | ||
|
||
// Disable watchdog after sleep | ||
wdt_disable(); | ||
} | ||
|
||
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; | ||
} | ||
|
||
// run immediately after wakeup | ||
void suspend_wakeup_init(void) | ||
{ | ||
// clear keyboard state | ||
clear_keyboard(); | ||
#ifdef BACKLIGHT_ENABLE | ||
backlight_init(); | ||
#endif | ||
} | ||
|
||
#ifndef NO_SUSPEND_POWER_DOWN | ||
/* watchdog timeout */ | ||
ISR(WDT_vect) | ||
{ | ||
/* wakeup from MCU sleep mode */ | ||
/* | ||
// blink LED | ||
static uint8_t led_state = 0; | ||
static uint8_t led_count = 0; | ||
led_count++; | ||
if ((led_count & 0x07) == 0) { | ||
led_set((led_state ^= (1<<USB_LED_CAPS_LOCK))); | ||
} | ||
*/ | ||
} | ||
#endif |
Oops, something went wrong.