diff --git a/FEATURES.md b/FEATURES.md index 79ba47a3..24d88a4b 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -534,6 +534,98 @@ From channel view, Hold Enter โ†’ "Who's online?". Sends 0-hop discovery to chan --- +## New ideas (unprioritised) + +Captured for later triage. None designed in detail yet except DM delivery status. + +### ๐Ÿ“‹ DM delivery status + +Show whether an outgoing direct message reached the recipient, using the ACK +that MeshCore already produces (no protocol change). `sendMessage()` returns +`expected_ack` + `est_timeout`; the ACK arrives via `onAckRecv` / `isAckPending` +โ€” the same mechanism APC and ping already consume. + +Per-message status glyph at the end of each outgoing DM row in the history: +- `ยท` / `โ€ฆ` โ€” sent, awaiting ACK (pending) +- `โœ“` โ€” delivered to the recipient (ACK matched) +- `โœ—` / `!` โ€” timed out, no confirmation + +Data model (RAM only, no schema bump โ€” DM history already lives in RAM): +- `DmHistEntry` gains `uint8_t ack_status` (0=incoming/none, 1=pending, + 2=delivered, 3=failed) and `uint32_t ack_tag` (the `expected_ack` CRC). + +Wiring: +- On send: store `ack_tag = expected_ack`, `ack_status = pending`, record the + send time + `est_timeout`. +- On ACK: route `onAckRecv(ack_crc)` to the UI; find the entry whose `ack_tag` + matches and set it delivered (single shared callback, like `onPingResult`). +- Timeout: in the UI loop, a pending entry older than `est_timeout` โ†’ failed. + +Edge cases: +- Sends with no path / `expected_ack == 0` (and channel messages, which have no + ACK) can't be confirmed โ†’ show plain "sent" (`โ†’`) and no delivery state. +- Glyph rendering: prefer a Lemon-font check; on the plain ASCII font fall back + to drawn 1-px marks or letters so it reads on the OLED. + +### ๐Ÿ“‹ Periodic location beacon ("live share") + +Auto-send `{loc}` every N minutes to a chosen channel or DM contact โ€” group +trip tracking. Builds on the existing auto-advert cadence pattern and `{loc}` +expansion. A status-bar indicator (like `A`/`G`) while active; off by default. + +### ๐Ÿ“‹ Arrival / proximity alert + +Buzzer + alert when within X m of the active nav target (waypoint / node / +backtrack). Closes the loop on the navigator โ€” you no longer have to stare at +the distance readout. Radius configurable (e.g. 20/50/100 m). + +### ๐Ÿ“‹ "Where am I" location screen + +Tools entry showing current lat/lon (optionally MGRS/UTM grid ref), fix quality +(sats / HDOP if the provider exposes it), altitude, and a one-press share to a +channel/DM. Complements the nav suite with an at-a-glance position readout. + +### ๐Ÿ“‹ On-screen QR โ€” share own contact / channel + +Render the device's own contact (or a channel) as a QR on the display so a +phone can import it without the companion app. The QR payload format already +exists (`docs/qr_codes.md`); this is the on-device render side. + +### ๐Ÿ“‹ Sunrise / sunset + golden hour + +Computed from GPS position + RTC date โ€” pure math, no extra hardware. A Clock +dashboard field or a small Tools readout. Useful for planning outdoor activity. + +### ๐Ÿ“‹ "Find my device" โ€” remote buzzer + +A received command (from a paired contact, or a dedicated channel keyword) makes +the node play a locator tone for a few seconds. Helps find a dropped/misplaced +device. Gate behind a setting to avoid abuse. + +### ๐Ÿ“‹ Trail auto-pause + +Stop counting elapsed/avg-speed (and optionally skip sampling) when stationary, +so "moving time" and average speed reflect actual travel. Reuses the COG ring's +min-displacement gate to detect standing still. + +### ๐Ÿ“‹ Night mode + +Quick toggle for an inverted / minimum-brightness scheme for night use, separate +from the brightness levels. On e-ink flag as degraded (inversion ghosts). + +### ๐Ÿ“‹ Stopwatch / timer + +Simple Tools utility โ€” count-up stopwatch and a count-down timer with a buzzer +at zero. Joystick: Enter start/stop, Hold Enter reset. + +### ๐Ÿ“‹ Trail elevation / ascent + +If the GPS provider exposes altitude, add total ascent + current elevation to +the trail Summary and `` tags to the GPX export. Skip cleanly when no +altitude is available. + +--- + ## Deferred ### โŒ Morse keyboard