aboutsummaryrefslogtreecommitdiff
path: root/platforms
diff options
context:
space:
mode:
Diffstat (limited to 'platforms')
-rw-r--r--platforms/arm_atsam/flash.mk11
-rw-r--r--platforms/avr/flash.mk179
-rw-r--r--platforms/chibios/flash.mk87
3 files changed, 277 insertions, 0 deletions
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