Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Simple script to streamline the process of updating a Retrode's firmware on Linux
#!/bin/sh
# update_retrode.sh
# By: Stephan Sokolow
#
# A simple script to streamline the process of updating a Retrode's firmware
# Linux and reduce the chance of errors.
#
# License: MIT
#
# Usage: ./update_retrode.sh <firmware_file.hex>
show_usage() {
echo "Usage: $0 <firmware_file.hex>"
exit 1
}
error() {
echo "$(tput setaf 1)ERROR:$(tput sgr0) $@"
}
if [ "$#" != 1 ]; then
show_usage
fi
case "$1" in
-h|--help|-?)
show_usage
;;
*.hex)
;; # pass through to the body of the script
*)
error "Please provide a file with a .hex extension."
exit 2
esac
if [ ! -f "$1" ]; then
error "Missing or not a file: $1"
exit 4
fi
if ! type dfu-programmer 1>/dev/null 2>&1; then
error "Could not find 'dfu-programmer'. Please install it and try again."
exit 5
fi
echo "$(tput setaf 3)REMINDER:$(tput sgr0) Make sure you don't try to flash a Retrode 2 with Retrode 1 firmware or vice-versa."
echo
echo "To put the Retrode into programming mode:"
echo
echo "0. Unplug any other flashable AVR devices (eg. Arduino, BlissBox 4-Play)"
echo "1. Hold down RESET (the front button)"
echo "2. Hold down HWB (the back button)"
echo "3. Release RESET"
echo "4. Release HWB"
echo
echo "After doing this, press Enter and your device will be reprogrammed..."
read _
if ! dfu-programmer at90usb646 get product-revision > /dev/null 2>&1; then
error "Could not find your Retrode"
echo "This is typically caused by one of two things:"
echo
echo "1. You didn't successfully put it into programming mode"
echo "2. Your system may require you to run this via 'sudo' to grant "
echo " dfu-programmer permission to reprogram devices."
exit 3
fi
echo "Erasing existing firmware..."
dfu-programmer at90usb646 erase &&
echo "Writing new firmware..." &&
dfu-programmer at90usb646 flash "$1" &&
echo "$(tput setaf 2)PROGRAMMING COMPLETE.$(tput sgr0) Please press RESET (the front button) on your Retrode"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment