@@ -85,6 +85,8 @@ void suspend_power_down(void) | |||
power_down(WDTO_15MS); | |||
} | |||
__attribute__ ((weak)) void matrix_power_up(void) {} | |||
__attribute__ ((weak)) void matrix_power_down(void) {} | |||
bool suspend_wakeup_condition(void) | |||
{ | |||
matrix_power_up(); |
@@ -62,6 +62,12 @@ static bool has_ghost_in_row(uint8_t row) | |||
#endif | |||
__attribute__ ((weak)) void matrix_setup(void) {} | |||
void keyboard_setup(void) | |||
{ | |||
matrix_setup(); | |||
} | |||
void keyboard_init(void) | |||
{ | |||
timer_init(); |
@@ -58,13 +58,15 @@ static inline bool IS_RELEASED(keyevent_t event) { return (!IS_NOEVENT(event) && | |||
} | |||
/* it runs once at early stage of startup before keyboard_init. */ | |||
void keyboard_setup(void); | |||
/* it runs once after initializing host side protocol, debug and MCU peripherals. */ | |||
void keyboard_init(void); | |||
/* it runs repeatedly in main loop */ | |||
void keyboard_task(void); | |||
/* it runs when host LED status is updated */ | |||
void keyboard_set_leds(uint8_t leds); | |||
__attribute__ ((weak)) void matrix_power_up(void) {} | |||
__attribute__ ((weak)) void matrix_power_down(void) {} | |||
#ifdef __cplusplus | |||
} | |||
#endif |
@@ -43,7 +43,9 @@ extern "C" { | |||
uint8_t matrix_rows(void); | |||
/* number of matrix columns */ | |||
uint8_t matrix_cols(void); | |||
/* intialize matrix for scaning. should be called once. */ | |||
/* should be called at early stage of startup before matrix_init.(optional) */ | |||
void matrix_setup(void); | |||
/* intialize matrix for scaning. */ | |||
void matrix_init(void); | |||
/* scan all key states on matrix */ | |||
uint8_t matrix_scan(void); |
@@ -544,7 +544,7 @@ int8_t sendchar(uint8_t c) | |||
/******************************************************************************* | |||
* main | |||
******************************************************************************/ | |||
static void SetupHardware(void) | |||
static void setup_mcu(void) | |||
{ | |||
/* Disable watchdog if enabled by bootloader/fuses */ | |||
MCUSR &= ~(1 << WDRF); | |||
@@ -552,7 +552,10 @@ static void SetupHardware(void) | |||
/* Disable clock division */ | |||
clock_prescale_set(clock_div_1); | |||
} | |||
static void setup_usb(void) | |||
{ | |||
// Leonardo needs. Without this USB device is not recognized. | |||
USB_Disable(); | |||
@@ -566,7 +569,9 @@ static void SetupHardware(void) | |||
int main(void) __attribute__ ((weak)); | |||
int main(void) | |||
{ | |||
SetupHardware(); | |||
setup_mcu(); | |||
keyboard_setup(); | |||
setup_usb(); | |||
sei(); | |||
/* wait for USB startup & debug output */ |
@@ -46,6 +46,8 @@ int main(void) | |||
// set for 16 MHz clock | |||
CPU_PRESCALE(0); | |||
keyboard_setup(); | |||
// Initialize the USB, and then wait for the host to set configuration. | |||
// If the Teensy is powered without a PC connected to the USB port, | |||
// this will wait forever. |