Files
AI_Printer/tools/esptool-factory

Factory Flashing Toolkit (Local-Only)

This toolkit now runs in local-only mode.

  • Network workflows are not used.
  • flash.bin_encryption config item is no longer supported.
  • Firmware package format is always .bin.enc + .sig.

Quick Start

1) Build firmware

From project root:

idf.py build

idf.py build now auto-overwrite-syncs required plaintext build outputs from build/flasher_args.json into tools/esptool-factory/bin/.

If you already built firmware and only want to refresh bin files manually:

python3 tools/esptool-factory/sync_factory_bins.py

2) Prepare private config

Use plaintext config:

  • tools/esptool-factory/conf/factory_private.json

Requirements:

  • Do not set flash.bin_encryption.
  • Keep flash.layout / app_bin_name aligned with current build outputs.
  • flash.app_bin_name must exist in flash.layout, and flash.app_partition_offset must match that layout entry offset.
  • flash.flash_args (flash_mode/flash_freq/flash_size/before/after) must use supported enum values.
  • flash.layout uses original build artifact names (for example bootloader.bin); the packager converts them to bootloader.bin.enc automatically.

3) Package

From project root:

tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py

By default, the packager now directly uses files in tools/esptool-factory/bin/. If you still want packager-side sync from build/, use:

tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
  --sync-build-bins

The packager always uses:

  • tools/esptool-factory/keys/firmware/fw_key.bin

and copies it into the release package under keys/firmware/fw_key.bin.

Default output:

  • tools/esptool-factory/dist/factory/

You can change output folder name:

tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
  --package-name line-a

4) Factory use

  1. Run packaged GUI.
  2. Connect device and click start.
  3. Tool executes: device check -> flash -> post-flash check.
    • If secure boot is already enabled but flash 0x0 header is blank/invalid, GUI will switch to initial full-flash provisioning (with force semantics where needed) instead of app-only.
    • force is gated to bootloader@0x0 only. Before writing, GUI re-checks bootloader image chip/revision compatibility and blocks plaintext force if flash encryption appears enabled.

No environment variable is required for .enc decrypt key. The GUI reads keys/firmware/fw_key.bin from the package directory.

No network endpoint is required.