Hermes v1.1 — self test, logging, custom rates
Four additions, each closing a gap v1.0 left open.
Drop hermes.fap onto your Flipper at SD Card / apps / GPIO /, then open Apps → GPIO → Hermes.
Self Test — is it me, or them?
The worst half-hour in hardware work is the one spent debugging a target that was fine, because a jumper wasn't.
Bridge TX to RX with a single wire and Hermes sends a pattern out and checks it comes back, at 9600 / 115200 / 460800 / 921600. The three outcomes are genuinely different diagnoses:
- All four echo → the Flipper, its pins and your wire are good. The silence is the target's.
- Slow rates pass, fast ones fail → the link works, but not at speed. Long dupont leads do this. Shorten them.
- Nothing comes back → the jumper isn't on the pins you think it is.
The pattern leads with 0x55 0xAA 0x00 0xFF — alternating bits, then all-low and all-high — so a wire that only passes certain levels gets caught rather than flattered.
Session logging
Settings → Log to SD writes each console session to /apps_data/hermes/hermes_YYYYMMDD_HHMMSS.log, headed with the rate, framing and port — so a file you find months later still says what it came from.
The file keeps the raw bytes, escape sequences and all. The screen strips ANSI to stay readable, but a log you will later grep, diff or replay should be exactly what the wire said. A filled dot in the status bar shows a capture is running. Opt-in — writing to your card is your call.
Custom baud entry
Manual Console → Custom rate… accepts anything from 50 to 2,000,000, lifting v1.0's restriction to the built-in table. Hermes asks the hardware whether a divider actually exists for the rate and refuses it if not, rather than opening a link that cannot work. The check only acquires the handle — it never inits it — so it does not touch the target's line.
Stop autoboot
Hit any key to stop autoboot: 3 gives you about a second, and by the time you have read it and reached for a key it is usually gone. The Ctrl palette now has a Stop autoboot action that hammers Enter for four seconds, so you can arm it before powering the board and let it catch the window for you. The status bar counts down while it runs.
It is driven from the UI tick rather than a blocking delay loop, so the screen keeps redrawing and the incoming boot log still renders while it fires.
Fixed
- The self-test result screen drew its fourth rate row through the footer text. Found while regenerating the screenshots from the real layout constants; the row block now has an explicit vertical budget.
Verified
Release API 87.1 and dev API 88.0 both green in CI, alongside the host autobaud suite (21 checks under ASan/UBSan, driving the real interrupt handler with synthetic waveforms).
GND first, always. 3.3V logic only. RS-232 swings ±12V and will destroy your Flipper — use a MAX3232. For your own boards, or ones you are authorised to test.