2025-03-05 20:07:26 +01:00
|
|
|
#!/bin/bash
|
2020-03-24 14:43:55 -07:00
|
|
|
|
2024-03-08 10:50:03 +02:00
|
|
|
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
2024-11-21 00:21:06 +01:00
|
|
|
WEB_APP=false
|
2025-03-05 20:07:26 +01:00
|
|
|
TFT8=false
|
|
|
|
|
TFT16=false
|
|
|
|
|
TFT_BUILD=false
|
2021-03-21 18:29:20 -07:00
|
|
|
|
2024-11-06 19:43:34 -06:00
|
|
|
# Determine the correct esptool command to use
|
|
|
|
|
if "$PYTHON" -m esptool version >/dev/null 2>&1; then
|
|
|
|
|
ESPTOOL_CMD="$PYTHON -m esptool"
|
|
|
|
|
elif command -v esptool >/dev/null 2>&1; then
|
|
|
|
|
ESPTOOL_CMD="esptool"
|
|
|
|
|
elif command -v esptool.py >/dev/null 2>&1; then
|
|
|
|
|
ESPTOOL_CMD="esptool.py"
|
|
|
|
|
else
|
|
|
|
|
echo "Error: esptool not found"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2020-11-19 09:25:02 +08:00
|
|
|
set -e
|
|
|
|
|
|
2020-07-27 09:14:04 -04:00
|
|
|
# Usage info
|
|
|
|
|
show_help() {
|
2025-03-05 20:07:26 +01:00
|
|
|
cat <<EOF
|
|
|
|
|
Usage: $(basename $0) [-h] [-p ESPTOOL_PORT] [-P PYTHON] [-f FILENAME] [--web] [--tft] [--tft-16mb]
|
2020-07-27 09:14:04 -04:00
|
|
|
Flash image file to device, but first erasing and writing system information"
|
2020-03-24 14:43:55 -07:00
|
|
|
|
2020-07-27 09:14:04 -04:00
|
|
|
-h Display this help and exit
|
2022-01-14 10:40:18 -08:00
|
|
|
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
2021-03-21 18:29:20 -07:00
|
|
|
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
|
|
|
|
-f FILENAME The .bin file to flash. Custom to your device type and region.
|
2024-11-21 00:21:06 +01:00
|
|
|
--web Flash WEB APP.
|
2025-03-05 20:07:26 +01:00
|
|
|
--tft Flash MUI 8mb
|
|
|
|
|
--tft-16mb Flash MUI 16mb
|
2022-11-26 17:00:33 +01:00
|
|
|
|
2020-07-27 09:14:04 -04:00
|
|
|
EOF
|
|
|
|
|
}
|
2025-03-05 20:07:26 +01:00
|
|
|
# Parse arguments using a single while loop
|
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
|
case "$1" in
|
|
|
|
|
-h|--help)
|
|
|
|
|
show_help
|
|
|
|
|
exit 0
|
|
|
|
|
;;
|
|
|
|
|
-p)
|
|
|
|
|
ESPTOOL_PORT="$2"
|
|
|
|
|
shift # Shift past the option argument
|
|
|
|
|
;;
|
|
|
|
|
-P)
|
|
|
|
|
PYTHON="$2"
|
|
|
|
|
shift
|
|
|
|
|
;;
|
|
|
|
|
-f)
|
|
|
|
|
FILENAME="$2"
|
|
|
|
|
shift
|
|
|
|
|
;;
|
2024-11-21 00:21:06 +01:00
|
|
|
--web)
|
|
|
|
|
WEB_APP=true
|
2025-03-05 20:07:26 +01:00
|
|
|
;;
|
|
|
|
|
--tft)
|
|
|
|
|
TFT8=true
|
|
|
|
|
;;
|
|
|
|
|
--tft-16mb)
|
|
|
|
|
TFT16=true
|
|
|
|
|
;;
|
|
|
|
|
--) # Stop parsing options
|
|
|
|
|
shift
|
|
|
|
|
break
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "Unknown argument: $1" >&2
|
|
|
|
|
exit 1
|
2024-11-21 00:21:06 +01:00
|
|
|
;;
|
|
|
|
|
esac
|
2025-03-05 20:07:26 +01:00
|
|
|
shift # Move to the next argument
|
2024-11-21 00:21:06 +01:00
|
|
|
done
|
2020-03-24 14:43:55 -07:00
|
|
|
|
2021-04-09 20:02:25 -07:00
|
|
|
[ -z "$FILENAME" -a -n "$1" ] && {
|
2025-03-05 20:07:26 +01:00
|
|
|
FILENAME=$1
|
|
|
|
|
shift
|
2021-04-09 20:02:25 -07:00
|
|
|
}
|
|
|
|
|
|
2025-03-05 20:07:26 +01:00
|
|
|
# Check if FILENAME contains "-tft-" and either TFT8 or TFT16 is 1 (--tft, -tft-16mb)
|
|
|
|
|
if [[ "${FILENAME//-tft-/}" != "$FILENAME" ]]; then
|
|
|
|
|
TFT_BUILD=true
|
|
|
|
|
if [[ "$TFT8" != true && "$TFT16" != true ]]; then
|
|
|
|
|
echo "Error: Either --tft or --tft-16mb must be set to use a TFT build."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ "$TFT8" == true && "$TFT16" == true ]]; then
|
|
|
|
|
echo "Error: Both --tft and --tft-16mb must NOT be set at the same time."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Extract BASENAME from %FILENAME% for later use.
|
|
|
|
|
BASENAME="${FILENAME/firmware-/}"
|
|
|
|
|
|
2024-03-08 11:27:31 +02:00
|
|
|
if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
|
2025-03-05 20:07:26 +01:00
|
|
|
# Default littlefs* offset (--web).
|
|
|
|
|
OFFSET=0x300000
|
|
|
|
|
|
|
|
|
|
# Default OTA Offset
|
|
|
|
|
OTA_OFFSET=0x260000
|
|
|
|
|
|
|
|
|
|
# littlefs* offset for MUI 8mb (--tft) and OTA OFFSET.
|
|
|
|
|
if [ "$TFT8" = true ]; then
|
|
|
|
|
if [ "$TFT_BUILD" = true ]; then
|
|
|
|
|
OFFSET=0x670000
|
|
|
|
|
OTA_OFFSET=0x340000
|
|
|
|
|
else
|
|
|
|
|
echo "Ignoring --tft, not a TFT Build."
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# littlefs* offset for MUI 16mb (--tft-16mb) and OTA OFFSET.
|
|
|
|
|
if [ "$TFT16" = true ]; then
|
|
|
|
|
if [ "$TFT_BUILD" = true ]; then
|
|
|
|
|
OFFSET=0xc90000
|
|
|
|
|
OTA_OFFSET=0x650000
|
|
|
|
|
else
|
|
|
|
|
echo "Ignoring --tft-16mb, not a TFT Build."
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "Trying to flash ${FILENAME}, but first erasing and writing system information"
|
|
|
|
|
$ESPTOOL_CMD erase_flash
|
|
|
|
|
$ESPTOOL_CMD write_flash 0x00 "${FILENAME}"
|
|
|
|
|
# Account for S3 board's different OTA partition
|
|
|
|
|
if [ -n "${FILENAME##*"s3"*}" ] && [ -n "${FILENAME##*"-v3"*}" ] && [ -n "${FILENAME##*"t-deck"*}" ] && [ -n "${FILENAME##*"wireless-paper"*}" ] && [ -n "${FILENAME##*"wireless-tracker"*}" ] && [ -n "${FILENAME##*"station-g2"*}" ] && [ -n "${FILENAME##*"unphone"*}" ]; then
|
|
|
|
|
if [ -n "${FILENAME##*"esp32c3"*}" ]; then
|
|
|
|
|
$ESPTOOL_CMD write_flash $OTA_OFFSET bleota.bin
|
|
|
|
|
else
|
|
|
|
|
$ESPTOOL_CMD write_flash $OTA_OFFSET bleota-c3.bin
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
$ESPTOOL_CMD write_flash $OTA_OFFSET bleota-s3.bin
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check if WEB_APP (--web) is enabled and add "littlefswebui-" to BASENAME else "littlefs-".
|
|
|
|
|
if [ "$WEB_APP" = true ]; then
|
|
|
|
|
# Check it the file exist before trying to write it.
|
|
|
|
|
if [ -f "littlefswebui-${BASENAME}" ]; then
|
|
|
|
|
$ESPTOOL_CMD write_flash $OFFSET "littlefswebui-${BASENAME}"
|
|
|
|
|
else
|
|
|
|
|
echo "Error: file "littlefswebui-${BASENAME}" wasn't found, littlefs not written."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
# Check it the file exist before trying to write it.
|
|
|
|
|
if [ -f "littlefs-${BASENAME}" ]; then
|
|
|
|
|
$ESPTOOL_CMD write_flash $OFFSET "littlefs-${BASENAME}"
|
|
|
|
|
else
|
|
|
|
|
echo "Error: file "littlefs-${BASENAME}" wasn't found, littlefs not written."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
2022-10-01 09:46:56 +02:00
|
|
|
|
2020-07-27 09:14:04 -04:00
|
|
|
else
|
2025-03-05 20:07:26 +01:00
|
|
|
show_help
|
|
|
|
|
echo "Invalid file: ${FILENAME}"
|
2020-07-27 09:14:04 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
exit 0
|