main.c (2131B)
1 #include <avr/wdt.h> 2 #include <avr/power.h> 3 4 // LUFA 5 #include "lufa.h" 6 7 #include "sendchar.h" 8 #include "debug.h" 9 #include "keyboard.h" 10 #include "gpio.h" 11 #include "wait.h" 12 #include "led.h" 13 14 /* LED ping configuration */ 15 #define TMK_LED 16 //#define LEONARDO_LED 17 #if defined(TMK_LED) 18 // For TMK converter and Teensy 19 #define LED_TX_INIT gpio_set_pin_output(D6) 20 #define LED_TX_ON gpio_write_pin_high(D6) 21 #define LED_TX_OFF gpio_write_pin_low(D6) 22 #define LED_TX_TOGGLE gpio_toggle_pin(D6) 23 #elif defined(LEONARDO_LED) 24 // For Leonardo(TX LED) 25 #define LED_TX_INIT gpio_set_pin_output(D5) 26 #define LED_TX_ON gpio_write_pin_low(D5) 27 #define LED_TX_OFF gpio_write_pin_high(D5) 28 #define LED_TX_TOGGLE gpio_toggle_pin(D5) 29 #else 30 #define LED_TX_INIT 31 #define LED_TX_ON 32 #define LED_TX_OFF 33 #define LED_TX_TOGGLE 34 #endif 35 36 37 static void LUFA_setup(void) 38 { 39 /* Disable watchdog if enabled by bootloader/fuses */ 40 MCUSR &= ~(1 << WDRF); 41 wdt_disable(); 42 43 /* Disable clock division */ 44 #if (F_CPU == 8000000) 45 clock_prescale_set(clock_div_2); // 16MHz crystal divided by 2 46 #else 47 clock_prescale_set(clock_div_1); 48 #endif 49 50 // Leonardo needs. Without this USB device is not recognized. 51 USB_Disable(); 52 53 USB_Init(); 54 55 // for Console_Task 56 USB_Device_EnableSOFEvents(); 57 print_set_sendchar(sendchar); 58 } 59 60 61 62 int main(void) 63 { 64 // LED for debug 65 LED_TX_INIT; 66 LED_TX_ON; 67 68 debug_enable = true; 69 debug_keyboard = true; 70 71 host_set_driver(&lufa_driver); 72 keyboard_init(); 73 74 LUFA_setup(); 75 76 /* NOTE: Don't insert time consuming job here. 77 * It'll cause unclear initialization failure when DFU reset(worm start). 78 */ 79 sei(); 80 81 /* Some keyboards bootup quickly and cannot be initialized with this startup wait.*/ 82 // wait for startup of sendchar routine 83 while (USB_DeviceState != DEVICE_STATE_Configured) ; 84 if (debug_enable) { 85 _delay_ms(1000); 86 } 87 88 dprintln("init: done"); 89 90 for (;;) { 91 keyboard_task(); 92 93 #if !defined(INTERRUPT_CONTROL_ENDPOINT) 94 // LUFA Task for control request 95 USB_USBTask(); 96 #endif 97 } 98 99 return 0; 100 }