summaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
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/action.c7
-rw-r--r--tmk_core/common/action_util.c10
-rw-r--r--tmk_core/common/avr/bootloader.c8
-rw-r--r--tmk_core/common/avr/xprintf.S1000
-rw-r--r--tmk_core/common/avr/xprintf.h222
-rw-r--r--tmk_core/common/bootmagic.c4
-rw-r--r--tmk_core/common/command.c20
-rw-r--r--tmk_core/common/host.c5
-rw-r--r--tmk_core/common/host.h4
-rw-r--r--tmk_core/common/keyboard.c4
-rw-r--r--tmk_core/common/magic.c4
-rw-r--r--tmk_core/common/mbed/xprintf.cpp2
-rw-r--r--tmk_core/common/mbed/xprintf.h2
-rw-r--r--tmk_core/common/print.h168
-rw-r--r--tmk_core/native.mk24
-rw-r--r--tmk_core/protocol/chibios/usb_main.c19
-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/protocol/lufa/descriptor.h12
-rw-r--r--tmk_core/protocol/lufa/lufa.c9
-rw-r--r--tmk_core/protocol/pjrc/usb.c18
-rw-r--r--tmk_core/protocol/pjrc/usb_keyboard.c8
-rw-r--r--tmk_core/readme.md2
-rw-r--r--tmk_core/rules.mk283
40 files changed, 3466 insertions, 3469 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/action.c b/tmk_core/common/action.c
index 08ef22eb97..d485b46c77 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -155,9 +155,10 @@ void process_action(keyrecord_t *record, action_t action)
action.key.mods<<4;
if (event.pressed) {
if (mods) {
- if (IS_MOD(action.key.code)) {
+ if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
// e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless.
- // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT)
+ // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT).
+ // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO).
add_mods(mods);
} else {
add_weak_mods(mods);
@@ -168,7 +169,7 @@ void process_action(keyrecord_t *record, action_t action)
} else {
unregister_code(action.key.code);
if (mods) {
- if (IS_MOD(action.key.code)) {
+ if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
del_mods(mods);
} else {
del_weak_mods(mods);
diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c
index 61ff202bef..cb4b252648 100644
--- a/tmk_core/common/action_util.c
+++ b/tmk_core/common/action_util.c
@@ -20,6 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "action_util.h"
#include "action_layer.h"
#include "timer.h"
+#include "keycode_config.h"
+
+extern keymap_config_t keymap_config;
+
static inline void add_key_byte(uint8_t code);
static inline void del_key_byte(uint8_t code);
@@ -139,7 +143,7 @@ void send_keyboard_report(void) {
void add_key(uint8_t key)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
add_key_bit(key);
return;
}
@@ -150,7 +154,7 @@ void add_key(uint8_t key)
void del_key(uint8_t key)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
del_key_bit(key);
return;
}
@@ -231,7 +235,7 @@ uint8_t has_anymod(void)
uint8_t get_first_key(void)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
uint8_t i = 0;
for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
;
diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c
index fb9bf2d1c3..ad547b9853 100644
--- a/tmk_core/common/avr/bootloader.c
+++ b/tmk_core/common/avr/bootloader.c
@@ -38,7 +38,7 @@
* | | | |
* = = = =
* | | 32KB-4KB | | 128KB-8KB
- * 0x6000 +---------------+ 0x1FC00 +---------------+
+ * 0x7000 +---------------+ 0x1E000 +---------------+
* | Bootloader | 4KB | Bootloader | 8KB
* 0x7FFF +---------------+ 0x1FFFF +---------------+
*
@@ -64,8 +64,8 @@
#define BOOTLOADER_START (FLASH_SIZE - BOOTLOADER_SIZE)
-/*
- * Entering the Bootloader via Software
+/*
+ * Entering the Bootloader via Software
* http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
*/
#define BOOTLOADER_RESET_KEY 0xB007B007
@@ -137,7 +137,7 @@ void bootloader_jump_after_watchdog_reset(void)
#if 0
/* Jumping To The Bootloader
* http://www.pjrc.com/teensy/jump_to_bootloader.html
- *
+ *
* This method doen't work when using LUFA. idk why.
* - needs to initialize more regisers or interrupt setting?
*/
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..08d9f93a0c 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/bootmagic.c b/tmk_core/common/bootmagic.c
index 6730a2a4aa..2c6bcbae56 100644
--- a/tmk_core/common/bootmagic.c
+++ b/tmk_core/common/bootmagic.c
@@ -83,10 +83,6 @@ void bootmagic(void)
}
eeconfig_update_keymap(keymap_config.raw);
-#ifdef NKRO_ENABLE
- keyboard_nkro = keymap_config.nkro;
-#endif
-
/* default layer */
uint8_t default_layer = 0;
if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_0)) { default_layer |= (1<<0); }
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index 084c9fe155..f3e1bf6234 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:"
@@ -237,7 +238,7 @@ static void print_status(void)
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
- print_val_hex8(keyboard_nkro);
+ print_val_hex8(keymap_config.nkro);
#endif
print_val_hex32(timer_read32());
@@ -260,7 +261,10 @@ static void print_status(void)
#ifdef BOOTMAGIC_ENABLE
static void print_eeconfig(void)
{
-#ifndef NO_PRINT
+
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
+
print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
debug_config_t dc;
@@ -380,9 +384,6 @@ static bool command_common(uint8_t code)
debug_mouse = true;
} else {
print("\ndebug: off\n");
- debug_matrix = false;
- debug_keyboard = false;
- debug_mouse = false;
}
break;
@@ -434,8 +435,8 @@ static bool command_common(uint8_t code)
// NKRO toggle
case MAGIC_KC(MAGIC_KEY_NKRO):
clear_keyboard(); // clear to prevent stuck keys
- keyboard_nkro = !keyboard_nkro;
- if (keyboard_nkro) {
+ keymap_config.nkro = !keymap_config.nkro;
+ if (keymap_config.nkro) {
print("NKRO: on\n");
} else {
print("NKRO: off\n");
@@ -570,7 +571,8 @@ static uint8_t mousekey_param = 0;
static void mousekey_param_print(void)
{
-#ifndef NO_PRINT
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
print("\n\t- Values -\n");
print("1: delay(*10ms): "); pdec(mk_delay); print("\n");
print("2: interval(ms): "); pdec(mk_interval); print("\n");
diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c
index 11a05c2ddd..e12b622165 100644
--- a/tmk_core/common/host.c
+++ b/tmk_core/common/host.c
@@ -22,11 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "util.h"
#include "debug.h"
-
-#ifdef NKRO_ENABLE
-bool keyboard_nkro = true;
-#endif
-
static host_driver_t *driver;
static uint16_t last_system_report = 0;
static uint16_t last_consumer_report = 0;
diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h
index 9814b10d2d..aeabba7107 100644
--- a/tmk_core/common/host.h
+++ b/tmk_core/common/host.h
@@ -28,10 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
extern "C" {
#endif
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif
-
extern uint8_t keyboard_idle;
extern uint8_t keyboard_protocol;
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index c46a701b3b..371d93f3e5 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -57,6 +57,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "visualizer/visualizer.h"
#endif
+
+
#ifdef MATRIX_HAS_GHOST
static bool has_ghost_in_row(uint8_t row)
{
@@ -106,7 +108,7 @@ void keyboard_init(void) {
rgblight_init();
#endif
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
- keyboard_nkro = true;
+ keymap_config.nkro = 1;
#endif
}
diff --git a/tmk_core/common/magic.c b/tmk_core/common/magic.c
index 194e4cc026..49617a3d10 100644
--- a/tmk_core/common/magic.c
+++ b/tmk_core/common/magic.c
@@ -27,10 +27,6 @@ void magic(void)
/* keymap config */
keymap_config.raw = eeconfig_read_keymap();
-#ifdef NKRO_ENABLE
- keyboard_nkro = keymap_config.nkro;
-#endif
-
uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer();
default_layer_set((uint32_t)default_layer);
diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp
index 3647ece751..b1aac2c99d 100644
--- a/tmk_core/common/mbed/xprintf.cpp
+++ b/tmk_core/common/mbed/xprintf.cpp
@@ -7,7 +7,7 @@
#define STRING_STACK_LIMIT 120
//TODO
-int xprintf(const char* format, ...) { return 0; }
+int __xprintf(const char* format, ...) { return 0; }
#if 0
/* mbed Serial */
diff --git a/tmk_core/common/mbed/xprintf.h b/tmk_core/common/mbed/xprintf.h
index 26bc529e5b..1e7a48c06d 100644
--- a/tmk_core/common/mbed/xprintf.h
+++ b/tmk_core/common/mbed/xprintf.h
@@ -7,7 +7,7 @@
extern "C" {
#endif
-int xprintf(const char *format, ...);
+int __xprintf(const char *format, ...);
#ifdef __cplusplus
}
diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h
index a1352527fc..8836c0fc7c 100644
--- a/tmk_core/common/print.h
+++ b/tmk_core/common/print.h
@@ -36,40 +36,140 @@
#ifndef NO_PRINT
+#if defined(__AVR__) /* __AVR__ */
-#if defined(__AVR__)
+# include "avr/xprintf.h"
-#include "avr/xprintf.h"
-#define print(s) xputs(PSTR(s))
-#define println(s) xputs(PSTR(s "\r\n"))
+# ifdef USER_PRINT /* USER_PRINT */
-#ifdef __cplusplus
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# undef xprintf
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprint(s) xputs(PSTR(s))
+# define uprintln(s) xputs(PSTR(s "\r\n"))
+# define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__)
+
+# else /* NORMAL PRINT */
+
+// Create user & normal print defines
+# define print(s) xputs(PSTR(s))
+# define println(s) xputs(PSTR(s "\r\n"))
+# define uprint(s) print(s)
+# define uprintln(s) println(s)
+# define uprintf(fmt, ...) xprintf(fmt, ...)
+
+# endif /* USER_PRINT / NORMAL PRINT */
+
+# ifdef __cplusplus
extern "C"
-#endif
+# endif
+
/* function pointer of sendchar to be used by print utility */
void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
-#elif defined(PROTOCOL_CHIBIOS) /* __AVR__ */
+#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */
+
+# include "chibios/printf.h"
+
+# ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprint(s) printf(s)
+# define uprintln(s) printf(s "\r\n")
+# define uprintf printf
+
+# else /* NORMAL PRINT */
+
+// Create user & normal print defines
+# define print(s) printf(s)
+# define println(s) printf(s "\r\n")
+# define xprintf printf
+# define uprint(s) printf(s)
+# define uprintln(s) printf(s "\r\n")
+# define uprintf printf
-#include "chibios/printf.h"
+# endif /* USER_PRINT / NORMAL PRINT */
-#define print(s) printf(s)
-#define println(s) printf(s "\r\n")
-#define xprintf printf
+#elif defined(__arm__) /* __arm__ */
-#elif defined(__arm__) /* __AVR__ */
+# include "mbed/xprintf.h"
-#include "mbed/xprintf.h"
+# ifdef USER_PRINT /* USER_PRINT */
-#define print(s) xprintf(s)
-#define println(s) xprintf(s "\r\n")
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprintf(fmt, ...) __xprintf(fmt, ...)
+# define uprint(s) xprintf(s)
+# define uprintln(s) xprintf(s "\r\n")
+
+# else /* NORMAL PRINT */
+
+// Create user & normal print defines
+# define xprintf(fmt, ...) __xprintf(fmt, ...)
+# define print(s) xprintf(s)
+# define println(s) xprintf(s "\r\n")
+# define uprint(s) print(s)
+# define uprintln(s) println(s)
+# define uprintf(fmt, ...) xprintf(fmt, ...)
+
+# endif /* USER_PRINT / NORMAL PRINT */
/* TODO: to select output destinations: UART/USBSerial */
-#define print_set_sendchar(func)
+# define print_set_sendchar(func)
+
+#endif /* __AVR__ / PROTOCOL_CHIBIOS / __arm__ */
+
+// User print disables the normal print messages in the body of QMK/TMK code and
+// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
+// a spot of debugging but lack flash resources for allowing all of the codebase to
+// print (and store their wasteful strings).
+//
+// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!!
+//
+#ifdef USER_PRINT
-#endif /* __AVR__ */
+// Disable normal print
+#define print_dec(data)
+#define print_decs(data)
+#define print_hex4(data)
+#define print_hex8(data)
+#define print_hex16(data)
+#define print_hex32(data)
+#define print_bin4(data)
+#define print_bin8(data)
+#define print_bin16(data)
+#define print_bin32(data)
+#define print_bin_reverse8(data)
+#define print_bin_reverse16(data)
+#define print_bin_reverse32(data)
+#define print_val_dec(v)
+#define print_val_decs(v)
+#define print_val_hex8(v)
+#define print_val_hex16(v)
+#define print_val_hex32(v)
+#define print_val_bin8(v)
+#define print_val_bin16(v)
+#define print_val_bin32(v)
+#define print_val_bin_reverse8(v)
+#define print_val_bin_reverse16(v)
+#define print_val_bin_reverse32(v)
+#else /* NORMAL_PRINT */
+//Enable normal print
/* decimal */
#define print_dec(i) xprintf("%u", i)
#define print_decs(i) xprintf("%d", i)
@@ -99,6 +199,39 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
#define print_val_bin_reverse16(v) xprintf(#v ": %016b\n", bitrev16(v))
#define print_val_bin_reverse32(v) xprintf(#v ": %032lb\n", bitrev32(v))
+#endif /* USER_PRINT / NORMAL_PRINT */
+
+// User Print
+
+/* decimal */
+#define uprint_dec(i) uprintf("%u", i)
+#define uprint_decs(i) uprintf("%d", i)
+/* hex */
+#define uprint_hex4(i) uprintf("%X", i)
+#define uprint_hex8(i) uprintf("%02X", i)
+#define uprint_hex16(i) uprintf("%04X", i)
+#define uprint_hex32(i) uprintf("%08lX", i)
+/* binary */
+#define uprint_bin4(i) uprintf("%04b", i)
+#define uprint_bin8(i) uprintf("%08b", i)
+#define uprint_bin16(i) uprintf("%016b", i)
+#define uprint_bin32(i) uprintf("%032lb", i)
+#define uprint_bin_reverse8(i) uprintf("%08b", bitrev(i))
+#define uprint_bin_reverse16(i) uprintf("%016b", bitrev16(i))
+#define uprint_bin_reverse32(i) uprintf("%032lb", bitrev32(i))
+/* print value utility */
+#define uprint_val_dec(v) uprintf(#v ": %u\n", v)
+#define uprint_val_decs(v) uprintf(#v ": %d\n", v)
+#define uprint_val_hex8(v) uprintf(#v ": %X\n", v)
+#define uprint_val_hex16(v) uprintf(#v ": %02X\n", v)
+#define uprint_val_hex32(v) uprintf(#v ": %04lX\n", v)
+#define uprint_val_bin8(v) uprintf(#v ": %08b\n", v)
+#define uprint_val_bin16(v) uprintf(#v ": %016b\n", v)
+#define uprint_val_bin32(v) uprintf(#v ": %032lb\n", v)
+#define uprint_val_bin_reverse8(v) uprintf(#v ": %08b\n", bitrev(v))
+#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v))
+#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v))
+
#else /* NO_PRINT */
#define xprintf(fmt, ...)
@@ -143,5 +276,4 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
#define pbin_reverse(data) print_bin_reverse8(data)
#define pbin_reverse16(data) print_bin_reverse16(data)
-
#endif
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/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index e2c9d9bf14..d0c72c46c7 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -28,6 +28,12 @@
#include "led.h"
#endif
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
/* ---------------------------------------------------------
* Global interface variables and declarations
* ---------------------------------------------------------
@@ -39,9 +45,6 @@ uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0;
volatile uint16_t keyboard_idle_count = 0;
static virtual_timer_t keyboard_idle_timer;
static void keyboard_idle_timer_cb(void *arg);
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif /* NKRO_ENABLE */
report_keyboard_t keyboard_report_sent = {{0}};
#ifdef MOUSE_ENABLE
@@ -943,8 +946,8 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
if((usbp->setup[4] == KBD_INTERFACE) && (usbp->setup[5] == 0)) { /* wIndex */
keyboard_protocol = ((usbp->setup[2]) != 0x00); /* LSB(wValue) */
#ifdef NKRO_ENABLE
- keyboard_nkro = !!keyboard_protocol;
- if(!keyboard_nkro && keyboard_idle) {
+ keymap_config.nkro = !!keyboard_protocol;
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -962,7 +965,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
keyboard_idle = usbp->setup[3]; /* MSB(wValue) */
/* arm the timer */
#ifdef NKRO_ENABLE
- if(!keyboard_nkro && keyboard_idle) {
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -1089,7 +1092,7 @@ static void keyboard_idle_timer_cb(void *arg) {
}
#ifdef NKRO_ENABLE
- if(!keyboard_nkro && keyboard_idle) {
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -1122,7 +1125,7 @@ void send_keyboard(report_keyboard_t *report) {
osalSysUnlock();
#ifdef NKRO_ENABLE
- if(keyboard_nkro) { /* NKRO protocol */
+ if(keymap_config.nkro) { /* NKRO protocol */
/* need to wait until the previous packet has made it through */
/* can rewrite this using the synchronous API, then would wait
* until *after* the packet has been transmitted. I think
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/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h
index 316650a7b1..c6c94e3618 100644
--- a/tmk_core/protocol/lufa/descriptor.h
+++ b/tmk_core/protocol/lufa/descriptor.h
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
* This file is based on:
* LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
@@ -129,13 +129,13 @@ typedef struct
# define MOUSE_INTERFACE (KEYBOARD_INTERFACE + 1)
#else
# define MOUSE_INTERFACE KEYBOARD_INTERFACE
-#endif
+#endif
#ifdef EXTRAKEY_ENABLE
# define EXTRAKEY_INTERFACE (MOUSE_INTERFACE + 1)
#else
# define EXTRAKEY_INTERFACE MOUSE_INTERFACE
-#endif
+#endif
#ifdef CONSOLE_ENABLE
# define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1)
@@ -171,7 +171,7 @@ typedef struct
#define KEYBOARD_IN_EPNUM 1
#ifdef MOUSE_ENABLE
-# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1)
+# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1)
#else
# define MOUSE_IN_EPNUM KEYBOARD_IN_EPNUM
#endif
@@ -179,7 +179,7 @@ typedef struct
#ifdef EXTRAKEY_ENABLE
# define EXTRAKEY_IN_EPNUM (MOUSE_IN_EPNUM + 1)
#else
-# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM
+# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM
#endif
#ifdef CONSOLE_ENABLE
@@ -226,7 +226,7 @@ typedef struct
#define MOUSE_EPSIZE 8
#define EXTRAKEY_EPSIZE 8
#define CONSOLE_EPSIZE 32
-#define NKRO_EPSIZE 16
+#define NKRO_EPSIZE 32
#define MIDI_STREAM_EPSIZE 64
#define CDC_NOTIFICATION_EPSIZE 8
#define CDC_EPSIZE 16
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index 9b201374a2..01c0e45b0b 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -52,6 +52,13 @@
#include "descriptor.h"
#include "lufa.h"
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
+
#ifdef AUDIO_ENABLE
#include <audio.h>
#endif
@@ -502,7 +509,7 @@ static void send_keyboard(report_keyboard_t *report)
/* Select the Keyboard Report Endpoint */
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
/* Report protocol - NKRO */
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
diff --git a/tmk_core/protocol/pjrc/usb.c b/tmk_core/protocol/pjrc/usb.c
index 1e6ba8719a..09efbe0762 100644
--- a/tmk_core/protocol/pjrc/usb.c
+++ b/tmk_core/protocol/pjrc/usb.c
@@ -1,17 +1,17 @@
/* USB Keyboard Plus Debug Channel Example for Teensy USB Development Board
* http://www.pjrc.com/teensy/usb_keyboard.html
* Copyright (c) 2009 PJRC.COM, LLC
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -41,6 +41,12 @@
#include "action.h"
#include "action_util.h"
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
/**************************************************************************
*
@@ -694,7 +700,7 @@ ISR(USB_GEN_vect)
}
/* TODO: should keep IDLE rate on each keyboard interface */
#ifdef NKRO_ENABLE
- if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) {
+ if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) {
#else
if (keyboard_idle && (++div4 & 3) == 0) {
#endif
@@ -881,7 +887,7 @@ ISR(USB_COM_vect)
#endif
if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) {
if (bRequest == SET_FEATURE) {
- remote_wakeup = true;
+ remote_wakeup = true;
} else {
remote_wakeup = false;
}
@@ -932,7 +938,7 @@ ISR(USB_COM_vect)
if (bRequest == HID_SET_PROTOCOL) {
keyboard_protocol = wValue;
#ifdef NKRO_ENABLE
- keyboard_nkro = !!keyboard_protocol;
+ keymap_config.nkro = !!keyboard_protocol;
#endif
clear_keyboard();
//usb_wait_in_ready();
diff --git a/tmk_core/protocol/pjrc/usb_keyboard.c b/tmk_core/protocol/pjrc/usb_keyboard.c
index 4b87b5d7b5..05f4797340 100644
--- a/tmk_core/protocol/pjrc/usb_keyboard.c
+++ b/tmk_core/protocol/pjrc/usb_keyboard.c
@@ -30,6 +30,12 @@
#include "util.h"
#include "host.h"
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
// protocol setting from the host. We use exactly the same report
// either way, so this variable only stores the setting since we
@@ -56,7 +62,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
int8_t result = 0;
#ifdef NKRO_ENABLE
- if (keyboard_nkro)
+ if (keymap_config.nkro)
result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE);
else
#endif
diff --git a/tmk_core/readme.md b/tmk_core/readme.md
index f460d0ed44..5f135617c4 100644
--- a/tmk_core/readme.md
+++ b/tmk_core/readme.md
@@ -23,7 +23,7 @@ These features can be used in your keyboard.
* Mouse key - Mouse control with keyboard
* System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up
* Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc
-* USB NKRO - 120 keys(+ 8 modifiers) simultaneously
+* USB NKRO - 248 keys(+ 8 modifiers) simultaneously
* PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device
* Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols
* User Function - Customizable function of key with writing code
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index d2350f27c1..e4c8aecb2c 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,87 @@ 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
+.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
+$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
+ echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
+
+.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
+$(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 +357,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 +377,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