Commit Graph
736 Commits
Author SHA1 Message Date
agessaman 9b739a9b43 fix(network): harden Ethernet-preferred lifecycle 2026-09-04 08:42:46 -07:00
mikecarper 69d9d9e62a Make uf2reset available across nRF52 CLI roles 2026-09-04 02:01:40 -07:00
mikecarper a8cf4fd12f Fix USB radio stalls and add durable replay timestamp recovery 2026-09-03 23:58:32 -07:00
mikecarper f2c15225cc Qualify GAT562 bootloader updates 2026-09-03 15:48:35 -07:00
mikecarper dea2ce495f Automatically recover internal Companion ExtraFS on boot 2026-09-03 15:15:23 -07:00
mikecarper 942df304ca Give Full builds exclusive USB mOTA ownership 2026-09-03 02:33:23 -07:00
mikecarper e2da2701da Support 2 KiB DEFLATE OTA transport 2026-09-03 01:07:06 -07:00
mikecarper 3f6eddd5c2 Add compressed 171-byte OTA transport 2026-09-02 19:24:01 -07:00
mikecarper ef92505429 Add observed login path commands 2026-09-02 19:23:56 -07:00
mikecarper a8485057bd Fix auto nRF52 Companion OTA builds 2026-09-02 12:02:41 -07:00
Robert Ekl 90a4f51f91 docs: update stale repo URLs and build recipe
The project moved to meshcore-dev/meshcore, but two links still pointed at
ripplebiz/MeshCore: the GitHub Issues link in README and the git clone in the
FAQ build instructions.

Also fixes the FAQ build recipe:
- `pio run -e RAK_4631_Repeater` does not exist; the env is spelled
  RAK_4631_repeater (variants/rak4631/platformio.ini:40).
- LORA_FREQ was given as 867.5; the default in [arduino_base] is 869.618
  (platformio.ini:29). Reworded to point at the flag rather than a value that
  drifts with the default preset.
- Renamed the venv so it no longer collides with the cloned directory name.

And one more env-name casing slip in the Raspberry Pi flashing instructions:
`Heltec_V3_companion_radio_ble` should be `Heltec_v3_...`. Release artifacts are
named directly from the env name (build.sh:147), and the two neighbouring
examples in the same block already use the lowercase spelling.
2026-09-02 11:38:06 -05:00
Robert Ekl fe5d4cc50d docs: remove non-existent set dutycycle from Terminal Chat CLI
f6338430 added get/set dutycycle to CommonCLI and updated both CLI docs, but
Terminal Chat does not use CommonCLI -- simple_secure_chat/main.cpp:479-507 has
its own `set` handler supporting only af, name, lat, lon, tx and freq. Typing
`set dutycycle` there returns "ERROR: unknown config".

Restores `set af` as the documented command, points readers at cli_commands.md
for the roles that do have dutycycle, and documents `help`
(simple_secure_chat/main.cpp:510), which the client implements but the doc
never listed.
2026-09-02 11:38:06 -05:00
Robert Ekl 208333d511 docs: correct pwrmgt CLI behaviour on unsupported boards
The doc claimed every pwrmgt command except `get pwrmgt.support` returns
"ERROR: Power management not supported" when NRF52_POWER_MANAGEMENT is not
defined. `get pwrmgt.bootreason` is not inside the #ifdef (CommonCLI.cpp:787)
and answers on all boards; only pwrmgt.source and pwrmgt.bootmv are gated.
2026-09-02 11:38:06 -05:00
Robert Ekl f5b6ff4c14 docs: fix channel index range, secret semantics and payload limit
Three factual errors in companion_protocol.md:

- The channel-datagram payload cap was given as 163 (MAX_FRAME_SIZE - 9 when
  MAX_FRAME_SIZE was still 172). It went 172 -> 176 in 62f1b11d, but simply
  updating the arithmetic to 167 would be worse than the stale value: 167 is
  only the host-frame bound (MyMesh.cpp:1265). The radio-side bound is
  MAX_GROUP_DATA_LENGTH = 184 - 16 - 3 = 165 (MeshCore.h:21, enforced at
  BaseChatMesh.cpp:544). A 166- or 167-byte payload passes the frame check,
  fails the radio check, and comes back as ERR_CODE_TABLE_FULL -- which this
  same doc describes as "retry later", so a conforming client would retry a
  permanently failing send forever. Documents 165 as the limit to enforce and
  calls out the 166-167 band explicitly.

- Channel index was documented as 0-7 throughout. The bound is
  MAX_GROUP_CHANNELS (BaseChatMesh.cpp:927,936), which is 40 on most current
  variants, 8 on some and 1 on others. Clients should read max_channels from
  byte 3 of PACKET_DEVICE_INFO instead. Index 0 is pre-populated with the
  built-in Public channel but is not reserved.

- The secret field was documented as "all zeros" for public channels. The
  firmware always hashes a real 16-byte key; the public channel ships with
  izOH6cXN6mrJ5e26oRXNcg== (companion_radio/MyMesh.cpp:111,1040). An all-zero
  secret is not a private channel and not an inert one: SHA256 over 16 zero
  bytes is a fixed global constant, giving a well-known channel with an
  all-zero AES key. searchChannelsByHash skips unnamed slots for exactly this
  reason (BaseChatMesh.cpp:392-401), but a named slot with a zero secret is
  not skipped and will absorb null-key group traffic from any node. Now
  documented as something not to do.
2026-09-02 11:38:06 -05:00
Robert Ekl f66ff1d13f docs: correct stale CLI default values
Five "Default:" values in cli_commands.md no longer matched the firmware:

- radio / freq: the default preset moved to EU/UK (Narrow) in b777a7c6,
  changing LORA_FREQ/BW/SF from 869.525/250/11 to 869.618/62.5/8
  (platformio.ini:29-31). No variant overrides these, and LORA_CR is 5
  on every path, so the full preset is 869.618,62.5,8,5.
- flood.advert.interval: raised to 47 hours in 40180b8f for both repeater
  and room server; sensor leaves it disabled.
- advert.interval: prefs store minutes/2 and the getter doubles on read, so a
  factory-fresh node reports 2, not 0. But savePrefs() zeroes any interval
  below the 60 minute minimum (CommonCLI.cpp:162-165), and it is called from
  every `set` handler -- so the value becomes 0 as soon as the node is
  configured. Documented both states, since neither alone is the whole story.
- direct.txdelay: repeater defaults to 0.3, room server and sensor to 0.2.

Sources: platformio.ini:29-31, simple_repeater/MyMesh.cpp:893,903-904,
simple_room_server/MyMesh.cpp:650,661-662, simple_sensor/SensorMesh.cpp:716,
726-727, CommonCLI.cpp:162-165,680-681.
2026-09-02 11:31:24 -05:00
mikecarper cf70478c51 Improve companion setup and USB session recovery 2026-09-02 03:44:28 -07:00
mikecarper ecaa5ac2a0 Harden nRF52 OTA, USB sessions, and T096 controls
Bind Companion replies to request transports, make dual-CDC USB sessions nonblocking and reconnect-safe, and harden nRF52 watchdog/OTA storage paths. Fix T096 button debounce, display wake, sleep races, and the compact message layout; add exact WisBlock OTA profiles plus expanded native/static/HIL documentation.
2026-09-01 20:51:43 -07:00
mikecarper 1629725d7d Add safe ESP32 transports and Indicator UI
Reserve board-specific GPIOs, make ESP-NOW channel/format handling configurable, and coordinate WiFi, BLE, NTP, MQTT, and host actions safely.

Add the Indicator message page, exclusive transport selector, dynamic 480/320 rendering, larger transport typography, pairing cleanup, and corresponding tests and documentation.
2026-08-31 14:29:42 -07:00
mikecarper 6af93409ed Remove redundant MQTT picker mode 2026-08-31 13:24:52 -07:00
mikecarper e4cf7cd461 Show narrowed firmware picker candidates 2026-08-31 13:11:03 -07:00
mikecarper 9fd580c89e Harden marathon-tested OTA and hardware paths
Add durable TempRadio, ACL, clock, bridge, GPS/I2C, USB logging, and Indicator recovery safeguards together with expanded automation, build/profile contracts, release metadata, and the hardware validation ledger.
2026-08-30 19:26:15 -07:00
mikecarper 4c93df9d57 Fix Full Companion terminal diagnostics 2026-08-29 16:57:44 -07:00
mikecarper e666bbc6a8 Clarify Companion WiFi CLI availability 2026-08-29 16:21:49 -07:00
mikecarper bf092b24cc Fix release matrix gaps and add background builds 2026-08-29 14:55:07 -07:00
mikecarper f46262dadc release: pin RAK3401 b40 mOTA chain 2026-08-29 09:10:24 -07:00
mikecarper b40d2e6cb2 fix: harden LoRa OTA chain and storage 2026-08-29 06:58:48 -07:00
mikecarper 400aa710a2 fix: stabilize primary ESP-NOW WiFi coexistence 2026-08-28 21:01:17 -07:00
Adam Gessaman 99a7e99a2e Merge upstream/dev into observer-firmware-dev 2026-08-28 19:45:59 -07:00
mikecarper 493e188894 feat: integrate R8 observer and companion updates 2026-08-28 18:39:26 -07:00
mikecarper 29f2fb468d refactor: use companion CLI for hardware settings 2026-08-28 17:37:39 -07:00
mikecarper 2143d3e04b Merge upstream dev companion CLI updates 2026-08-28 17:31:28 -07:00
mikecarper a55660b795 fix: reserve controls and expose ESP-NOW channel 2026-08-28 16:55:40 -07:00
mikecarper 6d6c89e411 fix: harden ESP-NOW and full companion networking
Add selectable shared ESP-NOW channels, raw/wrapped bridge compatibility, and bounded fragmentation for maximum-size packets.\n\nGive ESP32 Full profiles WiFi coexistence, stabilize WebConfig and USB terminal lifecycles, and keep disabled bridges stopped during observer updates.\n\nUpdate generated UI, firmware selection, documentation, and regression coverage.
2026-08-28 16:36:34 -07:00
agessaman 7ea615dabd docs: document display.timeout and display.flip
Adds both settings to docs/cli_commands.md in the existing format, and records
the R8 dashboard, display controls and the two hardware fixes in the changelog.

The display.flip entry calls out that it is persisted config which survives a
firmware update, since a node still carrying flip=1 from testing looks exactly
like a firmware whose orientation was never fixed.
2026-08-28 16:06:16 -07:00
mikecarper d6519baa0f feat: consolidate full companion runtime profiles 2026-08-28 08:47:26 -07:00
Scott Powell 65650bb192 New TXT_TYPE_CLI_COMMAND (3) 2026-08-28 13:12:59 +10:00
mikecarper 1d836c0473 feat: unify companion builds and USB runtime modes 2026-08-27 15:06:26 -07:00
mikecarper 69ded9d6c7 feat: add Bluetooth-controlled LoRa OTA
Add the framed BLE mOTA transport and companion control path, complete the full-profile build and runtime fixes, and document and test the OTA workflow.
2026-08-27 01:22:18 -07:00
mikecarper bd3a94bddb fix: harden firmware builds and runtime reliability 2026-08-26 15:42:12 -07:00
mikecarper e05f83a20e Merge upstream main documentation through 0679dbef 2026-08-26 13:49:37 -07:00
mikecarper 58cfdf1235 fix: preserve complete companion build profiles 2026-08-25 23:47:40 -07:00
mikecarper b7e0445451 fix: default advert location to stored preferences 2026-08-25 23:47:40 -07:00
mikecarper f1515ef1c6 feat: retain multi-channel voltage telemetry 2026-08-25 22:51:22 -07:00
mikecarper c95a6249be feat: order flood rules by channel specificity 2026-08-25 21:58:08 -07:00
mikecarper c1028ee6c4 docs: explain Public hash exemption ordering 2026-08-25 21:48:16 -07:00
mikecarper 8705e7f551 feat: add selective flood retry rules 2026-08-25 21:38:23 -07:00
mikecarper 44eb8e4ab9 feat: add customizable companion Bluetooth names 2026-08-25 20:51:18 -07:00
mikecarper c512f4036e feat: retain INA monitors in reduced RAK repeaters 2026-08-25 20:24:17 -07:00
mikecarper ba2170d21b feat: add capability-aware firmware build profiles 2026-08-25 20:07:09 -07:00
mikecarper 5938cbe614 feat: complete Cascade Indicator companion support
Add native-resolution Indicator UI, touch navigation, SD-backed pixel and emoji fonts, LoRa radio support, dual-slot WiFi Companion provisioning, and mesh clock fallback. Harden radio recovery and build defaults, normalize ESP32 setup-AP protocols, and document/test the operator workflows.
2026-08-25 18:37:17 -07:00