Adding loader
This commit is contained in:
parent
690c8987b3
commit
7d8b3eb705
1 changed files with 184 additions and 0 deletions
184
exercises/204_established_identities/scripts/load_only.sh
Executable file
184
exercises/204_established_identities/scripts/load_only.sh
Executable file
|
|
@ -0,0 +1,184 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# 20260602 ChatGPT
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
#
|
||||
# Example command lines:
|
||||
#
|
||||
# ./load_only.sh --tbeams "CY"
|
||||
# ./load_only.sh --tbeams "DAN"
|
||||
# ./load_only.sh --tbeams "BOB"
|
||||
# ./load_only.sh --tbeams "BOB CY DAN"
|
||||
# ./load_only.sh --tbeams "bob,cy,dan"
|
||||
#
|
||||
# If pio/platformio is not in PATH:
|
||||
#
|
||||
# ./load_only.sh --pio-bin "$HOME/pioenv/bin/platformio" --tbeams "DAN"
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
EXERCISE="/usr/local/src/microreticulum/microReticulumTbeam/exercises/204_established_identities"
|
||||
REMOTE_HOST="ryzdesk"
|
||||
TBEAMS_RAW=""
|
||||
PIO_BIN=""
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./load_only.sh --tbeams "CY"
|
||||
./load_only.sh --tbeams "BOB CY DAN"
|
||||
./load_only.sh --tbeams "bob,cy,dan"
|
||||
|
||||
Required:
|
||||
--tbeams One or more of: AMY BOB CY DAN ED FLO GUY
|
||||
|
||||
Optional:
|
||||
--pio-bin Full path to pio/platformio executable
|
||||
--exercise PlatformIO project directory
|
||||
--remote Remote build host, default: ryzdesk
|
||||
EOF
|
||||
}
|
||||
|
||||
while [ "$#" -gt 0 ]
|
||||
do
|
||||
case "$1" in
|
||||
--tbeams)
|
||||
shift
|
||||
[ "$#" -gt 0 ] || { echo "ERROR: --tbeams requires a value" >&2; exit 1; }
|
||||
TBEAMS_RAW="$1"
|
||||
;;
|
||||
--pio-bin)
|
||||
shift
|
||||
[ "$#" -gt 0 ] || { echo "ERROR: --pio-bin requires a value" >&2; exit 1; }
|
||||
PIO_BIN="$1"
|
||||
;;
|
||||
--exercise)
|
||||
shift
|
||||
[ "$#" -gt 0 ] || { echo "ERROR: --exercise requires a value" >&2; exit 1; }
|
||||
EXERCISE="$1"
|
||||
;;
|
||||
--remote)
|
||||
shift
|
||||
[ "$#" -gt 0 ] || { echo "ERROR: --remote requires a value" >&2; exit 1; }
|
||||
REMOTE_HOST="$1"
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: unknown option: $1" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "$TBEAMS_RAW" ]; then
|
||||
echo "ERROR: missing required option --tbeams" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$EXERCISE" ]; then
|
||||
echo "ERROR: EXERCISE directory not found: $EXERCISE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$EXERCISE/platformio.ini" ]; then
|
||||
echo "ERROR: platformio.ini not found under: $EXERCISE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$PIO_BIN" ]; then
|
||||
if [ ! -x "$PIO_BIN" ]; then
|
||||
echo "ERROR: --pio-bin is not executable: $PIO_BIN" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if command -v pio >/dev/null 2>&1; then
|
||||
PIO_BIN="$(command -v pio)"
|
||||
elif command -v platformio >/dev/null 2>&1; then
|
||||
PIO_BIN="$(command -v platformio)"
|
||||
else
|
||||
echo "ERROR: cannot find pio or platformio in PATH" >&2
|
||||
echo " Try: --pio-bin \"\$HOME/pioenv/bin/platformio\"" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "EXERCISE: $EXERCISE"
|
||||
echo "REMOTE_HOST: $REMOTE_HOST"
|
||||
echo "PIO_BIN: $PIO_BIN"
|
||||
echo
|
||||
|
||||
#
|
||||
# Accept either:
|
||||
# "BOB CY DAN"
|
||||
# "bob,cy,dan"
|
||||
#
|
||||
TBEAMS_NORMALIZED="$(echo "$TBEAMS_RAW" | tr ',' ' ')"
|
||||
|
||||
for env_raw in $TBEAMS_NORMALIZED
|
||||
do
|
||||
env="$(echo "$env_raw" | tr '[:upper:]' '[:lower:]')"
|
||||
ENV="$(echo "$env" | tr '[:lower:]' '[:upper:]')"
|
||||
|
||||
case "$env" in
|
||||
amy|bob|cy|dan|ed|flo|guy)
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: invalid T-Beam name: $env_raw" >&2
|
||||
echo " Allowed names: AMY BOB CY DAN ED FLO GUY" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
dev="/dev/ttyt${ENV}"
|
||||
remote_build_dir="${EXERCISE}/.pio/build/${env}"
|
||||
local_build_dir="${EXERCISE}/.pio/build/${env}"
|
||||
|
||||
if [ ! -e "$dev" ]; then
|
||||
echo "ERROR: expected device not found for $ENV: $dev" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! ssh "$REMOTE_HOST" "test -d '$remote_build_dir'"; then
|
||||
echo "ERROR: remote build directory missing on ${REMOTE_HOST}: $remote_build_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$local_build_dir" ]; then
|
||||
echo "Creating missing local build directory: $local_build_dir"
|
||||
mkdir -p "$local_build_dir" || {
|
||||
echo "ERROR: failed to create $local_build_dir" >&2
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
echo "===== copy built artifact tree for $env from $REMOTE_HOST ====="
|
||||
rsync -a \
|
||||
"${REMOTE_HOST}:${remote_build_dir}/" \
|
||||
"${local_build_dir}/"
|
||||
|
||||
if [ ! -f "${local_build_dir}/firmware.bin" ] &&
|
||||
[ ! -f "${local_build_dir}/firmware.elf" ]; then
|
||||
echo "ERROR: copied build tree does not appear to contain firmware output:" >&2
|
||||
echo " $local_build_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "===== loader-only upload $ENV on $dev ====="
|
||||
"$PIO_BIN" run \
|
||||
-d "$EXERCISE" \
|
||||
-e "$env" \
|
||||
-t nobuild \
|
||||
-t upload \
|
||||
--upload-port "$dev"
|
||||
|
||||
echo "===== finished loader-only upload for $ENV ====="
|
||||
echo
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue