mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
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:
@@ -70,7 +70,7 @@ Lists all available home screen pages. For each entry:
|
|||||||
| SF | 5–12 | LEFT/RIGHT. Spreading factor. |
|
| SF | 5–12 | LEFT/RIGHT. Spreading factor. |
|
||||||
| BW | 7.8–500 kHz | LEFT/RIGHT cycles the standard LoRa bandwidths. |
|
| BW | 7.8–500 kHz | LEFT/RIGHT cycles the standard LoRa bandwidths. |
|
||||||
| CR | 5–8 | LEFT/RIGHT. Coding rate (4/5–4/8). |
|
| CR | 5–8 | LEFT/RIGHT. Coding rate (4/5–4/8). |
|
||||||
| Pwr save | ON / OFF | **Battery saver.** Hardware duty-cycle receive: the SX126x cycles RX↔sleep on its own and wakes on a preamble, cutting average RX current. Trades a little receive latency; leave OFF for lowest-latency reception. Requires an SX126x radio (otherwise stays on continuous RX). **Forced off (shown as `--`) while the repeater is on** — a repeater must listen continuously; your setting is restored when the repeater is switched off. |
|
| Pwr save | ON / OFF | **Battery saver.** Hardware duty-cycle receive: the SX126x cycles RX↔sleep on its own and wakes on a preamble, cutting average RX current. Trades a little receive latency; leave OFF for lowest-latency reception. Requires an SX126x radio (otherwise stays on continuous RX). **Forced off (shown as `--`) while the repeater is on** — a repeater must listen continuously; your setting is restored when the repeater is switched off. A background watchdog recovers automatically if the duty-cycle sequencer ever gets stuck (soft re-arm, then a full radio reset) — see Tools › Diagnostics for the recovery counts. |
|
||||||
| Auto pwr | ON / OFF | **Adaptive Power Control.** Lowers actual TX power on strong links to save energy, ramping back up — to the **TX Pwr** ceiling — on weak or lost links. Link quality comes from direct-message ACK SNR and, for channel messages (no ACK), from hearing a repeater rebroadcast your packet. The radio page / name bar shows the live power. Default OFF (fixed TX power). **Suppressed (shown as `--`) while the repeater is on** — a repeater holds full TX power for consistent relay reach; your setting is restored when the repeater is switched off. |
|
| Auto pwr | ON / OFF | **Adaptive Power Control.** Lowers actual TX power on strong links to save energy, ramping back up — to the **TX Pwr** ceiling — on weak or lost links. Link quality comes from direct-message ACK SNR and, for channel messages (no ACK), from hearing a repeater rebroadcast your packet. The radio page / name bar shows the live power. Default OFF (fixed TX power). **Suppressed (shown as `--`) while the repeater is on** — a repeater holds full TX power for consistent relay reach; your setting is restored when the repeater is switched off. |
|
||||||
|
|
||||||
| OLED | E-Ink |
|
| OLED | E-Ink |
|
||||||
@@ -90,6 +90,7 @@ The **repeater** mode and its flood filters live on their own screen — see **T
|
|||||||
| Name | keyboard entry (up to 31 chars) | This device's node name, shown to others and in every advert. **Enter** opens the keyboard pre-filled with the current name; applied and saved on submit |
|
| Name | keyboard entry (up to 31 chars) | This device's node name, shown to others and in every advert. **Enter** opens the keyboard pre-filled with the current name; applied and saved on submit |
|
||||||
| Timezone | −12 h … +14 h | UTC offset in whole hours |
|
| Timezone | −12 h … +14 h | UTC offset in whole hours |
|
||||||
| Low battery | off / 3.0 V / 3.1 V / 3.2 V / 3.3 V / 3.4 V / 3.5 V | Auto-shutdown threshold; also sets the 0 % anchor for the battery percentage indicator |
|
| Low battery | off / 3.0 V / 3.1 V / 3.2 V / 3.3 V / 3.4 V / 3.5 V | Auto-shutdown threshold; also sets the 0 % anchor for the battery percentage indicator |
|
||||||
|
| GPS pwr _(if GPS detected)_ | off / 1 min / 5 min / 15 min / 30 min / 1 h | **Battery saver.** Cycles GPS off between fixes instead of running it continuously; each wake waits for a fix (up to 60 s) before sleeping again for the chosen interval. Automatically stays continuously on regardless of this setting whenever something needs a live position — an active Trail recording, Map › Live share, an armed Locator, or the Compass / Nearby navigate view. `off` (default) matches earlier releases: GPS runs continuously whenever enabled. The GPS status icon blinks while napping between fixes. |
|
||||||
| Units | Metric / Imperial | Global unit system for every distance/speed shown in Tools (Nearby Nodes, Trail, navigate-to-point). Metric: m / km, km/h, min/km. Imperial: ft / mi, mph, min/mi |
|
| Units | Metric / Imperial | Global unit system for every distance/speed shown in Tools (Nearby Nodes, Trail, navigate-to-point). Metric: m / km, km/h, min/km. Imperial: ft / mi, mph, min/mi |
|
||||||
| Reboot | action (**Enter**) | Restarts this device. Pending setting changes are saved first. Last row, so it isn't the default-selected one |
|
| Reboot | action (**Enter**) | Restarts this device. Pending setting changes are saved first. Last row, so it isn't the default-selected one |
|
||||||
|
|
||||||
|
|||||||
@@ -494,8 +494,9 @@ A circular tab carousel of live device and mesh stats, refreshed once a second (
|
|||||||
| Pool free | Free entries in the packet pool |
|
| Pool free | Free entries in the packet pool |
|
||||||
| Queue | Packets waiting in the outbound queue |
|
| Queue | Packets waiting in the outbound queue |
|
||||||
| Errors | Radio error flags since boot/reset — `OK`, or tokens `F` (queue full), `C` (CAD timeout), `R` (RX-start timeout) |
|
| Errors | Radio error flags since boot/reset — `OK`, or tokens `F` (queue full), `C` (CAD timeout), `R` (RX-start timeout) |
|
||||||
|
| RXPS wd s/h | RX duty-cycle watchdog recovery count, `soft/hard` — how many times the background watchdog has re-armed (soft) or fully reset (hard) a stuck duty-cycle sequencer. Stays `0/0` unless Settings › Radio › **Pwr save** is on and something actually went wrong. |
|
||||||
|
|
||||||
The packet counters, **Forwarded** and **Errors** are cumulative since boot. On the **Live** tab, **Hold Enter** opens a one-item *Reset counters* menu (Back dismisses it); the live readings (noise, RSSI/SNR, pool, queue, uptime) are not affected. **Cancel/Back** returns to the Tools list.
|
The packet counters, **Forwarded**, **Errors** and **RXPS wd s/h** are cumulative since boot. On the **Live** tab, **Hold Enter** opens a one-item *Reset counters* menu (Back dismisses it); the live readings (noise, RSSI/SNR, pool, queue, uptime) are not affected. **Cancel/Back** returns to the Tools list.
|
||||||
|
|
||||||
The counters make the repeater behaviour observable: **Forwarded** confirms the node is actually relaying (not just configured to), and **Pool free** / **Queue** show whether forwarding is exhausting the packet pool. See **Tools › Repeater** for the relaying options.
|
The counters make the repeater behaviour observable: **Forwarded** confirms the node is actually relaying (not just configured to), and **Pool free** / **Queue** show whether forwarding is exhausting the packet pool. See **Tools › Repeater** for the relaying options.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
- **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.
|
- **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.
|
- **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.
|
- **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
|
### 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.
|
- **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.
|
- **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.
|
- **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.
|
||||||
|
|||||||
Reference in New Issue
Block a user