mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-08-29 11:28:18 +00:00
bump to 1.16.7
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# ZephCore 1.16.7-zephcore
|
||||
|
||||
> [!IMPORTANT]
|
||||
> ## Before you upgrade
|
||||
>
|
||||
> **From v1.16.6 / v1.16.5** — clean flash, no re-bond, bonds and data survive.
|
||||
>
|
||||
> **From v1.16.2 / v1.16.3 / v1.16.4** — clean flash, bonds and data survive. If you are on an
|
||||
> **ESP32-S3 / ESP32-C board** and have *not* yet taken the v1.16.5 update, you still owe the one-time
|
||||
> serial reflash: the app moved to flash offset `0x10000` in v1.16.5, and a board on the old layout
|
||||
> cannot cross that update over WiFi-OTA or the browser flasher — **flash the `-merged.bin` once over
|
||||
> USB/serial.** Affected boards: *Heltec V3 / V4 / V4.3, Station G2, Wireless Tracker / V2, XIAO
|
||||
> ESP32-S3 / C3 / C6, LilyGo T-Lora C6.* Identity, contacts, channels, prefs, and BLE bonds are
|
||||
> preserved. nRF52, classic ESP32 (T-Beam / PICO-D4 / TTGO LoRa32), STM32WL, and native Linux are
|
||||
> unaffected.
|
||||
>
|
||||
> **From v1.16.1 or older** — flash it; on first boot it clears BLE bonds automatically (identity,
|
||||
> contacts, channels, prefs preserved). Re-bond your phone/desktop once.
|
||||
>
|
||||
> **Coming from Arduino MeshCore** — flash it; auto-formats on first boot (new identity, clean storage).
|
||||
>
|
||||
> Take this with a grain of salt — try the formatters if anything anomalous happens with your node.
|
||||
|
||||
---
|
||||
|
||||
A stability-and-hardware release. The headline is a **whole-node wedge fixed** in the GPS power-management
|
||||
path that shipped in v1.16.6, plus **RX duty cycle finally working on LR1110 boards** and a new safety
|
||||
margin that stops signal-independent duty-cycle packet drops on every radio. Rounded out by joystick-UI
|
||||
fixes and a color-display improvement for the Heltec T114.
|
||||
|
||||
## Highlights
|
||||
|
||||
### Fixed: a GPS node could wedge completely on standby (regression in v1.16.6)
|
||||
|
||||
v1.16.6 introduced GPS-UART suspend to save power (an armed nRF UARTE receiver costs ~0.5–1 mA even with
|
||||
the GPS module powered down). It had a race that could **hang the entire node** — no LoRa, no USB, no BLE,
|
||||
CLI answering `-> busy`, recoverable only by reboot.
|
||||
|
||||
The upstream nRF UARTE suspend path spins forever waiting for an `RXTO` event after issuing `STOPRX`. In
|
||||
interrupt-driven mode the receiver runs one byte at a time and re-arms from its ISR; if a byte happened to
|
||||
finish in the narrow window where the driver had already disabled the `ENDRX` interrupt, the receiver was
|
||||
left stopped-and-un-rearmed, `STOPRX` produced no `RXTO`, and the wait never returned — with the main mesh
|
||||
thread stuck inside it. Any nRF board that powers its GPS module down and suspends the port on standby
|
||||
could hit this.
|
||||
|
||||
Fixed in two independent layers, so neither alone is load-bearing:
|
||||
|
||||
- **`ZephyrGPSManager` settles ~5 ms before suspending** the GPS UART, letting the last in-flight byte
|
||||
finish and the RX ISR re-arm, so the receiver is armed-and-idle when `STOPRX` fires — the state that
|
||||
reliably yields `RXTO`. Standby happens at most every few minutes, so the cost is negligible.
|
||||
- **New patch `0010` bounds the driver's `RXTO` wait** to 4 ms instead of spinning forever. On timeout it
|
||||
falls through to the unconditional `nrf_uarte_disable()` that force-stops the receiver anyway — so even
|
||||
if a byte still lands in the race window, the node can never hang.
|
||||
|
||||
### RX duty cycle now works on LR1110 boards
|
||||
|
||||
LR1110 boards (T1000-E, ThinkNode M9, and other LR11xx radios) now get real **RX duty-cycle sniff mode**
|
||||
instead of sitting in continuous receive — a substantial receive-power saving on battery nodes, the same
|
||||
mechanism SX126x boards have had. This took a significant rework of the LR11xx LoRa driver to land
|
||||
correctly.
|
||||
|
||||
### New: duty-cycle safety margin stops signal-independent packet drops
|
||||
|
||||
`set`-able via `CONFIG_ZEPHCORE_LORA_DC_MARGIN_PCT` (default **15%**), shared by every radio
|
||||
(SX126x / LR11xx / LR20xx).
|
||||
|
||||
The theoretical per-cycle "deaf-time" budget that duty cycle is computed from assumes the sleep clock and
|
||||
the wake transition are exact. They are not: the chip's sleep timer runs on an internal RC oscillator
|
||||
(RC64k on SX126x, RTC on LR11xx) that drifts several percent over temperature, and the wake-transition
|
||||
figure is a datasheet number the datasheet itself calls "not accurate and may vary." Either overshoot
|
||||
silently pushes real deaf time past the budget and drops exactly the fraction of packets whose preamble
|
||||
phase lands on the window edge — a **strength-independent loss that shows up as random duty-cycle packet
|
||||
drops**, not as weak-signal loss.
|
||||
|
||||
The margin derates the whole budget before the sleep period is programmed, trading a little radio-off time
|
||||
for robustness. Set it to `0` to restore the old zero-margin behaviour; lower it below 15% once you have
|
||||
measured your board's clock-plus-transition on air.
|
||||
|
||||
### Joystick UI fixes
|
||||
|
||||
- **The 2-tap and 5-tap actions were swapped.** The everyday action (LED heartbeat toggle) is now **2 taps**
|
||||
and the rarer one (flood advert) is **5 taps** — matching the button-UI mapping and the on-device help.
|
||||
Applies to both the joystick UI and single-button boards.
|
||||
- **Fixed: a node booted with LEDs disabled could never turn its LEDs back on from the UI.** The toggle
|
||||
called only the heartbeat helper and left the underlying `leds_disabled` gate at its boot value, so
|
||||
`leds_disabled=1` was effectively one-way. It now flips the real gate.
|
||||
- **The LED toggle now shows an on-screen "LEDs: ON / OFF" confirmation**, so you can tell it registered.
|
||||
|
||||
### Heltec T114 color display improvements
|
||||
|
||||
From [PR #62](https://github.com/liquidraver/ZephCore/pull/62) by [@Calvario](https://github.com/Calvario):
|
||||
the button UI now **respects `CONFIG_ZEPHCORE_DISPLAY_LARGE_FONT`** on color panels, and the gray used for
|
||||
secondary text was retuned (`0x8410` → `0xEF7D`) so it actually reads as a visible gray on the T114's TFT,
|
||||
which crushes darker grays to invisibility. Thanks to Steve Calvário.
|
||||
|
||||
## Other changes
|
||||
|
||||
- **west manifest bumped** (routine pinned-tree advance).
|
||||
|
||||
## Recommended upgrade checklist
|
||||
|
||||
1. **Running v1.16.6 on a GPS-equipped nRF node?** Update — this release fixes the standby wedge described
|
||||
above. Bonds and data survive.
|
||||
2. **ESP32-S3 / ESP32-C boards that skipped v1.16.5:** flash `-merged.bin` once over USB/serial. Data survives.
|
||||
3. **Everything else, from v1.16.2 onward:** just flash — bonds and data survive.
|
||||
4. **From v1.16.1 or older:** just flash — self-migrates on first boot; re-bond once.
|
||||
5. **From Official MeshCore:** just flash — auto-formats on first boot.
|
||||
6. **Anything odd?** Format first.
|
||||
@@ -464,7 +464,7 @@ add_definitions(-DFIRMWARE_BUILD_EPOCH=${ZEPHCORE_BUILD_EPOCH}u)
|
||||
# release is tagged/named, and what the Mesh America catalog uses as its version
|
||||
# key — so the configurator can match a running device against the catalog. Keep
|
||||
# all four identical; the release workflow reads this value directly.
|
||||
set(ZEPHCORE_FIRMWARE_VERSION "1.16.6-zephcore")
|
||||
set(ZEPHCORE_FIRMWARE_VERSION "1.16.7-zephcore")
|
||||
add_definitions(-DFIRMWARE_VERSION="${ZEPHCORE_FIRMWARE_VERSION}")
|
||||
|
||||
add_subdirectory(lib/monocypher)
|
||||
|
||||
@@ -156,7 +156,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="1.16.6-zephcore"
|
||||
CONFIG_BT_DIS_FW_REV_STR="1.16.7-zephcore"
|
||||
CONFIG_BT_DIS_SW_REV=y
|
||||
CONFIG_BT_DIS_SW_REV_STR="Zephyr"
|
||||
CONFIG_BT_DIS_PNP=n
|
||||
|
||||
Reference in New Issue
Block a user