|
|
|
|
|
|
|
|
this software. |
|
|
this software. |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
#include <avr/sleep.h> |
|
|
|
|
|
#include <avr/wdt.h> |
|
|
#include "report.h" |
|
|
#include "report.h" |
|
|
#include "host.h" |
|
|
#include "host.h" |
|
|
#include "host_driver.h" |
|
|
#include "host_driver.h" |
|
|
#include "keyboard.h" |
|
|
#include "keyboard.h" |
|
|
|
|
|
#include "action.h" |
|
|
|
|
|
#include "matrix.h" |
|
|
|
|
|
#include "led.h" |
|
|
#include "sendchar.h" |
|
|
#include "sendchar.h" |
|
|
#include "debug.h" |
|
|
#include "debug.h" |
|
|
|
|
|
#ifdef SLEEP_LED_ENABLE |
|
|
|
|
|
#include "sleep_led.h" |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
#include "descriptor.h" |
|
|
#include "descriptor.h" |
|
|
#include "lufa.h" |
|
|
#include "lufa.h" |
|
|
|
|
|
|
|
|
* 2) EVENT_USB_Device_Reset |
|
|
* 2) EVENT_USB_Device_Reset |
|
|
* 3) EVENT_USB_Device_Wake |
|
|
* 3) EVENT_USB_Device_Wake |
|
|
*/ |
|
|
*/ |
|
|
#include "led.h" |
|
|
|
|
|
#include "matrix.h" |
|
|
|
|
|
void EVENT_USB_Device_Connect(void) |
|
|
void EVENT_USB_Device_Connect(void) |
|
|
{ |
|
|
{ |
|
|
|
|
|
led_set(0x1f); // all on |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void EVENT_USB_Device_Disconnect(void) |
|
|
void EVENT_USB_Device_Disconnect(void) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void EVENT_USB_Device_Suspend() |
|
|
void EVENT_USB_Device_Suspend() |
|
|
{ |
|
|
{ |
|
|
|
|
|
#ifdef SLEEP_LED_ENABLE |
|
|
|
|
|
sleep_led_enable(); |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#include "action.h" |
|
|
|
|
|
void EVENT_USB_Device_WakeUp() |
|
|
void EVENT_USB_Device_WakeUp() |
|
|
{ |
|
|
{ |
|
|
// initialize |
|
|
// initialize |
|
|
matrix_init(); |
|
|
matrix_init(); |
|
|
clear_keyboard(); |
|
|
clear_keyboard(); |
|
|
|
|
|
|
|
|
// turn off LED |
|
|
|
|
|
led_set(0); |
|
|
|
|
|
|
|
|
#ifdef SLEEP_LED_ENABLE |
|
|
|
|
|
sleep_led_disable(); |
|
|
|
|
|
#endif |
|
|
|
|
|
led_set(host_keyboard_leds()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void EVENT_USB_Device_StartOfFrame(void) |
|
|
void EVENT_USB_Device_StartOfFrame(void) |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "matrix.h" |
|
|
|
|
|
static bool wakeup_condition(void) |
|
|
static bool wakeup_condition(void) |
|
|
{ |
|
|
{ |
|
|
matrix_scan(); |
|
|
matrix_scan(); |
|
|
|
|
|
|
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#include <avr/sleep.h> |
|
|
|
|
|
#include <avr/wdt.h> |
|
|
|
|
|
#define wdt_intr_enable(value) \ |
|
|
#define wdt_intr_enable(value) \ |
|
|
__asm__ __volatile__ ( \ |
|
|
__asm__ __volatile__ ( \ |
|
|
"in __tmp_reg__,__SREG__" "\n\t" \ |
|
|
"in __tmp_reg__,__SREG__" "\n\t" \ |
|
|
|
|
|
|
|
|
SetupHardware(); |
|
|
SetupHardware(); |
|
|
keyboard_init(); |
|
|
keyboard_init(); |
|
|
host_set_driver(&lufa_driver); |
|
|
host_set_driver(&lufa_driver); |
|
|
|
|
|
#ifdef SLEEP_LED_ENABLE |
|
|
|
|
|
sleep_led_init(); |
|
|
|
|
|
#endif |
|
|
sei(); |
|
|
sei(); |
|
|
|
|
|
|
|
|
while (1) { |
|
|
while (1) { |
|
|
// while suspend |
|
|
// while suspend |
|
|
while (USB_DeviceState == DEVICE_STATE_Suspended) { |
|
|
while (USB_DeviceState == DEVICE_STATE_Suspended) { |
|
|
|
|
|
#ifndef NO_SUSPEND_POWER_DOWN |
|
|
// Enable watchdog to wake from MCU sleep |
|
|
// Enable watchdog to wake from MCU sleep |
|
|
cli(); |
|
|
cli(); |
|
|
wdt_reset(); |
|
|
wdt_reset(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Disable watchdog after sleep |
|
|
// Disable watchdog after sleep |
|
|
wdt_disable(); |
|
|
wdt_disable(); |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
// Send request of USB Wakeup from Suspend to host |
|
|
// Send request of USB Wakeup from Suspend to host |
|
|
if (USB_Device_RemoteWakeupEnabled) { |
|
|
if (USB_Device_RemoteWakeupEnabled) { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* watchdog timeout during sleep */ |
|
|
|
|
|
|
|
|
#ifndef NO_SUSPEND_POWER_DOWN |
|
|
|
|
|
/* watchdog timeout */ |
|
|
ISR(WDT_vect) |
|
|
ISR(WDT_vect) |
|
|
{ |
|
|
{ |
|
|
|
|
|
/* wakeup from MCU sleep mode */ |
|
|
|
|
|
/* |
|
|
// blink LED |
|
|
// blink LED |
|
|
static uint8_t led_state = 0; |
|
|
static uint8_t led_state = 0; |
|
|
static uint8_t led_count = 0; |
|
|
static uint8_t led_count = 0; |
|
|
|
|
|
|
|
|
if ((led_count & 0x07) == 0) { |
|
|
if ((led_count & 0x07) == 0) { |
|
|
led_set((led_state ^= (1<<USB_LED_CAPS_LOCK))); |
|
|
led_set((led_state ^= (1<<USB_LED_CAPS_LOCK))); |
|
|
} |
|
|
} |
|
|
|
|
|
*/ |
|
|
} |
|
|
} |
|
|
|
|
|
#endif |