On-device scope-from-repeater picker, "heard by N repeaters" on channel messages, received hop-count display, and a memory-usage indicator, plus a scoped-flood fix. Update over WiFi (Admin → WiFi → Check for updates) or via the web flasher.
Added
- Pick a scope from a nearby repeater. When setting a region scope — global (Settings → Radio → Scope) or
a per-channel/room override — a new From repeater button asks a heard repeater for the list of regions it
actually serves, so you don't have to know the exact names. Pick a repeater, then pick one region from the
reply; it fills the scope field for you to review and Save. The manual text entry is untouched — this just
adds a shortcut. The picker lists direct-range (0-hop) repeaters the device has heard (tap the flood-advert
button on the Heard Adverts screen to prompt discovery). Requires a repeater running firmware that answers the
region query. Multi-hop repeaters are not supported — the query needs a route-direct path, and an overheard
advert path isn't a reliable one; configure scopes from a repeater within direct range. (#45) - "Heard by N repeaters" on sent channel messages. A channel message you send now shows
✓ ↻ Nonce nearby
repeaters rebroadcast it — the✓means sent, and↻ Nis how many distinct repeaters were heard echoing it
back (the count climbs as echoes arrive). It's deliberately different from a direct message's✓✓(which is a
real delivery ACK) — a channel echo only confirms a repeater relayed it. Always on; only meaningful where
repeaters are in range. Thanks @jason-s13r (#39). - Show received hop count. Optionally show how many hops a received message took (
xNnext to the time;
x0= heard directly). Off by default — enable in Settings → Messaging → Show Hop Count. (#39) - Memory usage indicator (debug). Optionally show
P% R%(PSRAM / internal-RAM used) in the status bar, and
log internal-DRAM free / low-water / largest-free-block plus PSRAM over serial — handy for diagnosing memory
pressure. Off by default — enable in Settings → Display → Show Memory Usage. Thanks @jason-s13r (#38).
Changed
- LVGL now allocates from PSRAM instead of internal DRAM. This frees scarce internal RAM for the things that
can only live there — notably BLE companion mode. Measured on the T-Deck with BLE companion and an app
connected: ~124 KB internal DRAM free with a ~111 KB largest contiguous block (negligible fragmentation); the
redirect is effectively what lets that combination fit. Validated on both T-Deck (octal PSRAM) and T-Watch Ultra
(quad PSRAM) with no perceptible UI slowdown. Falls back to DRAM if PSRAM is unavailable. Thanks @jason-s13r (#38). - Chat bubbles are freed when you leave a chat, so a previously-viewed conversation no longer keeps its
rendered bubbles in memory while you're on other screens (they're rebuilt from history on reopen). (#38)
Fixed
- A scope/region field with spaces no longer silently kills scoped floods. A scope holds a single region
name; pasting a multi-regionregion deflist (e.g.west pnw or wv eug) hashed the whole string into a
transport key that matched no repeater, so hashtag/private-channel traffic was dropped while Public kept
working. The config tool now rejects a scope containing a space, and the firmware keeps only the first token
(with a serial note) across every input path —config.json, the companion set-scope command, and the
on-device scope editor. (#36)