docs: document GPS duty-cycling and RXPS watchdog

Settings screen doc gets the new "GPS pwr" row and a watchdog note on
"Pwr save"; Diagnostics doc gets the new "RXPS wd s/h" row and updates
what "Reset counters" actually clears; release-notes.md gets Unreleased
entries for all three additions from the prior commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-08-07 22:14:36 +02:00
co-authored by Claude Opus 5
parent 73744175b0
commit 6fd1c4bae2
3 changed files with 7 additions and 2 deletions
+3
View File
@@ -11,10 +11,13 @@
- **Solo builds for Heltec V3 and V4** (`Heltec_v3_companion_solo_dual`, `heltec_v4_companion_solo_dual`) — the full standalone on-device UI instead of a screen that only mirrors the phone app, with dual transport so the companion app can attach over BLE or USB serial (BLE wins while both are live), same as the Wio Tracker L1 solo builds. Dual transport had only ever been built for nRF52, so ESP32 got its own `DualSerialInterface` to match. Both boards ship with a single button, which the solo UI can't be driven from, so each env enables both supported input devices with default pins picked from what that board leaves free: a **CardKB** on a second I2C bus (pair it with Ext. KB = Compact and no joystick is needed at all) and a **wired joystick** (four direction pins plus a Back button, wired straight to GND — the firmware enables the internal pull-ups). Either is enough on its own, and pins with nothing attached read as not-pressed, so the unused half costs nothing. The env comments list which GPIOs each board has already claimed, for anyone wiring theirs differently.
- **GAT562 30S solo builds now use the same OLED font as the Wio Tracker L1.** The misc-fixed 6x9 font (full Latin, Greek and Cyrillic) had only ever reached the SH1106 and e-ink drivers, so on this board every keyboard alphabet beyond ASCII, and every accented contact name, was still being transliterated (`Łódź``Lodz`) or drawn as a filled block. Solo builds only — the font costs ~14 KB of flash and the repeater/companion builds have no keyboard to type those alphabets on; they keep the built-in font and are byte-for-byte unchanged.
- **Screenshot support on the Heltec V3/V4 solo builds.** `ENABLE_SCREENSHOT` was set on every other solo env but these two, so [Solo Tools](https://marekzegare4.github.io/Solo-tools/) couldn't capture their display. Now consistent across all five solo builds.
- **GPS duty-cycling — Settings System "GPS pwr"** (boards with GPS). Off by default (today's always-on behaviour); pick 1/5/15/30 min or 1 h and GPS sleeps for that long between fixes instead of running continuously — each wake waits for a fix, capped at 60s, before going back to sleep. Automatically stays continuously on regardless of this setting whenever something actually needs a live position: an active Trail recording, Map Live share, an armed Locator, or the Compass / Nearby navigate view — so none of those features degrade, only the idle time between them gets cheaper. The GPS status icon blinks while napping.
- **RX duty-cycle power-save (Settings Radio Pwr save) now recovers on its own if it gets stuck.** The SX126x's hardware duty-cycle sequencer cycles RX↔sleep with no MCU involvement, so a desync (a known failure mode) previously had nothing watching for it — the radio could silently stop receiving. A background watchdog now notices (no BUSY-pin activity for too long), tries a cheap re-arm first, and escalates to a full radio reset if that doesn't clear it. Recovery counts are visible on Tools Diagnostics Live as "RXPS wd s/h" and stay `0/0` on a healthy radio.
- **Settings Keyboard gets an "Ext. KB" row** (boards that support CardKB, above). Switching it to **Compact** hides the on-screen letter grid, special-row icons, and status line entirely — a CardKB typist never looks at any of it, and none of it (script/page, T9-vs-ABC, caps) is actually actionable from CardKB anyway — replacing them with just a reminder of the Tab/Fn+letter shortcuts; the accent and placeholder popups still show normally. With the grid hidden, arrows and Tab take on more useful direct meanings instead of driving an invisible grid selection: **arrows** move the text cursor immediately (no more entering cursor mode first), **plain Enter** submits the message/field (same as Fn+Enter — there's no grid cell to commit), and **plain Tab** opens the placeholder picker directly. Compact is designed to need no joystick/physical button at all, and reclaims the freed space for extra message-preview lines. Off (**Full**) by default.
### Fixes
- **Interference detection (`int.thresh`) silently stopped working as soon as RX power-save was turned on.** Noise-floor sampling was skipped entirely while the SX126x duty-cycles RX on its own, so the floor stayed frozen at whatever it was the moment power-save switched on — comparisons against it grew meaningless the longer the session ran. The radio now borrows a brief continuous-RX window once a minute to take a fresh reading, then goes back to duty-cycling.
- **ESP32 solo firmware was built by CI but never published.** The release job only attached `*.uf2` and `*.zip`, which covered every solo board back when they were all nRF52 — the Heltec V3/V4 `.bin` images were produced and then silently dropped, so there was nothing to download for those boards. Releases now carry a single `-merged.bin` per ESP32 board (bootloader + partition table + app, flashed at `0x0`); the app-only `.bin` is deliberately left out, since flashing that one at `0x0` looks exactly like a bricked device.
- **DM/room replies sometimes didn't show who they were addressed to, and room messages could wrap incorrectly.** The reply-prefix (`@[nick] `) was being stripped at the wrong point for room posts and DMs feeding the fullscreen message view, so a DM reply's "To:" header could go missing while a room reply showed the raw `@[nick] ` marker as literal message text; a related mismatch meant the history list's scrollbar/box-height sizing pass wrapped room messages with their sender name still attached, disagreeing with the actual rendered text.
- **Remote Bot Actions (`!buzz`/`!gps`/`!advert`/`!gpio1`..`!gpio4`) ran immediately on every matching message, before quiet hours/cooldown/per-contact throttle were checked** — those gates only suppressed the reply text, not the actual buzz/GPS toggle/advert/pin write, so e.g. `!buzz` still audibly buzzed during configured quiet hours, and repeating a command wasn't rate-limited at all. Actions now only run once those checks have passed.