DFU_PROGRAMMER ?= dfu-programmer
-dfu: $(BUILD_DIR)/$(TARGET).hex check-size
+dfu: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
until $(DFU_PROGRAMMER) $(MCU) get bootloader-version; do\
echo "Error: Bootloader not found. Trying again in 5s." ;\
sleep 5 ;\
if grep -q -s Microsoft /proc/version; then \
echo 'ERROR: AVR flashing cannot be automated within the Windows Subsystem for Linux (WSL) currently. Instead, take the .hex file generated and flash it using AVRDUDE, AVRDUDESS, or XLoader.'; \
else \
+ printf "Detecting USB port, reset your controller now."; \
ls /dev/tty* > /tmp/1; \
- echo "Detecting USB port, reset your controller now.\c"; \
while [ -z $$USB ]; do \
- sleep 1; \
- echo ".\c"; \
+ sleep 0.5; \
+ printf "."; \
ls /dev/tty* > /tmp/2; \
- USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
+ USB=`comm -13 /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
+ mv /tmp/2 /tmp/1; \
done; \
echo ""; \
echo "Detected controller on USB port at $$USB"; \
+ if grep -q -s 'MINGW\|MSYS' /proc/version; then \
+ USB=`echo "$$USB" | perl -pne 's/\/dev\/ttyS(\d+)/COM.($$1+1)/e'`; \
+ echo "Remapped MSYS2 USB port to $$USB"; \
+ fi; \
sleep 1; \
avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \
fi