aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-08-15 21:55:23 +0100
committerGitHub <noreply@github.com>2021-08-15 21:55:23 +0100
commitab941ce614e19a7f4bb5bd34dd0ab9eee86bdc27 (patch)
treeff8bfefacffaac38893dd423d018c84068258bd1
parent4e3726bfe11b02757c5724211d2a0fc62c7f66e8 (diff)
downloadqmk_firmware-ab941ce614e19a7f4bb5bd34dd0ab9eee86bdc27.tar.gz
qmk_firmware-ab941ce614e19a7f4bb5bd34dd0ab9eee86bdc27.zip
Move all the flash logic from tmk_core (#13927)
-rw-r--r--build_keyboard.mk1
-rw-r--r--platforms/arm_atsam/flash.mk11
-rw-r--r--platforms/avr/flash.mk179
-rw-r--r--platforms/chibios/flash.mk87
-rw-r--r--tmk_core/arm_atsam.mk7
-rw-r--r--tmk_core/avr.mk175
-rw-r--r--tmk_core/chibios.mk87
7 files changed, 278 insertions, 269 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 38ca2aaa9..262bfd9a7 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -375,6 +375,7 @@ ifneq ($(strip $(PROTOCOL)),)
375else 375else
376 include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk 376 include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
377endif 377endif
378-include $(TOP_DIR)/platforms/$(PLATFORM_KEY)/flash.mk
378 379
379# TODO: remove this bodge? 380# TODO: remove this bodge?
380PROJECT_DEFS := $(OPT_DEFS) 381PROJECT_DEFS := $(OPT_DEFS)
diff --git a/platforms/arm_atsam/flash.mk b/platforms/arm_atsam/flash.mk
new file mode 100644
index 000000000..444ba77f5
--- /dev/null
+++ b/platforms/arm_atsam/flash.mk
@@ -0,0 +1,11 @@
1# Hey Emacs, this is a -*- makefile -*-
2##############################################################################
3# Architecture or project specific options
4#
5
6flash: bin
7ifneq ($(strip $(PROGRAM_CMD)),)
8 $(PROGRAM_CMD)
9else
10 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_ARCH)"
11endif
diff --git a/platforms/avr/flash.mk b/platforms/avr/flash.mk
new file mode 100644
index 000000000..e679bf0ac
--- /dev/null
+++ b/platforms/avr/flash.mk
@@ -0,0 +1,179 @@
1# Hey Emacs, this is a -*- makefile -*-
2##############################################################################
3# Architecture or project specific options
4#
5
6# Autodetect teensy loader
7ifndef TEENSY_LOADER_CLI
8 ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
9 TEENSY_LOADER_CLI ?= teensy-loader-cli
10 else
11 TEENSY_LOADER_CLI ?= teensy_loader_cli
12 endif
13endif
14
15define EXEC_TEENSY
16 $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
17endef
18
19teensy: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
20 $(call EXEC_TEENSY)
21
22DFU_PROGRAMMER ?= dfu-programmer
23GREP ?= grep
24
25define EXEC_DFU
26 if [ "$(1)" ]; then \
27 echo "Flashing '$(1)' for EE_HANDS split keyboard support." ;\
28 fi; \
29 if ! $(DFU_PROGRAMMER) $(MCU) get bootloader-version >/dev/null 2>/dev/null; then\
30 printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
31 sleep $(BOOTLOADER_RETRY_TIME) ;\
32 while ! $(DFU_PROGRAMMER) $(MCU) get bootloader-version >/dev/null 2>/dev/null; do\
33 printf "." ;\
34 sleep $(BOOTLOADER_RETRY_TIME) ;\
35 done ;\
36 printf "\n" ;\
37 fi; \
38 $(DFU_PROGRAMMER) $(MCU) get bootloader-version ;\
39 if $(DFU_PROGRAMMER) --version 2>&1 | $(GREP) -q 0.7 ; then\
40 $(DFU_PROGRAMMER) $(MCU) erase --force; \
41 if [ "$(1)" ]; then \
42 $(DFU_PROGRAMMER) $(MCU) flash --force --eeprom $(QUANTUM_PATH)/split_common/$(1);\
43 fi; \
44 $(DFU_PROGRAMMER) $(MCU) flash --force $(BUILD_DIR)/$(TARGET).hex;\
45 else \
46 $(DFU_PROGRAMMER) $(MCU) erase; \
47 if [ "$(1)" ]; then \
48 $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(QUANTUM_PATH)/split_common/$(1);\
49 fi; \
50 $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex;\
51 fi; \
52 $(DFU_PROGRAMMER) $(MCU) reset
53endef
54
55dfu: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
56 $(call EXEC_DFU)
57
58dfu-start:
59 $(DFU_PROGRAMMER) $(MCU) reset
60 $(DFU_PROGRAMMER) $(MCU) start
61
62dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep
63 if $(DFU_PROGRAMMER) --version 2>&1 | $(GREP) -q 0.7 ; then\
64 $(DFU_PROGRAMMER) $(MCU) flash --force --eeprom $(BUILD_DIR)/$(TARGET).eep;\
65 else\
66 $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep;\
67 fi
68 $(DFU_PROGRAMMER) $(MCU) reset
69
70dfu-split-left: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
71 $(call EXEC_DFU,eeprom-lefthand.eep)
72
73dfu-split-right: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
74 $(call EXEC_DFU,eeprom-righthand.eep)
75
76AVRDUDE_PROGRAMMER ?= avrdude
77
78define EXEC_AVRDUDE
79 list_devices() { \
80 if $(GREP) -q -s icrosoft /proc/version; then \
81 wmic.exe path Win32_SerialPort get DeviceID 2>/dev/null | LANG=C perl -pne 's/COM(\d+)/COM.($$1-1)/e' | sed 's!COM!/dev/ttyS!' | xargs echo -n | sort; \
82 elif [ "`uname`" = "FreeBSD" ]; then \
83 ls /dev/tty* | grep -v '\.lock$$' | grep -v '\.init$$'; \
84 else \
85 ls /dev/tty*; \
86 fi; \
87 }; \
88 USB= ;\
89 printf "Waiting for USB serial port - reset your controller now (Ctrl+C to cancel)"; \
90 TMP1=`mktemp`; \
91 TMP2=`mktemp`; \
92 list_devices > $$TMP1; \
93 while [ -z "$$USB" ]; do \
94 sleep $(BOOTLOADER_RETRY_TIME); \
95 printf "."; \
96 list_devices > $$TMP2; \
97 USB=`comm -13 $$TMP1 $$TMP2 | $(GREP) -o '/dev/tty.*'`; \
98 mv $$TMP2 $$TMP1; \
99 done; \
100 rm $$TMP1; \
101 echo ""; \
102 echo "Device $$USB has appeared; assuming it is the controller."; \
103 if $(GREP) -q -s 'MINGW\|MSYS\|icrosoft' /proc/version; then \
104 USB=`echo "$$USB" | LANG=C perl -pne 's/\/dev\/ttyS(\d+)/COM.($$1+1)/e'`; \
105 echo "Remapped USB port to $$USB"; \
106 sleep 1; \
107 else \
108 printf "Waiting for $$USB to become writable."; \
109 while [ ! -w "$$USB" ]; do sleep $(BOOTLOADER_RETRY_TIME); printf "."; done; echo ""; \
110 fi; \
111 if [ -z "$(1)" ]; then \
112 $(AVRDUDE_PROGRAMMER) -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \
113 else \
114 $(AVRDUDE_PROGRAMMER) -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex -U eeprom:w:$(QUANTUM_PATH)/split_common/$(1); \
115 fi
116endef
117
118avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
119 $(call EXEC_AVRDUDE)
120
121avrdude-loop: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
122 while true; do \
123 $(call EXEC_AVRDUDE) ; \
124 done
125
126avrdude-split-left: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
127 $(call EXEC_AVRDUDE,eeprom-lefthand.eep)
128
129avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
130 $(call EXEC_AVRDUDE,eeprom-righthand.eep)
131
132define EXEC_USBASP
133 $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex
134endef
135
136usbasp: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
137 $(call EXEC_USBASP)
138
139BOOTLOADHID_PROGRAMMER ?= bootloadHID
140
141define EXEC_BOOTLOADHID
142 # bootloadHid executable has no cross platform detect methods
143 # so keep running bootloadHid if the output contains "The specified device was not found"
144 until $(BOOTLOADHID_PROGRAMMER) -r $(BUILD_DIR)/$(TARGET).hex 2>&1 | tee /dev/stderr | grep -v "device was not found"; do\
145 printf "$(MSG_BOOTLOADER_NOT_FOUND)" ;\
146 sleep 5 ;\
147 done
148endef
149
150bootloadHID: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
151 $(call EXEC_BOOTLOADHID)
152
153HID_BOOTLOADER_CLI ?= hid_bootloader_cli
154
155define EXEC_HID_LUFA
156 $(HID_BOOTLOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
157endef
158
159hid_bootloader: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
160 $(call EXEC_HID_LUFA)
161
162flash: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
163ifneq ($(strip $(PROGRAM_CMD)),)
164 $(PROGRAM_CMD)
165else ifeq ($(strip $(BOOTLOADER)), caterina)
166 $(call EXEC_AVRDUDE)
167else ifeq ($(strip $(BOOTLOADER)), halfkay)
168 $(call EXEC_TEENSY)
169else ifeq (dfu,$(findstring dfu,$(BOOTLOADER)))
170 $(call EXEC_DFU)
171else ifeq ($(strip $(BOOTLOADER)), USBasp)
172 $(call EXEC_USBASP)
173else ifeq ($(strip $(BOOTLOADER)), bootloadHID)
174 $(call EXEC_BOOTLOADHID)
175else ifeq ($(strip $(BOOTLOADER)), qmk-hid)
176 $(call EXEC_HID_LUFA)
177else
178 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
179endif
diff --git a/platforms/chibios/flash.mk b/platforms/chibios/flash.mk
new file mode 100644
index 000000000..46aff6e4b
--- /dev/null
+++ b/platforms/chibios/flash.mk
@@ -0,0 +1,87 @@
1# Hey Emacs, this is a -*- makefile -*-
2##############################################################################
3# Architecture or project specific options
4#
5
6DFU_ARGS ?=
7ifneq ("$(SERIAL)","")
8 DFU_ARGS += -S $(SERIAL)
9endif
10
11DFU_UTIL ?= dfu-util
12
13define EXEC_DFU_UTIL
14 if ! $(DFU_UTIL) -l | grep -q "Found DFU"; then \
15 printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
16 sleep $(BOOTLOADER_RETRY_TIME) ;\
17 while ! $(DFU_UTIL) -l | grep -q "Found DFU"; do \
18 printf "." ;\
19 sleep $(BOOTLOADER_RETRY_TIME) ;\
20 done ;\
21 printf "\n" ;\
22 fi
23 $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
24endef
25
26dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
27 $(call EXEC_DFU_UTIL)
28
29# TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
30# within the emulated eeprom via dfu-util or another tool
31ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left))
32 OPT_DEFS += -DINIT_EE_HANDS_LEFT
33endif
34
35ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right))
36 OPT_DEFS += -DINIT_EE_HANDS_RIGHT
37endif
38
39dfu-util-split-left: dfu-util
40
41dfu-util-split-right: dfu-util
42
43ST_LINK_CLI ?= st-link_cli
44ST_LINK_ARGS ?=
45
46st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
47 $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
48
49ST_FLASH ?= st-flash
50ST_FLASH_ARGS ?=
51
52st-flash: $(BUILD_DIR)/$(TARGET).hex sizeafter
53 $(ST_FLASH) $(ST_FLASH_ARGS) --reset --format ihex write $(BUILD_DIR)/$(TARGET).hex
54
55# Autodetect teensy loader
56ifndef TEENSY_LOADER_CLI
57 ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
58 TEENSY_LOADER_CLI ?= teensy-loader-cli
59 else
60 TEENSY_LOADER_CLI ?= teensy_loader_cli
61 endif
62endif
63
64TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT)
65
66define EXEC_TEENSY
67 $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
68endef
69
70teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
71 $(call EXEC_TEENSY)
72
73
74flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
75ifneq ($(strip $(PROGRAM_CMD)),)
76 $(PROGRAM_CMD)
77else ifeq ($(strip $(BOOTLOADER)),kiibohd)
78 $(call EXEC_DFU_UTIL)
79else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
80 $(call EXEC_TEENSY)
81else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062)
82 $(call EXEC_TEENSY)
83else ifeq ($(strip $(MCU_FAMILY)),STM32)
84 $(call EXEC_DFU_UTIL)
85else
86 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
87endif
diff --git a/tmk_core/arm_atsam.mk b/tmk_core/arm_atsam.mk
index e4bf60e1a..e9bdc2c3c 100644
--- a/tmk_core/arm_atsam.mk
+++ b/tmk_core/arm_atsam.mk
@@ -54,10 +54,3 @@ EXTRALIBDIRS =
54bin: $(BUILD_DIR)/$(TARGET).hex 54bin: $(BUILD_DIR)/$(TARGET).hex
55 $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin 55 $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
56 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; 56 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
57
58flash: bin
59ifneq ($(strip $(PROGRAM_CMD)),)
60 $(PROGRAM_CMD)
61else
62 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_ARCH)"
63endif
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index a44e15700..d7bee6d34 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -89,162 +89,6 @@ DEBUG_PORT = 4242
89DEBUG_HOST = localhost 89DEBUG_HOST = localhost
90 90
91#============================================================================ 91#============================================================================
92# Autodetect teensy loader
93ifndef TEENSY_LOADER_CLI
94 ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
95 TEENSY_LOADER_CLI ?= teensy-loader-cli
96 else
97 TEENSY_LOADER_CLI ?= teensy_loader_cli
98 endif
99endif
100
101define EXEC_TEENSY
102 $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
103endef
104
105teensy: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
106 $(call EXEC_TEENSY)
107
108DFU_PROGRAMMER ?= dfu-programmer
109GREP ?= grep
110
111
112define EXEC_DFU
113 if [ "$(1)" ]; then \
114 echo "Flashing '$(1)' for EE_HANDS split keyboard support." ;\
115 fi; \
116 if ! $(DFU_PROGRAMMER) $(MCU) get bootloader-version >/dev/null 2>/dev/null; then\
117 printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
118 sleep $(BOOTLOADER_RETRY_TIME) ;\
119 while ! $(DFU_PROGRAMMER) $(MCU) get bootloader-version >/dev/null 2>/dev/null; do\
120 printf "." ;\
121 sleep $(BOOTLOADER_RETRY_TIME) ;\
122 done ;\
123 printf "\n" ;\
124 fi; \
125 $(DFU_PROGRAMMER) $(MCU) get bootloader-version ;\
126 if $(DFU_PROGRAMMER) --version 2>&1 | $(GREP) -q 0.7 ; then\
127 $(DFU_PROGRAMMER) $(MCU) erase --force; \
128 if [ "$(1)" ]; then \
129 $(DFU_PROGRAMMER) $(MCU) flash --force --eeprom $(QUANTUM_PATH)/split_common/$(1);\
130 fi; \
131 $(DFU_PROGRAMMER) $(MCU) flash --force $(BUILD_DIR)/$(TARGET).hex;\
132 else \
133 $(DFU_PROGRAMMER) $(MCU) erase; \
134 if [ "$(1)" ]; then \
135 $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(QUANTUM_PATH)/split_common/$(1);\
136 fi; \
137 $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex;\
138 fi; \
139 $(DFU_PROGRAMMER) $(MCU) reset
140endef
141
142dfu: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
143 $(call EXEC_DFU)
144
145dfu-start:
146 $(DFU_PROGRAMMER) $(MCU) reset
147 $(DFU_PROGRAMMER) $(MCU) start
148
149dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep
150 if $(DFU_PROGRAMMER) --version 2>&1 | $(GREP) -q 0.7 ; then\
151 $(DFU_PROGRAMMER) $(MCU) flash --force --eeprom $(BUILD_DIR)/$(TARGET).eep;\
152 else\
153 $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep;\
154 fi
155 $(DFU_PROGRAMMER) $(MCU) reset
156
157dfu-split-left: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
158 $(call EXEC_DFU,eeprom-lefthand.eep)
159
160dfu-split-right: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
161 $(call EXEC_DFU,eeprom-righthand.eep)
162
163AVRDUDE_PROGRAMMER ?= avrdude
164
165define EXEC_AVRDUDE
166 list_devices() { \
167 if $(GREP) -q -s icrosoft /proc/version; then \
168 wmic.exe path Win32_SerialPort get DeviceID 2>/dev/null | LANG=C perl -pne 's/COM(\d+)/COM.($$1-1)/e' | sed 's!COM!/dev/ttyS!' | xargs echo -n | sort; \
169 elif [ "`uname`" = "FreeBSD" ]; then \
170 ls /dev/tty* | grep -v '\.lock$$' | grep -v '\.init$$'; \
171 else \
172 ls /dev/tty*; \
173 fi; \
174 }; \
175 USB= ;\
176 printf "Waiting for USB serial port - reset your controller now (Ctrl+C to cancel)"; \
177 TMP1=`mktemp`; \
178 TMP2=`mktemp`; \
179 list_devices > $$TMP1; \
180 while [ -z "$$USB" ]; do \
181 sleep $(BOOTLOADER_RETRY_TIME); \
182 printf "."; \
183 list_devices > $$TMP2; \
184 USB=`comm -13 $$TMP1 $$TMP2 | $(GREP) -o '/dev/tty.*'`; \
185 mv $$TMP2 $$TMP1; \
186 done; \
187 rm $$TMP1; \
188 echo ""; \
189 echo "Device $$USB has appeared; assuming it is the controller."; \
190 if $(GREP) -q -s 'MINGW\|MSYS\|icrosoft' /proc/version; then \
191 USB=`echo "$$USB" | LANG=C perl -pne 's/\/dev\/ttyS(\d+)/COM.($$1+1)/e'`; \
192 echo "Remapped USB port to $$USB"; \
193 sleep 1; \
194 else \
195 printf "Waiting for $$USB to become writable."; \
196 while [ ! -w "$$USB" ]; do sleep $(BOOTLOADER_RETRY_TIME); printf "."; done; echo ""; \
197 fi; \
198 if [ -z "$(1)" ]; then \
199 $(AVRDUDE_PROGRAMMER) -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \
200 else \
201 $(AVRDUDE_PROGRAMMER) -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex -U eeprom:w:$(QUANTUM_PATH)/split_common/$(1); \
202 fi
203endef
204
205avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
206 $(call EXEC_AVRDUDE)
207
208avrdude-loop: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
209 while true; do \
210 $(call EXEC_AVRDUDE) ; \
211 done
212
213avrdude-split-left: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
214 $(call EXEC_AVRDUDE,eeprom-lefthand.eep)
215
216avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
217 $(call EXEC_AVRDUDE,eeprom-righthand.eep)
218
219define EXEC_USBASP
220 $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex
221endef
222
223usbasp: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
224 $(call EXEC_USBASP)
225
226BOOTLOADHID_PROGRAMMER ?= bootloadHID
227
228define EXEC_BOOTLOADHID
229 # bootloadHid executable has no cross platform detect methods
230 # so keep running bootloadHid if the output contains "The specified device was not found"
231 until $(BOOTLOADHID_PROGRAMMER) -r $(BUILD_DIR)/$(TARGET).hex 2>&1 | tee /dev/stderr | grep -v "device was not found"; do\
232 printf "$(MSG_BOOTLOADER_NOT_FOUND)" ;\
233 sleep 5 ;\
234 done
235endef
236
237bootloadHID: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
238 $(call EXEC_BOOTLOADHID)
239
240HID_BOOTLOADER_CLI ?= hid_bootloader_cli
241
242define EXEC_HID_LUFA
243 $(HID_BOOTLOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
244endef
245
246hid_bootloader: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
247 $(call EXEC_HID_LUFA)
248 92
249# Convert hex to bin. 93# Convert hex to bin.
250bin: $(BUILD_DIR)/$(TARGET).hex 94bin: $(BUILD_DIR)/$(TARGET).hex
@@ -335,22 +179,3 @@ production: $(BUILD_DIR)/$(TARGET).hex bootloader cpfirmware
335 @cat $(TARGET)_bootloader.hex >> $(TARGET)_production.hex 179 @cat $(TARGET)_bootloader.hex >> $(TARGET)_production.hex
336 echo "File sizes:" 180 echo "File sizes:"
337 $(SIZE) $(TARGET).hex $(TARGET)_bootloader.hex $(TARGET)_production.hex 181 $(SIZE) $(TARGET).hex $(TARGET)_bootloader.hex $(TARGET)_production.hex
338
339flash: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
340ifneq ($(strip $(PROGRAM_CMD)),)
341 $(PROGRAM_CMD)
342else ifeq ($(strip $(BOOTLOADER)), caterina)
343 $(call EXEC_AVRDUDE)
344else ifeq ($(strip $(BOOTLOADER)), halfkay)
345 $(call EXEC_TEENSY)
346else ifeq (dfu,$(findstring dfu,$(BOOTLOADER)))
347 $(call EXEC_DFU)
348else ifeq ($(strip $(BOOTLOADER)), USBasp)
349 $(call EXEC_USBASP)
350else ifeq ($(strip $(BOOTLOADER)), bootloadHID)
351 $(call EXEC_BOOTLOADHID)
352else ifeq ($(strip $(BOOTLOADER)), qmk-hid)
353 $(call EXEC_HID_LUFA)
354else
355 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
356endif
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index 7eda36046..827f080e5 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -325,95 +325,8 @@ MCUFLAGS = -mcpu=$(MCU)
325 325
326DEBUG = gdb 326DEBUG = gdb
327 327
328DFU_ARGS ?=
329ifneq ("$(SERIAL)","")
330 DFU_ARGS += -S $(SERIAL)
331endif
332
333ST_LINK_ARGS ?=
334ST_FLASH_ARGS ?=
335
336# List any extra directories to look for libraries here. 328# List any extra directories to look for libraries here.
337EXTRALIBDIRS = $(RULESPATH)/ld 329EXTRALIBDIRS = $(RULESPATH)/ld
338 330
339DFU_UTIL ?= dfu-util
340ST_LINK_CLI ?= st-link_cli
341ST_FLASH ?= st-flash
342
343define EXEC_DFU_UTIL
344 if ! $(DFU_UTIL) -l | grep -q "Found DFU"; then \
345 printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
346 sleep $(BOOTLOADER_RETRY_TIME) ;\
347 while ! $(DFU_UTIL) -l | grep -q "Found DFU"; do \
348 printf "." ;\
349 sleep $(BOOTLOADER_RETRY_TIME) ;\
350 done ;\
351 printf "\n" ;\
352 fi
353 $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
354endef
355
356dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
357 $(call EXEC_DFU_UTIL)
358
359# Legacy alias
360dfu-util-wait: dfu-util
361
362# TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
363# within the emulated eeprom via dfu-util or another tool
364ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left))
365 OPT_DEFS += -DINIT_EE_HANDS_LEFT
366endif
367
368ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right))
369 OPT_DEFS += -DINIT_EE_HANDS_RIGHT
370endif
371
372dfu-util-split-left: dfu-util
373
374dfu-util-split-right: dfu-util
375
376
377st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
378 $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
379
380st-flash: $(BUILD_DIR)/$(TARGET).hex sizeafter
381 $(ST_FLASH) $(ST_FLASH_ARGS) --reset --format ihex write $(BUILD_DIR)/$(TARGET).hex
382
383
384# Autodetect teensy loader
385ifndef TEENSY_LOADER_CLI
386 ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
387 TEENSY_LOADER_CLI ?= teensy-loader-cli
388 else
389 TEENSY_LOADER_CLI ?= teensy_loader_cli
390 endif
391endif
392
393TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT)
394
395define EXEC_TEENSY
396 $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
397endef
398
399teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
400 $(call EXEC_TEENSY)
401
402bin: $(BUILD_DIR)/$(TARGET).bin sizeafter 331bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
403 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; 332 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
404
405
406flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
407ifneq ($(strip $(PROGRAM_CMD)),)
408 $(PROGRAM_CMD)
409else ifeq ($(strip $(BOOTLOADER)),kiibohd)
410 $(call EXEC_DFU_UTIL)
411else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
412 $(call EXEC_TEENSY)
413else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062)
414 $(call EXEC_TEENSY)
415else ifeq ($(strip $(MCU_FAMILY)),STM32)
416 $(call EXEC_DFU_UTIL)
417else
418 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
419endif