2012-08-27 06:18:01 +00:00
# include <avr/io.h>
# include <avr/wdt.h>
# include <avr/power.h>
# include <util/delay.h>
// LUFA
# include "lufa.h"
2014-12-10 06:10:25 +00:00
# include "sendchar.h"
2012-08-27 06:18:01 +00:00
# include "debug.h"
# include "keyboard.h"
2015-05-13 06:59:49 +00:00
/* LED ping configuration */
2016-08-03 04:43:44 +00:00
//#define TMK_LED
2015-05-13 06:59:49 +00:00
//#define LEONARDO_LED
# if defined(TMK_LED)
// For TMK converter and Teensy
# define LED_TX_INIT (DDRD |= (1<<6))
# define LED_TX_ON (PORTD |= (1<<6))
# define LED_TX_OFF (PORTD &= ~(1<<6))
# define LED_TX_TOGGLE (PORTD ^= (1<<6))
# elif defined(LEONARDO_LED)
// For Leonardo(TX LED)
# define LED_TX_INIT (DDRD |= (1<<5))
# define LED_TX_ON (PORTD &= ~(1<<5))
# define LED_TX_OFF (PORTD |= (1<<5))
# define LED_TX_TOGGLE (PORTD ^= (1<<5))
# else
# define LED_TX_INIT
# define LED_TX_ON
# define LED_TX_OFF
# define LED_TX_TOGGLE
# endif
2012-08-27 06:18:01 +00:00
static void LUFA_setup ( 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 ( ) ;
2014-12-10 06:10:25 +00:00
print_set_sendchar ( sendchar ) ;
2012-08-27 06:18:01 +00:00
}
2016-08-03 04:43:44 +00:00
bool kbd_init = false ;
2015-05-13 04:55:11 +00:00
2012-08-27 06:18:01 +00:00
int main ( void )
{
// LED for debug
LED_TX_INIT ;
LED_TX_ON ;
debug_enable = true ;
2015-07-15 06:13:15 +00:00
debug_keyboard = true ;
2012-08-27 06:18:01 +00:00
host_set_driver ( & lufa_driver ) ;
keyboard_init ( ) ;
LUFA_setup ( ) ;
2015-07-15 06:13:15 +00:00
2015-05-13 04:55:11 +00:00
/* NOTE: Don't insert time consuming job here.
* It ' ll cause unclear initialization failure when DFU reset ( worm start ) .
*/
2012-08-27 06:18:01 +00:00
sei ( ) ;
// wait for startup of sendchar routine
while ( USB_DeviceState ! = DEVICE_STATE_Configured ) ;
if ( debug_enable ) {
_delay_ms ( 1000 ) ;
}
2016-08-03 04:43:44 +00:00
kbd_init = true ;
2012-08-27 06:18:01 +00:00
debug ( " init: done \n " ) ;
2012-09-04 04:29:21 +00:00
2012-08-27 06:18:01 +00:00
for ( ; ; ) {
2012-10-07 02:09:40 +00:00
keyboard_task ( ) ;
2012-08-27 06:18:01 +00:00
# if !defined(INTERRUPT_CONTROL_ENDPOINT)
// LUFA Task for control request
USB_USBTask ( ) ;
# endif
}
2015-05-13 04:55:11 +00:00
2012-08-27 06:18:01 +00:00
return 0 ;
}