You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.2 KiB
171 lines
4.2 KiB
#!/bin/sh
|
|
|
|
DFU_MODE=0
|
|
CPLD=0
|
|
|
|
get_dfu() {
|
|
if [ -r "/usr/share/hackrf/hackrf_one_usb.dfu" ]; then
|
|
ram_firmware="/usr/share/hackrf/hackrf_one_usb.dfu"
|
|
else
|
|
printf "Unable to find hackrf_one_usb.dfu in the search path\n"
|
|
exit 1
|
|
fi
|
|
export ram_firmware
|
|
}
|
|
|
|
get_cpld() {
|
|
if [ -r "/usr/share/hackrf/hackrf_cpld_default.xsvf" ]; then
|
|
cpld="/usr/share/hackrf/hackrf_cpld_default.xsvf"
|
|
else
|
|
printf "Unable to find default.xsvf in the search path\n"
|
|
exit 1
|
|
fi
|
|
export cpld
|
|
}
|
|
|
|
usage() {
|
|
printf "hackrf_easy_flash list\n"
|
|
printf "hackrf_easy_flash upgrade\n"
|
|
}
|
|
|
|
if [ -z "${1}" ]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
list_firmware() {
|
|
if [ ${DFU_MODE} = 1 ]; then
|
|
if [ -z "${ram_firmware}" ]; then
|
|
get_dfu
|
|
fi
|
|
printf "Best DFU found: ${ram_firmware}\n"
|
|
fi
|
|
printf "Available firmware options:\n"
|
|
if [ -r "/usr/share/hackrf/hackrf_one_usb.bin" ]; then
|
|
printf "hackrf (default)\n"
|
|
fi
|
|
if [ -r "/usr/share/hackrf/portapack-h1-firmware.bin" ]; then
|
|
printf "portapack (--portapack)\n"
|
|
fi
|
|
if [ -r "/usr/share/hackrf/portapack-h1-havoc.bin" ]; then
|
|
printf "portapack-havoc (--havoc)\n"
|
|
fi
|
|
if [ -r "/usr/share/hackrf/portapack-h1_h2-mayhem.bin" ]; then
|
|
printf "portapack-mayhem (--mayhem)\n"
|
|
fi
|
|
}
|
|
|
|
#parse args
|
|
while [ -n "${1}" ]; do
|
|
case $1 in
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
list|--list)
|
|
list_firmware
|
|
exit 0
|
|
;;
|
|
update|--update|upgrade|--upgrade|hackrf|--hackrf)
|
|
firmware="/usr/share/hackrf/hackrf_one_usb.bin"
|
|
TARGET=hackrf
|
|
shift
|
|
;;
|
|
portapack|--portapack)
|
|
firmware="/usr/share/hackrf/portapack-h1-firmware.bin"
|
|
TARGET=portapack
|
|
shift
|
|
;;
|
|
havoc|--havoc)
|
|
firmware="/usr/share/hackrf/portapack-h1-havoc.bin"
|
|
TARGET=havoc
|
|
shift
|
|
;;
|
|
mayhem|--mayhem)
|
|
firmware="/usr/share/hackrf/portapack-h1_h2-mayhem.bin"
|
|
TARGET=mayhem
|
|
shift
|
|
;;
|
|
cpld|--cpld)
|
|
CPLD=1
|
|
get_cpld
|
|
shift
|
|
;;
|
|
dfu|--dfu)
|
|
DFU_MODE=1
|
|
get_dfu
|
|
shift
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${firmware}" ]; then
|
|
firmware="/usr/share/hackrf/hackrf_one_usb.bin"
|
|
TARGET="hackrf"
|
|
fi
|
|
|
|
if [ ! -r "${firmware}" ]; then
|
|
printf "Unable to find or read ${firmware}\n"
|
|
printf "Please ensure the requested firmware is installed and readable\n"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${CPLD}" = 1 ] && [ "${TARGET}" != "hackrf" ]; then
|
|
printf "To update the CPLD you must use the stock hackrf firmware or do this update manually\n"
|
|
printf "Try \"$(basename $0) --cpld && $(basename $0) ${TARGET}\"\n"
|
|
exit 1
|
|
fi
|
|
|
|
printf "This tool is provided by Gentoo, please report bugs on https://bugs.gentoo.org/\n\n"
|
|
if [ ${DFU_MODE} = 1 ]; then
|
|
printf "Preparing to reset hackrf with DFU ${ram_firmware}\n"
|
|
printf "Then flashing with ${firmware}\n\n"
|
|
printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
|
|
printf "then plug the HackRF into a USB port on your computer.\n"
|
|
printf "After the HackRF is plugged in, you may release the DFU button.\n"
|
|
printf "Press any key to continue or ^c to abort\n"
|
|
read
|
|
if ! dfu-util --device 1fc9:000c --download "${ram_firmware}" --reset; then
|
|
printf "dfu-util reported failure, quitting\n"
|
|
exit 1
|
|
fi
|
|
sleep 2s
|
|
else
|
|
if hackrf_info | grep -q 'No HackRF boards found.'; then
|
|
printf "No hackrf found, please ensure you are in hackrf mode or try --dfu\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
if hackrf_spiflash -w "${firmware}"; then
|
|
sleep 3s
|
|
hackrf_spiflash -R
|
|
sleep 3s
|
|
else
|
|
printf "hackrf_spiflash reported failure, quitting\n"
|
|
exit 1
|
|
fi
|
|
if [ "${CPLD}" = 1 ]; then
|
|
#printf "To update the cpld, please reset your hackrf into it's new firmware before updating the cpld\n"
|
|
#printf "Please reset your hackrf by pressing the button furthest from the antenna or power cycling it.\n"
|
|
#printf "Press any key to continue or ^c to abort\n"
|
|
#read
|
|
if hackrf_cpldjtag -x "${cpld}"; then
|
|
sleep 3s
|
|
hackrf_spiflash -R
|
|
else
|
|
printf "hackrf_cpldjtag reported failure\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [ "${TARGET}" = "hackrf" ]; then
|
|
hackrf_info
|
|
fi
|
|
printf "If you saw no errors, you are up to date with the requested firmware\n"
|