memlnaut-nisps/scripts/flash-firmware.sh

78 lines
1.5 KiB
Bash
Raw Normal View History

2026-04-15 17:32:32 +02:00
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=./firmware-common.sh
source "$SCRIPT_DIR/firmware-common.sh"
usage() {
cat <<'EOF'
Usage:
scripts/flash-firmware.sh
scripts/flash-firmware.sh [mountpoint]
scripts/flash-firmware.sh [uf2-path] [mountpoint]
Defaults:
uf2-path -> /tmp/memlnaut-firmware-build/MEMLNaut-NISPS.ino.uf2
mountpoint -> auto-detect from standard UF2 bootloader locations
EOF
}
uf2_path="$UF2_PATH_DEFAULT"
mountpoint=""
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
usage
exit 0
fi
case $# in
0)
;;
1)
if [[ -f "$1" || "$1" == *.uf2 ]]; then
uf2_path="$1"
else
mountpoint="$1"
fi
;;
2)
uf2_path="$1"
mountpoint="$2"
;;
*)
usage >&2
exit 1
;;
esac
uf2_path="$(resolve_path "$uf2_path")"
if [[ ! -f "$uf2_path" ]]; then
echo "error: UF2 file not found: $uf2_path" >&2
echo "run scripts/build-firmware.sh first, or pass an explicit UF2 path" >&2
exit 1
fi
if [[ -z "$mountpoint" ]]; then
mountpoint="$(find_boot_mount || true)"
fi
if [[ -z "$mountpoint" ]]; then
echo "error: could not find a mounted UF2 bootloader volume" >&2
echo "put the board in bootloader mode or pass the mountpoint explicitly" >&2
exit 1
fi
mountpoint="$(resolve_path "$mountpoint")"
assert_boot_mount "$mountpoint"
echo "Flashing firmware:"
echo " uf2: $uf2_path"
echo " mountpoint: $mountpoint"
cp "$uf2_path" "$mountpoint/"
sync
echo
echo "Flash copy completed."