Files
meshtastic_firmware/bin
Thomas Göttgens ad1dd14b6c fix(bin): repair the Windows device-install and device-update scripts (#11388)
* fix(bin): correct filename check and esptool v5 subcommands in .bat installers

device-install.bat rejected every valid firmware-*.factory.bin name. The
substring-strip comparison was negated, so it errored when the suffix was
present instead of when it was absent.

Both scripts hardcoded esptool subcommand spellings. device-install.bat used
the v4 underscore forms only. device-update.bat used the v5 write-flash with
the v4 read_flash_status, so it worked fully on neither version. Probe the
help output once and select the spelling, mirroring bin/device-install.sh.

The probe uses %ESPTOOL_CMD% rather than !ESPTOOL_CMD! because cmd does not
split a delayed-expanded command token carrying a path into program and
arguments.

Fixes #8156

* fix(bin): make the -P interpreter option work in the .bat installers

Both scripts invoked ESPTOOL_CMD through delayed expansion. cmd does not split
a delayed-expanded command token that carries a path into program and
arguments, so "-P C:\path\python.exe" exited 9009 and the scripts reported
"esptool not found". Use %ESPTOOL_CMD% at the two command positions per file.

device-update.bat additionally wrapped the interpreter in doubled quotes, which
made python treat python.exe as a source file. Quote the path once, as
device-install.bat does, so interpreter paths containing spaces also work.

* fix(bin): anchor the .factory.bin suffix check and harden esptool detection

The filename check matched .factory.bin anywhere in the name, so
firmware-x.factory.bin.bak passed and the script then derived
firmware-x.bak.mt.json for metadata. Compare the last 12 characters instead,
matching the anchored glob in bin/device-install.sh.

A quoted interpreter path that does not exist returns 3 rather than 9009, so
the missing-esptool check skipped it and the script died at the probe with no
message. Treat 3 as missing as well.

device-update.bat read %ERRORLEVEL% after a CALL that overwrote it, so the
missing-esptool check never fired. Capture the exit code before logging it.
2026-08-10 15:48:41 +00:00
..
2026-08-06 14:05:07 +00:00
2022-08-11 17:54:48 -05:00
2024-02-21 10:03:45 -06:00
2026-07-16 18:35:33 -05:00
2026-06-30 12:44:02 -05:00
2026-08-06 14:05:07 +00:00
2024-07-15 07:11:37 -05:00
2024-10-06 07:55:02 -05:00
2026-08-06 14:05:07 +00:00
2025-10-19 08:52:56 +11:00