qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }