github liquidraver/ZephCore v20260618.103531
Firmware v20260618.103531

7 hours ago

ZephCore v1.16.3-zephyr

(re-re-release with the "smearing fix on eink after the full update" and "automount error on a freshly formatted node")

Important

Before you upgrade

Updating from v1.16.2 — clean flash, no re-bond required, bonds survive.

Updating from v1.16.1 or older — flash the firmware; the firmware detects the old installation on first boot and clears the BLE bond storage automatically. Your identity, contacts, channels, and prefs are preserved. You will need to re-bond your phone/desktop once (old pairings were stored in a different location that v1.16.2 moved away from). No formatter tool required.

Coming from Arduino MeshCore — flash the firmware; it detects the incompatible filesystem on first boot and formats automatically. Everything starts fresh (new identity, clean storage). No formatter tool required.

Take this with a grain of salt tho… try the formatters if anything anomalous happens with your node.


This is a GPS-focused release: it stops a battery-killing bug on GPS trackers, puts the GPS duty cycle under your control, and follows up the v1.16.2 ESP32 pairing work with a fix for recent Android phones.

Highlights

Fixed: ThinkNode M1 draining its battery in a day

On the ThinkNode M1, the GPS module was never actually powered down between fixes — the reset line was mislabeled in the board definition and held permanently released, so the receiver kept drawing current even when the firmware thought it was asleep. A full battery could disappear in roughly a day with GPS enabled.

The M1 now asserts the GPS hardware reset on standby, so the GPS genuinely stops between fixes. If you run an M1 with GPS on, this is the fix you want.

New: configurable GPS duty cycle — set gps duty <seconds>

You can now decide how your node handles GPS, instead of it being baked in:

  • set gps duty <seconds> — how long the GPS sleeps between fixes. Persists to flash and applies immediately.
  • set gps duty 0always-on: the GPS never sleeps. It streams fresh fixes (so telemetry is always current) and stays on long enough to download a full almanac.
  • set gps duty default — reset to the role default.
  • get gps duty — show the now-effective interval.

This unifies repeaters and companions behind one knob. Repeaters default to 48 h (GPS wakes only for periodic time-sync) and companions to 5 minutes — both now adjustable. Existing repeaters are migrated automatically; nothing to do.

Bad input is rejected with a usage hint, and the value is clamped to a sane range (10 s … 1 week, or 0 for always-on).

Fixed: GPS no longer pins itself on waiting for a first fix

Previously, after enabling GPS a companion would keep the receiver powered indefinitely until it got its first fix — so a node left somewhere without sky view (indoors, in a bag) could quietly drain its battery forever. The first cold-start acquisition is now bounded (5 minutes by default, enough for a genuine cold start), after which the node drops into its normal duty cycle whether or not it got a fix.

Fixed: ESP32 Secure Connections pairing (Pixel 7 / recent Android)

Following the v1.16.2 ESP32 pairing fix, SC-capable centrals — notably recent Android phones like the Pixel 7 — still failed to bond: the controller's encryption table was left uninitialized because the relevant code was guarded on an ESP-IDF symbol that never exists in a Zephyr build, so the link dropped with a MIC failure at encryption start. The guard is corrected (carried as a managed hal_espressif patch), and SC pairing now completes. Legacy-pairing devices were unaffected and continue to work. Thanks @seagull9000.

Other fixes and improvements

  • Fixed: GPS always-on on a freshly flashed companion — a new install would default gps_interval to 0 (always-on) instead of the intended 5-minute duty cycle, causing the GPS to run continuously from the first boot even on battery-powered devices. The correct default is now applied before prefs are saved on first boot.
  • Fixed: BLE silent on first boot after flashing over Official MeshCore or old ZephCore — the first boot now auto-detects the previous firmware and performs the minimum necessary storage migration without requiring the formatter tool:
    • No prefs or Arduino prefs detected: full LFS + NVS format (clean slate, new identity).
    • Valid ZephCore prefs + old file-based bond store (/lfs/settings): NVS erased only; identity, prefs, and contacts are preserved.
    • Valid ZephCore prefs + NVS already initialized (v1.16.2+): nothing erased; bonds survive.
      A marker file (/lfs/_zc_init) is written after the first clean boot so the check never runs again.
  • GPS manager refactor — the acquisition/standby state machine was consolidated around a single duty-interval source, removing duplicated timeout logic and the hard-coded repeater interval.
  • README updates.

Recommended upgrade checklist

  1. From v1.16.2: just flash — bonds and data survive intact.
  2. From v1.16.1 or older: just flash — firmware self-migrates on first boot, re-bond your phone/computer once.
  3. From Official MeshCore: just flash — firmware auto-formats on first boot, start fresh.
  4. ** Anything odd or suspicious? Format first.

Don't miss a new ZephCore release

NewReleases is sending notifications on new releases.