diff options
| author | Josh Colbeck <skrymir@gmail.com> | 2017-02-21 20:31:16 -0600 | 
|---|---|---|
| committer | Josh Colbeck <skrymir@gmail.com> | 2017-02-21 20:31:16 -0600 | 
| commit | e51001efcc3ff8b64f8264e8bd4c2dbea15f3364 (patch) | |
| tree | bdf5a0a4b44d5e63ba1376b70d94f64c77f3c90c /tmk_core | |
| parent | c56693f858cb3409e4a68a8e65a1370c022a51ed (diff) | |
| parent | 7ff41df32c29bca4e3a6efc3047b8fa93bb99b92 (diff) | |
| download | firmware-e51001efcc3ff8b64f8264e8bd4c2dbea15f3364.tar.gz firmware-e51001efcc3ff8b64f8264e8bd4c2dbea15f3364.tar.bz2 firmware-e51001efcc3ff8b64f8264e8bd4c2dbea15f3364.zip  | |
Merge remote-tracking branch 'qmk/master'
Diffstat (limited to 'tmk_core')
96 files changed, 8012 insertions, 5968 deletions
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 3bf2b34f8..5df539def 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -26,7 +26,7 @@ CFLAGS += -fno-inline-small-functions  CFLAGS += -fno-strict-aliasing  CPPFLAGS += $(COMPILEFLAGS) -CPPFLAGS += -fno-exceptions +CPPFLAGS += -fno-exceptions -std=c++11  LDFLAGS +=-Wl,--gc-sections @@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex  	batchisp -hardware usb -device $(MCU) -operation start reset 0  dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter +	until dfu-programmer $(MCU) get bootloader-version; do\ +		echo "Error: Bootloader not found. Trying again in 5s." ;\ +		sleep 5 ;\ +	done  ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1)))  	dfu-programmer $(MCU) erase --force  else @@ -134,6 +138,11 @@ else  endif  	dfu-programmer $(MCU) reset +# Convert hex to bin. +flashbin: $(BUILD_DIR)/$(TARGET).hex +	$(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin +	$(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; +	$(COPY) $(BUILD_DIR)/$(TARGET).bin FLASH.bin;   # Generate avr-gdb config/init file which does the following:  #     define the reset signal, load the target file, connect to target, and set diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index cb67ac6f2..062a712bd 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 aa05b9491..a86dccc61 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,109 @@ 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 $(RAW_ENABLE)), yes) +    TMK_COMMON_DEFS += -DRAW_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 $(NO_UART)), yes) +    TMK_COMMON_DEFS += -DNO_UART +endif + +ifeq ($(strip $(NO_SUSPEND_POWER_DOWN)), yes) +    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 $(ADAFRUIT_BLE_ENABLE)), yes) +    TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE  endif  ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) -    OPT_DEFS += -DBLUETOOTH_ENABLE +    TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE +endif + +ifeq ($(strip $(ONEHAND_ENABLE)), yes) +    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  VPATH += $(TMK_PATH)/$(COMMON_DIR)  ifeq ($(PLATFORM),CHIBIOS)  VPATH += $(TMK_PATH)/$(COMMON_DIR)/chibios -endif
\ No newline at end of file +endif diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index be6dea2b7..94de36918 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -33,6 +33,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "nodebug.h"  #endif +#ifdef FAUXCLICKY_ENABLE +#include <fauxclicky.h> +#endif  void action_exec(keyevent_t event)  { @@ -41,8 +44,31 @@ void action_exec(keyevent_t event)          dprint("EVENT: "); debug_event(event); dprintln();      } +#ifdef FAUXCLICKY_ENABLE +    if (IS_PRESSED(event)) { +        FAUXCLICKY_ACTION_PRESS; +    } +    if (IS_RELEASED(event)) { +        FAUXCLICKY_ACTION_RELEASE; +    } +    fauxclicky_check(); +#endif + +#ifdef ONEHAND_ENABLE +    if (!IS_NOEVENT(event)) { +        process_hand_swap(&event); +    } +#endif +      keyrecord_t record = { .event = event }; +#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) +    if (has_oneshot_layer_timed_out()) { +        dprintf("Oneshot layer: timeout\n"); +        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); +    } +#endif +  #ifndef NO_ACTION_TAPPING      action_tapping_process(record);  #else @@ -53,6 +79,26 @@ void action_exec(keyevent_t event)  #endif  } +#ifdef ONEHAND_ENABLE +bool swap_hands = false; + +void process_hand_swap(keyevent_t *event) { +    static swap_state_row_t swap_state[MATRIX_ROWS]; + +    keypos_t pos = event->key; +    swap_state_row_t col_bit = (swap_state_row_t)1<<pos.col; +    bool do_swap = event->pressed ? swap_hands : +                                    swap_state[pos.row] & (col_bit); + +    if (do_swap) { +        event->key = hand_swap_config[pos.row][pos.col]; +        swap_state[pos.row] |= col_bit; +    } else { +        swap_state[pos.row] &= ~(col_bit); +    } +} +#endif +  #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)  bool disable_action_cache = false; @@ -74,7 +120,7 @@ bool process_record_quantum(keyrecord_t *record) {      return true;  } -void process_record(keyrecord_t *record)  +void process_record(keyrecord_t *record)  {      if (IS_NOEVENT(record->event)) { return; } @@ -100,13 +146,6 @@ void process_action(keyrecord_t *record, action_t action)      uint8_t tap_count = record->tap.count;  #endif -#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) -    if (has_oneshot_layer_timed_out()) { -        dprintf("Oneshot layer: timeout\n"); -        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); -    } -#endif -      if (event.pressed) {          // clear the potential weak mods left by previously pressed keys          clear_weak_mods(); @@ -129,9 +168,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); @@ -142,7 +182,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); @@ -440,6 +480,54 @@ void process_action(keyrecord_t *record, action_t action)  #endif          case ACT_COMMAND:              break; +#ifdef ONEHAND_ENABLE +        case ACT_SWAP_HANDS: +            switch (action.swap.code) { +                case OP_SH_TOGGLE: +                    if (event.pressed) { +                        swap_hands = !swap_hands; +                    } +                    break; +                case OP_SH_ON_OFF: +                    swap_hands = event.pressed; +                    break; +                case OP_SH_OFF_ON: +                    swap_hands = !event.pressed; +                    break; +                case OP_SH_ON: +                    if (!event.pressed) { +                        swap_hands = true; +                    } +                    break; +                case OP_SH_OFF: +                    if (!event.pressed) { +                        swap_hands = false; +                    } +                    break; +    #ifndef NO_ACTION_TAPPING +                case OP_SH_TAP_TOGGLE: +                    /* tap toggle */ +                    if (tap_count > 0) { +                        if (!event.pressed) { +                            swap_hands = !swap_hands; +                        } +                    } else { +                        swap_hands = event.pressed; +                    } +                    break; +                default: +                    if (tap_count > 0) { +                        if (event.pressed) { +                            register_code(action.swap.code); +                        } else { +                            unregister_code(action.swap.code); +                        } +                    } else { +                        swap_hands = event.pressed; +                    } +    #endif +            } +#endif  #ifndef NO_ACTION_FUNCTION          case ACT_FUNCTION:              action_function(record, action.func.id, action.func.opt); @@ -652,6 +740,13 @@ bool is_tap_key(keypos_t key)                      return true;              }              return false; +        case ACT_SWAP_HANDS: +            switch (action.swap.code) { +                case 0x00 ... 0xdf: +                case OP_SH_TAP_TOGGLE: +                    return true; +            } +            return false;          case ACT_MACRO:          case ACT_FUNCTION:              if (action.func.opt & FUNC_TAP) { return true; } @@ -692,6 +787,7 @@ void debug_action(action_t action)          case ACT_MACRO:             dprint("ACT_MACRO");             break;          case ACT_COMMAND:           dprint("ACT_COMMAND");           break;          case ACT_FUNCTION:          dprint("ACT_FUNCTION");          break; +        case ACT_SWAP_HANDS:        dprint("ACT_SWAP_HANDS");        break;          default:                    dprint("UNKNOWN");               break;      }      dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff); diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index e8aa12a7c..b9bdfe642 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -65,6 +65,24 @@ bool process_record_quantum(keyrecord_t *record);  #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)  extern bool disable_action_cache;  #endif + +/* Code for handling one-handed key modifiers. */ +#ifdef ONEHAND_ENABLE +extern bool swap_hands; +extern const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS]; +#if (MATRIX_COLS <= 8) +typedef  uint8_t    swap_state_row_t; +#elif (MATRIX_COLS <= 16) +typedef  uint16_t   swap_state_row_t; +#elif (MATRIX_COLS <= 32) +typedef  uint32_t   swap_state_row_t; +#else +#error "MATRIX_COLS: invalid value" +#endif + +void process_hand_swap(keyevent_t *record); +#endif +  void process_record_nocache(keyrecord_t *record);  void process_record(keyrecord_t *record);  void process_action(keyrecord_t *record, action_t action); diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index ca729aaec..b15aaa0eb 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -47,10 +47,15 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.   * 0100|10| usage(10)     (reserved)   * 0100|11| usage(10)     (reserved)   * - * ACT_MOUSEKEY(0110): TODO: Not needed? + * + * ACT_MOUSEKEY(0101): TODO: Merge these two actions to conserve space?   * 0101|xxxx| keycode     Mouse key   * - * 011x|xxxx xxxx xxxx    (reseved) + * ACT_SWAP_HANDS(0110): + * 0110|xxxx| keycode     Swap hands (keycode on tap, or options) + * + * + * 0111|xxxx xxxx xxxx    (reserved)   *   *   * Layer Actions(10xx) @@ -67,7 +72,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.   *   ee:    on event(01:press, 10:release, 11:both)   *   * 1001|xxxx|xxxx xxxx   (reserved) - * 1001|oopp|BBBB BBBB   8-bit Bitwise Operation???   *   * ACT_LAYER_TAP(101x):   * 101E|LLLL| keycode    On/Off with tap key    (0x00-DF)[TAP] @@ -108,6 +112,8 @@ enum action_kind_id {      /* Other Keys */      ACT_USAGE           = 0b0100,      ACT_MOUSEKEY        = 0b0101, +    /* One-hand Support */ +    ACT_SWAP_HANDS      = 0b0110,      /* Layer Actions */      ACT_LAYER           = 0b1000,      ACT_LAYER_TAP       = 0b1010, /* Layer  0-15 */ @@ -178,6 +184,11 @@ typedef union {          uint8_t  opt    :4;          uint8_t  kind   :4;      } func; +    struct action_swap { +        uint8_t  code   :8; +        uint8_t  opt   :4; +        uint8_t  kind   :4; +    } swap;  } action_t; @@ -295,6 +306,7 @@ enum backlight_opt {      BACKLIGHT_STEP     = 3,      BACKLIGHT_LEVEL    = 4,  }; +  /* Macro */  #define ACTION_MACRO(id)                ACTION(ACT_MACRO, (id))  #define ACTION_MACRO_TAP(id)            ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) @@ -306,7 +318,7 @@ enum backlight_opt {  #define ACTION_BACKLIGHT_STEP()         ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8)  #define ACTION_BACKLIGHT_LEVEL(level)   ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level))  /* Command */ -#define ACTION_COMMAND(id, opt)         ACTION(ACT_COMMAND,  (opt)<<8 | (addr)) +#define ACTION_COMMAND(id, opt)         ACTION(ACT_COMMAND,  (opt)<<8 | (id))  /* Function */  enum function_opts {      FUNC_TAP = 0x8,     /* indciates function is tappable */ @@ -314,5 +326,23 @@ enum function_opts {  #define ACTION_FUNCTION(id)             ACTION(ACT_FUNCTION, (id))  #define ACTION_FUNCTION_TAP(id)         ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id))  #define ACTION_FUNCTION_OPT(id, opt)    ACTION(ACT_FUNCTION, (opt)<<8 | (id)) +/* OneHand Support */ +enum swap_hands_pram_tap_op { +    OP_SH_TOGGLE = 0xF0, +    OP_SH_TAP_TOGGLE, +    OP_SH_ON_OFF, +    OP_SH_OFF_ON, +    OP_SH_OFF, +    OP_SH_ON, +}; + +#define ACTION_SWAP_HANDS()             ACTION_SWAP_HANDS_ON_OFF() +#define ACTION_SWAP_HANDS_TOGGLE()      ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE) +#define ACTION_SWAP_HANDS_TAP_TOGGLE()  ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE) +#define ACTION_SWAP_HANDS_TAP_KEY(key)  ACTION(ACT_SWAP_HANDS, key) +#define ACTION_SWAP_HANDS_ON_OFF()      ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF) +#define ACTION_SWAP_HANDS_OFF_ON()      ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON) +#define ACTION_SWAP_HANDS_ON()          ACTION(ACT_SWAP_HANDS, OP_SH_ON) +#define ACTION_SWAP_HANDS_OFF()         ACTION(ACT_SWAP_HANDS, OP_SH_OFF)  #endif /* ACTION_CODE_H */ diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index 63fa2b5ae..58d919a04 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -16,8 +16,14 @@   */  uint32_t default_layer_state = 0; +__attribute__((weak)) +uint32_t default_layer_state_set_kb(uint32_t state) { +    return state; +} +  static void default_layer_state_set(uint32_t state)  { +    state = default_layer_state_set_kb(state);      debug("default_layer_state: ");      default_layer_debug(); debug(" to ");      default_layer_state = state; @@ -57,8 +63,14 @@ void default_layer_xor(uint32_t state)   */  uint32_t layer_state = 0; +__attribute__((weak)) +uint32_t layer_state_set_kb(uint32_t state) { +    return state; +} +  static void layer_state_set(uint32_t state)  { +    state = layer_state_set_kb(state);      dprint("layer_state: ");      layer_debug(); dprint(" to ");      layer_state = state; @@ -111,7 +123,7 @@ void layer_debug(void)  #endif  #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) -uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0}; +uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}};  void update_source_layers_cache(keypos_t key, uint8_t layer)  { diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index 025cf5420..d89ed6e5c 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h @@ -29,6 +29,9 @@ extern uint32_t default_layer_state;  void default_layer_debug(void);  void default_layer_set(uint32_t state); +__attribute__((weak)) +uint32_t default_layer_state_set_kb(uint32_t state); +  #ifndef NO_ACTION_LAYER  /* bitwise operation */  void default_layer_or(uint32_t state); @@ -69,6 +72,8 @@ void layer_xor(uint32_t state);  #define layer_xor(state)  #define layer_debug() +__attribute__((weak)) +uint32_t layer_state_set_kb(uint32_t state);  #endif  /* pressed actions cache */ diff --git a/tmk_core/common/action_macro.h b/tmk_core/common/action_macro.h index aedc32ec6..f373f5068 100644 --- a/tmk_core/common/action_macro.h +++ b/tmk_core/common/action_macro.h @@ -20,11 +20,33 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "progmem.h" -#define MACRO_NONE      0 + +typedef uint8_t macro_t; + +#define MACRO_NONE      (macro_t*)0  #define MACRO(...)      ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })  #define MACRO_GET(p)    pgm_read_byte(p) -typedef uint8_t macro_t; +// Sends press when the macro key is pressed, release when release, or tap_macro when the key has been tapped +#define MACRO_TAP_HOLD(record, press, release, tap_macro) ( ((record)->event.pressed) ? \ +     ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? (press) : MACRO_NONE ) : \ +     ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (tap_macro) : (release) ) ) + +// Holds down the modifier mod when the macro key is held, or sends macro instead when tapped +#define MACRO_TAP_HOLD_MOD(record, macro, mod) MACRO_TAP_HOLD(record, (MACRO(D(mod), END)), MACRO(U(mod), END), macro) + +// Holds down the modifier mod when the macro key is held, or pressed a shifted key when tapped (eg: shift+3 for #) +#define MACRO_TAP_SHFT_KEY_HOLD_MOD(record, key, mod) MACRO_TAP_HOLD_MOD(record, (MACRO(I(10), D(LSFT), T(key), U(LSFT), END)), mod) + + +// Momentary switch layer when held, sends macro if tapped +#define MACRO_TAP_HOLD_LAYER(record, macro, layer) ( ((record)->event.pressed) ? \ +     ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? ({layer_on((layer)); MACRO_NONE; }) : MACRO_NONE ) : \ +     ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (macro) : ({layer_off((layer)); MACRO_NONE; }) ) ) + +// Momentary switch layer when held, presses a shifted key when tapped (eg: shift+3 for #) +#define MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, key, layer) MACRO_TAP_HOLD_LAYER(record, MACRO(I(10), D(LSFT), T(key), U(LSFT), END), layer) +       #ifndef NO_ACTION_MACRO diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index 61ff202be..cb4b25264 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 fb9bf2d1c..34db8d0b0 100644 --- a/tmk_core/common/avr/bootloader.c +++ b/tmk_core/common/avr/bootloader.c @@ -1,6 +1,7 @@  #include <stdint.h>  #include <stdbool.h>  #include <avr/io.h> +#include <avr/eeprom.h>  #include <avr/interrupt.h>  #include <avr/wdt.h>  #include <util/delay.h> @@ -38,7 +39,7 @@   *          |               |                        |               |   *          =               =                        =               =   *          |               | 32KB-4KB               |               | 128KB-8KB - * 0x6000   +---------------+               0x1FC00  +---------------+ + * 0x7000   +---------------+               0x1E000  +---------------+   *          |  Bootloader   | 4KB                    |  Bootloader   | 8KB   * 0x7FFF   +---------------+               0x1FFFF  +---------------+   * @@ -64,8 +65,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 @@ -89,6 +90,12 @@ void bootloader_jump(void) {              _delay_ms(5);          #endif +        #ifdef BOOTLOADHID_BOOTLOADER +            // force bootloadHID to stay in bootloader mode, so that it waits +            // for a new firmware to be flashed +            eeprom_write_byte((uint8_t *)1, 0x00); +        #endif +          // watchdog reset          reset_key = BOOTLOADER_RESET_KEY;          wdt_enable(WDTO_250MS); @@ -114,6 +121,11 @@ void bootloader_jump(void) {      #endif  } +#ifdef __AVR_ATmega32A__ +// MCUSR is actually called MCUCSR in ATmega32A +#define MCUSR MCUCSR +#endif +  /* this runs before main() */  void bootloader_jump_after_watchdog_reset(void) __attribute__ ((used, naked, section (".init3")));  void bootloader_jump_after_watchdog_reset(void) @@ -137,7 +149,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/suspend.c b/tmk_core/common/avr/suspend.c index 8a7272bbc..0c81e8361 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -47,6 +47,7 @@ void suspend_idle(uint8_t time)      sleep_disable();  } +#ifndef NO_SUSPEND_POWER_DOWN  /* Power down MCU with watchdog timer   * wdto: watchdog timer timeout defined in <avr/wdt.h>   *          WDTO_15MS @@ -61,6 +62,7 @@ void suspend_idle(uint8_t time)   *          WDTO_8S   */  static uint8_t wdt_timeout = 0; +  static void power_down(uint8_t wdto)  {  #ifdef PROTOCOL_LUFA @@ -98,19 +100,19 @@ static void power_down(uint8_t wdto)      // Disable watchdog after sleep      wdt_disable();  } +#endif  void suspend_power_down(void)  { +#ifndef NO_SUSPEND_POWER_DOWN      power_down(WDTO_15MS); +#endif  }  __attribute__ ((weak)) void matrix_power_up(void) {}  __attribute__ ((weak)) void matrix_power_down(void) {}  bool suspend_wakeup_condition(void)  { -#ifdef BACKLIGHT_ENABLE -    backlight_set(0); -#endif      matrix_power_up();      matrix_scan();      matrix_power_down(); @@ -126,10 +128,9 @@ void suspend_wakeup_init(void)      // clear keyboard state      clear_keyboard();  #ifdef BACKLIGHT_ENABLE -    backlight_set(0);      backlight_init();  #endif -led_set(host_keyboard_leds()); +	led_set(host_keyboard_leds());  }  #ifndef NO_SUSPEND_POWER_DOWN diff --git a/tmk_core/common/avr/timer.c b/tmk_core/common/avr/timer.c index 292b41c3a..369015200 100644 --- a/tmk_core/common/avr/timer.c +++ b/tmk_core/common/avr/timer.c @@ -17,6 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include <avr/io.h>  #include <avr/interrupt.h> +#include <util/atomic.h>  #include <stdint.h>  #include "timer_avr.h"  #include "timer.h" @@ -24,38 +25,47 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  // counter resolution 1ms  // NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }} -volatile uint32_t timer_count = 0; +volatile uint32_t timer_count;  void timer_init(void)  { -    // Timer0 CTC mode -    TCCR0A = 0x02; -  #if TIMER_PRESCALER == 1 -    TCCR0B = 0x01; +    uint8_t prescaler = 0x01;  #elif TIMER_PRESCALER == 8 -    TCCR0B = 0x02; +    uint8_t prescaler = 0x02;  #elif TIMER_PRESCALER == 64 -    TCCR0B = 0x03; +    uint8_t prescaler = 0x03;  #elif TIMER_PRESCALER == 256 -    TCCR0B = 0x04; +    uint8_t prescaler = 0x04;  #elif TIMER_PRESCALER == 1024 -    TCCR0B = 0x05; +    uint8_t prescaler = 0x05;  #else  #   error "Timer prescaler value is NOT vaild."  #endif +#ifndef __AVR_ATmega32A__ +    // Timer0 CTC mode +    TCCR0A = 0x02; + +    TCCR0B = prescaler; +      OCR0A = TIMER_RAW_TOP;      TIMSK0 = (1<<OCIE0A); +#else +    // Timer0 CTC mode +    TCCR0 = (1 << WGM01) | prescaler; + +    OCR0 = TIMER_RAW_TOP; +    TIMSK = (1 << OCIE0); +#endif  }  inline  void timer_clear(void)  { -    uint8_t sreg = SREG; -    cli(); +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {      timer_count = 0; -    SREG = sreg; +  }  }  inline @@ -63,10 +73,9 @@ uint16_t timer_read(void)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return (t & 0xFFFF);  } @@ -76,10 +85,9 @@ uint32_t timer_read32(void)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return t;  } @@ -89,10 +97,9 @@ uint16_t timer_elapsed(uint16_t last)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return TIMER_DIFF_16((t & 0xFFFF), last);  } @@ -102,16 +109,20 @@ uint32_t timer_elapsed32(uint32_t last)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return TIMER_DIFF_32(t, last);  }  // excecuted once per 1ms.(excess for just timer count?) -ISR(TIMER0_COMPA_vect) +#ifndef __AVR_ATmega32A__ +#define TIMER_INTERRUPT_VECTOR TIMER0_COMPA_vect +#else +#define TIMER_INTERRUPT_VECTOR TIMER0_COMP_vect +#endif +ISR(TIMER_INTERRUPT_VECTOR, ISR_NOBLOCK)  {      timer_count++;  } diff --git a/tmk_core/common/avr/xprintf.S b/tmk_core/common/avr/xprintf.S index 0cec70ce2..06434b98d 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 59c6f2531..08d9f93a0 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/backlight.c b/tmk_core/common/backlight.c index c9e8fd3fd..0e0ad2d15 100644 --- a/tmk_core/common/backlight.c +++ b/tmk_core/common/backlight.c @@ -36,9 +36,9 @@ void backlight_increase(void)      if(backlight_config.level < BACKLIGHT_LEVELS)      {          backlight_config.level++; -        backlight_config.enable = 1; -        eeconfig_update_backlight(backlight_config.raw);      } +    backlight_config.enable = 1; +    eeconfig_update_backlight(backlight_config.raw);      dprintf("backlight increase: %u\n", backlight_config.level);      backlight_set(backlight_config.level);  } diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c index 6730a2a4a..2c6bcbae5 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 084c9fe15..f79d5a257 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:" @@ -234,10 +235,13 @@ static void print_status(void)      print("\n\t- Status -\n");      print_val_hex8(host_keyboard_leds()); +#ifndef PROTOCOL_VUSB +    // these aren't set on the V-USB protocol, so we just ignore them for now      print_val_hex8(keyboard_protocol);      print_val_hex8(keyboard_idle); +#endif  #ifdef NKRO_ENABLE -    print_val_hex8(keyboard_nkro); +    print_val_hex8(keymap_config.nkro);  #endif      print_val_hex32(timer_read32()); @@ -260,7 +264,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; @@ -375,9 +382,6 @@ static bool command_common(uint8_t code)              debug_enable = !debug_enable;              if (debug_enable) {                  print("\ndebug: on\n"); -                debug_matrix   = true; -                debug_keyboard = true; -                debug_mouse    = true;              } else {                  print("\ndebug: off\n");                  debug_matrix   = false; @@ -434,8 +438,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 +574,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 11a05c2dd..e12b62216 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 9814b10d2..aeabba710 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/host_driver.h b/tmk_core/common/host_driver.h index edb9e5dd9..588d1c0be 100644 --- a/tmk_core/common/host_driver.h +++ b/tmk_core/common/host_driver.h @@ -20,7 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include <stdint.h>  #include "report.h" - +#ifdef MIDI_ENABLE +	#include "midi.h" +#endif  typedef struct {      uint8_t (*keyboard_leds)(void); @@ -28,6 +30,11 @@ typedef struct {      void (*send_mouse)(report_mouse_t *);      void (*send_system)(uint16_t);      void (*send_consumer)(uint16_t); +#ifdef MIDI_ENABLE +    void (*usb_send_func)(MidiDevice *, uint16_t, uint8_t, uint8_t, uint8_t); +    void (*usb_get_midi)(MidiDevice *); +    void (*midi_usb_init)(MidiDevice *); +#endif  } host_driver_t;  #endif diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index c46a701b3..eac1f1dd8 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -14,6 +14,7 @@ GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ +  #include <stdint.h>  #include "keyboard.h"  #include "matrix.h" @@ -50,6 +51,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #ifdef RGBLIGHT_ENABLE  #   include "rgblight.h"  #endif +#ifdef FAUXCLICKY_ENABLE +#   include "fauxclicky.h" +#endif  #ifdef SERIAL_LINK_ENABLE  #   include "serial_link/system/serial_link.h"  #endif @@ -57,6 +61,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)  { @@ -105,8 +111,11 @@ void keyboard_init(void) {  #ifdef RGBLIGHT_ENABLE      rgblight_init();  #endif +#ifdef FAUXCLICKY_ENABLE +    fauxclicky_init(); +#endif  #if defined(NKRO_ENABLE) && defined(FORCE_NKRO) -	keyboard_nkro = true; +    keymap_config.nkro = 1;  #endif  } @@ -186,7 +195,7 @@ MATRIX_LOOP_END:  #endif  #ifdef VISUALIZER_ENABLE -    visualizer_update(default_layer_state, layer_state, host_keyboard_leds()); +    visualizer_update(default_layer_state, layer_state, visualizer_get_mods(), host_keyboard_leds());  #endif      // update LED diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h index 2f208c54e..54e9c322c 100644 --- a/tmk_core/common/keycode.h +++ b/tmk_core/common/keycode.h @@ -85,7 +85,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define KC_LCAP KC_LOCKING_CAPS  #define KC_LNUM KC_LOCKING_NUM  #define KC_LSCR KC_LOCKING_SCROLL -#define KC_ERAS KC_ALT_ERASE, +#define KC_ERAS KC_ALT_ERASE  #define KC_CLR  KC_CLEAR  /* Japanese specific */  #define KC_ZKHK KC_GRAVE diff --git a/tmk_core/common/magic.c b/tmk_core/common/magic.c index 194e4cc02..49617a3d1 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/matrix.h b/tmk_core/common/matrix.h index cee3593ee..2543f5abc 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -50,7 +50,7 @@ void matrix_init(void);  uint8_t matrix_scan(void);  /* whether modified from previous scan. used after matrix_scan. */  bool matrix_is_modified(void) __attribute__ ((deprecated)); -/* whether a swtich is on */ +/* whether a switch is on */  bool matrix_is_on(uint8_t row, uint8_t col);  /* matrix state on row */  matrix_row_t matrix_get_row(uint8_t row); diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp index 3647ece75..b1aac2c99 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 26bc529e5..1e7a48c06 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 0368bcd4a..8836c0fc7 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -29,45 +29,147 @@  #include <stdbool.h>  #include "util.h" - +#if defined(PROTOCOL_CHIBIOS) +#define PSTR(x) x +#endif  #ifndef NO_PRINT +#if defined(__AVR__) /* __AVR__ */ + +#  include "avr/xprintf.h" + +#  ifdef USER_PRINT /* USER_PRINT */ + +// 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 */ -#if defined(__AVR__) +// 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, ...) -#include "avr/xprintf.h" -#define print(s)    xputs(PSTR(s)) -#define println(s)  xputs(PSTR(s "\r\n")) +#  endif /* USER_PRINT / NORMAL PRINT */ -#ifdef __cplusplus +#  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 */ -#include "chibios/printf.h" +// 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 -#define print(s)    printf(s) -#define println(s)  printf(s "\r\n") -#define xprintf  printf +#  endif /* USER_PRINT / NORMAL PRINT */ -#elif defined(__arm__) /* __AVR__ */ +#elif defined(__arm__) /* __arm__ */ -#include "mbed/xprintf.h" +#  include "mbed/xprintf.h" -#define print(s)    xprintf(s) -#define println(s)  xprintf(s "\r\n") +#  ifdef USER_PRINT /* USER_PRINT */ + +// 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__ */ -#endif /* __AVR__ */ +// 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 + +// 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) @@ -97,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, ...) @@ -141,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/common/raw_hid.h b/tmk_core/common/raw_hid.h new file mode 100644 index 000000000..86da02fd1 --- /dev/null +++ b/tmk_core/common/raw_hid.h @@ -0,0 +1,8 @@ +#ifndef _RAW_HID_H_ +#define _RAW_HID_H_ + +void raw_hid_receive( uint8_t *data, uint8_t length ); + +void raw_hid_send( uint8_t *data, uint8_t length ); + +#endif diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 0c799eca3..8fb28b6ce 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -134,13 +134,6 @@ typedef union {      } nkro;  #endif  } __attribute__ ((packed)) report_keyboard_t; -/* -typedef struct { -    uint8_t mods; -    uint8_t reserved; -    uint8_t keys[REPORT_KEYS]; -} __attribute__ ((packed)) report_keyboard_t; -*/  typedef struct {      uint8_t buttons; diff --git a/tmk_core/common/virtser.h b/tmk_core/common/virtser.h new file mode 100644 index 000000000..74891b6ae --- /dev/null +++ b/tmk_core/common/virtser.h @@ -0,0 +1,10 @@ +#ifndef _VIRTSER_H_ +#define _VIRTSER_H_ + +/* Define this function in your code to process incoming bytes */ +void virtser_recv(const uint8_t ch); + +/* Call this to send a character over the Virtual Serial Device */ +void virtser_send(const uint8_t byte); + +#endif diff --git a/tmk_core/native.mk b/tmk_core/native.mk new file mode 100644 index 000000000..50232ee9b --- /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 e2c9d9bf1..d0c72c46c 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 1b0290963..a873515e1 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 72725b998..7d92be069 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 99058f033..12395bf69 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.mk b/tmk_core/protocol/lufa.mk index 0eeace44e..de0cc795f 100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@ -8,24 +8,33 @@ LUFA_PATH ?= $(LUFA_DIR)/LUFA-git  ifneq (, $(wildcard $(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk))      # New build system from 20120730      LUFA_ROOT_PATH = $(LUFA_PATH)/LUFA -    include $(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk  +    include $(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk  else      include $(TMK_PATH)/$(LUFA_PATH)/LUFA/makefile  endif  LUFA_SRC = lufa.c \  	   descriptor.c \ +	   outputselect.c \  	   $(LUFA_SRC_USB)  ifeq ($(strip $(MIDI_ENABLE)), yes)  	include $(TMK_PATH)/protocol/midi.mk  endif +ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) +	LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp +endif +  ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)  	LUFA_SRC += $(LUFA_DIR)/bluetooth.c \  	$(TMK_DIR)/protocol/serial_uart.c  endif +ifeq ($(strip $(VIRTSER_ENABLE)), yes) +	LUFA_SRC += $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c +endif +  SRC += $(LUFA_SRC)  # Search Path 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 72f3ff04c..02e7063c6 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 6f3312b76..f56aba69f 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 9394b1353..c67b9419e 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 6844d4b01..91fc94966 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 f1d550d1e..700ffa26f 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 91bb4038e..a0edb2c4f 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 ec499b74e..88c51da82 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 86a56911e..b5c0c6b3a 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 0716c3bbe..0db035de3 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 9fd188c93..e839ba6b1 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 fd65db283..e952714e1 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 c1996ec71..c3860c056 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 7ddfa1be3..0ae1dd678 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><filename></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 "<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>" 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 "<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>" 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 "<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>" 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 "<b><tt>Unsupported architecture "<i>{X}</i>"</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> value not set</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>" 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 "<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>" 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 "<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>" 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 "<b><tt>Source file does not exist: <i>{X}</i></tt></b>" 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 "<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>" 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 "<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>" 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 "<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>" 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 "<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>" 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 "<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>" 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 "<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>" 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 "<b><tt>undefined reference to `<i>{X}</i>'</tt></b>" 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><filename></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 "<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>" 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 "<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>" 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 "<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>" 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 "<b><tt>Unsupported architecture "<i>{X}</i>"</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> value not set</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>" 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 "<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>" 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 "<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>" 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 "<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>" 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 "<b><tt>Source file does not exist: <i>{X}</i></tt></b>" 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 "<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>" 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 "<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>" 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 "<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>" 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 "<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>" 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 "<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>" 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 "<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>" 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 "<b><tt>undefined reference to `<i>{X}</i>'</tt></b>" 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/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt index 486e9a427..a34fd58df 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt @@ -1 +1 @@ -Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .
 +Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 . diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt index c017acfd7..dd69b7e0b 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt @@ -1 +1 @@ -Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .
 +Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ . diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt index ee8a38340..8aa4a9413 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt @@ -1,45 +1,45 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->
 -
 -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 -
 -	<xsl:import href="../Docbook/mshelp/docbook.xsl"/>
 -
 -	<xsl:output method="xml" indent="no"/>
 -
 -	<xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">
 -		<span class="hl-keyword" style="color: #0079C1">
 -			<xsl:apply-templates/>
 -		</span>
 -	</xsl:template>
 -
 -	<xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">
 -		<span class="hl-string" style="color: #800000">
 -			<xsl:apply-templates/>
 -		</span>
 -	</xsl:template>
 -
 -	<xsl:template match="emphasis[@role = 'comment']">
 -		<em class="hl-comment" style="color: #008000">
 -			<xsl:apply-templates/>
 -		</em>
 -	</xsl:template>
 -
 -	<xsl:template match="emphasis[@role = 'preprocessor']">
 -		<span class="hl-preprocessor" style="color: #A000A0">
 -			<xsl:apply-templates/>
 -		</span>
 -	</xsl:template>
 -
 -	<xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">
 -		<xsl:apply-templates />
 -	</xsl:template>
 -
 -</xsl:stylesheet>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file --> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + +	<xsl:import href="../Docbook/mshelp/docbook.xsl"/> + +	<xsl:output method="xml" indent="no"/> + +	<xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']"> +		<span class="hl-keyword" style="color: #0079C1"> +			<xsl:apply-templates/> +		</span> +	</xsl:template> + +	<xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']"> +		<span class="hl-string" style="color: #800000"> +			<xsl:apply-templates/> +		</span> +	</xsl:template> + +	<xsl:template match="emphasis[@role = 'comment']"> +		<em class="hl-comment" style="color: #008000"> +			<xsl:apply-templates/> +		</em> +	</xsl:template> + +	<xsl:template match="emphasis[@role = 'preprocessor']"> +		<span class="hl-preprocessor" style="color: #A000A0"> +			<xsl:apply-templates/> +		</span> +	</xsl:template> + +	<xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]"> +		<xsl:apply-templates /> +	</xsl:template> + +</xsl:stylesheet> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css index 49eb7e970..0b6ccbd8c 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css @@ -1,53 +1,53 @@ -/*
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 -*/
 -
 -.programlisting {
 - 	display: block;
 - 	margin-left: 15px;
 - 	padding: 10px;
 - 	background-color: #f4f4f4;
 - 	border: 1px solid #aaaaaa;
 - 	font-family: "Consolas", "Courier New", sans-serif;
 - }
 -
 - code {
 - 	background-color: #f4f4f4;
 - 	font-family: "Consolas", "Courier New", sans-serif;
 - }
 -
 -.note, .warning, .tip {
 -	display: block;
 - 	margin-left: 15px;
 - 	padding-left: 10px;
 - 	padding-bottom: 5px;
 - 	background-color: #f4f4f4;
 - 	border: 1px solid #aaaaaa;
 -}
 -
 -table {
 -	border: 1px solid #aaaaaa;
 -	border-collapse: collapse;
 -	margin-left: 15px;
 -	font-size: 10pt;
 -}
 -
 -table thead {
 - 	background-color: #f4f4f4;
 -}
 -
 -table thead th {
 -	padding: 5px;
 -}
 -
 -table tbody td {
 -	padding: 5px;
 -}
 -
 -ul {
 -	padding-left: 20px;
 -}
 +/* +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +.programlisting { + 	display: block; + 	margin-left: 15px; + 	padding: 10px; + 	background-color: #f4f4f4; + 	border: 1px solid #aaaaaa; + 	font-family: "Consolas", "Courier New", sans-serif; + } + + code { + 	background-color: #f4f4f4; + 	font-family: "Consolas", "Courier New", sans-serif; + } + +.note, .warning, .tip { +	display: block; + 	margin-left: 15px; + 	padding-left: 10px; + 	padding-bottom: 5px; + 	background-color: #f4f4f4; + 	border: 1px solid #aaaaaa; +} + +table { +	border: 1px solid #aaaaaa; +	border-collapse: collapse; +	margin-left: 15px; +	font-size: 10pt; +} + +table thead { + 	background-color: #f4f4f4; +} + +table thead th { +	padding: 5px; +} + +table tbody td { +	padding: 5px; +} + +ul { +	padding-left: 20px; +} diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml index 05ef8b6ba..112d16994 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml @@ -1,13 +1,13 @@ -<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
 -	<Default Extension="vsixmanifest" ContentType="text/xml"/>
 -	<Default Extension="cache" ContentType="text/xml"/>
 -	<Default Extension="png" ContentType="application/octet-stream"/>
 -	<Default Extension="txt" ContentType="text/plain"/>
 -	<Default Extension="xml" ContentType="text/xml"/>
 -	<Default Extension="zip" ContentType="application/octet-stream"/>
 -	<Default Extension="dll" ContentType="application/octet-stream" />
 -	<Default Extension="pkgdef" ContentType="text/plain" />
 -	<Default Extension="htm" ContentType="text/html" />
 -	<Default Extension="msha" ContentType="text/html" />
 -	<Default Extension="mshc" ContentType="application/octet-stream"/>
 -</Types>
 +<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> +	<Default Extension="vsixmanifest" ContentType="text/xml"/> +	<Default Extension="cache" ContentType="text/xml"/> +	<Default Extension="png" ContentType="application/octet-stream"/> +	<Default Extension="txt" ContentType="text/plain"/> +	<Default Extension="xml" ContentType="text/xml"/> +	<Default Extension="zip" ContentType="application/octet-stream"/> +	<Default Extension="dll" ContentType="application/octet-stream" /> +	<Default Extension="pkgdef" ContentType="text/plain" /> +	<Default Extension="htm" ContentType="text/html" /> +	<Default Extension="msha" ContentType="text/html" /> +	<Default Extension="mshc" ContentType="application/octet-stream"/> +</Types> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml index 794fd689e..bd969518a 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml @@ -1,18 +1,18 @@ -<AsfContentProvider Version="1.0.0">
 -	<Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">
 -		<Org>FourWalledCubicle</Org>
 -		<ShortName>LUFA</ShortName>
 -		<Author>Dean Camera</Author>
 -		<Description/>
 -		<FollowFolderStructure>True</FollowFolderStructure>
 -	</Identifier>
 -	<AsfContent Type="zip" Path="contents.zip">
 -		<Content>
 -			<Version>0</Version>
 -			<HelpURL/>
 -			<Locator/>
 -			<DbXMLPath>content.xml.cache</DbXMLPath>
 -			<Description/>
 -		</Content>
 -	</AsfContent>
 -</AsfContentProvider>
 +<AsfContentProvider Version="1.0.0"> +	<Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b"> +		<Org>FourWalledCubicle</Org> +		<ShortName>LUFA</ShortName> +		<Author>Dean Camera</Author> +		<Description/> +		<FollowFolderStructure>True</FollowFolderStructure> +	</Identifier> +	<AsfContent Type="zip" Path="contents.zip"> +		<Content> +			<Version>0</Version> +			<HelpURL/> +			<Locator/> +			<DbXMLPath>content.xml.cache</DbXMLPath> +			<Description/> +		</Content> +	</AsfContent> +</AsfContentProvider> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest index ea6edeb25..847501744 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest @@ -1,33 +1,33 @@ -<?xml version="1.0" encoding="utf-8"?>
 -
 -<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
 -	<Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">
 -		<Name>LUFA Library</Name>
 -		<Author>Dean Camera</Author>
 -		<Version>0</Version>
 -		<MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>
 -		<Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>
 -
 -		<License>License.txt</License>
 -		<Icon>LUFA_thumb.png</Icon>
 -		<PreviewImage>LUFA.png</PreviewImage>
 -
 -		<SupportedProducts>
 -			<IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>
 -			<IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>
 -		</SupportedProducts>
 -
 -		<SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>
 -		<Locale>1033</Locale>
 -
 -	    <AllUsers>false</AllUsers>
 -	</Identifier>
 -
 -	<References/>
 -
 -	<Content>
 -		<VsPackage>LUFA.pkgdef</VsPackage>
 -	    <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>
 -		<CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>
 -	</Content>
 -</Vsix>
 +<?xml version="1.0" encoding="utf-8"?> + +<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010"> +	<Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b"> +		<Name>LUFA Library</Name> +		<Author>Dean Camera</Author> +		<Version>0</Version> +		<MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl> +		<Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description> + +		<License>License.txt</License> +		<Icon>LUFA_thumb.png</Icon> +		<PreviewImage>LUFA.png</PreviewImage> + +		<SupportedProducts> +			<IsolatedShell Version="6.1">AtmelStudio</IsolatedShell> +			<IsolatedShell Version="6.2">AtmelStudio</IsolatedShell> +		</SupportedProducts> + +		<SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/> +		<Locale>1033</Locale> + +	    <AllUsers>false</AllUsers> +	</Identifier> + +	<References/> + +	<Content> +		<VsPackage>LUFA.pkgdef</VsPackage> +	    <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension> +		<CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension> +	</Content> +</Vsix> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py index c51cff400..eb4b71efd 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py @@ -1,38 +1,38 @@ -"""
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 -"""
 -
 -import sys
 -sys.path.append("ProjectGenerator")
 -
 -
 -def show_message(message):
 -    print("[Project Generator] %s" % message)
 -    sys.stdout.flush()
 -
 -
 -def main(lufa_root_path):
 -    try:
 -        from asf_avrstudio5_interface import PythonFacade
 -    except ImportError:
 -        print("Fatal Error: The ASF project generator is missing.")
 -        return 1
 -
 -    p = PythonFacade(lufa_root_path)
 -
 -    show_message("Checking database sanity...")
 -    p.check_extension_database_sanity(lufa_root_path)
 -
 -    show_message("Building cache files...")
 -    p.generate_extension_cache_files(lufa_root_path)
 -
 -    show_message("Cache files created.")
 -    return 0
 -
 -
 -if __name__ == "__main__":
 -    sys.exit(main(sys.argv[1]))
 +""" +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +""" + +import sys +sys.path.append("ProjectGenerator") + + +def show_message(message): +    print("[Project Generator] %s" % message) +    sys.stdout.flush() + + +def main(lufa_root_path): +    try: +        from asf_avrstudio5_interface import PythonFacade +    except ImportError: +        print("Fatal Error: The ASF project generator is missing.") +        return 1 + +    p = PythonFacade(lufa_root_path) + +    show_message("Checking database sanity...") +    p.check_extension_database_sanity(lufa_root_path) + +    show_message("Building cache files...") +    p.generate_extension_cache_files(lufa_root_path) + +    show_message("Cache files created.") +    return 0 + + +if __name__ == "__main__": +    sys.exit(main(sys.argv[1])) diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml index 28afdda58..86cfc0409 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml @@ -1,96 +1,96 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<extension-container>
 -		<extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">
 -			<author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>
 -			<description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>
 -			<icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>
 -			<preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>
 -			<license caption="LUFA License" path="LUFA/License.txt"/>
 -			<release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>
 -			<online-help>
 -				<index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>
 -				<module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
 -				<module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
 -			</online-help>
 -			<dependencies/>
 -		</extension>
 -	</extension-container>
 -
 -	<asf>
 -		<device-alias-map name="lufa_avr8">
 -			<device-support value="at90usb82"/>
 -			<device-support value="atmega8u2"/>
 -			<device-support value="at90usb162"/>
 -			<device-support value="atmega16u2"/>
 -			<device-support value="atmega16u4"/>
 -			<device-support value="atmega32u2"/>
 -			<device-support value="atmega32u4"/>
 -			<device-support value="at90usb646"/>
 -			<device-support value="at90usb647"/>
 -			<device-support value="at90usb1286"/>
 -			<device-support value="at90usb1287"/>
 -		</device-alias-map>
 -
 -		<device-alias-map name="lufa_xmega">
 -			<device-support value="atxmega16a4u"/>
 -			<device-support value="atxmega32a4u"/>
 -			<device-support value="atxmega64a4u"/>
 -			<device-support value="atxmega128a4u"/>
 -			<device-support value="atxmega64a3u"/>
 -			<device-support value="atxmega128a3u"/>
 -			<device-support value="atxmega192a3u"/>
 -			<device-support value="atxmega256a3u"/>
 -			<device-support value="atxmega256a3bu"/>
 -			<device-support value="atxmega128a1u"/>
 -			<device-support value="atxmega64b3"/>
 -			<device-support value="atxmega128b3"/>
 -			<device-support value="atxmega64b1"/>
 -			<device-support value="atxmega128b1"/>
 -			<device-support value="atxmega64c3"/>
 -			<device-support value="atxmega128c3"/>
 -			<!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->
 -			<device-support value="atxmega256c3"/>
 -			<device-support value="atxmega384c3"/>
 -			<device-support value="atxmega16c4"/>
 -		</device-alias-map>
 -
 -		<device-alias-map name="lufa_uc3">
 -			<device-support value="at32uc3a364"/>
 -			<device-support value="at32uc3a364s"/>
 -			<device-support value="at32uc3a464"/>
 -			<device-support value="at32uc3a464s"/>
 -			<device-support value="at32uc3b064"/>
 -			<device-support value="at32uc3b164"/>
 -			<device-support value="at32uc3a0128"/>
 -			<device-support value="at32uc3a1128"/>
 -			<device-support value="at32uc3a3128"/>
 -			<device-support value="at32uc3a3128s"/>
 -			<device-support value="at32uc3a4128"/>
 -			<device-support value="at32uc3a4128s"/>
 -			<device-support value="at32uc3b0128"/>
 -			<device-support value="at32uc3b1128"/>
 -			<device-support value="at32uc3a0256"/>
 -			<device-support value="at32uc3a1256"/>
 -			<device-support value="at32uc3a3256"/>
 -			<device-support value="at32uc3a3256s"/>
 -			<device-support value="at32uc3a4256"/>
 -			<device-support value="at32uc3a4256s"/>
 -			<device-support value="at32uc3b0256"/>
 -			<device-support value="at32uc3b1256"/>
 -			<device-support value="at32uc3a0512"/>
 -			<device-support value="at32uc3a1512"/>
 -			<device-support value="at32uc3b0512"/>
 -			<device-support value="at32uc3b1512"/>
 -		</device-alias-map>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<extension-container> +		<extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)"> +			<author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/> +			<description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description> +			<icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/> +			<preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/> +			<license caption="LUFA License" path="LUFA/License.txt"/> +			<release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/> +			<online-help> +				<index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/> +				<module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/> +				<module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/> +			</online-help> +			<dependencies/> +		</extension> +	</extension-container> + +	<asf> +		<device-alias-map name="lufa_avr8"> +			<device-support value="at90usb82"/> +			<device-support value="atmega8u2"/> +			<device-support value="at90usb162"/> +			<device-support value="atmega16u2"/> +			<device-support value="atmega16u4"/> +			<device-support value="atmega32u2"/> +			<device-support value="atmega32u4"/> +			<device-support value="at90usb646"/> +			<device-support value="at90usb647"/> +			<device-support value="at90usb1286"/> +			<device-support value="at90usb1287"/> +		</device-alias-map> + +		<device-alias-map name="lufa_xmega"> +			<device-support value="atxmega16a4u"/> +			<device-support value="atxmega32a4u"/> +			<device-support value="atxmega64a4u"/> +			<device-support value="atxmega128a4u"/> +			<device-support value="atxmega64a3u"/> +			<device-support value="atxmega128a3u"/> +			<device-support value="atxmega192a3u"/> +			<device-support value="atxmega256a3u"/> +			<device-support value="atxmega256a3bu"/> +			<device-support value="atxmega128a1u"/> +			<device-support value="atxmega64b3"/> +			<device-support value="atxmega128b3"/> +			<device-support value="atxmega64b1"/> +			<device-support value="atxmega128b1"/> +			<device-support value="atxmega64c3"/> +			<device-support value="atxmega128c3"/> +			<!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling --> +			<device-support value="atxmega256c3"/> +			<device-support value="atxmega384c3"/> +			<device-support value="atxmega16c4"/> +		</device-alias-map> + +		<device-alias-map name="lufa_uc3"> +			<device-support value="at32uc3a364"/> +			<device-support value="at32uc3a364s"/> +			<device-support value="at32uc3a464"/> +			<device-support value="at32uc3a464s"/> +			<device-support value="at32uc3b064"/> +			<device-support value="at32uc3b164"/> +			<device-support value="at32uc3a0128"/> +			<device-support value="at32uc3a1128"/> +			<device-support value="at32uc3a3128"/> +			<device-support value="at32uc3a3128s"/> +			<device-support value="at32uc3a4128"/> +			<device-support value="at32uc3a4128s"/> +			<device-support value="at32uc3b0128"/> +			<device-support value="at32uc3b1128"/> +			<device-support value="at32uc3a0256"/> +			<device-support value="at32uc3a1256"/> +			<device-support value="at32uc3a3256"/> +			<device-support value="at32uc3a3256s"/> +			<device-support value="at32uc3a4256"/> +			<device-support value="at32uc3a4256s"/> +			<device-support value="at32uc3b0256"/> +			<device-support value="at32uc3b1256"/> +			<device-support value="at32uc3a0512"/> +			<device-support value="at32uc3a1512"/> +			<device-support value="at32uc3b0512"/> +			<device-support value="at32uc3b1512"/> +		</device-alias-map> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml index 9e17b188b..c2ef7af4c 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml @@ -1,34 +1,34 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="service" id="lufa.common" caption="LUFA Common Infrastructure">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -			<build type="doxygen-entry-point" value="Group_Common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Version.h"/>
 -			<build type="distribute" subtype="license" value="License.txt"/>
 -
 -			<build type="header-file" subtype="api" value="Common/Common.h"/>
 -			<build type="header-file" value="Common/Architectures.h"/>
 -			<build type="header-file" value="Common/ArchitectureSpecific.h"/>
 -			<build type="header-file" value="Common/Attributes.h"/>
 -			<build type="header-file" value="Common/BoardTypes.h"/>
 -			<build type="header-file" value="Common/CompilerSpecific.h"/>
 -			<build type="header-file" value="Common/Endianness.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="service" id="lufa.common" caption="LUFA Common Infrastructure"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<info type="gui-flag" value="hidden"/> +			<build type="doxygen-entry-point" value="Group_Common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Version.h"/> +			<build type="distribute" subtype="license" value="License.txt"/> + +			<build type="header-file" subtype="api" value="Common/Common.h"/> +			<build type="header-file" value="Common/Architectures.h"/> +			<build type="header-file" value="Common/ArchitectureSpecific.h"/> +			<build type="header-file" value="Common/Attributes.h"/> +			<build type="header-file" value="Common/BoardTypes.h"/> +			<build type="header-file" value="Common/CompilerSpecific.h"/> +			<build type="header-file" value="Common/Endianness.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml index 3677d2003..e150aa645 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml @@ -1,114 +1,114 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">
 -			<device-support value="mega"/>
 -
 -			<require idref="lufa.drivers.board"/>
 -			<require idref="lufa.drivers.board.info"/>
 -		</board>
 -
 -		<board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">
 -			<device-support value="xmega"/>
 -
 -			<require idref="lufa.drivers.board"/>
 -			<require idref="lufa.drivers.board.info"/>
 -		</board>
 -
 -		<board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">
 -			<device-support value="uc3"/>
 -
 -			<require idref="lufa.drivers.board"/>
 -			<require idref="lufa.drivers.board.info"/>
 -		</board>
 -
 -		<module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_BoardInfo"/>
 -
 -			<require idref="lufa.common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/Board.h"/>
 -		</module>
 -
 -		<module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_LEDs"/>
 -
 -			<require idref="lufa.common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/LEDs.h"/>
 -		</module>
 -
 -		<module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_Buttons"/>
 -
 -			<require idref="lufa.common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/Buttons.h"/>
 -		</module>
 -
 -		<module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_Dataflash"/>
 -
 -			<require idref="lufa.common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/Dataflash.h"/>
 -		</module>
 -
 -		<module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_Joystick"/>
 -
 -			<require idref="lufa.common"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/Joystick.h"/>
 -		</module>
 -
 -		<module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_Temperature"/>
 -
 -			<require idref="lufa.common"/>
 -			<require idref="lufa.drivers.peripheral.adc"/>
 -
 -			<build type="c-source"     value="Drivers/Board/Temperature.c"/>
 -			<build type="include-path" value=".."/>
 -			<build type="header-file"  subtype="api" value="Drivers/Board/Temperature.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture"> +			<device-support value="mega"/> + +			<require idref="lufa.drivers.board"/> +			<require idref="lufa.drivers.board.info"/> +		</board> + +		<board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture"> +			<device-support value="xmega"/> + +			<require idref="lufa.drivers.board"/> +			<require idref="lufa.drivers.board.info"/> +		</board> + +		<board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture"> +			<device-support value="uc3"/> + +			<require idref="lufa.drivers.board"/> +			<require idref="lufa.drivers.board.info"/> +		</board> + +		<module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_BoardInfo"/> + +			<require idref="lufa.common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/Board.h"/> +		</module> + +		<module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_LEDs"/> + +			<require idref="lufa.common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/LEDs.h"/> +		</module> + +		<module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_Buttons"/> + +			<require idref="lufa.common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/Buttons.h"/> +		</module> + +		<module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_Dataflash"/> + +			<require idref="lufa.common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/Dataflash.h"/> +		</module> + +		<module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_Joystick"/> + +			<require idref="lufa.common"/> + +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/Joystick.h"/> +		</module> + +		<module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_Temperature"/> + +			<require idref="lufa.common"/> +			<require idref="lufa.drivers.peripheral.adc"/> + +			<build type="c-source"     value="Drivers/Board/Temperature.c"/> +			<build type="include-path" value=".."/> +			<build type="header-file"  subtype="api" value="Drivers/Board/Temperature.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml index 4b099920b..ab7e03e4e 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml @@ -1,853 +1,853 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">
 -			<info type="description" value="summary">
 -				Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards
 -				compatible with the currently selected device will be shown.
 -
 -				To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).
 -			</info>
 -
 -			<module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">
 -				<device-support value="avr"/>
 -				<build type="define" name="BOARD" value="BOARD_NONE"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">
 -				<device-support value="avr"/>
 -				<build type="define" name="BOARD" value="BOARD_USER"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_BENITO"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_BLACKCAT"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>
 -
 -				<device-support value="at90usb646"/>
 -				<build type="define" name="BOARD" value="BOARD_BUI"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_BUMBLEB"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_CULV3"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_DUCE"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_EVK527"/>
 -
 -				<require idref="lufa.drivers.misc.at45db321c"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_JMDBU2"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_LEONARDO"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_MAXIMUS"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>
 -
 -				<device-support value="atmega162"/>
 -				<build type="define" name="BOARD" value="BOARD_MICROSIN162"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_MINIMUS"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_MULTIO"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_OLIMEX162"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>
 -
 -				<device-support value="atmega8u2"/>
 -				<build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<device-support value="at90usb1286"/>
 -				<device-support value="at90usb647"/>
 -				<device-support value="at90usb646"/>
 -				<build type="define" name="BOARD" value="BOARD_STK525"/>
 -
 -				<require idref="lufa.drivers.misc.at45db321c"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>
 -
 -				<device-support value="at90usb162"/>
 -				<device-support value="at90usb82"/>
 -				<device-support value="atmega32u2"/>
 -				<device-support value="atmega16u2"/>
 -				<device-support value="atmega8u2"/>
 -				<build type="define" name="BOARD" value="BOARD_STK526"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_TEENSY"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>
 -
 -				<device-support value="at90usb646"/>
 -				<build type="define" name="BOARD" value="BOARD_TEENSY2"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>
 -
 -				<device-support value="atmega32u4"/>
 -				<build type="define" name="BOARD" value="BOARD_TUL"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_UDIP"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>
 -
 -				<device-support value="atmega8u2"/>
 -				<device-support value="atmega16u2"/>
 -				<build type="define" name="BOARD" value="BOARD_UNO"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_USB2AX"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>
 -
 -				<device-support value="atmega32u2"/>
 -				<build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>
 -
 -				<device-support value="atmega162"/>
 -				<build type="define" name="BOARD" value="BOARD_USBFOO"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>
 -
 -				<device-support value="at90usb1287"/>
 -				<build type="define" name="BOARD" value="BOARD_USBKEY"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>
 -
 -				<device-support value="at90usb162"/>
 -				<build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>
 -
 -				<device-support value="at90usb1287"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>
 -
 -				<device-support value="at90usb1287"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.spi"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_XPLAIN"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>
 -
 -				<device-support value="atxmega256a3bu"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.usart_spi"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>
 -
 -				<device-support value="atxmega128b1"/>
 -
 -				<require idref="lufa.drivers.misc.at45db642d"/>
 -				<require idref="lufa.drivers.peripheral.usart_spi"/>
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.dataflash"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>
 -
 -				<device-support value="at32uc3a0512"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_EVK1100"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>
 -
 -				<device-support value="at32uc3b0256"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.joystick"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_EVK1101"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>
 -
 -				<device-support value="at32uc3a3256"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_EVK1104"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>
 -
 -				<device-support value="at32uc3a3256"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>
 -
 -				<device-support value="at90usb162"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>
 -
 -				<device-support value="atxmega384c3"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>
 -
 -				<device-support value="atmega32u2"/>
 -
 -				<require idref="lufa.drivers.board.buttons"/>
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_U2S"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>
 -
 -				<device-support value="atmega32u4"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_YUN"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">
 -				<build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>
 -
 -				<device-support value="atmega32u4"/>
 -
 -				<require idref="lufa.drivers.board.leds"/>
 -
 -				<build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>
 -				<build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>
 -
 -				<build type="define" name="BOARD" value="BOARD_MICRO"/>
 -			</module>
 -		</select-by-config>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support"> +			<info type="description" value="summary"> +				Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards +				compatible with the currently selected device will be shown. + +				To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual). +			</info> + +			<module type="driver" id="lufa.drivers.board#none" caption="Board Support - None"> +				<device-support value="avr"/> +				<build type="define" name="BOARD" value="BOARD_NONE"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied"> +				<device-support value="avr"/> +				<build type="define" name="BOARD" value="BOARD_USER"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_BENITO"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_BIGMULTIO"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_BLACKCAT"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/> + +				<device-support value="at90usb646"/> +				<build type="define" name="BOARD" value="BOARD_BUI"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_BUMBLEB"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.joystick"/> + +				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_CULV3"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_DUCE"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_EVK527"/> + +				<require idref="lufa.drivers.misc.at45db321c"/> +				<require idref="lufa.drivers.peripheral.spi"/> +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_JMDBU2"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_LEONARDO"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_MAXIMUS"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/> + +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/> + +				<device-support value="atmega162"/> +				<build type="define" name="BOARD" value="BOARD_MICROSIN162"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_MINIMUS"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_MULTIO"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_OLIMEX162"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/> + +				<require idref="lufa.drivers.board.leds"/> +				<require idref="lufa.drivers.board.buttons"/> + +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/> + +				<device-support value="atmega8u2"/> +				<build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/> + +				<device-support value="at90usb1287"/> +				<device-support value="at90usb1286"/> +				<device-support value="at90usb647"/> +				<device-support value="at90usb646"/> +				<build type="define" name="BOARD" value="BOARD_STK525"/> + +				<require idref="lufa.drivers.misc.at45db321c"/> +				<require idref="lufa.drivers.peripheral.spi"/> +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/> + +				<device-support value="at90usb162"/> +				<device-support value="at90usb82"/> +				<device-support value="atmega32u2"/> +				<device-support value="atmega16u2"/> +				<device-support value="atmega8u2"/> +				<build type="define" name="BOARD" value="BOARD_STK526"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.spi"/> +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_TEENSY"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/> + +				<device-support value="at90usb646"/> +				<build type="define" name="BOARD" value="BOARD_TEENSY2"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/> + +				<device-support value="atmega32u4"/> +				<build type="define" name="BOARD" value="BOARD_TUL"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_UDIP"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/> + +				<device-support value="atmega8u2"/> +				<device-support value="atmega16u2"/> +				<build type="define" name="BOARD" value="BOARD_UNO"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_USB2AX"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_USB2AX_V3"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/> + +				<device-support value="atmega32u2"/> +				<build type="define" name="BOARD" value="BOARD_USB2AX_V31"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/> + +				<device-support value="atmega162"/> +				<build type="define" name="BOARD" value="BOARD_USBFOO"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/> + +				<device-support value="at90usb1287"/> +				<build type="define" name="BOARD" value="BOARD_USBKEY"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.spi"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/> + +				<device-support value="at90usb162"/> +				<build type="define" name="BOARD" value="BOARD_USBTINYMKII"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/> + +				<device-support value="at90usb1287"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.spi"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/> + +				<device-support value="at90usb1287"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.spi"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_XPLAIN"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/> + +				<device-support value="atxmega256a3bu"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.usart_spi"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/> + +				<device-support value="atxmega128b1"/> + +				<require idref="lufa.drivers.misc.at45db642d"/> +				<require idref="lufa.drivers.peripheral.usart_spi"/> +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.dataflash"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/> + +				<device-support value="at32uc3a0512"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_EVK1100"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/> + +				<device-support value="at32uc3b0256"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.joystick"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_EVK1101"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/> + +				<device-support value="at32uc3a3256"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_EVK1104"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/> + +				<device-support value="at32uc3a3256"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/> +				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/> + +				<device-support value="at90usb162"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_STANGE_ISP"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/> + +				<device-support value="atxmega384c3"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/> + +				<device-support value="atmega32u2"/> + +				<require idref="lufa.drivers.board.buttons"/> +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_U2S"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/> + +				<device-support value="atmega32u4"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_YUN"/> +			</module> + +			<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO"> +				<build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/> + +				<device-support value="atmega32u4"/> + +				<require idref="lufa.drivers.board.leds"/> + +				<build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/> +				<build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/> + +				<build type="define" name="BOARD" value="BOARD_MICRO"/> +			</module> +		</select-by-config> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml index 8680ca2df..4311ae87b 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml @@ -1,57 +1,57 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_AT45DB321C"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>
 -		</module>
 -
 -		<module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_AT45DB321C"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>
 -		</module>
 -
 -		<module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_RingBuff"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>
 -		</module>
 -
 -		<module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_Terminal"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>
 -		</module>
 -	</asf>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_AT45DB321C"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/> +		</module> + +		<module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_AT45DB321C"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/> +		</module> + +		<module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_RingBuff"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/> +		</module> + +		<module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_Terminal"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/> +		</module> +	</asf>  </lufa>
\ No newline at end of file diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml index 3a982e565..76ea516db 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml @@ -1,198 +1,198 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">
 -			<module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_Serial"/>
 -
 -				<require idref="lufa.common"/>
 -				<require idref="lufa.drivers.misc.ansi"/>
 -
 -				<build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>
 -				<build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="doxygen-entry-point" value="Group_Serial"/>
 -
 -				<require idref="lufa.common"/>
 -				<require idref="lufa.drivers.misc.ansi"/>
 -
 -				<build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>
 -				<build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_Serial"/>
 -
 -				<require idref="lufa.common"/>
 -				<require idref="lufa.drivers.misc.ansi"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -		</select-by-device>
 -
 -		<select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">
 -			<module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -		</select-by-device>
 -
 -		<select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">
 -			<module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SerialSPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api"  value="Drivers/Peripheral/SerialSPI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SerialSPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_SerialSPI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -		</select-by-device>
 -
 -		<select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">
 -			<module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_TWI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>
 -				<build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="doxygen-entry-point" value="Group_TWI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>
 -				<build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_TWI"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -		</select-by-device>
 -
 -		<select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">
 -			<module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_ADC"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="doxygen-entry-point" value="Group_ADC"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_ADC"/>
 -
 -				<require idref="lufa.common"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -			</module>
 -		</select-by-device>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver"> +			<module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="doxygen-entry-point" value="Group_Serial"/> + +				<require idref="lufa.common"/> +				<require idref="lufa.drivers.misc.ansi"/> + +				<build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/> +				<build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="doxygen-entry-point" value="Group_Serial"/> + +				<require idref="lufa.common"/> +				<require idref="lufa.drivers.misc.ansi"/> + +				<build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/> +				<build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="doxygen-entry-point" value="Group_Serial"/> + +				<require idref="lufa.common"/> +				<require idref="lufa.drivers.misc.ansi"/> + +				<info type="gui-flag" value="hidden"/> +			</module> +		</select-by-device> + +		<select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver"> +			<module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="doxygen-entry-point" value="Group_SPI"/> + +				<require idref="lufa.common"/> + +				<build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="doxygen-entry-point" value="Group_SPI"/> + +				<require idref="lufa.common"/> + +				<build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="doxygen-entry-point" value="Group_SPI"/> + +				<require idref="lufa.common"/> + +				<info type="gui-flag" value="hidden"/> +			</module> +		</select-by-device> + +		<select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver"> +			<module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="doxygen-entry-point" value="Group_SerialSPI"/> + +				<require idref="lufa.common"/> + +				<build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api"  value="Drivers/Peripheral/SerialSPI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="doxygen-entry-point" value="Group_SerialSPI"/> + +				<require idref="lufa.common"/> + +				<build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="doxygen-entry-point" value="Group_SerialSPI"/> + +				<require idref="lufa.common"/> + +				<info type="gui-flag" value="hidden"/> +			</module> +		</select-by-device> + +		<select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver"> +			<module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="doxygen-entry-point" value="Group_TWI"/> + +				<require idref="lufa.common"/> + +				<build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/> +				<build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="doxygen-entry-point" value="Group_TWI"/> + +				<require idref="lufa.common"/> + +				<build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/> +				<build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="doxygen-entry-point" value="Group_TWI"/> + +				<require idref="lufa.common"/> + +				<info type="gui-flag" value="hidden"/> +			</module> +		</select-by-device> + +		<select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver"> +			<module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="doxygen-entry-point" value="Group_ADC"/> + +				<require idref="lufa.common"/> + +				<build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/> +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="doxygen-entry-point" value="Group_ADC"/> + +				<require idref="lufa.common"/> + +				<info type="gui-flag" value="hidden"/> +			</module> + +			<module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="doxygen-entry-point" value="Group_ADC"/> + +				<require idref="lufa.common"/> + +				<info type="gui-flag" value="hidden"/> +			</module> +		</select-by-device> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml index 7ff4b3949..263c411df 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml @@ -1,32 +1,32 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_USB"/>
 -
 -			<build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>
 -			<build type="module-config" subtype="path" value="CodeTemplates"/>
 -			<build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>
 -
 -			<build type="include-path" value=".."/>
 -			<build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>
 -
 -			<require idref="lufa.common"/>
 -			<require idref="lufa.drivers.usb.class"/>
 -			<require idref="lufa.drivers.usb.core"/>
 -		</module>
 -	</asf>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_USB"/> + +			<build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/> +			<build type="module-config" subtype="path" value="CodeTemplates"/> +			<build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/> + +			<build type="include-path" value=".."/> +			<build type="header-file" subtype="api" value="Drivers/USB/USB.h"/> + +			<require idref="lufa.common"/> +			<require idref="lufa.drivers.usb.class"/> +			<require idref="lufa.drivers.usb.core"/> +		</module> +	</asf>  </lufa>
\ No newline at end of file diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml index cd18bf10e..67ab760d3 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml @@ -1,32 +1,32 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -			<build type="doxygen-entry-point" value="Group_USBClassDrivers"/>
 -
 -			<require idref="lufa.drivers.usb.class.android"/>
 -			<require idref="lufa.drivers.usb.class.audio"/>
 -			<require idref="lufa.drivers.usb.class.cdc"/>
 -			<require idref="lufa.drivers.usb.class.hid"/>
 -			<require idref="lufa.drivers.usb.class.ms"/>
 -			<require idref="lufa.drivers.usb.class.midi"/>
 -			<require idref="lufa.drivers.usb.class.printer"/>
 -			<require idref="lufa.drivers.usb.class.rndis"/>
 -			<require idref="lufa.drivers.usb.class.si"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<info type="gui-flag" value="hidden"/> +			<build type="doxygen-entry-point" value="Group_USBClassDrivers"/> + +			<require idref="lufa.drivers.usb.class.android"/> +			<require idref="lufa.drivers.usb.class.audio"/> +			<require idref="lufa.drivers.usb.class.cdc"/> +			<require idref="lufa.drivers.usb.class.hid"/> +			<require idref="lufa.drivers.usb.class.ms"/> +			<require idref="lufa.drivers.usb.class.midi"/> +			<require idref="lufa.drivers.usb.class.printer"/> +			<require idref="lufa.drivers.usb.class.rndis"/> +			<require idref="lufa.drivers.usb.class.si"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml index 58f8917ef..58a0b388f 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml @@ -1,85 +1,85 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">
 -			<device-support-alias value="lufa_avr8"/>
 -			<device-support-alias value="lufa_xmega"/>
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<build type="doxygen-entry-point" value="Group_USBManagement"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="header-file" value="Drivers/USB/Core/Device.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/Host.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/Pipe.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/OTG.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/USBController.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>
 -	        <build type="c-source"    value="Drivers/USB/Core/ConfigDescriptors.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>
 -	        <build type="c-source"    value="Drivers/USB/Core/DeviceStandardReq.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>
 -	        <build type="c-source"    value="Drivers/USB/Core/Events.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/Events.h"/>
 -	        <build type="c-source"    value="Drivers/USB/Core/HostStandardReq.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>
 -	        <build type="c-source"    value="Drivers/USB/Core/USBTask.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/USBTask.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/USBMode.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>
 -
 -	        <build type="c-source"    value="Drivers/USB/Class/Common/HIDParser.c"/>
 -	        <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>
 -	        <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>
 -	    </module>
 -
 -		<select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">
 -			<module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -
 -				<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
 -
 -				<require idref="lufa.drivers.usb.core.common"/>
 -				<require idref="lufa.drivers.usb.core.avr8"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -
 -				<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
 -
 -				<require idref="lufa.drivers.usb.core.common"/>
 -				<require idref="lufa.drivers.usb.core.xmega"/>
 -			</module>
 -
 -			<module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<info type="gui-flag" value="hidden"/>
 -
 -				<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
 -
 -				<require idref="lufa.drivers.usb.core.common"/>
 -				<require idref="lufa.drivers.usb.core.uc3"/>
 -			</module>
 -		</select-by-device>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common"> +			<device-support-alias value="lufa_avr8"/> +			<device-support-alias value="lufa_xmega"/> +			<device-support-alias value="lufa_uc3"/> + +			<build type="doxygen-entry-point" value="Group_USBManagement"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="header-file" value="Drivers/USB/Core/Device.h"/> +			<build type="header-file" value="Drivers/USB/Core/Endpoint.h"/> +			<build type="header-file" value="Drivers/USB/Core/Host.h"/> +			<build type="header-file" value="Drivers/USB/Core/Pipe.h"/> +			<build type="header-file" value="Drivers/USB/Core/OTG.h"/> +			<build type="header-file" value="Drivers/USB/Core/USBController.h"/> +			<build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/> +			<build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/> +			<build type="header-file" value="Drivers/USB/Core/PipeStream.h"/> +	        <build type="c-source"    value="Drivers/USB/Core/ConfigDescriptors.c"/> +			<build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/> +	        <build type="c-source"    value="Drivers/USB/Core/DeviceStandardReq.c"/> +			<build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/> +	        <build type="c-source"    value="Drivers/USB/Core/Events.c"/> +			<build type="header-file" value="Drivers/USB/Core/Events.h"/> +	        <build type="c-source"    value="Drivers/USB/Core/HostStandardReq.c"/> +			<build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/> +	        <build type="c-source"    value="Drivers/USB/Core/USBTask.c"/> +			<build type="header-file" value="Drivers/USB/Core/USBTask.h"/> +			<build type="header-file" value="Drivers/USB/Core/USBMode.h"/> +			<build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/> +			<build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/> + +	        <build type="c-source"    value="Drivers/USB/Class/Common/HIDParser.c"/> +	        <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/> +	        <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/> +	    </module> + +		<select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver"> +			<module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<info type="gui-flag" value="hidden"/> + +				<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/> + +				<require idref="lufa.drivers.usb.core.common"/> +				<require idref="lufa.drivers.usb.core.avr8"/> +			</module> + +			<module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<info type="gui-flag" value="hidden"/> + +				<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/> + +				<require idref="lufa.drivers.usb.core.common"/> +				<require idref="lufa.drivers.usb.core.xmega"/> +			</module> + +			<module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<info type="gui-flag" value="hidden"/> + +				<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/> + +				<require idref="lufa.drivers.usb.core.common"/> +				<require idref="lufa.drivers.usb.core.uc3"/> +			</module> +		</select-by-device> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml index 166b9257a..4688f05f9 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml @@ -1,43 +1,43 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">
 -			<device-support-alias value="lufa_avr8"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
 -
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8"> +			<device-support-alias value="lufa_avr8"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/> + +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Device_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Host_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/> +			<build type="c-source"    value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/> +			<build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml index 7e0540cda..2e7185f24 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml @@ -1,42 +1,42 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
 -
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Device_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Host_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/USBController_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3"> +			<device-support-alias value="lufa_uc3"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/> + +			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Device_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Host_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/Pipe_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/USBController_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/> +			<build type="c-source"    value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/> +			<build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml index 9e9f4f6a1..c79a0f5b5 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml @@ -1,36 +1,36 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">
 -			<device-support-alias value="lufa_xmega"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
 -
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>
 -			<build type="c-source"    value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>
 -			<build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA"> +			<device-support-alias value="lufa_xmega"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/> + +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/> +			<build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/> +			<build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/> +			<build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/> +			<build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/> +			<build type="c-source"    value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/> +			<build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml index 02c7463ee..4ee51f6ee 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml @@ -1,60 +1,60 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">
 -			<module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">
 -				<device-support-alias value="lufa_avr8"/>
 -
 -				<build type="define" name="ARCH" value="ARCH_AVR8"/>
 -
 -				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
 -
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Platform/Platform.h"/>
 -
 -				<require idref="lufa.common"/>
 -			</module>
 -
 -			<module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">
 -				<device-support-alias value="lufa_xmega"/>
 -
 -				<build type="define" name="ARCH" value="ARCH_XMEGA"/>
 -
 -				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
 -
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Platform/Platform.h"/>
 -
 -				<build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>
 -
 -				<require idref="lufa.platform.xmega"/>
 -				<require idref="lufa.common"/>
 -			</module>
 -
 -			<module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">
 -				<device-support-alias value="lufa_uc3"/>
 -
 -				<build type="define" name="ARCH" value="ARCH_UC3"/>
 -
 -				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
 -
 -				<build type="include-path" value=".."/>
 -				<build type="header-file" subtype="api" value="Platform/Platform.h"/>
 -
 -				<build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>
 -
 -				<require idref="lufa.platform.uc3"/>
 -				<require idref="lufa.common"/>
 -			</module>
 -		</select-by-device>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<select-by-device id="lufa.platform" caption="LUFA Platform Specific Support"> +			<module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8"> +				<device-support-alias value="lufa_avr8"/> + +				<build type="define" name="ARCH" value="ARCH_AVR8"/> + +				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> + +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Platform/Platform.h"/> + +				<require idref="lufa.common"/> +			</module> + +			<module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA"> +				<device-support-alias value="lufa_xmega"/> + +				<build type="define" name="ARCH" value="ARCH_XMEGA"/> + +				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> + +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Platform/Platform.h"/> + +				<build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/> + +				<require idref="lufa.platform.xmega"/> +				<require idref="lufa.common"/> +			</module> + +			<module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3"> +				<device-support-alias value="lufa_uc3"/> + +				<build type="define" name="ARCH" value="ARCH_UC3"/> + +				<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> + +				<build type="include-path" value=".."/> +				<build type="header-file" subtype="api" value="Platform/Platform.h"/> + +				<build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/> + +				<require idref="lufa.platform.uc3"/> +				<require idref="lufa.common"/> +			</module> +		</select-by-device> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml index a488c4b83..98017b08a 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml @@ -1,26 +1,26 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">
 -			<device-support-alias value="lufa_uc3"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>
 -
 -			<build type="header-file" value="Platform/UC3/ClockManagement.h"/>
 -			<build type="header-file" value="Platform/UC3/InterruptManagement.h"/>
 -			<build type="c-source" value="Platform/UC3/InterruptManagement.c"/>
 -			<build type="asm-source" value="Platform/UC3/Exception.S"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers"> +			<device-support-alias value="lufa_uc3"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/> + +			<build type="header-file" value="Platform/UC3/ClockManagement.h"/> +			<build type="header-file" value="Platform/UC3/InterruptManagement.h"/> +			<build type="c-source" value="Platform/UC3/InterruptManagement.c"/> +			<build type="asm-source" value="Platform/UC3/Exception.S"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml index 1674a77b0..e613fe520 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml @@ -1,23 +1,23 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf xmlversion="1.0">
 -		<module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">
 -			<device-support-alias value="lufa_xmega"/>
 -
 -			<info type="gui-flag" value="hidden"/>
 -
 -			<build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>
 -
 -			<build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf xmlversion="1.0"> +		<module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers"> +			<device-support-alias value="lufa_xmega"/> + +			<info type="gui-flag" value="hidden"/> + +			<build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/> + +			<build type="header-file" value="Platform/XMEGA/ClockManagement.h"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml index 031c8a2be..a76b6d0d3 100644 --- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml +++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml @@ -1,43 +1,43 @@ -<!--
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2013.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 --->
 -
 -<!-- Atmel Studio framework integration file -->
 -
 -<lufa>
 -	<asf>
 -		<select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">
 -			<module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">
 -				<info type="gui-flag" value="hidden"/>
 -				<device-support value="avr"/>
 -
 -				<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>
 -				<toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>
 -			</module>
 -		</select-by-device>
 -
 -		<module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">
 -			<info type="gui-flag" value="hidden"/>
 -			<device-support value="uc3"/>
 -
 -			<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>
 -			<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>
 -			<toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>
 -		</module>
 -	</asf>
 -</lufa>
 +<!-- +             LUFA Library +     Copyright (C) Dean Camera, 2013. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +--> + +<!-- Atmel Studio framework integration file --> + +<lufa> +	<asf> +		<select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults"> +			<module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR"> +				<info type="gui-flag" value="hidden"/> +				<device-support value="avr"/> + +				<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/> +				<toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/> +			</module> +		</select-by-device> + +		<module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR"> +			<info type="gui-flag" value="hidden"/> +			<device-support value="uc3"/> + +			<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/> +			<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/> +			<toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/> +		</module> +	</asf> +</lufa> diff --git a/tmk_core/protocol/lufa/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp new file mode 100644 index 000000000..fd6edd42c --- /dev/null +++ b/tmk_core/protocol/lufa/adafruit_ble.cpp @@ -0,0 +1,805 @@ +#include "adafruit_ble.h" +#include <stdio.h> +#include <stdlib.h> +#include <alloca.h> +#include <util/delay.h> +#include <util/atomic.h> +#include "debug.h" +#include "pincontrol.h" +#include "timer.h" +#include "action_util.h" +#include "ringbuffer.hpp" +#include <string.h> + +// These are the pin assignments for the 32u4 boards. +// You may define them to something else in your config.h +// if yours is wired up differently. +#ifndef AdafruitBleResetPin +#define AdafruitBleResetPin D4 +#endif + +#ifndef AdafruitBleCSPin +#define AdafruitBleCSPin    B4 +#endif + +#ifndef AdafruitBleIRQPin +#define AdafruitBleIRQPin   E6 +#endif + + +#define SAMPLE_BATTERY +#define ConnectionUpdateInterval 1000 /* milliseconds */ + +static struct { +  bool is_connected; +  bool initialized; +  bool configured; + +#define ProbedEvents 1 +#define UsingEvents 2 +  bool event_flags; + +#ifdef SAMPLE_BATTERY +  uint16_t last_battery_update; +  uint32_t vbat; +#endif +  uint16_t last_connection_update; +} state; + +// Commands are encoded using SDEP and sent via SPI +// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md + +#define SdepMaxPayload 16 +struct sdep_msg { +  uint8_t type; +  uint8_t cmd_low; +  uint8_t cmd_high; +  struct __attribute__((packed)) { +    uint8_t len:7; +    uint8_t more:1; +  }; +  uint8_t payload[SdepMaxPayload]; +} __attribute__((packed)); + +// The recv latency is relatively high, so when we're hammering keys quickly, +// we want to avoid waiting for the responses in the matrix loop.  We maintain +// a short queue for that.  Since there is quite a lot of space overhead for +// the AT command representation wrapped up in SDEP, we queue the minimal +// information here. + +enum queue_type { +  QTKeyReport, // 1-byte modifier + 6-byte key report +  QTConsumer,  // 16-bit key code +#ifdef MOUSE_ENABLE +  QTMouseMove, // 4-byte mouse report +#endif +}; + +struct queue_item { +  enum queue_type queue_type; +  uint16_t added; +  union __attribute__((packed)) { +    struct __attribute__((packed)) { +      uint8_t modifier; +      uint8_t keys[6]; +    } key; + +    uint16_t consumer; +    struct __attribute__((packed)) { +      int8_t x, y, scroll, pan; +    } mousemove; +  }; +}; + +// Items that we wish to send +static RingBuffer<queue_item, 40> send_buf; +// Pending response; while pending, we can't send any more requests. +// This records the time at which we sent the command for which we +// are expecting a response. +static RingBuffer<uint16_t, 2> resp_buf; + +static bool process_queue_item(struct queue_item *item, uint16_t timeout); + +enum sdep_type { +  SdepCommand = 0x10, +  SdepResponse = 0x20, +  SdepAlert = 0x40, +  SdepError = 0x80, +  SdepSlaveNotReady = 0xfe, // Try again later +  SdepSlaveOverflow = 0xff, // You read more data than is available +}; + +enum ble_cmd { +  BleInitialize = 0xbeef, +  BleAtWrapper = 0x0a00, +  BleUartTx = 0x0a01, +  BleUartRx = 0x0a02, +}; + +enum ble_system_event_bits { +  BleSystemConnected = 0, +  BleSystemDisconnected = 1, +  BleSystemUartRx = 8, +  BleSystemMidiRx = 10, +}; + +// The SDEP.md file says 2MHz but the web page and the sample driver +// both use 4MHz +#define SpiBusSpeed 4000000 + +#define SdepTimeout 150 /* milliseconds */ +#define SdepShortTimeout 10 /* milliseconds */ +#define SdepBackOff 25 /* microseconds */ +#define BatteryUpdateInterval 10000 /* milliseconds */ + +static bool at_command(const char *cmd, char *resp, uint16_t resplen, +                       bool verbose, uint16_t timeout = SdepTimeout); +static bool at_command_P(const char *cmd, char *resp, uint16_t resplen, +                         bool verbose = false); + +struct SPI_Settings { +  uint8_t spcr, spsr; +}; + +static struct SPI_Settings spi; + +// Initialize 4Mhz MSBFIRST MODE0 +void SPI_init(struct SPI_Settings *spi) { +  spi->spcr = _BV(SPE) | _BV(MSTR); +  spi->spsr = _BV(SPI2X); + +  static_assert(SpiBusSpeed == F_CPU / 2, "hard coded at 4Mhz"); + +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +    // Ensure that SS is OUTPUT High +    digitalWrite(B0, PinLevelHigh); +    pinMode(B0, PinDirectionOutput); + +    SPCR |= _BV(MSTR); +    SPCR |= _BV(SPE); +    pinMode(B1 /* SCK */, PinDirectionOutput); +    pinMode(B2 /* MOSI */, PinDirectionOutput); +  } +} + +static inline void SPI_begin(struct SPI_Settings*spi) { +  SPCR = spi->spcr; +  SPSR = spi->spsr; +} + +static inline uint8_t SPI_TransferByte(uint8_t data) { +  SPDR = data; +  asm volatile("nop"); +  while (!(SPSR & _BV(SPIF))) { +    ; // wait +  } +  return SPDR; +} + +static inline void spi_send_bytes(const uint8_t *buf, uint8_t len) { +  if (len == 0) return; +  const uint8_t *end = buf + len; +  while (buf < end) { +    SPDR = *buf; +    while (!(SPSR & _BV(SPIF))) { +      ; // wait +    } +    ++buf; +  } +} + +static inline uint16_t spi_read_byte(void) { +  return SPI_TransferByte(0x00 /* dummy */); +} + +static inline void spi_recv_bytes(uint8_t *buf, uint8_t len) { +  const uint8_t *end = buf + len; +  if (len == 0) return; +  while (buf < end) { +    SPDR = 0; // write a dummy to initiate read +    while (!(SPSR & _BV(SPIF))) { +      ; // wait +    } +    *buf = SPDR; +    ++buf; +  } +} + +#if 0 +static void dump_pkt(const struct sdep_msg *msg) { +  print("pkt: type="); +  print_hex8(msg->type); +  print(" cmd="); +  print_hex8(msg->cmd_high); +  print_hex8(msg->cmd_low); +  print(" len="); +  print_hex8(msg->len); +  print(" more="); +  print_hex8(msg->more); +  print("\n"); +} +#endif + +// Send a single SDEP packet +static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) { +  SPI_begin(&spi); + +  digitalWrite(AdafruitBleCSPin, PinLevelLow); +  uint16_t timerStart = timer_read(); +  bool success = false; +  bool ready = false; + +  do { +    ready = SPI_TransferByte(msg->type) != SdepSlaveNotReady; +    if (ready) { +      break; +    } + +    // Release it and let it initialize +    digitalWrite(AdafruitBleCSPin, PinLevelHigh); +    _delay_us(SdepBackOff); +    digitalWrite(AdafruitBleCSPin, PinLevelLow); +  } while (timer_elapsed(timerStart) < timeout); + +  if (ready) { +    // Slave is ready; send the rest of the packet +    spi_send_bytes(&msg->cmd_low, +                   sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len); +    success = true; +  } + +  digitalWrite(AdafruitBleCSPin, PinLevelHigh); + +  return success; +} + +static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command, +                                  const uint8_t *payload, uint8_t len, +                                  bool moredata) { +  msg->type = SdepCommand; +  msg->cmd_low = command & 0xff; +  msg->cmd_high = command >> 8; +  msg->len = len; +  msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0; + +  static_assert(sizeof(*msg) == 20, "msg is correctly packed"); + +  memcpy(msg->payload, payload, len); +} + +// Read a single SDEP packet +static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) { +  bool success = false; +  uint16_t timerStart = timer_read(); +  bool ready = false; + +  do { +    ready = digitalRead(AdafruitBleIRQPin); +    if (ready) { +      break; +    } +    _delay_us(1); +  } while (timer_elapsed(timerStart) < timeout); + +  if (ready) { +    SPI_begin(&spi); + +    digitalWrite(AdafruitBleCSPin, PinLevelLow); + +    do { +      // Read the command type, waiting for the data to be ready +      msg->type = spi_read_byte(); +      if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) { +        // Release it and let it initialize +        digitalWrite(AdafruitBleCSPin, PinLevelHigh); +        _delay_us(SdepBackOff); +        digitalWrite(AdafruitBleCSPin, PinLevelLow); +        continue; +      } + +      // Read the rest of the header +      spi_recv_bytes(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload))); + +      // and get the payload if there is any +      if (msg->len <= SdepMaxPayload) { +        spi_recv_bytes(msg->payload, msg->len); +      } +      success = true; +      break; +    } while (timer_elapsed(timerStart) < timeout); + +    digitalWrite(AdafruitBleCSPin, PinLevelHigh); +  } +  return success; +} + +static void resp_buf_read_one(bool greedy) { +  uint16_t last_send; +  if (!resp_buf.peek(last_send)) { +    return; +  } + +  if (digitalRead(AdafruitBleIRQPin)) { +    struct sdep_msg msg; + +again: +    if (sdep_recv_pkt(&msg, SdepTimeout)) { +      if (!msg.more) { +        // We got it; consume this entry +        resp_buf.get(last_send); +        dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send)); +      } + +      if (greedy && resp_buf.peek(last_send) && digitalRead(AdafruitBleIRQPin)) { +        goto again; +      } +    } + +  } else if (timer_elapsed(last_send) > SdepTimeout * 2) { +    dprintf("waiting_for_result: timeout, resp_buf size %d\n", +            (int)resp_buf.size()); + +    // Timed out: consume this entry +    resp_buf.get(last_send); +  } +} + +static void send_buf_send_one(uint16_t timeout = SdepTimeout) { +  struct queue_item item; + +  // Don't send anything more until we get an ACK +  if (!resp_buf.empty()) { +    return; +  } + +  if (!send_buf.peek(item)) { +    return; +  } +  if (process_queue_item(&item, timeout)) { +    // commit that peek +    send_buf.get(item); +    dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size()); +  } else { +    dprint("failed to send, will retry\n"); +    _delay_ms(SdepTimeout); +    resp_buf_read_one(true); +  } +} + +static void resp_buf_wait(const char *cmd) { +  bool didPrint = false; +  while (!resp_buf.empty()) { +    if (!didPrint) { +      dprintf("wait on buf for %s\n", cmd); +      didPrint = true; +    } +    resp_buf_read_one(true); +  } +} + +static bool ble_init(void) { +  state.initialized = false; +  state.configured = false; +  state.is_connected = false; + +  pinMode(AdafruitBleIRQPin, PinDirectionInput); +  pinMode(AdafruitBleCSPin, PinDirectionOutput); +  digitalWrite(AdafruitBleCSPin, PinLevelHigh); + +  SPI_init(&spi); + +  // Perform a hardware reset +  pinMode(AdafruitBleResetPin, PinDirectionOutput); +  digitalWrite(AdafruitBleResetPin, PinLevelHigh); +  digitalWrite(AdafruitBleResetPin, PinLevelLow); +  _delay_ms(10); +  digitalWrite(AdafruitBleResetPin, PinLevelHigh); + +  _delay_ms(1000); // Give it a second to initialize + +  state.initialized = true; +  return state.initialized; +} + +static inline uint8_t min(uint8_t a, uint8_t b) { +  return a < b ? a : b; +} + +static bool read_response(char *resp, uint16_t resplen, bool verbose) { +  char *dest = resp; +  char *end = dest + resplen; + +  while (true) { +    struct sdep_msg msg; + +    if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) { +      dprint("sdep_recv_pkt failed\n"); +      return false; +    } + +    if (msg.type != SdepResponse) { +      *resp = 0; +      return false; +    } + +    uint8_t len = min(msg.len, end - dest); +    if (len > 0) { +      memcpy(dest, msg.payload, len); +      dest += len; +    } + +    if (!msg.more) { +      // No more data is expected! +      break; +    } +  } + +  // Ensure the response is NUL terminated +  *dest = 0; + +  // "Parse" the result text; we want to snip off the trailing OK or ERROR line +  // Rewind past the possible trailing CRLF so that we can strip it +  --dest; +  while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) { +    *dest = 0; +    --dest; +  } + +  // Look back for start of preceeding line +  char *last_line = strrchr(resp, '\n'); +  if (last_line) { +    ++last_line; +  } else { +    last_line = resp; +  } + +  bool success = false; +  static const char kOK[] PROGMEM = "OK"; + +  success = !strcmp_P(last_line, kOK ); + +  if (verbose || !success) { +    dprintf("result: %s\n", resp); +  } +  return success; +} + +static bool at_command(const char *cmd, char *resp, uint16_t resplen, +                       bool verbose, uint16_t timeout) { +  const char *end = cmd + strlen(cmd); +  struct sdep_msg msg; + +  if (verbose) { +    dprintf("ble send: %s\n", cmd); +  } + +  if (resp) { +    // They want to decode the response, so we need to flush and wait +    // for all pending I/O to finish before we start this one, so +    // that we don't confuse the results +    resp_buf_wait(cmd); +    *resp = 0; +  } + +  // Fragment the command into a series of SDEP packets +  while (end - cmd > SdepMaxPayload) { +    sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true); +    if (!sdep_send_pkt(&msg, timeout)) { +      return false; +    } +    cmd += SdepMaxPayload; +  } + +  sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false); +  if (!sdep_send_pkt(&msg, timeout)) { +    return false; +  } + +  if (resp == NULL) { +    auto now = timer_read(); +    while (!resp_buf.enqueue(now)) { +      resp_buf_read_one(false); +    } +    auto later = timer_read(); +    if (TIMER_DIFF_16(later, now) > 0) { +      dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now)); +    } +    return true; +  } + +  return read_response(resp, resplen, verbose); +} + +bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) { +  auto cmdbuf = (char *)alloca(strlen_P(cmd) + 1); +  strcpy_P(cmdbuf, cmd); +  return at_command(cmdbuf, resp, resplen, verbose); +} + +bool adafruit_ble_is_connected(void) { +  return state.is_connected; +} + +bool adafruit_ble_enable_keyboard(void) { +  char resbuf[128]; + +  if (!state.initialized && !ble_init()) { +    return false; +  } + +  state.configured = false; + +  // Disable command echo +  static const char kEcho[] PROGMEM = "ATE=0"; +  // Make the advertised name match the keyboard +  static const char kGapDevName[] PROGMEM = +      "AT+GAPDEVNAME=" STR(PRODUCT) " " STR(DESCRIPTION); +  // Turn on keyboard support +  static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1"; + +  // Adjust intervals to improve latency.  This causes the "central" +  // system (computer/tablet) to poll us every 10-30 ms.  We can't +  // set a smaller value than 10ms, and 30ms seems to be the natural +  // processing time on my macbook.  Keeping it constrained to that +  // feels reasonable to type to. +  static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,"; + +  // Reset the device so that it picks up the above changes +  static const char kATZ[] PROGMEM = "ATZ"; + +  // Turn down the power level a bit +  static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12"; +  static PGM_P const configure_commands[] PROGMEM = { +    kEcho, +    kGapIntervals, +    kGapDevName, +    kHidEnOn, +    kPower, +    kATZ, +  }; + +  uint8_t i; +  for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]); +       ++i) { +    PGM_P cmd; +    memcpy_P(&cmd, configure_commands + i, sizeof(cmd)); + +    if (!at_command_P(cmd, resbuf, sizeof(resbuf))) { +      dprintf("failed BLE command: %S: %s\n", cmd, resbuf); +      goto fail; +    } +  } + +  state.configured = true; + +  // Check connection status in a little while; allow the ATZ time +  // to kick in. +  state.last_connection_update = timer_read(); +fail: +  return state.configured; +} + +static void set_connected(bool connected) { +  if (connected != state.is_connected) { +    if (connected) { +      print("****** BLE CONNECT!!!!\n"); +    } else { +      print("****** BLE DISCONNECT!!!!\n"); +    } +    state.is_connected = connected; + +    // TODO: if modifiers are down on the USB interface and +    // we cut over to BLE or vice versa, they will remain stuck. +    // This feels like a good point to do something like clearing +    // the keyboard and/or generating a fake all keys up message. +    // However, I've noticed that it takes a couple of seconds +    // for macOS to to start recognizing key presses after BLE +    // is in the connected state, so I worry that doing that +    // here may not be good enough. +  } +} + +void adafruit_ble_task(void) { +  char resbuf[48]; + +  if (!state.configured && !adafruit_ble_enable_keyboard()) { +    return; +  } +  resp_buf_read_one(true); +  send_buf_send_one(SdepShortTimeout); + +  if (resp_buf.empty() && (state.event_flags & UsingEvents) && +      digitalRead(AdafruitBleIRQPin)) { +    // Must be an event update +    if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) { +      uint32_t mask = strtoul(resbuf, NULL, 16); + +      if (mask & BleSystemConnected) { +        set_connected(true); +      } else if (mask & BleSystemDisconnected) { +        set_connected(false); +      } +    } +  } + +  if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) { +    bool shouldPoll = true; +    if (!(state.event_flags & ProbedEvents)) { +      // Request notifications about connection status changes. +      // This only works in SPIFRIEND firmware > 0.6.7, which is why +      // we check for this conditionally here. +      // Note that at the time of writing, HID reports only work correctly +      // with Apple products on firmware version 0.6.7! +      // https://forums.adafruit.com/viewtopic.php?f=8&t=104052 +      if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) { +        at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf)); +        state.event_flags |= UsingEvents; +      } +      state.event_flags |= ProbedEvents; + +      // leave shouldPoll == true so that we check at least once +      // before relying solely on events +    } else { +      shouldPoll = false; +    } + +    static const char kGetConn[] PROGMEM = "AT+GAPGETCONN"; +    state.last_connection_update = timer_read(); + +    if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) { +      set_connected(atoi(resbuf)); +    } +  } + +#ifdef SAMPLE_BATTERY +  // I don't know if this really does anything useful yet; the reported +  // voltage level always seems to be around 3200mV.  We may want to just rip +  // this code out. +  if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval && +      resp_buf.empty()) { +    state.last_battery_update = timer_read(); + +    if (at_command_P(PSTR("AT+HWVBAT"), resbuf, sizeof(resbuf))) { +      state.vbat = atoi(resbuf); +    } +  } +#endif +} + +static bool process_queue_item(struct queue_item *item, uint16_t timeout) { +  char cmdbuf[48]; +  char fmtbuf[64]; + +  // Arrange to re-check connection after keys have settled +  state.last_connection_update = timer_read(); + +#if 1 +  if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) { +    dprintf("send latency %dms\n", +            TIMER_DIFF_16(state.last_connection_update, item->added)); +  } +#endif + +  switch (item->queue_type) { +    case QTKeyReport: +      strcpy_P(fmtbuf, +          PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x")); +      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier, +               item->key.keys[0], item->key.keys[1], item->key.keys[2], +               item->key.keys[3], item->key.keys[4], item->key.keys[5]); +      return at_command(cmdbuf, NULL, 0, true, timeout); + +    case QTConsumer: +      strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x")); +      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer); +      return at_command(cmdbuf, NULL, 0, true, timeout); + +#ifdef MOUSE_ENABLE +    case QTMouseMove: +      strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d")); +      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x, +          item->mousemove.y, item->mousemove.scroll, item->mousemove.pan); +      return at_command(cmdbuf, NULL, 0, true, timeout); +#endif +    default: +      return true; +  } +} + +bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, +                            uint8_t nkeys) { +  struct queue_item item; +  bool didWait = false; + +  item.queue_type = QTKeyReport; +  item.key.modifier = hid_modifier_mask; +  item.added = timer_read(); + +  while (nkeys >= 0) { +    item.key.keys[0] = keys[0]; +    item.key.keys[1] = nkeys >= 1 ? keys[1] : 0; +    item.key.keys[2] = nkeys >= 2 ? keys[2] : 0; +    item.key.keys[3] = nkeys >= 3 ? keys[3] : 0; +    item.key.keys[4] = nkeys >= 4 ? keys[4] : 0; +    item.key.keys[5] = nkeys >= 5 ? keys[5] : 0; + +    if (!send_buf.enqueue(item)) { +      if (!didWait) { +        dprint("wait for buf space\n"); +        didWait = true; +      } +      send_buf_send_one(); +      continue; +    } + +    if (nkeys <= 6) { +      return true; +    } + +    nkeys -= 6; +    keys += 6; +  } + +  return true; +} + +bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) { +  struct queue_item item; + +  item.queue_type = QTConsumer; +  item.consumer = keycode; + +  while (!send_buf.enqueue(item)) { +    send_buf_send_one(); +  } +  return true; +} + +#ifdef MOUSE_ENABLE +bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, +                                  int8_t pan) { +  struct queue_item item; + +  item.queue_type = QTMouseMove; +  item.mousemove.x = x; +  item.mousemove.y = y; +  item.mousemove.scroll = scroll; +  item.mousemove.pan = pan; + +  while (!send_buf.enqueue(item)) { +    send_buf_send_one(); +  } +  return true; +} +#endif + +uint32_t adafruit_ble_read_battery_voltage(void) { +  return state.vbat; +} + +bool adafruit_ble_set_mode_leds(bool on) { +  if (!state.configured) { +    return false; +  } + +  // The "mode" led is the red blinky one +  at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0); + +  // Pin 19 is the blue "connected" LED; turn that off too. +  // When turning LEDs back on, don't turn that LED on if we're +  // not connected, as that would be confusing. +  at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1") +                                        : PSTR("AT+HWGPIO=19,0"), +               NULL, 0); +  return true; +} + +// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel +bool adafruit_ble_set_power_level(int8_t level) { +  char cmd[46]; +  if (!state.configured) { +    return false; +  } +  snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level); +  return at_command(cmd, NULL, 0, false); +} diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h new file mode 100644 index 000000000..351fd55ae --- /dev/null +++ b/tmk_core/protocol/lufa/adafruit_ble.h @@ -0,0 +1,60 @@ +/* Bluetooth Low Energy Protocol for QMK. + * Author: Wez Furlong, 2016 + * Supports the Adafruit BLE board built around the nRF51822 chip. + */ +#pragma once +#ifdef ADAFRUIT_BLE_ENABLE +#include <stdbool.h> +#include <stdint.h> +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Instruct the module to enable HID keyboard support and reset */ +extern bool adafruit_ble_enable_keyboard(void); + +/* Query to see if the BLE module is connected */ +extern bool adafruit_ble_query_is_connected(void); + +/* Returns true if we believe that the BLE module is connected. + * This uses our cached understanding that is maintained by + * calling ble_task() periodically. */ +extern bool adafruit_ble_is_connected(void); + +/* Call this periodically to process BLE-originated things */ +extern void adafruit_ble_task(void); + +/* Generates keypress events for a set of keys. + * The hid modifier mask specifies the state of the modifier keys for + * this set of keys. + * Also sends a key release indicator, so that the keys do not remain + * held down. */ +extern bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, +                                   uint8_t nkeys); + +/* Send a consumer keycode, holding it down for the specified duration + * (milliseconds) */ +extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration); + +#ifdef MOUSE_ENABLE +/* Send a mouse/wheel movement report. + * The parameters are signed and indicate positive of negative direction + * change. */ +extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, +                                         int8_t pan); +#endif + +/* Compute battery voltage by reading an analog pin. + * Returns the integer number of millivolts */ +extern uint32_t adafruit_ble_read_battery_voltage(void); + +extern bool adafruit_ble_set_mode_leds(bool on); +extern bool adafruit_ble_set_power_level(int8_t level); + +#ifdef __cplusplus +} +#endif + +#endif // ADAFRUIT_BLE_ENABLE diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 850a20fdb..feeea76df 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -40,6 +40,9 @@  #include "report.h"  #include "descriptor.h" +#ifndef USB_MAX_POWER_CONSUMPTION +#define USB_MAX_POWER_CONSUMPTION 500 +#endif  /*******************************************************************************   * HID Report Descriptors @@ -141,9 +144,9 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =      HID_RI_COLLECTION(8, 0x01), /* Application */          HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),          HID_RI_LOGICAL_MINIMUM(16, 0x0001), -        HID_RI_LOGICAL_MAXIMUM(16, 0x00B7), -        HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */ -        HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */ +        HID_RI_LOGICAL_MAXIMUM(16, 0x0003), +        HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */ +        HID_RI_USAGE_MAXIMUM(16, 0x0083), /* System Wake Up */          HID_RI_REPORT_SIZE(8, 16),          HID_RI_REPORT_COUNT(8, 1),          HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), @@ -164,6 +167,28 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =  };  #endif +#ifdef RAW_ENABLE +const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = +{ +    HID_RI_USAGE_PAGE(16, 0xFF60), /* Vendor Page 0xFF60 */ +    HID_RI_USAGE(8, 0x61), /* Vendor Usage 0x61 */ +    HID_RI_COLLECTION(8, 0x01), /* Application */ +        HID_RI_USAGE(8, 0x62), /* Vendor Usage 0x62 */ +        HID_RI_LOGICAL_MINIMUM(8, 0x00), +        HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), +        HID_RI_REPORT_COUNT(8, RAW_EPSIZE), +        HID_RI_REPORT_SIZE(8, 0x08), +        HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), +        HID_RI_USAGE(8, 0x63), /* Vendor Usage 0x63 */ +        HID_RI_LOGICAL_MINIMUM(8, 0x00), +        HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), +        HID_RI_REPORT_COUNT(8, RAW_EPSIZE), +        HID_RI_REPORT_SIZE(8, 0x08), +        HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), +    HID_RI_END_COLLECTION(0), +}; +#endif +  #ifdef CONSOLE_ENABLE  const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] =  { @@ -231,9 +256,15 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =      .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},      .USBSpecification       = VERSION_BCD(1,1,0), +#if VIRTSER_ENABLE +    .Class                  = USB_CSCP_IADDeviceClass, +    .SubClass               = USB_CSCP_IADDeviceSubclass, +    .Protocol               = USB_CSCP_IADDeviceProtocol, +#else      .Class                  = USB_CSCP_NoDeviceClass,      .SubClass               = USB_CSCP_NoDeviceSubclass,      .Protocol               = USB_CSCP_NoDeviceProtocol, +#endif      .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE, @@ -266,7 +297,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =              .ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP), -            .MaxPowerConsumption    = USB_CONFIG_POWER_MA(500) +            .MaxPowerConsumption    = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION)          },      /* @@ -393,6 +424,58 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =          },  #endif +		/* +	     * Raw +	     */ +	#ifdef RAW_ENABLE +	    .Raw_Interface = +	        { +	            .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + +	            .InterfaceNumber        = RAW_INTERFACE, +	            .AlternateSetting       = 0x00, + +	            .TotalEndpoints         = 2, + +	            .Class                  = HID_CSCP_HIDClass, +	            .SubClass               = HID_CSCP_NonBootSubclass, +	            .Protocol               = HID_CSCP_NonBootProtocol, + +	            .InterfaceStrIndex      = NO_DESCRIPTOR +	        }, + +	    .Raw_HID = +	        { +	            .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, + +	            .HIDSpec                = VERSION_BCD(1,1,1), +	            .CountryCode            = 0x00, +	            .TotalReportDescriptors = 1, +	            .HIDReportType          = HID_DTYPE_Report, +	            .HIDReportLength        = sizeof(RawReport) +	        }, + +	    .Raw_INEndpoint = +	        { +	            .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + +	            .EndpointAddress        = (ENDPOINT_DIR_IN | RAW_IN_EPNUM), +	            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), +	            .EndpointSize           = RAW_EPSIZE, +	            .PollingIntervalMS      = 0x01 +	        }, + +	    .Raw_OUTEndpoint = +	        { +	            .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + +	            .EndpointAddress        = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM), +	            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), +	            .EndpointSize           = RAW_EPSIZE, +	            .PollingIntervalMS      = 0x01 +	        }, +	#endif +      /*       * Console       */ @@ -643,7 +726,110 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =              .TotalEmbeddedJacks       = 0x01,              .AssociatedJackID         = {0x03} -        } +        }, +#endif + +#ifdef VIRTSER_ENABLE +    .CDC_Interface_Association = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, + +                    .FirstInterfaceIndex    = CCI_INTERFACE, +                    .TotalInterfaces        = 2, + +                    .Class                  = CDC_CSCP_CDCClass, +                    .SubClass               = CDC_CSCP_ACMSubclass, +                    .Protocol               = CDC_CSCP_ATCommandProtocol, + +                    .IADStrIndex            = NO_DESCRIPTOR, +            }, + +    .CDC_CCI_Interface = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + +                    .InterfaceNumber        = CCI_INTERFACE, +                    .AlternateSetting       = 0, + +                    .TotalEndpoints         = 1, + +                    .Class                  = CDC_CSCP_CDCClass, +                    .SubClass               = CDC_CSCP_ACMSubclass, +                    .Protocol               = CDC_CSCP_ATCommandProtocol, + +                    .InterfaceStrIndex      = NO_DESCRIPTOR +            }, + +    .CDC_Functional_Header = +            { +                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, +                    .Subtype                = 0x00, + +                    .CDCSpecification       = VERSION_BCD(1,1,0), +            }, + +    .CDC_Functional_ACM = +            { +                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, +                    .Subtype                = 0x02, + +                    .Capabilities           = 0x02, +            }, + +    .CDC_Functional_Union = +            { +                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, +                    .Subtype                = 0x06, + +                    .MasterInterfaceNumber  = CCI_INTERFACE, +                    .SlaveInterfaceNumber   = CDI_INTERFACE, +            }, + +    .CDC_NotificationEndpoint = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + +                    .EndpointAddress        = CDC_NOTIFICATION_EPADDR, +                    .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), +                    .EndpointSize           = CDC_NOTIFICATION_EPSIZE, +                    .PollingIntervalMS      = 0xFF +            }, + +    .CDC_DCI_Interface = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + +                    .InterfaceNumber        = CDI_INTERFACE, +                    .AlternateSetting       = 0, + +                    .TotalEndpoints         = 2, + +                    .Class                  = CDC_CSCP_CDCDataClass, +                    .SubClass               = CDC_CSCP_NoDataSubclass, +                    .Protocol               = CDC_CSCP_NoDataProtocol, + +                    .InterfaceStrIndex      = NO_DESCRIPTOR +            }, + +    .CDC_DataOutEndpoint = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + +                    .EndpointAddress        = CDC_OUT_EPADDR, +                    .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), +                    .EndpointSize           = CDC_EPSIZE, +                    .PollingIntervalMS      = 0x05 +            }, + +    .CDC_DataInEndpoint = +            { +                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + +                    .EndpointAddress        = CDC_IN_EPADDR, +                    .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), +                    .EndpointSize           = CDC_EPSIZE, +                    .PollingIntervalMS      = 0x05 +            },  #endif  }; @@ -736,6 +922,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,                  Size    = sizeof(USB_HID_Descriptor_HID_t);                  break;  #endif +#ifdef RAW_ENABLE +            case RAW_INTERFACE: +                Address = &ConfigurationDescriptor.Raw_HID; +                Size    = sizeof(USB_HID_Descriptor_HID_t); +                break; +#endif  #ifdef CONSOLE_ENABLE              case CONSOLE_INTERFACE:                  Address = &ConfigurationDescriptor.Console_HID; @@ -768,6 +960,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,                  Size    = sizeof(ExtrakeyReport);                  break;  #endif +#ifdef RAW_ENABLE +            case RAW_INTERFACE: +                Address = &RawReport; +                Size    = sizeof(RawReport); +                break; +#endif  #ifdef CONSOLE_ENABLE              case CONSOLE_INTERFACE:                  Address = &ConsoleReport; diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h index 4fd81a0e8..24ce420e6 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 @@ -71,6 +71,14 @@ typedef struct      USB_Descriptor_Endpoint_t             Extrakey_INEndpoint;  #endif +#ifdef RAW_ENABLE +    // Raw HID Interface +    USB_Descriptor_Interface_t            Raw_Interface; +    USB_HID_Descriptor_HID_t              Raw_HID; +    USB_Descriptor_Endpoint_t             Raw_INEndpoint; +    USB_Descriptor_Endpoint_t             Raw_OUTEndpoint; +#endif +  #ifdef CONSOLE_ENABLE      // Console HID Interface      USB_Descriptor_Interface_t            Console_Interface; @@ -104,6 +112,21 @@ typedef struct        USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;  #endif +#ifdef VIRTSER_ENABLE +        USB_Descriptor_Interface_Association_t   CDC_Interface_Association; + +	// CDC Control Interface +	USB_Descriptor_Interface_t               CDC_CCI_Interface; +	USB_CDC_Descriptor_FunctionalHeader_t    CDC_Functional_Header; +	USB_CDC_Descriptor_FunctionalACM_t       CDC_Functional_ACM; +	USB_CDC_Descriptor_FunctionalUnion_t     CDC_Functional_Union; +	USB_Descriptor_Endpoint_t                CDC_NotificationEndpoint; + +	// CDC Data Interface +	USB_Descriptor_Interface_t               CDC_DCI_Interface; +	USB_Descriptor_Endpoint_t                CDC_DataOutEndpoint; +	USB_Descriptor_Endpoint_t                CDC_DataInEndpoint; +#endif  } USB_Descriptor_Configuration_t; @@ -114,18 +137,24 @@ 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 RAW_ENABLE +#   define RAW_INTERFACE        	(EXTRAKEY_INTERFACE + 1) +#else +#   define RAW_INTERFACE        	EXTRAKEY_INTERFACE +#endif  #ifdef CONSOLE_ENABLE -#   define CONSOLE_INTERFACE        (EXTRAKEY_INTERFACE + 1) +#   define CONSOLE_INTERFACE        (RAW_INTERFACE + 1)  #else -#   define CONSOLE_INTERFACE        EXTRAKEY_INTERFACE +#   define CONSOLE_INTERFACE        RAW_INTERFACE  #endif  #ifdef NKRO_ENABLE @@ -141,15 +170,22 @@ typedef struct  #   define AS_INTERFACE           NKRO_INTERFACE  #endif +#ifdef VIRTSER_ENABLE +#   define CCI_INTERFACE         (AS_INTERFACE + 1) +#   define CDI_INTERFACE         (AS_INTERFACE + 2) +#else +#   define CDI_INTERFACE         AS_INTERFACE +#endif +  /* nubmer of interfaces */ -#define TOTAL_INTERFACES            AS_INTERFACE + 1 +#define TOTAL_INTERFACES            (CDI_INTERFACE + 1)  // Endopoint number and size  #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 @@ -157,15 +193,22 @@ 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 RAW_ENABLE +#   define RAW_IN_EPNUM         (EXTRAKEY_IN_EPNUM + 1) +#   define RAW_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 2) +#else +#   define RAW_OUT_EPNUM        EXTRAKEY_IN_EPNUM  #endif  #ifdef CONSOLE_ENABLE -#   define CONSOLE_IN_EPNUM         (EXTRAKEY_IN_EPNUM + 1) -#   define CONSOLE_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 1) -//#   define CONSOLE_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 2) +#   define CONSOLE_IN_EPNUM         (RAW_OUT_EPNUM + 1) +//#   define CONSOLE_OUT_EPNUM        (RAW_OUT_EPNUM + 2) +#   define CONSOLE_OUT_EPNUM        (RAW_OUT_EPNUM + 1)  #else -#   define CONSOLE_OUT_EPNUM        EXTRAKEY_IN_EPNUM +#   define CONSOLE_OUT_EPNUM        RAW_OUT_EPNUM  #endif  #ifdef NKRO_ENABLE @@ -180,19 +223,34 @@ typedef struct  #   define MIDI_STREAM_OUT_EPNUM    (NKRO_IN_EPNUM + 2)  #   define MIDI_STREAM_IN_EPADDR    (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM)  #   define MIDI_STREAM_OUT_EPADDR   (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM) +#else +#   define MIDI_STREAM_OUT_EPNUM     NKRO_IN_EPNUM  #endif +#ifdef VIRTSER_ENABLE +#   define CDC_NOTIFICATION_EPNUM   (MIDI_STREAM_OUT_EPNUM + 1) +#   define CDC_IN_EPNUM		    (MIDI_STREAM_OUT_EPNUM + 2) +#   define CDC_OUT_EPNUM		    (MIDI_STREAM_OUT_EPNUM + 3) +#   define CDC_NOTIFICATION_EPADDR        (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM) +#   define CDC_IN_EPADDR                  (ENDPOINT_DIR_IN | CDC_IN_EPNUM) +#   define CDC_OUT_EPADDR                  (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM) +#else +#   define CDC_OUT_EPNUM	MIDI_STREAM_OUT_EPNUM +#endif -#if defined(__AVR_ATmega32U2__) && MIDI_STREAM_OUT_EPADDR > 4 -# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI)" +#if defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4 +# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)"  #endif  #define KEYBOARD_EPSIZE             8  #define MOUSE_EPSIZE                8  #define EXTRAKEY_EPSIZE             8 +#define RAW_EPSIZE              	32  #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  uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 9ca55dbc9..ba49284c9 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -51,6 +51,16 @@  #include "descriptor.h"  #include "lufa.h" +#include "quantum.h" +#include <util/atomic.h> +#include "outputselect.h" + +#ifdef NKRO_ENABLE +  #include "keycode_config.h" + +  extern keymap_config_t keymap_config; +#endif +  #ifdef AUDIO_ENABLE      #include <audio.h> @@ -59,6 +69,25 @@  #ifdef BLUETOOTH_ENABLE      #include "bluetooth.h"  #endif +#ifdef ADAFRUIT_BLE_ENABLE +    #include "adafruit_ble.h" +#endif + +#ifdef VIRTSER_ENABLE +    #include "virtser.h" +#endif + +#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE) +    #include "rgblight.h" +#endif + +#ifdef MIDI_ENABLE +  #include "sysex_tools.h" +#endif + +#ifdef RAW_ENABLE +	#include "raw_hid.h" +#endif  uint8_t keyboard_idle = 0;  /* 0: Boot Protocol, 1: Report Protocol(default) */ @@ -68,9 +97,9 @@ static uint8_t keyboard_led_stats = 0;  static report_keyboard_t keyboard_report_sent;  #ifdef MIDI_ENABLE -void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2); -void usb_get_midi(MidiDevice * device); -void midi_usb_init(MidiDevice * device); +static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2); +static void usb_get_midi(MidiDevice * device); +static void midi_usb_init(MidiDevice * device);  #endif  /* Host driver */ @@ -127,6 +156,108 @@ USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface =  #define SYS_COMMON_3 0x30  #endif +#ifdef VIRTSER_ENABLE +USB_ClassInfo_CDC_Device_t cdc_device = +{ +  .Config = +  { +    .ControlInterfaceNumber = CCI_INTERFACE, +    .DataINEndpoint         = +    { +      .Address		= CDC_IN_EPADDR, +      .Size		= CDC_EPSIZE, +      .Banks		= 1, +    }, +    .DataOUTEndpoint	    = +    { +      .Address		= CDC_OUT_EPADDR, +      .Size		= CDC_EPSIZE, +      .Banks		= 1, +    }, +    .NotificationEndpoint   = +    { +      .Address		= CDC_NOTIFICATION_EPADDR, +      .Size		= CDC_NOTIFICATION_EPSIZE, +      .Banks		= 1, +    }, +  }, +}; +#endif + +#ifdef RAW_ENABLE + +void raw_hid_send( uint8_t *data, uint8_t length ) +{ +	// TODO: implement variable size packet +	if ( length != RAW_EPSIZE ) +	{ +		return; +	} + +	if (USB_DeviceState != DEVICE_STATE_Configured) +	{ +		return; +	} + +	// TODO: decide if we allow calls to raw_hid_send() in the middle +	// of other endpoint usage. +	uint8_t ep = Endpoint_GetCurrentEndpoint(); + +	Endpoint_SelectEndpoint(RAW_IN_EPNUM); + +	// Check to see if the host is ready to accept another packet +	if (Endpoint_IsINReady()) +	{ +		// Write data +		Endpoint_Write_Stream_LE(data, RAW_EPSIZE, NULL); +		// Finalize the stream transfer to send the last packet +		Endpoint_ClearIN(); +	} + +	Endpoint_SelectEndpoint(ep); +} + +__attribute__ ((weak)) +void raw_hid_receive( uint8_t *data, uint8_t length ) +{ +	// Users should #include "raw_hid.h" in their own code +	// and implement this function there. Leave this as weak linkage +	// so users can opt to not handle data coming in. +} + +static void raw_hid_task(void) +{ +	// Create a temporary buffer to hold the read in data from the host +	uint8_t data[RAW_EPSIZE]; +	bool data_read = false; + +	// Device must be connected and configured for the task to run +	if (USB_DeviceState != DEVICE_STATE_Configured) +	return; + +	Endpoint_SelectEndpoint(RAW_OUT_EPNUM); + +	// Check to see if a packet has been sent from the host +	if (Endpoint_IsOUTReceived()) +	{ +		// Check to see if the packet contains data +		if (Endpoint_IsReadWriteAllowed()) +		{ +			/* Read data */ +			Endpoint_Read_Stream_LE(data, sizeof(data), NULL); +			data_read = true; +		} + +		// Finalize the stream transfer to receive the last packet +		Endpoint_ClearOUT(); + +		if ( data_read ) +		{ +			raw_hid_receive( data, sizeof(data) ); +		} +	} +} +#endif  /*******************************************************************************   * Console @@ -246,10 +377,14 @@ void EVENT_USB_Device_WakeUp()  #endif  } + +  #ifdef CONSOLE_ENABLE  static bool console_flush = false;  #define CONSOLE_FLUSH_SET(b)   do { \ -    uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \ +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {\ +    console_flush = b; \ +  } \  } while (0)  // called every 1ms @@ -263,6 +398,7 @@ void EVENT_USB_Device_StartOfFrame(void)      Console_Task();      console_flush = false;  } +  #endif  /** Event handler for the USB_ConfigurationChanged event. @@ -291,6 +427,14 @@ void EVENT_USB_Device_ConfigurationChanged(void)                                       EXTRAKEY_EPSIZE, ENDPOINT_BANK_SINGLE);  #endif +#ifdef RAW_ENABLE +    /* Setup Raw HID Report Endpoints */ +    ConfigSuccess &= ENDPOINT_CONFIG(RAW_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, +									 RAW_EPSIZE, ENDPOINT_BANK_SINGLE); +    ConfigSuccess &= ENDPOINT_CONFIG(RAW_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, +									 RAW_EPSIZE, ENDPOINT_BANK_SINGLE); +#endif +  #ifdef CONSOLE_ENABLE      /* Setup Console HID Report Endpoints */      ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, @@ -311,6 +455,12 @@ void EVENT_USB_Device_ConfigurationChanged(void)      ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);      ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);  #endif + +#ifdef VIRTSER_ENABLE +    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, ENDPOINT_BANK_SINGLE); +    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_OUT_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE); +    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_IN_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE); +#endif  }  /* @@ -432,6 +582,10 @@ void EVENT_USB_Device_ControlRequest(void)              break;      } + +#ifdef VIRTSER_ENABLE +    CDC_Device_ProcessControlRequest(&cdc_device); +#endif  }  /******************************************************************************* @@ -444,22 +598,31 @@ static uint8_t keyboard_leds(void)  static void send_keyboard(report_keyboard_t *report)  { +    uint8_t timeout = 255; +    uint8_t where = where_to_send();  #ifdef BLUETOOTH_ENABLE -    bluefruit_serial_send(0xFD); -    for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { -        bluefruit_serial_send(report->raw[i]); +    if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { +        bluefruit_serial_send(0xFD); +        for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { +            bluefruit_serial_send(report->raw[i]); +        }      }  #endif -    uint8_t timeout = 255; +#ifdef ADAFRUIT_BLE_ENABLE +    if (where == OUTPUT_ADAFRUIT_BLE) { +      adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); +    } +#endif -    if (USB_DeviceState != DEVICE_STATE_Configured) -        return; +    if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { +      return; +    }      /* 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); @@ -493,23 +656,33 @@ static void send_keyboard(report_keyboard_t *report)  static void send_mouse(report_mouse_t *report)  {  #ifdef MOUSE_ENABLE +    uint8_t timeout = 255; +    uint8_t where = where_to_send();  #ifdef BLUETOOTH_ENABLE -    bluefruit_serial_send(0xFD); -    bluefruit_serial_send(0x00); -    bluefruit_serial_send(0x03); -    bluefruit_serial_send(report->buttons); -    bluefruit_serial_send(report->x); -    bluefruit_serial_send(report->y); -    bluefruit_serial_send(report->v); // should try sending the wheel v here -    bluefruit_serial_send(report->h); // should try sending the wheel h here -    bluefruit_serial_send(0x00); +    if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { +        bluefruit_serial_send(0xFD); +        bluefruit_serial_send(0x00); +        bluefruit_serial_send(0x03); +        bluefruit_serial_send(report->buttons); +        bluefruit_serial_send(report->x); +        bluefruit_serial_send(report->y); +        bluefruit_serial_send(report->v); // should try sending the wheel v here +        bluefruit_serial_send(report->h); // should try sending the wheel h here +        bluefruit_serial_send(0x00); +    }  #endif -    uint8_t timeout = 255; +#ifdef ADAFRUIT_BLE_ENABLE +    if (where == OUTPUT_ADAFRUIT_BLE) { +      // FIXME: mouse buttons +      adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h); +    } +#endif -    if (USB_DeviceState != DEVICE_STATE_Configured) -        return; +    if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { +      return; +    }      /* Select the Mouse Report Endpoint */      Endpoint_SelectEndpoint(MOUSE_IN_EPNUM); @@ -535,7 +708,7 @@ static void send_system(uint16_t data)      report_extra_t r = {          .report_id = REPORT_ID_SYSTEM, -        .usage = data +        .usage = data - SYSTEM_POWER_DOWN + 1      };      Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM); @@ -549,27 +722,36 @@ static void send_system(uint16_t data)  static void send_consumer(uint16_t data)  { +    uint8_t timeout = 255; +    uint8_t where = where_to_send();  #ifdef BLUETOOTH_ENABLE -    static uint16_t last_data = 0; -    if (data == last_data) return; -    last_data = data; -    uint16_t bitmap = CONSUMER2BLUEFRUIT(data); -    bluefruit_serial_send(0xFD); -    bluefruit_serial_send(0x00); -    bluefruit_serial_send(0x02); -    bluefruit_serial_send((bitmap>>8)&0xFF); -    bluefruit_serial_send(bitmap&0xFF); -    bluefruit_serial_send(0x00); -    bluefruit_serial_send(0x00); -    bluefruit_serial_send(0x00); -    bluefruit_serial_send(0x00); +    if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { +        static uint16_t last_data = 0; +        if (data == last_data) return; +        last_data = data; +        uint16_t bitmap = CONSUMER2BLUEFRUIT(data); +        bluefruit_serial_send(0xFD); +        bluefruit_serial_send(0x00); +        bluefruit_serial_send(0x02); +        bluefruit_serial_send((bitmap>>8)&0xFF); +        bluefruit_serial_send(bitmap&0xFF); +        bluefruit_serial_send(0x00); +        bluefruit_serial_send(0x00); +        bluefruit_serial_send(0x00); +        bluefruit_serial_send(0x00); +    }  #endif -    uint8_t timeout = 255; +#ifdef ADAFRUIT_BLE_ENABLE +    if (where == OUTPUT_ADAFRUIT_BLE) { +      adafruit_ble_send_consumer_key(data, 0); +    } +#endif -    if (USB_DeviceState != DEVICE_STATE_Configured) -        return; +    if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { +      return; +    }      report_extra_t r = {          .report_id = REPORT_ID_CONSUMER, @@ -659,7 +841,7 @@ int8_t sendchar(uint8_t c)   ******************************************************************************/  #ifdef MIDI_ENABLE -void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) { +static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {    MIDI_EventPacket_t event;    event.Data1 = byte0;    event.Data2 = byte1; @@ -719,7 +901,7 @@ void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byt    USB_USBTask();  } -void usb_get_midi(MidiDevice * device) { +static void usb_get_midi(MidiDevice * device) {    MIDI_EventPacket_t event;    while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, &event)) { @@ -749,12 +931,12 @@ void usb_get_midi(MidiDevice * device) {    USB_USBTask();  } -void midi_usb_init(MidiDevice * device){ +static void midi_usb_init(MidiDevice * device){    midi_device_init(device);    midi_device_set_send_func(device, usb_send_func);    midi_device_set_pre_input_process_func(device, usb_get_midi); -  SetupHardware(); +  // SetupHardware();    sei();  } @@ -827,6 +1009,61 @@ void MIDI_Task(void)  #endif +/******************************************************************************* + * VIRTUAL SERIAL + ******************************************************************************/ + +#ifdef VIRTSER_ENABLE +void virtser_init(void) +{ +  cdc_device.State.ControlLineStates.DeviceToHost = CDC_CONTROL_LINE_IN_DSR ; +  CDC_Device_SendControlLineStateChange(&cdc_device); +} + +void virtser_recv(uint8_t c) __attribute__ ((weak)); +void virtser_recv(uint8_t c) +{ +  // Ignore by default +} + +void virtser_task(void) +{ +  uint16_t count = CDC_Device_BytesReceived(&cdc_device); +  uint8_t ch; +  if (count) +  { +    ch = CDC_Device_ReceiveByte(&cdc_device); +    virtser_recv(ch); +  } +} +void virtser_send(const uint8_t byte) +{ +  uint8_t timeout = 255; +  uint8_t ep = Endpoint_GetCurrentEndpoint(); + +  if (cdc_device.State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) +  { +    /* IN packet */ +    Endpoint_SelectEndpoint(cdc_device.Config.DataINEndpoint.Address); + +    if (!Endpoint_IsEnabled() || !Endpoint_IsConfigured()) { +        Endpoint_SelectEndpoint(ep); +        return; +    } + +    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); + +    Endpoint_Write_8(byte); +    CDC_Device_Flush(&cdc_device); + +    if (Endpoint_IsINReady()) { +      Endpoint_ClearIN(); +    } + +    Endpoint_SelectEndpoint(ep); +  } +} +#endif  /*******************************************************************************   * main @@ -918,9 +1155,13 @@ int main(void)      sleep_led_init();  #endif +#ifdef VIRTSER_ENABLE +    virtser_init(); +#endif +      print("Keyboard start.\n");      while (1) { -        #ifndef BLUETOOTH_ENABLE +        #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE)          while (USB_DeviceState == DEVICE_STATE_Suspended) {              print("[s]");              suspend_power_down(); @@ -930,15 +1171,34 @@ int main(void)          }          #endif +        keyboard_task(); +  #ifdef MIDI_ENABLE          midi_device_process(&midi_device);          // MIDI_Task();  #endif -        keyboard_task(); + +#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) +        rgblight_task(); +#endif + +#ifdef ADAFRUIT_BLE_ENABLE +        adafruit_ble_task(); +#endif + +#ifdef VIRTSER_ENABLE +        virtser_task(); +        CDC_Device_USBTask(&cdc_device); +#endif + +#ifdef RAW_ENABLE +        raw_hid_task(); +#endif  #if !defined(INTERRUPT_CONTROL_ENDPOINT)          USB_USBTask();  #endif +      }  } @@ -963,15 +1223,50 @@ void fallthrough_callback(MidiDevice * device,  #endif  } +  void cc_callback(MidiDevice * device,      uint8_t chan, uint8_t num, uint8_t val) {    //sending it back on the next channel -  midi_send_cc(device, (chan + 1) % 16, num, val); +  // midi_send_cc(device, (chan + 1) % 16, num, val);  } -void sysex_callback(MidiDevice * device, -    uint16_t start, uint8_t length, uint8_t * data) { -  for (int i = 0; i < length; i++) -    midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); +#ifdef API_SYSEX_ENABLE +uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; +#endif + +void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { +    #ifdef API_SYSEX_ENABLE +        // SEND_STRING("\n"); +        // send_word(start); +        // SEND_STRING(": "); +        // Don't store the header +        int16_t pos = start - 4; +        for (uint8_t place = 0; place < length; place++) { +            // send_byte(*data); +            if (pos >= 0) { +                if (*data == 0xF7) { +                    // SEND_STRING("\nRD: "); +                    // for (uint8_t i = 0; i < start + place + 1; i++){ +                    //     send_byte(midi_buffer[i]); +                    // SEND_STRING(" "); +                    // } +                    const unsigned decoded_length = sysex_decoded_length(pos); +                    uint8_t decoded[API_SYSEX_MAX_SIZE]; +                    sysex_decode(decoded, midi_buffer, pos); +                    process_api(decoded_length, decoded); +                    return; +                } +                else if (pos >= MIDI_SYSEX_BUFFER) { +                    return; +                } +                midi_buffer[pos] = *data; +            } +            // SEND_STRING(" "); +            data++; +            pos++; +        } +    #endif  } + +  #endif diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index aad08d640..a049fd43c 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -68,8 +68,19 @@ typedef struct {  } __attribute__ ((packed)) report_extra_t;  #ifdef MIDI_ENABLE -void MIDI_Task(void); -MidiDevice midi_device; +  void MIDI_Task(void); +  MidiDevice midi_device; +#endif + +#ifdef API_ENABLE +  #include "api.h" +#endif + +#ifdef API_SYSEX_ENABLE +  #include "api_sysex.h" +  // Allocate space for encoding overhead. +  //The header and terminator are not stored to save a few bytes of precious ram +  #define MIDI_SYSEX_BUFFER (API_SYSEX_MAX_SIZE + API_SYSEX_MAX_SIZE / 7 + (API_SYSEX_MAX_SIZE % 7 ? 1 : 0))  #endif  // #if LUFA_VERSION_INTEGER < 0x120730 diff --git a/tmk_core/protocol/lufa/outputselect.c b/tmk_core/protocol/lufa/outputselect.c new file mode 100644 index 000000000..5d2457bff --- /dev/null +++ b/tmk_core/protocol/lufa/outputselect.c @@ -0,0 +1,56 @@ +/* +Copyright 2017 Priyadi Iman Nurcahyo +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "lufa.h" +#include "outputselect.h" +#ifdef ADAFRUIT_BLE_ENABLE +    #include "adafruit_ble.h" +#endif + +uint8_t desired_output = OUTPUT_DEFAULT; + +void set_output(uint8_t output) { +    set_output_user(output); +    desired_output = output; +} + +__attribute__((weak)) +void set_output_user(uint8_t output) { +} + +uint8_t auto_detect_output(void) { +    if (USB_DeviceState == DEVICE_STATE_Configured) { +        return OUTPUT_USB; +    } + +#ifdef ADAFRUIT_BLE_ENABLE +    if (adafruit_ble_is_connected()) { +        return OUTPUT_ADAFRUIT_BLE; +    } +#endif + +#ifdef BLUETOOTH_ENABLE +    return OUTPUT_BLUETOOTH; // should check if BT is connected here +#endif + +    return OUTPUT_NONE; +} + +uint8_t where_to_send(void) { +    if (desired_output == OUTPUT_AUTO) { +        return auto_detect_output(); +    } +    return desired_output; +} + diff --git a/tmk_core/protocol/lufa/outputselect.h b/tmk_core/protocol/lufa/outputselect.h new file mode 100644 index 000000000..79b4dd35d --- /dev/null +++ b/tmk_core/protocol/lufa/outputselect.h @@ -0,0 +1,41 @@ +/* +Copyright 2017 Priyadi Iman Nurcahyo +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +enum outputs { +    OUTPUT_AUTO, + +    OUTPUT_NONE, +    OUTPUT_USB, +    OUTPUT_BLUETOOTH, +    OUTPUT_ADAFRUIT_BLE, + +    // backward compatibility +    OUTPUT_USB_AND_BT +}; + +/** + * backward compatibility for BLUETOOTH_ENABLE, send to BT and USB by default + */ +#ifndef OUTPUT_DEFAULT +    #ifdef BLUETOOTH_ENABLE +        #define OUTPUT_DEFAULT OUTPUT_USB_AND_BT +    #else +        #define OUTPUT_DEFAULT OUTPUT_AUTO +    #endif +#endif + +void set_output(uint8_t output); +void set_output_user(uint8_t output); +uint8_t auto_detect_output(void); +uint8_t where_to_send(void);
\ No newline at end of file diff --git a/tmk_core/protocol/lufa/ringbuffer.hpp b/tmk_core/protocol/lufa/ringbuffer.hpp new file mode 100644 index 000000000..70a3c4881 --- /dev/null +++ b/tmk_core/protocol/lufa/ringbuffer.hpp @@ -0,0 +1,66 @@ +#pragma once +// A simple ringbuffer holding Size elements of type T +template <typename T, uint8_t Size> +class RingBuffer { + protected: +  T buf_[Size]; +  uint8_t head_{0}, tail_{0}; + public: +  inline uint8_t nextPosition(uint8_t position) { +    return (position + 1) % Size; +  } + +  inline uint8_t prevPosition(uint8_t position) { +    if (position == 0) { +      return Size - 1; +    } +    return position - 1; +  } + +  inline bool enqueue(const T &item) { +    static_assert(Size > 1, "RingBuffer size must be > 1"); +    uint8_t next = nextPosition(head_); +    if (next == tail_) { +      // Full +      return false; +    } + +    buf_[head_] = item; +    head_ = next; +    return true; +  } + +  inline bool get(T &dest, bool commit = true) { +    auto tail = tail_; +    if (tail == head_) { +      // No more data +      return false; +    } + +    dest = buf_[tail]; +    tail = nextPosition(tail); + +    if (commit) { +      tail_ = tail; +    } +    return true; +  } + +  inline bool empty() const { return head_ == tail_; } + +  inline uint8_t size() const { +    int diff = head_ - tail_; +    if (diff >= 0) { +      return diff; +    } +    return Size + diff; +  } + +  inline T& front() { +    return buf_[tail_]; +  } + +  inline bool peek(T &item) { +    return get(item, false); +  } +}; diff --git a/tmk_core/protocol/midi.mk b/tmk_core/protocol/midi.mk index c85ae42ff..4855b23d3 100644 --- a/tmk_core/protocol/midi.mk +++ b/tmk_core/protocol/midi.mk @@ -4,6 +4,7 @@ SRC += midi.c \  	   midi_device.c \  	   bytequeue/bytequeue.c \  	   bytequeue/interrupt_setting.c \ +	   sysex_tools.c \  	   $(LUFA_SRC_USBCLASS)  VPATH += $(TMK_PATH)/$(MIDI_DIR)
\ No newline at end of file diff --git a/tmk_core/protocol/midi/Config/LUFAConfig.h b/tmk_core/protocol/midi/Config/LUFAConfig.h index fa9404498..a1d748267 100755 --- a/tmk_core/protocol/midi/Config/LUFAConfig.h +++ b/tmk_core/protocol/midi/Config/LUFAConfig.h @@ -1,93 +1,93 @@ -/*
 -             LUFA Library
 -     Copyright (C) Dean Camera, 2012.
 -
 -  dean [at] fourwalledcubicle [dot] com
 -           www.lufa-lib.org
 -*/
 -
 -/*
 -  Copyright 2012  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 disclaim 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.
 -*/
 -
 -/** \file
 - *  \brief LUFA Library Configuration Header File
 - *
 - *  This header file is used to configure LUFA's compile time options,
 - *  as an alternative to the compile time constants supplied through
 - *  a makefile.
 - *
 - *  For information on what each token does, refer to the LUFA
 - *  manual section "Summary of Compile Tokens".
 - */
 -
 -#ifndef _LUFA_CONFIG_H_
 -#define _LUFA_CONFIG_H_
 -
 -	#if (ARCH == ARCH_AVR8)
 -
 -		/* Non-USB Related Configuration Tokens: */
 -//		#define DISABLE_TERMINAL_CODES
 -
 -		/* USB Class Driver Related Tokens: */
 -//		#define HID_HOST_BOOT_PROTOCOL_ONLY
 -//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
 -//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here}
 -//		#define HID_MAX_COLLECTIONS              {Insert Value Here}
 -//		#define HID_MAX_REPORTITEMS              {Insert Value Here}
 -//		#define HID_MAX_REPORT_IDS               {Insert Value Here}
 -//		#define NO_CLASS_DRIVER_AUTOFLUSH
 -
 -		/* General USB Driver Related Tokens: */
 -//		#define ORDERED_EP_CONFIG
 -		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
 -		#define USB_DEVICE_ONLY
 -//		#define USB_HOST_ONLY
 -//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
 -//		#define NO_LIMITED_CONTROLLER_CONNECT
 -//		#define NO_SOF_EVENTS
 -
 -		/* USB Device Mode Driver Related Tokens: */
 -//		#define USE_RAM_DESCRIPTORS
 -		#define USE_FLASH_DESCRIPTORS
 -//		#define USE_EEPROM_DESCRIPTORS
 -//		#define NO_INTERNAL_SERIAL
 -		#define FIXED_CONTROL_ENDPOINT_SIZE      8
 -//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
 -		#define FIXED_NUM_CONFIGURATIONS         1
 -//		#define CONTROL_ONLY_DEVICE
 -//		#define INTERRUPT_CONTROL_ENDPOINT
 -//		#define NO_DEVICE_REMOTE_WAKEUP
 -//		#define NO_DEVICE_SELF_POWER
 -
 -		/* USB Host Mode Driver Related Tokens: */
 -//		#define HOST_STATE_AS_GPIOR              {Insert Value Here}
 -//		#define USB_HOST_TIMEOUT_MS              {Insert Value Here}
 -//		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
 -//      #define NO_AUTO_VBUS_MANAGEMENT
 -//      #define INVERTED_VBUS_ENABLE_LINE
 -
 -	#else
 -
 -		#error Unsupported architecture for this LUFA configuration file.
 -
 -	#endif
 -#endif
 +/* +             LUFA Library +     Copyright (C) Dean Camera, 2012. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2012  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 disclaim 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. +*/ + +/** \file + *  \brief LUFA Library Configuration Header File + * + *  This header file is used to configure LUFA's compile time options, + *  as an alternative to the compile time constants supplied through + *  a makefile. + * + *  For information on what each token does, refer to the LUFA + *  manual section "Summary of Compile Tokens". + */ + +#ifndef _LUFA_CONFIG_H_ +#define _LUFA_CONFIG_H_ + +	#if (ARCH == ARCH_AVR8) + +		/* Non-USB Related Configuration Tokens: */ +//		#define DISABLE_TERMINAL_CODES + +		/* USB Class Driver Related Tokens: */ +//		#define HID_HOST_BOOT_PROTOCOL_ONLY +//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here} +//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here} +//		#define HID_MAX_COLLECTIONS              {Insert Value Here} +//		#define HID_MAX_REPORTITEMS              {Insert Value Here} +//		#define HID_MAX_REPORT_IDS               {Insert Value Here} +//		#define NO_CLASS_DRIVER_AUTOFLUSH + +		/* General USB Driver Related Tokens: */ +//		#define ORDERED_EP_CONFIG +		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) +		#define USB_DEVICE_ONLY +//		#define USB_HOST_ONLY +//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here} +//		#define NO_LIMITED_CONTROLLER_CONNECT +//		#define NO_SOF_EVENTS + +		/* USB Device Mode Driver Related Tokens: */ +//		#define USE_RAM_DESCRIPTORS +		#define USE_FLASH_DESCRIPTORS +//		#define USE_EEPROM_DESCRIPTORS +//		#define NO_INTERNAL_SERIAL +		#define FIXED_CONTROL_ENDPOINT_SIZE      8 +//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here} +		#define FIXED_NUM_CONFIGURATIONS         1 +//		#define CONTROL_ONLY_DEVICE +//		#define INTERRUPT_CONTROL_ENDPOINT +//		#define NO_DEVICE_REMOTE_WAKEUP +//		#define NO_DEVICE_SELF_POWER + +		/* USB Host Mode Driver Related Tokens: */ +//		#define HOST_STATE_AS_GPIOR              {Insert Value Here} +//		#define USB_HOST_TIMEOUT_MS              {Insert Value Here} +//		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here} +//      #define NO_AUTO_VBUS_MANAGEMENT +//      #define INVERTED_VBUS_ENABLE_LINE + +	#else + +		#error Unsupported architecture for this LUFA configuration file. + +	#endif +#endif diff --git a/tmk_core/protocol/pjrc/usb.c b/tmk_core/protocol/pjrc/usb.c index 1e6ba8719..09efbe076 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 4b87b5d7b..05f479734 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/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index c3e8b3c1c..d9ccbecb4 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -18,60 +18,59 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include <stdbool.h>  #include<avr/io.h>  #include<util/delay.h> -#include "ps2.h"  #include "ps2_mouse.h" -#include "report.h"  #include "host.h"  #include "timer.h"  #include "print.h" +#include "report.h"  #include "debug.h" +#include "ps2.h" +/* ============================= MACROS ============================ */  static report_mouse_t mouse_report = {}; +static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); +static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); +static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report); +static inline void ps2_mouse_enable_scrolling(void); +static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report); -static void print_usb_data(void); - +/* ============================= IMPLEMENTATION ============================ */  /* supports only 3 button mouse at this time */ -uint8_t ps2_mouse_init(void) { -    uint8_t rcv; - +void ps2_mouse_init(void) {      ps2_host_init(); -    _delay_ms(1000);    // wait for powering up +    _delay_ms(PS2_MOUSE_INIT_DELAY);    // wait for powering up -    // send Reset -    rcv = ps2_host_send(0xFF); -    print("ps2_mouse_init: send Reset: "); -    phex(rcv); phex(ps2_error); print("\n"); +    PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset"); -    // read completion code of BAT -    rcv = ps2_host_recv_response(); -    print("ps2_mouse_init: read BAT: "); -    phex(rcv); phex(ps2_error); print("\n"); +    PS2_MOUSE_RECEIVE("ps2_mouse_init: read BAT"); +    PS2_MOUSE_RECEIVE("ps2_mouse_init: read DevID"); -    // read Device ID -    rcv = ps2_host_recv_response(); -    print("ps2_mouse_init: read DevID: "); -    phex(rcv); phex(ps2_error); print("\n"); +#ifdef PS2_MOUSE_USE_REMOTE_MODE +    ps2_mouse_set_remote_mode(); +#else +    ps2_mouse_enable_data_reporting(); +#endif + +#ifdef PS2_MOUSE_ENABLE_SCROLLING +    ps2_mouse_enable_scrolling(); +#endif -    // send Set Remote mode -    rcv = ps2_host_send(0xF0); -    print("ps2_mouse_init: send 0xF0: "); -    phex(rcv); phex(ps2_error); print("\n"); +#ifdef PS2_MOUSE_USE_2_1_SCALING +    ps2_mouse_set_scaling_2_1(); +#endif -    return 0; +    ps2_mouse_init_user();  } -#define X_IS_NEG  (mouse_report.buttons & (1<<PS2_MOUSE_X_SIGN)) -#define Y_IS_NEG  (mouse_report.buttons & (1<<PS2_MOUSE_Y_SIGN)) -#define X_IS_OVF  (mouse_report.buttons & (1<<PS2_MOUSE_X_OVFLW)) -#define Y_IS_OVF  (mouse_report.buttons & (1<<PS2_MOUSE_Y_OVFLW)) -void ps2_mouse_task(void) -{ -    enum { SCROLL_NONE, SCROLL_BTN, SCROLL_SENT }; -    static uint8_t scroll_state = SCROLL_NONE; +__attribute__((weak)) +void ps2_mouse_init_user(void) { +} + +void ps2_mouse_task(void) {      static uint8_t buttons_prev = 0;      /* receives packet from mouse */ @@ -79,142 +78,169 @@ void ps2_mouse_task(void)      rcv = ps2_host_send(PS2_MOUSE_READ_DATA);      if (rcv == PS2_ACK) {          mouse_report.buttons = ps2_host_recv_response(); -        mouse_report.x = ps2_host_recv_response(); -        mouse_report.y = ps2_host_recv_response(); +        mouse_report.x = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER; +        mouse_report.y = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER; +#ifdef PS2_MOUSE_ENABLE_SCROLLING +        mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER; +#endif      } else {          if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");          return;      } -        xprintf("%ud ", timer_read()); -        print("ps2_mouse raw: ["); -        phex(mouse_report.buttons); print("|"); -        print_hex8((uint8_t)mouse_report.x); print(" "); -        print_hex8((uint8_t)mouse_report.y); print("]\n");      /* if mouse moves or buttons state changes */ -    if (mouse_report.x || mouse_report.y || +    if (mouse_report.x || mouse_report.y || mouse_report.v ||              ((mouse_report.buttons ^ buttons_prev) & PS2_MOUSE_BTN_MASK)) { - -#ifdef PS2_MOUSE_DEBUG -        print("ps2_mouse raw: ["); -        phex(mouse_report.buttons); print("|"); -        print_hex8((uint8_t)mouse_report.x); print(" "); -        print_hex8((uint8_t)mouse_report.y); print("]\n"); +#ifdef PS2_MOUSE_DEBUG_RAW +        // Used to debug raw ps2 bytes from mouse +        ps2_mouse_print_report(&mouse_report);  #endif -          buttons_prev = mouse_report.buttons; +        ps2_mouse_convert_report_to_hid(&mouse_report); +#if PS2_MOUSE_SCROLL_BTN_MASK +        ps2_mouse_scroll_button_task(&mouse_report); +#endif +#ifdef PS2_MOUSE_DEBUG_HID +        // Used to debug the bytes sent to the host +        ps2_mouse_print_report(&mouse_report); +#endif +        host_mouse_send(&mouse_report); +    } +     +    ps2_mouse_clear_report(&mouse_report); +} -        // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value. -        // bit: 8    7 ... 0 -        //      sign \8-bit/ -        // -        // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used. -        // -        // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit. -        mouse_report.x = X_IS_NEG ? -                          ((!X_IS_OVF && -127 <= mouse_report.x && mouse_report.x <= -1) ?  mouse_report.x : -127) : -                          ((!X_IS_OVF && 0 <= mouse_report.x && mouse_report.x <= 127) ? mouse_report.x : 127); -        mouse_report.y = Y_IS_NEG ? -                          ((!Y_IS_OVF && -127 <= mouse_report.y && mouse_report.y <= -1) ?  mouse_report.y : -127) : -                          ((!Y_IS_OVF && 0 <= mouse_report.y && mouse_report.y <= 127) ? mouse_report.y : 127); +void ps2_mouse_disable_data_reporting(void) { +    PS2_MOUSE_SEND(PS2_MOUSE_DISABLE_DATA_REPORTING, "ps2 mouse disable data reporting");  +} -        // remove sign and overflow flags -        mouse_report.buttons &= PS2_MOUSE_BTN_MASK; +void ps2_mouse_enable_data_reporting(void) { +    PS2_MOUSE_SEND(PS2_MOUSE_ENABLE_DATA_REPORTING, "ps2 mouse enable data reporting"); +} -        // invert coordinate of y to conform to USB HID mouse -        mouse_report.y = -mouse_report.y; +void ps2_mouse_set_remote_mode(void) {  +    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_REMOTE_MODE, "ps2 mouse set remote mode");  +    ps2_mouse_mode = PS2_MOUSE_REMOTE_MODE; +} +void ps2_mouse_set_stream_mode(void) {  +    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_STREAM_MODE, "ps2 mouse set stream mode");  +    ps2_mouse_mode = PS2_MOUSE_STREAM_MODE; +} -#if PS2_MOUSE_SCROLL_BTN_MASK -        static uint16_t scroll_button_time = 0; -        if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == (PS2_MOUSE_SCROLL_BTN_MASK)) { -            if (scroll_state == SCROLL_NONE) { -                scroll_button_time = timer_read(); -                scroll_state = SCROLL_BTN; -            } - -            // doesn't send Scroll Button -            //mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK); - -            if (mouse_report.x || mouse_report.y) { -                scroll_state = SCROLL_SENT; - -                mouse_report.v = -mouse_report.y/(PS2_MOUSE_SCROLL_DIVISOR_V); -                mouse_report.h =  mouse_report.x/(PS2_MOUSE_SCROLL_DIVISOR_H); -                mouse_report.x = 0; -                mouse_report.y = 0; -                //host_mouse_send(&mouse_report); -            } +void ps2_mouse_set_scaling_2_1(void) { +    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_2_1, "ps2 mouse set scaling 2:1");  +} + +void ps2_mouse_set_scaling_1_1(void) { +    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_1_1, "ps2 mouse set scaling 1:1");  +} + +void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution) { +    PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_RESOLUTION, resolution, "ps2 mouse set resolution"); +} + +void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate) { +    PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_SAMPLE_RATE, sample_rate, "ps2 mouse set sample rate"); +} + +/* ============================= HELPERS ============================ */ + +#define X_IS_NEG  (mouse_report->buttons & (1<<PS2_MOUSE_X_SIGN)) +#define Y_IS_NEG  (mouse_report->buttons & (1<<PS2_MOUSE_Y_SIGN)) +#define X_IS_OVF  (mouse_report->buttons & (1<<PS2_MOUSE_X_OVFLW)) +#define Y_IS_OVF  (mouse_report->buttons & (1<<PS2_MOUSE_Y_OVFLW)) +static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report) { +    // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value. +    // bit: 8    7 ... 0 +    //      sign \8-bit/ +    // +    // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used. +    // +    // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit. +    mouse_report->x = X_IS_NEG ? +        ((!X_IS_OVF && -127 <= mouse_report->x && mouse_report->x <= -1) ?  mouse_report->x : -127) : +        ((!X_IS_OVF && 0 <= mouse_report->x && mouse_report->x <= 127) ? mouse_report->x : 127); +    mouse_report->y = Y_IS_NEG ? +        ((!Y_IS_OVF && -127 <= mouse_report->y && mouse_report->y <= -1) ?  mouse_report->y : -127) : +        ((!Y_IS_OVF && 0 <= mouse_report->y && mouse_report->y <= 127) ? mouse_report->y : 127); + +    // remove sign and overflow flags +    mouse_report->buttons &= PS2_MOUSE_BTN_MASK; + +    // invert coordinate of y to conform to USB HID mouse +    mouse_report->y = -mouse_report->y; +} + +static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report) { +    mouse_report->x = 0; +    mouse_report->y = 0; +    mouse_report->v = 0; +    mouse_report->h = 0; +    mouse_report->buttons = 0; +} + +static inline void ps2_mouse_print_report(report_mouse_t *mouse_report) { +    if (!debug_mouse) return; +    print("ps2_mouse: ["); +    phex(mouse_report->buttons); print("|"); +    print_hex8((uint8_t)mouse_report->x); print(" "); +    print_hex8((uint8_t)mouse_report->y); print(" "); +    print_hex8((uint8_t)mouse_report->v); print(" "); +    print_hex8((uint8_t)mouse_report->h); print("]\n"); +} + +static inline void ps2_mouse_enable_scrolling(void) { +    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Initiaing scroll wheel enable: Set sample rate"); +    PS2_MOUSE_SEND(200, "200"); +    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate"); +    PS2_MOUSE_SEND(100, "100"); +    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate"); +    PS2_MOUSE_SEND(80, "80"); +    PS2_MOUSE_SEND(PS2_MOUSE_GET_DEVICE_ID, "Finished enabling scroll wheel"); +    _delay_ms(20); +} + +#define PRESS_SCROLL_BUTTONS    mouse_report->buttons |= (PS2_MOUSE_SCROLL_BTN_MASK) +#define RELEASE_SCROLL_BUTTONS  mouse_report->buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK) +static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { +    static enum {  +        SCROLL_NONE,  +        SCROLL_BTN,  +        SCROLL_SENT, +    } scroll_state = SCROLL_NONE; +    static uint16_t scroll_button_time = 0; + +    if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) { +        // All scroll buttons are pressed + +        if (scroll_state == SCROLL_NONE) { +            scroll_button_time = timer_read(); +            scroll_state = SCROLL_BTN;          } -        else if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == 0) { + +        // If the mouse has moved, update the report to scroll instead of move the mouse +        if (mouse_report->x || mouse_report->y) { +            scroll_state = SCROLL_SENT; +            mouse_report->v = -mouse_report->y/(PS2_MOUSE_SCROLL_DIVISOR_V); +            mouse_report->h =  mouse_report->x/(PS2_MOUSE_SCROLL_DIVISOR_H); +            mouse_report->x = 0; +            mouse_report->y = 0; +        } +    } else if (0 == (PS2_MOUSE_SCROLL_BTN_MASK & mouse_report->buttons)) { +        // None of the scroll buttons are pressed  +  #if PS2_MOUSE_SCROLL_BTN_SEND -            if (scroll_state == SCROLL_BTN && -                    TIMER_DIFF_16(timer_read(), scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) { -                // send Scroll Button(down and up at once) when not scrolled -                mouse_report.buttons |= (PS2_MOUSE_SCROLL_BTN_MASK); -                host_mouse_send(&mouse_report); -                _delay_ms(100); -                mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK); -            } -#endif -            scroll_state = SCROLL_NONE; +        if (scroll_state == SCROLL_BTN  +                && timer_elapsed(scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) { +            PRESS_SCROLL_BUTTONS; +            host_mouse_send(mouse_report); +            _delay_ms(100); +            RELEASE_SCROLL_BUTTONS;          } -        // doesn't send Scroll Button -        mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);  #endif - - -        host_mouse_send(&mouse_report); -        print_usb_data(); +        scroll_state = SCROLL_NONE;      } -    // clear report -    mouse_report.x = 0; -    mouse_report.y = 0; -    mouse_report.v = 0; -    mouse_report.h = 0; -    mouse_report.buttons = 0; -} -static void print_usb_data(void) -{ -    if (!debug_mouse) return; -    print("ps2_mouse usb: ["); -    phex(mouse_report.buttons); print("|"); -    print_hex8((uint8_t)mouse_report.x); print(" "); -    print_hex8((uint8_t)mouse_report.y); print(" "); -    print_hex8((uint8_t)mouse_report.v); print(" "); -    print_hex8((uint8_t)mouse_report.h); print("]\n"); -} - - -/* PS/2 Mouse Synopsis - * http://www.computer-engineering.org/ps2mouse/ - * - * Command: - * 0xFF: Reset - * 0xF6: Set Defaults Sampling; rate=100, resolution=4cnt/mm, scaling=1:1, reporting=disabled - * 0xF5: Disable Data Reporting - * 0xF4: Enable Data Reporting - * 0xF3: Set Sample Rate - * 0xF2: Get Device ID - * 0xF0: Set Remote Mode - * 0xEB: Read Data - * 0xEA: Set Stream Mode - * 0xE9: Status Request - * 0xE8: Set Resolution - * 0xE7: Set Scaling 2:1 - * 0xE6: Set Scaling 1:1 - * - * Mode: - * Stream Mode: devices sends the data when it changs its state - * Remote Mode: host polls the data periodically - * - * This code uses Remote Mode and polls the data with Read Data(0xEB). - * - * Data format: - * byte|7       6       5       4       3       2       1       0 - * ----+-------------------------------------------------------------- - *    0|Yovflw  Xovflw  Ysign   Xsign   1       Middle  Right   Left - *    1|                    X movement - *    2|                    Y movement - */ +    RELEASE_SCROLL_BUTTONS; +} diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h index 27d9790d4..eeeffe4d8 100644 --- a/tmk_core/protocol/ps2_mouse.h +++ b/tmk_core/protocol/ps2_mouse.h @@ -19,16 +19,62 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define  PS2_MOUSE_H  #include <stdbool.h> +#include "debug.h" -#define PS2_MOUSE_READ_DATA     0xEB +#define PS2_MOUSE_SEND(command, message) \ +do { \ +   __attribute__ ((unused)) uint8_t rcv = ps2_host_send(command); \ +   if (debug_mouse) { \ +        print((message)); \ +        xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \ +    } \ +} while(0) + +#define PS2_MOUSE_SEND_SAFE(command, message) \ +do { \ +    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ +        ps2_mouse_disable_data_reporting(); \ +    } \ +    PS2_MOUSE_SEND(command, message); \ +    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ +        ps2_mouse_enable_data_reporting(); \ +    } \ +} while(0) + +#define PS2_MOUSE_SET_SAFE(command, value, message) \ +do { \ +    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ +        ps2_mouse_disable_data_reporting(); \ +    } \ +    PS2_MOUSE_SEND(command, message); \ +    PS2_MOUSE_SEND(value, "Sending value"); \ +    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \ +        ps2_mouse_enable_data_reporting(); \ +    } \ +} while(0) + +#define PS2_MOUSE_RECEIVE(message) \ +do { \ +   __attribute__ ((unused)) uint8_t rcv = ps2_host_recv_response(); \ +   if (debug_mouse) { \ +        print((message)); \ +        xprintf(" result: %X, error: %X \n", rcv, ps2_error); \ +    } \ +} while(0) + +__attribute__ ((unused)) +static enum ps2_mouse_mode_e { +    PS2_MOUSE_STREAM_MODE, +    PS2_MOUSE_REMOTE_MODE, +} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;  /*   * Data format:   * byte|7       6       5       4       3       2       1       0 - * ----+-------------------------------------------------------------- - *    0|Yovflw  Xovflw  Ysign   Xsign   1       Middle  Right   Left - *    1|                    X movement(0-255) - *    2|                    Y movement(0-255) + * ----+---------------------------------------------------------------- + *    0|[Yovflw][Xovflw][Ysign ][Xsign ][ 1    ][Middle][Right ][Left  ] + *    1|[                    X movement(0-255)                         ] + *    2|[                    Y movement(0-255)                         ]   */  #define PS2_MOUSE_BTN_MASK      0x07  #define PS2_MOUSE_BTN_LEFT      0 @@ -39,10 +85,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define PS2_MOUSE_X_OVFLW       6  #define PS2_MOUSE_Y_OVFLW       7 - -/* - * Scroll by mouse move with pressing button - */  /* mouse button to start scrolling; set 0 to disable scroll */  #ifndef PS2_MOUSE_SCROLL_BTN_MASK  #define PS2_MOUSE_SCROLL_BTN_MASK       (1<<PS2_MOUSE_BTN_MIDDLE) @@ -58,9 +100,79 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #ifndef PS2_MOUSE_SCROLL_DIVISOR_H  #define PS2_MOUSE_SCROLL_DIVISOR_H      2  #endif +/* multiply reported mouse values by these */ +#ifndef PS2_MOUSE_X_MULTIPLIER +#define PS2_MOUSE_X_MULTIPLIER          1 +#endif +#ifndef PS2_MOUSE_Y_MULTIPLIER +#define PS2_MOUSE_Y_MULTIPLIER          1 +#endif +#ifndef PS2_MOUSE_V_MULTIPLIER +#define PS2_MOUSE_V_MULTIPLIER          1 +#endif +/* For some mice this will need to be 0x0F */ +#ifndef PS2_MOUSE_SCROLL_MASK        +#define PS2_MOUSE_SCROLL_MASK           0xFF  +#endif +#ifndef PS2_MOUSE_INIT_DELAY +#define PS2_MOUSE_INIT_DELAY            1000 +#endif +enum ps2_mouse_command_e { +    PS2_MOUSE_RESET = 0xFF, +    PS2_MOUSE_RESEND = 0xFE, +    PS2_MOSUE_SET_DEFAULTS = 0xF6, +    PS2_MOUSE_DISABLE_DATA_REPORTING = 0xF5, +    PS2_MOUSE_ENABLE_DATA_REPORTING = 0xF4, +    PS2_MOUSE_SET_SAMPLE_RATE = 0xF3, +    PS2_MOUSE_GET_DEVICE_ID = 0xF2, +    PS2_MOUSE_SET_REMOTE_MODE = 0xF0, +    PS2_MOUSE_SET_WRAP_MODE = 0xEC, +    PS2_MOUSE_READ_DATA = 0xEB, +    PS2_MOUSE_SET_STREAM_MODE = 0xEA, +    PS2_MOUSE_STATUS_REQUEST = 0xE9, +    PS2_MOUSE_SET_RESOLUTION = 0xE8, +    PS2_MOUSE_SET_SCALING_2_1 = 0xE7, +    PS2_MOUSE_SET_SCALING_1_1 = 0xE6, +}; + +typedef enum ps2_mouse_resolution_e { +    PS2_MOUSE_1_COUNT_MM, +    PS2_MOUSE_2_COUNT_MM, +    PS2_MOUSE_4_COUNT_MM, +    PS2_MOUSE_8_COUNT_MM,    +} ps2_mouse_resolution_t; + +typedef enum ps2_mouse_sample_rate_e { +    PS2_MOUSE_10_SAMPLES_SEC = 10, +    PS2_MOUSE_20_SAMPLES_SEC = 20, +    PS2_MOUSE_40_SAMPLES_SEC = 40, +    PS2_MOUSE_60_SAMPLES_SEC = 60, +    PS2_MOUSE_80_SAMPLES_SEC = 80, +    PS2_MOUSE_100_SAMPLES_SEC = 100, +    PS2_MOUSE_200_SAMPLES_SEC = 200, +} ps2_mouse_sample_rate_t; + +void ps2_mouse_init(void); + +void ps2_mouse_init_user(void); -uint8_t ps2_mouse_init(void);  void ps2_mouse_task(void); +void ps2_mouse_disable_data_reporting(void); + +void ps2_mouse_enable_data_reporting(void); + +void ps2_mouse_set_remote_mode(void); + +void ps2_mouse_set_stream_mode(void); + +void ps2_mouse_set_scaling_2_1(void); + +void ps2_mouse_set_scaling_1_1(void); + +void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution); + +void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate); +  #endif diff --git a/tmk_core/protocol/vusb.mk b/tmk_core/protocol/vusb.mk index 3cba3f71a..897b833e1 100644 --- a/tmk_core/protocol/vusb.mk +++ b/tmk_core/protocol/vusb.mk @@ -18,4 +18,5 @@ endif  # Search Path -VPATH += $(TMK_DIR)/protocol/vusb:$(TMK_DIR)/protocol/vusb/usbdrv +VPATH += $(TMK_PATH)/$(VUSB_DIR) +VPATH += $(TMK_PATH)/$(VUSB_DIR)/usbdrv diff --git a/tmk_core/protocol/vusb/main.c b/tmk_core/protocol/vusb/main.c index 8e4a266e9..f6a0c7e9a 100644 --- a/tmk_core/protocol/vusb/main.c +++ b/tmk_core/protocol/vusb/main.c @@ -48,8 +48,12 @@ int main(void)      uint16_t last_timer = timer_read();  #endif +#ifdef CLKPR +    // avoid unintentional changes of clock frequency in devices that have a +    // clock prescaler      CLKPR = 0x80, CLKPR = 0; -#ifndef PS2_USE_USART +#endif +#ifndef NO_UART      uart_init(UART_BAUD_RATE);  #endif diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index eaa1c512d..022ac6f6b 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -15,6 +15,8 @@ You should have received a copy of the GNU General Public License  along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ +#include <avr/eeprom.h> +#include <avr/wdt.h>  #include <stdint.h>  #include "usbdrv.h"  #include "usbconfig.h" @@ -24,6 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "debug.h"  #include "host_driver.h"  #include "vusb.h" +#include "bootloader.h"  static uint8_t vusb_keyboard_leds = 0; @@ -163,6 +166,7 @@ static struct {      uint16_t        len;      enum {          NONE, +        BOOTLOADER,          SET_LED      }               kind;  } last_req; @@ -193,6 +197,11 @@ usbRequest_t    *rq = (void *)data;                  debug("SET_LED: ");                  last_req.kind = SET_LED;                  last_req.len = rq->wLength.word; +#ifdef BOOTLOADER_SIZE +            } else if(rq->wValue.word == 0x0301) { +                last_req.kind = BOOTLOADER; +                last_req.len = rq->wLength.word; +#endif              }              return USB_NO_MSG; // to get data in usbFunctionWrite          } else { @@ -220,6 +229,11 @@ uchar usbFunctionWrite(uchar *data, uchar len)              last_req.len = 0;              return 1;              break; +        case BOOTLOADER: +            usbDeviceDisconnect(); +            bootloader_jump(); +            return 1; +            break;          case NONE:          default:              return -1; @@ -266,7 +280,7 @@ const PROGMEM uchar keyboard_hid_report[] = {      0x95, 0x06,          //   Report Count (6),      0x75, 0x08,          //   Report Size (8),      0x15, 0x00,          //   Logical Minimum (0), -    0x25, 0xFF, 0x00     //   Logical Maximum(255), +    0x26, 0xFF, 0x00,    //   Logical Maximum(255),      0x05, 0x07,          //   Usage Page (Key Codes),      0x19, 0x00,          //   Usage Minimum (0),      0x29, 0xFF,          //   Usage Maximum (255), @@ -336,7 +350,7 @@ const PROGMEM uchar mouse_hid_report[] = {      0xa1, 0x01,                    // COLLECTION (Application)      0x85, REPORT_ID_SYSTEM,        //   REPORT_ID (2)      0x15, 0x01,                    //   LOGICAL_MINIMUM (0x1) -    0x25, 0xb7, 0x00               //   LOGICAL_MAXIMUM (0xb7) +    0x26, 0xb7, 0x00,              //   LOGICAL_MAXIMUM (0xb7)      0x19, 0x01,                    //   USAGE_MINIMUM (0x1)      0x29, 0xb7,                    //   USAGE_MAXIMUM (0xb7)      0x75, 0x10,                    //   REPORT_SIZE (16) @@ -481,11 +495,11 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq)              /* interface index */              switch (rq->wIndex.word) {                  case 0: -                    usbMsgPtr = keyboard_hid_report; +                    usbMsgPtr = (unsigned char *)keyboard_hid_report;                      len = sizeof(keyboard_hid_report);                      break;                  case 1: -                    usbMsgPtr = mouse_hid_report; +                    usbMsgPtr = (unsigned char *)mouse_hid_report;                      len = sizeof(mouse_hid_report);                      break;              } diff --git a/tmk_core/readme.md b/tmk_core/readme.md index f460d0ed4..5f135617c 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/ring_buffer.h b/tmk_core/ring_buffer.h index 7bdebbcf3..005d1be61 100644 --- a/tmk_core/ring_buffer.h +++ b/tmk_core/ring_buffer.h @@ -4,13 +4,13 @@   * Ring buffer to store scan codes from keyboard   *------------------------------------------------------------------*/  #define RBUF_SIZE 32 +#include <util/atomic.h>  static uint8_t rbuf[RBUF_SIZE];  static uint8_t rbuf_head = 0;  static uint8_t rbuf_tail = 0;  static inline void rbuf_enqueue(uint8_t data)  { -    uint8_t sreg = SREG; -    cli(); +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {      uint8_t next = (rbuf_head + 1) % RBUF_SIZE;      if (next != rbuf_tail) {          rbuf[rbuf_head] = data; @@ -18,36 +18,34 @@ static inline void rbuf_enqueue(uint8_t data)      } else {          print("rbuf: full\n");      } -    SREG = sreg; +  }  }  static inline uint8_t rbuf_dequeue(void)  {      uint8_t val = 0; +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { -    uint8_t sreg = SREG; -    cli();      if (rbuf_head != rbuf_tail) {          val = rbuf[rbuf_tail];          rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE;      } -    SREG = sreg; +  }      return val;  }  static inline bool rbuf_has_data(void)  { -    uint8_t sreg = SREG; -    cli(); -    bool has_data = (rbuf_head != rbuf_tail); -    SREG = sreg; -    return has_data; +  bool has_data; +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +    has_data = (rbuf_head != rbuf_tail); +  } +  return has_data;  }  static inline void rbuf_clear(void)  { -    uint8_t sreg = SREG; -    cli(); +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {      rbuf_head = rbuf_tail = 0; -    SREG = sreg; +  }  }  #endif  /* RING_BUFFER_H */ diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f13351ea1..e4c8aecb2 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -15,6 +15,29 @@  # Carlos Lamas  # +# Enable vpath seraching for source files only +# Without this, output files, could be read from the wrong .build directories +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 @@ -24,55 +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 - -ifdef quick -	QUICK = $(quick) -endif - -QUICK ?= false  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) && false -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break -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)) -  # Compiler flag to set the C Standard level.  #     c89   = "ANSI" C @@ -83,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 += + @@ -121,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++ ---------------- @@ -148,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. @@ -164,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 @@ -196,6 +161,7 @@ SCANF_LIB =  MATH_LIB = -lm +CREATE_MAP ?= yes  #---------------- Linker Options ---------------- @@ -206,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)) @@ -223,63 +192,20 @@ 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)))) - -# 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 -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d +GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)  # Combine all necessary flags and optional flags.  # Add target processor to flags.  # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS)  ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) -# Default target. -all: build sizeafter - -# Quick make that doesn't clean -quick: 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 +MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)  elf: $(BUILD_DIR)/$(TARGET).elf @@ -290,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 @@ -352,150 +269,114 @@ 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) -%.elf: $(OBJ) | $(BEGIN) +# Note the obj.txt depeendency is there to force linking if a source file is deleted +%.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) $^ --output $@ $(LDFLAGS)) +	$(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. -$(OBJDIR)/%.o : %.c | $(BEGIN) -	@mkdir -p $(@D) -	@$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) -	$(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) -	@$(BUILD_CMD) +$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 $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) +	@$$(BUILD_CMD)  # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp | $(BEGIN) -	@mkdir -p $(@D) -	@$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) -	$(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) -	@$(BUILD_CMD) +$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 $$($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) -# 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) +# 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 $$($1_ASFLAGS) $$< -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) +$1/force: -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S | $(BEGIN) -	@mkdir -p $(@D) -	@$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) -	$(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) -	@$(BUILD_CMD) +$1/cflags.txt: $1/force +	echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@ + +$1/cppflags.txt: $1/force +	echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@ + +$1/asflags.txt: $1/force +	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): +	 + +$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))  # Create preprocessed source for use in sending a bug report.  %.i : %.c | $(BEGIN)  	$(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@  # Target: clean project. -clean:  +clean: +	$(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-quick: $(addsuffix -quick,$(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 -quick, -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-quick: -	$(call make_keyboard_helper,$@,quick) -/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 - -GOAL=$(MAKECMDGOALS) -ifeq ($(MAKECMDGOALS),) -GOAL = all -endif -CLEANING_GOALS=clean clean_list all -ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),) -$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null) -$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR)) -$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR)) -$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi) -$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR)) -endif +	@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) - +$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))  # Include the dependency files. --include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) +-include $(patsubst %.o,%.d,$(OBJ))  # Listing of phony targets. -.PHONY : all quick finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +.PHONY : all finish sizebefore sizeafter gccversion \ +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 diff --git a/tmk_core/tool/chibios/ch-bootloader-jump.patch b/tmk_core/tool/chibios/ch-bootloader-jump.patch index d88657621..c6eb2405c 100644 --- a/tmk_core/tool/chibios/ch-bootloader-jump.patch +++ b/tmk_core/tool/chibios/ch-bootloader-jump.patch @@ -3,114 +3,114 @@ index 51a79bb..42d07bd 100644  --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s  +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s  @@ -105,6 +105,13 @@ - #define CRT0_CALL_DESTRUCTORS               TRUE
 - #endif
 - 
 -+/**
 -+ * @brief   Magic number for jumping to bootloader.
 -+ */
 -+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
 -+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
 -+#endif
 -+
 - /*===========================================================================*/
 - /* Code section.                                                             */
 - /*===========================================================================*/
 + #define CRT0_CALL_DESTRUCTORS               TRUE + #endif +  ++/** ++ * @brief   Magic number for jumping to bootloader. ++ */ ++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) ++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF ++#endif ++ + /*===========================================================================*/ + /* Code section.                                                             */ + /*===========================================================================*/  @@ -124,6 +131,17 @@ -                 .thumb_func
 -                 .global Reset_Handler
 - Reset_Handler:
 -+
 -+#ifdef STM32_BOOTLOADER_ADDRESS
 -+                /* jump to bootloader code */
 -+                ldr        r0, =__ram0_end__-4
 -+                ldr        r1, =MAGIC_BOOTLOADER_NUMBER
 -+                ldr        r2, [r0, #0]
 -+                str        r0, [r0, #0] /* erase stored magic */
 -+                cmp        r2, r1
 -+                beq        Bootloader_Jump
 -+#endif /* STM32_BOOTLOADER_ADDRESS */
 -+
 -                 /* Interrupts are globally masked initially.*/
 -                 cpsid   i
 - 
 +                 .thumb_func +                 .global Reset_Handler + Reset_Handler: ++ ++#ifdef STM32_BOOTLOADER_ADDRESS ++                /* jump to bootloader code */ ++                ldr        r0, =__ram0_end__-4 ++                ldr        r1, =MAGIC_BOOTLOADER_NUMBER ++                ldr        r2, [r0, #0] ++                str        r0, [r0, #0] /* erase stored magic */ ++                cmp        r2, r1 ++                beq        Bootloader_Jump ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ +                 /* Interrupts are globally masked initially.*/ +                 cpsid   i +   @@ -242,6 +260,21 @@ endfiniloop: -                 ldr     r1, =__default_exit
 -                 bx      r1
 - 
 -+#ifdef STM32_BOOTLOADER_ADDRESS
 -+/*
 -+ * Jump-to-bootloader function.
 -+ */
 -+
 -+                .align  2
 -+                .thumb_func
 -+Bootloader_Jump:
 -+                ldr     r0, =STM32_BOOTLOADER_ADDRESS
 -+                ldr     r1, [r0, #0]
 -+                mov     sp, r1
 -+                ldr     r0, [r0, #4]
 -+                bx      r0
 -+#endif /* STM32_BOOTLOADER_ADDRESS */
 -+
 - #endif
 - 
 - /** @} */
 +                 ldr     r1, =__default_exit +                 bx      r1 +  ++#ifdef STM32_BOOTLOADER_ADDRESS ++/* ++ * Jump-to-bootloader function. ++ */ ++ ++                .align  2 ++                .thumb_func ++Bootloader_Jump: ++                ldr     r0, =STM32_BOOTLOADER_ADDRESS ++                ldr     r1, [r0, #0] ++                mov     sp, r1 ++                ldr     r0, [r0, #4] ++                bx      r0 ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + #endif +  + /** @} */  diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s  index 4812a29..dca9f88 100644  --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s  +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s  @@ -140,6 +140,13 @@ - #define CRT0_CPACR_INIT                     0x00F00000
 - #endif
 - 
 -+/**
 -+ * @brief   Magic number for jumping to bootloader.
 -+ */
 -+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
 -+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
 -+#endif
 -+
 - /*===========================================================================*/
 - /* Code section.                                                             */
 - /*===========================================================================*/
 + #define CRT0_CPACR_INIT                     0x00F00000 + #endif +  ++/** ++ * @brief   Magic number for jumping to bootloader. ++ */ ++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) ++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF ++#endif ++ + /*===========================================================================*/ + /* Code section.                                                             */ + /*===========================================================================*/  @@ -164,6 +171,17 @@ -                 .thumb_func
 -                 .global Reset_Handler
 - Reset_Handler:
 -+
 -+#ifdef STM32_BOOTLOADER_ADDRESS
 -+                /* jump to bootloader code */
 -+                ldr        r0, =__ram0_end__-4
 -+                ldr        r1, =MAGIC_BOOTLOADER_NUMBER
 -+                ldr        r2, [r0, #0]
 -+                str        r0, [r0, #0] /* erase stored magic */
 -+                cmp        r2, r1
 -+                beq        Bootloader_Jump
 -+#endif /* STM32_BOOTLOADER_ADDRESS */
 -+
 -                 /* Interrupts are globally masked initially.*/
 -                 cpsid   i
 - 
 +                 .thumb_func +                 .global Reset_Handler + Reset_Handler: ++ ++#ifdef STM32_BOOTLOADER_ADDRESS ++                /* jump to bootloader code */ ++                ldr        r0, =__ram0_end__-4 ++                ldr        r1, =MAGIC_BOOTLOADER_NUMBER ++                ldr        r2, [r0, #0] ++                str        r0, [r0, #0] /* erase stored magic */ ++                cmp        r2, r1 ++                beq        Bootloader_Jump ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ +                 /* Interrupts are globally masked initially.*/ +                 cpsid   i +   @@ -305,6 +323,21 @@ endfiniloop: -                 /* Branching to the defined exit handler.*/
 -                 b       __default_exit
 - 
 -+#ifdef STM32_BOOTLOADER_ADDRESS
 -+/*
 -+ * Jump-to-bootloader function.
 -+ */
 -+
 -+                .align  2
 -+                .thumb_func
 -+Bootloader_Jump:
 -+                ldr     r0, =STM32_BOOTLOADER_ADDRESS
 -+                ldr     r1, [r0, #0]
 -+                mov     sp, r1
 -+                ldr     r0, [r0, #4]
 -+                bx      r0
 -+#endif /* STM32_BOOTLOADER_ADDRESS */
 -+
 - #endif /* !defined(__DOXYGEN__) */
 - 
 - /** @} */
 +                 /* Branching to the defined exit handler.*/ +                 b       __default_exit +  ++#ifdef STM32_BOOTLOADER_ADDRESS ++/* ++ * Jump-to-bootloader function. ++ */ ++ ++                .align  2 ++                .thumb_func ++Bootloader_Jump: ++                ldr     r0, =STM32_BOOTLOADER_ADDRESS ++                ldr     r1, [r0, #0] ++                mov     sp, r1 ++                ldr     r0, [r0, #4] ++                bx      r0 ++#endif /* STM32_BOOTLOADER_ADDRESS */ ++ + #endif /* !defined(__DOXYGEN__) */ +  + /** @} */  | 
