From c4febb78c51a851f8b391f6524b7492614891425 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 21:58:15 +0100 Subject: [PATCH 01/11] fix rls --- .github/workflows/esp32s3-build-master.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/esp32s3-build-master.yml b/.github/workflows/esp32s3-build-master.yml index a36526d..0fba451 100644 --- a/.github/workflows/esp32s3-build-master.yml +++ b/.github/workflows/esp32s3-build-master.yml @@ -234,7 +234,6 @@ jobs: set -euo pipefail assets=( "flash_board.py" - "adv/flash_board.py" "bootloader-adv.bin" "partition-table-adv.bin" "M5MonsterC5-CardputerADV-adv-full.bin" @@ -244,7 +243,6 @@ jobs: "M5MonsterC5-CardputerADV-adv-launcher.bin" "M5MonsterC5-CardputerADV-adv-launcher-${{ needs.package.outputs.fw_version }}.bin" "M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.zip" - "k132/flash_board.py" "bootloader-k132.bin" "partition-table-k132.bin" "M5MonsterC5-CardputerADV-k132-full.bin" @@ -268,7 +266,6 @@ jobs: name: ${{ format('M5MonsterC5-CardputerADV {0}', needs.package.outputs.fw_version) }} files: | release_artifacts/firmware/flash_board.py - release_artifacts/firmware/adv/flash_board.py release_artifacts/firmware/adv/bootloader-adv.bin release_artifacts/firmware/adv/partition-table-adv.bin release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-full.bin @@ -278,7 +275,6 @@ jobs: release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-launcher.bin release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-launcher-${{ needs.package.outputs.fw_version }}.bin release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.zip - release_artifacts/firmware/k132/flash_board.py release_artifacts/firmware/k132/bootloader-k132.bin release_artifacts/firmware/k132/partition-table-k132.bin release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-full.bin From 518dfb5449acb885b11e52445b99ec4512d68a50 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:07:53 +0100 Subject: [PATCH 02/11] build fix2 --- .github/workflows/esp32s3-build-master.yml | 35 +--------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/.github/workflows/esp32s3-build-master.yml b/.github/workflows/esp32s3-build-master.yml index 0fba451..7fca1e4 100644 --- a/.github/workflows/esp32s3-build-master.yml +++ b/.github/workflows/esp32s3-build-master.yml @@ -225,45 +225,12 @@ jobs: zip -9 "$out" "${files[@]}" done - - name: Delete existing assets (rebuild) - if: github.event_name == 'workflow_dispatch' && inputs.rebuild_release == 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAG: ${{ steps.meta.outputs.tag }} - run: | - set -euo pipefail - assets=( - "flash_board.py" - "bootloader-adv.bin" - "partition-table-adv.bin" - "M5MonsterC5-CardputerADV-adv-full.bin" - "M5MonsterC5-CardputerADV-adv-full-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-adv.bin" - "M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-adv-launcher.bin" - "M5MonsterC5-CardputerADV-adv-launcher-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.zip" - "bootloader-k132.bin" - "partition-table-k132.bin" - "M5MonsterC5-CardputerADV-k132-full.bin" - "M5MonsterC5-CardputerADV-k132-full-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-k132.bin" - "M5MonsterC5-CardputerADV-k132-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-k132-launcher.bin" - "M5MonsterC5-CardputerADV-k132-launcher-${{ needs.package.outputs.fw_version }}.bin" - "M5MonsterC5-CardputerADV-k132-${{ needs.package.outputs.fw_version }}.zip" - ) - for name in "${assets[@]}"; do - if gh release view "$TAG" -R "$GITHUB_REPOSITORY" --json assets --jq ".assets[].name" | grep -qx "$name"; then - gh release delete-asset "$TAG" "$name" -R "$GITHUB_REPOSITORY" -y - fi - done - - name: Upload binaries to GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ steps.meta.outputs.tag }} name: ${{ format('M5MonsterC5-CardputerADV {0}', needs.package.outputs.fw_version) }} + overwrite: true files: | release_artifacts/firmware/flash_board.py release_artifacts/firmware/adv/bootloader-adv.bin From dc26b21e84f5561ca8f4085b8caa99aa4dfe0212 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:12:56 +0100 Subject: [PATCH 03/11] build fix4 --- .github/workflows/esp32s3-build-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/esp32s3-build-master.yml b/.github/workflows/esp32s3-build-master.yml index 7fca1e4..1677303 100644 --- a/.github/workflows/esp32s3-build-master.yml +++ b/.github/workflows/esp32s3-build-master.yml @@ -230,7 +230,7 @@ jobs: with: tag_name: ${{ steps.meta.outputs.tag }} name: ${{ format('M5MonsterC5-CardputerADV {0}', needs.package.outputs.fw_version) }} - overwrite: true + overwrite_files: true files: | release_artifacts/firmware/flash_board.py release_artifacts/firmware/adv/bootloader-adv.bin From c11b3ae60e7f7ed66ac1ab26c18a86576cc42514 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:18:30 +0100 Subject: [PATCH 04/11] build fix5 --- .github/workflows/esp32s3-build-master.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/esp32s3-build-master.yml b/.github/workflows/esp32s3-build-master.yml index 1677303..c28890e 100644 --- a/.github/workflows/esp32s3-build-master.yml +++ b/.github/workflows/esp32s3-build-master.yml @@ -198,6 +198,13 @@ jobs: name: esp32s3-firmware path: release_artifacts/firmware + - name: Ensure flash_board.py is present + run: | + set -e + if [ ! -f release_artifacts/firmware/flash_board.py ]; then + cp binaries-esp32s3/flash_board.py release_artifacts/firmware/flash_board.py + fi + - name: Package full bundle (JANOS) run: | set -e @@ -218,7 +225,6 @@ jobs: "firmware/${board}/M5MonsterC5-CardputerADV-${board}-${FW_VERSION}.bin" "firmware/${board}/M5MonsterC5-CardputerADV-${board}-launcher-${FW_VERSION}.bin" "firmware/${board}/M5MonsterC5-CardputerADV-${board}-launcher.bin" - "firmware/${board}/M5MonsterC5-CardputerADV-${board}-${FW_VERSION}.zip" ) out="bundle/M5MonsterC5-CardputerADV-${board}-${FW_VERSION}.zip" rm -f "$out" @@ -241,7 +247,6 @@ jobs: release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.bin release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-launcher.bin release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-launcher-${{ needs.package.outputs.fw_version }}.bin - release_artifacts/firmware/adv/M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.zip release_artifacts/firmware/k132/bootloader-k132.bin release_artifacts/firmware/k132/partition-table-k132.bin release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-full.bin @@ -250,7 +255,6 @@ jobs: release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-${{ needs.package.outputs.fw_version }}.bin release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-launcher.bin release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-launcher-${{ needs.package.outputs.fw_version }}.bin - release_artifacts/firmware/k132/M5MonsterC5-CardputerADV-k132-${{ needs.package.outputs.fw_version }}.zip release_artifacts/bundle/M5MonsterC5-CardputerADV-adv-${{ needs.package.outputs.fw_version }}.zip release_artifacts/bundle/M5MonsterC5-CardputerADV-k132-${{ needs.package.outputs.fw_version }}.zip env: From 3541e21fa2d4666c635a09224f4234687c02d1e3 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:24:52 +0100 Subject: [PATCH 05/11] build fix6 --- .github/workflows/esp32s3-build-master.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/esp32s3-build-master.yml b/.github/workflows/esp32s3-build-master.yml index c28890e..1a892f8 100644 --- a/.github/workflows/esp32s3-build-master.yml +++ b/.github/workflows/esp32s3-build-master.yml @@ -106,6 +106,7 @@ jobs: print(m.group(1)) PY ) + cp "binaries-esp32s3/flash_board.py" "release_artifacts/firmware/flash_board.py" for board in adv k132; do src_dir="release_artifacts/firmware/${board}" src="${src_dir}/M5MonsterC5-CardputerADV.bin" @@ -198,13 +199,6 @@ jobs: name: esp32s3-firmware path: release_artifacts/firmware - - name: Ensure flash_board.py is present - run: | - set -e - if [ ! -f release_artifacts/firmware/flash_board.py ]; then - cp binaries-esp32s3/flash_board.py release_artifacts/firmware/flash_board.py - fi - - name: Package full bundle (JANOS) run: | set -e From a60d5d9d6c1342a8de4cfa7da592172b158f0722 Mon Sep 17 00:00:00 2001 From: Nigdzie <46287652+Nigdzie@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:39:33 +0100 Subject: [PATCH 06/11] webflesh fix --- binaries-esp32s3/adv/flash_board.py | 35 +++++++++++++++++++++++++--- binaries-esp32s3/flash_board.py | 35 +++++++++++++++++++++++++--- binaries-esp32s3/k132/flash_board.py | 35 +++++++++++++++++++++++++--- docs/janos_flash.html | 9 +++++-- 4 files changed, 103 insertions(+), 11 deletions(-) diff --git a/binaries-esp32s3/adv/flash_board.py b/binaries-esp32s3/adv/flash_board.py index 6fb7f60..bd18246 100644 --- a/binaries-esp32s3/adv/flash_board.py +++ b/binaries-esp32s3/adv/flash_board.py @@ -37,6 +37,32 @@ def ensure_packages(): "app": "0x10000", } +def detect_board_by_files(): + if (os.path.exists("bootloader-k132.bin") and os.path.exists("partition-table-k132.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-k132.bin"): + return "k132" + if (os.path.exists("bootloader-adv.bin") and os.path.exists("partition-table-adv.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-adv.bin"): + return "adv" + return None + +def detect_board_by_path(): + cwd = os.getcwd().lower() + if cwd.endswith(os.sep + "k132") or (os.sep + "k132" + os.sep) in cwd: + return "k132" + if cwd.endswith(os.sep + "adv") or (os.sep + "adv" + os.sep) in cwd: + return "adv" + return None + +def choose_board_interactive(): + print(f"{YELLOW}Select target board:{RESET}") + print(" 1) ADV") + print(" 2) K132") + choice = input("> ").strip() + if choice == "2": + return "k132" + return "adv" + def board_files(board): suffix = board.lower() return { @@ -159,8 +185,8 @@ def main(): parser.add_argument("--port", help="Known serial port (e.g., COM10 or /dev/ttyACM0)") parser.add_argument("baud", nargs="?", type=int, default=DEFAULT_BAUD, help=f"Optional baud rate (default: {DEFAULT_BAUD})") - parser.add_argument("--board", default=DEFAULT_BOARD, choices=["adv", "k132"], - help="Target board (adv or k132). Default: adv.") + parser.add_argument("--board", default=None, choices=["adv", "k132"], + help="Target board (adv or k132). Default: auto-detect by folder/files.") parser.add_argument("--monitor", action="store_true", help="Open serial monitor after flashing") parser.add_argument("--erase", action="store_true", help="Full erase before flashing (fixes stale NVS/partitions)") parser.add_argument("--flash-mode", default="dio", choices=["dio", "qio", "dout", "qout"], @@ -169,7 +195,10 @@ def main(): help="Flash frequency (default: 80m). If you see boot loops, try 40m.") args = parser.parse_args() - files = board_files(args.board) + board = args.board or detect_board_by_files() or detect_board_by_path() + if not board: + board = choose_board_interactive() + files = board_files(board) check_files(files) print(f"{CYAN}ESP32-S3 flasher version: {VERSION}{RESET}") diff --git a/binaries-esp32s3/flash_board.py b/binaries-esp32s3/flash_board.py index 6fb7f60..bd18246 100644 --- a/binaries-esp32s3/flash_board.py +++ b/binaries-esp32s3/flash_board.py @@ -37,6 +37,32 @@ def ensure_packages(): "app": "0x10000", } +def detect_board_by_files(): + if (os.path.exists("bootloader-k132.bin") and os.path.exists("partition-table-k132.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-k132.bin"): + return "k132" + if (os.path.exists("bootloader-adv.bin") and os.path.exists("partition-table-adv.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-adv.bin"): + return "adv" + return None + +def detect_board_by_path(): + cwd = os.getcwd().lower() + if cwd.endswith(os.sep + "k132") or (os.sep + "k132" + os.sep) in cwd: + return "k132" + if cwd.endswith(os.sep + "adv") or (os.sep + "adv" + os.sep) in cwd: + return "adv" + return None + +def choose_board_interactive(): + print(f"{YELLOW}Select target board:{RESET}") + print(" 1) ADV") + print(" 2) K132") + choice = input("> ").strip() + if choice == "2": + return "k132" + return "adv" + def board_files(board): suffix = board.lower() return { @@ -159,8 +185,8 @@ def main(): parser.add_argument("--port", help="Known serial port (e.g., COM10 or /dev/ttyACM0)") parser.add_argument("baud", nargs="?", type=int, default=DEFAULT_BAUD, help=f"Optional baud rate (default: {DEFAULT_BAUD})") - parser.add_argument("--board", default=DEFAULT_BOARD, choices=["adv", "k132"], - help="Target board (adv or k132). Default: adv.") + parser.add_argument("--board", default=None, choices=["adv", "k132"], + help="Target board (adv or k132). Default: auto-detect by folder/files.") parser.add_argument("--monitor", action="store_true", help="Open serial monitor after flashing") parser.add_argument("--erase", action="store_true", help="Full erase before flashing (fixes stale NVS/partitions)") parser.add_argument("--flash-mode", default="dio", choices=["dio", "qio", "dout", "qout"], @@ -169,7 +195,10 @@ def main(): help="Flash frequency (default: 80m). If you see boot loops, try 40m.") args = parser.parse_args() - files = board_files(args.board) + board = args.board or detect_board_by_files() or detect_board_by_path() + if not board: + board = choose_board_interactive() + files = board_files(board) check_files(files) print(f"{CYAN}ESP32-S3 flasher version: {VERSION}{RESET}") diff --git a/binaries-esp32s3/k132/flash_board.py b/binaries-esp32s3/k132/flash_board.py index 6fb7f60..bd18246 100644 --- a/binaries-esp32s3/k132/flash_board.py +++ b/binaries-esp32s3/k132/flash_board.py @@ -37,6 +37,32 @@ def ensure_packages(): "app": "0x10000", } +def detect_board_by_files(): + if (os.path.exists("bootloader-k132.bin") and os.path.exists("partition-table-k132.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-k132.bin"): + return "k132" + if (os.path.exists("bootloader-adv.bin") and os.path.exists("partition-table-adv.bin")) or \ + os.path.exists("M5MonsterC5-CardputerADV-adv.bin"): + return "adv" + return None + +def detect_board_by_path(): + cwd = os.getcwd().lower() + if cwd.endswith(os.sep + "k132") or (os.sep + "k132" + os.sep) in cwd: + return "k132" + if cwd.endswith(os.sep + "adv") or (os.sep + "adv" + os.sep) in cwd: + return "adv" + return None + +def choose_board_interactive(): + print(f"{YELLOW}Select target board:{RESET}") + print(" 1) ADV") + print(" 2) K132") + choice = input("> ").strip() + if choice == "2": + return "k132" + return "adv" + def board_files(board): suffix = board.lower() return { @@ -159,8 +185,8 @@ def main(): parser.add_argument("--port", help="Known serial port (e.g., COM10 or /dev/ttyACM0)") parser.add_argument("baud", nargs="?", type=int, default=DEFAULT_BAUD, help=f"Optional baud rate (default: {DEFAULT_BAUD})") - parser.add_argument("--board", default=DEFAULT_BOARD, choices=["adv", "k132"], - help="Target board (adv or k132). Default: adv.") + parser.add_argument("--board", default=None, choices=["adv", "k132"], + help="Target board (adv or k132). Default: auto-detect by folder/files.") parser.add_argument("--monitor", action="store_true", help="Open serial monitor after flashing") parser.add_argument("--erase", action="store_true", help="Full erase before flashing (fixes stale NVS/partitions)") parser.add_argument("--flash-mode", default="dio", choices=["dio", "qio", "dout", "qout"], @@ -169,7 +195,10 @@ def main(): help="Flash frequency (default: 80m). If you see boot loops, try 40m.") args = parser.parse_args() - files = board_files(args.board) + board = args.board or detect_board_by_files() or detect_board_by_path() + if not board: + board = choose_board_interactive() + files = board_files(board) check_files(files) print(f"{CYAN}ESP32-S3 flasher version: {VERSION}{RESET}") diff --git a/docs/janos_flash.html b/docs/janos_flash.html index 21005b1..3e47da5 100644 --- a/docs/janos_flash.html +++ b/docs/janos_flash.html @@ -428,10 +428,15 @@