summary refs log tree commit diff
path: root/tmk_core
diff options
context:
space:
mode:
authorJoshua T <joshua@sonofone.net>2016-09-01 07:40:46 -0500
committerJoshua T <joshua@sonofone.net>2016-09-01 07:40:46 -0500
commit5520b0022fc6cd3dff805eb31ed4bb7e4385ee2a (patch)
tree0346d24fd7a8905486a687c68084af25022c4312 /tmk_core
parentb0c3d596816c178ccd94738a3866a08b71027d0d (diff)
parente28d151a8a1d458f3c18897c6095decc17b0c3a1 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/chibios.mk12
-rw-r--r--tmk_core/common.mk74
-rw-r--r--tmk_core/common/avr/xprintf.S1000
-rw-r--r--tmk_core/common/avr/xprintf.h222
-rw-r--r--tmk_core/common/command.c3
-rw-r--r--tmk_core/native.mk24
-rw-r--r--tmk_core/protocol/iwrap/suart.S312
-rw-r--r--tmk_core/protocol/iwrap/suart.h16
-rw-r--r--tmk_core/protocol/iwrap/wd.h318
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml322
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml312
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml246
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S204
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml312
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile136
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S182
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml318
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile110
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile84
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml110
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml82
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt1950
-rw-r--r--tmk_core/rules.mk281
23 files changed, 3240 insertions, 3390 deletions
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index cb67ac6f25..062a712bd1 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -89,9 +89,9 @@ CHIBISRC = $(STARTUPSRC) \
 	   $(STARTUPASM) \
 	   $(PORTASM) \
 	   $(OSALASM)         
-	   
-SRC += $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
 
+CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
+	   
 EXTRAINCDIRS += $(CHIBIOS)/os/license \
          $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
          $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
@@ -143,14 +143,6 @@ MCUFLAGS = -mcpu=$(MCU)
 
 DEBUG = gdb
 
-# Define ASM defines here
-# bootloader definitions may be used in the startup .s file
-ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
-    OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
-else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
-    OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
-endif
-
 # List any extra directories to look for libraries here.
 EXTRALIBDIRS = $(RULESPATH)/ld
 
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index 429c571435..f826a7b540 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -5,7 +5,7 @@ else ifeq ($(PLATFORM),CHIBIOS)
 	PLATFORM_COMMON_DIR = $(COMMON_DIR)/chibios
 endif
 
-SRC +=	$(COMMON_DIR)/host.c \
+TMK_COMMON_SRC +=	$(COMMON_DIR)/host.c \
 	$(COMMON_DIR)/keyboard.c \
 	$(COMMON_DIR)/action.c \
 	$(COMMON_DIR)/action_tapping.c \
@@ -21,101 +21,89 @@ SRC +=	$(COMMON_DIR)/host.c \
 	$(PLATFORM_COMMON_DIR)/bootloader.c \
 
 ifeq ($(PLATFORM),AVR)
-	SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
+	TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
 endif 
 
 ifeq ($(PLATFORM),CHIBIOS)
-	SRC += $(PLATFORM_COMMON_DIR)/printf.c
-	SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+	TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/printf.c
+	TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
 endif
 
 
 
 # Option modules
 ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
-    OPT_DEFS += -DBOOTMAGIC_ENABLE
-    SRC += $(COMMON_DIR)/bootmagic.c
+    TMK_COMMON_DEFS += -DBOOTMAGIC_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/bootmagic.c
 else
-    OPT_DEFS += -DMAGIC_ENABLE
-    SRC += $(COMMON_DIR)/magic.c
+    TMK_COMMON_DEFS += -DMAGIC_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/magic.c
 endif
 
 ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/mousekey.c
-    OPT_DEFS += -DMOUSEKEY_ENABLE
-    OPT_DEFS += -DMOUSE_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/mousekey.c
+    TMK_COMMON_DEFS += -DMOUSEKEY_ENABLE
+    TMK_COMMON_DEFS += -DMOUSE_ENABLE
 endif
 
 ifeq ($(strip $(EXTRAKEY_ENABLE)), yes)
-    OPT_DEFS += -DEXTRAKEY_ENABLE
+    TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE
 endif
 
 ifeq ($(strip $(CONSOLE_ENABLE)), yes)
-    OPT_DEFS += -DCONSOLE_ENABLE
+    TMK_COMMON_DEFS += -DCONSOLE_ENABLE
 else
-    OPT_DEFS += -DNO_PRINT
-    OPT_DEFS += -DNO_DEBUG
+    TMK_COMMON_DEFS += -DNO_PRINT
+    TMK_COMMON_DEFS += -DNO_DEBUG
 endif
 
 ifeq ($(strip $(COMMAND_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/command.c
-    OPT_DEFS += -DCOMMAND_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/command.c
+    TMK_COMMON_DEFS += -DCOMMAND_ENABLE
 endif
 
 ifeq ($(strip $(NKRO_ENABLE)), yes)
-    OPT_DEFS += -DNKRO_ENABLE
+    TMK_COMMON_DEFS += -DNKRO_ENABLE
 endif
 
 ifeq ($(strip $(USB_6KRO_ENABLE)), yes)
-    OPT_DEFS += -DUSB_6KRO_ENABLE
+    TMK_COMMON_DEFS += -DUSB_6KRO_ENABLE
 endif
 
 ifeq ($(strip $(SLEEP_LED_ENABLE)), yes)
-    SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
-    OPT_DEFS += -DSLEEP_LED_ENABLE
-    OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+    TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
+    TMK_COMMON_DEFS += -DSLEEP_LED_ENABLE
+    TMK_COMMON_DEFS += -DNO_SUSPEND_POWER_DOWN
 endif
 
 ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/backlight.c
-    OPT_DEFS += -DBACKLIGHT_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/backlight.c
+    TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE
 endif
 
 ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
-    OPT_DEFS += -DBLUETOOTH_ENABLE
+    TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
 endif
 
 ifeq ($(strip $(ONEHAND_ENABLE)), yes)
-    OPT_DEFS += -DONEHAND_ENABLE
+    TMK_COMMON_DEFS += -DONEHAND_ENABLE
 endif
 
 ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
-    OPT_DEFS += -DKEYMAP_SECTION_ENABLE
+    TMK_COMMON_DEFS += -DKEYMAP_SECTION_ENABLE
 
     ifeq ($(strip $(MCU)),atmega32u2)
-	EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
+	TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
     else ifeq ($(strip $(MCU)),atmega32u4)
-	EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
+	TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
     else
-	EXTRALDFLAGS = $(error no ldscript for keymap section)
+	TMK_COMMON_LDFLAGS = $(error no ldscript for keymap section)
     endif
 endif
 
-ifeq ($(MASTER),right)	
-	OPT_DEFS += -DMASTER_IS_ON_RIGHT
-else 
-	ifneq ($(MASTER),left)
-$(error MASTER does not have a valid value(left/right))
-	endif
-endif
-
-
-# Version string
-OPT_DEFS += -DVERSION=$(GIT_VERSION)
-
 # Bootloader address
 ifdef STM32_BOOTLOADER_ADDRESS
-    OPT_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
+    TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
 endif
 
 # Search Path
diff --git a/tmk_core/common/avr/xprintf.S b/tmk_core/common/avr/xprintf.S
index 0cec70ce22..06434b98d9 100644
--- a/tmk_core/common/avr/xprintf.S
+++ b/tmk_core/common/avr/xprintf.S
@@ -1,500 +1,500 @@
-;---------------------------------------------------------------------------;

-; Extended itoa, puts, printf and atoi                     (C)ChaN, 2011

-;---------------------------------------------------------------------------;

-

-				// Base size is 152 bytes

-#define	CR_CRLF		0	// Convert \n to \r\n (+10 bytes)

-#define USE_XPRINTF	1	// Enable xprintf function (+194 bytes)

-#define USE_XSPRINTF	0	// Add xsprintf function (+78 bytes)

-#define USE_XFPRINTF	0	// Add xfprintf function (+54 bytes)

-#define USE_XATOI	0	// Enable xatoi function (+182 bytes)

-

-

-#if FLASHEND > 0x1FFFF

-#error xitoa module does not support 256K devices

-#endif

-

-.nolist

-#include <avr/io.h>	// Include device specific definitions.

-.list

-

-#ifdef SPM_PAGESIZE	// Recent devices have "lpm Rd,Z+" and "movw".

-.macro	_LPMI	reg

-	lpm	\reg, Z+

-.endm

-.macro	_MOVW	dh,dl, sh,sl

-	movw	\dl, \sl

-.endm

-#else			// Earlier devices do not have "lpm Rd,Z+" nor "movw".

-.macro	_LPMI	reg

-	lpm

-	mov	\reg, r0

-	adiw	ZL, 1

-.endm

-.macro	_MOVW	dh,dl, sh,sl

-	mov	\dl, \sl

-	mov	\dh, \sh

-.endm

-#endif

-

-

-

-;---------------------------------------------------------------------------

-; Stub function to forward to user output function

-;

-;Prototype: void xputc (char chr	// a character to be output

-;			);

-;Size: 12/12 words

-

-.section .bss

-.global xfunc_out	; xfunc_out must be initialized before using this module.

-xfunc_out:	.ds.w	1

-.section .text

-

-

-.func xputc

-.global xputc

-xputc:

-#if CR_CRLF

-	cpi	r24, 10		;LF --> CRLF

-	brne	1f		;

-	ldi	r24, 13		;

-	rcall	1f		;

-	ldi	r24, 10		;/

-1:

-#endif

-	push	ZH

-	push	ZL

-	lds	ZL, xfunc_out+0	;Pointer to the registered output function.

-	lds	ZH, xfunc_out+1	;/

-	sbiw	ZL, 0		;Skip if null

-	breq	2f		;/

-	icall

-2:	pop	ZL

-	pop	ZH

-	ret

-.endfunc

-

-

-

-;---------------------------------------------------------------------------

-; Direct ROM string output

-;

-;Prototype: void xputs (const char *str_p // rom string to be output

-;			);

-

-.func xputs

-.global xputs

-xputs:

-	_MOVW	ZH,ZL, r25,r24	; Z = pointer to rom string

-1:	_LPMI	r24

-	cpi	r24, 0

-	breq	2f

-	rcall	xputc

-	rjmp	1b

-2:	ret

-.endfunc

-

-

-;---------------------------------------------------------------------------

-; Extended direct numeral string output (32bit version)

-;

-;Prototype: void xitoa (long value,	// value to be output

-;                       char radix,	// radix

-;                       char width);	// minimum width

-;

-

-.func xitoa

-.global xitoa

-xitoa:

-				;r25:r22 = value, r20 = base, r18 = digits

-	clr	r31		;r31 = stack level

-	ldi	r30, ' '	;r30 = sign

-	ldi	r19, ' '	;r19 = filler

-	sbrs	r20, 7		;When base indicates signd format and the value

-	rjmp	0f		;is minus, add a '-'.

-	neg	r20		;

-	sbrs	r25, 7		;

-	rjmp	0f		;

-	ldi	r30, '-'	;

-	com	r22		;

-	com	r23		;

-	com	r24		;

-	com	r25		;

-	adc	r22, r1		;

-	adc	r23, r1		;

-	adc	r24, r1		;

-	adc	r25, r1		;/

-0:	sbrs	r18, 7		;When digits indicates zero filled,

-	rjmp	1f		;filler is '0'.

-	neg	r18		;

-	ldi	r19, '0'	;/

-				;----- string conversion loop

-1:	ldi	r21, 32		;r26 = r25:r22 % r20

-	clr	r26		;r25:r22 /= r20

-2:	lsl	r22		;

-	rol	r23		;

-	rol	r24		;

-	rol	r25		;

-	rol	r26		;

-	cp	r26, r20	;

-	brcs	3f		;

-	sub	r26, r20	;

-	inc	r22		;

-3:	dec	r21		;

-	brne	2b		;/

-	cpi	r26, 10		;r26 is a numeral digit '0'-'F'

-	brcs	4f		;

-	subi	r26, -7		;

-4:	subi	r26, -'0'	;/

-	push	r26		;Stack it

-	inc	r31		;/

-	cp	r22, r1		;Repeat until r25:r22 gets zero

-	cpc	r23, r1		;

-	cpc	r24, r1		;

-	cpc	r25, r1		;

-	brne	1b		;/

-

-	cpi	r30, '-'	;Minus sign if needed

-	brne	5f		;

-	push	r30		;

-	inc	r31		;/

-5:	cp	r31, r18	;Filler

-	brcc	6f		;

-	push	r19		;

-	inc	r31		;

-	rjmp	5b		;/

-

-6:	pop	r24		;Flush stacked digits and exit

-	rcall	xputc		;

-	dec	r31		;

-	brne	6b		;/

-

-	ret

-.endfunc

-

-

-

-;---------------------------------------------------------------------------;

-; Formatted string output (16/32bit version)

-;

-;Prototype:

-; void __xprintf (const char *format_p, ...);

-; void __xsprintf(char*, const char *format_p, ...);

-; void __xfprintf(void(*func)(char), const char *format_p, ...);

-;

-

-#if USE_XPRINTF

-

-.func xvprintf

-xvprintf:

-	ld	ZL, Y+		;Z = pointer to format string

-	ld	ZH, Y+		;/

-

-0:	_LPMI	r24		;Get a format char

-	cpi	r24, 0		;End of format string?

-	breq	90f		;/

-	cpi	r24, '%'	;Is format?

-	breq	20f		;/

-1:	rcall	xputc		;Put a normal character

-	rjmp	0b		;/

-90:	ret

-

-20:	ldi	r18, 0		;r18: digits

-	clt			;T: filler

-	_LPMI	r21		;Get flags

-	cpi	r21, '%'	;Is a %?

-	breq	1b		;/

-	cpi	r21, '0'	;Zero filled?

-	brne	23f		;

-	set			;/

-22:	_LPMI	r21		;Get width

-23:	cpi	r21, '9'+1	;

-	brcc	24f		;

-	subi	r21, '0'	;

-	brcs	90b		;

-	lsl	r18		;

-	mov	r0, r18		;

-	lsl	r18		;

-	lsl	r18		;

-	add	r18, r0		;

-	add	r18, r21	;

-	rjmp	22b		;/

-

-24:	brtc	25f		;get value (low word)

-	neg	r18		;

-25:	ld	r24, Y+		;

-	ld	r25, Y+		;/

-	cpi	r21, 'c'	;Is type character?

-	breq	1b		;/

-	cpi	r21, 's'	;Is type RAM string?

-	breq	50f		;/

-	cpi	r21, 'S'	;Is type ROM string?

-	breq	60f		;/

-	_MOVW	r23,r22,r25,r24	;r25:r22 = value

-	clr	r24		;

-	clr	r25		;

-	clt			;/

-	cpi	r21, 'l'	;Is long int?

-	brne	26f		;

-	ld	r24, Y+		;get value (high word)

-	ld	r25, Y+		;

-	set			;

-	_LPMI	r21		;/

-26:	cpi	r21, 'd'	;Is type signed decimal?

-	brne	27f		;/

-	ldi	r20, -10	;

-	brts	40f		;

-	sbrs	r23, 7		;

-	rjmp	40f		;

-	ldi	r24, -1		;

-	ldi	r25, -1		;

-	rjmp	40f		;/

-27:	cpi	r21, 'u'	;Is type unsigned decimal?

-	ldi	r20, 10		;

-	breq	40f		;/

-	cpi	r21, 'X'	;Is type hexdecimal?

-	ldi	r20, 16		;

-	breq	40f		;/

-	cpi	r21, 'b'	;Is type binary?

-	ldi	r20, 2		;

-	breq	40f		;/

-	ret			;abort

-40:	push	ZH		;Output the value

-	push	ZL		;

-	rcall	xitoa		;

-42:	pop	ZL		;

-	pop	ZH		;

-	rjmp	0b		;/

-

-50:	push	ZH		;Put a string on the RAM

-	push	ZL

-	_MOVW	ZH,ZL, r25,r24

-51:	ld	r24, Z+

-	cpi	r24, 0

-	breq	42b

-	rcall	xputc

-	rjmp	51b

-

-60:	push	ZH		;Put a string on the ROM

-	push	ZL

-	rcall	xputs

-	rjmp	42b

-.endfunc

-

-

-.func __xprintf

-.global __xprintf

-__xprintf:

-	push	YH

-	push	YL

-	in	YL, _SFR_IO_ADDR(SPL)

-#ifdef SPH

-	in	YH, _SFR_IO_ADDR(SPH)

-#else

-	clr	YH

-#endif

-	adiw	YL, 5		;Y = pointer to arguments

-	rcall	xvprintf

-	pop	YL

-	pop	YH

-	ret

-.endfunc

-

-

-#if USE_XSPRINTF

-

-.func __xsprintf

-putram:

-	_MOVW	ZH,ZL, r15,r14

-	st	Z+, r24

-	_MOVW	r15,r14, ZH,ZL

-	ret

-.global __xsprintf

-__xsprintf:

-	push	YH

-	push	YL

-	in	YL, _SFR_IO_ADDR(SPL)

-#ifdef SPH

-	in	YH, _SFR_IO_ADDR(SPH)

-#else

-	clr	YH

-#endif

-	adiw	YL, 5		;Y = pointer to arguments

-	lds	ZL, xfunc_out+0	;Save registered output function

-	lds	ZH, xfunc_out+1	;

-	push	ZL		;

-	push	ZH		;/

-	ldi	ZL, lo8(pm(putram));Set local output function

-	ldi	ZH, hi8(pm(putram));

-	sts	xfunc_out+0, ZL	;

-	sts	xfunc_out+1, ZH	;/

-	push	r15		;Initialize pointer to string buffer

-	push	r14		;

-	ld	r14, Y+		;

-	ld	r15, Y+		;/

-	rcall	xvprintf

-	_MOVW	ZH,ZL, r15,r14	;Terminate string

-	st	Z, r1		;

-	pop	r14		;

-	pop	r15		;/

-	pop	ZH		;Restore registered output function

-	pop	ZL		;

-	sts	xfunc_out+0, ZL	;

-	sts	xfunc_out+1, ZH	;/

-	pop	YL

-	pop	YH

-	ret

-.endfunc

-#endif

-

-

-#if USE_XFPRINTF

-.func __xfprintf

-.global __xfprintf

-__xfprintf:

-	push	YH

-	push	YL

-	in	YL, _SFR_IO_ADDR(SPL)

-#ifdef SPH

-	in	YH, _SFR_IO_ADDR(SPH)

-#else

-	clr	YH

-#endif

-	adiw	YL, 5		;Y = pointer to arguments

-	lds	ZL, xfunc_out+0	;Save registered output function

-	lds	ZH, xfunc_out+1	;

-	push	ZL		;

-	push	ZH		;/

-	ld	ZL, Y+		;Set output function

-	ld	ZH, Y+		;

-	sts	xfunc_out+0, ZL	;

-	sts	xfunc_out+1, ZH	;/

-	rcall	xvprintf

-	pop	ZH		;Restore registered output function

-	pop	ZL		;

-	sts	xfunc_out+0, ZL	;

-	sts	xfunc_out+1, ZH	;/

-	pop	YL

-	pop	YH

-	ret

-.endfunc

-#endif

-

-#endif

-

-

-

-;---------------------------------------------------------------------------

-; Extended numeral string input

-;

-;Prototype:

-; char xatoi (           /* 1: Successful, 0: Failed */

-;      const char **str, /* pointer to pointer to source string */

-;      long *res         /* result */

-; );

-;

-

-

-#if USE_XATOI

-.func xatoi

-.global xatoi

-xatoi:

-	_MOVW	r1, r0, r23, r22

-	_MOVW	XH, XL, r25, r24

-	ld	ZL, X+

-	ld	ZH, X+

-	clr	r18		;r21:r18 = 0;

-	clr	r19		;

-	clr	r20		;

-	clr	r21		;/

-	clt			;T = 0;

-

-	ldi	r25, 10		;r25 = 10;

-	rjmp	41f		;/

-40:	adiw	ZL, 1		;Z++;

-41:	ld	r22, Z		;r22 = *Z;

-	cpi	r22, ' '	;if(r22 == ' ') continue

-	breq	40b		;/

-	brcs	70f		;if(r22 < ' ') error;

-	cpi	r22, '-'	;if(r22 == '-') {

-	brne	42f		; T = 1;

-	set			; continue;

-	rjmp	40b		;}

-42:	cpi	r22, '9'+1	;if(r22 > '9') error;

-	brcc	70f		;/

-	cpi	r22, '0'	;if(r22 < '0') error;

-	brcs	70f		;/

-	brne	51f		;if(r22 > '0') cv_start;

-	ldi	r25, 8		;r25 = 8;

-	adiw	ZL, 1		;r22 = *(++Z);

-	ld	r22, Z		;/

-	cpi	r22, ' '+1	;if(r22 <= ' ') exit;

-	brcs	80f		;/

-	cpi	r22, 'b'	;if(r22 == 'b') {

-	brne	43f		; r25 = 2;

-	ldi	r25, 2		; cv_start;

-	rjmp	50f		;}

-43:	cpi	r22, 'x'	;if(r22 != 'x') error;

-	brne	51f		;/

-	ldi	r25, 16		;r25 = 16;

-

-50:	adiw	ZL, 1		;Z++;

-	ld	r22, Z		;r22 = *Z;

-51:	cpi	r22, ' '+1	;if(r22 <= ' ') break;

-	brcs	80f		;/

-	cpi	r22, 'a'	;if(r22 >= 'a') r22 =- 0x20;

-	brcs	52f		;

-	subi	r22, 0x20	;/

-52:	subi	r22, '0'	;if((r22 -= '0') < 0) error;

-	brcs	70f		;/

-	cpi	r22, 10		;if(r22 >= 10) {

-	brcs	53f		; r22 -= 7;

-	subi	r22, 7		; if(r22 < 10) 

-	cpi	r22, 10		;

-	brcs	70f		;}

-53:	cp	r22, r25	;if(r22 >= r25) error;

-	brcc	70f		;/

-60:	ldi	r24, 33		;r21:r18 *= r25;

-	sub	r23, r23	;

-61:	brcc	62f		;

-	add	r23, r25	;

-62:	lsr	r23		;

-	ror	r21		;

-	ror	r20		;

-	ror	r19		;

-	ror	r18		;

-	dec	r24		;

-	brne	61b		;/

-	add	r18, r22	;r21:r18 += r22;

-	adc	r19, r24	;

-	adc	r20, r24	;

-	adc	r21, r24	;/

-	rjmp	50b		;repeat

-

-70:	ldi	r24, 0

-	rjmp	81f

-80:	ldi	r24, 1

-81:	brtc	82f

-	clr	r22

-	com	r18

-	com	r19

-	com	r20

-	com	r21

-	adc	r18, r22

-	adc	r19, r22

-	adc	r20, r22

-	adc	r21, r22

-82:	st	-X, ZH

-	st	-X, ZL

-	_MOVW	XH, XL, r1, r0

-	st	X+, r18

-	st	X+, r19

-	st	X+, r20

-	st	X+, r21

-	clr	r1

-	ret

-.endfunc

-#endif

-

-

+;---------------------------------------------------------------------------;
+; Extended itoa, puts, printf and atoi                     (C)ChaN, 2011
+;---------------------------------------------------------------------------;
+
+				// Base size is 152 bytes
+#define	CR_CRLF		0	// Convert \n to \r\n (+10 bytes)
+#define USE_XPRINTF	1	// Enable xprintf function (+194 bytes)
+#define USE_XSPRINTF	0	// Add xsprintf function (+78 bytes)
+#define USE_XFPRINTF	0	// Add xfprintf function (+54 bytes)
+#define USE_XATOI	0	// Enable xatoi function (+182 bytes)
+
+
+#if FLASHEND > 0x1FFFF
+#error xitoa module does not support 256K devices
+#endif
+
+.nolist
+#include <avr/io.h>	// Include device specific definitions.
+.list
+
+#ifdef SPM_PAGESIZE	// Recent devices have "lpm Rd,Z+" and "movw".
+.macro	_LPMI	reg
+	lpm	\reg, Z+
+.endm
+.macro	_MOVW	dh,dl, sh,sl
+	movw	\dl, \sl
+.endm
+#else			// Earlier devices do not have "lpm Rd,Z+" nor "movw".
+.macro	_LPMI	reg
+	lpm
+	mov	\reg, r0
+	adiw	ZL, 1
+.endm
+.macro	_MOVW	dh,dl, sh,sl
+	mov	\dl, \sl
+	mov	\dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Stub function to forward to user output function
+;
+;Prototype: void xputc (char chr	// a character to be output
+;			);
+;Size: 12/12 words
+
+.section .bss
+.global xfunc_out	; xfunc_out must be initialized before using this module.
+xfunc_out:	.ds.w	1
+.section .text
+
+
+.func xputc
+.global xputc
+xputc:
+#if CR_CRLF
+	cpi	r24, 10		;LF --> CRLF
+	brne	1f		;
+	ldi	r24, 13		;
+	rcall	1f		;
+	ldi	r24, 10		;/
+1:
+#endif
+	push	ZH
+	push	ZL
+	lds	ZL, xfunc_out+0	;Pointer to the registered output function.
+	lds	ZH, xfunc_out+1	;/
+	sbiw	ZL, 0		;Skip if null
+	breq	2f		;/
+	icall
+2:	pop	ZL
+	pop	ZH
+	ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------
+; Direct ROM string output
+;
+;Prototype: void xputs (const char *str_p // rom string to be output
+;			);
+
+.func xputs
+.global xputs
+xputs:
+	_MOVW	ZH,ZL, r25,r24	; Z = pointer to rom string
+1:	_LPMI	r24
+	cpi	r24, 0
+	breq	2f
+	rcall	xputc
+	rjmp	1b
+2:	ret
+.endfunc
+
+
+;---------------------------------------------------------------------------
+; Extended direct numeral string output (32bit version)
+;
+;Prototype: void xitoa (long value,	// value to be output
+;                       char radix,	// radix
+;                       char width);	// minimum width
+;
+
+.func xitoa
+.global xitoa
+xitoa:
+				;r25:r22 = value, r20 = base, r18 = digits
+	clr	r31		;r31 = stack level
+	ldi	r30, ' '	;r30 = sign
+	ldi	r19, ' '	;r19 = filler
+	sbrs	r20, 7		;When base indicates signd format and the value
+	rjmp	0f		;is minus, add a '-'.
+	neg	r20		;
+	sbrs	r25, 7		;
+	rjmp	0f		;
+	ldi	r30, '-'	;
+	com	r22		;
+	com	r23		;
+	com	r24		;
+	com	r25		;
+	adc	r22, r1		;
+	adc	r23, r1		;
+	adc	r24, r1		;
+	adc	r25, r1		;/
+0:	sbrs	r18, 7		;When digits indicates zero filled,
+	rjmp	1f		;filler is '0'.
+	neg	r18		;
+	ldi	r19, '0'	;/
+				;----- string conversion loop
+1:	ldi	r21, 32		;r26 = r25:r22 % r20
+	clr	r26		;r25:r22 /= r20
+2:	lsl	r22		;
+	rol	r23		;
+	rol	r24		;
+	rol	r25		;
+	rol	r26		;
+	cp	r26, r20	;
+	brcs	3f		;
+	sub	r26, r20	;
+	inc	r22		;
+3:	dec	r21		;
+	brne	2b		;/
+	cpi	r26, 10		;r26 is a numeral digit '0'-'F'
+	brcs	4f		;
+	subi	r26, -7		;
+4:	subi	r26, -'0'	;/
+	push	r26		;Stack it
+	inc	r31		;/
+	cp	r22, r1		;Repeat until r25:r22 gets zero
+	cpc	r23, r1		;
+	cpc	r24, r1		;
+	cpc	r25, r1		;
+	brne	1b		;/
+
+	cpi	r30, '-'	;Minus sign if needed
+	brne	5f		;
+	push	r30		;
+	inc	r31		;/
+5:	cp	r31, r18	;Filler
+	brcc	6f		;
+	push	r19		;
+	inc	r31		;
+	rjmp	5b		;/
+
+6:	pop	r24		;Flush stacked digits and exit
+	rcall	xputc		;
+	dec	r31		;
+	brne	6b		;/
+
+	ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Formatted string output (16/32bit version)
+;
+;Prototype:
+; void __xprintf (const char *format_p, ...);
+; void __xsprintf(char*, const char *format_p, ...);
+; void __xfprintf(void(*func)(char), const char *format_p, ...);
+;
+
+#if USE_XPRINTF
+
+.func xvprintf
+xvprintf:
+	ld	ZL, Y+		;Z = pointer to format string
+	ld	ZH, Y+		;/
+
+0:	_LPMI	r24		;Get a format char
+	cpi	r24, 0		;End of format string?
+	breq	90f		;/
+	cpi	r24, '%'	;Is format?
+	breq	20f		;/
+1:	rcall	xputc		;Put a normal character
+	rjmp	0b		;/
+90:	ret
+
+20:	ldi	r18, 0		;r18: digits
+	clt			;T: filler
+	_LPMI	r21		;Get flags
+	cpi	r21, '%'	;Is a %?
+	breq	1b		;/
+	cpi	r21, '0'	;Zero filled?
+	brne	23f		;
+	set			;/
+22:	_LPMI	r21		;Get width
+23:	cpi	r21, '9'+1	;
+	brcc	24f		;
+	subi	r21, '0'	;
+	brcs	90b		;
+	lsl	r18		;
+	mov	r0, r18		;
+	lsl	r18		;
+	lsl	r18		;
+	add	r18, r0		;
+	add	r18, r21	;
+	rjmp	22b		;/
+
+24:	brtc	25f		;get value (low word)
+	neg	r18		;
+25:	ld	r24, Y+		;
+	ld	r25, Y+		;/
+	cpi	r21, 'c'	;Is type character?
+	breq	1b		;/
+	cpi	r21, 's'	;Is type RAM string?
+	breq	50f		;/
+	cpi	r21, 'S'	;Is type ROM string?
+	breq	60f		;/
+	_MOVW	r23,r22,r25,r24	;r25:r22 = value
+	clr	r24		;
+	clr	r25		;
+	clt			;/
+	cpi	r21, 'l'	;Is long int?
+	brne	26f		;
+	ld	r24, Y+		;get value (high word)
+	ld	r25, Y+		;
+	set			;
+	_LPMI	r21		;/
+26:	cpi	r21, 'd'	;Is type signed decimal?
+	brne	27f		;/
+	ldi	r20, -10	;
+	brts	40f		;
+	sbrs	r23, 7		;
+	rjmp	40f		;
+	ldi	r24, -1		;
+	ldi	r25, -1		;
+	rjmp	40f		;/
+27:	cpi	r21, 'u'	;Is type unsigned decimal?
+	ldi	r20, 10		;
+	breq	40f		;/
+	cpi	r21, 'X'	;Is type hexdecimal?
+	ldi	r20, 16		;
+	breq	40f		;/
+	cpi	r21, 'b'	;Is type binary?
+	ldi	r20, 2		;
+	breq	40f		;/
+	ret			;abort
+40:	push	ZH		;Output the value
+	push	ZL		;
+	rcall	xitoa		;
+42:	pop	ZL		;
+	pop	ZH		;
+	rjmp	0b		;/
+
+50:	push	ZH		;Put a string on the RAM
+	push	ZL
+	_MOVW	ZH,ZL, r25,r24
+51:	ld	r24, Z+
+	cpi	r24, 0
+	breq	42b
+	rcall	xputc
+	rjmp	51b
+
+60:	push	ZH		;Put a string on the ROM
+	push	ZL
+	rcall	xputs
+	rjmp	42b
+.endfunc
+
+
+.func __xprintf
+.global __xprintf
+__xprintf:
+	push	YH
+	push	YL
+	in	YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+	in	YH, _SFR_IO_ADDR(SPH)
+#else
+	clr	YH
+#endif
+	adiw	YL, 5		;Y = pointer to arguments
+	rcall	xvprintf
+	pop	YL
+	pop	YH
+	ret
+.endfunc
+
+
+#if USE_XSPRINTF
+
+.func __xsprintf
+putram:
+	_MOVW	ZH,ZL, r15,r14
+	st	Z+, r24
+	_MOVW	r15,r14, ZH,ZL
+	ret
+.global __xsprintf
+__xsprintf:
+	push	YH
+	push	YL
+	in	YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+	in	YH, _SFR_IO_ADDR(SPH)
+#else
+	clr	YH
+#endif
+	adiw	YL, 5		;Y = pointer to arguments
+	lds	ZL, xfunc_out+0	;Save registered output function
+	lds	ZH, xfunc_out+1	;
+	push	ZL		;
+	push	ZH		;/
+	ldi	ZL, lo8(pm(putram));Set local output function
+	ldi	ZH, hi8(pm(putram));
+	sts	xfunc_out+0, ZL	;
+	sts	xfunc_out+1, ZH	;/
+	push	r15		;Initialize pointer to string buffer
+	push	r14		;
+	ld	r14, Y+		;
+	ld	r15, Y+		;/
+	rcall	xvprintf
+	_MOVW	ZH,ZL, r15,r14	;Terminate string
+	st	Z, r1		;
+	pop	r14		;
+	pop	r15		;/
+	pop	ZH		;Restore registered output function
+	pop	ZL		;
+	sts	xfunc_out+0, ZL	;
+	sts	xfunc_out+1, ZH	;/
+	pop	YL
+	pop	YH
+	ret
+.endfunc
+#endif
+
+
+#if USE_XFPRINTF
+.func __xfprintf
+.global __xfprintf
+__xfprintf:
+	push	YH
+	push	YL
+	in	YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+	in	YH, _SFR_IO_ADDR(SPH)
+#else
+	clr	YH
+#endif
+	adiw	YL, 5		;Y = pointer to arguments
+	lds	ZL, xfunc_out+0	;Save registered output function
+	lds	ZH, xfunc_out+1	;
+	push	ZL		;
+	push	ZH		;/
+	ld	ZL, Y+		;Set output function
+	ld	ZH, Y+		;
+	sts	xfunc_out+0, ZL	;
+	sts	xfunc_out+1, ZH	;/
+	rcall	xvprintf
+	pop	ZH		;Restore registered output function
+	pop	ZL		;
+	sts	xfunc_out+0, ZL	;
+	sts	xfunc_out+1, ZH	;/
+	pop	YL
+	pop	YH
+	ret
+.endfunc
+#endif
+
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Extended numeral string input
+;
+;Prototype:
+; char xatoi (           /* 1: Successful, 0: Failed */
+;      const char **str, /* pointer to pointer to source string */
+;      long *res         /* result */
+; );
+;
+
+
+#if USE_XATOI
+.func xatoi
+.global xatoi
+xatoi:
+	_MOVW	r1, r0, r23, r22
+	_MOVW	XH, XL, r25, r24
+	ld	ZL, X+
+	ld	ZH, X+
+	clr	r18		;r21:r18 = 0;
+	clr	r19		;
+	clr	r20		;
+	clr	r21		;/
+	clt			;T = 0;
+
+	ldi	r25, 10		;r25 = 10;
+	rjmp	41f		;/
+40:	adiw	ZL, 1		;Z++;
+41:	ld	r22, Z		;r22 = *Z;
+	cpi	r22, ' '	;if(r22 == ' ') continue
+	breq	40b		;/
+	brcs	70f		;if(r22 < ' ') error;
+	cpi	r22, '-'	;if(r22 == '-') {
+	brne	42f		; T = 1;
+	set			; continue;
+	rjmp	40b		;}
+42:	cpi	r22, '9'+1	;if(r22 > '9') error;
+	brcc	70f		;/
+	cpi	r22, '0'	;if(r22 < '0') error;
+	brcs	70f		;/
+	brne	51f		;if(r22 > '0') cv_start;
+	ldi	r25, 8		;r25 = 8;
+	adiw	ZL, 1		;r22 = *(++Z);
+	ld	r22, Z		;/
+	cpi	r22, ' '+1	;if(r22 <= ' ') exit;
+	brcs	80f		;/
+	cpi	r22, 'b'	;if(r22 == 'b') {
+	brne	43f		; r25 = 2;
+	ldi	r25, 2		; cv_start;
+	rjmp	50f		;}
+43:	cpi	r22, 'x'	;if(r22 != 'x') error;
+	brne	51f		;/
+	ldi	r25, 16		;r25 = 16;
+
+50:	adiw	ZL, 1		;Z++;
+	ld	r22, Z		;r22 = *Z;
+51:	cpi	r22, ' '+1	;if(r22 <= ' ') break;
+	brcs	80f		;/
+	cpi	r22, 'a'	;if(r22 >= 'a') r22 =- 0x20;
+	brcs	52f		;
+	subi	r22, 0x20	;/
+52:	subi	r22, '0'	;if((r22 -= '0') < 0) error;
+	brcs	70f		;/
+	cpi	r22, 10		;if(r22 >= 10) {
+	brcs	53f		; r22 -= 7;
+	subi	r22, 7		; if(r22 < 10) 
+	cpi	r22, 10		;
+	brcs	70f		;}
+53:	cp	r22, r25	;if(r22 >= r25) error;
+	brcc	70f		;/
+60:	ldi	r24, 33		;r21:r18 *= r25;
+	sub	r23, r23	;
+61:	brcc	62f		;
+	add	r23, r25	;
+62:	lsr	r23		;
+	ror	r21		;
+	ror	r20		;
+	ror	r19		;
+	ror	r18		;
+	dec	r24		;
+	brne	61b		;/
+	add	r18, r22	;r21:r18 += r22;
+	adc	r19, r24	;
+	adc	r20, r24	;
+	adc	r21, r24	;/
+	rjmp	50b		;repeat
+
+70:	ldi	r24, 0
+	rjmp	81f
+80:	ldi	r24, 1
+81:	brtc	82f
+	clr	r22
+	com	r18
+	com	r19
+	com	r20
+	com	r21
+	adc	r18, r22
+	adc	r19, r22
+	adc	r20, r22
+	adc	r21, r22
+82:	st	-X, ZH
+	st	-X, ZL
+	_MOVW	XH, XL, r1, r0
+	st	X+, r18
+	st	X+, r19
+	st	X+, r20
+	st	X+, r21
+	clr	r1
+	ret
+.endfunc
+#endif
+
+
diff --git a/tmk_core/common/avr/xprintf.h b/tmk_core/common/avr/xprintf.h
index 59c6f25312..e53c0dd8e0 100644
--- a/tmk_core/common/avr/xprintf.h
+++ b/tmk_core/common/avr/xprintf.h
@@ -1,111 +1,111 @@
-/*---------------------------------------------------------------------------

-   Extended itoa, puts and printf                    (C)ChaN, 2011

------------------------------------------------------------------------------*/

-

-#ifndef XPRINTF_H

-#define XPRINTF_H

-

-#include <inttypes.h>

-#include <avr/pgmspace.h>

-

-#ifdef __cplusplus

-extern "C" {

-#endif

-

-extern void (*xfunc_out)(uint8_t);

-#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)

-

-/* This is a pointer to user defined output function. It must be initialized

-   before using this modle.

-*/

-

-void xputc(char chr);

-

-/* This is a stub function to forward outputs to user defined output function.

-   All outputs from this module are output via this function.

-*/

-

-

-/*-----------------------------------------------------------------------------*/

-void xputs(const char *string_p);

-

-/*  The string placed in the ROM is forwarded to xputc() directly.

-*/

-

-

-/*-----------------------------------------------------------------------------*/

-void xitoa(long value, char radix, char width);

-

-/* Extended itoa().

-

-      value  radix  width   output

-        100     10      6   "   100"

-        100     10     -6   "000100"

-        100     10      0   "100"

- 4294967295     10      0   "4294967295"

- 4294967295    -10      0   "-1"

-     655360     16     -8   "000A0000"

-       1024     16      0   "400"

-       0x55      2     -8   "01010101"

-*/

-

-

-/*-----------------------------------------------------------------------------*/

-#define xprintf(format, ...)            __xprintf(PSTR(format), ##__VA_ARGS__)

-#define xsprintf(str, format, ...)      __xsprintf(str, PSTR(format), ##__VA_ARGS__)

-#define xfprintf(func, format, ...)     __xfprintf(func, PSTR(format), ##__VA_ARGS__)

-

-void __xprintf(const char *format_p, ...);	/* Send formatted string to the registered device */

-void __xsprintf(char*, const char *format_p, ...);	/* Put formatted string to the memory */

-void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */

-

-/* Format string is placed in the ROM. The format flags is similar to printf().

-

-   %[flag][width][size]type

-

-   flag

-     A '0' means filled with '0' when output is shorter than width.

-     ' ' is used in default. This is effective only numeral type.

-   width

-     Minimum width in decimal number. This is effective only numeral type.

-     Default width is zero.

-   size

-     A 'l' means the argument is long(32bit). Default is short(16bit).

-     This is effective only numeral type.

-   type

-     'c' : Character, argument is the value

-     's' : String placed on the RAM, argument is the pointer

-     'S' : String placed on the ROM, argument is the pointer

-     'd' : Signed decimal, argument is the value

-     'u' : Unsigned decimal, argument is the value

-     'X' : Hexdecimal, argument is the value

-     'b' : Binary, argument is the value

-     '%' : '%'

-

-*/

-

-

-/*-----------------------------------------------------------------------------*/

-char xatoi(char **str, long *ret);

-

-/* Get value of the numeral string. 

-

-  str

-    Pointer to pointer to source string

-

-    "0b11001010" binary

-    "0377" octal

-    "0xff800" hexdecimal

-    "1250000" decimal

-    "-25000" decimal

-

-  ret

-    Pointer to return value

-*/

-

-#ifdef __cplusplus

-}

-#endif

-

-#endif

-

+/*---------------------------------------------------------------------------
+   Extended itoa, puts and printf                    (C)ChaN, 2011
+-----------------------------------------------------------------------------*/
+
+#ifndef XPRINTF_H
+#define XPRINTF_H
+
+#include <inttypes.h>
+#include <avr/pgmspace.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void (*xfunc_out)(uint8_t);
+#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)
+
+/* This is a pointer to user defined output function. It must be initialized
+   before using this modle.
+*/
+
+void xputc(char chr);
+
+/* This is a stub function to forward outputs to user defined output function.
+   All outputs from this module are output via this function.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xputs(const char *string_p);
+
+/*  The string placed in the ROM is forwarded to xputc() directly.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xitoa(long value, char radix, char width);
+
+/* Extended itoa().
+
+      value  radix  width   output
+        100     10      6   "   100"
+        100     10     -6   "000100"
+        100     10      0   "100"
+ 4294967295     10      0   "4294967295"
+ 4294967295    -10      0   "-1"
+     655360     16     -8   "000A0000"
+       1024     16      0   "400"
+       0x55      2     -8   "01010101"
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+#define xprintf(format, ...)            __xprintf(PSTR(format), ##__VA_ARGS__)
+#define xsprintf(str, format, ...)      __xsprintf(str, PSTR(format), ##__VA_ARGS__)
+#define xfprintf(func, format, ...)     __xfprintf(func, PSTR(format), ##__VA_ARGS__)
+
+void __xprintf(const char *format_p, ...);	/* Send formatted string to the registered device */
+void __xsprintf(char*, const char *format_p, ...);	/* Put formatted string to the memory */
+void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
+
+/* Format string is placed in the ROM. The format flags is similar to printf().
+
+   %[flag][width][size]type
+
+   flag
+     A '0' means filled with '0' when output is shorter than width.
+     ' ' is used in default. This is effective only numeral type.
+   width
+     Minimum width in decimal number. This is effective only numeral type.
+     Default width is zero.
+   size
+     A 'l' means the argument is long(32bit). Default is short(16bit).
+     This is effective only numeral type.
+   type
+     'c' : Character, argument is the value
+     's' : String placed on the RAM, argument is the pointer
+     'S' : String placed on the ROM, argument is the pointer
+     'd' : Signed decimal, argument is the value
+     'u' : Unsigned decimal, argument is the value
+     'X' : Hexdecimal, argument is the value
+     'b' : Binary, argument is the value
+     '%' : '%'
+
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+char xatoi(char **str, long *ret);
+
+/* Get value of the numeral string. 
+
+  str
+    Pointer to pointer to source string
+
+    "0b11001010" binary
+    "0377" octal
+    "0xff800" hexdecimal
+    "1250000" decimal
+    "-25000" decimal
+
+  ret
+    Pointer to return value
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index 084c9fe155..476fc6fe3c 100644
--- a/tmk_core/common/command.c
+++ b/tmk_core/common/command.c
@@ -34,6 +34,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "command.h"
 #include "backlight.h"
 #include "quantum.h"
+#include "version.h"
 
 #ifdef MOUSEKEY_ENABLE
 #include "mousekey.h"
@@ -180,7 +181,7 @@ static void print_version(void)
     print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
           "PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
           "VER: " STR(DEVICE_VER) "\n");
-    print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
+    print("BUILD: " STR(QMK_VERSION) " (" __TIME__ " " __DATE__ ")\n");
 
     /* build options */
     print("OPTIONS:"
diff --git a/tmk_core/native.mk b/tmk_core/native.mk
new file mode 100644
index 0000000000..50232ee9b7
--- /dev/null
+++ b/tmk_core/native.mk
@@ -0,0 +1,24 @@
+CC = gcc
+OBJCOPY = 
+OBJDUMP = 
+SIZE = 
+AR = 
+NM = 
+HEX = 
+EEP = 
+BIN =
+
+
+COMPILEFLAGS += -funsigned-char
+COMPILEFLAGS += -funsigned-bitfields
+COMPILEFLAGS += -ffunction-sections
+COMPILEFLAGS += -fdata-sections
+COMPILEFLAGS += -fshort-enums
+
+CFLAGS += $(COMPILEFLAGS)
+CFLAGS += -fno-inline-small-functions
+CFLAGS += -fno-strict-aliasing
+
+CPPFLAGS += $(COMPILEFLAGS)
+CPPFLAGS += -fno-exceptions
+CPPFLAGS += -std=gnu++11
\ No newline at end of file
diff --git a/tmk_core/protocol/iwrap/suart.S b/tmk_core/protocol/iwrap/suart.S
index 1b02909638..a873515e10 100644
--- a/tmk_core/protocol/iwrap/suart.S
+++ b/tmk_core/protocol/iwrap/suart.S
@@ -1,156 +1,156 @@
-;---------------------------------------------------------------------------;

-; Software implemented UART module                                          ;

-; (C)ChaN, 2005 (http://elm-chan.org/)                                      ;

-;---------------------------------------------------------------------------;

-; Bit rate settings:

-;

-;            1MHz  2MHz  4MHz  6MHz  8MHz  10MHz  12MHz  16MHz  20MHz

-;   2.4kbps   138     -     -     -     -      -      -      -      -

-;   4.8kbps    68   138     -     -     -      -      -      -      -

-;   9.6kbps    33    68   138   208     -      -      -      -      -

-;  19.2kbps     -    33    68   102   138    173    208      -      -

-;  38.4kbps     -     -    33    50    68     85    102    138    172

-;  57.6kbps     -     -    21    33    44     56     68     91    114

-; 115.2kbps     -     -     -     -    21     27     33     44     56

-

-.nolist

-#include <avr/io.h>

-.list

-

-#define	BPS	102 	/* Bit delay. (see above table) */

-#define	BIDIR	0	/* 0:Separated Tx/Rx, 1:Shared Tx/Rx */

-

-#define	OUT_1		sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT	/* Output 1 */

-#define	OUT_0		cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT	/* Output 0 */

-#define	SKIP_IN_1	sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT	/* Skip if 1 */

-#define	SKIP_IN_0	sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT	/* Skip if 0 */

-

-

-

-#ifdef SPM_PAGESIZE

-.macro	_LPMI	reg

-	lpm	\reg, Z+

-.endm

-.macro	_MOVW	dh,dl, sh,sl

-	movw	\dl, \sl

-.endm

-#else

-.macro	_LPMI	reg

-	lpm

-	mov	\reg, r0

-	adiw	ZL, 1

-.endm

-.macro	_MOVW	dh,dl, sh,sl

-	mov	\dl, \sl

-	mov	\dh, \sh

-.endm

-#endif

-

-

-

-;---------------------------------------------------------------------------;

-; Transmit a byte in serial format of N81

-;

-;Prototype: void xmit (uint8_t data);

-;Size: 16 words

-

-.global xmit

-.func xmit

-xmit:

-#if BIDIR

-	ldi	r23, BPS-1	;Pre-idle time for bidirectional data line

-5:	dec	r23     	;

-	brne	5b		;/

-#endif

-	in	r0, _SFR_IO_ADDR(SREG)	;Save flags

-

-	com	r24		;C = start bit

-	ldi	r25, 10		;Bit counter

-	cli			;Start critical section

-

-1:	ldi	r23, BPS-1	;----- Bit transferring loop 

-2:	dec	r23     	;Wait for a bit time

-	brne	2b		;/

-	brcs	3f		;MISO = bit to be sent

-	OUT_1			;

-3:	brcc	4f		;

-	OUT_0			;/

-4:	lsr	r24     	;Get next bit into C

-	dec	r25     	;All bits sent?

-	brne	1b	     	;  no, coutinue

-

-	out	_SFR_IO_ADDR(SREG), r0	;End of critical section

-	ret

-.endfunc

-

-

-

-;---------------------------------------------------------------------------;

-; Receive a byte

-;

-;Prototype: uint8_t rcvr (void);

-;Size: 19 words

-

-.global rcvr

-.func rcvr

-rcvr:

-	in	r0, _SFR_IO_ADDR(SREG)	;Save flags

-

-	ldi	r24, 0x80	;Receiving shift reg

-	cli			;Start critical section

-

-1:	SKIP_IN_1		;Wait for idle

-	rjmp	1b

-2:	SKIP_IN_0		;Wait for start bit

-	rjmp	2b

-	ldi	r25, BPS/2	;Wait for half bit time

-3:	dec	r25

-	brne	3b

-

-4:	ldi	r25, BPS	;----- Bit receiving loop

-5:	dec	r25     	;Wait for a bit time

-	brne	5b		;/

-	lsr	r24     	;Next bit

-	SKIP_IN_0		;Get a data bit into r24.7

-	ori	r24, 0x80

-	brcc	4b	     	;All bits received?  no, continue

-

-	out	_SFR_IO_ADDR(SREG), r0	;End of critical section

-	ret

-.endfunc

-

-

-; Not wait for start bit. This should be called after detecting start bit.

-.global recv

-.func recv

-recv:

-	in	r0, _SFR_IO_ADDR(SREG)	;Save flags

-

-	ldi	r24, 0x80	;Receiving shift reg

-	cli			;Start critical section

-

-;1:	SKIP_IN_1		;Wait for idle

-;	rjmp	1b

-;2:	SKIP_IN_0		;Wait for start bit

-;	rjmp	2b

-	ldi	r25, BPS/2	;Wait for half bit time

-3:	dec	r25

-	brne	3b

-

-4:	ldi	r25, BPS	;----- Bit receiving loop

-5:	dec	r25     	;Wait for a bit time

-	brne	5b		;/

-	lsr	r24     	;Next bit

-	SKIP_IN_0		;Get a data bit into r24.7

-	ori	r24, 0x80

-	brcc	4b	     	;All bits received?  no, continue

-

-	ldi	r25, BPS/2	;Wait for half bit time

-6:	dec	r25

-	brne	6b

-7:	SKIP_IN_1		;Wait for stop bit

-	rjmp	7b

-

-	out	_SFR_IO_ADDR(SREG), r0	;End of critical section

-	ret

-.endfunc

+;---------------------------------------------------------------------------;
+; Software implemented UART module                                          ;
+; (C)ChaN, 2005 (http://elm-chan.org/)                                      ;
+;---------------------------------------------------------------------------;
+; Bit rate settings:
+;
+;            1MHz  2MHz  4MHz  6MHz  8MHz  10MHz  12MHz  16MHz  20MHz
+;   2.4kbps   138     -     -     -     -      -      -      -      -
+;   4.8kbps    68   138     -     -     -      -      -      -      -
+;   9.6kbps    33    68   138   208     -      -      -      -      -
+;  19.2kbps     -    33    68   102   138    173    208      -      -
+;  38.4kbps     -     -    33    50    68     85    102    138    172
+;  57.6kbps     -     -    21    33    44     56     68     91    114
+; 115.2kbps     -     -     -     -    21     27     33     44     56
+
+.nolist
+#include <avr/io.h>
+.list
+
+#define	BPS	102 	/* Bit delay. (see above table) */
+#define	BIDIR	0	/* 0:Separated Tx/Rx, 1:Shared Tx/Rx */
+
+#define	OUT_1		sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT	/* Output 1 */
+#define	OUT_0		cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT	/* Output 0 */
+#define	SKIP_IN_1	sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT	/* Skip if 1 */
+#define	SKIP_IN_0	sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT	/* Skip if 0 */
+
+
+
+#ifdef SPM_PAGESIZE
+.macro	_LPMI	reg
+	lpm	\reg, Z+
+.endm
+.macro	_MOVW	dh,dl, sh,sl
+	movw	\dl, \sl
+.endm
+#else
+.macro	_LPMI	reg
+	lpm
+	mov	\reg, r0
+	adiw	ZL, 1
+.endm
+.macro	_MOVW	dh,dl, sh,sl
+	mov	\dl, \sl
+	mov	\dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------;
+; Transmit a byte in serial format of N81
+;
+;Prototype: void xmit (uint8_t data);
+;Size: 16 words
+
+.global xmit
+.func xmit
+xmit:
+#if BIDIR
+	ldi	r23, BPS-1	;Pre-idle time for bidirectional data line
+5:	dec	r23     	;
+	brne	5b		;/
+#endif
+	in	r0, _SFR_IO_ADDR(SREG)	;Save flags
+
+	com	r24		;C = start bit
+	ldi	r25, 10		;Bit counter
+	cli			;Start critical section
+
+1:	ldi	r23, BPS-1	;----- Bit transferring loop 
+2:	dec	r23     	;Wait for a bit time
+	brne	2b		;/
+	brcs	3f		;MISO = bit to be sent
+	OUT_1			;
+3:	brcc	4f		;
+	OUT_0			;/
+4:	lsr	r24     	;Get next bit into C
+	dec	r25     	;All bits sent?
+	brne	1b	     	;  no, coutinue
+
+	out	_SFR_IO_ADDR(SREG), r0	;End of critical section
+	ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Receive a byte
+;
+;Prototype: uint8_t rcvr (void);
+;Size: 19 words
+
+.global rcvr
+.func rcvr
+rcvr:
+	in	r0, _SFR_IO_ADDR(SREG)	;Save flags
+
+	ldi	r24, 0x80	;Receiving shift reg
+	cli			;Start critical section
+
+1:	SKIP_IN_1		;Wait for idle
+	rjmp	1b
+2:	SKIP_IN_0		;Wait for start bit
+	rjmp	2b
+	ldi	r25, BPS/2	;Wait for half bit time
+3:	dec	r25
+	brne	3b
+
+4:	ldi	r25, BPS	;----- Bit receiving loop
+5:	dec	r25     	;Wait for a bit time
+	brne	5b		;/
+	lsr	r24     	;Next bit
+	SKIP_IN_0		;Get a data bit into r24.7
+	ori	r24, 0x80
+	brcc	4b	     	;All bits received?  no, continue
+
+	out	_SFR_IO_ADDR(SREG), r0	;End of critical section
+	ret
+.endfunc
+
+
+; Not wait for start bit. This should be called after detecting start bit.
+.global recv
+.func recv
+recv:
+	in	r0, _SFR_IO_ADDR(SREG)	;Save flags
+
+	ldi	r24, 0x80	;Receiving shift reg
+	cli			;Start critical section
+
+;1:	SKIP_IN_1		;Wait for idle
+;	rjmp	1b
+;2:	SKIP_IN_0		;Wait for start bit
+;	rjmp	2b
+	ldi	r25, BPS/2	;Wait for half bit time
+3:	dec	r25
+	brne	3b
+
+4:	ldi	r25, BPS	;----- Bit receiving loop
+5:	dec	r25     	;Wait for a bit time
+	brne	5b		;/
+	lsr	r24     	;Next bit
+	SKIP_IN_0		;Get a data bit into r24.7
+	ori	r24, 0x80
+	brcc	4b	     	;All bits received?  no, continue
+
+	ldi	r25, BPS/2	;Wait for half bit time
+6:	dec	r25
+	brne	6b
+7:	SKIP_IN_1		;Wait for stop bit
+	rjmp	7b
+
+	out	_SFR_IO_ADDR(SREG), r0	;End of critical section
+	ret
+.endfunc
diff --git a/tmk_core/protocol/iwrap/suart.h b/tmk_core/protocol/iwrap/suart.h
index 72725b998f..7d92be0692 100644
--- a/tmk_core/protocol/iwrap/suart.h
+++ b/tmk_core/protocol/iwrap/suart.h
@@ -1,8 +1,8 @@
-#ifndef SUART

-#define SUART

-

-void xmit(uint8_t);

-uint8_t rcvr(void);

-uint8_t recv(void);

-

-#endif	/* SUART */

+#ifndef SUART
+#define SUART
+
+void xmit(uint8_t);
+uint8_t rcvr(void);
+uint8_t recv(void);
+
+#endif	/* SUART */
diff --git a/tmk_core/protocol/iwrap/wd.h b/tmk_core/protocol/iwrap/wd.h
index 99058f0331..12395bf696 100644
--- a/tmk_core/protocol/iwrap/wd.h
+++ b/tmk_core/protocol/iwrap/wd.h
@@ -1,159 +1,159 @@
-/* This is from http://www.mtcnet.net/~henryvm/wdt/ */

-#ifndef _AVR_WD_H_

-#define _AVR_WD_H_

-

-#include <avr/io.h>

-

-/*

-Copyright (c) 2009, Curt Van Maanen

-

-Permission to use, copy, modify, and/or distribute this software for any

-purpose with or without fee is hereby granted, provided that the above

-copyright notice and this permission notice appear in all copies.

-

-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES

-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF

-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR

-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES

-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN

-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF

-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

-

-

-include usage-

-    #include "wd.h"             //if in same directory as project

-    #include <avr/wd.h>         //if wd.h is in avr directory

-

-set watchdog modes and prescale

-

-usage-

-    WD_SET(mode,[timeout]);     //prescale always set

-

-modes-

-    WD_OFF                      disabled

-    WD_RST                      normal reset mode

-    WD_IRQ                      interrupt only mode (if supported)

-    WD_RST_IRQ                  interrupt+reset mode (if supported)

-

-timeout-

-    WDTO_15MS                   default if no timeout provided

-    WDTO_30MS

-    WDTO_60MS

-    WDTO_120MS

-    WDTO_250MS

-    WDTO_500MS

-    WDTO_1S

-    WDTO_2S

-    WDTO_4S                     (if supported)

-    WDTO_8S                     (if supported)

-

-examples-

-    WD_SET(WD_RST,WDTO_1S);     //reset mode, 1s timeout

-    WD_SET(WD_OFF);             //watchdog disabled (if not fused on)

-    WD_SET(WD_RST);             //reset mode, 15ms (default timeout)

-    WD_SET(WD_IRQ,WDTO_120MS);  //interrupt only mode, 120ms timeout

-    WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout

-

-

-for enhanced watchdogs, if the watchdog is not being used WDRF should be

-cleared on every power up or reset, along with disabling the watchdog-

-    WD_DISABLE();               //clear WDRF, then turn off watchdog

-

-*/

-

-//reset registers to the same name (MCUCSR)

-#if !defined(MCUCSR)

-#define MCUCSR                  MCUSR

-#endif

-

-//watchdog registers to the same name (WDTCSR)

-#if !defined(WDTCSR)

-#define WDTCSR                  WDTCR

-#endif

-

-//if enhanced watchdog, define irq values, create disable macro

-#if defined(WDIF)

-#define WD_IRQ                  0xC0

-#define WD_RST_IRQ              0xC8

-#define WD_DISABLE()            do{                       \

-                                    MCUCSR &= ~(1<<WDRF); \

-                                    WD_SET(WD_OFF);       \

-                                }while(0)

-#endif

-

-//all watchdogs

-#define WD_RST                  8

-#define WD_OFF                  0

-

-//prescale values

-#define WDTO_15MS               0

-#define WDTO_30MS               1

-#define WDTO_60MS               2

-#define WDTO_120MS              3

-#define WDTO_250MS              4

-#define WDTO_500MS              5

-#define WDTO_1S                 6

-#define WDTO_2S                 7

-

-//prescale values for avrs with WDP3

-#if defined(WDP3)

-#define WDTO_4S                 0x20

-#define WDTO_8S                 0x21

-#endif

-

-//watchdog reset

-#define WDR()                   __asm__ __volatile__("wdr")

-

-//avr reset using watchdog

-#define WD_AVR_RESET()          do{                              \

-                                    __asm__ __volatile__("cli"); \

-                                    WD_SET_UNSAFE(WD_RST);       \

-                                    while(1);                    \

-                                }while(0)

-

-/*set the watchdog-

-1. save SREG

-2. turn off irq's

-3. reset watchdog timer

-4. enable watchdog change

-5. write watchdog value

-6. restore SREG (restoring irq status)

-*/

-#define WD_SET(val,...)                                 \

-    __asm__ __volatile__(                               \

-        "in __tmp_reg__,__SREG__"           "\n\t"      \

-        "cli"                               "\n\t"      \

-        "wdr"                               "\n\t"      \

-        "sts %[wdreg],%[wden]"              "\n\t"      \

-        "sts %[wdreg],%[wdval]"             "\n\t"      \

-        "out __SREG__,__tmp_reg__"          "\n\t"      \

-        :                                               \

-        : [wdreg] "M" (&WDTCSR),                        \

-          [wden]  "r" ((uint8_t)(0x18)),                \

-          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \

-        : "r0"                                          \

-)

-

-/*set the watchdog when I bit in SREG known to be clear-

-1. reset watchdog timer

-2. enable watchdog change

-5. write watchdog value

-*/

-#define WD_SET_UNSAFE(val,...)                          \

-    __asm__ __volatile__(                               \

-        "wdr"                               "\n\t"      \

-        "sts %[wdreg],%[wden]"              "\n\t"      \

-        "sts %[wdreg],%[wdval]"             "\n\t"      \

-        :                                               \

-        : [wdreg] "M" (&WDTCSR),                        \

-          [wden]  "r" ((uint8_t)(0x18)),                \

-          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \

-)

-

-

-//for compatibility with avr/wdt.h

-#define wdt_enable(val) WD_SET(WD_RST,val)

-#define wdt_disable()   WD_SET(WD_OFF)

-

-

-#endif /* _AVR_WD_H_ */

+/* This is from http://www.mtcnet.net/~henryvm/wdt/ */
+#ifndef _AVR_WD_H_
+#define _AVR_WD_H_
+
+#include <avr/io.h>
+
+/*
+Copyright (c) 2009, Curt Van Maanen
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+include usage-
+    #include "wd.h"             //if in same directory as project
+    #include <avr/wd.h>         //if wd.h is in avr directory
+
+set watchdog modes and prescale
+
+usage-
+    WD_SET(mode,[timeout]);     //prescale always set
+
+modes-
+    WD_OFF                      disabled
+    WD_RST                      normal reset mode
+    WD_IRQ                      interrupt only mode (if supported)
+    WD_RST_IRQ                  interrupt+reset mode (if supported)
+
+timeout-
+    WDTO_15MS                   default if no timeout provided
+    WDTO_30MS
+    WDTO_60MS
+    WDTO_120MS
+    WDTO_250MS
+    WDTO_500MS
+    WDTO_1S
+    WDTO_2S
+    WDTO_4S                     (if supported)
+    WDTO_8S                     (if supported)
+
+examples-
+    WD_SET(WD_RST,WDTO_1S);     //reset mode, 1s timeout
+    WD_SET(WD_OFF);             //watchdog disabled (if not fused on)
+    WD_SET(WD_RST);             //reset mode, 15ms (default timeout)
+    WD_SET(WD_IRQ,WDTO_120MS);  //interrupt only mode, 120ms timeout
+    WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout
+
+
+for enhanced watchdogs, if the watchdog is not being used WDRF should be
+cleared on every power up or reset, along with disabling the watchdog-
+    WD_DISABLE();               //clear WDRF, then turn off watchdog
+
+*/
+
+//reset registers to the same name (MCUCSR)
+#if !defined(MCUCSR)
+#define MCUCSR                  MCUSR
+#endif
+
+//watchdog registers to the same name (WDTCSR)
+#if !defined(WDTCSR)
+#define WDTCSR                  WDTCR
+#endif
+
+//if enhanced watchdog, define irq values, create disable macro
+#if defined(WDIF)
+#define WD_IRQ                  0xC0
+#define WD_RST_IRQ              0xC8
+#define WD_DISABLE()            do{                       \
+                                    MCUCSR &= ~(1<<WDRF); \
+                                    WD_SET(WD_OFF);       \
+                                }while(0)
+#endif
+
+//all watchdogs
+#define WD_RST                  8
+#define WD_OFF                  0
+
+//prescale values
+#define WDTO_15MS               0
+#define WDTO_30MS               1
+#define WDTO_60MS               2
+#define WDTO_120MS              3
+#define WDTO_250MS              4
+#define WDTO_500MS              5
+#define WDTO_1S                 6
+#define WDTO_2S                 7
+
+//prescale values for avrs with WDP3
+#if defined(WDP3)
+#define WDTO_4S                 0x20
+#define WDTO_8S                 0x21
+#endif
+
+//watchdog reset
+#define WDR()                   __asm__ __volatile__("wdr")
+
+//avr reset using watchdog
+#define WD_AVR_RESET()          do{                              \
+                                    __asm__ __volatile__("cli"); \
+                                    WD_SET_UNSAFE(WD_RST);       \
+                                    while(1);                    \
+                                }while(0)
+
+/*set the watchdog-
+1. save SREG
+2. turn off irq's
+3. reset watchdog timer
+4. enable watchdog change
+5. write watchdog value
+6. restore SREG (restoring irq status)
+*/
+#define WD_SET(val,...)                                 \
+    __asm__ __volatile__(                               \
+        "in __tmp_reg__,__SREG__"           "\n\t"      \
+        "cli"                               "\n\t"      \
+        "wdr"                               "\n\t"      \
+        "sts %[wdreg],%[wden]"              "\n\t"      \
+        "sts %[wdreg],%[wdval]"             "\n\t"      \
+        "out __SREG__,__tmp_reg__"          "\n\t"      \
+        :                                               \
+        : [wdreg] "M" (&WDTCSR),                        \
+          [wden]  "r" ((uint8_t)(0x18)),                \
+          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \
+        : "r0"                                          \
+)
+
+/*set the watchdog when I bit in SREG known to be clear-
+1. reset watchdog timer
+2. enable watchdog change
+5. write watchdog value
+*/
+#define WD_SET_UNSAFE(val,...)                          \
+    __asm__ __volatile__(                               \
+        "wdr"                               "\n\t"      \
+        "sts %[wdreg],%[wden]"              "\n\t"      \
+        "sts %[wdreg],%[wdval]"             "\n\t"      \
+        :                                               \
+        : [wdreg] "M" (&WDTCSR),                        \
+          [wden]  "r" ((uint8_t)(0x18)),                \
+          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \
+)
+
+
+//for compatibility with avr/wdt.h
+#define wdt_enable(val) WD_SET(WD_RST,val)
+#define wdt_disable()   WD_SET(WD_OFF)
+
+
+#endif /* _AVR_WD_H_ */
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
index 72f3ff04c7..02e7063c66 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
@@ -1,161 +1,161 @@
-<asf xmlversion="1.0">

-	<project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">

-		<require idref="lufa.bootloaders.cdc"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">

-		<require idref="lufa.bootloaders.cdc"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb647"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">

-		<require idref="lufa.bootloaders.cdc"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega32u4"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">

-		<require idref="lufa.bootloaders.cdc"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega16u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">

-		<require idref="lufa.bootloaders.cdc"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega8u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">

-		<info type="description" value="summary">

-		CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="Bootloaders"/>

-			<keyword value="USB Device"/>

-		</info>

-

- 		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="include-path" value="."/>

-		<build type="c-source" value="BootloaderCDC.c"/>

-		<build type="header-file" value="BootloaderCDC.h"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="Descriptors.h"/>

-		<build type="c-source" value="BootloaderAPI.c"/>

-		<build type="header-file" value="BootloaderAPI.h"/>

-		<build type="asm-source" value="BootloaderAPITable.S"/>

-

-		<build type="module-config" subtype="path" value="Config"/>

-		<build type="header-file" value="Config/LUFAConfig.h"/>

-		<build type="header-file" value="Config/AppConfig.h"/>

-

-		<build type="distribute" subtype="user-file" value="doxyfile"/>

-		<build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>

-		<build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-		<require idref="lufa.drivers.board.leds"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">
+		<require idref="lufa.bootloaders.cdc"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">
+		<require idref="lufa.bootloaders.cdc"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb647"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">
+		<require idref="lufa.bootloaders.cdc"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega32u4"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">
+		<require idref="lufa.bootloaders.cdc"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega16u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">
+		<require idref="lufa.bootloaders.cdc"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega8u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">
+		<info type="description" value="summary">
+		CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="Bootloaders"/>
+			<keyword value="USB Device"/>
+		</info>
+
+ 		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="include-path" value="."/>
+		<build type="c-source" value="BootloaderCDC.c"/>
+		<build type="header-file" value="BootloaderCDC.h"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="Descriptors.h"/>
+		<build type="c-source" value="BootloaderAPI.c"/>
+		<build type="header-file" value="BootloaderAPI.h"/>
+		<build type="asm-source" value="BootloaderAPITable.S"/>
+
+		<build type="module-config" subtype="path" value="Config"/>
+		<build type="header-file" value="Config/LUFAConfig.h"/>
+		<build type="header-file" value="Config/AppConfig.h"/>
+
+		<build type="distribute" subtype="user-file" value="doxyfile"/>
+		<build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>
+		<build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+		<require idref="lufa.drivers.board.leds"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
index 6f3312b764..f56aba69f5 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
@@ -1,156 +1,156 @@
-<asf xmlversion="1.0">

-	<project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">

-		<require idref="lufa.bootloaders.dfu"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">

-		<require idref="lufa.bootloaders.dfu"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb647"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">

-		<require idref="lufa.bootloaders.dfu"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega32u4"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">

-		<require idref="lufa.bootloaders.dfu"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega16u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">

-		<require idref="lufa.bootloaders.dfu"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega8u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">

-		<info type="description" value="summary">

-		DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="Bootloaders"/>

-			<keyword value="USB Device"/>

-		</info>

-

- 		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="include-path" value="."/>

-		<build type="c-source" value="BootloaderDFU.c"/>

-		<build type="header-file" value="BootloaderDFU.h"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="Descriptors.h"/>

-		<build type="c-source" value="BootloaderAPI.c"/>

-		<build type="header-file" value="BootloaderAPI.h"/>

-		<build type="asm-source" value="BootloaderAPITable.S"/>

-

-		<build type="module-config" subtype="path" value="Config"/>

-		<build type="header-file" value="Config/LUFAConfig.h"/>

-		<build type="header-file" value="Config/AppConfig.h"/>

-

-		<build type="distribute" subtype="user-file" value="doxyfile"/>

-		<build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-		<require idref="lufa.drivers.board.leds"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">
+		<require idref="lufa.bootloaders.dfu"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">
+		<require idref="lufa.bootloaders.dfu"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb647"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">
+		<require idref="lufa.bootloaders.dfu"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega32u4"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">
+		<require idref="lufa.bootloaders.dfu"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega16u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">
+		<require idref="lufa.bootloaders.dfu"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega8u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">
+		<info type="description" value="summary">
+		DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="Bootloaders"/>
+			<keyword value="USB Device"/>
+		</info>
+
+ 		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="include-path" value="."/>
+		<build type="c-source" value="BootloaderDFU.c"/>
+		<build type="header-file" value="BootloaderDFU.h"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="Descriptors.h"/>
+		<build type="c-source" value="BootloaderAPI.c"/>
+		<build type="header-file" value="BootloaderAPI.h"/>
+		<build type="asm-source" value="BootloaderAPITable.S"/>
+
+		<build type="module-config" subtype="path" value="Config"/>
+		<build type="header-file" value="Config/LUFAConfig.h"/>
+		<build type="header-file" value="Config/AppConfig.h"/>
+
+		<build type="distribute" subtype="user-file" value="doxyfile"/>
+		<build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+		<require idref="lufa.drivers.board.leds"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
index 9394b13530..c67b9419ed 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
@@ -1,123 +1,123 @@
-<asf xmlversion="1.0">

-	<project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">

-		<require idref="lufa.bootloaders.hid"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>

-	</project>

-

-	<project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">

-		<require idref="lufa.bootloaders.hid"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb647"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>

-	</project>

-

-	<project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">

-		<require idref="lufa.bootloaders.hid"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega32u4"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>

-	</project>

-

-	<project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">

-		<require idref="lufa.bootloaders.hid"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega16u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x3800"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>

-	</project>

-

-	<project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">

-		<require idref="lufa.bootloaders.hid"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega8u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1800"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>

-	</project>

-

-	<module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">

-		<info type="description" value="summary">

-		HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="Bootloaders"/>

-			<keyword value="USB Device"/>

-		</info>

-

-		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="include-path" value="."/>

-		<build type="c-source" value="BootloaderHID.c"/>

-		<build type="header-file" value="BootloaderHID.h"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="Descriptors.h"/>

-

-		<build type="module-config" subtype="path" value="Config"/>

-		<build type="header-file" value="Config/LUFAConfig.h"/>

-

-		<build type="distribute" subtype="user-file" value="doxyfile"/>

-		<build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>

-		<build type="distribute" subtype="directory" value="HostLoaderApp"/>

-		<build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-		<require idref="lufa.drivers.board.leds"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">
+		<require idref="lufa.bootloaders.hid"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+	</project>
+
+	<project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">
+		<require idref="lufa.bootloaders.hid"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb647"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+	</project>
+
+	<project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">
+		<require idref="lufa.bootloaders.hid"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega32u4"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+	</project>
+
+	<project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">
+		<require idref="lufa.bootloaders.hid"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega16u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x3800"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>
+	</project>
+
+	<project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">
+		<require idref="lufa.bootloaders.hid"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega8u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1800"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>
+	</project>
+
+	<module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">
+		<info type="description" value="summary">
+		HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="Bootloaders"/>
+			<keyword value="USB Device"/>
+		</info>
+
+		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="include-path" value="."/>
+		<build type="c-source" value="BootloaderHID.c"/>
+		<build type="header-file" value="BootloaderHID.h"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="Descriptors.h"/>
+
+		<build type="module-config" subtype="path" value="Config"/>
+		<build type="header-file" value="Config/LUFAConfig.h"/>
+
+		<build type="distribute" subtype="user-file" value="doxyfile"/>
+		<build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>
+		<build type="distribute" subtype="directory" value="HostLoaderApp"/>
+		<build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+		<require idref="lufa.drivers.board.leds"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
index 6844d4b01c..91fc949666 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
@@ -1,102 +1,102 @@
-/*

-             LUFA Library

-     Copyright (C) Dean Camera, 2014.

-

-  dean [at] fourwalledcubicle [dot] com

-           www.lufa-lib.org

-*/

-

-/*

-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)

-

-  Permission to use, copy, modify, distribute, and sell this

-  software and its documentation for any purpose is hereby granted

-  without fee, provided that the above copyright notice appear in

-  all copies and that both that the copyright notice and this

-  permission notice and warranty disclaimer appear in supporting

-  documentation, and that the name of the author not be used in

-  advertising or publicity pertaining to distribution of the

-  software without specific, written prior permission.

-

-  The author disclaims all warranties with regard to this

-  software, including all implied warranties of merchantability

-  and fitness.  In no event shall the author be liable for any

-  special, indirect or consequential damages or any damages

-  whatsoever resulting from loss of use, data or profits, whether

-  in an action of contract, negligence or other tortious action,

-  arising out of or in connection with the use or performance of

-  this software.

-*/

-

-#if AUX_BOOT_SECTION_SIZE > 0

-#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).

-

-; Trampoline to jump over the AUX bootloader section to the start of the bootloader,

-; on devices where an AUX bootloader section is used.

-.section .boot_aux_trampoline, "ax"

-.global Boot_AUX_Trampoline

-Boot_AUX_Trampoline:

-	jmp BOOT_START_ADDR

-#endif

-

-; Trampolines to actual API implementations if the target address is outside the

-; range of a rjmp instruction (can happen with large bootloader sections)

-.section .apitable_trampolines, "ax"

-.global BootloaderAPI_Trampolines

-BootloaderAPI_Trampolines:

-

-	BootloaderAPI_ErasePage_Trampoline:

-		jmp BootloaderAPI_ErasePage

-	BootloaderAPI_WritePage_Trampoline:

-		jmp BootloaderAPI_WritePage

-	BootloaderAPI_FillWord_Trampoline:

-		jmp BootloaderAPI_FillWord

-	BootloaderAPI_ReadSignature_Trampoline:

-		jmp BootloaderAPI_ReadSignature

-	BootloaderAPI_ReadFuse_Trampoline:

-		jmp BootloaderAPI_ReadFuse

-	BootloaderAPI_ReadLock_Trampoline:

-		jmp BootloaderAPI_ReadLock

-	BootloaderAPI_WriteLock_Trampoline:

-		jmp BootloaderAPI_WriteLock

-	BootloaderAPI_UNUSED1:

-		ret

-	BootloaderAPI_UNUSED2:

-		ret

-	BootloaderAPI_UNUSED3:

-		ret

-	BootloaderAPI_UNUSED4:

-		ret

-	BootloaderAPI_UNUSED5:

-		ret

-

-

-

-; API function jump table

-.section .apitable_jumptable, "ax"

-.global BootloaderAPI_JumpTable

-BootloaderAPI_JumpTable:

-

-	rjmp BootloaderAPI_ErasePage_Trampoline

-	rjmp BootloaderAPI_WritePage_Trampoline

-	rjmp BootloaderAPI_FillWord_Trampoline

-	rjmp BootloaderAPI_ReadSignature_Trampoline

-	rjmp BootloaderAPI_ReadFuse_Trampoline

-	rjmp BootloaderAPI_ReadLock_Trampoline

-	rjmp BootloaderAPI_WriteLock_Trampoline

-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1

-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2

-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3

-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4

-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5

-

-

-

-; Bootloader table signatures and information

-.section .apitable_signatures, "ax"

-.global BootloaderAPI_Signatures

-BootloaderAPI_Signatures:

-

-	.long BOOT_START_ADDR ; Start address of the bootloader

-	.word 0xDF30 ; Signature for the MS class bootloader, V1

-	.word 0xDCFB ; Signature for a LUFA class bootloader

+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2014.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#if AUX_BOOT_SECTION_SIZE > 0
+#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
+
+; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
+; on devices where an AUX bootloader section is used.
+.section .boot_aux_trampoline, "ax"
+.global Boot_AUX_Trampoline
+Boot_AUX_Trampoline:
+	jmp BOOT_START_ADDR
+#endif
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+	BootloaderAPI_ErasePage_Trampoline:
+		jmp BootloaderAPI_ErasePage
+	BootloaderAPI_WritePage_Trampoline:
+		jmp BootloaderAPI_WritePage
+	BootloaderAPI_FillWord_Trampoline:
+		jmp BootloaderAPI_FillWord
+	BootloaderAPI_ReadSignature_Trampoline:
+		jmp BootloaderAPI_ReadSignature
+	BootloaderAPI_ReadFuse_Trampoline:
+		jmp BootloaderAPI_ReadFuse
+	BootloaderAPI_ReadLock_Trampoline:
+		jmp BootloaderAPI_ReadLock
+	BootloaderAPI_WriteLock_Trampoline:
+		jmp BootloaderAPI_WriteLock
+	BootloaderAPI_UNUSED1:
+		ret
+	BootloaderAPI_UNUSED2:
+		ret
+	BootloaderAPI_UNUSED3:
+		ret
+	BootloaderAPI_UNUSED4:
+		ret
+	BootloaderAPI_UNUSED5:
+		ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+	rjmp BootloaderAPI_ErasePage_Trampoline
+	rjmp BootloaderAPI_WritePage_Trampoline
+	rjmp BootloaderAPI_FillWord_Trampoline
+	rjmp BootloaderAPI_ReadSignature_Trampoline
+	rjmp BootloaderAPI_ReadFuse_Trampoline
+	rjmp BootloaderAPI_ReadLock_Trampoline
+	rjmp BootloaderAPI_WriteLock_Trampoline
+	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+	.long BOOT_START_ADDR ; Start address of the bootloader
+	.word 0xDF30 ; Signature for the MS class bootloader, V1
+	.word 0xDCFB ; Signature for a LUFA class bootloader
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
index f1d550d1eb..700ffa26ff 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
@@ -1,156 +1,156 @@
-<asf xmlversion="1.0">

-	<project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">

-		<require idref="lufa.bootloaders.mass_storage"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1E000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>

-

-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">

-		<require idref="lufa.bootloaders.mass_storage"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb647"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0xE000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>

-

-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">

-		<require idref="lufa.bootloaders.mass_storage"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega32u4"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>

-

-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>

-		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">

-		<require idref="lufa.bootloaders.mass_storage"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega16u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>

-

-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>

-		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">

-		<info type="description" value="summary">

-		Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="Bootloaders"/>

-			<keyword value="USB Device"/>

-		</info>

-

-		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="include-path" value="."/>

-		<build type="c-source" value="BootloaderMassStorage.c"/>

-		<build type="header-file" value="BootloaderMassStorage.h"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="Descriptors.h"/>

-		<build type="c-source" value="BootloaderAPI.c"/>

-		<build type="header-file" value="BootloaderAPI.h"/>

-		<build type="asm-source" value="BootloaderAPITable.S"/>

-

-		<build type="module-config" subtype="path" value="Config"/>

-		<build type="header-file" value="Config/LUFAConfig.h"/>

-		<build type="header-file" value="Config/AppConfig.h"/>

-

-		<build type="include-path" value="Lib"/>

-		<build type="header-file" value="Lib/VirtualFAT.h"/>

-		<build type="c-source" value="Lib/VirtualFAT.c"/>

-		<build type="header-file" value="Lib/SCSI.h"/>

-		<build type="c-source" value="Lib/SCSI.c"/>

-

-		<build type="distribute" subtype="user-file" value="doxyfile"/>

-		<build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-		<require idref="lufa.drivers.board.leds"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">
+		<require idref="lufa.bootloaders.mass_storage"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1E000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>
+
+		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">
+		<require idref="lufa.bootloaders.mass_storage"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb647"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0xE000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>
+
+		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">
+		<require idref="lufa.bootloaders.mass_storage"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega32u4"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>
+		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">
+		<require idref="lufa.bootloaders.mass_storage"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega16u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>
+		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">
+		<info type="description" value="summary">
+		Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="Bootloaders"/>
+			<keyword value="USB Device"/>
+		</info>
+
+		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="include-path" value="."/>
+		<build type="c-source" value="BootloaderMassStorage.c"/>
+		<build type="header-file" value="BootloaderMassStorage.h"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="Descriptors.h"/>
+		<build type="c-source" value="BootloaderAPI.c"/>
+		<build type="header-file" value="BootloaderAPI.h"/>
+		<build type="asm-source" value="BootloaderAPITable.S"/>
+
+		<build type="module-config" subtype="path" value="Config"/>
+		<build type="header-file" value="Config/LUFAConfig.h"/>
+		<build type="header-file" value="Config/AppConfig.h"/>
+
+		<build type="include-path" value="Lib"/>
+		<build type="header-file" value="Lib/VirtualFAT.h"/>
+		<build type="c-source" value="Lib/VirtualFAT.c"/>
+		<build type="header-file" value="Lib/SCSI.h"/>
+		<build type="c-source" value="Lib/SCSI.c"/>
+
+		<build type="distribute" subtype="user-file" value="doxyfile"/>
+		<build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+		<require idref="lufa.drivers.board.leds"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
index 91bb4038e8..a0edb2c4f5 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
@@ -1,68 +1,68 @@
-#

-#             LUFA Library

-#     Copyright (C) Dean Camera, 2014.

-#

-#  dean [at] fourwalledcubicle [dot] com

-#           www.lufa-lib.org

-#

-# --------------------------------------

-#         LUFA Project Makefile.

-# --------------------------------------

-

-# Run "make help" for target help.

-

-MCU          = at90usb1287

-ARCH         = AVR8

-BOARD        = USBKEY

-F_CPU        = 8000000

-F_USB        = $(F_CPU)

-OPTIMIZATION = s

-TARGET       = BootloaderMassStorage

-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)

-LUFA_PATH    = ../../LUFA

-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)

-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)

-

-# Flash size and bootloader section sizes of the target, in KB. These must

-# match the target's total FLASH size and the bootloader size set in the

-# device's fuses.

-FLASH_SIZE_KB         = 128

-BOOT_SECTION_SIZE_KB  = 8

-

-# Bootloader address calculation formulas

-# Do not modify these macros, but rather modify the dependent values above.

-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )

-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )

-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )

-

-# Bootloader linker section flags for relocating the API table sections to

-# known FLASH addresses - these should not normally be user-edited.

-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))

-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)

-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)

-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)

-

-# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the

-# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum

-# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.

-ifeq ($(BOOT_SECTION_SIZE_KB),8)

-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE=0

-else

-  AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))

-

-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'

-  LD_FLAGS           += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))

-  LD_FLAGS           += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)

-endif

-

-# Default target

-all:

-

-# Include LUFA build script makefiles

-include $(LUFA_PATH)/Build/lufa_core.mk

-include $(LUFA_PATH)/Build/lufa_sources.mk

-include $(LUFA_PATH)/Build/lufa_build.mk

-include $(LUFA_PATH)/Build/lufa_cppcheck.mk

-include $(LUFA_PATH)/Build/lufa_doxygen.mk

-include $(LUFA_PATH)/Build/lufa_avrdude.mk

-include $(LUFA_PATH)/Build/lufa_atprogram.mk

+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+BOARD        = USBKEY
+F_CPU        = 8000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = BootloaderMassStorage
+SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH    = ../../LUFA
+CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB         = 128
+BOOT_SECTION_SIZE_KB  = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
+
+# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
+# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum
+# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
+ifeq ($(BOOT_SECTION_SIZE_KB),8)
+  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE=0
+else
+  AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))
+
+  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
+  LD_FLAGS           += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
+  LD_FLAGS           += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
+endif
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
index ec499b74e5..88c51da825 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
@@ -1,91 +1,91 @@
-/*

-             LUFA Library

-     Copyright (C) Dean Camera, 2014.

-

-  dean [at] fourwalledcubicle [dot] com

-           www.lufa-lib.org

-*/

-

-/*

-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)

-

-  Permission to use, copy, modify, distribute, and sell this

-  software and its documentation for any purpose is hereby granted

-  without fee, provided that the above copyright notice appear in

-  all copies and that both that the copyright notice and this

-  permission notice and warranty disclaimer appear in supporting

-  documentation, and that the name of the author not be used in

-  advertising or publicity pertaining to distribution of the

-  software without specific, written prior permission.

-

-  The author disclaims all warranties with regard to this

-  software, including all implied warranties of merchantability

-  and fitness.  In no event shall the author be liable for any

-  special, indirect or consequential damages or any damages

-  whatsoever resulting from loss of use, data or profits, whether

-  in an action of contract, negligence or other tortious action,

-  arising out of or in connection with the use or performance of

-  this software.

-*/

-

-; Trampolines to actual API implementations if the target address is outside the

-; range of a rjmp instruction (can happen with large bootloader sections)

-.section .apitable_trampolines, "ax"

-.global BootloaderAPI_Trampolines

-BootloaderAPI_Trampolines:

-

-	BootloaderAPI_ErasePage_Trampoline:

-		jmp BootloaderAPI_ErasePage

-	BootloaderAPI_WritePage_Trampoline:

-		jmp BootloaderAPI_WritePage

-	BootloaderAPI_FillWord_Trampoline:

-		jmp BootloaderAPI_FillWord

-	BootloaderAPI_ReadSignature_Trampoline:

-		jmp BootloaderAPI_ReadSignature

-	BootloaderAPI_ReadFuse_Trampoline:

-		jmp BootloaderAPI_ReadFuse

-	BootloaderAPI_ReadLock_Trampoline:

-		jmp BootloaderAPI_ReadLock

-	BootloaderAPI_WriteLock_Trampoline:

-		jmp BootloaderAPI_WriteLock

-	BootloaderAPI_UNUSED1:

-		ret

-	BootloaderAPI_UNUSED2:

-		ret

-	BootloaderAPI_UNUSED3:

-		ret

-	BootloaderAPI_UNUSED4:

-		ret

-	BootloaderAPI_UNUSED5:

-		ret

-

-

-

-; API function jump table

-.section .apitable_jumptable, "ax"

-.global BootloaderAPI_JumpTable

-BootloaderAPI_JumpTable:

-

-	rjmp BootloaderAPI_ErasePage_Trampoline

-	rjmp BootloaderAPI_WritePage_Trampoline

-	rjmp BootloaderAPI_FillWord_Trampoline

-	rjmp BootloaderAPI_ReadSignature_Trampoline

-	rjmp BootloaderAPI_ReadFuse_Trampoline

-	rjmp BootloaderAPI_ReadLock_Trampoline

-	rjmp BootloaderAPI_WriteLock_Trampoline

-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1

-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2

-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3

-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4

-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5

-

-

-

-; Bootloader table signatures and information

-.section .apitable_signatures, "ax"

-.global BootloaderAPI_Signatures

-BootloaderAPI_Signatures:

-

-	.long BOOT_START_ADDR ; Start address of the bootloader

-	.word 0xDF20 ; Signature for the Printer class bootloader

-	.word 0xDCFB ; Signature for a LUFA class bootloader

+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2014.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+	BootloaderAPI_ErasePage_Trampoline:
+		jmp BootloaderAPI_ErasePage
+	BootloaderAPI_WritePage_Trampoline:
+		jmp BootloaderAPI_WritePage
+	BootloaderAPI_FillWord_Trampoline:
+		jmp BootloaderAPI_FillWord
+	BootloaderAPI_ReadSignature_Trampoline:
+		jmp BootloaderAPI_ReadSignature
+	BootloaderAPI_ReadFuse_Trampoline:
+		jmp BootloaderAPI_ReadFuse
+	BootloaderAPI_ReadLock_Trampoline:
+		jmp BootloaderAPI_ReadLock
+	BootloaderAPI_WriteLock_Trampoline:
+		jmp BootloaderAPI_WriteLock
+	BootloaderAPI_UNUSED1:
+		ret
+	BootloaderAPI_UNUSED2:
+		ret
+	BootloaderAPI_UNUSED3:
+		ret
+	BootloaderAPI_UNUSED4:
+		ret
+	BootloaderAPI_UNUSED5:
+		ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+	rjmp BootloaderAPI_ErasePage_Trampoline
+	rjmp BootloaderAPI_WritePage_Trampoline
+	rjmp BootloaderAPI_FillWord_Trampoline
+	rjmp BootloaderAPI_ReadSignature_Trampoline
+	rjmp BootloaderAPI_ReadFuse_Trampoline
+	rjmp BootloaderAPI_ReadLock_Trampoline
+	rjmp BootloaderAPI_WriteLock_Trampoline
+	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+	.long BOOT_START_ADDR ; Start address of the bootloader
+	.word 0xDF20 ; Signature for the Printer class bootloader
+	.word 0xDCFB ; Signature for a LUFA class bootloader
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
index 86a56911ed..b5c0c6b3a5 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
@@ -1,159 +1,159 @@
-<asf xmlversion="1.0">

-	<project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">

-		<require idref="lufa.bootloaders.printer"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">

-		<require idref="lufa.bootloaders.printer"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="at90usb647"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">

-		<require idref="lufa.bootloaders.printer"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega32u4"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">

-		<require idref="lufa.bootloaders.printer"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega16u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">

-		<require idref="lufa.bootloaders.printer"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8"/>

-

-		<device-support value="atmega8u2"/>

-		<config name="lufa.drivers.board.name" value="none"/>

-

-		<config name="config.compiler.optimization.level" value="size"/>

-

-		<build type="define" name="F_CPU" value="16000000UL"/>

-		<build type="define" name="F_USB" value="16000000UL"/>

-

-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>

-

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>

-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>

-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>

-	</project>

-

-	<module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">

-		<info type="description" value="summary">

-		Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="Bootloaders"/>

-			<keyword value="USB Device"/>

-		</info>

-

-		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="include-path" value="."/>

-		<build type="c-source" value="BootloaderPrinter.c"/>

-		<build type="header-file" value="BootloaderPrinter.h"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="Descriptors.h"/>

-		<build type="c-source" value="BootloaderAPI.c"/>

-		<build type="header-file" value="BootloaderAPI.h"/>

-		<build type="asm-source" value="BootloaderAPITable.S"/>

-

-		<build type="module-config" subtype="path" value="Config"/>

-		<build type="header-file" value="Config/LUFAConfig.h"/>

-

-		<build type="distribute" subtype="user-file" value="doxyfile"/>

-		<build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-		<require idref="lufa.drivers.board.leds"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">
+		<require idref="lufa.bootloaders.printer"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">
+		<require idref="lufa.bootloaders.printer"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="at90usb647"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">
+		<require idref="lufa.bootloaders.printer"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega32u4"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">
+		<require idref="lufa.bootloaders.printer"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega16u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">
+		<require idref="lufa.bootloaders.printer"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8"/>
+
+		<device-support value="atmega8u2"/>
+		<config name="lufa.drivers.board.name" value="none"/>
+
+		<config name="config.compiler.optimization.level" value="size"/>
+
+		<build type="define" name="F_CPU" value="16000000UL"/>
+		<build type="define" name="F_USB" value="16000000UL"/>
+
+		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+	</project>
+
+	<module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">
+		<info type="description" value="summary">
+		Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="Bootloaders"/>
+			<keyword value="USB Device"/>
+		</info>
+
+		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="include-path" value="."/>
+		<build type="c-source" value="BootloaderPrinter.c"/>
+		<build type="header-file" value="BootloaderPrinter.h"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="Descriptors.h"/>
+		<build type="c-source" value="BootloaderAPI.c"/>
+		<build type="header-file" value="BootloaderAPI.h"/>
+		<build type="asm-source" value="BootloaderAPITable.S"/>
+
+		<build type="module-config" subtype="path" value="Config"/>
+		<build type="header-file" value="Config/LUFAConfig.h"/>
+
+		<build type="distribute" subtype="user-file" value="doxyfile"/>
+		<build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+		<require idref="lufa.drivers.board.leds"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
index 0716c3bbe8..0db035de3b 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
@@ -1,55 +1,55 @@
-#

-#             LUFA Library

-#     Copyright (C) Dean Camera, 2014.

-#

-#  dean [at] fourwalledcubicle [dot] com

-#           www.lufa-lib.org

-#

-# --------------------------------------

-#         LUFA Project Makefile.

-# --------------------------------------

-

-# Run "make help" for target help.

-

-MCU          = at90usb1287

-ARCH         = AVR8

-BOARD        = USBKEY

-F_CPU        = 8000000

-F_USB        = $(F_CPU)

-OPTIMIZATION = s

-TARGET       = BootloaderPrinter

-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)

-LUFA_PATH    = ../../LUFA

-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)

-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)

-

-# Flash size and bootloader section sizes of the target, in KB. These must

-# match the target's total FLASH size and the bootloader size set in the

-# device's fuses.

-FLASH_SIZE_KB         = 128

-BOOT_SECTION_SIZE_KB  = 8

-

-# Bootloader address calculation formulas

-# Do not modify these macros, but rather modify the dependent values above.

-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )

-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )

-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )

-

-# Bootloader linker section flags for relocating the API table sections to

-# known FLASH addresses - these should not normally be user-edited.

-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))

-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)

-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)

-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)

-

-# Default target

-all:

-

-# Include LUFA build script makefiles

-include $(LUFA_PATH)/Build/lufa_core.mk

-include $(LUFA_PATH)/Build/lufa_sources.mk

-include $(LUFA_PATH)/Build/lufa_build.mk

-include $(LUFA_PATH)/Build/lufa_cppcheck.mk

-include $(LUFA_PATH)/Build/lufa_doxygen.mk

-include $(LUFA_PATH)/Build/lufa_avrdude.mk

-include $(LUFA_PATH)/Build/lufa_atprogram.mk

+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+BOARD        = USBKEY
+F_CPU        = 8000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = BootloaderPrinter
+SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH    = ../../LUFA
+CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB         = 128
+BOOT_SECTION_SIZE_KB  = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
index 9fd188c936..e839ba6b1d 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
@@ -1,42 +1,42 @@
-#

-#             LUFA Library

-#     Copyright (C) Dean Camera, 2014.

-#

-#  dean [at] fourwalledcubicle [dot] com

-#           www.lufa-lib.org

-#

-# --------------------------------------

-#         LUFA Project Makefile.

-# --------------------------------------

-

-# Run "make help" for target help.

-

-MCU          = at90usb1287

-ARCH         = AVR8

-F_CPU        = 1000000

-F_USB        = $(F_CPU)

-OPTIMIZATION = s

-TARGET       = HID_EEPROM_Loader

-SRC          = $(TARGET).c

-LUFA_PATH    = ../../../LUFA

-CC_FLAGS     =

-LD_FLAGS     =

-OBJECT_FILES = InputEEData.o

-

-# Default target

-all:

-

-# Determine the AVR sub-architecture of the build main application object file

-FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)

-

-# Create a linkable object file with the input binary EEPROM data stored in the FLASH section

-InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)

-	@echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"

-	avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@

-

-# Include LUFA build script makefiles

-include $(LUFA_PATH)/Build/lufa_core.mk

-include $(LUFA_PATH)/Build/lufa_build.mk

-include $(LUFA_PATH)/Build/lufa_cppcheck.mk

-include $(LUFA_PATH)/Build/lufa_doxygen.mk

-include $(LUFA_PATH)/Build/lufa_hid.mk

+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+F_CPU        = 1000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = HID_EEPROM_Loader
+SRC          = $(TARGET).c
+LUFA_PATH    = ../../../LUFA
+CC_FLAGS     =
+LD_FLAGS     =
+OBJECT_FILES = InputEEData.o
+
+# Default target
+all:
+
+# Determine the AVR sub-architecture of the build main application object file
+FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)
+
+# Create a linkable object file with the input binary EEPROM data stored in the FLASH section
+InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)
+	@echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"
+	avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_hid.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
index fd65db283f..e952714e16 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
@@ -1,55 +1,55 @@
-<asf xmlversion="1.0">

-	<project caption="USB Device Template" id="lufa.templates.device.project.avr8">

-		<require idref="lufa.templates.device"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8_template"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="usbkey"/>

-

-		<build type="define" name="F_CPU" value="8000000UL"/>

-		<build type="define" name="F_USB" value="8000000UL"/>

-	</project>

-

-	<project caption="USB Device Template" id="lufa.templates.device.project.xmega">

-		<require idref="lufa.templates.device"/>

-		<require idref="lufa.boards.dummy.xmega"/>

-		<generator value="as5_8_template"/>

-

-		<device-support value="atxmega256a3bu"/>

-		<config name="lufa.drivers.board.name" value="a3bu_xplained"/>

-

-		<build type="define" name="F_CPU" value="32000000UL"/>

-		<build type="define" name="F_USB" value="48000000UL"/>

-	</project>

-

-	<module type="application" id="lufa.templates.device" caption="USB Device Template">

-		<info type="description" value="summary">

-		Template for a LUFA USB device mode application.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="USB Device"/>

-			<keyword value="Template Projects"/>

-		</info>

-

-		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="c-source" value="DeviceApplication.c"/>

-		<build type="c-source" value="Descriptors.c"/>

-		<build type="header-file" value="DeviceApplication.h"/>

-		<build type="header-file" value="Descriptors.h"/>

-

-		<build type="module-config" subtype="path" value=".."/>

-		<build type="header-file" value="../LUFAConfig.h"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="USB Device Template" id="lufa.templates.device.project.avr8">
+		<require idref="lufa.templates.device"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8_template"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="usbkey"/>
+
+		<build type="define" name="F_CPU" value="8000000UL"/>
+		<build type="define" name="F_USB" value="8000000UL"/>
+	</project>
+
+	<project caption="USB Device Template" id="lufa.templates.device.project.xmega">
+		<require idref="lufa.templates.device"/>
+		<require idref="lufa.boards.dummy.xmega"/>
+		<generator value="as5_8_template"/>
+
+		<device-support value="atxmega256a3bu"/>
+		<config name="lufa.drivers.board.name" value="a3bu_xplained"/>
+
+		<build type="define" name="F_CPU" value="32000000UL"/>
+		<build type="define" name="F_USB" value="48000000UL"/>
+	</project>
+
+	<module type="application" id="lufa.templates.device" caption="USB Device Template">
+		<info type="description" value="summary">
+		Template for a LUFA USB device mode application.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="USB Device"/>
+			<keyword value="Template Projects"/>
+		</info>
+
+		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="c-source" value="DeviceApplication.c"/>
+		<build type="c-source" value="Descriptors.c"/>
+		<build type="header-file" value="DeviceApplication.h"/>
+		<build type="header-file" value="Descriptors.h"/>
+
+		<build type="module-config" subtype="path" value=".."/>
+		<build type="header-file" value="../LUFAConfig.h"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
index c1996ec711..c3860c056d 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
@@ -1,41 +1,41 @@
-<asf xmlversion="1.0">

-	<project caption="USB Host Template" id="lufa.templates.host.project">

-		<require idref="lufa.templates.host"/>

-		<require idref="lufa.boards.dummy.avr8"/>

-		<generator value="as5_8_template"/>

-

-		<device-support value="at90usb1287"/>

-		<config name="lufa.drivers.board.name" value="usbkey"/>

-

-		<build type="define" name="F_CPU" value="8000000UL"/>

-		<build type="define" name="F_USB" value="8000000UL"/>

-	</project>

-

-	<module type="application" id="lufa.templates.host" caption="USB Host Template">

-		<info type="description" value="summary">

-		Template for a LUFA USB host mode application.

-		</info>

-

- 		<info type="gui-flag" value="move-to-root"/>

-

-		<info type="keyword" value="Technology">

-			<keyword value="USB Host"/>

-			<keyword value="Template Projects"/>

-		</info>

-

-		<device-support-alias value="lufa_avr8"/>

-		<device-support-alias value="lufa_xmega"/>

-		<device-support-alias value="lufa_uc3"/>

-

-		<build type="c-source" value="HostApplication.c"/>

-		<build type="header-file" value="HostApplication.h"/>

-

-		<build type="module-config" subtype="path" value=".."/>

-		<build type="header-file" value="../LUFAConfig.h"/>

-

-		<require idref="lufa.common"/>

-		<require idref="lufa.platform"/>

-		<require idref="lufa.drivers.usb"/>

-		<require idref="lufa.drivers.board"/>

-	</module>

-</asf>

+<asf xmlversion="1.0">
+	<project caption="USB Host Template" id="lufa.templates.host.project">
+		<require idref="lufa.templates.host"/>
+		<require idref="lufa.boards.dummy.avr8"/>
+		<generator value="as5_8_template"/>
+
+		<device-support value="at90usb1287"/>
+		<config name="lufa.drivers.board.name" value="usbkey"/>
+
+		<build type="define" name="F_CPU" value="8000000UL"/>
+		<build type="define" name="F_USB" value="8000000UL"/>
+	</project>
+
+	<module type="application" id="lufa.templates.host" caption="USB Host Template">
+		<info type="description" value="summary">
+		Template for a LUFA USB host mode application.
+		</info>
+
+ 		<info type="gui-flag" value="move-to-root"/>
+
+		<info type="keyword" value="Technology">
+			<keyword value="USB Host"/>
+			<keyword value="Template Projects"/>
+		</info>
+
+		<device-support-alias value="lufa_avr8"/>
+		<device-support-alias value="lufa_xmega"/>
+		<device-support-alias value="lufa_uc3"/>
+
+		<build type="c-source" value="HostApplication.c"/>
+		<build type="header-file" value="HostApplication.h"/>
+
+		<build type="module-config" subtype="path" value=".."/>
+		<build type="header-file" value="../LUFAConfig.h"/>
+
+		<require idref="lufa.common"/>
+		<require idref="lufa.platform"/>
+		<require idref="lufa.drivers.usb"/>
+		<require idref="lufa.drivers.board"/>
+	</module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
index 7ddfa1be3f..0ae1dd678f 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
@@ -1,975 +1,975 @@
-/** \file

- *

- *  This file contains special DoxyGen information for the generation of the main page and other special

- *  documentation pages. It is not a project source file.

- */

-

-/** \page Page_BuildSystem The LUFA Build System

- *

- *  \section Sec_BuildSystem_Overview Overview of the LUFA Build System

- *  The LUFA build system is an attempt at making a set of re-usable, modular build make files which

- *  can be referenced in a LUFA powered project, to minimize the amount of code required in an

- *  application makefile. The system is written in GNU Make, and each module is independent of

- *  one-another.

- *

- *  For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA

- *  build system, see \ref Sec_CompilingApps_Prerequisites.

- *

- *  To use a LUFA build system module, simply add an include to your project makefile. All user projects

- *  should at a minimum include \ref Page_BuildModule_CORE for base functionality:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_core.mk

- *  \endcode

- *

- *  Once included in your project makefile, the associated build module targets will be added to your

- *  project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>

- *  from the command line, substituting in the appropriate target name.

- *

- *  \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.

- *

- *  Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>

- *  be supplied in the project makefile for the module to work, and one or more optional parameters which

- *  may be defined and which will assume a sensible default if not.

- *

- *  \section SSec_BuildSystem_Modules Available Modules

- *

- *  The following modules are included in this LUFA release:

- *

- *  \li \subpage Page_BuildModule_ATPROGRAM - Device Programming

- *  \li \subpage Page_BuildModule_AVRDUDE - Device Programming

- *  \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking

- *  \li \subpage Page_BuildModule_CORE - Core Build System Functions

- *  \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis

- *  \li \subpage Page_BuildModule_DFU - Device Programming

- *  \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation

- *  \li \subpage Page_BuildModule_HID - Device Programming

- *  \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables

- *

- *  If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.

- */

-

- /** \page Page_BuildModule_BUILD The BUILD build module

- *

- *  The BUILD LUFA build system module, providing targets for the compilation,

- *  assembling and linking of an application from source code into binary files

- *  suitable for programming into a target device, using the GCC compiler.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_build.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_BUILD_Requirements Requirements

- *  This module requires the the architecture appropriate binaries of the GCC compiler are available in your

- *  system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio

- *  5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.

- *

- *  \section SSec_BuildModule_BUILD_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>size</tt></td>

- *    <td>Display size of the compiled application FLASH and SRAM segments.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>symbol-sizes</tt></td>

- *    <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>lib</tt></td>

- *    <td>Build and archive all source files into a library A binary file.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>all</tt></td>

- *    <td>Build and link the application into ELF debug and HEX binary files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>elf</tt></td>

- *    <td>Build and link the application into an ELF debug file.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>bin</tt></td>

- *    <td>Build and link the application and produce a BIN binary file.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>hex</tt></td>

- *    <td>Build and link the application and produce HEX and EEP binary files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>lss</tt></td>

- *    <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>clean</tt></td>

- *    <td>Remove all intermediary files and binary output files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>mostlyclean</tt></td>

- *    <td>Remove all intermediary files but preserve any binary output files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt><i>&lt;filename&gt;</i>.s</tt></td>

- *    <td>Create an assembly listing of a given input C/C++ source file.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>TARGET</tt></td>

- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>ARCH</tt></td>

- *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>MCU</tt></td>

- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>SRC</tt></td>

- *    <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>F_USB</tt></td>

- *    <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_PATH</tt></td>

- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>BOARD</tt></td>

- *    <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>OPTIMIZATION</tt></td>

- *    <td>Optimization level to use when compiling source files (see GCC manual).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>C_STANDARD</tt></td>

- *    <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPP_STANDARD</tt></td>

- *    <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>DEBUG_FORMAT</tt></td>

- *    <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>DEBUG_LEVEL</tt></td>

- *    <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>F_CPU</tt></td>

- *    <td>Speed of the processor CPU clock, in Hz.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>C_FLAGS</tt></td>

- *    <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPP_FLAGS</tt></td>

- *    <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>ASM_FLAGS</tt></td>

- *    <td>Flags to pass to the assembler only, after the automatically generated flags.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CC_FLAGS</tt></td>

- *    <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>COMPILER_PATH</tt></td>

- *    <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LD_FLAGS</tt></td>

- *    <td>Flags to pass to the linker, after the automatically generated flags.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LINKER_RELAXATIONS</tt></td>

- *    <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size

- *        of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.

- *        \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you

- *              receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>OBJDIR</tt></td>

- *    <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.

- *        \note When this option is enabled, all source filenames <b>must</b> be unique.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>OBJECT_FILES</tt></td>

- *    <td>List of additional object files that should be linked into the resulting binary.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

-/** \page Page_BuildModule_CORE The CORE build module

- *

- *  The core LUFA build system module, providing common build system help and information targets.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_core.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_CORE_Requirements Requirements

- *  This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>

- *  shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).

- *

- *  \section SSec_BuildModule_CORE_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>help</tt></td>

- *    <td>Display build system help and configuration information.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_targets</tt></td>

- *    <td>List all available build targets from the build system.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_modules</tt></td>

- *    <td>List all available build modules from the build system.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_mandatory</tt></td>

- *    <td>List all mandatory parameters required by the included modules.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_optional</tt></td>

- *    <td>List all optional parameters required by the included modules.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_provided</tt></td>

- *    <td>List all variables provided by the included modules.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>list_macros</tt></td>

- *    <td>List all macros provided by the included modules.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CORE_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

-/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module

- *

- *  The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an

- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_atprogram.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_ATPROGRAM_Requirements Requirements

- *  This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>

- *  variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x

- *  inside the application install folder's "\atbackend" subdirectory.

- *

- *  \section SSec_BuildModule_ATPROGRAM_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>atprogram</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>atprogram-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>MCU</tt></td>

- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>TARGET</tt></td>

- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>ATPROGRAM_PROGRAMMER</tt></td>

- *    <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>ATPROGRAM_INTERFACE</tt></td>

- *    <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>ATPROGRAM_PORT</tt></td>

- *    <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

-/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module

- *

- *  The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an

- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_avrdude.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_AVRDUDE_Requirements Requirements

- *  This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>

- *  variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for

- *  Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's

- *  source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.

- *

- *  \section SSec_BuildModule_AVRDUDE_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>avrdude</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>avrdude-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>MCU</tt></td>

- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>TARGET</tt></td>

- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>AVRDUDE_PROGRAMMER</tt></td>

- *    <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>AVRDUDE_PORT</tt></td>

- *    <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>AVRDUDE_FLAGS</tt></td>

- *    <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

- /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module

- *

- *  The CPPCHECK programming utility LUFA build system module, providing targets to statically

- *  analyze C and C++ source code for errors and performance/style issues.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_cppcheck.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_CPPCHECK_Requirements Requirements

- *  This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>

- *  variable. The <tt>cppcheck</tt> utility is distributed through the project's home page

- *  (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via

- *  the project's source code or through the package manager.

- *

- *  \section SSec_BuildModule_CPPCHECK_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>cppcheck</tt></td>

- *    <td>Statically analyze the project source code for issues.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>cppcheck-config</tt></td>

- *    <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>SRC</tt></td>

- *    <td>List of source files to statically analyze.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>CPPCHECK_INCLUDES</tt></td>

- *    <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_EXCLUDES</tt></td>

- *    <td>Paths or path fragments to exclude when analyzing.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>

- *    <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_ENABLE</tt></td>

- *    <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_SUPPRESS</tt></td>

- *    <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>

- *    <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_QUIET</tt></td>

- *    <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>CPPCHECK_FLAGS</tt></td>

- *    <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

- /** \page Page_BuildModule_DFU The DFU build module

- *

- *  The DFU programming utility LUFA build system module, providing targets to reprogram an

- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.

- *  This module requires a DFU class bootloader to be running in the target, compatible with

- *  the DFU bootloader protocol as published by Atmel.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_dfu.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_DFU_Requirements Requirements

- *  This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open

- *  source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be

- *  available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility

- *  can be installed via the project's source code or through the package manager.

- *

- *  \section SSec_BuildModule_DFU_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>dfu</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>dfu-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>flip</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>flip-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>MCU</tt></td>

- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>TARGET</tt></td>

- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DFU_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

- /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module

- *

- *  The DOXYGEN code documentation utility LUFA build system module, providing targets to generate

- *  project HTML and other format documentation from a set of source files that include special

- *  Doxygen comments.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_doxygen.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements

- *  This module requires the <tt>doxygen</tt> utility from the Doxygen website

- *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix

- *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through

- *  the package manager.

- *

- *  \section SSec_BuildModule_DOXYGEN_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>doxygen</tt></td>

- *    <td>Generate project documentation.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>doxygen_create</tt></td>

- *    <td>Create a new Doxygen configuration file using the latest template.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>doxygen_upgrade</tt></td>

- *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>LUFA_PATH</tt></td>

- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>DOXYGEN_CONF</tt></td>

- *    <td>Name and path of the base Doxygen configuration file for the project.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>

- *    <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>

- *    <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

- /** \page Page_BuildModule_HID The HID build module

- *

- *  The HID programming utility LUFA build system module, providing targets to reprogram an

- *  Atmel processor's FLASH memory with a project's compiled binary output file. This module

- *  requires a HID class bootloader to be running in the target, using a protocol compatible

- *  with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_hid.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_HID_Requirements Requirements

- *  This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID

- *  class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC

- *  (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>

- *  variable.

- *

- *  \section SSec_BuildModule_HID_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><tt>hid</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>hid-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and

- *        a temporary AVR application programmed into the target's FLASH.

- *        \note This will erase the currently loaded application in the target.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>teensy</tt></td>

- *    <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>teensy-ee</tt></td>

- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and

- *        a temporary AVR application programmed into the target's FLASH.

- *        \note This will erase the currently loaded application in the target.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>MCU</tt></td>

- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>TARGET</tt></td>

- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_HID_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

- /** \page Page_BuildModule_SOURCES The SOURCES build module

- *

- *  The SOURCES LUFA build system module, providing variables listing the various LUFA source files

- *  required to be build by a project for a given LUFA module. This module gives a way to reference

- *  LUFA source files symbolically, so that changes to the library structure do not break the library

- *  makefile.

- *

- *  To use this module in your application makefile, add the following code:

- *  \code

- *  include $(LUFA_PATH)/Build/lufa_sources.mk

- *  \endcode

- *

- *  \section SSec_BuildModule_SOURCES_Requirements Requirements

- *  None.

- *

- *  \section SSec_BuildModule_SOURCES_Targets Targets

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters

- *

- *  <table>

- *   <tr>

- *    <td><tt>LUFA_PATH</tt></td>

- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td><tt>ARCH</tt></td>

- *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables

- *

- *  <table>

- *   <tr>

- *    <td><tt>LUFA_SRC_USB</tt></td>

- *    <td>List of LUFA USB driver source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_SRC_USBCLASS</tt></td>

- *    <td>List of LUFA USB Class driver source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_SRC_TEMPERATURE</tt></td>

- *    <td>List of LUFA temperature sensor driver source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_SRC_SERIAL</tt></td>

- *    <td>List of LUFA Serial U(S)ART driver source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_SRC_TWI</tt></td>

- *    <td>List of LUFA TWI driver source files.</td>

- *   </tr>

- *   <tr>

- *    <td><tt>LUFA_SRC_PLATFORM</tt></td>

- *    <td>List of LUFA architecture specific platform management source files.</td>

- *   </tr>

- *  </table>

- *

- *  \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros

- *

- *  <table>

- *   <tr>

- *    <td><i>None</i></td>

- *   </tr>

- *  </table>

- */

-

-/** \page Page_BuildTroubleshooting Troubleshooting Information

- *

- *  LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these

- *  features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different

- *  errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.

- *

- *  <table>

- *    <tr>

- *    <th>Problem</th>

- *    <th>Resolution</th>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>

- *    <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>

- *        from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>

- *    <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>

- *    <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with

- *        GNU make or other variants of Make causing an infinitely recursive build.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>

- *    <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>

- *    <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA

- *        build system modules. Define the value in your project makefile and try again.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>

- *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration

- *        option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>

- *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").

- *        This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>

- *    <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not

- *        recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>

- *    <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.

- *        This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>

- *    <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or

- *        relative path given in the user project makefile is correct and try again.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>

- *    <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists

- *        and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration

- *        file.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>

- *    <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration

- *        options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or

- *        upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>

- *    <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or

- *        absolute path to the LUFA library core.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>

- *    <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be

- *        found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>

- *        parameter.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>

- *    <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This

- *        usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the

- *        compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>

- *    <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the

- *        version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>

- *   </tr>

- *   <tr>

- *    <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>

- *    <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA

- *        library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>

- *   </tr>

- *  </table>

- *

- *  For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.

- */

+/** \file
+ *
+ *  This file contains special DoxyGen information for the generation of the main page and other special
+ *  documentation pages. It is not a project source file.
+ */
+
+/** \page Page_BuildSystem The LUFA Build System
+ *
+ *  \section Sec_BuildSystem_Overview Overview of the LUFA Build System
+ *  The LUFA build system is an attempt at making a set of re-usable, modular build make files which
+ *  can be referenced in a LUFA powered project, to minimize the amount of code required in an
+ *  application makefile. The system is written in GNU Make, and each module is independent of
+ *  one-another.
+ *
+ *  For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA
+ *  build system, see \ref Sec_CompilingApps_Prerequisites.
+ *
+ *  To use a LUFA build system module, simply add an include to your project makefile. All user projects
+ *  should at a minimum include \ref Page_BuildModule_CORE for base functionality:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_core.mk
+ *  \endcode
+ *
+ *  Once included in your project makefile, the associated build module targets will be added to your
+ *  project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>
+ *  from the command line, substituting in the appropriate target name.
+ *
+ *  \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.
+ *
+ *  Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>
+ *  be supplied in the project makefile for the module to work, and one or more optional parameters which
+ *  may be defined and which will assume a sensible default if not.
+ *
+ *  \section SSec_BuildSystem_Modules Available Modules
+ *
+ *  The following modules are included in this LUFA release:
+ *
+ *  \li \subpage Page_BuildModule_ATPROGRAM - Device Programming
+ *  \li \subpage Page_BuildModule_AVRDUDE - Device Programming
+ *  \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking
+ *  \li \subpage Page_BuildModule_CORE - Core Build System Functions
+ *  \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis
+ *  \li \subpage Page_BuildModule_DFU - Device Programming
+ *  \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation
+ *  \li \subpage Page_BuildModule_HID - Device Programming
+ *  \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables
+ *
+ *  If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.
+ */
+
+ /** \page Page_BuildModule_BUILD The BUILD build module
+ *
+ *  The BUILD LUFA build system module, providing targets for the compilation,
+ *  assembling and linking of an application from source code into binary files
+ *  suitable for programming into a target device, using the GCC compiler.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_build.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_BUILD_Requirements Requirements
+ *  This module requires the the architecture appropriate binaries of the GCC compiler are available in your
+ *  system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio
+ *  5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.
+ *
+ *  \section SSec_BuildModule_BUILD_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>size</tt></td>
+ *    <td>Display size of the compiled application FLASH and SRAM segments.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>symbol-sizes</tt></td>
+ *    <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>lib</tt></td>
+ *    <td>Build and archive all source files into a library A binary file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>all</tt></td>
+ *    <td>Build and link the application into ELF debug and HEX binary files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>elf</tt></td>
+ *    <td>Build and link the application into an ELF debug file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>bin</tt></td>
+ *    <td>Build and link the application and produce a BIN binary file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>hex</tt></td>
+ *    <td>Build and link the application and produce HEX and EEP binary files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>lss</tt></td>
+ *    <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>clean</tt></td>
+ *    <td>Remove all intermediary files and binary output files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>mostlyclean</tt></td>
+ *    <td>Remove all intermediary files but preserve any binary output files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt><i>&lt;filename&gt;</i>.s</tt></td>
+ *    <td>Create an assembly listing of a given input C/C++ source file.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ARCH</tt></td>
+ *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>SRC</tt></td>
+ *    <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>F_USB</tt></td>
+ *    <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>BOARD</tt></td>
+ *    <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OPTIMIZATION</tt></td>
+ *    <td>Optimization level to use when compiling source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>C_STANDARD</tt></td>
+ *    <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPP_STANDARD</tt></td>
+ *    <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DEBUG_FORMAT</tt></td>
+ *    <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DEBUG_LEVEL</tt></td>
+ *    <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>F_CPU</tt></td>
+ *    <td>Speed of the processor CPU clock, in Hz.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>C_FLAGS</tt></td>
+ *    <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPP_FLAGS</tt></td>
+ *    <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ASM_FLAGS</tt></td>
+ *    <td>Flags to pass to the assembler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CC_FLAGS</tt></td>
+ *    <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>COMPILER_PATH</tt></td>
+ *    <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LD_FLAGS</tt></td>
+ *    <td>Flags to pass to the linker, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LINKER_RELAXATIONS</tt></td>
+ *    <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size
+ *        of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.
+ *        \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you
+ *              receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OBJDIR</tt></td>
+ *    <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.
+ *        \note When this option is enabled, all source filenames <b>must</b> be unique.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OBJECT_FILES</tt></td>
+ *    <td>List of additional object files that should be linked into the resulting binary.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_CORE The CORE build module
+ *
+ *  The core LUFA build system module, providing common build system help and information targets.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_core.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_CORE_Requirements Requirements
+ *  This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>
+ *  shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).
+ *
+ *  \section SSec_BuildModule_CORE_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>help</tt></td>
+ *    <td>Display build system help and configuration information.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_targets</tt></td>
+ *    <td>List all available build targets from the build system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_modules</tt></td>
+ *    <td>List all available build modules from the build system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_mandatory</tt></td>
+ *    <td>List all mandatory parameters required by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_optional</tt></td>
+ *    <td>List all optional parameters required by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_provided</tt></td>
+ *    <td>List all variables provided by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_macros</tt></td>
+ *    <td>List all macros provided by the included modules.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module
+ *
+ *  The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_atprogram.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_Requirements Requirements
+ *  This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x
+ *  inside the application install folder's "\atbackend" subdirectory.
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>atprogram</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>atprogram-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_PROGRAMMER</tt></td>
+ *    <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_INTERFACE</tt></td>
+ *    <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_PORT</tt></td>
+ *    <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module
+ *
+ *  The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_avrdude.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_AVRDUDE_Requirements Requirements
+ *  This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for
+ *  Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's
+ *  source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.
+ *
+ *  \section SSec_BuildModule_AVRDUDE_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>avrdude</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>avrdude-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>AVRDUDE_PROGRAMMER</tt></td>
+ *    <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>AVRDUDE_PORT</tt></td>
+ *    <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>AVRDUDE_FLAGS</tt></td>
+ *    <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module
+ *
+ *  The CPPCHECK programming utility LUFA build system module, providing targets to statically
+ *  analyze C and C++ source code for errors and performance/style issues.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_CPPCHECK_Requirements Requirements
+ *  This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>cppcheck</tt> utility is distributed through the project's home page
+ *  (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via
+ *  the project's source code or through the package manager.
+ *
+ *  \section SSec_BuildModule_CPPCHECK_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>cppcheck</tt></td>
+ *    <td>Statically analyze the project source code for issues.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>cppcheck-config</tt></td>
+ *    <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>SRC</tt></td>
+ *    <td>List of source files to statically analyze.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>CPPCHECK_INCLUDES</tt></td>
+ *    <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_EXCLUDES</tt></td>
+ *    <td>Paths or path fragments to exclude when analyzing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>
+ *    <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_ENABLE</tt></td>
+ *    <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_SUPPRESS</tt></td>
+ *    <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>
+ *    <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_QUIET</tt></td>
+ *    <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_FLAGS</tt></td>
+ *    <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_DFU The DFU build module
+ *
+ *  The DFU programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *  This module requires a DFU class bootloader to be running in the target, compatible with
+ *  the DFU bootloader protocol as published by Atmel.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_dfu.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_DFU_Requirements Requirements
+ *  This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open
+ *  source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be
+ *  available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility
+ *  can be installed via the project's source code or through the package manager.
+ *
+ *  \section SSec_BuildModule_DFU_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>dfu</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>dfu-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>flip</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>flip-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module
+ *
+ *  The DOXYGEN code documentation utility LUFA build system module, providing targets to generate
+ *  project HTML and other format documentation from a set of source files that include special
+ *  Doxygen comments.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_doxygen.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements
+ *  This module requires the <tt>doxygen</tt> utility from the Doxygen website
+ *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
+ *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
+ *  the package manager.
+ *
+ *  \section SSec_BuildModule_DOXYGEN_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>doxygen</tt></td>
+ *    <td>Generate project documentation.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_create</tt></td>
+ *    <td>Create a new Doxygen configuration file using the latest template.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_upgrade</tt></td>
+ *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>DOXYGEN_CONF</tt></td>
+ *    <td>Name and path of the base Doxygen configuration file for the project.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>
+ *    <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>
+ *    <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_HID The HID build module
+ *
+ *  The HID programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor's FLASH memory with a project's compiled binary output file. This module
+ *  requires a HID class bootloader to be running in the target, using a protocol compatible
+ *  with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_hid.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_HID_Requirements Requirements
+ *  This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID
+ *  class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC
+ *  (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>
+ *  variable.
+ *
+ *  \section SSec_BuildModule_HID_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>hid</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>hid-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and
+ *        a temporary AVR application programmed into the target's FLASH.
+ *        \note This will erase the currently loaded application in the target.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>teensy</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>teensy-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and
+ *        a temporary AVR application programmed into the target's FLASH.
+ *        \note This will erase the currently loaded application in the target.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_SOURCES The SOURCES build module
+ *
+ *  The SOURCES LUFA build system module, providing variables listing the various LUFA source files
+ *  required to be build by a project for a given LUFA module. This module gives a way to reference
+ *  LUFA source files symbolically, so that changes to the library structure do not break the library
+ *  makefile.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_sources.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_SOURCES_Requirements Requirements
+ *  None.
+ *
+ *  \section SSec_BuildModule_SOURCES_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ARCH</tt></td>
+ *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_USB</tt></td>
+ *    <td>List of LUFA USB driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_USBCLASS</tt></td>
+ *    <td>List of LUFA USB Class driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
+ *    <td>List of LUFA temperature sensor driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_SERIAL</tt></td>
+ *    <td>List of LUFA Serial U(S)ART driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_TWI</tt></td>
+ *    <td>List of LUFA TWI driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_PLATFORM</tt></td>
+ *    <td>List of LUFA architecture specific platform management source files.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildTroubleshooting Troubleshooting Information
+ *
+ *  LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these
+ *  features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different
+ *  errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.
+ *
+ *  <table>
+ *    <tr>
+ *    <th>Problem</th>
+ *    <th>Resolution</th>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
+ *        from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>
+ *    <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>
+ *    <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
+ *        GNU make or other variants of Make causing an infinitely recursive build.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>
+ *    <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
+ *        build system modules. Define the value in your project makefile and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
+ *        option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
+ *        This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
+ *        recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>
+ *    <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
+ *        This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
+ *        relative path given in the user project makefile is correct and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>
+ *    <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
+ *        and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
+ *        file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ *    <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
+ *        options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
+ *        upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>
+ *    <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
+ *        absolute path to the LUFA library core.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>
+ *    <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
+ *        found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
+ *        parameter.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>
+ *    <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
+ *        usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
+ *        compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
+ *        version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ *    <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
+ *        library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
+ */
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index d2350f27c1..79fc7119a6 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -21,10 +21,23 @@ VPATH_SRC := $(VPATH)
 vpath %.c $(VPATH_SRC)
 vpath %.h $(VPATH_SRC)
 vpath %.cpp $(VPATH_SRC)
+vpath %.cc $(VPATH_SRC)
 vpath %.hpp $(VPATH_SRC)
 vpath %.S $(VPATH_SRC)
 VPATH :=
 
+# Convert all SRC to OBJ
+define OBJ_FROM_SRC
+$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))))
+endef
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
+
+# Define a list of all objects
+OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
+
+MASTER_OUTPUT := $(firstword $(OUTPUTS))
+
+
 
 # Output format. (can be srec, ihex, binary)
 FORMAT = ihex
@@ -34,50 +47,8 @@ FORMAT = ihex
 #     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 OPT = s
 
-COLOR ?= true
-
-ifeq ($(COLOR),true)
-	NO_COLOR=\033[0m
-	OK_COLOR=\033[32;01m
-	ERROR_COLOR=\033[31;01m
-	WARN_COLOR=\033[33;01m
-	BLUE=\033[0;34m
-	BOLD=\033[1m
-endif
-
 AUTOGEN ?= false
 
-ifneq ($(shell awk --version 2>/dev/null),)
-	AWK=awk
-else
-	AWK=cat && test
-endif
-
-OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
-ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
-WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
-
-ifndef $(SILENT)
-	SILENT = false
-endif
-
-TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
-TAB_LOG_PLAIN = printf "$$LOG\n"
-AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
-AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
-PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1
-PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
-PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1
-PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
-PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
-BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
-
-# List any extra directories to look for include files here.
-#     Each directory must be seperated by a space.
-#     Use forward slashes for directory separators.
-#     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC))
-
 
 # Compiler flag to set the C Standard level.
 #     c89   = "ANSI" C
@@ -88,17 +59,18 @@ CSTANDARD = -std=gnu99
 
 
 # Place -D or -U options here for C sources
-CDEFS += $(OPT_DEFS)
+#CDEFS +=
 
 
 # Place -D or -U options here for ASM sources
-ADEFS += $(OPT_DEFS)
+#ADEFS +=
 
 
 # Place -D or -U options here for C++ sources
 #CPPDEFS += -D__STDC_LIMIT_MACROS
 #CPPDEFS += -D__STDC_CONSTANT_MACROS
-CPPDEFS += $(OPT_DEFS)
+#CPPDEFS +=
+
 
 
 
@@ -126,11 +98,7 @@ CFLAGS += -Wstrict-prototypes
 #CFLAGS += -Wunreachable-code
 #CFLAGS += -Wsign-compare
 CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 CFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
-    CFLAGS += -include $(CONFIG_H)
-endif
 
 
 #---------------- Compiler Options C++ ----------------
@@ -153,12 +121,7 @@ CPPFLAGS += -Wundef
 #CPPFLAGS += -Wunreachable-code
 #CPPFLAGS += -Wsign-compare
 CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 #CPPFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
-    CPPFLAGS += -include $(CONFIG_H)
-endif
-
 
 #---------------- Assembler Options ----------------
 #  -Wa,...:   tell GCC to pass this to the assembler.
@@ -169,11 +132,8 @@ endif
 #             files -- see avr-libc docs [FIXME: not yet described there]
 #  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 #       dump that will be displayed for a given single line of source input.
-ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
-ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-ifdef CONFIG_H
-    ASFLAGS += -include $(CONFIG_H)
-endif
+ASFLAGS += $(ADEFS) 
+ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
 
 #---------------- Library Options ----------------
 # Minimalistic printf version
@@ -201,6 +161,7 @@ SCANF_LIB =
 
 
 MATH_LIB = -lm
+CREATE_MAP ?= yes
 
 
 #---------------- Linker Options ----------------
@@ -211,7 +172,10 @@ MATH_LIB = -lm
 # Comennt out "--relax" option to avoid a error such:
 # 	(.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
 #
-LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+
+ifeq ($(CREATE_MAP),yes)
+	LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+endif
 #LDFLAGS += -Wl,--relax
 LDFLAGS += $(EXTMEMOPTS)
 LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
@@ -228,48 +192,6 @@ COPY = cp
 WINSHELL = cmd
 SECHO = $(SILENT) || echo
 
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = --------  end  --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_BIN = Creating binary load file for Flash:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling:
-MSG_COMPILING_CPP = Compiling:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-MSG_CREATING_LIBRARY = Creating library:
-MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
-	Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
-	git submodule sync --recursive\n\
-	git submodule update --init --recursive$(NO_COLOR)\n\n\
-	You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
-	or if you have modified the ChibiOS libraries yourself. \n\n
-
-
-# Define all object files.
-OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC))))
-# The files in the lib folder are shared between all keymaps, so generate that folder name by removing
-# the keymap from the name
-KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR))
-# And fixup the object files to match
-LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v))
-NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ))
-LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ))
-OBJ := $(LIBOBJ) $(NONLIBOBJ)
-
-# Define all listing files.
-LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC))))
-
 
 # Compiler flags to generate dependency files.
 #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
@@ -285,14 +207,6 @@ ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
 
 MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
 
-# Default target.
-all: build sizeafter
-
-# Change the build target to build a HEX file or a library.
-build: elf hex
-#build: elf hex eep lss sym
-#build: lib
-
 
 elf: $(BUILD_DIR)/$(TARGET).elf
 hex: $(BUILD_DIR)/$(TARGET).hex
@@ -302,15 +216,6 @@ sym: $(BUILD_DIR)/$(TARGET).sym
 LIBNAME=lib$(TARGET).a
 lib: $(LIBNAME)
 
-check_submodule:
-	git submodule status --recursive | \
-	while IFS= read -r x; do \
-		case "$$x" in \
-			\ *) ;; \
-			*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
-		esac \
-	done
-
 # Display size of file.
 HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
@@ -364,91 +269,85 @@ gccversion :
 	$(eval CMD=$(BIN) $< $@ || exit 0)
 	@$(BUILD_CMD)
 
-# Create library from object files.
-.SECONDARY : $(BUILD_DIR)/$(TARGET).a
-.PRECIOUS : $(OBJ)
-%.a: $(OBJ)
-	@$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD)
-	$(eval CMD=$(AR) $@ $(OBJ) )
-	@$(BUILD_CMD)
-
-BEGIN = gccversion check_submodule sizebefore
+BEGIN = gccversion sizebefore
 
 # Link: create ELF output file from object files.
 .SECONDARY : $(BUILD_DIR)/$(TARGET).elf
 .PRECIOUS : $(OBJ)
 # Note the obj.txt depeendency is there to force linking if a source file is deleted
-%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN)
+%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
 	@$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
 	$(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
 	@$(BUILD_CMD)
+	
 
 define GEN_OBJRULE
+$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
+ifdef $1_CONFIG
+$1_CONFIG_FLAGS += -include $$($1_CONFIG)
+endif
+$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+
 # Compile: create object files from C source files.
 $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
 	@mkdir -p $$(@D)
 	@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
-	$$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+	$$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 	@$$(BUILD_CMD)
 
 # Compile: create object files from C++ source files.
 $1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
 	@mkdir -p $$(@D)
 	@$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
-	$$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
-	@$(BUILD_CMD)
+	$$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+	@$$(BUILD_CMD)
+
+$1/%.o : %.cc $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
+	@mkdir -p $$(@D)
+	@$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
+	$$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+	@$$(BUILD_CMD)
 
 # Assemble: create object files from assembler source files.
 $1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
 	@mkdir -p $$(@D)
 	@$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
-	$$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@)
+	$$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
 	@$$(BUILD_CMD)
 
 $1/force:
 
 $1/cflags.txt: $1/force
-	echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@
+	echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
 
 $1/cppflags.txt: $1/force
-	echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@
+	echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@
 
 $1/asflags.txt: $1/force
-	echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@
-
-$1/ldflags.txt: $1/force
-	echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@
-
-$1/obj.txt: $1/force
-	echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@
+	echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
 
 $1/compiler.txt: $1/force
 	$$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
 endef
 
+$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
+	echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@
+
+$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
+	echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@
+
+
 # We have to use static rules for the .d files for some reason
 DEPS = $(patsubst %.o,%.d,$(OBJ))
 # Keep the .d files
 .PRECIOUS: $(DEPS)
 # Empty rule to force recompilation if the .d file is missing
 $(DEPS):
+	
 
-# Since the object files could be in two different folders, generate
-# separate rules for them, rather than having too generic rules
-$(eval $(call GEN_OBJRULE,$(OBJDIR)))
-$(eval $(call GEN_OBJRULE,$(KBOBJDIR)))
-
-# Compile: create assembler files from C source files.
-%.s : %.c | $(BEGIN)
-	@$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
-	$(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@)
-	@$(BUILD_CMD)
-
-# Compile: create assembler files from C++ source files.
-%.s : %.cpp | $(BEGIN)
-	@$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
-	$(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@)
-	@$(BUILD_CMD)
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
 
 # Create preprocessed source for use in sending a bug report.
 %.i : %.c | $(BEGIN)
@@ -456,71 +355,19 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR)))
 
 # Target: clean project.
 clean:
-	$(REMOVE) -r $(OBJDIR) 2>/dev/null
-	$(REMOVE) -r $(KBOBJDIR) 2>/dev/null
+	$(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
 	$(REMOVE) $(BUILD_DIR)/$(TARGET).*
 
 show_path:
 	@echo VPATH=$(VPATH)
 	@echo SRC=$(SRC)
-
-SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile)))
-SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))
-SUBDIRS := $(sort $(SUBDIRS))
-# $(error $(SUBDIRS))
-all-keyboards-defaults-%:
-	@for x in $(SUBDIRS) ; do \
-		printf "Compiling with default: $$x" | $(AWK_CMD); \
-		LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-	done
-
-all-keyboards-defaults: all-keyboards-defaults-all
-
-KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%)
-all-keyboards-all: $(addsuffix -all,$(KEYBOARDS))
-all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS))
-all-keyboards: all-keyboards-all
-
-define make_keyboard
-$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1))
-$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD))))
-$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD))))
-$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
-$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.))))
-@for x in $(KEYMAPS) ; do \
-	printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
-	LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-done
-endef
-
-define make_keyboard_helper
-# Just remove the -all and so on from the first argument and pass it forward
-$(call make_keyboard,$(subst -$2,,$1),$2)
-endef
-
-/keyboards/%-all:
-	$(call make_keyboard_helper,$@,all)
-/keyboards/%-clean:
-	$(call make_keyboard_helper,$@,clean)
-/keyboards/%:
-	$(call make_keyboard_helper,$@,all)
-
-all-keymaps-%:
-	$(eval MAKECONFIG=$(call get_target,all-keymaps,$@))
-	$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
-	@for x in $(KEYMAPS) ; do \
-		printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
-		LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-	done
-
-all-keymaps: all-keymaps-all
+	@echo OBJ=$(OBJ)
 
 # Create build directory
-$(shell mkdir $(BUILD_DIR) 2>/dev/null)
+$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
 
 # Create object files directory
-$(shell mkdir $(OBJDIR) 2>/dev/null)
-$(shell mkdir $(KBOBJDIR) 2>/dev/null)
+$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
 
 # Include the dependency files.
 -include $(patsubst %.o,%.d,$(OBJ))
@@ -528,8 +375,6 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null)
 
 # Listing of phony targets.
 .PHONY : all finish sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff check_submodule \
+build elf hex eep lss sym coff extcoff \
 clean clean_list debug gdb-config show_path \
-program teensy dfu flip dfu-ee flip-ee dfu-start \
-all-keyboards-defaults all-keyboards all-keymaps \
-all-keyboards-defaults-% all-keyboards-% all-keymaps-%
+program teensy dfu flip dfu-ee flip-ee dfu-start 
\ No newline at end of file