From dcf5785cc431284cc30fa5ddbf9ee3cb6d48f963 Mon Sep 17 00:00:00 2001 From: Robert Ekl Date: Fri, 20 Mar 2026 12:30:51 -0500 Subject: [PATCH 01/12] docs: add radio.rxgain command reference --- docs/cli_commands.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/cli_commands.md b/docs/cli_commands.md index 8ae95443..8d22e4c0 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -210,6 +210,20 @@ This document provides an overview of CLI commands that can be sent to MeshCore --- +#### View or change the boosted receive gain mode +**Usage:** +- `get radio.rxgain` +- `set radio.rxgain ` + +**Parameters:** +- `state`: `on`|`off` + +**Default:** `off` + +**Note:** Only available on SX1262 and SX1268 based boards. + +--- + #### Change the radio parameters for a set duration **Usage:** - `tempradio ,,,,` From 3a9e1086affeb620382bdd168a71e7199dd71899 Mon Sep 17 00:00:00 2001 From: Petr Kracik Date: Tue, 14 Apr 2026 15:28:11 +0200 Subject: [PATCH 02/12] SDK3.x: Fix OTA includes, bump Async version --- arch/esp32/AsyncElegantOTA/src/AsyncElegantOTA.h | 2 -- platformio.ini | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/arch/esp32/AsyncElegantOTA/src/AsyncElegantOTA.h b/arch/esp32/AsyncElegantOTA/src/AsyncElegantOTA.h index afae3f91..219d1102 100644 --- a/arch/esp32/AsyncElegantOTA/src/AsyncElegantOTA.h +++ b/arch/esp32/AsyncElegantOTA/src/AsyncElegantOTA.h @@ -15,8 +15,6 @@ #include "WiFi.h" #include "AsyncTCP.h" #include "Update.h" - #include "esp_int_wdt.h" - #include "esp_task_wdt.h" #endif #include "Hash.h" diff --git a/platformio.ini b/platformio.ini index 5f722e89..864e5e1f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -66,7 +66,7 @@ build_src_filter = ${arduino_base.build_src_filter} [esp32_ota] lib_deps = - me-no-dev/ESPAsyncWebServer @ ^3.6.0 + ESP32Async/ESPAsyncWebServer @ 3.10.3 file://arch/esp32/AsyncElegantOTA ; esp32c6 uses arduino framework 3.x From e6c6282d40fbd855487dd0640b96f6a77f282892 Mon Sep 17 00:00:00 2001 From: Petr Kracik Date: Mon, 6 Apr 2026 10:11:39 +0200 Subject: [PATCH 03/12] Variants: Enable ElegantOTA on ESP32-C6 devices --- variants/lilygo_tlora_c6/platformio.ini | 4 ++-- variants/xiao_c6/platformio.ini | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/variants/lilygo_tlora_c6/platformio.ini b/variants/lilygo_tlora_c6/platformio.ini index 89e63352..b06a0b7c 100644 --- a/variants/lilygo_tlora_c6/platformio.ini +++ b/variants/lilygo_tlora_c6/platformio.ini @@ -46,7 +46,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${tlora_c6.lib_deps} -; ${esp32_ota.lib_deps} + ${esp32_ota.lib_deps} [env:LilyGo_Tlora_C6_room_server_] extends = tlora_c6 @@ -63,7 +63,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${tlora_c6.lib_deps} -; ${esp32_ota.lib_deps} + ${esp32_ota.lib_deps} [env:LilyGo_Tlora_C6_companion_radio_ble_] extends = tlora_c6 diff --git a/variants/xiao_c6/platformio.ini b/variants/xiao_c6/platformio.ini index 5d9928c5..717be7b9 100644 --- a/variants/xiao_c6/platformio.ini +++ b/variants/xiao_c6/platformio.ini @@ -46,7 +46,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${Xiao_C6.lib_deps} -; ${esp32_ota.lib_deps} + ${esp32_ota.lib_deps} [env:Xiao_C6_companion_radio_ble_] extends = Xiao_C6 @@ -163,7 +163,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${WHY2025_badge.lib_deps} -; ${esp32_ota.lib_deps} + ${esp32_ota.lib_deps} [env:WHY2025_badge_companion_radio_ble_] extends = WHY2025_badge From 230c9af87b98874eff770bf314d09806fe683984 Mon Sep 17 00:00:00 2001 From: jirogit Date: Wed, 15 Apr 2026 19:43:51 -0700 Subject: [PATCH 04/12] feat: add USB Companion Radio env for Heltec Wireless Paper --- variants/heltec_wireless_paper/platformio.ini | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/variants/heltec_wireless_paper/platformio.ini b/variants/heltec_wireless_paper/platformio.ini index d6f43d75..c6fe657d 100644 --- a/variants/heltec_wireless_paper/platformio.ini +++ b/variants/heltec_wireless_paper/platformio.ini @@ -64,6 +64,25 @@ lib_deps = densaugeo/base64 @ ~1.4.0 bakercp/CRC32 @ ^2.0.0 +[env:Heltec_Wireless_Paper_companion_radio_usb] +extends = Heltec_Wireless_Paper_base +build_flags = + ${Heltec_Wireless_Paper_base.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D DISPLAY_CLASS=E213Display + -D OFFLINE_QUEUE_SIZE=256 +build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${Heltec_Wireless_Paper_base.lib_deps} + densaugeo/base64 @ ~1.4.0 + bakercp/CRC32 @ ^2.0.0 + [env:Heltec_Wireless_Paper_repeater] extends = Heltec_Wireless_Paper_base build_flags = From b898e7a04eb43f6ace9b64dc508aa75d12c68246 Mon Sep 17 00:00:00 2001 From: txkbaldlaw Date: Thu, 16 Apr 2026 16:04:30 -0500 Subject: [PATCH 05/12] Add DFU to BLE Stack --- src/helpers/nrf52/SerialBLEInterface.cpp | 5 +++++ src/helpers/nrf52/SerialBLEInterface.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/helpers/nrf52/SerialBLEInterface.cpp b/src/helpers/nrf52/SerialBLEInterface.cpp index 5a3017af..c7c211a3 100644 --- a/src/helpers/nrf52/SerialBLEInterface.cpp +++ b/src/helpers/nrf52/SerialBLEInterface.cpp @@ -177,6 +177,11 @@ void SerialBLEInterface::begin(const char* prefix, char* name, uint32_t pin_code Bluefruit.setEventCallback(onBLEEvent); + // Register DFU on the main BLE stack so paired clients can discover it + // without switching the device into a separate OTA-only BLE mode first. + bledfu.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); + bledfu.begin(); + bleuart.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); bleuart.begin(); bleuart.setRxCallback(onBleUartRX); diff --git a/src/helpers/nrf52/SerialBLEInterface.h b/src/helpers/nrf52/SerialBLEInterface.h index e2fc6cb9..de103054 100644 --- a/src/helpers/nrf52/SerialBLEInterface.h +++ b/src/helpers/nrf52/SerialBLEInterface.h @@ -8,6 +8,7 @@ #endif class SerialBLEInterface : public BaseSerialInterface { + BLEDfu bledfu; BLEUart bleuart; bool _isEnabled; bool _isDeviceConnected; From 4f9764b1b455c4e6c85d0ec5b5c6fdcd9f822917 Mon Sep 17 00:00:00 2001 From: txkbaldlaw Date: Fri, 17 Apr 2026 10:56:51 -0500 Subject: [PATCH 06/12] Update FAQ to include Companion OTA DFU updates --- docs/faq.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 560e3f62..3cf93c56 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -89,7 +89,7 @@ A list of frequently-asked questions and answers for MeshCore - [6.7. Q: My RAK/T1000-E/xiao\_nRF52 device seems to be corrupted, how do I wipe it clean to start fresh?](#67-q-my-rakt1000-exiao_nrf52-device-seems-to-be-corrupted-how-do-i-wipe-it-clean-to-start-fresh) - [6.8. Q: WebFlasher fails on Linux with failed to open](#68-q-webflasher-fails-on-linux-with-failed-to-open) - [7. Other Questions:](#7-other-questions) - - [7.1. Q: How to update nRF (RAK, T114, Seed XIAO) repeater and room server firmware over the air using the new simpler DFU app?](#71-q-how-to-update-nrf-rak-t114-seed-xiao-repeater-and-room-server-firmware-over-the-air-using-the-new-simpler-dfu-app) + - [7.1. Q: How to update nRF (RAK, T114, Seed XIAO) companion, repeater and room server firmware over the air using the new simpler DFU app?](#71-q-how-to-update-nrf-rak-t114-seed-xiao-companion-repeater-and-room-server-firmware-over-the-air-using-the-new-simpler-dfu-app) - [7.1.1 Q: Can I update Seeed Studio Wio Tracker L1 Pro using OTA?](#711-q-can-i-update-seeed-studio-wio-tracker-l1-pro-using-ota) - [7.2. Q: How to update ESP32-based devices over the air?](#72-q-how-to-update-esp32-based-devices-over-the-air) - [7.3. Q: Is there a way to lower the chance of a failed OTA device firmware update (DFU)?](#73-q-is-there-a-way-to-lower-the-chance-of-a-failed-ota-device-firmware-update-dfu) @@ -783,13 +783,13 @@ Allow the browser user on it: --- ## 7. Other Questions: -### 7.1. Q: How to update nRF (RAK, T114, Seed XIAO) repeater and room server firmware over the air using the new simpler DFU app? +### 7.1. Q: How to update nRF (RAK, T114, Seed XIAO) companion, repeater and room server firmware over the air using the new simpler DFU app? **A:** The steps below work on both Android and iOS as nRF has made both apps' user interface the same on both platforms: 1. Download nRF's DFU app from iOS App Store or Android's Play Store, you can find the app by searching for `nrf dfu`, the app's full name is `nRF Device Firmware Update` 2. On flasher.meshcore.co.uk, download the **ZIP** version of the firmware for your nRF device (e.g. RAK or Heltec T114 or Seeed Studio's Xiao) -3. From the MeshCore app, login remotely to the repeater you want to update with admin privilege +3. If updating a companion, skip to step 6 below. If updating a repeater or room server, from the MeshCore app, login remotely to the repeater you want to update with admin privilege 4. Go to the Command Line tab, type `start ota` and hit enter. 5. you should see `OK` to confirm the repeater device is now in OTA mode 6. Run the DFU app,tab `Settings` on the top right corner @@ -798,8 +798,13 @@ Allow the browser user on it: 10. Select the device you want to update. If the device you want to update is not on the list, try enabling`OTA` on the device again 11. If the device is not found, enable `Force Scanning` in the DFU app 12. Tab the `Upload` to begin OTA update -13. If it fails, try turning off and on Bluetooth on your phone. If that doesn't work, try rebooting your phone. -14. Wait for the update to complete. It can take a few minutes. +13. If it fails, try turning off and on Bluetooth on your phone. If that doesn't work, try rebooting your phone. If you keep getting failures at the "Enabling Bootloader" step, try forgetting the NRF board in your IOS or Andriod device's bluetooth settings and re-pair it through the DFU app. +14. Wait for the update to complete. It can take a few minutes. +15. It is strongly recommended that you install and use the OTAFIX bootloader at https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX. +16. Please see the Meshcore Blog for additional information on OTA firmware flashing: + - https://blog.meshcore.io/2026/04/06/otafix-bootloader + - https://blog.meshcore.io/2026/04/02/nrf-ota-update + #### 7.1.1 Q: Can I update Seeed Studio Wio Tracker L1 Pro using OTA? **A:** You can flash this safer bootloader to the Wio Tracker L1 Pro From 96a16c238abb11dbca959be2660af3e4a55bafc9 Mon Sep 17 00:00:00 2001 From: txkbaldlaw Date: Fri, 17 Apr 2026 16:17:12 -0500 Subject: [PATCH 07/12] Additional Update to FAQs regarding Companion OTA --- docs/faq.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 3cf93c56..c27561e4 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -801,7 +801,8 @@ Allow the browser user on it: 13. If it fails, try turning off and on Bluetooth on your phone. If that doesn't work, try rebooting your phone. If you keep getting failures at the "Enabling Bootloader" step, try forgetting the NRF board in your IOS or Andriod device's bluetooth settings and re-pair it through the DFU app. 14. Wait for the update to complete. It can take a few minutes. 15. It is strongly recommended that you install and use the OTAFIX bootloader at https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX. -16. Please see the Meshcore Blog for additional information on OTA firmware flashing: +16. To update a companion node over OTA, it must be running companion firmware v1.15 or greater. +17. Please see the Meshcore Blog for additional information on OTA firmware flashing: - https://blog.meshcore.io/2026/04/06/otafix-bootloader - https://blog.meshcore.io/2026/04/02/nrf-ota-update From cfe4b0b9a5d60cf3f98b1cea70eb875481236098 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Sat, 18 Apr 2026 14:43:47 +1200 Subject: [PATCH 08/12] bleuart service stay registered first to prevent gatt cache issues on android when already paired --- src/helpers/nrf52/SerialBLEInterface.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/helpers/nrf52/SerialBLEInterface.cpp b/src/helpers/nrf52/SerialBLEInterface.cpp index c7c211a3..75a4e3b0 100644 --- a/src/helpers/nrf52/SerialBLEInterface.cpp +++ b/src/helpers/nrf52/SerialBLEInterface.cpp @@ -177,15 +177,17 @@ void SerialBLEInterface::begin(const char* prefix, char* name, uint32_t pin_code Bluefruit.setEventCallback(onBLEEvent); + bleuart.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); + bleuart.begin(); + bleuart.setRxCallback(onBleUartRX); + + + // Register DFU on the main BLE stack so paired clients can discover it // without switching the device into a separate OTA-only BLE mode first. bledfu.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); bledfu.begin(); - bleuart.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); - bleuart.begin(); - bleuart.setRxCallback(onBleUartRX); - Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); Bluefruit.Advertising.addTxPower(); Bluefruit.Advertising.addService(bleuart); From 0899f6603448747435a3ca1bfd40034fdb51d7a9 Mon Sep 17 00:00:00 2001 From: Rastislav Vysoky Date: Sat, 18 Apr 2026 09:42:27 +0200 Subject: [PATCH 09/12] fix: remove sensors from xiao c3 companion because of bootloops --- variants/xiao_c3/platformio.ini | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/variants/xiao_c3/platformio.ini b/variants/xiao_c3/platformio.ini index 95142269..c5254b46 100644 --- a/variants/xiao_c3/platformio.ini +++ b/variants/xiao_c3/platformio.ini @@ -3,9 +3,6 @@ extends = esp32_base board = seeed_xiao_esp32c3 build_flags = ${esp32_base.build_flags} - ${sensor_base.build_flags} - -UENV_INCLUDE_GPS - -UENV_INCLUDE_VL53L0X -I variants/xiao_c3 -D ESP32_CPU_FREQ=80 -D PIN_VBAT_READ=D0 @@ -29,7 +26,6 @@ build_src_filter = ${esp32_base.build_src_filter} + lib_deps = ${esp32_base.lib_deps} - ${sensor_base.lib_deps} [env:Xiao_C3_repeater] extends = Xiao_esp32_C3 @@ -37,6 +33,9 @@ build_src_filter = ${Xiao_esp32_C3.build_src_filter} +<../examples/simple_repeater/*.cpp> build_flags = ${Xiao_esp32_C3.build_flags} + ${sensor_base.build_flags} + -UENV_INCLUDE_GPS + -UENV_INCLUDE_VL53L0X -D ADVERT_NAME='"Xiao C3 Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 @@ -46,6 +45,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${Xiao_esp32_C3.lib_deps} + ${sensor_base.lib_deps} ${esp32_ota.lib_deps} bakercp/CRC32 @ ^2.0.0 @@ -55,6 +55,9 @@ build_src_filter = ${Xiao_esp32_C3.build_src_filter} +<../examples/simple_room_server/*.cpp> build_flags = ${Xiao_esp32_C3.build_flags} + ${sensor_base.build_flags} + -UENV_INCLUDE_GPS + -UENV_INCLUDE_VL53L0X -D ADVERT_NAME='"Xiao C3 Room"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 @@ -64,6 +67,7 @@ build_flags = ; -D MESH_DEBUG=1 lib_deps = ${Xiao_esp32_C3.lib_deps} + ${sensor_base.lib_deps} ${esp32_ota.lib_deps} bakercp/CRC32 @ ^2.0.0 From 49b37d5622b7c0091fe4bfffa1c7df88a37fa229 Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Sat, 18 Apr 2026 21:32:41 +1000 Subject: [PATCH 10/12] * minor bounds fix --- src/helpers/RegionMap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/RegionMap.cpp b/src/helpers/RegionMap.cpp index 09554376..7b8399e2 100644 --- a/src/helpers/RegionMap.cpp +++ b/src/helpers/RegionMap.cpp @@ -176,7 +176,7 @@ int RegionMap::getTransportKeysFor(const RegionEntry& src, TransportKey dest[], _store->getAutoKeyFor(src.id, src.name, dest[0]); num = 1; } else { // new: implicit auto hashtag region - char tmp[sizeof(src.name)]; + char tmp[sizeof(src.name)+1]; tmp[0] = '#'; strcpy(&tmp[1], src.name); _store->getAutoKeyFor(src.id, tmp, dest[0]); From 37517854003f85e656ea2a3afb353839cb291b26 Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Sun, 19 Apr 2026 11:27:55 +1000 Subject: [PATCH 11/12] * version 1.15.0 --- examples/companion_radio/MyMesh.h | 4 ++-- examples/simple_repeater/MyMesh.h | 4 ++-- examples/simple_room_server/MyMesh.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/companion_radio/MyMesh.h b/examples/companion_radio/MyMesh.h index 70c7ffeb..aeff591c 100644 --- a/examples/companion_radio/MyMesh.h +++ b/examples/companion_radio/MyMesh.h @@ -8,11 +8,11 @@ #define FIRMWARE_VER_CODE 11 #ifndef FIRMWARE_BUILD_DATE -#define FIRMWARE_BUILD_DATE "20 Mar 2026" +#define FIRMWARE_BUILD_DATE "19 Apr 2026" #endif #ifndef FIRMWARE_VERSION -#define FIRMWARE_VERSION "v1.14.1" +#define FIRMWARE_VERSION "v1.15.0" #endif #if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM) diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index 8dab8739..8ed0317e 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -69,11 +69,11 @@ struct NeighbourInfo { }; #ifndef FIRMWARE_BUILD_DATE - #define FIRMWARE_BUILD_DATE "20 Mar 2026" + #define FIRMWARE_BUILD_DATE "19 Apr 2026" #endif #ifndef FIRMWARE_VERSION - #define FIRMWARE_VERSION "v1.14.1" + #define FIRMWARE_VERSION "v1.15.0" #endif #define FIRMWARE_ROLE "repeater" diff --git a/examples/simple_room_server/MyMesh.h b/examples/simple_room_server/MyMesh.h index e3a485e2..1b35ae95 100644 --- a/examples/simple_room_server/MyMesh.h +++ b/examples/simple_room_server/MyMesh.h @@ -27,11 +27,11 @@ /* ------------------------------ Config -------------------------------- */ #ifndef FIRMWARE_BUILD_DATE - #define FIRMWARE_BUILD_DATE "20 Mar 2026" + #define FIRMWARE_BUILD_DATE "19 Apr 2026" #endif #ifndef FIRMWARE_VERSION - #define FIRMWARE_VERSION "v1.14.1" + #define FIRMWARE_VERSION "v1.15.0" #endif #ifndef LORA_FREQ From ec4b57aabf30a3f4410ae0932ff71ab5a0b9686f Mon Sep 17 00:00:00 2001 From: Jared Dohrman Date: Sun, 19 Apr 2026 12:24:38 +1000 Subject: [PATCH 12/12] docs: add v1.15.0 releases --- release-notes.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/release-notes.yml b/release-notes.yml index d2dea824..3b973484 100644 --- a/release-notes.yml +++ b/release-notes.yml @@ -26,6 +26,18 @@ releases: text: "Refreshed the docs site structure and theme as part of the first EastMesh release set." breaking_changes: [] + - track: companion-wifi + version: "1.15.0" + tag: "companion-wifi-v1.15.0" + date: "2026-04-19" + previous_version: "1.14.1" + summary: "Prepares the next companion_wifi release on top of upstream MeshCore firmware v1.15.0." + changes: + - type: changed + area: upstream + text: "Updated the companion_wifi firmware base to upstream MeshCore v1.15.0." + breaking_changes: [] + - track: repeater-mqtt version: "1.0.1" tag: "repeater-mqtt-eastmesh-v1.0.1" @@ -296,3 +308,15 @@ releases: area: web-panel text: "Updated the documented web CLI allowlist to match the actual browser command gate, including the AGC reset interval commands and the troubleshooting note for `noise_floor` reporting `0`." breaking_changes: [] + + - track: repeater-mqtt + version: "1.3.5" + tag: "repeater-mqtt-eastmesh-v1.3.5" + date: "2026-04-19" + previous_version: "1.3.4" + summary: "Prepares the next repeater_mqtt release on top of upstream MeshCore firmware v1.15.0." + changes: + - type: changed + area: upstream + text: "Updated the repeater_mqtt firmware base to upstream MeshCore v1.15.0." + breaking_changes: []