bump to 1.16.5

This commit is contained in:
liquidraver
2026-07-12 14:23:37 +02:00
parent a320a7646d
commit 9d204db5c7
3 changed files with 64 additions and 3 deletions
+62 -1
View File
@@ -10,7 +10,7 @@
> Your identity, contacts, channels, prefs, and BLE bonds are preserved. After this reflash, OTA and
> app-updates work again.
>
> **nRF52, classic ESP32 (T-Beam / PICO-D4), STM32WL, and native Linux are unaffected** — upgrade as usual.
> **nRF52, classic ESP32 (T-Beam / PICO-D4 / TTGO LoRa32), STM32WL, and native Linux are unaffected** — upgrade as usual.
>
> **From v1.16.2 / v1.16.3 / v1.16.4** — clean flash, no re-bond, bonds and data survive.
>
@@ -24,6 +24,8 @@
The headline of this release is **browser flashing via the Mesh America configurator** — and, in wiring
it up, we found and fixed a bug that was silently breaking **WiFi-OTA on every ESP32-S3 / ESP32-C board**.
Alongside it: **Adaptive CAD**, a self-tuning listen-before-talk that calibrates itself to each site;
**V-Contact**, an in-app admin channel for companions; and a batch of LoRa-driver reliability fixes.
## Highlights
@@ -44,6 +46,65 @@ The ESP32 app slot moved from `0x20000` to `0x10000` — matching the Arduino /
change that fixes OTA above, and it also enables the configurator's fast **app-only update** (rewrites just
the app, keeps your settings). Requires the one-time serial reflash (see *Before you upgrade*).
### New: Adaptive CAD — listen-before-talk that tunes itself to your site
Every transmission is preceded by a Channel Activity Detection (CAD) check that listens for other LoRa
traffic and holds off if the channel is busy. How sensitive that check is has always been a single
hardcoded number — but the right value depends on where the node lives. A quiet valley node and a
50-network hilltop need very different thresholds: too sensitive and the node keeps deferring for phantom
traffic (wasted airtime, latency); not sensitive enough and it transmits over real packets (collisions).
Nodes now **measure their own RF environment and adjust automatically**. In the background, between
transmissions, the radio runs short calibration probes, tracks how often each sensitivity level produces a
false "busy", and settles on the lowest false-positive threshold for *that* site — responding to a
changing environment within an hour or two. It runs on repeaters and companions, and it is **on by
default**; there is nothing to configure.
- `get cad` — watch what it's doing: the current threshold and per-level false-positive statistics.
- `set cad.auto off` — turn off the auto-adjust to observe or hand-tune with `set cad.offset`.
Quiet sites end up *more* sensitive than the old fixed default (fewer stomped packets); noisy sites back
off until the false alarms stop. CAD also now uses 4 detection symbols everywhere, which improves detection
of an in-progress packet's payload (not just its preamble). Full guide, including the honest limitation
that the "missed detection" side isn't locally observable, is in
**[ADAPTIVE_CAD.md](https://github.com/liquidraver/ZephCore/blob/master/zephcore/ADAPTIVE_CAD.md)**.
(SX127x boards have no hardware CAD and keep their RSSI-based gate.)
### New: V-Contact — admin your companion from the chat app, no cable
Companions now expose a special contact named `v<your-node-name>`. Chat with it and your messages run the
same text CLI you'd use over USB serial — the reply comes back as ordinary chat messages. It's the easiest
way to check or change settings on a companion in the field without plugging in.
It's also used for two unsolicited notices: a **restart-reason message** after a reboot (so an unexpected
brownout or watchdog reset is visible instead of silent) and a **one-shot low-battery alert**. The whole
thing is local to your device — the v-contact has no real keypair and **never creates a packet or touches
the radio**, so none of this costs airtime. On by default; toggle the `v_contact_enabled` variable from the
app to disable.
### LoRa driver reliability (LR1110 / LR2021)
- **Fixed: LR1110 accepted CRC-failed packets.** On the LR11xx/LR20xx family a CRC-failed receive raises
`RX_DONE` and `CRC_ERROR` together; the driver was acting on `RX_DONE` alone and passing corrupt frames
up the stack. It now gates on the error bits (matching the SX126x path).
- **Ported the SX126x preamble-grace / RX-busy handling to LR11xx/LR20xx.** A foreign or noise-triggered
preamble detection could pin the channel-busy state and stall listen-before-talk recovery. The same
SF-aware grace window and header-valid latch the SX126x driver uses now guard the LR path, so a real
packet promotes to "receiving" and a false preamble releases after a bounded window.
## Other fixes and improvements
- **Classic ESP32 companion builds** (TTGO LoRa32, T-Beam) now build and link correctly. The Espressif BT
HCI controller node wasn't wired on TTGO LoRa32 (companion needs BLE), and the CLI backing the V-Contact
chat wasn't compiled on plain (non-logging) companion builds — both fixed. Contact-table sizes on these
DRAM-tight classic-ESP32 boards were trimmed to fit alongside the BLE controller.
- **SenseCAP Solar** LED devicetree fix.
- **LilyGo T-Impulse Plus** display fixes (follow-up to the initial port).
- **Repeater + observer hybrid** role wiring fixups (MQTT publisher / uplink credentials / observer mesh).
- **`get`/`set` command keywords are now case-insensitive** (e.g. `Get cad` works). Command *values*
passwords, node names, keys — remain case-sensitive as they must be.
- **Platform: Zephyr west manifest advanced** (continuing along the `v4.4-branch`).
- **New `-update` build artifacts** for OTA / manual app-only updates, published alongside the full images.
- **Docs:** new `ADAPTIVE_CAD.md`; `Repeater_CLI_commands.md`, `ARCHITECTURE.md`, and `PROVIDER_CATALOG.md`
updated for the above.
## Recommended upgrade checklist
1. **ESP32-S3 / ESP32-C boards:** flash `-merged.bin` once over USB/serial. WiFi-OTA can't cross this update; data survives.
+1 -1
View File
@@ -459,7 +459,7 @@ add_definitions(-DFIRMWARE_BUILD_EPOCH=${ZEPHCORE_BUILD_EPOCH}u)
# value; the per-app `#ifndef FIRMWARE_VERSION` fallbacks only apply to builds that
# bypass this injection. NOTE: the BLE DIS value in boards/common/zephcore_common.conf
# (CONFIG_BT_DIS_FW_REV_STR) is Kconfig, not C, so it must be bumped here AND there.
set(ZEPHCORE_FIRMWARE_VERSION "v1.16.4-zephyr")
set(ZEPHCORE_FIRMWARE_VERSION "v1.16.5-zephyr")
add_definitions(-DFIRMWARE_VERSION="${ZEPHCORE_FIRMWARE_VERSION}")
add_subdirectory(lib/monocypher)
+1 -1
View File
@@ -151,7 +151,7 @@ CONFIG_BT_DIS_FW_REV=y
# of truth for the C side, injected as -DFIRMWARE_VERSION). This Kconfig value can't
# read a C macro, so it must be bumped here too. Phones that read DIS and phones
# that query CMD_DEVICE_QUERY should see the same version.
CONFIG_BT_DIS_FW_REV_STR="v1.16.4-zephyr"
CONFIG_BT_DIS_FW_REV_STR="v1.16.5-zephyr"
CONFIG_BT_DIS_SW_REV=y
CONFIG_BT_DIS_SW_REV_STR="Zephyr"
CONFIG_BT_DIS_PNP=n