Compare commits

...
2 Commits
Author SHA1 Message Date
Kaj SchittecatandClaude Opus 4.8 26c9ccdc07 touch: beta_23 (test) — keep the per-packet RX log off BLE (#46, #54)
The device broadcast a PUSH_CODE_LOG_RX_DATA frame to every connected companion —
including BLE — for every LoRa packet it heard. BLE's ~16 frames/sec budget got
saturated on a busy mesh, delaying/dropping the frames that matter: chat messages
(#46) and repeater/room-server admin responses (#54, the "Streamsink" disconnects).
Skip the RX log on the BLE transport in writeFrameToAll; USB/TCP/WS still get it for
the on-device Monitor app. The MeshCore app never consumed it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 10:15:13 +02:00
Kaj SchittecatandClaude Opus 4.8 0d8e635848 site: document Stable vs Test channels + how to opt in
Landing page: a plain-language Stable vs Beta explainer under the install channel
toggle, covering both install paths (flash a channel here, or flip the on-device
"Get test builds" toggle). Userguide: a new "Updates & test builds" section (how
updates work, the two channels, how to turn on test builds) plus a Get-test-builds
line on the About settings card.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 09:19:23 +02:00
4 changed files with 42 additions and 1 deletions

No files matched your search

+20
View File
@@ -127,6 +127,7 @@
<div class="grp">With your phone</div> <div class="grp">With your phone</div>
<a href="#companion">Companion mode</a> <a href="#companion">Companion mode</a>
<div class="grp">Reference</div> <div class="grp">Reference</div>
<a href="#updates">Updates &amp; test builds</a>
<a href="#settings-pages">Settings pages</a> <a href="#settings-pages">Settings pages</a>
<a href="#apps">Apps</a> <a href="#apps">Apps</a>
</nav> </nav>
@@ -239,6 +240,24 @@
</div> </div>
</section> </section>
<section class="doc" id="updates">
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 4v6h-6"/><path d="M1 20v-6h6"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></svg></span> Updates &amp; test builds</h2>
<div class="row">
<div class="prose">
<p>On the boards that update over Wi-Fi (the Heltec V4 and the standalone T-Deck), WADAMESH checks for new firmware on its own. When one is available, <b>Settings &rarr; About</b> shows it and you can flash it straight from the device with <b>Install update</b>, no computer needed. (Under Launcher and on the Tanmatsu you update through Launcher or the app store instead.)</p>
<h3>Two channels: Stable and Test</h3>
<ul>
<li><b>Stable</b> is the default. It is the build that has been tested and is recommended for everyday use. Leave your device on this unless you want to help test.</li>
<li><b>Test (beta)</b> gets new features and fixes earlier, before they are proven. It can be rough, so it is meant for trying things early and reporting bugs, not for a device you rely on.</li>
</ul>
<h3>Turn on test builds</h3>
<p>Flip <b>Settings &rarr; About &rarr; "Get test builds (beta)"</b> on. From then on, both the update check and <b>Install update</b> follow the test channel, so the device offers the newest test build over Wi-Fi. Turn the switch back off to return to stable. You can switch either way at any time.</p>
<p>Prefer to start on a test build from scratch? Pick <b>Beta &middot; testing</b> when you flash from <a href="https://flasher.wadamesh.com" target="_blank" rel="noopener">flasher.wadamesh.com</a>.</p>
</div>
<div class="shot"><div class="device"><img class="screen" src="docs-img/set_about.png" alt="About page"></div><div class="cap">The About page</div></div>
</div>
</section>
<section class="doc" id="settings-pages"> <section class="doc" id="settings-pages">
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/></svg></span> Settings pages</h2> <h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/></svg></span> Settings pages</h2>
<div class="prose" style="max-width:68ch"><p>WADAMESH splits its settings into eighteen pages. Here is what each one does and the controls you will find on it. Open any page from the Settings tab; a back chevron in the title bar returns you to the grid.</p></div> <div class="prose" style="max-width:68ch"><p>WADAMESH splits its settings into eighteen pages. Here is what each one does and the controls you will find on it. Open any page from the Settings tab; a back chevron in the title bar returns you to the grid.</p></div>
@@ -438,6 +457,7 @@
<div class="lede">Version, updates and diagnostics.</div> <div class="lede">Version, updates and diagnostics.</div>
<ul> <ul>
<li><b>Firmware version</b> plus update check / install</li> <li><b>Firmware version</b> plus update check / install</li>
<li><b>Get test builds (beta)</b> switch: opt into the <a href="#updates">test channel</a></li>
<li>Full <b>system diagnostics</b> — uptime, chip, memory, flash, storage</li> <li>Full <b>system diagnostics</b> — uptime, chip, memory, flash, storage</li>
<li><b>Device ID</b> and crash-report export</li> <li><b>Device ID</b> and crash-report export</li>
</ul> </ul>
+1
View File
@@ -321,6 +321,7 @@
<button type="button" data-wm-ch="stable" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;background:#fff;color:var(--mut);cursor:pointer">Stable</button> <button type="button" data-wm-ch="stable" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;background:#fff;color:var(--mut);cursor:pointer">Stable</button>
<button type="button" data-wm-ch="beta" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;border-left:1px solid var(--line);background:#fff;color:var(--mut);cursor:pointer">Beta · testing</button> <button type="button" data-wm-ch="beta" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;border-left:1px solid var(--line);background:#fff;color:var(--mut);cursor:pointer">Beta · testing</button>
</div> </div>
<p style="margin:12px auto 0;max-width:600px;text-align:left;font-size:.88rem;line-height:1.6"><b>Stable</b> is the tested default. Pick it unless you want to help test. <b>Beta &middot; testing</b> gets new features and fixes earlier, before they are proven, so it can be rough. It is for trying things early and reporting bugs.<br>Already running WADAMESH? You do not have to reflash to switch channels: turn on <b>Settings &rarr; About &rarr; "Get test builds (beta)"</b> on the device and it updates to test builds over Wi-Fi. Switch it off to go back to stable.</p>
<p data-wm-betahint hidden style="margin:8px auto 0;font-size:.84rem;color:#b4631a;max-width:560px">Beta builds are newer and less tested — for trying things early and reporting bugs. On a T-Deck under Launcher you download the .bin and side-load it.</p> <p data-wm-betahint hidden style="margin:8px auto 0;font-size:.84rem;color:#b4631a;max-width:560px">Beta builds are newer and less tested — for trying things early and reporting bugs. On a T-Deck under Launcher you download the .bin and side-load it.</p>
<div data-whatsnew hidden style="margin:18px auto 0;max-width:560px;background:rgba(21,182,166,.07);border:1px solid rgba(21,182,166,.28);border-radius:12px;padding:13px 16px;text-align:left"> <div data-whatsnew hidden style="margin:18px auto 0;max-width:560px;background:rgba(21,182,166,.07);border:1px solid rgba(21,182,166,.28);border-radius:12px;padding:13px 16px;text-align:left">
<div style="font-weight:600">What's new in <span data-wn-tag style="color:var(--teal)">the latest build</span></div> <div style="font-weight:600">What's new in <span data-wn-tag style="color:var(--teal)">the latest build</span></div>
+11
View File
@@ -0,0 +1,11 @@
# beta_23 (TEST build — one user-facing note per non-blank, non-# line; # lines are section comments)
# --- Fixed ---
Bluetooth companion reliability, especially messages and repeater admin. When a phone or Mac was connected over Bluetooth, the device was sending it a log entry for every LoRa packet it heard — on a busy mesh that swamped the Bluetooth link and starved the frames that actually matter. The device no longer sends that packet log over Bluetooth (USB and Wi-Fi companions still get it), so incoming messages reach the app and repeater / room-server admin (Manage Regions, saving parameters) stops timing out and dropping the connection. (Issues #46 and #54.)
# --- Also in this test line (carried from beta_22) ---
The signal probe reads a real signal again: it sends a directed trace "ping" to your nearest repeater, which replies, instead of a zero-hop advert that nothing answers. Thanks to Tarmo for spotting it.
Contacts discovered while your phone is connected now also show on the device's own screen, not just in the phone app. (Issue #73.)
# --- Also ---
This is a test-channel build (opt in with "Get test builds" on the About screen). Everything from the stable beta_21 is included.
@@ -3,6 +3,10 @@
#include "WifiRuntimeStore.h" // persist BLE on/off (ble_en) across reboots #include "WifiRuntimeStore.h" // persist BLE on/off (ble_en) across reboots
#include <string.h> #include <string.h>
// Companion push code for the per-packet RX log (matches MyMesh.cpp). It is kept OFF
// the BLE transport in writeFrameToAll — see the note there (issues #46, #54).
#define PUSH_CODE_LOG_RX_DATA 0x88
MultiTransportCompanionInterface::MultiTransportCompanionInterface() MultiTransportCompanionInterface::MultiTransportCompanionInterface()
: _tcp_port(0), _ws_port(0), _tcp_started(false), _ws_started(false), _tcp_enabled(true), _isEnabled(false), _broadcast(false), _last_reply_target(REPLY_TARGET_USB), _ota_tcp_suspended(false), _ota_ws_suspended(false), _ota_ws_listen_paused(false) : _tcp_port(0), _ws_port(0), _tcp_started(false), _ws_started(false), _tcp_enabled(true), _isEnabled(false), _broadcast(false), _last_reply_target(REPLY_TARGET_USB), _ota_tcp_suspended(false), _ota_ws_suspended(false), _ota_ws_listen_paused(false)
#ifdef BLE_PIN_CODE #ifdef BLE_PIN_CODE
@@ -329,7 +333,12 @@ size_t MultiTransportCompanionInterface::writeFrameToAll(const uint8_t src[], si
if (_usb.isConnected() && _usb.writeFrame(src, len) != len) if (_usb.isConnected() && _usb.writeFrame(src, len) != len)
all_ok = false; all_ok = false;
#ifdef BLE_PIN_CODE #ifdef BLE_PIN_CODE
if (_ble_begun && _ble_enabled && _ble.isConnected() && _ble.writeFrame(src, len) != len) // The per-packet RX log floods BLE's ~16 frames/sec budget on a busy mesh, starving
// the frames that matter — chat messages + admin responses (issues #46, #54). The
// MeshCore app doesn't consume the RX log, so keep it OFF BLE; USB/TCP/WS (far more
// bandwidth) still receive it for the on-device Monitor app / diagnostics.
const bool skip_ble = (len > 0 && src[0] == PUSH_CODE_LOG_RX_DATA);
if (!skip_ble && _ble_begun && _ble_enabled && _ble.isConnected() && _ble.writeFrame(src, len) != len)
all_ok = false; all_ok = false;
#endif #endif
if (_tcp_started && _tcp.connectedCount() > 0 && _tcp.writeToAllClients(src, len) != len) if (_tcp_started && _tcp.connectedCount() > 0 && _tcp.writeToAllClients(src, len) != len)