#!/bin/sh # This script is inspired from ./openocd.sh, and from both flash_dfu.sh and # fwversion.sh, included in arduino101-factory_recovery-flashpack.tar.bz2, # which is available from https://downloadcenter.intel.com/download/25470 DFUUTIL_EXE=${DFUUTIL:-dfu-util} DFUUTIL_CMD="$DFUUTIL_EXE -d,$DFUUTIL_PID" test_exe() { if ! which $DFUUTIL_EXE >/dev/null 2>&1; then echo "Error: Unable to locate dfu-util executable: $DFUUTIL_EXE" exit 1 fi } test_img() { if [ ! -f "$DFUUTIL_IMG" ]; then echo "Error: Unable to locate binary image: $DFUUTIL_IMG" exit 1 fi } find_dfu() { $DFUUTIL_CMD -l |grep "$DFUUTIL_ALT" >/dev/null 2>&1 } do_flash() { test_exe test_img # Wait until DFU device is ready reset_dfu=0 if ! find_dfu; then reset_dfu=1 echo "Please reset your board to switch to DFU mode..." until find_dfu; do sleep 0.1 done fi # Flash DFU device with specified image # Do NOT reset with -R, to avoid random 'error resetting after download' $DFUUTIL_CMD -a $DFUUTIL_ALT -D $DFUUTIL_IMG ok=$? if [ $ok -eq 0 -a $reset_dfu -eq 1 ]; then echo "Now reset your board again to switch back to runtime mode." fi return $ok } CMD=$1 shift case "$CMD" in flash) do_flash "$@" ;; *) echo "Unsupported command '$CMD'" exit 1 ;; esac