refactor: rename firmware from Plus to Solo
- FIRMWARE_VERSION: v1.15-plus.1 → v1.15-solo.1 - FIRMWARE_PLUS_BUILD → FIRMWARE_SOLO_BUILD in all platformio.ini and UITask.cpp - docs/plus_features/ → docs/solo_features/ (all sub-docs moved) - README: update all doc links plus new Documentation section - GitHub Actions: extract GIT_TAG_VERSION in each build job (was missing, causing empty FIRMWARE_VERSION in builds); rename output files to solo-VERSION-oled.uf2 / solo-VERSION-eink.uf2; release title → "Solo VERSION" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
BIN
docs/solo_features/clock_screen/clk_scr_1_eink.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
docs/solo_features/clock_screen/clk_scr_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/solo_features/clock_screen/clk_scr_2_eink.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/solo_features/clock_screen/clk_scr_2_oled.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
55
docs/solo_features/clock_screen/clock_screen.md
Normal file
@@ -0,0 +1,55 @@
|
||||
## Clock Screen
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
A full-screen clock page on the home screen. Shows the current time and date, with up to three configurable data fields below.
|
||||
|
||||
Time is synchronized from GPS or via the companion app. Timezone offset is applied from **Settings › System**.
|
||||
|
||||
If no time source is available, the screen shows _"! No time sync"_ with a hint to enable GPS or connect the app.
|
||||
|
||||
---
|
||||
|
||||
### Time display
|
||||
|
||||
- **Format** — 24 h or 12 h with AM/PM; configurable in **Settings › Display**
|
||||
- **Seconds** — shown by default on OLED; hidden on e-ink (always) and optionally on OLED via **Settings › Display › Clock seconds**; hiding reduces the refresh rate from 1 s to 60 s
|
||||
|
||||
---
|
||||
|
||||
### Data fields
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Up to three data fields are shown below the date separator. Each field displays a label and a value on the same line.
|
||||
|
||||
| Field | Label | Value |
|
||||
| ----------- | ----- | ------------------------------------------------------------------------- |
|
||||
| None | — | — |
|
||||
| Batt V | Batt | Battery voltage (e.g. `3.92V`) |
|
||||
| Batt % | Batt | Battery percentage using LiPo curve anchored at the low-battery threshold |
|
||||
| Temperature | Temp | °C from onboard sensor |
|
||||
| Humidity | Hum | % from onboard sensor |
|
||||
| Pressure | Pres | hPa from onboard sensor |
|
||||
| GPS | GPS | `lat lon` decimal degrees, or `no fix` |
|
||||
| Altitude | Alt | metres from GPS |
|
||||
| Luminosity | Lux | lux from onboard sensor |
|
||||
| CO₂ | CO2 | ppm from onboard sensor |
|
||||
| Contacts | Nodes | Total contacts in the mesh |
|
||||
| Messages | Msgs | Total unread message count |
|
||||
|
||||
Sensor fields show `--` when the sensor is not connected or has no data.
|
||||
|
||||
---
|
||||
|
||||
### Configuring fields
|
||||
|
||||
**Hold Enter** (or press the **Context menu** key) on the Clock page to open the Dashboard Config screen, where each of the three field slots can be cycled with **LEFT/RIGHT**.
|
||||
BIN
docs/solo_features/favourites_dial/fav_dial_1_eink.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
docs/solo_features/favourites_dial/fav_dial_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
59
docs/solo_features/favourites_dial/favourites_dial.md
Normal file
@@ -0,0 +1,59 @@
|
||||
## Favourites Dial
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :------------------------: | :------------------------: |
|
||||
|  |  |
|
||||
|
||||
A dedicated home page showing a grid of up to 6 pinned contacts for quick access. The layout adapts to the display orientation:
|
||||
|
||||
- **Portrait** (OLED, e-ink portrait) — 2 columns × 3 rows
|
||||
- **Landscape** (e-ink landscape) — 3 columns × 2 rows
|
||||
|
||||
---
|
||||
|
||||
### Navigation
|
||||
|
||||
Navigate tiles with **UP / DOWN / LEFT / RIGHT**. Pressing a directional key at the edge of the grid switches to the adjacent home page instead of wrapping.
|
||||
|
||||
**Enter on a filled tile** — opens that contact's DM directly.
|
||||
|
||||
**Enter on an empty tile (`+`)** — opens a contact picker to fill the slot.
|
||||
|
||||
---
|
||||
|
||||
### Unread badge
|
||||
|
||||
Filled tiles show an unread message count in the top-right corner when there are unread DMs from that contact. The contact name is ellipsized to make room for the badge.
|
||||
|
||||
If a pinned contact has been removed from the contacts list, the tile shows `(gone)` until the slot is reassigned.
|
||||
|
||||
---
|
||||
|
||||
### Pinning a contact
|
||||
|
||||
**From the Favourites Dial** — press **Enter** on an empty tile (`+`). A picker opens showing:
|
||||
|
||||
1. Contacts marked as favourites in the upstream app (starred contacts) — listed first
|
||||
2. Recent DM contacts — listed after
|
||||
|
||||
Select a contact to pin it to that slot.
|
||||
|
||||
**From a DM conversation** — **Hold Enter** › context menu › **Pin to dial**, then choose a slot from the slot picker (Slot 1–6, showing the current occupant name or "empty").
|
||||
|
||||
If the selected contact is already pinned in another slot, it is moved to the new slot automatically.
|
||||
|
||||
---
|
||||
|
||||
### Unpinning a contact
|
||||
|
||||
Open the contact's DM, **Hold Enter** › context menu › **Unpin (slot N)**.
|
||||
|
||||
---
|
||||
|
||||
### Reordering the Favourites page
|
||||
|
||||
The position of the Favourites Dial in the home page navigation sequence can be changed in **Settings › Home Pages** — press **LEFT / RIGHT** on the Favourites entry to move it earlier or later.
|
||||
BIN
docs/solo_features/message_screen/mes_scr_1_eink.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/solo_features/message_screen/mes_scr_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/solo_features/message_screen/mes_scr_2_eink.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
docs/solo_features/message_screen/mes_scr_2_oled.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/solo_features/message_screen/mes_scr_3_eink.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
docs/solo_features/message_screen/mes_scr_3_oled.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
docs/solo_features/message_screen/mes_scr_4_eink.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
docs/solo_features/message_screen/mes_scr_4_oled.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
docs/solo_features/message_screen/mes_scr_5_eink.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
docs/solo_features/message_screen/mes_scr_5_oled.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/solo_features/message_screen/mes_scr_6_eink.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
docs/solo_features/message_screen/mes_scr_6_oled.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
docs/solo_features/message_screen/mes_scr_7_eink.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
docs/solo_features/message_screen/mes_scr_7_oled.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
108
docs/solo_features/message_screen/message_screen.md
Normal file
@@ -0,0 +1,108 @@
|
||||
## Messages Screen
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
The Messages screen is split into three modes — **DMs**, **Channels**, and **Rooms** — selectable with UP/DOWN on the mode-select screen. Each mode shows the corresponding list of conversations with unread counters.
|
||||
|
||||
---
|
||||
|
||||
### Sending messages
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Press **Enter** on a contact or channel to open its history, then press **Enter** again (or select an empty send row) to compose a message. Choose between:
|
||||
|
||||
- **Custom message** — opens the on-screen keyboard
|
||||
- **Q1–Q10** — quick reply templates editable in Settings › Messages
|
||||
|
||||
The keyboard supports placeholders that insert live data at send time:
|
||||
|
||||
| Placeholder | Value | Availability |
|
||||
| ----------- | -------------------- | --------------------------- |
|
||||
| `{time}` | current time (HH:MM) | always |
|
||||
| `{loc}` | GPS coordinates | always ("no GPS" if no fix) |
|
||||
| `{temp}` | temperature | sensor connected |
|
||||
| `{hum}` | humidity | sensor connected |
|
||||
| `{pres}` | barometric pressure | sensor connected |
|
||||
| `{alt}` | altitude | sensor connected |
|
||||
| `{lux}` | luminosity | sensor connected |
|
||||
| `{co2}` | CO₂ concentration | sensor connected |
|
||||
|
||||
Sensor placeholders appear automatically in the placeholder picker when the corresponding sensor is active. `{time}` and `{loc}` are always shown.
|
||||
|
||||
---
|
||||
|
||||
### Message history
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Each entry in the history list shows the sender name and a compact age indicator (`3m`, `2h`, `>1d`) in the top-right corner.
|
||||
|
||||
**Short Enter** on a message opens it in fullscreen. **Hold Enter** opens the context menu (Reply option).
|
||||
|
||||
---
|
||||
|
||||
### Fullscreen message view
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Navigate between messages with **LEFT** (newer) and **RIGHT** (older). Long messages scroll with **UP/DOWN**.
|
||||
|
||||
If the message is a reply addressed to someone (`@[nick]`), a **To: nick** bar is shown below the sender name and the body is displayed without the address prefix.
|
||||
| OLED | E-Ink |
|
||||
|:----:|:-----:|
|
||||
|  | |
|
||||
**Hold Enter** in fullscreen opens the Reply option.
|
||||
|
||||
---
|
||||
|
||||
### Context menu — contact list
|
||||
|
||||
**Hold Enter** on a contact entry opens a context menu:
|
||||
| OLED | E-Ink |
|
||||
|:----:|:-----:|
|
||||
|  |  |
|
||||
|
||||
| Item | Action |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------ |
|
||||
| Mark as read | Clears unread counter for this contact |
|
||||
| Notif: default / OFF / ON | Per-contact notification override — **LEFT/RIGHT** to cycle |
|
||||
| Melody: global / M1 / M2 | Per-contact melody override — **LEFT/RIGHT** to cycle |
|
||||
| Pin to dial / Unpin (slot N) | Pin this contact to a Favourites Dial slot; if already pinned shows which slot |
|
||||
|
||||
When **Pin to dial** is selected, a slot picker opens (Slot 1–6 showing current occupant name or "empty"). Choosing a slot that already holds another contact moves the new contact there.
|
||||
|
||||
---
|
||||
|
||||
### Context menu — channel list
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
**Hold Enter** on a channel entry opens a context menu:
|
||||
|
||||
| Item | Action |
|
||||
| ------------------------- | --------------------------------------------------------------------- |
|
||||
| Mark all read | Clears all unread for this channel |
|
||||
| Notif: default / OFF / ON | Per-channel notification override — **LEFT/RIGHT** to cycle |
|
||||
| Melody: global / M1 / M2 | Per-channel melody override — **LEFT/RIGHT** to cycle |
|
||||
| Fav: yes / no | Add or remove this channel from favourites — **LEFT/RIGHT** to toggle |
|
||||
|
||||
---
|
||||
|
||||
### Mark all read
|
||||
|
||||
**Hold Enter** on the DM / Channels / Rooms mode-select screen to clear all unread counters for the highlighted category at once.
|
||||
BIN
docs/solo_features/screen_lock/lck_scr_1_eink.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/solo_features/screen_lock/lck_scr_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/solo_features/screen_lock/lck_scr_2_eink.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
docs/solo_features/screen_lock/lck_scr_2_oled.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
51
docs/solo_features/screen_lock/screen_lock.md
Normal file
@@ -0,0 +1,51 @@
|
||||
## Screen Lock
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Screen lock prevents accidental keypresses. While locked the display turns off and all input is ignored.
|
||||
|
||||
---
|
||||
|
||||
### Locking and unlocking
|
||||
|
||||
**Hold Back** and press **Enter** three times within 3 seconds. The sequence works in both directions — the same combination locks and unlocks.
|
||||
|
||||
If the display is off when the sequence begins, it turns on automatically so the hint is visible. Each press in the sequence extends the display-on timer by 5 seconds.
|
||||
|
||||
The hint popup at the bottom of the lock screen guides through the sequence:
|
||||
|
||||
| Step | Hint |
|
||||
| -------------- | --------------------- |
|
||||
| Not started | _Hold Back + 3×Enter_ |
|
||||
| 1 press done | _Enter ×2 more…_ |
|
||||
| 2 presses done | _Enter ×1 more…_ |
|
||||
|
||||
If no press is made for 3 seconds, the counter resets.
|
||||
|
||||
---
|
||||
|
||||
### Lock screen
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
A brief press of any button wakes the display and shows the lock screen. It displays:
|
||||
|
||||
- **Time** — large, same format as the Clock page (24 h / 12 h from Settings)
|
||||
- **Date** — day-of-week, day, month
|
||||
- **Two sensor values** — the first two Dashboard Config fields (same values configured for the Clock page); shown side by side if both are set
|
||||
|
||||
The display turns off again automatically after 5 seconds of inactivity (or 2 seconds immediately after locking).
|
||||
|
||||
---
|
||||
|
||||
### Auto-lock
|
||||
|
||||
Enable **Auto-lock** in **Settings › Display** to lock the device automatically whenever the display turns off due to auto-off timeout. With auto-lock on, the device is always locked after the screen goes dark — no manual lock needed.
|
||||
BIN
docs/solo_features/settings_screen/set_scr_1_eink copy.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
docs/solo_features/settings_screen/set_scr_1_eink.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
docs/solo_features/settings_screen/set_scr_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/solo_features/settings_screen/set_scr_2_eink.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
docs/solo_features/settings_screen/set_scr_2_oled.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
91
docs/solo_features/settings_screen/settings_screen.md
Normal file
@@ -0,0 +1,91 @@
|
||||
## Settings Screen
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
All settings are saved to flash and restored on next boot. Settings are organised into collapsible sections. Press **Enter** on a section header to expand or collapse it — all sections start collapsed for faster navigation. Press **LEFT/RIGHT** to change a value, or **Enter** for toggle items.
|
||||
|
||||
Press **Cancel/Back** to save and return to the home screen.
|
||||
|
||||
---
|
||||
|
||||
### Display
|
||||
|
||||
| Setting | Options | Notes |
|
||||
| ------------------------------------ | -------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| Brightness | 1–5 | LEFT/RIGHT; preview applies immediately |
|
||||
| Auto-off | 5 s / 15 s / 30 s / 60 s / never | LEFT/RIGHT |
|
||||
| Auto-lock | on / off | Locks device when display turns off |
|
||||
| Battery | icon / % / V | Display mode for the top-bar battery indicator |
|
||||
| Clock seconds | show / hide | Hiding reduces OLED refresh from 1 s to 60 s |
|
||||
| Clock format | 24 h / 12 h | 12 h appends AM/PM |
|
||||
| Font | Default / Lemon | Default: 5×7 Adafruit with ASCII transliteration; Lemon: native Unicode with pixel-accurate line wrap |
|
||||
| Display rotation _(e-ink only)_ | 0° / 90° / 180° / 270° | Applied immediately |
|
||||
| Joystick rotation _(e-ink only)_ | 0° / 90° / 180° / 270° | Rotates input mapping independently of display rotation; useful for custom enclosures |
|
||||
| Full refresh interval _(e-ink only)_ | off / 5 / 10 / 20 / 30 | Partial refreshes between full clears; reduces ghosting on long sessions |
|
||||
|
||||
---
|
||||
|
||||
### Sound
|
||||
|
||||
| Setting | Options | Notes |
|
||||
| -------------- | ------------------------------ | ------------------------------------------------------------ |
|
||||
| Buzzer | On / Off / Auto | Auto: silences while BLE connected, re-enables on disconnect |
|
||||
| Volume | 1–5 | LEFT/RIGHT; preview tone plays on each change |
|
||||
| DM Melody | built-in / Melody 1 / Melody 2 | Notification sound for incoming private messages |
|
||||
| Channel Melody | built-in / Melody 1 / Melody 2 | Notification sound for incoming channel messages |
|
||||
|
||||
Melody 1 and Melody 2 are custom sequences editable in **Tools › Ringtone Editor**.
|
||||
|
||||
---
|
||||
|
||||
### Home Pages
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Lists all available home screen pages. For each entry:
|
||||
|
||||
- **LEFT / RIGHT** — move the page earlier or later in the navigation sequence
|
||||
- **Enter** — toggle the page ON / OFF
|
||||
|
||||
**Settings** and **Messages** are always visible and cannot be disabled.
|
||||
|
||||
---
|
||||
|
||||
### Radio
|
||||
|
||||
| Setting | Options | Notes |
|
||||
| -------- | -------- | ---------- |
|
||||
| TX power | 2–22 dBm | LEFT/RIGHT |
|
||||
|
||||
---
|
||||
|
||||
### System
|
||||
|
||||
| Setting | Options | Notes |
|
||||
| ----------- | --------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| 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 |
|
||||
|
||||
---
|
||||
|
||||
### Contacts
|
||||
|
||||
| Setting | Options | Notes |
|
||||
| -------- | ---------------- | ---------------------------------------------------- |
|
||||
| DMs | all / favourites | Show all chat contacts or only upstream-starred ones |
|
||||
| Channels | all / favourites | Show all channels or only favourited ones |
|
||||
| Rooms | all / favourites | Show all room servers or only favourited ones |
|
||||
|
||||
---
|
||||
|
||||
### Messages
|
||||
|
||||
Up to 10 quick reply templates (Q1–Q10). Press **Enter** on a slot to open the keyboard editor. Supports the same placeholders as the main keyboard (`{time}`, `{loc}`, and sensor placeholders when connected).
|
||||
BIN
docs/solo_features/tools_screen/tls_scr_1_eink.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_1_oled.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_2_eink.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_2_oled.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_3_eink.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_3_oled.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_4_eink.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_4_oled.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_5_eink.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_5_oled.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_6_eink.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_6_oled.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_7_eink.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
docs/solo_features/tools_screen/tls_scr_7_oled.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
173
docs/solo_features/tools_screen/tools_screen.md
Normal file
@@ -0,0 +1,173 @@
|
||||
## Tools Screen
|
||||
|
||||
[Go back](../../../README.md)
|
||||
|
||||
### Overview
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
The Tools screen is a hub for GPS trail recording, nearby node browsing, ringtone editing, auto-reply bot, and auto-advert. Navigate the tool list with **UP/DOWN** and press **Enter** to open a tool.
|
||||
|
||||
---
|
||||
|
||||
## Nearby Nodes
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Browse nodes that have recently advertised on the mesh. Filter by category with **LEFT/RIGHT**:
|
||||
|
||||
| Filter | Shows |
|
||||
| ------ | ------------------------------ |
|
||||
| Fav | Upstream-starred contacts only |
|
||||
| ALL | All known nodes |
|
||||
| Comp | Companion (chat) nodes |
|
||||
| Rpt | Repeaters |
|
||||
| Room | Room servers |
|
||||
| Snsr | Sensors |
|
||||
|
||||
Select a node to see its coordinates, distance, bearing with cardinal direction, type, and last-heard time.
|
||||
|
||||
**Hold Enter** → context menu → **Discover nearby** to send a live `NODE_DISCOVER_REQ` ping.
|
||||
|
||||
> [!TIP]
|
||||
> Combined with **Auto-Advert** on the other device, Nearby Nodes becomes a passive location tracker — as long as the tracked device periodically broadcasts its GPS position, you can see its current distance and bearing without any manual interaction on either end.
|
||||
|
||||
---
|
||||
|
||||
### Active Discovery
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Sends a `NODE_DISCOVER_REQ` ping. Repeaters, sensors and room servers within zero-hop range respond immediately with name, type and signal data.
|
||||
|
||||
Results show as 2-line cards: node name + type, then RSSI / SNR / remote SNR.
|
||||
|
||||
- **UP/DOWN** — navigate results
|
||||
- **Enter** — open full-screen detail (public key, signal data, contact status)
|
||||
- **Hold Enter** — rescan
|
||||
- **Cancel / Back** — return to nearby list
|
||||
|
||||
---
|
||||
|
||||
## GPS Trail
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Records your route in a RAM ring buffer (up to 512 points, sampled every 1 s). Tracking runs in the background — a blinking **G** appears in the status bar. The trail survives display auto-off but is lost on reboot unless saved to flash first.
|
||||
|
||||
Cycle views with **LEFT / RIGHT**:
|
||||
|
||||
| View | Content |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **Summary** | Distance, elapsed time, avg speed or pace, point count, tracking status |
|
||||
| **Map** | Auto-fit dot-and-line plot with cos(lat) aspect correction; segment breaks marked; north arrow; scale grid (toggle with **LEFT/RIGHT** on the Grid row in the menu) |
|
||||
| **List** | Per-point rows showing local time (HH:MM) and delta distance from the previous point; segment-start rows show `start`; scroll with **UP/DOWN** |
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
**Hold Enter** opens the action menu:
|
||||
|
||||
| Item | Interaction | Action |
|
||||
| --------------------- | ------------------- | --------------------------------------------------- |
|
||||
| Min dist | LEFT/RIGHT | Filter gate: 5 m / 10 m / 25 m / 100 m |
|
||||
| Units | LEFT/RIGHT | Speed/pace: km/h / mph / min/km / min/mi |
|
||||
| Grid | LEFT/RIGHT or Enter | Toggle scale grid on the map |
|
||||
| Start / Stop tracking | Enter | Begin or end a recording session |
|
||||
| Save trail | Enter | Write RAM ring to flash (`/trail`) |
|
||||
| Load trail | Enter | Restore flash trail into RAM |
|
||||
| Export (live) | Enter | Stream live RAM trail as GPX 1.1 over USB Serial |
|
||||
| Export (saved) | Enter | Stream saved flash trail as GPX 1.1 over USB Serial |
|
||||
| Reset trail | Enter | Clear RAM ring and elapsed time |
|
||||
|
||||
### Downloading GPX
|
||||
|
||||
1. Connect the device via USB cable
|
||||
2. Open a serial terminal at **115200 baud**:
|
||||
- **macOS/Linux** — `cat /dev/tty.usbmodem* > track.gpx` (stop with Ctrl-C after dump completes)
|
||||
- **Windows** — PuTTY (Serial, 115200) or Arduino IDE Serial Monitor (no line ending)
|
||||
3. On the device: **Tools › Trail** → **Hold Enter** → **Export (live)** or **Export (saved)**
|
||||
4. The device streams a GPX 1.1 XML document. Save the output from `<?xml` to `</gpx>` as a `.gpx` file
|
||||
5. Import into OsmAnd, Garmin BaseCamp, GPX Studio, Google Earth, etc.
|
||||
|
||||
> [!NOTE]
|
||||
> If the companion app is connected via **BLE**, the export is safe — BLE and USB operate independently. If connected via **USB**, disconnect the app before exporting.
|
||||
|
||||
---
|
||||
|
||||
## Auto-Advert
|
||||
|
||||
Periodically broadcasts a 0-hop advert with your GPS position. Configurable interval: off / 30 s / 1 min / 2 min / 5 min / 10 min / 30 min / 1 h. A blinking **A** appears in the status bar while active.
|
||||
|
||||
---
|
||||
|
||||
## Ringtone Editor
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
A step sequencer for composing custom notification melodies. Two slots — **Melody 1** and **Melody 2** — switchable from within the editor.
|
||||
|
||||
Each melody supports up to 32 notes:
|
||||
|
||||
| Parameter | Options |
|
||||
| --------- | --------------------------------- |
|
||||
| Pitch | C / D / E / F / G / A / B / pause |
|
||||
| Octave | 4 – 7 |
|
||||
| Duration | 1/4 / 1/8 / 1/16 / 1/32 |
|
||||
| BPM | 60 / 90 / 120 / 150 / 180 |
|
||||
|
||||
**Navigation in the editor:**
|
||||
|
||||
- **LEFT/RIGHT** — move between notes
|
||||
- **UP/DOWN** — change pitch of selected note
|
||||
- **Enter** — cycle octave of selected note
|
||||
- **Hold Enter** (or context menu) — open options menu
|
||||
|
||||
**Options menu:**
|
||||
|
||||
| Item | Interaction | Action |
|
||||
| ------------ | ----------- | -------------------------------------- |
|
||||
| Play / Stop | Enter | Preview the melody |
|
||||
| Melody 1 / 2 | Enter | Switch to the other slot |
|
||||
| Duration | LEFT/RIGHT | Cycle duration for selected note |
|
||||
| BPM | LEFT/RIGHT | Cycle tempo |
|
||||
| Insert | Enter | Insert a new note after the cursor |
|
||||
| Delete | Enter | Delete the note at cursor |
|
||||
| Save & Exit | Enter | Persist the melody and return to Tools |
|
||||
| Discard | Enter | Return to Tools without saving |
|
||||
|
||||
Melodies can be assigned in **Settings › Sound** (global default) or overridden per contact or channel from the Messages screen context menu.
|
||||
|
||||
---
|
||||
|
||||
## Auto-Reply Bot
|
||||
|
||||
| OLED | E-Ink |
|
||||
| :-----------------------: | :-----------------------: |
|
||||
|  |  |
|
||||
|
||||
Automatically replies to incoming messages that contain a configured trigger word (case-insensitive, contains match).
|
||||
|
||||
When the bot is enabled it listens to DMs by default. Channel monitoring is an optional addition — select a channel separately to activate it alongside DM mode.
|
||||
|
||||
| Setting | Description |
|
||||
| ------------- | -------------------------------------------------------------------------------- |
|
||||
| Bot | ON / OFF — enables DM listening |
|
||||
| Channel mode | ON / OFF — additionally monitors a selected channel |
|
||||
| Channel | Which channel to monitor (only relevant when channel mode is ON) |
|
||||
| Trigger | Word or phrase that activates the reply (shared by both modes, case-insensitive) |
|
||||
| DM reply | Reply text for DMs; supports `{time}` and `{loc}` placeholders |
|
||||
| Channel reply | Reply text for channel messages; supports `{time}` and `{loc}` placeholders |
|
||||
|
||||
A 10-second cooldown prevents repeated replies in quick succession.
|
||||