diff --git a/build_keyboard.mk b/build_keyboard.mk
index 2c86fe55..df025714 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -94,6 +94,23 @@ endif
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE)
+
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
+endif
+
# We can assume a ChibiOS target When MCU_FAMILY is defined , since it's not used for LUFA
ifdef MCU_FAMILY
PLATFORM=CHIBIOS
@@ -233,10 +250,12 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
include $(VISUALIZER_PATH)/visualizer.mk
endif
+ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H)
+
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
$(KEYMAP_OUTPUT)_SRC := $(SRC)
$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) \
--DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(KEYBOARD_FOLDER_1).h\" -DQMK_KEYBOARD_CONFIG_H=\"$(KEYBOARD_PATH_1)/config.h\" \
+-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" -DQMK_KEYBOARD_CONFIG_H=\"$(KEYBOARD_PATH_1)/config.h\" \
-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \
-DQMK_SUBPROJECT -DQMK_SUBPROJECT_H -DQMK_SUBPROJECT_CONFIG_H
$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
diff --git a/keyboards/planck/config.h b/keyboards/planck/config.h
index bc7ec031..452a99d7 100644
--- a/keyboards/planck/config.h
+++ b/keyboards/planck/config.h
@@ -24,7 +24,7 @@ along with this program. If not, see .
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define MANUFACTURER OLKB
-#define PRODUCT The Planck Keyboard
+#define PRODUCT Planck
#define DESCRIPTION A compact ortholinear keyboard
/* key matrix size */
@@ -36,6 +36,11 @@ along with this program. If not, see .
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define UNUSED_PINS
+#define QMK_ESC_OUTPUT F1
+#define QMK_ESC_INPUT D5
+#define QMK_LED E6
+#define QMK_SPEAKER C6
+
#define AUDIO_VOICES
#define C6_AUDIO
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index 48b02de3..87789e1d 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -224,8 +224,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
+ PORTE &= ~(1<<6);
} else {
unregister_code(KC_RSFT);
+ PORTE |= (1<<6);
}
return false;
break;
diff --git a/keyboards/planck/planck.h b/keyboards/planck/planck.h
index 7638b8cc..6bc6a032 100644
--- a/keyboards/planck/planck.h
+++ b/keyboards/planck/planck.h
@@ -32,11 +32,4 @@
#define KEYMAP LAYOUT_planck_grid
#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
-#ifdef KEYBOARD_planck_rev3
- #include "rev3.h"
-#endif
-#ifdef KEYBOARD_planck_rev4
- #include "rev4.h"
-#endif
-
#endif
diff --git a/keyboards/planck/rev3/rev3.c b/keyboards/planck/rev3/rev3.c
deleted file mode 100644
index 9ccd1d88..00000000
--- a/keyboards/planck/rev3/rev3.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "rev3.h"
\ No newline at end of file
diff --git a/keyboards/planck/rev3/rev3.h b/keyboards/planck/rev3/rev3.h
deleted file mode 100644
index 50a09741..00000000
--- a/keyboards/planck/rev3/rev3.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef REV3_H
-#define REV3_H
-
-#include "planck.h"
-
-#endif
\ No newline at end of file
diff --git a/keyboards/planck/rev4/rev4.c b/keyboards/planck/rev4/rev4.c
deleted file mode 100644
index 98a75d2e..00000000
--- a/keyboards/planck/rev4/rev4.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "rev4.h"
\ No newline at end of file
diff --git a/keyboards/planck/rev4/rev4.h b/keyboards/planck/rev4/rev4.h
deleted file mode 100644
index 74ec0546..00000000
--- a/keyboards/planck/rev4/rev4.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef REV4_H
-#define REV4_H
-
-#include "planck.h"
-
-#endif
\ No newline at end of file
diff --git a/keyboards/planck/rev5/config.h b/keyboards/planck/rev5/config.h
new file mode 100644
index 00000000..696eda73
--- /dev/null
+++ b/keyboards/planck/rev5/config.h
@@ -0,0 +1,8 @@
+#ifndef REV5_CONFIG_H
+#define REV5_CONFIG_H
+
+#include "config_common.h"
+
+#define DEVICE_VER 0x0005
+
+#endif
\ No newline at end of file
diff --git a/keyboards/planck/rev5/info.json b/keyboards/planck/rev5/info.json
new file mode 100644
index 00000000..3d984961
--- /dev/null
+++ b/keyboards/planck/rev5/info.json
@@ -0,0 +1,3 @@
+{
+ "identifier": "FEED:6060:0005"
+}
\ No newline at end of file
diff --git a/keyboards/planck/rev5/rules.mk b/keyboards/planck/rev5/rules.mk
new file mode 100644
index 00000000..3b22e0a0
--- /dev/null
+++ b/keyboards/planck/rev5/rules.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = yes # Audio output on port C6
\ No newline at end of file
diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk
index 27753cfd..df575cd6 100644
--- a/keyboards/planck/rules.mk
+++ b/keyboards/planck/rules.mk
@@ -69,4 +69,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
LAYOUTS = ortho_4x12 planck_mit planck_grid
-DEFAULT_FOLDER = planck/rev4
+DEFAULT_FOLDER = planck/rev5
diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h
index 74db9202..172fd645 100644
--- a/keyboards/preonic/config.h
+++ b/keyboards/preonic/config.h
@@ -23,9 +23,8 @@ along with this program. If not, see .
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6061
-#define DEVICE_VER 0x0001
#define MANUFACTURER OLKB
-#define PRODUCT The Preonic Keyboard
+#define PRODUCT Preonic
#define DESCRIPTION A compact ortholinear keyboard
/* key matrix size */
@@ -37,6 +36,11 @@ along with this program. If not, see .
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define UNUSED_PINS
+#define QMK_ESC_OUTPUT F1
+#define QMK_ESC_INPUT B5
+#define QMK_LED E6
+#define QMK_SPEAKER C6
+
#define AUDIO_VOICES
#define C6_AUDIO
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c
index 01f40542..c9d04958 100644
--- a/keyboards/preonic/keymaps/default/keymap.c
+++ b/keyboards/preonic/keymaps/default/keymap.c
@@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
@@ -138,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
@@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = {
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
- {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL},
{_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
{_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
@@ -212,8 +212,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
+ PORTE &= ~(1<<6);
} else {
unregister_code(KC_RSFT);
+ PORTE |= (1<<6);
}
return false;
break;
diff --git a/keyboards/preonic/rev1/config.h b/keyboards/preonic/rev1/config.h
new file mode 100644
index 00000000..56dfedd4
--- /dev/null
+++ b/keyboards/preonic/rev1/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2017 Jack Humbert
+
+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 .
+*/
+
+#ifndef REV1_CONFIG_H
+#define REV1_CONFIG_H
+
+#include "config_common.h"
+
+#define DEVICE_VER 0x0001
+
+#endif
\ No newline at end of file
diff --git a/keyboards/preonic/rev1/info.json b/keyboards/preonic/rev1/info.json
new file mode 100644
index 00000000..43a7b495
--- /dev/null
+++ b/keyboards/preonic/rev1/info.json
@@ -0,0 +1,3 @@
+{
+ "identifier": "FEED:6061:0001"
+}
\ No newline at end of file
diff --git a/keyboards/preonic/rev1/rules.mk b/keyboards/preonic/rev1/rules.mk
new file mode 100644
index 00000000..e69de29b
diff --git a/keyboards/preonic/rev2/config.h b/keyboards/preonic/rev2/config.h
new file mode 100644
index 00000000..20f11066
--- /dev/null
+++ b/keyboards/preonic/rev2/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2017 Jack Humbert
+
+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 .
+*/
+
+#ifndef REV2_CONFIG_H
+#define REV2_CONFIG_H
+
+#include "config_common.h"
+
+#define DEVICE_VER 0x0002
+
+#endif
\ No newline at end of file
diff --git a/keyboards/preonic/rev2/info.json b/keyboards/preonic/rev2/info.json
new file mode 100644
index 00000000..c8b9b16a
--- /dev/null
+++ b/keyboards/preonic/rev2/info.json
@@ -0,0 +1,3 @@
+{
+ "identifier": "FEED:6061:0002"
+}
\ No newline at end of file
diff --git a/keyboards/preonic/rev2/rules.mk b/keyboards/preonic/rev2/rules.mk
new file mode 100644
index 00000000..e69de29b
diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk
index 51104e68..acef4d97 100644
--- a/keyboards/preonic/rules.mk
+++ b/keyboards/preonic/rules.mk
@@ -55,7 +55,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
+CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
@@ -69,4 +69,6 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = ortho_5x12
\ No newline at end of file
+LAYOUTS = ortho_5x12
+
+DEFAULT_FOLDER = preonic/rev2
\ No newline at end of file
diff --git a/lib/lufa/.gitignore b/lib/lufa/.gitignore
index 9f9d3949..1cd1dccf 100644
--- a/lib/lufa/.gitignore
+++ b/lib/lufa/.gitignore
@@ -13,3 +13,4 @@ Documentation/
LUFA/StudioIntegration/ProjectGenerator/*
LUFA/StudioIntegration/DocBook/*
!LUFA/StudioIntegration/Docbook/mshelp/*
+Keyboard.h
\ No newline at end of file
diff --git a/lib/lufa/Bootloaders/DFU/BootloaderDFU.c b/lib/lufa/Bootloaders/DFU/BootloaderDFU.c
index 928cf6fe..a2307219 100644
--- a/lib/lufa/Bootloaders/DFU/BootloaderDFU.c
+++ b/lib/lufa/Bootloaders/DFU/BootloaderDFU.c
@@ -196,7 +196,7 @@ int main(void)
while (RunBootloader || WaitForExit) {
USB_USBTask();
#if (BOARD == BOARD_QMK)
- bool pressed = (PIN(QMK_ESC_ROW) & NUM(QMK_ESC_ROW));
+ bool pressed = (PIN(QMK_ESC_INPUT) & NUM(QMK_ESC_INPUT));
if ((DFU_State == dfuIDLE) && (keypress > 5000) && pressed) {
break;
}
@@ -231,12 +231,12 @@ static void SetupHardware(void)
MCUCR = (1 << IVSEL);
#if (BOARD == BOARD_QMK)
- // column setup
- DDR(QMK_ESC_COL) |= NUM(QMK_ESC_COL);
- PORT(QMK_ESC_COL) |= NUM(QMK_ESC_COL);
+ // output setup
+ DDR(QMK_ESC_OUTPUT) |= NUM(QMK_ESC_OUTPUT);
+ PORT(QMK_ESC_OUTPUT) |= NUM(QMK_ESC_OUTPUT);
- // row setup
- DDR(QMK_ESC_ROW) |= NUM(QMK_ESC_ROW);
+ // input setup
+ DDR(QMK_ESC_INPUT) |= NUM(QMK_ESC_INPUT);
#endif
/* Initialize the USB and other board hardware drivers */
@@ -265,7 +265,7 @@ static void ResetHardware(void)
MCUCR = 0;
#if (BOARD == BOARD_QMK)
- DDR(QMK_ESC_COL) = PORT(QMK_ESC_COL) = DDR(QMK_ESC_ROW) = PORT(QMK_ESC_ROW) = 0;
+ DDR(QMK_ESC_OUTPUT) = PORT(QMK_ESC_OUTPUT) = DDR(QMK_ESC_INPUT) = PORT(QMK_ESC_INPUT) = 0;
#endif
}
diff --git a/lib/lufa/Bootloaders/DFU/Descriptors.c b/lib/lufa/Bootloaders/DFU/Descriptors.c
index 6b7b6d49..46120781 100644
--- a/lib/lufa/Bootloaders/DFU/Descriptors.c
+++ b/lib/lufa/Bootloaders/DFU/Descriptors.c
@@ -36,6 +36,14 @@
*/
#include "Descriptors.h"
+#include "Keyboard.h"
+
+#ifndef MANUFACTURER
+ #define MANUFACTURER QMK
+#endif
+#ifndef PRODUCT
+ #define PRODUCT Keyboard
+#endif
/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall
* device characteristics, including the supported USB version, control endpoint size and the
@@ -125,13 +133,13 @@ const USB_Descriptor_String_t LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGU
* form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
* Descriptor.
*/
-const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(L"QMK");
+const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(LSTR(MANUFACTURER));
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
* and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
* Descriptor.
*/
-const USB_Descriptor_String_t ProductString = USB_STRING_DESCRIPTOR(L"KB");
+const USB_Descriptor_String_t ProductString = USB_STRING_DESCRIPTOR(LSTR(PRODUCT));
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
* documentation) by the application code so that the address and size of a requested descriptor can be given
diff --git a/lib/lufa/Bootloaders/DFU/Descriptors.h b/lib/lufa/Bootloaders/DFU/Descriptors.h
index 5487f88f..7137d0f1 100644
--- a/lib/lufa/Bootloaders/DFU/Descriptors.h
+++ b/lib/lufa/Bootloaders/DFU/Descriptors.h
@@ -189,6 +189,12 @@
const uint16_t wIndex,
const void** const DescriptorAddress)
ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
+ // convert to L string
+ #define LSTR(s) XLSTR(s)
+ #define XLSTR(s) L ## #s
+ // convert to string
+ #define STR(s) XSTR(s)
+ #define XSTR(s) #s
+
#endif
diff --git a/lib/lufa/LUFA/Drivers/Board/AVR8/QMK/LEDs.h b/lib/lufa/LUFA/Drivers/Board/AVR8/QMK/LEDs.h
index 9fc696be..be66b9ed 100644
--- a/lib/lufa/LUFA/Drivers/Board/AVR8/QMK/LEDs.h
+++ b/lib/lufa/LUFA/Drivers/Board/AVR8/QMK/LEDs.h
@@ -103,10 +103,20 @@ along with this program. If not, see .
#define A6 0x06
#define A7 0x07
- #define QMK_ESC_COL F1
- #define QMK_ESC_ROW D5
- #define QMK_LED E6
- #define QMK_SPEAKER C6
+ #include "Keyboard.h"
+
+ #ifndef QMK_ESC_INPUT
+ #define QMK_ESC_INPUT F1
+ #endif
+ #ifndef QMK_ESC_OUTPUT
+ #define QMK_ESC_OUTPUT D5
+ #endif
+ #ifndef QMK_LED
+ #define QMK_LED E6
+ #endif
+ #ifndef QMK_SPEAKER
+ #define QMK_SPEAKER C6
+ #endif
#define DDR(pin) _SFR_IO8(((pin) >> 4) + 1)
#define PORT(pin) _SFR_IO8(((pin) >> 4) + 2)
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 80e8b2be..94e9a7bd 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -244,3 +244,23 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf
@$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof
+bootloader:
+ make -C lib/lufa/Bootloaders/DFU/ clean
+ echo "#ifndef QMK_KEYBOARD\n#define QMK_KEYBOARD\n" > lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "MANUFACTURER" $(ALL_CONFIGS) -h | tail -1` >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "PRODUCT" $(ALL_CONFIGS) -h | tail -1` Bootloader >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "QMK_ESC_OUTPUT" $(ALL_CONFIGS) -h | tail -1` >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "QMK_ESC_INPUT" $(ALL_CONFIGS) -h | tail -1` >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "QMK_LED" $(ALL_CONFIGS) -h | tail -1` >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo `grep "QMK_SPEAKER" $(ALL_CONFIGS) -h | tail -1` >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ echo "\n#endif" >> lib/lufa/Bootloaders/DFU/Keyboard.h
+ make -C lib/lufa/Bootloaders/DFU/
+ echo "BootloaderDFU.hex copied to $(TARGET)_bootloader.hex"
+ cp lib/lufa/Bootloaders/DFU/BootloaderDFU.hex $(TARGET)_bootloader.hex
+
+production: $(BUILD_DIR)/$(TARGET).hex bootloader
+ @cat $(BUILD_DIR)/$(TARGET).hex | awk '/^:00000001FF/ == 0' > $(TARGET)_production.hex
+ @cat $(TARGET)_bootloader.hex >> $(TARGET)_production.hex
+ echo "File sizes:"
+ $(SIZE) $(TARGET).hex $(TARGET)_bootloader.hex $(TARGET)_production.hex
+