mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
deploy: 6426ef9319
This commit is contained in:
@@ -1910,8 +1910,17 @@ pixel sizes</strong> — derive everything from these:</p>
|
|||||||
in the header, so the menu is discoverable without already knowing the
|
in the header, so the menu is discoverable without already knowing the
|
||||||
shortcut; <code>menu_open</code> highlights it while the menu is actually up.</li>
|
shortcut; <code>menu_open</code> highlights it while the menu is actually up.</li>
|
||||||
<li><code>drawSelectionRow(x, y, w, h, sel)</code> — the highlight bar behind a list row.</li>
|
<li><code>drawSelectionRow(x, y, w, h, sel)</code> — the highlight bar behind a list row.</li>
|
||||||
<li><code>drawTextEllipsized(x, y, max_w, str)</code> — truncates with <code>…</code>; <strong>use this for
|
<li><code>drawTextEllipsized(x, y, max_w, str, selected=false)</code> — truncates with <code>…</code>;
|
||||||
any user string</strong> (names, labels) so long/UTF-8 text can't overrun.</li>
|
<strong>use this for any user string</strong> (names, labels) so long/UTF-8 text can't
|
||||||
|
overrun. Pass <code>selected=true</code> for the currently-selected row and the text
|
||||||
|
that doesn't fit marquee-scrolls into view (pause → scroll to the end →
|
||||||
|
pause → scroll back), instead of just sitting behind the ellipsis; returns
|
||||||
|
the ms until the next redraw is needed for that animation to stay smooth
|
||||||
|
(0 when nothing is scrolling) — thread it into your screen's own <code>render()</code>
|
||||||
|
return value the same way you already clamp for anything else that needs a
|
||||||
|
faster redraw. Only one row UI-wide marquees at a time (whichever is
|
||||||
|
currently selected), so there's no risk of two animations racing each
|
||||||
|
other for the shared timing state.</li>
|
||||||
<li><code>drawTextCentered(mid_x, y, str)</code>.</li>
|
<li><code>drawTextCentered(mid_x, y, str)</code>.</li>
|
||||||
<li><code>translateUTF8ToBlocks(dst, src, n)</code> — map UTF-8 to the panel's glyph set for
|
<li><code>translateUTF8ToBlocks(dst, src, n)</code> — map UTF-8 to the panel's glyph set for
|
||||||
<em>display only</em>. Never run text through it before sending it over the air or
|
<em>display only</em>. Never run text through it before sending it over the air or
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+25
-25
@@ -2,102 +2,102 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/cli_commands/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/cli_commands/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/companion_protocol/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/companion_protocol/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/docs/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/docs/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/faq/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/faq/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/kiss_modem_protocol/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/kiss_modem_protocol/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/nrf52_power_management/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/nrf52_power_management/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/number_allocations/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/number_allocations/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/packet_format/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/packet_format/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/payloads/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/payloads/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/qr_codes/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/qr_codes/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/stats_binary_frames/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/stats_binary_frames/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/terminal_chat_cli/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/terminal_chat_cli/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/design/nearby_redesign/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/design/nearby_redesign/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/design/solo_ui_framework/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/design/solo_ui_framework/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/design/trail_redesign/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/design/trail_redesign/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/development/roadmap/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/development/roadmap/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/build_flags/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/build_flags/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/external_keyboard/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/external_keyboard/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/clock_screen/clock_screen/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/clock_screen/clock_screen/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/favourites_dial/favourites_dial/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/favourites_dial/favourites_dial/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/message_screen/message_screen/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/message_screen/message_screen/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/screen_lock/screen_lock/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/screen_lock/screen_lock/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/settings_screen/settings_screen/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/settings_screen/settings_screen/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://meshcore-dev.github.io/meshcore/solo_features/tools_screen/tools_screen/</loc>
|
<loc>https://meshcore-dev.github.io/meshcore/solo_features/tools_screen/tools_screen/</loc>
|
||||||
<lastmod>2026-08-30</lastmod>
|
<lastmod>2026-09-08</lastmod>
|
||||||
</url>
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
Binary file not shown.
@@ -1852,6 +1852,11 @@
|
|||||||
<td>Msgs</td>
|
<td>Msgs</td>
|
||||||
<td>Total unread message count</td>
|
<td>Total unread message count</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Satellites</td>
|
||||||
|
<td>Sats</td>
|
||||||
|
<td>GPS satellite count (or <code>--</code> without GPS)</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Sensor fields show <code>--</code> when the sensor is not connected or has no data.</p>
|
<p>Sensor fields show <code>--</code> when the sensor is not connected or has no data.</p>
|
||||||
|
|||||||
@@ -1135,10 +1135,10 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#pinning-a-contact" class="md-nav__link">
|
<a href="#pinning" class="md-nav__link">
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
Pinning a contact
|
Pinning
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -1146,10 +1146,21 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#unpinning-a-contact" class="md-nav__link">
|
<a href="#unpinning" class="md-nav__link">
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
Unpinning a contact
|
Unpinning
|
||||||
|
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="md-nav__item">
|
||||||
|
<a href="#pinning-is-not-the-same-as-favouriting" class="md-nav__link">
|
||||||
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
|
Pinning is not the same as favouriting
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -1598,10 +1609,10 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#pinning-a-contact" class="md-nav__link">
|
<a href="#pinning" class="md-nav__link">
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
Pinning a contact
|
Pinning
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -1609,10 +1620,21 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#unpinning-a-contact" class="md-nav__link">
|
<a href="#unpinning" class="md-nav__link">
|
||||||
<span class="md-ellipsis">
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
Unpinning a contact
|
Unpinning
|
||||||
|
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="md-nav__item">
|
||||||
|
<a href="#pinning-is-not-the-same-as-favouriting" class="md-nav__link">
|
||||||
|
<span class="md-ellipsis">
|
||||||
|
|
||||||
|
Pinning is not the same as favouriting
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -1679,7 +1701,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>A dedicated home page showing a grid of up to 6 pinned contacts for quick access. The layout adapts to the display orientation:</p>
|
<p>A dedicated home page showing a grid of up to 6 pinned conversations — chat contacts, room servers or channels — for quick access. The layout adapts to the display orientation:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Portrait</strong> (OLED, e-ink portrait) — 2 columns × 3 rows</li>
|
<li><strong>Portrait</strong> (OLED, e-ink portrait) — 2 columns × 3 rows</li>
|
||||||
<li><strong>Landscape</strong> (e-ink landscape) — 3 columns × 2 rows</li>
|
<li><strong>Landscape</strong> (e-ink landscape) — 3 columns × 2 rows</li>
|
||||||
@@ -1687,20 +1709,17 @@
|
|||||||
<hr />
|
<hr />
|
||||||
<h3 id="navigation">Navigation</h3>
|
<h3 id="navigation">Navigation</h3>
|
||||||
<p>Navigate tiles with <strong>UP / DOWN / LEFT / RIGHT</strong>. Pressing a directional key at the edge of the grid switches to the adjacent home page instead of wrapping.</p>
|
<p>Navigate tiles with <strong>UP / DOWN / LEFT / RIGHT</strong>. Pressing a directional key at the edge of the grid switches to the adjacent home page instead of wrapping.</p>
|
||||||
<p><strong>Enter on a filled tile</strong> — opens that contact's DM directly.</p>
|
<p><strong>Enter on a filled tile</strong> — opens that conversation directly: a contact's DM, a channel's history, or a room server (running the room's login handshake first if it isn't logged in yet).</p>
|
||||||
<p><strong>Enter on an empty tile (<code>+</code>)</strong> — opens a contact picker to fill the slot.</p>
|
<p><strong>Enter on an empty tile (<code>+</code>)</strong> — starts the picker to fill the slot.</p>
|
||||||
|
<p><strong>Hold Enter on a filled tile</strong> — opens <strong>Unpin</strong> / <strong>Replace</strong> for that slot.</p>
|
||||||
|
<p>Channel tiles show their name with a leading <code>#</code>, so they read apart from contacts and rooms sharing the same grid.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="unread-badge">Unread badge</h3>
|
<h3 id="unread-badge">Unread badge</h3>
|
||||||
<p>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.</p>
|
<p>Filled tiles show an unread message count in the top-right corner — unread DMs for a contact or room, unread posts for a channel. The name is ellipsized to make room for the badge.</p>
|
||||||
<p>If a pinned contact is removed from the contacts list — explicitly, or auto-evicted to make room when the table is full — its slot is freed automatically and goes back to an empty <code>+</code> tile.</p>
|
<p>If a pinned target disappears — a contact removed explicitly or auto-evicted to make room when the table is full, or a deleted channel — its slot is freed automatically and goes back to an empty <code>+</code> tile.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="pinning-a-contact">Pinning a contact</h3>
|
<h3 id="pinning">Pinning</h3>
|
||||||
<p><strong>From the Favourites Dial</strong> — press <strong>Enter</strong> on an empty tile (<code>+</code>). A picker opens showing:</p>
|
<p><strong>From the Favourites Dial</strong> — press <strong>Enter</strong> on an empty tile (<code>+</code>), or <strong>Hold Enter</strong> on a filled one and choose <strong>Replace</strong>. This opens the <strong>Messages</strong> screen in its normal Direct / Channels / Rooms browse; pick an entry and you land back on the dial with that slot filled. It's the same list you already use to open a conversation, rather than a second browser of its own.</p>
|
||||||
<ol>
|
|
||||||
<li>Contacts marked as favourites in the upstream app (starred contacts) — listed first</li>
|
|
||||||
<li>Recent DM contacts — listed after</li>
|
|
||||||
<li>All remaining chat contacts — fallback when the first two tiers are empty (e.g. fresh install before any DMs)</li>
|
|
||||||
</ol>
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -1715,14 +1734,18 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<!-- screenshot pending: Pin-to-dial contact picker (favourites first, then recent DMs, then all contacts) -->
|
<!-- screenshot pending: Messages browse entered from an empty dial tile -->
|
||||||
|
|
||||||
<p>Select a contact to pin it to that slot.</p>
|
<p><strong>From the Messages lists</strong> — <strong>Hold Enter</strong> on a contact, room or channel entry › <strong>Pin to dial</strong>, then choose a slot from the slot picker (Slot 1–6, showing the current occupant or "empty").</p>
|
||||||
<p><strong>From a DM conversation</strong> — <strong>Hold Enter</strong> › context menu › <strong>Pin to dial</strong>, then choose a slot from the slot picker (Slot 1–6, showing the current occupant name or "empty").</p>
|
<p><strong>From Tools › Nodes</strong> — <strong>Hold Enter</strong> on a node › <strong>Pin to dial</strong>. This one doesn't ask which slot; it takes the first free one (and says which), since that menu is already long.</p>
|
||||||
<p>If the selected contact is already pinned in another slot, it is moved to the new slot automatically.</p>
|
<p>If the target is already pinned in another slot, it is moved to the new slot automatically.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="unpinning-a-contact">Unpinning a contact</h3>
|
<h3 id="unpinning">Unpinning</h3>
|
||||||
<p>Open the contact's DM, <strong>Hold Enter</strong> › context menu › <strong>Unpin (slot N)</strong>.</p>
|
<p><strong>From the Favourites Dial</strong> — <strong>Hold Enter</strong> on the tile › <strong>Unpin</strong>.</p>
|
||||||
|
<p><strong>From the Messages lists or Tools › Nodes</strong> — <strong>Hold Enter</strong> › context menu › <strong>Unpin (slot N)</strong>.</p>
|
||||||
|
<hr />
|
||||||
|
<h3 id="pinning-is-not-the-same-as-favouriting">Pinning is not the same as favouriting</h3>
|
||||||
|
<p>A pinned tile and a <strong>Fav: ON</strong> entry are two independent things. Pinning puts something on this page. Favouriting marks it with a ★ and sorts it to the top of every list it appears in, and is what the <strong>Settings › Contacts</strong> list filters read. Either can be used without the other.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="reordering-the-favourites-page">Reordering the Favourites page</h3>
|
<h3 id="reordering-the-favourites-page">Reordering the Favourites page</h3>
|
||||||
<p>The position of the Favourites Dial in the home page navigation sequence can be changed in <strong>Settings › Home Pages</strong> — press <strong>LEFT / RIGHT</strong> on the Favourites entry to move it earlier or later.</p>
|
<p>The position of the Favourites Dial in the home page navigation sequence can be changed in <strong>Settings › Home Pages</strong> — press <strong>LEFT / RIGHT</strong> on the Favourites entry to move it earlier or later.</p>
|
||||||
|
|||||||
@@ -1851,7 +1851,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Messages appear as chat bubbles sized to their content — <strong>right</strong>-anchored for outgoing, <strong>left</strong> for incoming — with sender name and a compact age indicator (<code>3m</code>, <code>2h</code>, <code>>1d</code>) in the top-right corner. List runs <strong>newest at the bottom</strong>; opening a history starts at the latest message, scrolling up goes further back.</p>
|
<p>Messages appear as chat bubbles sized to their content — <strong>right</strong>-anchored for outgoing, <strong>left</strong> for incoming — with sender name and a compact age indicator (<code>3m</code>, <code>2h</code>, <code>>1d</code>) in the top-right corner. List runs <strong>newest at the bottom</strong>; opening a history starts at the latest message, scrolling up goes further back.</p>
|
||||||
<p><strong>Short Enter</strong> on a message opens it in fullscreen. <strong>Hold Enter</strong> — on a history row or in fullscreen — opens the same options menu: Reply, plus <strong>Navigate</strong> / <strong>Save waypoint</strong> when the message contains a location (see Fullscreen message view). You don't need to open the message first.</p>
|
<p><strong>Short Enter</strong> on a message opens it in fullscreen. <strong>Hold Enter</strong> — on a history row or in fullscreen — opens the same options menu: Reply, plus <strong>Navigate</strong> / <strong>Save waypoint</strong> / <strong>Set as target</strong> when the message contains a location, and <strong>Path</strong> / <strong>Relayed by</strong> when hop data is available (see Fullscreen message view). You don't need to open the message first.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="fullscreen-message-view">Fullscreen message view</h3>
|
<h3 id="fullscreen-message-view">Fullscreen message view</h3>
|
||||||
<table>
|
<table>
|
||||||
@@ -1884,15 +1884,25 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><strong>Hold Enter</strong> in fullscreen opens the options menu. It always offers <strong>Reply</strong> for an incoming message, and when the message contains a <strong>location</strong> it adds two more:</p>
|
<p><strong>Hold Enter</strong> in fullscreen opens the options menu. It always offers <strong>Reply</strong> for an incoming message, and when the message contains a <strong>location</strong> it adds three more:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Navigate</strong> — opens the bearing/distance view to those coordinates (the same two-bearing screen as Waypoints and Nearby; <strong>Back</strong> returns to the message).</li>
|
<li><strong>Navigate</strong> — opens the bearing/distance view to those coordinates (the same two-bearing screen as Waypoints and Nearby; <strong>Back</strong> returns to the message).</li>
|
||||||
<li><strong>Save waypoint</strong> — stores the location as a waypoint (visible on the trail map and in the Waypoints list).</li>
|
<li><strong>Save waypoint</strong> — stores the location as a waypoint (visible on the trail map and in the Waypoints list).</li>
|
||||||
|
<li><strong>Set as target</strong> — pins those coordinates as the active <strong>Locator/Nav target</strong> in one step, the same row Nodes and Waypoints offer (see Tools › Locator).</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>A location is any <code>lat,lon</code> pair in the text — exactly what the <code>{loc}</code> placeholder inserts — so you can navigate to anything a contact shares. A <code>[WAY]lat,lon label</code> share also carries a name, used as the waypoint label. This works on DMs and channel messages, incoming or outgoing.</p>
|
<p>A location is any <code>lat,lon</code> pair in the text — exactly what the <code>{loc}</code> placeholder inserts — so you can navigate to anything a contact shares. A <code>[WAY]lat,lon label</code> share also carries a name, used as the waypoint label. This works on DMs and channel messages, incoming or outgoing.</p>
|
||||||
|
<p>When the entry has hop data recorded, the menu also adds one more row:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Path (N hops)</strong> — on a received message (DM or channel), lists every repeater the message actually travelled through to reach you, oldest hop first.</li>
|
||||||
|
<li><strong>Relayed by (N)</strong> — on your own channel post instead, lists every distinct repeater heard rebroadcasting it back into the mesh (order isn't meaningful here — each one heard it independently, not as a chain).</li>
|
||||||
|
</ul>
|
||||||
|
<p>Selecting the row opens a read-only list of the resolved hops — each shown as the matching contact's name where one is known, or a short <code>?AABB</code>-style hex tag for an unrecognised repeater. Only repeaters within range of the message's actual travel — or, for <strong>Relayed by</strong>, within your own device's radio range — can ever be identified this way; a message with no recorded path (e.g. a zero-hop send, or one sent before any repeater relayed or echoed it) doesn't show this row at all.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="context-menu-contact-list">Context menu — contact list</h3>
|
<h3 id="context-menu-contact-list">Context menu — contact list</h3>
|
||||||
<p><strong>Hold Enter</strong> on a contact entry opens a context menu:</p>
|
<p><strong>Hold Enter</strong> on a contact entry opens a context menu:</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Rows that show a value (<code>Notif:</code>, <code>Melody:</code>, <code>Fav:</code>) are changed in place — <strong>LEFT/RIGHT</strong> steps the value and <strong>Enter</strong> advances it, with the menu staying open. Only <strong>Back</strong> closes the menu. The same rule holds in every context menu on the device.</p>
|
||||||
|
</blockquote>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -1920,12 +1930,16 @@
|
|||||||
<td>Clears unread counter for this contact</td>
|
<td>Clears unread counter for this contact</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Notif: default / OFF / ON</td>
|
<td>Notif: Default / OFF / ON</td>
|
||||||
<td>Per-contact notification override — <strong>LEFT/RIGHT</strong> to cycle</td>
|
<td>Per-contact notification override — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to cycle</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Melody: global / M1 / M2</td>
|
<td>Melody: Global / M1 / M2</td>
|
||||||
<td>Per-contact melody override — <strong>LEFT/RIGHT</strong> to cycle</td>
|
<td>Per-contact melody override — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to cycle</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Fav: ON / OFF</td>
|
||||||
|
<td>Mark this contact as a favourite — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to toggle</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Pin to dial / Unpin (slot N)</td>
|
<td>Pin to dial / Unpin (slot N)</td>
|
||||||
@@ -1933,6 +1947,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<p><strong>Fav</strong> and <strong>Pin to dial</strong> are separate. <strong>Fav</strong> is the starred flag shared with the companion app: it marks the row with a ★, sorts it above the rest of the list (unless <strong>Settings › Contacts › Favs top</strong> is off), and drives the <code>DMs = Fav</code> list filter. <strong>Pin to dial</strong> puts the contact on the <a href="../../favourites_dial/favourites_dial/">Favourites Dial</a> page and changes nothing about the list.</p>
|
||||||
<p>When <strong>Pin to dial</strong> 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.</p>
|
<p>When <strong>Pin to dial</strong> 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.</p>
|
||||||
<p>In the <strong>Rooms</strong> list the context menu instead offers:</p>
|
<p>In the <strong>Rooms</strong> list the context menu instead offers:</p>
|
||||||
<table>
|
<table>
|
||||||
@@ -1951,6 +1966,14 @@
|
|||||||
<td>Logout</td>
|
<td>Logout</td>
|
||||||
<td>Only shown once logged in. Forgets the saved password so the next open prompts for one again</td>
|
<td>Only shown once logged in. Forgets the saved password so the next open prompts for one again</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Fav: ON / OFF</td>
|
||||||
|
<td>Mark this room as a favourite — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to toggle; drives the <strong>Rooms = Fav</strong> list filter</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Pin to dial / Unpin (slot N)</td>
|
||||||
|
<td>Pin this room to a <a href="../../favourites_dial/favourites_dial/">Favourites Dial</a> slot</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
@@ -1983,16 +2006,20 @@
|
|||||||
<td>Clears all unread for this channel</td>
|
<td>Clears all unread for this channel</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Notif: default / OFF / ON</td>
|
<td>Notif: Default / OFF / ON</td>
|
||||||
<td>Per-channel notification override — <strong>LEFT/RIGHT</strong> to cycle</td>
|
<td>Per-channel notification override — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to cycle</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Melody: global / M1 / M2</td>
|
<td>Melody: Global / M1 / M2</td>
|
||||||
<td>Per-channel melody override — <strong>LEFT/RIGHT</strong> to cycle</td>
|
<td>Per-channel melody override — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to cycle</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Fav: yes / no</td>
|
<td>Fav: ON / OFF</td>
|
||||||
<td>Add or remove this channel from favourites — <strong>LEFT/RIGHT</strong> to toggle</td>
|
<td>Add or remove this channel from favourites — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> to toggle</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Pin to dial / Unpin (slot N)</td>
|
||||||
|
<td>Pin this channel to a <a href="../../favourites_dial/favourites_dial/">Favourites Dial</a> slot</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Edit</td>
|
<td>Edit</td>
|
||||||
@@ -2000,7 +2027,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Delete</td>
|
<td>Delete</td>
|
||||||
<td>Removes the channel immediately (no confirm prompt)</td>
|
<td>Removes the channel — confirms first (defaults to Cancel)</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -1705,7 +1705,8 @@
|
|||||||
</table>
|
</table>
|
||||||
<p>A brief press of any button wakes the display and shows the lock screen. It displays:</p>
|
<p>A brief press of any button wakes the display and shows the lock screen. It displays:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Time</strong> — large, same format as the Clock page (24 h / 12 h from Settings)</li>
|
<li><strong>Title bar</strong> — battery and status icons, same as every other home page — but never the device name, so a locked device doesn't announce whose it is at a glance</li>
|
||||||
|
<li><strong>Time</strong> — same format as the Clock page (24 h / 12 h from Settings), left-aligned</li>
|
||||||
<li><strong>Date</strong> — day-of-week, day, month</li>
|
<li><strong>Date</strong> — day-of-week, day, month</li>
|
||||||
<li><strong>Two sensor values</strong> — the first two Dashboard Config fields (same values configured for the Clock page); shown side by side if both are set</li>
|
<li><strong>Two sensor values</strong> — the first two Dashboard Config fields (same values configured for the Clock page); shown side by side if both are set</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -1745,7 +1745,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>All settings are saved to flash and restored on next boot. Settings are organised into collapsible sections. Press <strong>Enter</strong> on a section header to expand or collapse it — all sections start collapsed for faster navigation. Press <strong>LEFT/RIGHT</strong> to change a value, or <strong>Enter</strong> for toggle items.</p>
|
<p>All settings are saved to flash and restored on next boot. Settings are organised into collapsible sections. Press <strong>Enter</strong> on a section header to expand or collapse it — all sections start collapsed for faster navigation. Press <strong>LEFT/RIGHT</strong> to change a value. <strong>Enter</strong> advances any row whose options wrap around — toggles, melodies, and option lists like Auto-off. Rows that ramp between fixed ends (Brightness, Volume, TX Pwr, Timezone, SF / BW / CR) are LEFT/RIGHT only, since there is nothing to wrap to.</p>
|
||||||
<p>Press <strong>Cancel/Back</strong> to save and return to the home screen.</p>
|
<p>Press <strong>Cancel/Back</strong> to save and return to the home screen.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="display">Display</h3>
|
<h3 id="display">Display</h3>
|
||||||
@@ -1766,7 +1766,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Auto-off</td>
|
<td>Auto-off</td>
|
||||||
<td>5 s / 15 s / 30 s / 60 s / never</td>
|
<td>5 s / 15 s / 30 s / 60 s / never</td>
|
||||||
<td>LEFT/RIGHT</td>
|
<td>LEFT/RIGHT, or <strong>Enter</strong> to advance</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Auto-lock</td>
|
<td>Auto-lock</td>
|
||||||
@@ -1846,6 +1846,11 @@
|
|||||||
<td>All / Zero-hop</td>
|
<td>All / Zero-hop</td>
|
||||||
<td>Filters the AD sound so it plays for every advert or only for local zero-hop adverts.</td>
|
<td>Filters the AD sound so it plays for every advert or only for local zero-hop adverts.</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Msg wake</td>
|
||||||
|
<td>ON / OFF</td>
|
||||||
|
<td>Whether an incoming message turns the display back on when it was off and no phone/app is connected (default ON — today's behaviour either way).</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Melody 1 and Melody 2 are custom sequences editable in <strong>Tools › Ringtone Editor</strong>.</p>
|
<p>Melody 1 and Melody 2 are custom sequences editable in <strong>Tools › Ringtone Editor</strong>.</p>
|
||||||
@@ -1890,7 +1895,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Preset</td>
|
<td>Preset</td>
|
||||||
<td>named presets</td>
|
<td>named presets</td>
|
||||||
<td>LEFT/RIGHT cycles community RF presets (region frequency + bandwidth/SF/CR). <strong>Enter</strong> opens a popup to pick one, save the current settings as a named preset, or delete a saved one. Applies frequency, bandwidth, SF and CR together.</td>
|
<td>LEFT/RIGHT cycles community RF presets (region frequency + bandwidth/SF/CR). <strong>Enter</strong> opens a popup to pick one, save the current settings as a named preset, or delete a saved one — deleting confirms first (defaults to Cancel). Applies frequency, bandwidth, SF and CR together.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Freq</td>
|
<td>Freq</td>
|
||||||
@@ -2022,7 +2027,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Applies to every on-screen text field (messages, waypoint labels, room passwords, preset names). Earlier releases labelled the grid <em>QWERTY</em>; the layout has always been alphabetical, so it is now named <strong>ABC</strong>.</p>
|
<p>Applies to every on-screen text field (messages, waypoint labels, room passwords, preset names).</p>
|
||||||
<p>European Latin-diacritic letters (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic, etc.) aren't separate alphabet pages — instead, <strong>Hold Enter</strong> on a plain Latin letter that has accented variants (<code>a c d e i l n o r s t u y z</code>) opens a one-row popup of its accents (e.g. holding <code>a</code> offers <code>á à â ã ä å ą</code>); <strong>LEFT/RIGHT</strong> picks, <strong>Enter</strong> inserts it, <strong>Cancel</strong> dismisses with no change. Holding a letter with no accented variants (e.g. <code>b</code>) does nothing. Works on whichever page is currently showing Latin, whether that's Main or Additional.</p>
|
<p>European Latin-diacritic letters (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic, etc.) aren't separate alphabet pages — instead, <strong>Hold Enter</strong> on a plain Latin letter that has accented variants (<code>a c d e i l n o r s t u y z</code>) opens a one-row popup of its accents (e.g. holding <code>a</code> offers <code>á à â ã ä å ą</code>); <strong>LEFT/RIGHT</strong> picks, <strong>Enter</strong> inserts it, <strong>Cancel</strong> dismisses with no change. Holding a letter with no accented variants (e.g. <code>b</code>) does nothing. Works on whichever page is currently showing Latin, whether that's Main or Additional.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="contacts">Contacts</h3>
|
<h3 id="contacts">Contacts</h3>
|
||||||
@@ -2037,21 +2042,28 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>DMs</td>
|
<td>DMs</td>
|
||||||
<td>all / favourites</td>
|
<td>All / Fav</td>
|
||||||
<td>Show all chat contacts or only upstream-starred ones</td>
|
<td>Show all chat contacts or only favourited ones</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Channels</td>
|
<td>Channels</td>
|
||||||
<td>all / favourites</td>
|
<td>All / Fav</td>
|
||||||
<td>Show all channels or only favourited ones</td>
|
<td>Show all channels or only favourited ones</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Rooms</td>
|
<td>Rooms</td>
|
||||||
<td>all / favourites</td>
|
<td>All / Fav</td>
|
||||||
<td>Show all room servers or only favourited ones</td>
|
<td>Show all room servers or only favourited ones</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Favs top</td>
|
||||||
|
<td>ON / OFF</td>
|
||||||
|
<td>Sort favourites to the top of every list (default ON)</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<p>Favourites are set per item in its context menu (<strong>Hold Enter</strong> › <strong>Fav: ON / OFF</strong>) — see <a href="../../message_screen/message_screen/">Message Screen</a>, and the same row exists in Tools › Nodes. A contact's or room's favourite flag is the same one the companion app shows as a starred contact, so it syncs both ways; a channel's is device-only.</p>
|
||||||
|
<p>A favourite is marked with a ★ on its row wherever it is listed, and — unless <strong>Favs top</strong> is off — sorted above everything else. The three filters above are independent of that: they control what's <em>listed at all</em>, the sort only controls the order.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h3 id="messages">Messages</h3>
|
<h3 id="messages">Messages</h3>
|
||||||
<table>
|
<table>
|
||||||
|
|||||||
@@ -2139,7 +2139,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Browse nodes that have recently advertised on the mesh. <strong>Filter</strong> (which nodes) and <strong>sort</strong> (in what order) are independent axes and combine freely.</p>
|
<p>Browse nodes that have recently advertised on the mesh. <strong>Filter</strong> (which nodes) and <strong>sort</strong> (in what order) are independent axes and combine freely.</p>
|
||||||
<p>Filter by category with <strong>LEFT/RIGHT</strong> (one coherent axis — type only):</p>
|
<p>Filter by category with <strong>LEFT/RIGHT</strong>:</p>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -2154,7 +2154,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Fav</td>
|
<td>Fav</td>
|
||||||
<td>Upstream-starred contacts only</td>
|
<td>Favourites only (★)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Comp</td>
|
<td>Comp</td>
|
||||||
@@ -2174,7 +2174,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Select a node to see its coordinates, distance, bearing with cardinal direction, type, and last-heard time. A node that is <strong>broadcasting its position</strong> via Live Share is marked with a <strong>♦ diamond</strong> beside its name in the list (the same marker the map uses), and its detail shows <code>Sharing pos:</code> with the share age and whether it's DM-verified or channel-only.</p>
|
<p>Select a node to see its coordinates, distance, bearing with cardinal direction, type, and last-heard time. A node that is <strong>broadcasting its position</strong> via Live Share is marked with a <strong>♦ diamond</strong> beside its name in the list (the same marker the map uses), and its detail shows <code>Sharing pos:</code> with the share age and whether it's DM-verified or channel-only. A <strong>★ star</strong> marks a favourite, which is also sorted to the top of the list unless <strong>Settings › Contacts › Favs top</strong> is off.</p>
|
||||||
<p><strong>Hold Enter</strong> opens the same <strong>Options</strong> menu everywhere (list and detail), in a fixed order — only the actions that apply appear:</p>
|
<p><strong>Hold Enter</strong> opens the same <strong>Options</strong> menu everywhere (list and detail), in a fixed order — only the actions that apply appear:</p>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@@ -2198,7 +2198,15 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Set as target</td>
|
<td>Set as target</td>
|
||||||
<td>selected node has GPS <strong>and</strong> a public key — pins it as the active <strong>Locator/Nav target</strong> right away (see <strong>Locator</strong>)</td>
|
<td>selected node has a position — pins it as the active <strong>Locator/Nav target</strong> right away (see <strong>Locator</strong>). A node with a known public key (a contact, a scan result, or someone sharing over DM) becomes a <strong>person</strong> target that keeps following them; a name-only row — someone sharing their position on a channel who isn't your contact — becomes a <strong>place</strong> target pinned where they were, since there's no identity to re-resolve</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Fav: ON / OFF</td>
|
||||||
|
<td>selected node is a saved contact — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> toggles it in place, as in the Messages menus; the same starred flag those lists use, shared with the companion app</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Pin to dial / Unpin (slot N)</td>
|
||||||
|
<td>selected node is a saved contact — puts it on the <a href="../../favourites_dial/favourites_dial/">Favourites Dial</a>, taking the first free slot</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Admin</td>
|
<td>Admin</td>
|
||||||
@@ -2206,7 +2214,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Sort: Dist/Recent</td>
|
<td>Sort: Dist/Recent</td>
|
||||||
<td>browsing stored nodes — <strong>LEFT/RIGHT</strong> on the row flips distance ↔ last-heard in place</td>
|
<td>browsing stored nodes — <strong>LEFT/RIGHT</strong> or <strong>Enter</strong> flips distance ↔ last-heard in place</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Discover scan / Rescan</td>
|
<td>Discover scan / Rescan</td>
|
||||||
@@ -2214,7 +2222,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>Filtering stays on the list itself (<strong>LEFT/RIGHT</strong> cycles the type), so there is no separate Filter action in the menu. <strong>Sort</strong> is adjusted in place: highlight the <strong>Sort</strong> row and tap <strong>LEFT/RIGHT</strong> to flip the list (and its right-hand column) between <strong>distance</strong> and <strong>last-heard</strong> without closing the menu — the same in-popup pattern as Trail's settings. The row appears only while browsing stored nodes (live-scan rows carry signal, not distance). Filter and sort are independent and <strong>persist</strong> across re-entry to the screen.</p>
|
<p>Filtering stays on the list itself (<strong>LEFT/RIGHT</strong> cycles the type), so there is no separate Filter action in the menu. <strong>Sort</strong> is adjusted in place: highlight the <strong>Sort</strong> row and tap <strong>LEFT/RIGHT</strong> to flip the list (and its right-hand column) between <strong>distance</strong> and <strong>last-heard</strong> without closing the menu. The row appears only while browsing stored nodes (live-scan rows carry signal, not distance). Filter and sort are independent and <strong>persist</strong> across re-entry to the screen.</p>
|
||||||
<p>Selecting <strong>Ping</strong> opens the Ping popup:</p>
|
<p>Selecting <strong>Ping</strong> opens the Ping popup:</p>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@@ -2382,7 +2390,7 @@ The <strong>Map</strong> view is also reachable directly from the home carousel
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Reset trail</td>
|
<td>Reset trail</td>
|
||||||
<td>Clear RAM ring and elapsed time</td>
|
<td>Clear RAM ring and elapsed time — confirms first (defaults to Cancel) since there's no way back short of a prior <strong>Save trail</strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -2430,7 +2438,7 @@ The <strong>Map</strong> view is also reachable directly from the home carousel
|
|||||||
</table>
|
</table>
|
||||||
<p>(Trail file… appears only when a live or saved trail exists. Mark here needs a GPS fix; Waypoints is always available.)</p>
|
<p>(Trail file… appears only when a live or saved trail exists. Mark here needs a GPS fix; Waypoints is always available.)</p>
|
||||||
<p><strong>Auto-pause</strong> — when set, a recording trail automatically <strong>pauses</strong> after the device has stayed within ~15 m of one spot for the chosen delay: the elapsed timer and point sampling both freeze, and the map line breaks across the idle gap. It <strong>resumes on its own</strong> as soon as you move again. This keeps a stop (a break, a meal, parking) out of your distance and average-speed stats without you having to remember to stop and restart tracking. A paused trail is still "on" (the <strong>G</strong> marker keeps blinking) — the Summary <strong>Status</strong> row shows <code>paused</code>. The stop is detected with its own coarse movement gate, independent of <strong>Min dist</strong>, so GPS jitter while you're parked doesn't keep it awake.</p>
|
<p><strong>Auto-pause</strong> — when set, a recording trail automatically <strong>pauses</strong> after the device has stayed within ~15 m of one spot for the chosen delay: the elapsed timer and point sampling both freeze, and the map line breaks across the idle gap. It <strong>resumes on its own</strong> as soon as you move again. This keeps a stop (a break, a meal, parking) out of your distance and average-speed stats without you having to remember to stop and restart tracking. A paused trail is still "on" (the <strong>G</strong> marker keeps blinking) — the Summary <strong>Status</strong> row shows <code>paused</code>. The stop is detected with its own coarse movement gate, independent of <strong>Min dist</strong>, so GPS jitter while you're parked doesn't keep it awake.</p>
|
||||||
<p><strong>Auto-save</strong> — with this on (default off), the live trail is written to flash automatically when the device powers off, so a <strong>low-battery auto-shutdown</strong> no longer discards the whole route. It saves to the same <code>/trail</code> file as the manual <strong>Trail file… → Save</strong>, and only writes when the trail actually has points — an empty trail can't overwrite a previously saved one. Off by default so a normal shutdown doesn't silently overwrite a saved trail you meant to keep.</p>
|
<p><strong>Auto-save</strong> — with this on (default off), the live trail is written to flash automatically when the device powers off, so a <strong>low-battery auto-shutdown</strong> no longer discards the whole route. It saves to the same <code>/trail</code> file as the manual <strong>Trail file… → Save</strong>, and only writes when the trail actually has points — an empty trail can't overwrite a previously saved one.</p>
|
||||||
<h3 id="track-back">Track back</h3>
|
<h3 id="track-back">Track back</h3>
|
||||||
<p><strong>Hold Enter → Track back</strong> retraces your recorded trail back to the start — useful in poor visibility or unfamiliar ground. It reuses the navigation view (distance + two absolute bearings; see <em>Waypoints › Navigating</em>), but walks the recorded breadcrumbs in reverse: snaps to the <strong>nearest recorded point</strong>, guides you to it, then advances to the next earlier point as you reach each one (within ~20 m). The header shows points remaining (<code>Back: 12 pt</code>), reading <code>Trail start</code> on the final leg; arriving shows <code>Back at start</code> and exits. <strong>Cancel</strong> leaves track-back at any time. Needs a trail with at least two points and a GPS fix; tracking doesn't need to still be running.</p>
|
<p><strong>Hold Enter → Track back</strong> retraces your recorded trail back to the start — useful in poor visibility or unfamiliar ground. It reuses the navigation view (distance + two absolute bearings; see <em>Waypoints › Navigating</em>), but walks the recorded breadcrumbs in reverse: snaps to the <strong>nearest recorded point</strong>, guides you to it, then advances to the next earlier point as you reach each one (within ~20 m). The header shows points remaining (<code>Back: 12 pt</code>), reading <code>Trail start</code> on the final leg; arriving shows <code>Back at start</code> and exits. <strong>Cancel</strong> leaves track-back at any time. Needs a trail with at least two points and a GPS fix; tracking doesn't need to still be running.</p>
|
||||||
<h3 id="waypoints">Waypoints</h3>
|
<h3 id="waypoints">Waypoints</h3>
|
||||||
@@ -2482,9 +2490,9 @@ The <strong>Map</strong> view is also reachable directly from the home carousel
|
|||||||
</table>
|
</table>
|
||||||
<!-- screenshot pending: Waypoints navigation view — target label, distance, To/Hdg bearings (shared with Nearby/message Navigate) -->
|
<!-- screenshot pending: Waypoints navigation view — target label, distance, To/Hdg bearings (shared with Nearby/message Navigate) -->
|
||||||
|
|
||||||
<p>There is no magnetometer, so the screen shows two <em>absolute</em> bearings and you compare them: target at 145°, travelling at 90° → bear right. The <strong>Hdg</strong> line is derived from GPS movement (see Compass) and reads <code>--</code> until you move.</p>
|
<p>There is no magnetometer, so the screen shows two <em>absolute</em> bearings and you compare them: target at 145°, travelling at 90° → bear right. The <strong>Hdg</strong> line is derived from GPS movement (see Compass) and reads <code>--</code> until you move. A fourth line shows closing speed and <strong>ETA</strong> once you're actually approaching. <strong>Back</strong> leaves the view — it's the only key that does, on every navigate view.</p>
|
||||||
<p><strong>Managing</strong> — <strong>Hold Enter</strong> on a waypoint row offers <strong>Rename</strong> / <strong>Delete</strong> / <strong>Send</strong> / <strong>Set as target</strong> (the <em>Trail start</em> row is navigate-only). <strong>Set as target</strong> pins the waypoint as the active <strong>Locator/Nav target</strong> in one step (see <strong>Locator</strong>). Delete removes one at a time; there is no bulk clear.</p>
|
<p><strong>Managing</strong> — <strong>Hold Enter</strong> on a waypoint row offers <strong>Rename</strong> / <strong>Delete</strong> / <strong>Send</strong> / <strong>Set as target</strong> (the <em>Trail start</em> row is navigate-only). <strong>Set as target</strong> pins the waypoint as the active <strong>Locator/Nav target</strong> in one step (see <strong>Locator</strong>). Delete removes one at a time; there is no bulk clear.</p>
|
||||||
<p><strong>Sharing</strong> — <strong>Send</strong> hands the waypoint to the Messages screen: pick a contact or channel, and the message is pre-filled as <code>[WAY]<lat>,<lon> <label></code> (e.g. <code>[WAY]37.42123,-122.08456 CAR</code>) for you to confirm or edit before sending. On the receiving device, opening that message and <strong>Hold Enter → Navigate / Save waypoint</strong> turns it back into a navigable point (see <em>Messages › Fullscreen message view</em>). The format is plain text, so it stays readable on other firmware and the phone app.</p>
|
<p><strong>Sharing</strong> — <strong>Send</strong> hands the waypoint to the Messages screen: pick a contact or channel, and the message is pre-filled as <code>[WAY]<lat>,<lon> <label></code> (e.g. <code>[WAY]37.42123,-122.08456 CAR</code>) for you to confirm or edit before sending. On the receiving device, opening that message and <strong>Hold Enter → Navigate / Save waypoint / Set as target</strong> turns it back into a navigable point (see <em>Messages › Fullscreen message view</em>). The format is plain text, so it stays readable on other firmware and the phone app.</p>
|
||||||
<h3 id="downloading-gpx">Downloading GPX</h3>
|
<h3 id="downloading-gpx">Downloading GPX</h3>
|
||||||
<p><strong>Easiest — <a href="https://marekzegare4.github.io/solo-tools/">Solo GPX Downloader</a></strong> (browser-based, no install):</p>
|
<p><strong>Easiest — <a href="https://marekzegare4.github.io/solo-tools/">Solo GPX Downloader</a></strong> (browser-based, no install):</p>
|
||||||
<ol>
|
<ol>
|
||||||
@@ -2616,7 +2624,7 @@ If the companion app is connected via <strong>BLE</strong>, the export is safe
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Target</td>
|
<td>Target</td>
|
||||||
<td>none / person / waypoint</td>
|
<td>none / person / waypoint</td>
|
||||||
<td><strong>Enter</strong> opens a picker — <strong>None</strong> first (clears the target), then <strong>favourites</strong> (offered even with no known position yet, so you can arm ahead of time), then any other contact with a currently-resolvable position (live-sharing <em>or</em> just last-advertised, e.g. a repeater), then waypoints; <strong>UP/DOWN</strong> + <strong>Enter</strong> to choose. <strong>LEFT/RIGHT</strong> quick-cycles the same set in place, including back to <strong>None</strong>. A person is shown with an <code>@</code> prefix, plus a compact <strong>age tag</strong> (e.g. <code>@Bob (5m)</code>) when the position is last-advertised rather than a live share. Shows <code>none</code> until set.</td>
|
<td><strong>Enter</strong> opens a picker — <strong>None</strong> first (clears the target), then your <strong>favourites</strong> (offered even with no known position yet, so you can arm ahead of time), then any other contact with a currently-resolvable position (live-sharing <em>or</em> just last-advertised, e.g. a repeater), then waypoints; <strong>UP/DOWN</strong> + <strong>Enter</strong> to choose. <strong>LEFT/RIGHT</strong> quick-cycles the same set in place, including back to <strong>None</strong>. A person is shown with an <code>@</code> prefix, a ★ when they're a favourite, plus a compact <strong>age tag</strong> (e.g. <code>@Bob (5m)</code>) when the position is last-advertised rather than a live share. Shows <code>none</code> until set.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Radius</td>
|
<td>Radius</td>
|
||||||
@@ -2638,7 +2646,7 @@ If the companion app is connected via <strong>BLE</strong>, the export is safe
|
|||||||
<p><strong>Crossing alert.</strong> When armed with a target, the device watches its own GPS fix and fires the alert (a short melody plus an on-screen message) the moment you cross the radius, according to <strong>Mode</strong>. The wording adapts to the target — <code>Arrived</code> / <code>Left</code> for a waypoint, <code>Near</code> / <code>Away</code> for a person. The edge has a little hysteresis so a fix hovering right on the boundary doesn't chatter, and the first reading after arming only seeds the in/out state — it won't fire spuriously just because you armed it while already inside.</p>
|
<p><strong>Crossing alert.</strong> When armed with a target, the device watches its own GPS fix and fires the alert (a short melody plus an on-screen message) the moment you cross the radius, according to <strong>Mode</strong>. The wording adapts to the target — <code>Arrived</code> / <code>Left</code> for a waypoint, <code>Near</code> / <code>Away</code> for a person. The edge has a little hysteresis so a fix hovering right on the boundary doesn't chatter, and the first reading after arming only seeds the in/out state — it won't fire spuriously just because you armed it while already inside.</p>
|
||||||
<p><strong>Following a person.</strong> Pick a <strong>favourite</strong> (or any contact with a known position) as the target and the geofence tracks the distance <em>between you and them</em>, working while both of you move. Position resolves with a fixed precedence: an active live <code>[LOC]</code> share wins, falling back to the contact's last-advertised position otherwise — so a stationary node (a repeater, or a one-time fix) still works. You can arm ahead of time — a favourite locks onto their pubkey, and the alert starts once a position is known. Live following needs a <strong>DM</strong> share (a channel share has no stable identity); the last-advertised fallback works for any contact.</p>
|
<p><strong>Following a person.</strong> Pick a <strong>favourite</strong> (or any contact with a known position) as the target and the geofence tracks the distance <em>between you and them</em>, working while both of you move. Position resolves with a fixed precedence: an active live <code>[LOC]</code> share wins, falling back to the contact's last-advertised position otherwise — so a stationary node (a repeater, or a one-time fix) still works. You can arm ahead of time — a favourite locks onto their pubkey, and the alert starts once a position is known. Live following needs a <strong>DM</strong> share (a channel share has no stable identity); the last-advertised fallback works for any contact.</p>
|
||||||
<p><strong>Proximity beeper.</strong> With <strong>Beeper</strong> on, the device ticks while inside the radius, shortening the gap as you get closer — slow near the edge, rapid near the centre — like a homing beeper. Silent outside the radius. As an opt-in toggle, it <strong>overrides the global buzzer mute</strong> — an explicit "I want to hear this." It only appears in <strong>Arrive</strong>/<strong>Both</strong> mode (hidden and silent in <strong>Leave</strong>-only). Independent of the crossing alert, which does follow the mute — use either or both.</p>
|
<p><strong>Proximity beeper.</strong> With <strong>Beeper</strong> on, the device ticks while inside the radius, shortening the gap as you get closer — slow near the edge, rapid near the centre — like a homing beeper. Silent outside the radius. As an opt-in toggle, it <strong>overrides the global buzzer mute</strong> — an explicit "I want to hear this." It only appears in <strong>Arrive</strong>/<strong>Both</strong> mode (hidden and silent in <strong>Leave</strong>-only). Independent of the crossing alert, which does follow the mute — use either or both.</p>
|
||||||
<p><strong>Setting the target from anywhere.</strong> Besides this screen's picker, the <em>same</em> active target can be set in one step with <strong>Set as target</strong> from <strong>Nearby Nodes</strong>' or <strong>Waypoints</strong>' own <strong>Hold Enter</strong> menu — handy so you don't need a detour through Tools. Picking from this screen's picker saves on exit (so <strong>LEFT/RIGHT</strong> cycling stays cheap); the per-item shortcuts save immediately and confirm with a <code>Target set</code> toast.</p>
|
<p><strong>Setting the target from anywhere.</strong> Besides this screen's picker, the <em>same</em> active target can be set in one step with <strong>Set as target</strong> from the <strong>Hold Enter</strong> menu of <strong>Nearby Nodes</strong>, <strong>Waypoints</strong>, or a message carrying a location — handy so you don't need a detour through Tools. Picking from this screen's picker saves on exit (so <strong>LEFT/RIGHT</strong> cycling stays cheap); the per-item shortcuts save immediately and confirm with a <code>Target set</code> toast.</p>
|
||||||
<p><strong>On the map.</strong> Whatever the active target is — person or waypoint — it's drawn as a <strong>flag marker</strong> on both the home <strong>Map</strong> preview and the full <strong>Trail Map</strong>, on top of any waypoint/contact it overlaps and folded into the frame so it never sits off-screen. This shows even when the <strong>Alert</strong> master switch is off, so a target you set purely to navigate to still appears.</p>
|
<p><strong>On the map.</strong> Whatever the active target is — person or waypoint — it's drawn as a <strong>flag marker</strong> on both the home <strong>Map</strong> preview and the full <strong>Trail Map</strong>, on top of any waypoint/contact it overlaps and folded into the frame so it never sits off-screen. This shows even when the <strong>Alert</strong> master switch is off, so a target you set purely to navigate to still appears.</p>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@@ -2769,13 +2777,13 @@ Mark the spot first with <strong>Tools › Trail → Hold Enter → Mark here</s
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Duration</td>
|
<td>Duration</td>
|
||||||
<td>LEFT/RIGHT</td>
|
<td>LEFT/RIGHT or Enter</td>
|
||||||
<td>Cycle duration for selected note</td>
|
<td>Cycle duration for selected note</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>BPM</td>
|
<td>BPM</td>
|
||||||
<td>LEFT/RIGHT</td>
|
<td>LEFT/RIGHT or Enter</td>
|
||||||
<td>Cycle tempo</td>
|
<td>Step tempo (stops at each end)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Insert</td>
|
<td>Insert</td>
|
||||||
@@ -3128,7 +3136,7 @@ Mark the spot first with <strong>Tools › Trail → Hold Enter → Mark here</s
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>The packet counters, <strong>Forwarded</strong>, <strong>Errors</strong> and <strong>RXPS wd s/h</strong> are cumulative since boot. On the <strong>Live</strong> tab, <strong>Hold Enter</strong> opens a one-item <em>Reset counters</em> menu (Back dismisses it); the live readings (noise, RSSI/SNR, pool, queue, uptime) are not affected. <strong>Cancel/Back</strong> returns to the Tools list.</p>
|
<p>The packet counters, <strong>Forwarded</strong>, <strong>Errors</strong> and <strong>RXPS wd s/h</strong> are cumulative since boot. On the <strong>Live</strong> tab, <strong>Hold Enter</strong> opens a <em>Reset counters?</em> confirm (defaults to Cancel); the live readings (noise, RSSI/SNR, pool, queue, uptime) are not affected. <strong>Cancel/Back</strong> returns to the Tools list.</p>
|
||||||
<p>The counters make the repeater behaviour observable: <strong>Forwarded</strong> confirms the node is actually relaying (not just configured to), and <strong>Pool free</strong> / <strong>Queue</strong> show whether forwarding is exhausting the packet pool. See <strong>Tools › Repeater</strong> for the relaying options.</p>
|
<p>The counters make the repeater behaviour observable: <strong>Forwarded</strong> confirms the node is actually relaying (not just configured to), and <strong>Pool free</strong> / <strong>Queue</strong> show whether forwarding is exhausting the packet pool. See <strong>Tools › Repeater</strong> for the relaying options.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="gpio">GPIO</h2>
|
<h2 id="gpio">GPIO</h2>
|
||||||
@@ -3172,7 +3180,7 @@ Mark the spot first with <strong>Tools › Trail → Hold Enter → Mark here</s
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Repeater</td>
|
<td>Repeater</td>
|
||||||
<td>ON / OFF</td>
|
<td>ON / OFF</td>
|
||||||
<td>Master switch. The options below appear only while it is ON.</td>
|
<td>Master switch. The options below are always visible, so the profile and filters can be set up before switching it on.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Network</td>
|
<td>Network</td>
|
||||||
@@ -3180,17 +3188,17 @@ Mark the spot first with <strong>Tools › Trail → Hold Enter → Mark here</s
|
|||||||
<td><strong>Custom</strong> <em>(default)</em>: enabling the repeater switches to a dedicated profile (below), disabling restores the companion's settings. A never-configured device seeds Custom from your own network's band (433/868/915 MHz region), not a flat default, so it can't land outside what's legal for your region. <strong>Current</strong>: relay on the companion's own frequency — opt-in, not the community norm.</td>
|
<td><strong>Custom</strong> <em>(default)</em>: enabling the repeater switches to a dedicated profile (below), disabling restores the companion's settings. A never-configured device seeds Custom from your own network's band (433/868/915 MHz region), not a flat default, so it can't land outside what's legal for your region. <strong>Current</strong>: relay on the companion's own frequency — opt-in, not the community norm.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Rpt preset</td>
|
<td>Preset</td>
|
||||||
<td>named presets</td>
|
<td>named presets</td>
|
||||||
<td><em>(Custom only)</em> <strong>Enter</strong> picks a community/saved preset for the repeater profile.</td>
|
<td><em>(Custom only)</em> <strong>Enter</strong> picks a community/saved preset for the repeater profile.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Rpt freq</td>
|
<td>Freq</td>
|
||||||
<td>chip range</td>
|
<td>chip range</td>
|
||||||
<td><em>(Custom only)</em> <strong>Enter</strong> opens the digit-by-digit editor (chip-validated bounds).</td>
|
<td><em>(Custom only)</em> <strong>Enter</strong> opens the digit-by-digit editor (chip-validated bounds).</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Rpt SF / BW / CR</td>
|
<td>SF / BW / CR</td>
|
||||||
<td>5–12 / 7.8–500 kHz / 5–8</td>
|
<td>5–12 / 7.8–500 kHz / 5–8</td>
|
||||||
<td><em>(Custom only)</em> <strong>LEFT/RIGHT</strong> to adjust the profile's spreading factor, bandwidth, coding rate.</td>
|
<td><em>(Custom only)</em> <strong>LEFT/RIGHT</strong> to adjust the profile's spreading factor, bandwidth, coding rate.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -3275,7 +3283,7 @@ Mark the spot first with <strong>Tools › Trail → Hold Enter → Mark here</s
|
|||||||
- <strong>Name / Owner info</strong> first <strong>fetch</strong> the node's current value, then open the keyboard <strong>pre-filled</strong> with it to edit — submitting sends the change. If the fetch fails or times out, the keyboard still opens (blank), so the value can be set blind.
|
- <strong>Name / Owner info</strong> first <strong>fetch</strong> the node's current value, then open the keyboard <strong>pre-filled</strong> with it to edit — submitting sends the change. If the fetch fails or times out, the keyboard still opens (blank), so the value can be set blind.
|
||||||
- <strong>Radio and Routing rows</strong> are typed, not free text: <strong>Repeat</strong> is an ON/OFF toggle; <strong>Advert interval / Flood advert interval / Max hops / TX power</strong> are number steppers (<strong>LEFT/RIGHT</strong> to adjust, within that field's valid range); <strong>Frequency</strong> uses the same digit-by-digit cursor editor as Settings' own Radio screen (<strong>LEFT/RIGHT</strong> moves between digits, <strong>UP/DOWN</strong> changes the selected one); <strong>Bandwidth / Spreading factor / Coding rate</strong> step through their valid discrete LoRa values with <strong>LEFT/RIGHT</strong>. All four Radio-tuple fields (Frequency/Bandwidth/SF/Coding rate) fetch and re-send the same underlying <code>radio</code> value together — editing any one of them still only overwrites that one, the other three round-trip unchanged. <strong>Enter</strong> sends the change; <strong>Cancel</strong> discards it and returns to the row list without sending anything.
|
- <strong>Radio and Routing rows</strong> are typed, not free text: <strong>Repeat</strong> is an ON/OFF toggle; <strong>Advert interval / Flood advert interval / Max hops / TX power</strong> are number steppers (<strong>LEFT/RIGHT</strong> to adjust, within that field's valid range); <strong>Frequency</strong> uses the same digit-by-digit cursor editor as Settings' own Radio screen (<strong>LEFT/RIGHT</strong> moves between digits, <strong>UP/DOWN</strong> changes the selected one); <strong>Bandwidth / Spreading factor / Coding rate</strong> step through their valid discrete LoRa values with <strong>LEFT/RIGHT</strong>. All four Radio-tuple fields (Frequency/Bandwidth/SF/Coding rate) fetch and re-send the same underlying <code>radio</code> value together — editing any one of them still only overwrites that one, the other three round-trip unchanged. <strong>Enter</strong> sends the change; <strong>Cancel</strong> discards it and returns to the row list without sending anything.
|
||||||
- <strong>Admin password</strong> has no fetch (there's no way to read a password back) — it opens straight to a blank keyboard.
|
- <strong>Admin password</strong> has no fetch (there's no way to read a password back) — it opens straight to a blank keyboard.
|
||||||
- <strong>Actions</strong> (Reboot, Send advert, …) send immediately, no editing step — except <strong>Start OTA</strong>, which asks <strong>Start / Cancel</strong> first (defaulting to Cancel): it puts the remote into BLE DFU mode for the duration of the update, far more disruptive than a quick reboot.
|
- <strong>Actions</strong> (Send advert, Sync clock, …) send immediately, no editing step — except <strong>Reboot</strong> and <strong>Start OTA</strong>, which both ask first (defaulting to Cancel): they take the remote out of action for a while with no way to intervene on an unattended node if something goes wrong.
|
||||||
- <strong>Custom command...</strong> (last row of Actions) opens the same free-text entry for anything not covered above — up to 160 characters, see the linked reference for the full grammar. The keyboard's <strong>{}</strong> key doubles as command completion here: it lists commands matching whatever's typed since the last space (narrowing as you type), and picking one completes that word instead of just inserting after it.
|
- <strong>Custom command...</strong> (last row of Actions) opens the same free-text entry for anything not covered above — up to 160 characters, see the linked reference for the full grammar. The keyboard's <strong>{}</strong> key doubles as command completion here: it lists commands matching whatever's typed since the last space (narrowing as you type), and picking one completes that word instead of just inserting after it.
|
||||||
4. <strong>Read the reply</strong> — the text reply opens in a scrollable view (<strong>UP/DOWN</strong> to scroll, <strong>Cancel/Enter</strong> to go back to the category tabs).</p>
|
4. <strong>Read the reply</strong> — the text reply opens in a scrollable view (<strong>UP/DOWN</strong> to scroll, <strong>Cancel/Enter</strong> to go back to the category tabs).</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
|
|||||||
Reference in New Issue
Block a user