static void send_mouse(report_mouse_t *report);
static void send_system(uint16_t data);
static void send_consumer(uint16_t data);
-static host_driver_t lufa_driver = {
+host_driver_t lufa_driver = {
keyboard_leds,
send_keyboard,
send_mouse,
};
-static void SetupHardware(void);
-static void Console_Task(void);
-
-int main(void)
-{
- SetupHardware();
- sei();
-
- print_enable = true;
- debug_enable = true;
- debug_matrix = true;
- debug_keyboard = true;
- debug_mouse = true;
-
- // TODO: can't print here
- debug("LUFA init\n");
-
- keyboard_init();
- host_set_driver(&lufa_driver);
- while (1) {
- keyboard_proc();
-
-#if !defined(INTERRUPT_CONTROL_ENDPOINT)
- USB_USBTask();
-#endif
- }
-}
-
-void SetupHardware(void)
-{
- /* Disable watchdog if enabled by bootloader/fuses */
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- /* Disable clock division */
- clock_prescale_set(clock_div_1);
-
- USB_Init();
-
- // for Console_Task
- USB_Device_EnableSOFEvents();
-}
-
+/*******************************************************************************
+ * Console
+ ******************************************************************************/
#ifdef CONSOLE_ENABLE
static void Console_Task(void)
{
Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
/* Check if Keyboard Endpoint Ready for Read/Write */
- if (Endpoint_IsReadWriteAllowed())
- {
- /* Write Keyboard Report Data */
- Endpoint_Write_Stream_LE(report, sizeof(report_keyboard_t), NULL);
+ while (!Endpoint_IsReadWriteAllowed()) ;
+
+ /* Write Keyboard Report Data */
+ Endpoint_Write_Stream_LE(report, sizeof(report_keyboard_t), NULL);
+
+ /* Finalize the stream transfer to send the last packet */
+ Endpoint_ClearIN();
- /* Finalize the stream transfer to send the last packet */
- Endpoint_ClearIN();
- }
keyboard_report_sent = *report;
}
Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
/* Check if Mouse Endpoint Ready for Read/Write */
- if (Endpoint_IsReadWriteAllowed())
- {
- /* Write Mouse Report Data */
- Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
+ while (!Endpoint_IsReadWriteAllowed()) ;
- /* Finalize the stream transfer to send the last packet */
- Endpoint_ClearIN();
- }
+ /* Write Mouse Report Data */
+ Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);
+
+ /* Finalize the stream transfer to send the last packet */
+ Endpoint_ClearIN();
#endif
}
.usage = data
};
Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
- if (Endpoint_IsReadWriteAllowed()) {
- Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
- Endpoint_ClearIN();
- }
+ while (!Endpoint_IsReadWriteAllowed()) ;
+ Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
+ Endpoint_ClearIN();
}
static void send_consumer(uint16_t data)
.usage = data
};
Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
- if (Endpoint_IsReadWriteAllowed()) {
- Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
- Endpoint_ClearIN();
- }
+ while (!Endpoint_IsReadWriteAllowed()) ;
+ Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
+ Endpoint_ClearIN();
}
return 0;
}
#endif
+
+
+/*******************************************************************************
+ * main
+ ******************************************************************************/
+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();
+}
+
+int main(void) __attribute__ ((weak));
+int main(void)
+{
+ SetupHardware();
+ sei();
+
+ print_enable = true;
+ debug_enable = true;
+ debug_matrix = true;
+ debug_keyboard = true;
+ debug_mouse = true;
+
+ // TODO: can't print here
+ debug("LUFA init\n");
+
+ keyboard_init();
+ host_set_driver(&lufa_driver);
+ while (1) {
+ keyboard_proc();
+
+#if !defined(INTERRUPT_CONTROL_ENDPOINT)
+ USB_USBTask();
+#endif
+ }
+}