Skip to content

Offband offband-v1.1.2

Choose a tag to compare

@github-actions github-actions released this 03 Jul 00:31

Companion GPS auto-baud + on-demand GPS status, plus the wedge/time fixes
found while validating it on real hardware, and a safer first-flash default — a
fresh Observer no longer auto-publishes to a preset MQTT broker. Still on the
MeshCore 1.16.0 base.

Added

  • GPS auto-baud detection — the companion now detects the GPS modem's baud rate at
    runtime (probing 115200 then 9600, validating by a checksum-good NMEA sentence), so one
    image reads either a standard 9600 module or a 115200 one with no rebuild. It re-probes
    on a GPS enable and keeps trying if a modem is slow to start at boot. (#216, #233)
  • On-demand GPS status to the app (0xC1) — the client can query live GPS state
    (enabled / detected / fix / baud / lat / lon / alt / sats / time) instead of only seeing
    position at connect. (#216)
  • On-device build identity — an optional build tag shows on the app device-info
    field and the OLED splash, so a specific build is identifiable without a serial
    console. (#222)

Changed

  • Fresh flashes no longer auto-publish to OKIMesh CoreScope. A newly-flashed
    Observer previously seeded the CoreScope (Dayton) broker enabled, so a device
    flashed anywhere in the world immediately fed MQTT to OKIMesh CoreScope tagged as a
    Dayton node. On a fresh flash every broker now ships disabled — the operator
    opts in per slot. (#262)
  • Default region is now XYZ (a non-geographic placeholder) instead of HAO
    (Dayton), so an out-of-region device stops mislabeling itself until the operator sets
    its region via mqtt iata. Fresh / NVS-erased devices only; existing devices keep
    their stored config. (#262)

Fixed

  • GPS at high baud could wedge BLE. An unbounded GPS read loop let a fast modem
    (e.g. 115200, multi-constellation) monopolize the main loop and starve BLE — the app
    would slog or stall. GPS ingestion is now bounded per loop. (#231)
  • GPS time showed garbage before the date was acquired. A position fix can arrive
    before the calendar date; the device now reports time=0 ("acquiring") until a real
    date is parsed, instead of a wrapped-garbage timestamp. (#232)

Internal

  • Build/governance tooling + GPS design & diagnostic records — no firmware-behavior
    change. (#214, #217#219)

Which file do I download?

File What it is When to use it
*-merged.bin (ESP32 — Heltec V3/V4, XIAO) Full image — bootloader + partition table + app in one, flashed at 0x0 after a chip erase. Self-contained, works on a blank chip. First install / clean setup. In a web flasher this is the "Full Firmware" option.
*.bin (ESP32) App only — flashed at the app offset (0x10000); the bootloader must already be on the chip. Updating an existing node — OTA / "Update Only." Keeps the device identity + WiFi/MQTT config.
*.uf2 (nRF52 — RAK, T-Echo, XIAO nRF52) Complete self-contained image. First install and updates — double-tap reset, then drag-drop onto the USB drive. (nRF52 has no merged/app split.)

⚠️ ESP32: the app-only *.bin will not boot if flashed at 0x0 — use *-merged.bin for a fresh install. A full erase / "Full Firmware" wipes the device's identity + saved config, so use it only for a first install or recovery, never a routine update.

What's Changed

  • fix(#239): round CLI frequency output to 3 decimals (ftoa3) by @Strycher in #240
  • docs(#244): block-user firmware<->app architectural contract by @Strycher in #245
  • feat(#241): Block/Ignore Users — firmware half (BlockStore + 0xC2 sync + DM-drop) by @Strycher in #247
  • chore: sync pre-commit to canonical (§0.6) + pin DW_PROJECT=Crosswire by @Strycher in #249
  • fix(#251): pio-flash ESP32-S3 USB-Serial/JTAG robustness by @Strycher in #252
  • chore(crosswire): deploy session-identity hook + SessionStart wiring + gitignore by @Strycher in #269
  • chore(#270): session-state.py sources identity from session-identity.py by @Strycher in #271
  • fix(#262): don't auto-enable OKIMesh CoreScope on fresh flash + default region XYZ by @Strycher in #272

Full Changelog: offband-v1.1.2-rc1...offband-v1.1.2