Commit Graph
4217 Commits
Author SHA1 Message Date
agessaman 79a0e8404d Merge Waveshare LR1121 observer variants into observer-firmware-dev 2026-10-13 20:38:26 -07:00
agessaman 14b487da81 Merge upstream/dev into observer-firmware-dev
Preserve observer discovery when forwarding is disabled while honoring hidden-node settings. Keep GPS power ownership paired and incorporate upstream GPS diagnostics.
2026-10-13 19:10:10 -07:00
Liam Cottle 8e48e01a4b Merge pull request #3589 from meshcore-dev/remove-room-repeater
Room: "set repeat" CLI now deprecated
2026-10-14 14:27:54 +13:00
Scott Powell 481f72cae7 * only 'repeat on' now intercepted 2026-10-14 12:21:38 +11:00
ripplebiz d86cad8a82 Merge pull request #3575 from agessaman/feat/lr1121-dual-band-power
LR1121: keep TX power valid across sub-GHz and 2.4 GHz
2026-10-14 12:04:47 +11:00
ripplebiz 97113a7050 Merge pull request #3574 from agessaman/feat/waveshare-esp32s3-lr1121
feat(variants): add Waveshare ESP32-S3-LR1121
2026-10-14 12:00:11 +11:00
Scott Powell 8579c66747 * Room: "set repeat" CLI now deprecated 2026-10-14 11:48:58 +11:00
ripplebiz b47fd54905 Merge pull request #3573 from meshcore-dev/ack-timing-fix
ACK forwarding timing fix
2026-10-13 15:48:29 +11:00
ripplebiz 52d7bf1551 Merge pull request #3568 from meshcore-dev/zero-scope
Treat transport code 0 the same as un-scoped.
2026-10-13 15:48:02 +11:00
agessaman f6a6f3dbe9 fix(radiolib): keep LR1121 tx power valid across sub-GHz and 2.4 GHz
- Clip requested power to the active PA's range instead of failing. A
  stored 22 dBm was rejected at 2.4 GHz (HF PA max 13 dBm), and since
  setTxPower ignores errors the sub-GHz PA stayed configured.
- Re-apply the requested power after every successful retune: PA choice
  depends on the band, and set radio / tempradio only call setParams.
2026-10-11 21:07:19 -07:00
agessaman eac6e66b1b fix(radiolib): keep LR1121 tx power valid across sub-GHz and 2.4 GHz
- Clip requested power to the active PA's range instead of failing. A
  stored 22 dBm was rejected at 2.4 GHz (HF PA max 13 dBm), and since
  setTxPower ignores errors the sub-GHz PA stayed configured.
- Re-apply the requested power after every successful retune: PA choice
  depends on the band, and set radio / tempradio only call setParams.
2026-10-11 21:07:05 -07:00
agessaman 018c5e7d04 feat(variants): add Waveshare S3 LR1121 MQTT observer envs 2026-10-11 20:54:12 -07:00
agessaman 51fc3ac58f feat(variants): add Waveshare ESP32-S3-LR1121
ESP32-S3FH4R2 (4MB flash, 2MB PSRAM, native USB-CDC) with an LR1121.
Pins, the DIO5/DIO6 RF switch table and the 1.8 V TCXO follow the HF
schematic and Waveshare's examples. Envs: repeater, room server,
companion USB/BLE and KISS modem, all on min_spiffs so roles share one
partition layout.

Only RFO_HP_LF is wired (R4 on RFO_LP_LF is not fitted), so the new
opt-in LR1121_FORCE_HP_PA flag keeps RadioLib on the HP PA at <= 14 dBm,
where it would otherwise select the unconnected LP PA.
2026-10-11 20:54:12 -07:00
agessaman 3d1a5d4c64 feat(variants): add Waveshare ESP32-S3-LR1121
ESP32-S3FH4R2 (4MB flash, 2MB PSRAM, native USB-CDC) with an LR1121.
Pins, the DIO5/DIO6 RF switch table and the 1.8 V TCXO follow the HF
schematic and Waveshare's examples. Envs: repeater, room server,
companion USB/BLE and KISS modem, all on min_spiffs so roles share one
partition layout.

Only RFO_HP_LF is wired (R4 on RFO_LP_LF is not fitted), so the new
opt-in LR1121_FORCE_HP_PA flag keeps RadioLib on the HP PA at <= 14 dBm,
where it would otherwise select the unconnected LP PA.
2026-10-11 20:51:18 -07:00
Scott Powell 6df5aaed43 * ACK forwarding (in direct mode) had zero delay 2026-10-12 10:44:42 +11:00
Scott Powell 01f9293be0 * treat transport code 0 the same as un-scoped. 2026-10-08 19:56:45 +11:00
Adam Gessaman 7fd8c31f1d Merge pull request #66 from agessaman/feat/mqtt-advert-verify
feat(mqtt): add opt-in advert signature check before publishing
2026-10-07 20:56:24 -07:00
agessaman e53755a5a9 feat(mqtt): add opt-in advert signature check before publishing
Received packets are uploaded before Mesh::onRecvPacket validates them, so
an advert corrupted over the air that still passes the LoRa CRC is published
with a mangled name or location. `set mqtt.advert.verify on` verifies each
received advert's Ed25519 signature (same message layout as Mesh.cpp,
including the 32-byte app-data clamp) and skips publishing failures.

Defaults off so collectors keep seeing RF corruption on the mesh. Dropped
adverts are counted as badsig= in `get mqtt.stats`. Exposed in the web
config Publishing card and persisted as mqtt.advert_verify in prefs JSON.
2026-10-07 20:07:36 -07:00
Liam Cottle 2dbd463eda Merge pull request #3561 from quyenlt298/nelos-groupdata-allocation
Add Nelos allocation for GroupData
2026-10-07 20:41:54 +13:00
quyenlt298 47c3005b08 Add Nelos allocation for GroupData 2026-10-07 13:09:36 +07:00
Liam Cottle f3bcb3634b Merge pull request #3559 from syssi/streamline-ota-ble-name
Use consistent `_OTA` suffix for nRF52 OTA BLE names
2026-10-07 12:16:50 +13:00
Sebastian Muszynski 4c2af58d3e Use consistent _OTA suffix for nRF52 OTA BLE names 2026-10-06 18:50:15 +02:00
agessaman a24dade1c0 fix(network): snapshot and restore every lwIP DNS slot
DHCP can fill all DNS_MAX_SERVERS (3) slots, but only two were saved and restored, so a third server from one medium survived a switch to the other. link.dns now drops trailing empty slots to keep remote replies under 160 bytes.
2026-10-04 20:45:07 -07:00
agessaman 274997e9ae feat(cli): add get link.dns for resolver, gateway and lease DNS
Shows lwIP's live global DNS server list next to the DNS each medium's DHCP lease installed, so a node that is linked but failing to resolve can be diagnosed remotely.
2026-10-04 19:55:54 -07:00
Liam Cottle 3e3150c83f Merge pull request #3538 from meshcore-dev/hidden-repeater
Hidden repeater
2026-10-04 20:10:43 +13:00
Scott Powell f19733e478 * don't respond to DISCOVER requests if node has adverts turned off. (isHiddenNode()) 2026-10-04 15:02:00 +11:00
Adam Gessaman a928498c46 Merge pull request #63 from agessaman/merge/ota-branch-into-observer-firmware-dev
feat(ota): ota branch channel switch (dev)
2026-10-03 16:41:52 -07:00
agessaman 45d8f15098 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev 2026-10-03 15:52:39 -07:00
agessaman 8ec31dda71 fix(ota): skip the bare compat search literal when scanning an image
Every image also holds "ota-compat:" with no value (the search string);
finding it first made every channel switch look untagged.
2026-10-03 15:52:21 -07:00
agessaman a0856bed72 feat(ota): dev stores /mqtt.json, so its state generation is 2
Builds that only read /mqtt_prefs (gen 1) are refused as channel-switch
targets until they can read /mqtt.json.
2026-10-03 15:47:01 -07:00
agessaman baf01a5c16 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	examples/simple_repeater/MyMesh.cpp
2026-10-03 15:47:01 -07:00
agessaman ed8af1b7ca fix(ota): refuse a channel switch to a build that cannot carry this node
A switch can land on an older build: e.g. prod cannot read dev's /mqtt.json,
and prod's M7 image has no Ethernet. Each image carries an ota-compat tag
(state generation + transports). A switch is flashed without rebooting, the
new image's tag is read (bounded by its length), and boot is pointed back at
the running image unless the target keeps this node's state and transports.
CI now requires the tag in every published binary.
2026-10-03 15:46:46 -07:00
agessaman f652e7d185 fix(ota): flash the channel ota update checked, not a later ota branch
The deferred flash re-read the channel preference ~2.5 s after ota update
acknowledged its target; capture it when the update is scheduled.
2026-10-03 15:37:49 -07:00
agessaman a1943a8eac fix(ota): always offer another channel's image, even from the same commit
Prod and beta are often built from one commit (e.g. after a dev->prod merge),
so a hash match does not mean the images are the same: the native base differs.
After the flash the target channel is native, so this cannot loop.
2026-10-03 15:37:49 -07:00
agessaman ee88192acb Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	.github/workflows/build-observer-firmwares.yml
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	src/helpers/ESP32Board.cpp
#	src/helpers/ESP32Board.h
#	test/test_config_serializer/test_config_serializer.cpp
2026-10-03 15:24:33 -07:00
agessaman 65d80bc908 ci(ota): verify each published binary's native channel by tag
Every observer build now carries both channel URLs, so checking for a URL's
presence or absence can no longer tell prod from beta (and the old checks would
reject every build). Read the ota-base-* tags from every .bin in out/ instead
of a single ELF, with URLs shared by build.sh and both workflows.
2026-10-03 15:24:11 -07:00
agessaman 9c65e198f1 feat(ota): prod/beta channel names for ota branch, with stable/dev aliases
Report the selected channel and the build's own channel, tag each baked-in
base for CI, and list ota branch in the CLI docs and portal autocomplete.
2026-10-03 15:19:06 -07:00
agessaman 4afb3f7e3f build(ota): point the stable/dev channel bases at observer.gessaman.com 2026-10-03 15:17:46 -07:00
agessaman 2633b4267c fix(ota): compare by commit hash when targeting another channel
Build counters are per channel, so a cross-channel build number is not
comparable: a switch to a channel with a lower counter reported up to date
and never happened. Off the native channel, update unless the hash matches.
2026-10-03 15:17:46 -07:00
Elektr0Vodka 763ba835c1 build(ota): bake stable + dev manifest bases into observer builds
(cherry picked from commit 29011959170db757ec5364de88f6beeaae82b995)
2026-10-03 15:17:36 -07:00
Elektr0Vodka ea541e182a feat(ota): add 'ota branch [stable|dev|default]' command
(cherry picked from commit 240804999edb284fd276489e6898ccad8a19a8e7)
2026-10-03 15:17:36 -07:00
Elektr0Vodka 942a19eb63 feat(ota): pass runtime manifest base through otaFromManifest
(cherry picked from commit 0bee84c0546780b2e7147148c32087e92d894ac0)
2026-10-03 15:17:36 -07:00
Elektr0Vodka 3910489414 feat(ota): persist ota_channel selector in NodePrefs
(cherry picked from commit db1db5b57ecce408c7441cb6aa70f29608b09603)
2026-10-03 15:17:36 -07:00
Elektr0Vodka f04d163bea feat(ota): channel-base resolver + arg parser with native tests
(cherry picked from commit 52a4ccc39093891b64e3752316fe7c191fd9b9ca)
2026-10-03 15:17:36 -07:00
Huw Duddy fad0ffb7f1 Merge pull request #3533 from oltaco/fix/bad-comment-format
Fix bad comment format
2026-10-02 07:46:36 +10:00
taco 0e1ba7102d tidy: remove old commented Bluefruit.autoConnLed(false) 2026-10-02 07:40:42 +10:00
taco 35e10a9c75 fix bad comment format 2026-10-02 07:35:34 +10:00
Huw Duddy ea0213754f Merge pull request #2838 from benskigomez/fix/gps-cold-start-detection
GPS: poll up to 5s for cold-start detection instead of a single 1s check
2026-10-01 23:52:16 +10:00
Huw Duddy f35216799a Merge pull request #3128 from bplein/feature/ble_led_disable
Allow for build-time macro to disable the bluetooth LED
2026-10-01 23:51:04 +10:00
Huw Duddy 1af2760c88 Merge pull request #3531 from meshcore-dev/revert-3411-patch-3
Revert "Fix Heltec Mesh Node T1 GNSS pins"
2026-10-01 22:19:32 +10:00