From e06446c3d108150bb0d7f22dc41b4734ac65ea91 Mon Sep 17 00:00:00 2001 From: Jakub Heger Date: Fri, 16 Oct 2026 11:58:41 +0200 Subject: [PATCH] Release app 1.1.0 and firmware 1.3: version, changelogs Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 40 +++++++++++++++++++++++----------------- HydraFlasher.py | 2 +- firmware/CHANGELOG.md | 9 +++++---- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e9363c..9b5125c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,29 +2,35 @@ Each app release (`app-v` tag) publishes the section of its version as the GitHub release notes, next to the Windows installer, the portable `.exe` and the Linux AppImage; CI refuses a tag without one. Keep the headings as `## · `. The Pico firmware has its own changelog: [firmware/CHANGELOG.md](firmware/CHANGELOG.md). -## Unreleased +## 1.1.0 · 2026-10-16 + +**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) or `HydraFlasher-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 said `libfuse2`), or start it with `--appimage-extract-and-run`. Desktop notifications need `notify-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-.csv` instead of deleting it. - -### Fixed -- **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; an earlier download is reused only if it still matches. -- **The settings file can't be left half-written** by a crash or a full disk (it's written to a copy, then swapped in). An unreadable one is kept as `hydra_flasher.json.broken` instead 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. -- **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 (kdialog) 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. -- **Notifications stayed on screen** until clicked (AppImage): they close after 6 seconds now. -- **Status LEDs under sudo** (when your user can't open the serial port) didn't work in the packaged app. +- **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 -- **Licenses:** the packages now include the licence texts of everything bundled with HydraFlasher (Python, Tcl/Tk, customtkinter, pyserial, …) in `THIRD-PARTY-LICENSES.txt`; settings → version → **licenses** opens them. -- Builds are reproducible from pinned tools: appimagetool 1.9.1 with its checksum, GitHub Actions pinned to commits. -- A successful probe (or the automatic identify of a new chip) no longer shows a notification; a failed one still does. -- Notifications only appear while the HydraFlasher window isn't focused, and show the hydra icon. +- **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`/`_truncated` file next to it:** the copy is temporary and deleted once the queue is done. -- **The taskbar entry lights up** when a job ends while you're in another window (Linux: until you switch to HydraFlasher; Windows: it flashes). Independent of the notification setting. -- File dialogs on Linux: KDE gets its own dialog (kdialog) even when zenity is installed, with the image filter, and above the HydraFlasher window (it was attached to the window manager's frame before, which KDE ignores). The window keeps drawing and scanning while a dialog is open. -- Settings show the git commit of packaged builds next to the version. -- The AppImage needs FUSE (`fuse3`): the 1.0.0 notes said `libfuse2`. Without it, start it with `--appimage-extract-and-run`. +- **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.broken` instead 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. ## 1.0.0 · 2026-10-15 diff --git a/HydraFlasher.py b/HydraFlasher.py index c33707f..041fdd0 100644 --- a/HydraFlasher.py +++ b/HydraFlasher.py @@ -150,7 +150,7 @@ # The app's own version (semantic: minor for features, patch for fixes); the firmware # has its own (FW_VERSION in firmware/main.c) -APP_VERSION = "1.0.0" +APP_VERSION = "1.1.0" # Firmware updates: GitHub Releases tagged fw-v carry the .uf2 (CI builds them) GITHUB_REPO = "Waffelo/HydraFlasher" diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index a528b67..eab8f67 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -4,17 +4,18 @@ Each release (`fw-v` tag) publishes the section of its version as the G To update a Pico running HydraFlasher firmware: in the app, **settings → firmware → latest**. A blank Pico, or one with other firmware: hold **BOOTSEL** while plugging it in, then the same (see the [user guide](https://github.com/Waffelo/HydraFlasher/wiki/Settings#updating-the-firmware)). -## Unreleased (1.3) +## 1.3 · 2026-10-16 -**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. +**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`** (was `CAFE:4001`). The product name stays "HydraFlasher", which is how the app finds the Pico. +- **USB ID `2E8A:000A`** (was `CAFE:4001`): Raspberry Pi's shared ID for Pico SDK serial (CDC) devices, which [their rules](https://github.com/raspberrypi/usb-pid) 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 `621621` on every board), so two Picos get different names in `/dev/serial/by-id/` and on Windows. ### Compatibility -- Needs an app from the same day or later to be selected automatically after the update (older apps still find it by its name, with a lower score). +- **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=`). ## 1.2 · 2026-10-15