- Pressed key will remain on the same layer until released regardless of the layer changes that happen in the meantime
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/bash
 | 
						|
# Convenience script for loading firmware onto a dfu type device
 | 
						|
# By default, initiates dfu-util
 | 
						|
 | 
						|
SERIAL_PORT=""
 | 
						|
AUTO_SCREEN_SESSION=""
 | 
						|
PROG_NAME=$(basename $0)
 | 
						|
 | 
						|
# Parse all the command line arguments
 | 
						|
while (( "$#" >= "1" )); do
 | 
						|
	# Scan each argument
 | 
						|
	key="$1"
 | 
						|
	case $key in
 | 
						|
	-a|--autoscreen)
 | 
						|
		AUTO_SCREEN_SESSION="$2"
 | 
						|
		shift
 | 
						|
		;;
 | 
						|
	-f|--fastload)
 | 
						|
		SERIAL_PORT="$2"
 | 
						|
		shift
 | 
						|
		;;
 | 
						|
	-h|--help)
 | 
						|
		echo "Usage: $PROG_NAME [options...]"
 | 
						|
		echo ""
 | 
						|
		echo "Loads the most recent built firmware (@TARGET_BIN@) to the device."
 | 
						|
		echo "  (load.dfu)"
 | 
						|
		echo ""
 | 
						|
		echo "Arguments:"
 | 
						|
		echo " -a, --autoscreen SERIAL_PORT  Use screen on the specified serial port after loading."
 | 
						|
		echo "                               e.g. /dev/ttyACM0"
 | 
						|
		echo " -f, --fastload SERIAL_PORT    Send the reload command to the debug terminal."
 | 
						|
		echo "                               e.g. /dev/ttyACM0"
 | 
						|
		echo "                               NOTE: May not work due to non-functional terminal, or disable remote flashing"
 | 
						|
		echo " -h, --help                    This message."
 | 
						|
		exit 1
 | 
						|
		;;
 | 
						|
	*)
 | 
						|
		echo "INVALID ARG: '$1'"
 | 
						|
		exit 2
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
 | 
						|
	# Shift to the next argument
 | 
						|
	shift
 | 
						|
done
 | 
						|
 | 
						|
# If a SERIAL_PORT was specified set the uC into reflash mode
 | 
						|
# XXX May not be successful if uC is not in a good state (or does not allow remote flashing)
 | 
						|
if [[ "$SERIAL_PORT" != "" ]] && [[ -e "$SERIAL_PORT" ]]; then
 | 
						|
	echo "NOTE: This may fail if the uC is in a bad state or does not support remote flashing"
 | 
						|
	printf "reload\r" > $SERIAL_PORT
 | 
						|
	sleep 2
 | 
						|
fi
 | 
						|
 | 
						|
# Load via dfu-util
 | 
						|
# Used for McHCK based uCs
 | 
						|
if type dfu-util &>/dev/null; then
 | 
						|
	dfu-util -D @TARGET_BIN@
 | 
						|
	EXIT_STATUS=$?
 | 
						|
else
 | 
						|
	echo "dfu-util is required to reprogram the device"
 | 
						|
	exit 3
 | 
						|
fi
 | 
						|
 | 
						|
# Load Screen Session if specified
 | 
						|
if (( "$EXIT_STATUS" == "0" )) && [[ "$AUTO_SCREEN_SESSION" != "" ]]; then
 | 
						|
	if type screen &>/dev/null; then
 | 
						|
		sleep 0.1
 | 
						|
		screen $AUTO_SCREEN_SESSION
 | 
						|
	else
 | 
						|
		echo "screen is not installed"
 | 
						|
		exit 3
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
exit $EXIT_STATUS
 | 
						|
 |