diff --git a/linux/maple_upload.sh b/linux/maple_upload.sh index 6f767332e..df751aae4 100755 --- a/linux/maple_upload.sh +++ b/linux/maple_upload.sh @@ -1,6 +1,6 @@ #!/bin/bash -#set -e +set -e if [ $# -lt 4 ]; then echo "Usage: $0 $# " >&2 @@ -24,16 +24,41 @@ DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # This value is in milliseonds # You may need to tune this to your system # 750ms to 1500ms seems to work on my Mac +# This is less critical now that we automatically retry dfu-util -"${DIR}/upload-reset" "${dummy_port_fullpath}" 750 +if ! "${DIR}/upload-reset" "${dummy_port_fullpath}" 750; then + echo "****************************************" >&2 + echo "* Could not automatically reset device *" >&2 + echo "* Please manually reset device! *" >&2 + echo "****************************************" >&2 + sleep 2 # Wait for user to see message. +fi -"${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" ${dfuse_addr} -R +COUNTER=5 +while + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" ${dfuse_addr} -R + ((ret = $?)) +do + if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then + # I/O error, probably because no DFU device was found + echo "Trying ${COUNTER} more time(s)" >&2 + sleep 1 + else + exit $ret + fi +done -echo -n Waiting for "${dummy_port_fullpath}" serial... +echo -n "Waiting for ${dummy_port_fullpath} serial..." >&2 -COUNTER=0 -while [ ! -r "${dummy_port_fullpath}" ] && ((COUNTER++ < 40)); do +COUNTER=40 +while [ ! -r "${dummy_port_fullpath}" ] && ((COUNTER--)); do + echo -n "." >&2 sleep 0.1 done -echo Done +if [ $COUNTER -eq -1 ]; then + echo " Timed out." >&2 + exit 1 +else + echo " Done." >&2 +fi diff --git a/macosx/dfu-util.sh b/macosx/dfu-util.sh new file mode 100644 index 000000000..77bd42617 --- /dev/null +++ b/macosx/dfu-util.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Get the directory where the script is running. +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +DFU_UTIL=${DIR}/dfu-util/dfu-util +if [ ! -x "${DFU_UTIL}" ]; then + DFU_UTIL=/opt/local/bin/dfu-util +fi + +# Not found! +if [ ! -x "${DFU_UTIL}" ]; then + echo "$0: error: cannot find ${DFU_UTIL}" >&2 + exit 2 +fi + +# Pass all parameters through +"${DFU_UTIL}" "$@" diff --git a/macosx/maple_upload.sh b/macosx/maple_upload.sh index 5e567e02c..df751aae4 100755 --- a/macosx/maple_upload.sh +++ b/macosx/maple_upload.sh @@ -6,58 +6,59 @@ if [ $# -lt 4 ]; then echo "Usage: $0 $# " >&2 exit 1 fi -altID=$2 -usbID=$3 -binfile=$4 +altID="$2" +usbID="$3" +binfile="$4" dummy_port_fullpath="/dev/$1" +if [ $# -eq 5 ]; then + dfuse_addr="--dfuse-address $5" +else + dfuse_addr="" +fi # Get the directory where the script is running. DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) -# ----------------- Old code to reset the USB - which doesn't seem to work -------- -# -#if we can find the Serial device try resetting it and then sleeping for 1 sec while the board reboots -#if [ -e $dummy_port_fullpath ]; then -# echo "resetting " $dummy_port_fullpath -# stty -f $dummy_port_fullpath 1200 -# sleep 1 -## stty -f $dummy_port_fullpath 1200 -## sleep 1 -#fi -# ------------------ End of old code ----------------- - # ----------------- IMPORTANT ----------------- # The 2nd parameter to upload-reset is the delay after resetting before it exits # This value is in milliseonds # You may need to tune this to your system # 750ms to 1500ms seems to work on my Mac +# This is less critical now that we automatically retry dfu-util -"${DIR}"/upload-reset "${dummy_port_fullpath}" 750 - -if [ $# -eq 5 ]; then - dfuse_addr="--dfuse-address $5" -else - dfuse_addr="" -fi - -#DFU_UTIL=/usr/local/bin/dfu-util -DFU_UTIL=${DIR}/dfu-util/dfu-util -if [ ! -x "${DFU_UTIL}" ]; then - DFU_UTIL=/opt/local/bin/dfu-util -fi - -if [ ! -x ${DFU_UTIL} ]; then - echo "$0: error: cannot find ${DFU_UTIL}" >&2 - exit 2 +if ! "${DIR}/upload-reset" "${dummy_port_fullpath}" 750; then + echo "****************************************" >&2 + echo "* Could not automatically reset device *" >&2 + echo "* Please manually reset device! *" >&2 + echo "****************************************" >&2 + sleep 2 # Wait for user to see message. fi -${DFU_UTIL} -d "${usbID}" -a "${altID}" -D "${binfile}" -R ${dfuse_addr} -R +COUNTER=5 +while + "${DIR}/dfu-util.sh" -d "${usbID}" -a "${altID}" -D "${binfile}" ${dfuse_addr} -R + ((ret = $?)) +do + if [ $ret -eq 74 ] && [ $((--COUNTER)) -gt 0 ]; then + # I/O error, probably because no DFU device was found + echo "Trying ${COUNTER} more time(s)" >&2 + sleep 1 + else + exit $ret + fi +done -echo -n Waiting for "${dummy_port_fullpath}" serial... +echo -n "Waiting for ${dummy_port_fullpath} serial..." >&2 -COUNTER=0 -while [ ! -c "${dummy_port_fullpath}" ] && ((COUNTER++ < 40)); do +COUNTER=40 +while [ ! -r "${dummy_port_fullpath}" ] && ((COUNTER--)); do + echo -n "." >&2 sleep 0.1 done -echo Done +if [ $COUNTER -eq -1 ]; then + echo " Timed out." >&2 + exit 1 +else + echo " Done." >&2 +fi