Commit Graph
3404 Commits
Author SHA1 Message Date
Michael Graff d33fb4e9a7 Fix config parser aborting on an empty object
'custom:{}' (a DynamicConfigSerializer with nothing set) hits EXPECT_KEY
with a '}' and returns TOK_ERROR, so loadSerial stops there and silently
drops every property after it. Nothing follows 'custom' in NodePrefs
today, so it goes unnoticed until you add one.

Also include stdlib.h, which Arduino.h was providing on-device but not
in the native test build.
2026-09-05 23:15:13 -05:00
Michael Graff a4ac85a0d6 Address review findings on WiFi companion support
- scope the serial config CLI to RP2040; it was exposing the rescue CLI
  (cat/rm/erase) on every ESP32 WiFi build, which gates it behind a
  physical long-press
- bound and space out RP2040 rejoins: the core's join busy-waits, so cap
  it at 5s and retry every 30s instead of every 10s
- stamp the reconnect timer in setup(), so the first loop() doesn't tear
  down an association that is still finishing DHCP
- treat stored credentials as a pair, and pass NULL (not "") for an open
  network
- teach build_as_lib.py where SerialWifiInterface moved
2026-09-05 23:15:13 -05:00
Michael Graff 58181bb8a2 Fix blocking WiFi connect on RP2040, log link state
arduino-pico's WiFi.begin() blocks for up to 2x its 15s timeout, which
stalled the mesh loop on every reconnect attempt; use beginNoBlock().
Log the IP when the link comes up, and the status code when retrying.
2026-09-05 23:15:13 -05:00
Michael Graff 739a67c9f1 Allow WiFi credentials to be set at runtime
Store ssid/pwd in NodePrefs and set them with 'set wifi.ssid' /
'set wifi.pwd' over USB serial; build-time WIFI_SSID/WIFI_PWD stay as
the fallback. Headless WiFi builds get the config CLI on Serial, which
is otherwise unused there.
2026-09-05 23:15:13 -05:00
Michael Graff 0b2c47a932 Add WiFi companion support for Pico W
SerialWifiInterface has no ESP32-specific code, so move it to
helpers/wifi and reuse it on RP2040. Guard the ESP32-only WiFi
event/auto-reconnect calls and poll link state on RP2040 instead.
2026-09-05 23:15:13 -05:00
Liam Cottle 65aa1138ae Merge pull request #3319 from oltaco/w12_txpower
Fix Meshnology W12 TX power
2026-09-01 23:06:58 +12:00
Liam Cottle c57172687f Merge pull request #3329 from reinforce/tz_offset
companion: get/set timezone offset for clock
2026-09-01 22:56:19 +12:00
Aleksei Mamlin 1d9a62ca4a companion: get/set timezone offset for clock
* Add tz_offset companion prefs and get/set commands for companion cli
* Use tz_offset for clock on display

Signed-off-by: Aleksei Mamlin <mamlinav@gmail.com>
2026-08-31 09:08:22 +03:00
fdlamotte 307fc9ba01 Merge pull request #3279 from fdlamotte/node_discover_ui
Node discover UI
2026-08-30 19:51:02 -04:00
fdlamotte adbdcf00bb Merge branch 'dev' into node_discover_ui 2026-08-29 11:02:58 -04:00
taco e6897e8bb7 fix Meshnology W12 TX power 2026-08-29 15:22:54 +10:00
Scott Powell 65650bb192 New TXT_TYPE_CLI_COMMAND (3) 2026-08-28 13:12:59 +10:00
liamcottle e3d0f9fcaa fix cad cli command on companion 2026-08-27 19:05:18 +12:00
Liam Cottle 1c3248902a Merge pull request #3298 from meshcore-dev/companion-cli
Companion CLI
2026-08-27 18:17:10 +12:00
Scott Powell 9ab13158cb * fix for RPI Picow 2026-08-25 19:04:32 +10:00
Scott Powell 6dad3d5ab4 * companion: fix for setSpreadFactor(). "set cad ..." and "board" now implemented. 2026-08-24 20:44:17 +10:00
Scott Powell 8ccc9928a8 * DynamicConfigSerializer fixes, and unit tests 2026-08-24 19:42:55 +10:00
Liam Cottle 12998cba89 Merge pull request #3275 from liamcottle/gps/rak3401
Fix PA on RAK3401 when GPS missing
2026-08-24 19:52:10 +12:00
Scott Powell 845242f4aa * prefs, custom dirty state 2026-08-24 17:22:15 +10:00
Scott Powell 5a162ff4c6 * new DynamicConfigSerializer
* board/variant KeyValueStore now can write to 'custom' object in Json prefs
2026-08-24 17:12:56 +10:00
Huw Duddy b2499907c2 Merge pull request #3290 from liamcottle/feature/ui-no-hibernate
add UI_NO_HIBERNATE build flag to disable hibernate screen
2026-08-24 13:40:47 +10:00
liamcottle 7dc2d54818 add UI_NO_HIBERNATE build flag to disable hibernate screen on wio tracker l1 2026-08-24 13:45:19 +12:00
Scott Powell a1cf5bd806 * refactored 'FEM' commands for HeltecTrackerV2 & HeltecV4 2026-08-24 02:16:18 +10:00
Scott Powell 47b0b7b3b8 * T096, and Station G3: refactoring the 'FEM' prefs to variant-specific code
* CommonCLI: 'FEM' commands removed
* introduced static no-op attachDynamicPrefs() for all boards
2026-08-24 01:50:22 +10:00
Florent 088ae3caeb ui: opt-out for discover screen 2026-08-23 10:42:00 -04:00
Scott Powell e485d01dcb support for CMD_SEND_TXT_MSG and new TXT_TYPE_CLI_COMMAND 2026-08-23 22:49:45 +10:00
Scott Powell 2c0ace2519 * new TXT_TYPE_CLI_COMMAND (3) 2026-08-23 22:04:05 +10:00
Scott Powell 52306bfe0f legacy queueMessage() case, eg. repeater replies 2026-08-23 20:07:28 +10:00
Scott Powell f7c568e3d9 onCommandDataRecv() use '>' prefix for CLI replies. 2026-08-23 20:03:49 +10:00
Scott Powell 21179760d3 "Unknown command" replies 2026-08-23 19:35:43 +10:00
Scott Powell b4f7e941fa * CommonRadioPrefs refactors done 2026-08-23 17:30:30 +10:00
Scott Powell 41588d8052 * adding new CommonRadioPrefs
* refactor: moving various radio CLI handling to CommonRadioPrefs
2026-08-23 14:45:15 +10:00
liamcottle ab4c33826d don't toggle io pins on rak3401 when probing gps 2026-08-23 14:14:45 +12:00
ripplebiz 9d7cee6639 Merge pull request #3268 from liamcottle/rak/gps
Add support for RAK12500 and RAK12501 GPS on RAK3401
2026-08-22 14:35:21 +10:00
liamcottle 0b652b5629 add support for rak12500 and rak12501 gps on rak3401 2026-08-22 16:16:32 +12:00
Florent 52f0362c09 ui: repeater discover screen 2026-08-21 18:24:46 -04:00
entr0p1 e749010bbc Duplicate MAX_CLIENTS definition
MAX_CLIENTS is defined in both src/helpers/ClientACL.h and examples/simple_repeater/MyMesh.h. Appears it was centralised in the former header file some time ago. Both are included in some places and, depending on which order they're in, either value can win.

This change drops the duplicate entry from the repeater firmware and bumps the central limit up to 32 (per the original repeater firmware value).

Changes:
- Remove MAX_CLIENTS from repeater MyMesh.h
- Increase MAX_CLIENTS limit in ClientACL.h to 32
2026-08-21 15:11:57 -04:00
Scott Powell afb969ccca * initial wiring/routing of CLI commands to companion (either via app/serial interface, or remotely via txt message) 2026-08-21 20:55:57 +10:00
ripplebiz e0031870f6 Merge pull request #3233 from entr0p1/fix/centralise-max-clients
Fix duplicate MAX_CLIENTS definition
2026-08-20 14:09:30 +10:00
ripplebiz c0f30d7304 Merge pull request #3234 from agessaman/fix/sensors-bosch-alt-i2c-address
Fix I2C address claiming and probe both BMP/BME addresses
2026-08-20 14:01:49 +10:00
ripplebiz a570911fe9 Merge pull request #3236 from DominikTyrala/fix/c3_partition_setup
Fix Seeed C3 radio BLE exceeding flash size
2026-08-20 13:38:26 +10:00
ripplebiz 40570956f0 Merge pull request #3249 from dl9sau/patch-1
Skip empty channel slots in searchChannelsByHash
2026-08-20 13:11:02 +10:00
ripplebiz 8d624b7af4 Merge pull request #3250 from hansimgamr/feat/t114-charging-indicator
Add charging indicator to companion_radio battery icon
2026-08-20 12:59:26 +10:00
hansimgamrandClaude Opus 4.8 41c60da575 Show plug at >=95% instead of exactly 100%
Boards without a charge-complete signal only infer "full" from voltage, and
a real pack rarely reads the full BATT_MAX_MILLIVOLTS (4.2V), so the plug icon
was effectively never shown. Treat "full" as a high band (>= 95%) so the plug
appears when the battery is charged rather than requiring an exact 100%.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-19 12:44:41 -04:00
hansimgamrandClaude Opus 4.8 3a440ac41a Add charging indicator to companion_radio battery icon
Show a small lightning-bolt icon to the left of the battery indicator on
the ui-new home screen while the device is externally powered, and a plug
icon once the battery reads full. The bolt/plug sits beside the battery so
the fill bar stays clean and uninterrupted. When a buzzer is present, the
mute icon shifts one slot further left so the two never overlap.

Charging state is derived from board.isExternalPowered(), so this works on
any board that reports external power (e.g. the nRF52 VBUS-detect path).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-19 12:44:41 -04:00
Thomas Osterried b762420433 Skip empty channel slots in searchChannelsByHash
An unconfigured slot has an all-zero secret, so it matches null-key group traffic (a sender with an unset PSK). The zero-key MAC validates against the empty slot and the foreign message is delivered as if it belonged to that channel — every node with a free slot is a null-key sink. Skip empty slots.
2026-08-19 09:35:25 +02:00
liamcottle 67d6d42a4c fix for 3-byte paths passed to CMD_SEND_RAW_DATA 2026-08-19 18:59:24 +12:00
Huw Duddy dab6b63567 Merge pull request #3235 from meshcore-dev/send-raw-direct-fix
Fix for CMD_SEND_RAW_DATA and multi-byte paths
2026-08-19 11:32:34 +10:00
ripplebiz dd17105992 Merge pull request #3246 from liamcottle/update/toolchain
Update GCC toolchain for nRF52 boards to fix builds on Raspberry Pi
2026-08-19 11:30:08 +10:00
liamcottle 612b217b90 updated gcc toolchain for nrf52 boards 2026-08-19 12:07:29 +12:00