diff --git a/README.md b/README.md index 29cca65..b67f84d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Touch-UI [MeshCore](https://github.com/meshcore-dev/MeshCore) companion-radio firmware for the **LilyGo T-Deck / T-Deck Plus**, **Heltec V4 + TFT** and other boards (ESP32-S3). -An LVGL touch UI — map, chat, contacts, channels, settings — split out of +An LVGL touch UI (map, chat, contacts, channels, settings) split out of [meshcomod](https://github.com/ALLFATHER-BV/meshcomod). The app depends on a MeshCore fork via PlatformIO `lib_deps`. @@ -20,22 +20,22 @@ MeshCore fork via PlatformIO `lib_deps`. See **[DEVICES.md](DEVICES.md)** for the full support matrix, install paths and per-board status. -- LilyGo T-Deck / T-Deck Plus — env `LilyGo_TDeck_companion_radio_touch` (stable) -- Heltec V4 + TFT + CHSC6x touch — env `heltec_v4_tft_companion_radio_usb_tcp_touch` (stable) -- Tanmatsu (ESP32-P4) — built from `tanmatsu/` (ESP-IDF), ships via the Tanmatsu app store — [sideload guide](TANMATSU_SIDELOAD.md) for running your own build -- Elecrow ThinkNode M9 — env `ThinkNode_M9_companion_radio_touch` (beta) — [keyboard & d-pad guide](THINKNODE_M9_SHORTCUTS.md) -- RAK WisMesh Tap V2 (RAK3312) — env `rak_tap_v2_companion_radio_touch` (beta) -- LilyGo T-Lora Pager — envs `tlora_pager_lr1121_companion_radio_touch` / `tlora_pager_sx1262_companion_radio_touch` (beta) — [keyboard shortcuts](TLORA_PAGER_SHORTCUTS.md) -- Heltec V4-R8 + Expansion Kit V2 — env `heltec_v4_r8_tft_companion_radio_usb_tcp_touch` (beta) -- LilyGo T-Display P4 — built from `tdisplay_p4/` (ESP-IDF); AMOLED + SX1262 by default, with `WADA_P4_LCD=1` for TFT-LCD and `WADA_P4_LR2021=1` for LR2021 (beta) -- Attaky Mesh Series — env `attaky_mesh_series_companion_radio_touch` (beta) -- Elecrow CrowPanel Advance 3.5 — env `crowpanel_35_companion_radio_touch` (beta, hardware validation pending; requires an SX1262 in the expansion slot) +- LilyGo T-Deck / T-Deck Plus: env `LilyGo_TDeck_companion_radio_touch` (stable) +- Heltec V4 + TFT + CHSC6x touch: env `heltec_v4_tft_companion_radio_usb_tcp_touch` (stable) +- Tanmatsu (ESP32-P4): built from `tanmatsu/` (ESP-IDF), ships via the Tanmatsu app store; [sideload guide](TANMATSU_SIDELOAD.md) for running your own build +- Elecrow ThinkNode M9: env `ThinkNode_M9_companion_radio_touch` (beta); [keyboard & d-pad guide](THINKNODE_M9_SHORTCUTS.md) +- RAK WisMesh Tap V2 (RAK3312): env `rak_tap_v2_companion_radio_touch` (beta) +- LilyGo T-Lora Pager: envs `tlora_pager_lr1121_companion_radio_touch` / `tlora_pager_sx1262_companion_radio_touch` (beta); [keyboard shortcuts](TLORA_PAGER_SHORTCUTS.md) +- Heltec V4-R8 + Expansion Kit V2: env `heltec_v4_r8_tft_companion_radio_usb_tcp_touch` (beta) +- LilyGo T-Display P4: built from `tdisplay_p4/` (ESP-IDF); AMOLED + SX1262 by default, with `WADA_P4_LCD=1` for TFT-LCD and `WADA_P4_LR2021=1` for LR2021 (beta) +- Attaky Mesh Series: env `attaky_mesh_series_companion_radio_touch` (beta) +- Elecrow CrowPanel Advance 3.5: env `crowpanel_35_companion_radio_touch` (beta, hardware validation pending; requires an SX1262 in the expansion slot) ## Architecture This repo holds only the **app**: the `companion_radio` glue, the `ui-touch` LVGL UI, each board's glue/variants, and `platformio.ini`. The **MeshCore -core is not vendored here** — it's pulled as a library via `lib_deps` from the +core is not vendored here**: it's pulled as a library via `lib_deps` from the [`ALLFATHER-BV/meshcomod`](https://github.com/ALLFATHER-BV/meshcomod) monorepo (the same repo as the non-touch firmware), pinned by a lean source-only `core-*` git tag. The touch-app files this repo owns (TouchPrefsStore, WifiRuntimeStore, @@ -105,23 +105,23 @@ pio run -e crowpanel_35_companion_radio_touch # CrowPanel Advance 3. Flash with the NVS-preserving 4-component chain (bootloader / partitions / boot_app0 / firmware at `0x0 / 0x8000 / 0xe000 / 0x10000`) so saved Wi-Fi -credentials survive — not a merged image, which 0xFF-pads and wipes NVS. +credentials survive, not a merged image, which 0xFF-pads and wipes NVS. ## Contributing -Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). One topic per +Contributions are welcome: see [CONTRIBUTING.md](CONTRIBUTING.md). One topic per PR; inbound contributions are accepted under the project's GPL-3.0 license. ## License -**GPL-3.0-or-later** — see [LICENSE](LICENSE). wadamesh is copyleft: anyone who +**GPL-3.0-or-later**: see [LICENSE](LICENSE). wadamesh is copyleft: anyone who distributes a build or a fork must also make their source available under the GPL. This keeps the UI open and concentrates community effort instead of fragmenting it into closed forks. wadamesh incorporates and depends on [MeshCore](https://github.com/meshcore-dev/MeshCore) (MIT, © Scott Powell / -rippleradios.com) and other third-party components — see [NOTICE](NOTICE) for the +rippleradios.com) and other third-party components; see [NOTICE](NOTICE) for the full list and their licenses. MeshCore-derived files keep their MIT notices; the combined work is distributed under the GPL (MIT is GPL-compatible). The MeshCore fork that wadamesh builds against stays **MIT** on purpose, so its Wi-Fi/BLE hooks diff --git a/THINKNODE_M9_SHORTCUTS.md b/THINKNODE_M9_SHORTCUTS.md index 401daf5..228a259 100644 --- a/THINKNODE_M9_SHORTCUTS.md +++ b/THINKNODE_M9_SHORTCUTS.md @@ -1,22 +1,22 @@ # ThinkNode M9: Keyboard & D-pad Guide -The Elecrow ThinkNode M9 has **no touchscreen** — every screen, every setting, +The Elecrow ThinkNode M9 has **no touchscreen**: every screen, every setting, and every chat is driven by the d-pad, the dedicated function keys, and the QWERTY keyboard. If you're coming from the T-Deck or Heltec V4 (touch-first), this page is the five-minute tour that makes the board feel native. ## The inputs -- **D-pad** — four arrows around a centre button (**OK**). Arrows move the +- **D-pad**: four arrows around a centre button (**OK**). Arrows move the on-screen focus highlight; OK activates whatever is focused. **Holding OK** is the board's long-press: it fires the held item's long-press action (a chat message's context menu, the SD row's hold-to-format) and unlocks the lock screen. -- **Function row** — dedicated keys for Chats, Home, Mentions, Advert, Map, +- **Function row**: dedicated keys for Chats, Home, Mentions, Advert, Map, Back, Mic and Ctrl (see the table below). -- **QWERTY keyboard** — the keyboard controller resolves Shift/symbol layers +- **QWERTY keyboard**: the keyboard controller resolves Shift/symbol layers itself, so keys always deliver their final character. It latches one key at - a time, which is why there are no chords on this board — long-press carries + a time, which is why there are no chords on this board; long-press carries the second layer instead. Start typing in a chat and the composer focuses itself; any key wakes the screen from idle. @@ -28,7 +28,7 @@ dropdown → the power menu → the Control Center → a full-screen app → a d else. Once there is nothing left covering the screen, **Back returns you to the -previous screen** — the tab you came from, however you got there: a function +previous screen**, the tab you came from, however you got there: a function key, an app-drawer tile, "Show on map", a contact's Send-msg button. Keep pressing and you keep walking back through where you have been. When the trail runs out Back lands on Home, and on Home with nothing open it does nothing, @@ -42,21 +42,21 @@ the root after closing anything above it. The **Cmdr** tile still opens the Commander screen when you need it. The only exception is deliberate: progress overlays (SD format, bulk delete) -block all keys until the operation finishes — Back will not navigate out from +block all keys until the operation finishes; Back will not navigate out from under a running operation. ## Function keys | Key | Press | Hold | |---|---|---| -| **MSG** | Jump to the Chats tab; inside a conversation, return to the chat list (closes an open app first) | — | -| **HOME** | Peel one layer off an open app; on the Home tab, toggle the app drawer; otherwise jump Home (and clear the Back trail) | — | -| **@ (Mentions)** | Open the Mentions screen | — | +| **MSG** | Jump to the Chats tab; inside a conversation, return to the chat list (closes an open app first) | None | +| **HOME** | Peel one layer off an open app; on the Home tab, toggle the app drawer; otherwise jump Home (and clear the Back trail) | None | +| **@ (Mentions)** | Open the Mentions screen | None | | **ADV** | Open the Send Advert page | **Toggle GPS on/off** | -| **MAP** | Jump to the Map tab — press again *on* the map to toggle pan mode | — | -| **BACK** | Close the top layer (see above) | — | -| **CTRL** | Open the Control Center (quick toggles, incl. the keyboard light: off / on / auto) | — | -| **MIC** | Nothing yet — deliberately reserved | — | +| **MAP** | Jump to the Map tab; press again *on* the map to toggle pan mode | None | +| **BACK** | Close the top layer (see above) | None | +| **CTRL** | Open the Control Center (quick toggles, incl. the keyboard light: off / on / auto) | None | +| **MIC** | Nothing yet (deliberately reserved) | None | | **OK / Enter** | Activate the focused item; send a message; run a terminal command; newline in the editor | **Long-press the focused item / unlock the lock screen** | The **MSG**, **HOME**, **@**, **ADV**, **MAP**, and **CTRL** shortcuts remain @@ -86,7 +86,7 @@ and map-provider policy requirements. ## Typing & editing -Inside a text field the left/right arrows move the caret — and when the caret +Inside a text field the left/right arrows move the caret, and when the caret is already at the edge of the text, the same press steps focus *out* of the field, so you're never stuck. Enter sends (toggleable under Settings), Back leaves the field. In the Terminal, Enter runs the command; in the text editor @@ -110,7 +110,7 @@ After inserting a symbol, focus returns to the originating text field. ## Lock screen -**Hold OK** to unlock — the keyboard's hardware long-press stands in for the +**Hold OK** to unlock: the keyboard's hardware long-press stands in for the hold-to-unlock other boards do by touch. With "Flash on new message" enabled, an incoming message wakes (or lock-reveals) the screen and pulses the keyboard backlight. @@ -118,26 +118,26 @@ backlight. ## Inside apps Store apps (Snake and friends) get the d-pad natively: arrows steer, OK taps -the centre — start, steer, and tap-to-retry all work. Display-only apps +the centre, so start, steer, and tap-to-retry all work. Display-only apps (Airtime, RF Monitor) keep normal navigation: arrows move between the app's -own buttons or scroll the feed. **Back and Home always escape an app** — no +own buttons or scroll the feed. **Back and Home always escape an app**: no app can trap the keys, even while the screen is locked. ## Recent improvements (beta_66 branch) If you last used the M9 on an earlier beta, the notable navigation changes: -- **Back now actually goes back** — once everything covering the screen was +- **Back now actually goes back**: once everything covering the screen was closed, Back had nothing left to do and the press simply died on any bare tab. It now walks back through the screens you visited, then Home. Jumps that used to strand you ("Show on map" from Discover or Contacts, a route replay from a chat, the Home unread line, the ✉ badge, app-drawer tiles) all return properly. **Back also works in the first-boot wizard** now, stepping back through its screens like the on-screen Back button. -- **Back restored and made consistent** — it had regressed to doing nothing +- **Back restored and made consistent**: it had regressed to doing nothing outside text fields, and could close hidden popups beneath the Control Center. Both fixed; the close-what-you-see rule above now holds everywhere. -- **The map opens faster the first time** — the cold open was doing a +- **The map opens faster the first time**: the cold open was doing a whole-card zoom scan whose result was thrown away, and (with no GPS fix) was repeating that scan on *every* open. The "Loading map…" hint now appears immediately instead of after the scan, so the board no longer looks frozen on @@ -145,14 +145,14 @@ If you last used the M9 on an earlier beta, the notable navigation changes: - **The d-pad no longer goes dead for a second** when a message arrives, and the Spectrum page no longer steers an invisible cursor around the app drawer underneath it. -- **Apps can't strand you** — opening Advert/Mentions over a running app used +- **Apps can't strand you**: opening Advert/Mentions over a running app used to orphan it with no key path back; app permission dialogs are now answerable with the d-pad. -- **Map pan cleans up after itself** (see above — it used to leak across tab +- **Map pan cleans up after itself** (see above; it used to leak across tab jumps). - **Keyboard light "On" applies at boot**, not after the first dim cycle. - **Terminal chat shows incoming replies**, not just your own sent lines. -- **GPS works from a cold boot** — the toggle (and ADV-hold) no longer depends +- **GPS works from a cold boot**: the toggle (and ADV-hold) no longer depends on a boot-time detection race. - **Spectrum analyzer** sweeps roughly twice as fast, survives read glitches without flattening the trace, and waits for an in-flight transmission @@ -160,3 +160,11 @@ If you last used the M9 on an earlier beta, the notable navigation changes: The engineering record behind these lives in [`variants/thinknode_m9/M9_PORT.md`](variants/thinknode_m9/M9_PORT.md). + +## Tooltips and the cursor + +The focus highlight is amber, so the selected control stands out on any +background. Icon buttons say what they are: rest on one for a moment and a +small card names it. On a control panel tile the card adds "Hold Enter: +settings": holding OK (the d-pad's Enter) there opens that tile's settings +page. diff --git a/TLORA_PAGER_SHORTCUTS.md b/TLORA_PAGER_SHORTCUTS.md index 7f3dd9f..e583b0c 100644 --- a/TLORA_PAGER_SHORTCUTS.md +++ b/TLORA_PAGER_SHORTCUTS.md @@ -1,19 +1,19 @@ # T-LoRa Pager: Keyboard & Rotary Encoder Guide -The LilyGo T-LoRa Pager has **no touchscreen and no trackball** — every +The LilyGo T-LoRa Pager has **no touchscreen and no trackball**: every screen, every setting, and every chat is driven entirely by the physical QWERTY keyboard and the rotary encoder knob. If you're coming from the T-Deck or Heltec V4 (touch-first), this is the one board where learning a handful of gestures up front pays off immediately. This guide covers both -radio variants (LR1121 and SX1262) — the UI and input handling are identical +radio variants (LR1121 and SX1262); the UI and input handling are identical on both. ## The two inputs -- **Keyboard** — a physical QWERTY matrix with a Space bar, Backspace, Enter, +- **Keyboard**: a physical QWERTY matrix with a Space bar, Backspace, Enter, a Shift key, and an orange **Fn/Alt** key (bottom-left). No dedicated Esc, - arrow keys, or number row — those are covered by combos below. -- **Rotary encoder** — turn to move the on-screen focus highlight; click + arrow keys, or number row; those are covered by combos below. +- **Rotary encoder**: turn to move the on-screen focus highlight; click (press the knob) to select. It's your only pointing device, so almost every screen is navigable with turn + click alone. @@ -44,20 +44,32 @@ while editing a text field, where the keys type normally. A hold opens them over the screen you are on. +Each tab remembers where you were: coming back puts the cursor on the item +you left. Contacts opens on the first contact, and a chat with unread +messages opens on the first of them (see [N](#n-catching-up)). + +Icon buttons say what they are: rest the cursor on one for a moment and a +small card names it, sometimes with a line on what it does or, on a +control-panel tile, "Hold Enter: settings". + +**Power off** (control panel, power button) asks first, with Cancel +selected, so one stray click never switches the Pager off. Press **BOOT** to +wake it again. + ## Rotary encoder | Gesture | Action | Keyboard equivalent | |---|---|---| -| Turn | Move focus to the next/previous item on screen | none — encoder only | +| Turn | Move focus to the next/previous item on screen | none (encoder only) | | Short click | Select / confirm the focused item | **Enter** | | Hold ~1 s, then release | **Back**: closes a popup → closes an open chat → goes Home → Esc (whichever applies first). A ring fills while you hold | **Backspace** (tap) | | **Fn (Alt) + turn**, on a main tab | Move between the 5 main tabs (Mail / Contacts / Home / Map / Settings) | **M / C / H / A / S** jumps directly | -| **Fn (Alt) + turn**, inside a settings page or chat | Scroll the page up/down | none — encoder only | -| **Fn (Alt) + short click**, with a text field focused | Open the special-character picker | none — encoder only | -| Turn, with a dropdown open | Scroll through the dropdown's options | none — encoder only | -| Turn, with the accent picker open | Cycle through the accent variants (see below) | none — encoder only (Fn+Space to enter is shared) | -| Turn, with the @-mention list open | Cycle through matching contacts (see below) | none — encoder only | -| Turn, at the oldest/newest **loaded** message in an open chat | Loads more history in that direction and keeps going — see [Chat screen](#chat-screen) | none — encoder only | +| **Fn (Alt) + turn**, inside a settings page or chat | Scroll the page up/down | none (encoder only) | +| **Fn (Alt) + short click**, with a text field focused | Open the special-character picker | none (encoder only) | +| Turn, with a dropdown open | Scroll through the dropdown's options | none (encoder only) | +| Turn, with the accent picker open | Cycle through the accent variants (see below) | none (encoder only; Fn+Space to enter is shared) | +| Turn, with the @-mention list open | Cycle through matching contacts (see below) | none (encoder only) | +| Turn, at the oldest/newest **loaded** message in an open chat | Loads more history in that direction and keeps going (see [Chat screen](#chat-screen)) | none (encoder only) | Since there's no touch to tap the bottom bar, use its visible **M / C / H / A / S** shortcuts to jump directly or **Fn+turn** to move through the tabs in @@ -66,7 +78,7 @@ order. ## Chat screen An open chat has no touch-only jump-to-oldest/jump-to-latest buttons on this -board — everything is reachable by turning and clicking, and the encoder +board: everything is reachable by turning and clicking, and the encoder behaves a bit differently here than anywhere else in the app. ### Turning through messages @@ -75,16 +87,16 @@ Message history is loaded lazily: only the messages currently near the viewport actually exist as on-screen items, and older/newer ones are pulled in as you approach them. Turning the encoder normally moves the focus highlight one message at a time, and **at the edge of what's currently loaded, it keeps -going** — the turn instead scrolls the list to pull in the next batch of +going**: the turn instead scrolls the list to pull in the next batch of history, then continues moving the highlight onto it. You'll only ever land outside the message list (see below) once you've genuinely reached the very -oldest or very newest message in the whole conversation — never mid-history. +oldest or very newest message in the whole conversation, never mid-history. ### Leaving the message list Turning **past the oldest loaded message** (top edge), once there's truly nothing more to load, wraps around to whatever the last focusable item on the -screen is — the channel-settings gear in an open **channel**, or the Send +screen is: the channel-settings gear in an open **channel**, or the Send button in a **DM** (a DM has no gear to reach). This is plain focus wrap, the same as reaching the end of any other list in the app; there's no chat-specific handling for this edge. @@ -98,7 +110,7 @@ newest message instead. ### The reply row Below the messages, turning steps through: **quick-reply (△) → emoji → -text box → Send**, in that order, in both directions — nothing is skipped. +text box → Send**, in that order, in both directions; nothing is skipped. Turning past the △ chip (toward the messages) always jumps straight to the newest message, regardless of channel or DM. @@ -107,8 +119,8 @@ newest message, regardless of channel or DM. A chat with unread messages opens on the first of them. **N** jumps to whichever message needs your attention: -- If there are unread messages, it jumps to the first one — right below the - **"NEW ----"** divider — and selects it, so you can then turn forward +- If there are unread messages, it jumps to the first one, right below the + **"NEW ----"** divider, and selects it, so you can then turn forward through your unread messages in order, oldest-of-the-unread first. - If nothing is unread, it jumps to the newest message instead (same destination, with focus left on the message). @@ -150,14 +162,14 @@ While any text field is focused, including a Wi-Fi or repeater password: ### Shift and Caps Lock - **Hold Shift + a letter**: that letter (or letters, for as long as you - hold Shift) types uppercase — released, typing goes back to lowercase. + hold Shift) types uppercase; released, typing goes back to lowercase. Real momentary Shift, just like a normal keyboard. - **Hold Fn (Alt), then press Shift**: while you're editing a text field, - toggles **Caps Lock** on/off — stays uppercase until you repeat the chord. + toggles **Caps Lock** on/off; it stays uppercase until you repeat the chord. Anywhere else (not editing a field), the chord does nothing. - Shift alone, tapped with nothing else, does nothing (as expected). - **Hold Fn (Alt), then press Backspace**: jumps straight to the **Home** - screen — works everywhere, including while you're actively editing a field + screen; it works everywhere, including while you're actively editing a field (unlike Alt+Shift above, this one isn't context-dependent). Doesn't delete a character or trigger the plain-Backspace gestures below. @@ -166,19 +178,19 @@ While any text field is focused, including a Wi-Fi or repeater password: | Key | While editing a text field | Otherwise | |---|---|---| | **Enter** | Send / submit / newline | Select the focused item. On a chat message bubble, opens its action menu (Ack / Mention / Copy / Info / Block) | -| **Enter** (hold about half a second) | — | What a long press does on a touchscreen: a chat's actions, hiding an app in the drawer, a control-panel switch's settings page | +| **Enter** (hold about half a second) | Nothing | What a long press does on a touchscreen: a chat's actions, hiding an app in the drawer, a control-panel switch's settings page | | **Backspace** (tap) | Delete a character | **Back**: closes a popup, a page or the chat, otherwise goes Home | | **Backspace** (hold ~1 s) | **Back**, leaving the screen the field is on | **Back** | | **N** | Types n | In an open chat: jump to your first unread message, or the newest if nothing is unread. See [Chat screen](#chat-screen) | -| **Backspace** (hold ~1 s) *while the screen is locked* | — | Unlock the screen | -| **Space** (tap) | Types a space | — | -| **Space** (double-tap, within 250 ms) | Switches between English and your configured secondary keyboard layout | — | -| **Space** (hold ~1 s) | — | Locks the screen (shows a "Locking…" progress bar; tapping any key cancels) | +| **Backspace** (hold ~1 s) *while the screen is locked* | Nothing | Unlock the screen | +| **Space** (tap) | Types a space | Nothing | +| **Space** (double-tap, within 250 ms) | Switches between English and your configured secondary keyboard layout | Nothing | +| **Space** (hold ~1 s) | Nothing | Locks the screen (shows a "Locking…" progress bar; tapping any key cancels) | | **Fn (Alt)** (tap / double-tap) | Next key uses symbols / lock symbols until tapped again | Same | The **BOOT** button (top of the device) instantly wakes the screen from idle-dim. It does *not* unlock a screen you've manually locked with the -Space-hold gesture above — for that, hold Backspace. +Space-hold gesture above; for that, hold Backspace. ## Accented characters @@ -186,30 +198,30 @@ Typing a letter that has accent variants (all vowels, plus `n c s y t z l r`, both cases) pops up a small row of alternatives above the field. To pick one without touch: -1. **Fn (Alt) + Space** — jumps focus into the popup. -2. **Turn the encoder** — cycles through the variants. -3. **Enter** — confirms your choice and replaces the letter you just typed. -4. **Backspace** — dismisses the popup and keeps the plain letter. +1. **Fn (Alt) + Space**: jumps focus into the popup. +2. **Turn the encoder**: cycles through the variants. +3. **Enter**: confirms your choice and replaces the letter you just typed. +4. **Backspace**: dismisses the popup and keeps the plain letter. ## @-mentions Typing `@` followed by a few letters of a contact's name pops up a matching list in a channel/group chat. Unlike the accent picker above, this one grabs -the encoder **immediately** — no Fn+Space needed, since it only appears once +the encoder **immediately**, no Fn+Space needed, since it only appears once you've deliberately started typing a mention: -1. **Turn the encoder** — cycles through the matching contacts. -2. **Enter / encoder click** — confirms the highlighted one, replacing +1. **Turn the encoder**: cycles through the matching contacts. +2. **Enter / encoder click**: confirms the highlighted one, replacing `@partial` with `@FullName ` in your message. -3. **Backspace** — dismisses the list without touching what you typed. +3. **Backspace**: dismisses the list without touching what you typed. ## Sliders Any focused slider (Control Center brightness, a Settings slider, the Map -zoom bar) can't be dragged without touch — instead: +zoom bar) can't be dragged without touch. Instead: -- **Q** — decrease -- **E** — increase +- **Q**: decrease +- **E**: increase Each press moves it proportionally (about 20 presses end-to-end) and persists the new value immediately, the same as releasing a drag. @@ -218,10 +230,10 @@ persists the new value immediately, the same as releasing a drag. While the **Map** tab is active: -- **W** — pan north -- **A** — pan west -- **X** — pan south -- **D** — pan east +- **W**: pan north +- **A**: pan west +- **X**: pan south +- **D**: pan east `X` replaces the usual `S` position because **S** is the visible Settings shortcut. Pressing **A** on another main screen opens Map; once Map is already @@ -235,9 +247,9 @@ needed. **Settings → Keyboard → Keyboard backlight** cycles through three modes (tap to advance): -- **Off** — always dark -- **On** — always lit -- **Auto** (default) — lights up on any keypress and follows the configured +- **Off**: always dark +- **On**: always lit +- **Auto** (default): lights up on any keypress and follows the configured **Screen timeout**; `0 = never` keeps it lit until the screen is turned off Unlike the T-Deck, this is a plain on/off strip under the keys, not a @@ -262,7 +274,7 @@ that changes keyboard language. |---|---| | M / C / H / A / S (top-level main screens only) | Open Mail / Contacts / Home / Map / Settings | | Turn encoder | Move focus | -| Turn, at the loaded edge of a chat | Load more history, keep moving — only exits the list at the true oldest/newest message | +| Turn, at the loaded edge of a chat | Load more history, keep moving; only exits the list at the true oldest/newest message | | Click encoder (or Enter) | Select / confirm | | Hold encoder ~1 s, or tap Backspace | Back | | Fn + turn (main tab) | Switch tabs | @@ -275,7 +287,7 @@ that changes keyboard language. | Fn + Shift (not editing a field) | Nothing | | Fn + Backspace (anywhere) | Jump to Home | | Fn + Space | Enter accent picker | -| @ + letters (composer) | Auto-focuses the mention list — no Fn+Space needed | +| @ + letters (composer) | Auto-focuses the mention list, no Fn+Space needed | | Enter | Select / send / message action menu | | Hold Enter | Long press: a chat's actions, app options, a switch's settings | | Backspace (tap) | Delete while typing, otherwise Back | diff --git a/deploy/site/docs-img/contact_nickname.png b/deploy/site/docs-img/contact_nickname.png new file mode 100644 index 0000000..08e213f Binary files /dev/null and b/deploy/site/docs-img/contact_nickname.png differ diff --git a/deploy/site/docs-img/control_center.png b/deploy/site/docs-img/control_center.png index 5aa37cf..61c05e9 100644 Binary files a/deploy/site/docs-img/control_center.png and b/deploy/site/docs-img/control_center.png differ diff --git a/deploy/site/docs-img/keyboard_tooltip.png b/deploy/site/docs-img/keyboard_tooltip.png new file mode 100644 index 0000000..8fdc98e Binary files /dev/null and b/deploy/site/docs-img/keyboard_tooltip.png differ diff --git a/deploy/site/docs.html b/deploy/site/docs.html index 52d17eb..0eadfae 100644 --- a/deploy/site/docs.html +++ b/deploy/site/docs.html @@ -160,7 +160,8 @@ Screensaver New messages Control panel - Text size & trackball + Text size, trackball & tooltips + T-LoRa Pager Colours & theme
Finding nodes
Discover & wardriving @@ -247,7 +248,7 @@

On each row

Muting messages silences a channel's chatter while an @-mention of you still gets through; mute mentions too and the channel is quiet altogether.

@@ -273,12 +274,16 @@

Contacts

-

Everyone your node knows: name, type, how recently you heard them, and how far away they are when both of you have a position. Tap a contact to message it or open its details: signal history, a route trace, telemetry, and share and favourite options. Nickname gives a contact a name of your own: it shows in Contacts, Chats and on the map, while its options keep the name it advertises, and the nickname never leaves your device.

+

Everyone your node knows: name, type, how recently you heard them, and how far away they are when both of you have a position. Tap a contact to message it or open its details: signal history, a route trace, telemetry, and share and favourite options.

+

Nicknames. Contact options → Nickname gives a contact a name of your own. It shows wherever that contact appears: Contacts, Chats, the chat header, sender names in channels and rooms, the lock screen, notifications, Home widgets and the map. Contact options keeps the name it advertises under the nickname, and searching Contacts finds either one. A nickname never leaves your device: the mesh, the phone app and Lua apps keep the real name. To go back, clear the text and press OK.

Along the top: a filter (everything, or one type of node), the Discovered list behind the radar icon (nodes heard but not yet added), search, sort, and a menu with Add contact, Select to delete, Auto-add settings and Blocked users.

The Discovered list is passive, built from what the device overhears; to go looking for nodes actively, see Discover. Auto-add can pull new nodes in from their adverts, or you can add them by hand.

Contacts list
Contacts
+
@@ -334,7 +339,7 @@

The lock screen keeps the device from reacting to a pocket or a stray tap. It shows the wadamesh mark, a large clock and the date, a line of the mesh activity over the last 24 hours with how many packets were heard, up to two unread conversations, and along the bottom how to unlock and the battery. A wallpaper you chose shows dimmed behind it. The whole view moves a few pixels every minute so nothing burns into the screen.

How you unlock depends on the board, and the bottom line says it: on the T-Deck you hold the trackball.

-

Settings → Lock screen has the wallpaper and the clock colour, Lock when screen off, Message text on lock screen (turn it off and the unread cards show who wrote, not what), and the PIN.

+

Settings → Lock screen has the wallpaper (with Default wallpaper to go back from a picture of your own) and the clock colour, Lock when screen off, Message text on lock screen (turn it off and the unread cards show who wrote, not what), and the PIN.

PIN lock

Turn on PIN lock and the device asks for a 4 character PIN to unlock: numbers, letters or a mix, and letters are not case sensitive. It locks at boot and every time the screen goes off.

Before you choose one, it shows a warning that you have to accept: a forgotten PIN cannot be recovered. The only way back in is to reset the device, which erases everything on it: contacts, channels, messages and settings. Nobody can unlock it for you.

@@ -396,26 +401,45 @@

Control panel

-

The quick switches, over whatever you are doing: Wi-Fi, Bluetooth, GPS, the day or night theme, the keyboard backlight (off, on or automatic), Lock, sound, Do Not Disturb, and a screenshot button with an optional timer, plus screen brightness, and volume on the boards with a speaker. Which switches appear depends on what the board has.

-

Open it by tapping the status bar, or by holding the Settings tab. Tap the bar again, or anywhere outside the panel, to close it. Hold a switch to jump to its settings page.

+

The quick switches, over whatever you are doing, as tiles in the launcher's style: Wi-Fi, Bluetooth, GPS, the day or night theme, the keyboard backlight (off, on or automatic), Lock, sound, Do Not Disturb and, on most boards with a battery, the Battery saver, plus screen brightness, and volume on the boards with a speaker. A tile takes the colour of its Settings group and fills while it is on. The ThinkNode M9 and T-LoRa Pager add a screenshot button with an optional timer. Which tiles appear depends on what the board has.

+

Open it by tapping the status bar, or by holding the Settings tab. Tap the bar again, or anywhere outside the panel, to close it. Hold a tile and a card says what it is; keep holding and its settings page opens. With keys, the selected tile shows the same card, and holding Enter on the T-LoRa Pager, or OK on the ThinkNode M9, opens its settings.

-
The control panel
The control panel
+
The control panel
The control panel
-

Text size & trackball

+

Text size, trackball & tooltips

Text size

Where the board has room for the bigger fonts, Settings → Display → UI size makes the text larger. On the T-Deck, ThinkNode M9 and Heltec V4-R8 the choices are Normal, Large text and Huge text; the T-LoRa Pager and the large-screen boards have their own steps. It applies after a restart, and every screen is laid out for the bigger sizes rather than simply scaled up. The Heltec V4 has no room for the extra fonts.

The T-Deck trackball

The trackball works in one of two ways. In Scroll, the default, rolling it moves the screen: lists, pages and conversations. In Cursor it moves a pointer that clicks what it is over. Hold the trackball still for about half a second to switch between them; a card in the middle of the screen shows which one you are in. Settings → Keyboard → Trackball sets it too, and also offers Navigate (experimental), which moves a highlight from item to item.

+

Tooltips and the cursor

+

When you get around with keys (the trackball's Navigate mode, a Bluetooth keyboard, or a board without a touchscreen), the selected control has an amber outline, so it stands out on any background. Icon buttons say what they are: rest on one for a moment and a small card names it, sometimes with a line on what it does. On touch, hold an icon button to see the same card; lifting your finger then never taps it.

The trackball switched to Scroll
Hold the trackball: Scroll
+
+ +
+

T-LoRa Pager

+
+

The T-LoRa Pager has no touchscreen: the keyboard and the wheel drive everything. Turn the wheel to move the amber cursor, click to select. The full key list is in TLORA_PAGER_SHORTCUTS.md; these are the ones you use most:

+ +

Each tab remembers where you were. Contacts opens on the first contact, a chat opens on its first unread message, and Power off asks first, so one stray click never switches the Pager off.

+

Battery. The GPS rests in standby between position checks and is switched off completely when GPS is off, the display panel sleeps with the screen off, and the speaker amplifier only runs while a sound plays. Power off puts the radio to sleep and switches off the GPS, the panel and the keyboard light; press BOOT to wake it.

@@ -484,7 +508,7 @@
Chat icons and bubbles
-

Chat icons are Glyphs, a mark of dots drawn from the chat's key, or Initials: the first two letters of the name (a leading # skipped) in a ball coloured from the name. The choice reaches every icon at once: the chat list, contacts, the conversation header, the lock screen cards and the new-message card. A chat icon you picked yourself (an emoji) still wins.

+

Chat icons are Glyphs, a mark of dots drawn from the chat's key, or Initials: the first two letters of the name (a leading # skipped) in a ball coloured from the name. The choice reaches every icon at once: the chat list, contacts, the conversation header, the lock screen cards and the new-message card. A chat icon you picked yourself (an emoji) still wins, and a contact whose name has an emoji in it shows that emoji until you pick another.

Every sender's name is in its own colour, and a person's name, glyph and ball always share it. Colourful bubbles tints the bubbles with it too, your own included; mentions of you keep their blue bubble. In Day mode, names and glyphs on the light lists use a deeper shade of their colour so they read on white.

@@ -747,7 +772,7 @@

Lock screen

The lock screen and the PIN (Lock screen & PIN).