Skip to content

Streamline panel programming: g6-flash CLI + WebUSB browser flasher#60

Draft
mbreiser wants to merge 2 commits into
mainfrom
claude/panels-programming-streamline-2h5f8c
Draft

Streamline panel programming: g6-flash CLI + WebUSB browser flasher#60
mbreiser wants to merge 2 commits into
mainfrom
claude/panels-programming-streamline-2h5f8c

Conversation

@mbreiser

Copy link
Copy Markdown
Contributor

What & why

Makes flashing G6 panels (RP2350/RP2354) easy for new/blank boards and re-flashing old ones, single panels or bench batches (~10–20 per powered hub), without a PlatformIO build environment — and adds a path a nontechnical person can use.

Today's bench scripts (deploy.sh / deploy_all.sh) drive pio … -t upload, only find panels already running firmware (so they can't flash a blank board), need a full build env, and deploy_all.sh is sequential. This work fixes all three by building on picotool (which can reboot a running panel into BOOTSEL and flash a board already in BOOTSEL) plus CI-published prebuilt UF2s.

Key enabler: panels are stateless (no per-panel ID — addressing is the controller's job), so every panel of a rev gets the identical binary. The only footgun is the two hardware revs needing different firmware; both tools require a deliberate --rev/rev choice and auto-verify via the USB product string after flashing.

Contents

  • docs/development/g6_07-panel-programming.md — design + spec (CI releases, CLI, web flasher, rev safety); added to the dev-docs index.
  • tools/panel-programming/g6_flash.py — picotool-based CLI: handles new + old panels, mandatory --rev guard, parallel batch (--jobs), sha256-checked UF2 download/cache, --no-exec for large trays, post-flash verification. Linux/sysfs.
  • tools/panel-programming/release.yml — CI matrix over pico_v021/pico_v031 → publishes g6-panel-<rev>.uf2 + manifest.json as GitHub Release assets.
  • tools/panel-programming/flasher/ — zero-install WebUSB PICOBOOT flasher (Chromium/Edge) for nontechnical users.

⚠ Staging note

These artifacts belong in separate submodule repos (LED-Display_G6_Firmware_Panel, webDisplayTools) that were out of this session's push scope, so they're staged in the parent repo under tools/panel-programming/ with a README mapping each file to its final home. A maintainer relocates them and adds the picotool dep + flash* tasks to the firmware pixi.toml.

Validation status

  • ✅ CLI compiles + --help works; flasher.js passes node --check; release.yml is valid YAML.
  • Not yet validated against hardware, and the CLI/web default download path needs the first panel-fw-v* firmware release to exist. Open items (PCB silkscreen rev marking, picoflash integration, bench validation against the two known panels 319A5199EE357F77/A5D4B82BA2B9FB51) are tracked in the spec doc's "Open Questions / TBDs".

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcDc2Scj2wZMBBXfaBc1HX


Generated by Claude Code

claude added 2 commits June 26, 2026 16:02
Make flashing G6 panels (RP2350) easy for both new/blank boards and
re-flashing existing ones, single panels or bench batches, without a
PlatformIO build environment.

- docs/development/g6_07-panel-programming.md: design + spec for the
  approach (CI-published per-rev UF2 releases, the CLI, the web flasher,
  and rev-mismatch safety). Added to the dev-docs index.
- tools/panel-programming/g6_flash.py: picotool-based CLI. Reboots running
  panels into BOOTSEL and flashes blank/BOOTSEL boards (the gap deploy*.sh
  can't cover), mandatory --rev guard, parallel batch, sha256-checked UF2
  download, post-flash USB product-string verification.
- tools/panel-programming/release.yml: CI matrix over pico_v021/pico_v031
  publishing g6-panel-<rev>.uf2 + manifest.json as GitHub Release assets.
- tools/panel-programming/flasher/: zero-install WebUSB PICOBOOT flasher
  (Chromium/Edge) for nontechnical users.

Staged in the parent repo because the firmware and webDisplayTools
submodules are separate repos out of this session's push scope; the
staging README documents each file's final home. Not yet validated
against hardware.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcDc2Scj2wZMBBXfaBc1HX
Step-by-step continuation guide (release cut, relocation into the
submodule repos, web + CLI testing against the two known panels) plus the
macOS/sysfs caveat for g6_flash.py.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcDc2Scj2wZMBBXfaBc1HX
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants