68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
|
#include <avr/io.h>
|
||
|
#include <avr/power.h>
|
||
|
#include <avr/wdt.h>
|
||
|
#include "lufa.h"
|
||
|
#include "print.h"
|
||
|
#include "sendchar.h"
|
||
|
|
||
|
|
||
|
static void SetupHardware(void)
|
||
|
{
|
||
|
/* Disable watchdog if enabled by bootloader/fuses */
|
||
|
MCUSR &= ~(1 << WDRF);
|
||
|
wdt_disable();
|
||
|
|
||
|
/* Disable clock division */
|
||
|
clock_prescale_set(clock_div_1);
|
||
|
|
||
|
// Leonardo needs. Without this USB device is not recognized.
|
||
|
USB_Disable();
|
||
|
|
||
|
USB_Init();
|
||
|
|
||
|
// for Console_Task
|
||
|
USB_Device_EnableSOFEvents();
|
||
|
print_set_sendchar(sendchar);
|
||
|
}
|
||
|
|
||
|
int main(void) __attribute__ ((weak));
|
||
|
int main(void)
|
||
|
{
|
||
|
SetupHardware();
|
||
|
sei();
|
||
|
|
||
|
/* wait for USB startup & debug output */
|
||
|
while (USB_DeviceState != DEVICE_STATE_Configured) {
|
||
|
#if defined(INTERRUPT_CONTROL_ENDPOINT)
|
||
|
;
|
||
|
#else
|
||
|
USB_USBTask();
|
||
|
#endif
|
||
|
}
|
||
|
print("USB configured.\n");
|
||
|
|
||
|
/* init modules */
|
||
|
keyboard_init();
|
||
|
host_set_driver(&lufa_driver);
|
||
|
#ifdef SLEEP_LED_ENABLE
|
||
|
sleep_led_init();
|
||
|
#endif
|
||
|
|
||
|
print("Keyboard start.\n");
|
||
|
while (1) {
|
||
|
while (USB_DeviceState == DEVICE_STATE_Suspended) {
|
||
|
suspend_power_down();
|
||
|
if (USB_Device_RemoteWakeupEnabled && suspend_wakeup_condition()) {
|
||
|
USB_Device_SendRemoteWakeup();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
keyboard_task();
|
||
|
|
||
|
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
|
||
|
USB_USBTask();
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
|