mirror of https://github.com/jeelabs/esp-link.git
parent
6659f0ed21
commit
febfbdd262
@ -1,110 +0,0 @@ |
||||
#! /bin/bash |
||||
# |
||||
# Flash an AVR with optiboot using the esp-link built-in programmer |
||||
# Basically we first reset the AVR and get in sync, and then send the hex file |
||||
# |
||||
# ---------------------------------------------------------------------------- |
||||
# "THE BEER-WARE LICENSE" (Revision 42): |
||||
# Thorsten von Eicken wrote this file. As long as you retain |
||||
# this notice you can do whatever you want with this stuff. If we meet some day, |
||||
# and you think this stuff is worth it, you can buy me a beer in return. |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
show_help() { |
||||
cat <<EOT |
||||
Usage: ${0##*/} [-options...] hostname sketch.hex |
||||
Flash the AVR running optiboot attached to esp-link with the sketch. |
||||
-v Be verbose |
||||
-h show this help |
||||
|
||||
Example: ${0##*/} -v esp-link mysketch.hex |
||||
${0##*/} 192.168.4.1 mysketch.hex |
||||
EOT |
||||
} |
||||
|
||||
if ! which curl >/dev/null; then |
||||
echo "ERROR: Cannot find curl: it is required for this script." >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
start=`date +%s` |
||||
|
||||
# ===== Parse arguments |
||||
|
||||
verbose= |
||||
|
||||
while getopts "hvx:" opt; do |
||||
case "$opt" in |
||||
h) show_help; exit 0 ;; |
||||
v) verbose=1 ;; |
||||
x) foo="$OPTARG" ;; |
||||
'?') show_help >&2; exit 1 ;; |
||||
esac |
||||
done |
||||
|
||||
# Shift off the options and optional --. |
||||
shift "$((OPTIND-1))" |
||||
|
||||
# Get the fixed arguments |
||||
if [[ $# != 2 ]]; then |
||||
show_help >&2 |
||||
exit 1 |
||||
fi |
||||
hostname=$1 |
||||
hex=$2 |
||||
|
||||
re='[-A-Za-z0-9.]+' |
||||
if [[ ! "$hostname" =~ $re ]]; then |
||||
echo "ERROR: hostname ${hostname} is not a valid hostname or ip address" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if [[ ! -r "$hex" ]]; then |
||||
echo "ERROR: cannot read hex file ($hex)" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# ===== Get AVR in sync |
||||
|
||||
[[ -n "$verbose" ]] && echo "Resetting AVR with http://$hostname/pgm/sync" >&2 |
||||
v=; [[ -n "$verbose" ]] && v=-v |
||||
sync=`curl -m 10 $v -s -w '%{http_code}' -XPOST "http://$hostname/pgm/sync"` |
||||
if [[ $? != 0 || "$sync" != 204 ]]; then |
||||
echo "Error resetting AVR" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
while true; do |
||||
sync=`curl -m 10 $v -s "http://$hostname/pgm/sync"` |
||||
if [[ $? != 0 ]]; then |
||||
echo "Error checking sync" >&2 |
||||
exit 1 |
||||
fi |
||||
case "$sync" in |
||||
SYNC*) |
||||
echo "AVR in $sync" >&2 |
||||
break;; |
||||
"NOT READY"*) |
||||
[[ -n "$verbose" ]] && echo " Waiting for sync..." >&2 |
||||
;; |
||||
*) |
||||
echo "Error checking sync: $sync" >&2 |
||||
exit 1 |
||||
;; |
||||
esac |
||||
sleep 0.1 |
||||
done |
||||
|
||||
# ===== Send HEX file |
||||
|
||||
[[ -n "$verbose" ]] && echo "Sending HEX file for programming" >&2 |
||||
sync=`curl -m 10 $v -s -g -d "@$hex" "http://$hostname/pgm/upload"` |
||||
echo $sync |
||||
if [[ $? != 0 || ! "$sync" =~ ^Success ]]; then |
||||
echo "Error programming AVR" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
sec=$(( `date +%s` - $start )) |
||||
echo "Success, took $sec seconds" >&2 |
||||
exit 0 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,133 +0,0 @@ |
||||
#! /bin/bash |
||||
# |
||||
# Flash an esp8266 over wifi. This communicates with the esphttpd's /flash handlers |
||||
# and POSTS the correct binary depending on the parittion that needs to be flashed |
||||
# next. |
||||
# |
||||
# ---------------------------------------------------------------------------- |
||||
# "THE BEER-WARE LICENSE" (Revision 42): |
||||
# Thorsten von Eicken wrote this file. As long as you retain |
||||
# this notice you can do whatever you want with this stuff. If we meet some day, |
||||
# and you think this stuff is worth it, you can buy me a beer in return. |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
show_help() { |
||||
cat <<EOT |
||||
Usage: ${0##*/} [-options...] hostname user1.bin user2.bin |
||||
Flash the esp8266 running esphttpd at <hostname> with either <user1.bin> or <user2.bin> |
||||
depending on its current state. Reboot the esp8266 after flashing and wait for it to come |
||||
up again. |
||||
-v Be verbose |
||||
-h show this help |
||||
|
||||
Example: ${0##*/} -v esp8266 firmware/user1.bin firmware/user2.bin |
||||
${0##*/} 192.168.4.1 firmware/user1.bin firmware/user2.bin |
||||
EOT |
||||
} |
||||
|
||||
if ! which curl >/dev/null; then |
||||
echo "ERROR: Cannot find curl: it is required for this script." >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
start=`date +%s` |
||||
|
||||
# ===== Parse arguments |
||||
|
||||
verbose= |
||||
|
||||
while getopts "hvx:" opt; do |
||||
case "$opt" in |
||||
h) show_help; exit 0 ;; |
||||
v) verbose=1 ;; |
||||
x) foo="$OPTARG" ;; |
||||
'?') show_help >&2; exit 1 ;; |
||||
esac |
||||
done |
||||
|
||||
# Shift off the options and optional --. |
||||
shift "$((OPTIND-1))" |
||||
|
||||
# Get the fixed arguments |
||||
if [[ $# != 3 ]]; then |
||||
show_help >&2 |
||||
exit 1 |
||||
fi |
||||
hostname=$1 |
||||
user1=$2 |
||||
user2=$3 |
||||
|
||||
re='[-A-Za-z0-9.]+' |
||||
if [[ ! "$hostname" =~ $re ]]; then |
||||
echo "ERROR: hostname ${hostname} is not a valid hostname or ip address" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if [[ ! -r "$user1" ]]; then |
||||
echo "ERROR: cannot read user1 firmware file ($user1)" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if [[ ! -r "$user2" ]]; then |
||||
echo "ERROR: cannot read user2 firmware file ($user2)" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# ===== Retrieve the 'next' firmware required |
||||
|
||||
fw= |
||||
while true; do |
||||
[[ -n "$verbose" ]] && echo "Fetching http://$hostname/flash/next" >&2 |
||||
v=; [[ -n "$verbose" ]] && v=-v |
||||
next=`curl -m 10 $v -s "http://$hostname/flash/next"` |
||||
if [[ $? != 0 ]]; then |
||||
echo "Error retrieving http://$hostname/flash/next" >&2 |
||||
exit 1 |
||||
fi |
||||
case "$next" in |
||||
user1.bin) |
||||
echo "Flashing user1.bin" >&2 |
||||
fw="$user1" |
||||
break;; |
||||
user2.bin) |
||||
echo "Flashing user2.bin" >&2 |
||||
fw="$user2" |
||||
break;; |
||||
*) |
||||
echo "Error retrieving or parsing http://$hostname/flash/next" >&2 |
||||
exit 1 |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
#silent=-s |
||||
[[ -n "$verbose" ]] && silent= |
||||
res=`curl $silent -XPOST --data-binary "@$fw" "http://$hostname/flash/upload"` |
||||
if [[ $? != 0 ]]; then |
||||
echo "Error flashing $fw" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
sleep 2 |
||||
echo "Rebooting into new firmware" >&2 |
||||
curl -m 10 -s "http://$hostname/flash/reboot" |
||||
|
||||
sleep 2 |
||||
echo "Waiting for ESP8266 to come back" |
||||
while true; do |
||||
[[ -n "$verbose" ]] && echo "Fetching http://$hostname/flash/next" >&2 |
||||
next2=`curl -m 10 $v -s "http://$hostname/flash/next"` |
||||
[[ -n "$verbose" ]] && echo "got: $next2" |
||||
re='user[12]\.bin' |
||||
if [[ "$next2" =~ $re ]]; then |
||||
if [[ "$next2" != "$next" ]]; then |
||||
sec=$(( `date +%s` - $start )) |
||||
echo "Success, took $sec seconds" >&2 |
||||
exit 0 |
||||
else |
||||
echo "Flashing seems to have failed and it reverted to the old firmware?" >&2 |
||||
exit 1 |
||||
fi |
||||
fi |
||||
sleep 1 |
||||
done |
Loading…
Reference in new issue