Repository navigation
Releases: Waffelo/HydraFlasher
Release list
Firmware v1.3
Its own USB identity, done properly. The Pico now uses Raspberry Pi's USB vendor ID with the product ID Raspberry Pi assigns to Pico SDK serial devices, instead of TinyUSB's example vendor ID 0xCAFE, which isn't meant for distributed devices. Nothing else changed: flashing, verifying, the socket detection and the LEDs work as in 1.2.
Changed
- USB ID
2E8A:000A(wasCAFE:4001): Raspberry Pi's shared ID for Pico SDK serial (CDC) devices, which their rules ask such devices to use. The product name stays "HydraFlasher", which is how the app finds the Pico. - Serial number from the Pico's unique flash ID (was
621621on every board), so two Picos get different names in/dev/serial/by-id/and on Windows.
Compatibility
- Update with app 1.1.0 or newer. App 1.0.0 still finds and uses a Pico with 1.3, but loses it during a firmware update (it looks for the old ID when the Pico restarts).
- On Windows, the Pico gets a new COM port number once, as it's a new device to Windows.
- Works with flashprog and flashrom as before (
serprog:dev=…,cs=<n>).
What's Changed
- Release titles: "Firmware v1.2" and "App v1.0.0" by @Waffelo in #9
- Release titles: "Firmware v1.2" and "App v1.0.0" by @Waffelo in #10
- AppImage: file picker works, notifications close after 6 s, no notifi… by @Waffelo in #11
- LEDs work under sudo in the packaged app by @Waffelo in #12
- Polish: file dialogs don't freeze the window, KDE dialog with filter, quieter notifications, build commit by @Waffelo in #13
- Taskbar entry lights up when a job ends while you're in another window by @Waffelo in #14
- Temporary padding, flash history page, audit fixes, firmware 1.3 USB ID, new screenshot by @Waffelo in #15
- Release app 1.1.0 and firmware 1.3 by @Waffelo in #16
Full Changelog: app-v1.0.0...fw-v1.3
App v1.1.0
The Linux AppImage works properly, and the flash log becomes a page in the app. The AppImage's file buttons and notifications are fixed, a finished job lights up the taskbar, the flash log has its own history page, and the app is ready for firmware 1.3.
Downloads
- Windows:
HydraFlasher-Setup-1.1.0.exe(installing it over 1.0.0 updates it) orHydraFlasher-1.1.0-portable.exe. - Linux:
HydraFlasher-1.1.0-x86_64.AppImage:chmod +x, then run it. It needs FUSE (sudo apt install fuse3; the 1.0.0 notes wrongly saidlibfuse2), or start it with--appimage-extract-and-run. Desktop notifications neednotify-send(libnotify-bin). - Firmware 1.3 is released the same day: settings → firmware → latest.
New
- Flash history page (flash log ▸): every write and verify as a table, newest first, with socket names and green/red results; filter all / failures / today; export CSV…, open folder, and clear…, which archives the old log as
flash_log-<date>.csvinstead of deleting it. - The taskbar entry lights up when a job ends while you're in another window (Linux: until you switch back; Windows: it flashes), whether notifications are on or not.
- Firmware 1.3's USB identity (
2E8A:000A) is recognised, also when the Pico restarts during a firmware update. - Licenses: the packages include the licence texts of everything bundled with HydraFlasher (Python, Tcl/Tk, customtkinter, pyserial, …); settings → version → licenses opens them.
- Settings show the git commit a package was built from next to the version.
Changed
- Notifications only appear while the HydraFlasher window isn't focused, close after 6 seconds and show the hydra icon. A successful probe (or the automatic identify of a new chip) no longer notifies; a failed one still does. On Linux they go through
notify-send. - Padding or truncating an image no longer leaves a
_padded/_truncatedfile next to it: the copy is temporary and deleted once the queue is done. - File dialogs on Linux: KDE gets its own dialog (kdialog) even when zenity is installed, with the image filter, in front of the HydraFlasher window. The window keeps drawing and scanning while a dialog is open.
- Builds use pinned tools: appimagetool 1.9.1 with its checksum, GitHub Actions pinned to commits.
Fixed
- Linux AppImage: the buttons that open a file did nothing. The AppImage's bundled libraries leaked into every program it started, and KDE's file dialog couldn't start with them. Programs started from the app (file dialog, flashprog, notify-send…) now use the system's libraries, and if the desktop's file dialog still fails, HydraFlasher opens its own.
- Linux AppImage: notifications stayed on screen until clicked.
- Status LEDs under sudo (when your user can't open the serial port) didn't work in the packages.
- Firmware downloads are checked against the SHA-256 checksum GitHub lists for the release file, and only files from this repository's releases are downloaded. A damaged download is refused instead of installed.
- The settings file can't be left half-written by a crash or a full disk. An unreadable one is kept as
hydra_flasher.json.brokeninstead of being overwritten with defaults. - A file name starting with
=,+,-or@is written to the flash log with a leading', so spreadsheets don't run it as a formula.
What's Changed
- Release titles: "Firmware v1.2" and "App v1.0.0" by @Waffelo in #9
- Release titles: "Firmware v1.2" and "App v1.0.0" by @Waffelo in #10
- AppImage: file picker works, notifications close after 6 s, no notifi… by @Waffelo in #11
- LEDs work under sudo in the packaged app by @Waffelo in #12
- Polish: file dialogs don't freeze the window, KDE dialog with filter, quieter notifications, build commit by @Waffelo in #13
- Taskbar entry lights up when a job ends while you're in another window by @Waffelo in #14
- Temporary padding, flash history page, audit fixes, firmware 1.3 USB ID, new screenshot by @Waffelo in #15
- Release app 1.1.0 and firmware 1.3 by @Waffelo in #16
Full Changelog: app-v1.0.0...app-v1.1.0
Firmware v1.2
Socket detection. The Pico can now tell which of its chip-select lines lead to a socket, so the app sets its socket count by itself.
New
S_CMD_Q_CS_WIRED(0x24): returns a bitmap of the CS lines that have a pull-up resistor. Each CS pin is briefly read as an input against the RP2040's internal pull-down (50–80 kΩ); a line with an external 10 kΩ pull-up to 3V3 reads high, an open one low. The pin is set high again before it drives, so no chip sees a select glitch.
Hardware (optional, recommended)
- Add a 10 kΩ resistor from each socket's /CS line to 3V3 (Pico pin 36). Values from 4.7 kΩ to 10 kΩ work; 22 kΩ or more is too weak. Keep the resistors' common side on 3V3: tied only to each other they seem to work while the Pico runs, but nothing holds the chips deselected while it starts or resets.
- Boards without the resistors keep working: the app then uses the socket count set by hand.
In the app
- settings → sockets → auto (the default) shows exactly the wired sockets; a socket between wired ones without a resistor shows as
not wiredand is skipped. Without pull-ups the app falls back to a manual count; detect again re-checks.
Compatibility
- Works with older versions of the app (they don't ask for the wiring). Everything from 1.1 stays the same.
What's Changed
- Socket settings by @Waffelo in #4
- Don't freeze on a Pico that doesn't answer by @Waffelo in #5
- Cs detect by @Waffelo in #6
Full Changelog: fw-v1.1...fw-v1.2
Firmware v1.1
Ten sockets, firmware updates from the app. First release published on GitHub.
New
- 10 chip selects: CS0–CS9 on GP5–GP14 (was 6: CS0–CS5 on GP5–GP10). The broadcast that selects every socket at once moved from index 6 to 10.
S_CMD_Q_NUM_CS(0x23): reports the number of CS lines, which is also the broadcast index. The app uses it to work with both this and older firmware.- Version: the standard program-name query (
S_CMD_Q_PGMNAME) answersHydraFlasher 1.1(before:pico-serprog), so the app can show the version and offer updates.
Changed — hardware
- Status LEDs moved to GP16 / GP17 / GP18 (Pico pins 21 / 22 / 24), the other side of the board. Move them when updating from older firmware: GP11–GP13 are chip selects now, and LEDs left there just stay lit.
- Sockets CS0–CS5 keep their pins.
Fixed
- Builds against pico-sdk 2.2.0, whose TinyUSB 0.18.0 the patched CDC driver (
tinyusb_patched/) needs; CI couldn't build the firmware before.
What's Changed
- Worktree rustling meandering clarke by @Waffelo in #1
- Settings by @Waffelo in #2
- Fix ci by @Waffelo in #3
Full Changelog: https://github.com/Waffelo/HydraFlasher/commits/fw-v1.1
App v1.0.0
First packaged release. HydraFlasher now comes as a Windows installer, a portable Windows .exe and a Linux AppImage, so Python isn't needed any more.
Downloads
- Windows:
HydraFlasher-Setup-1.0.0.exeinstalls it with a Start-menu entry and an uninstaller.HydraFlasher-1.0.0-portable.exeruns without installing (it unpacks itself at every start, which takes a few seconds). Windows may warn about an unknown publisher: More info → Run anyway. - Linux:
HydraFlasher-1.0.0-x86_64.AppImage: make it executable (chmod +x) and run it. Needs a distribution from 2022 or newer (glibc 2.35), and on somelibfuse2. For the serial port, your user must be in thedialoutgroup (uucpon Arch). - flashprog (or flashrom) is still needed separately: HydraFlasher looks for it on the first start and asks for it if it's missing. See Installation.
Highlights
- Up to 10 sockets, counted automatically from pull-up resistors on the CS lines (firmware 1.2), or set by hand; sockets can be named.
- Settings page (⚙ or Ctrl+,): socket count and names, live scan on/off with interval and speed, status LEDs, flashprog binary, notifications, resetting learned data, app version.
- Firmware updates from the app: shows the Pico's firmware and the newest release, installs the latest release or any
.uf2(also dropped on the window), mounts the Pico's bootloader drive on Linux. - Drag and drop: an image on a socket card writes it, on the log verifies it.
- Time left for jobs that ran before, and for the whole queue.
- Job queue, one-by-one and broadcast writes, production mode with a CSV flash log, partial writes and verification on the Pico.
- Light and dark mode; the hydra as the window and app icon.
Fixed
- The window no longer freezes on a Pico that doesn't answer (other or hung firmware): it's reported as
not responding, and the firmware update asks for BOOTSEL. - The settings page scrolls with the mouse wheel on Linux.
- Flaky or missing pull-up resistors no longer make the socket count switch back and forth at every reconnect.
What's Changed
- Detailed release notes from a firmware changelog, PR template by @Waffelo in #7
- App release by @Waffelo in #8
Full Changelog: fw-v1.2...app-v1.0.0