diff options
Diffstat (limited to 'platforms')
| -rw-r--r-- | platforms/arm_atsam/flash.mk | 11 | ||||
| -rw-r--r-- | platforms/avr/flash.mk | 179 | ||||
| -rw-r--r-- | platforms/chibios/flash.mk | 87 |
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 | |||
| 6 | flash: bin | ||
| 7 | ifneq ($(strip $(PROGRAM_CMD)),) | ||
| 8 | $(PROGRAM_CMD) | ||
| 9 | else | ||
| 10 | $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_ARCH)" | ||
| 11 | endif | ||
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 | ||
| 7 | ifndef 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 | ||
| 13 | endif | ||
| 14 | |||
| 15 | define EXEC_TEENSY | ||
| 16 | $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex | ||
| 17 | endef | ||
| 18 | |||
| 19 | teensy: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 20 | $(call EXEC_TEENSY) | ||
| 21 | |||
| 22 | DFU_PROGRAMMER ?= dfu-programmer | ||
| 23 | GREP ?= grep | ||
| 24 | |||
| 25 | define 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 | ||
| 53 | endef | ||
| 54 | |||
| 55 | dfu: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size | ||
| 56 | $(call EXEC_DFU) | ||
| 57 | |||
| 58 | dfu-start: | ||
| 59 | $(DFU_PROGRAMMER) $(MCU) reset | ||
| 60 | $(DFU_PROGRAMMER) $(MCU) start | ||
| 61 | |||
| 62 | dfu-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 | |||
| 70 | dfu-split-left: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size | ||
| 71 | $(call EXEC_DFU,eeprom-lefthand.eep) | ||
| 72 | |||
| 73 | dfu-split-right: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size | ||
| 74 | $(call EXEC_DFU,eeprom-righthand.eep) | ||
| 75 | |||
| 76 | AVRDUDE_PROGRAMMER ?= avrdude | ||
| 77 | |||
| 78 | define 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 | ||
| 116 | endef | ||
| 117 | |||
| 118 | avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 119 | $(call EXEC_AVRDUDE) | ||
| 120 | |||
| 121 | avrdude-loop: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 122 | while true; do \ | ||
| 123 | $(call EXEC_AVRDUDE) ; \ | ||
| 124 | done | ||
| 125 | |||
| 126 | avrdude-split-left: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 127 | $(call EXEC_AVRDUDE,eeprom-lefthand.eep) | ||
| 128 | |||
| 129 | avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 130 | $(call EXEC_AVRDUDE,eeprom-righthand.eep) | ||
| 131 | |||
| 132 | define EXEC_USBASP | ||
| 133 | $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex | ||
| 134 | endef | ||
| 135 | |||
| 136 | usbasp: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 137 | $(call EXEC_USBASP) | ||
| 138 | |||
| 139 | BOOTLOADHID_PROGRAMMER ?= bootloadHID | ||
| 140 | |||
| 141 | define 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 | ||
| 148 | endef | ||
| 149 | |||
| 150 | bootloadHID: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 151 | $(call EXEC_BOOTLOADHID) | ||
| 152 | |||
| 153 | HID_BOOTLOADER_CLI ?= hid_bootloader_cli | ||
| 154 | |||
| 155 | define EXEC_HID_LUFA | ||
| 156 | $(HID_BOOTLOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex | ||
| 157 | endef | ||
| 158 | |||
| 159 | hid_bootloader: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 160 | $(call EXEC_HID_LUFA) | ||
| 161 | |||
| 162 | flash: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware | ||
| 163 | ifneq ($(strip $(PROGRAM_CMD)),) | ||
| 164 | $(PROGRAM_CMD) | ||
| 165 | else ifeq ($(strip $(BOOTLOADER)), caterina) | ||
| 166 | $(call EXEC_AVRDUDE) | ||
| 167 | else ifeq ($(strip $(BOOTLOADER)), halfkay) | ||
| 168 | $(call EXEC_TEENSY) | ||
| 169 | else ifeq (dfu,$(findstring dfu,$(BOOTLOADER))) | ||
| 170 | $(call EXEC_DFU) | ||
| 171 | else ifeq ($(strip $(BOOTLOADER)), USBasp) | ||
| 172 | $(call EXEC_USBASP) | ||
| 173 | else ifeq ($(strip $(BOOTLOADER)), bootloadHID) | ||
| 174 | $(call EXEC_BOOTLOADHID) | ||
| 175 | else ifeq ($(strip $(BOOTLOADER)), qmk-hid) | ||
| 176 | $(call EXEC_HID_LUFA) | ||
| 177 | else | ||
| 178 | $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)" | ||
| 179 | endif | ||
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 | |||
| 6 | DFU_ARGS ?= | ||
| 7 | ifneq ("$(SERIAL)","") | ||
| 8 | DFU_ARGS += -S $(SERIAL) | ||
| 9 | endif | ||
| 10 | |||
| 11 | DFU_UTIL ?= dfu-util | ||
| 12 | |||
| 13 | define 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 | ||
| 24 | endef | ||
| 25 | |||
| 26 | dfu-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 | ||
| 31 | ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left)) | ||
| 32 | OPT_DEFS += -DINIT_EE_HANDS_LEFT | ||
| 33 | endif | ||
| 34 | |||
| 35 | ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right)) | ||
| 36 | OPT_DEFS += -DINIT_EE_HANDS_RIGHT | ||
| 37 | endif | ||
| 38 | |||
| 39 | dfu-util-split-left: dfu-util | ||
| 40 | |||
| 41 | dfu-util-split-right: dfu-util | ||
| 42 | |||
| 43 | ST_LINK_CLI ?= st-link_cli | ||
| 44 | ST_LINK_ARGS ?= | ||
| 45 | |||
| 46 | st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter | ||
| 47 | $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst | ||
| 48 | |||
| 49 | ST_FLASH ?= st-flash | ||
| 50 | ST_FLASH_ARGS ?= | ||
| 51 | |||
| 52 | st-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 | ||
| 56 | ifndef 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 | ||
| 62 | endif | ||
| 63 | |||
| 64 | TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT) | ||
| 65 | |||
| 66 | define EXEC_TEENSY | ||
| 67 | $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex | ||
| 68 | endef | ||
| 69 | |||
| 70 | teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter | ||
| 71 | $(call EXEC_TEENSY) | ||
| 72 | |||
| 73 | |||
| 74 | flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter | ||
| 75 | ifneq ($(strip $(PROGRAM_CMD)),) | ||
| 76 | $(PROGRAM_CMD) | ||
| 77 | else ifeq ($(strip $(BOOTLOADER)),kiibohd) | ||
| 78 | $(call EXEC_DFU_UTIL) | ||
| 79 | else ifeq ($(strip $(MCU_FAMILY)),KINETIS) | ||
| 80 | $(call EXEC_TEENSY) | ||
| 81 | else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062) | ||
| 82 | $(call EXEC_TEENSY) | ||
| 83 | else ifeq ($(strip $(MCU_FAMILY)),STM32) | ||
| 84 | $(call EXEC_DFU_UTIL) | ||
| 85 | else | ||
| 86 | $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)" | ||
| 87 | endif | ||
