Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
534a0c9
Increased preamble to 32 for <sf9 and left at 16 for sf9 and above
OverkillFPV Mar 5, 2026
a61add2
Update preamble dynamically to match runtime SF changes via CLI
OverkillFPV Mar 5, 2026
6fd8c28
Cache preamble SF to avoid redundant setPreambleLength() on every TX
OverkillFPV Mar 7, 2026
a434f9e
simplified the calls
OverkillFPV Mar 7, 2026
3843c00
added the preamble update into get est airtime as a prevention for fa…
OverkillFPV Mar 24, 2026
f0ec5d2
changed to set the preamble on radio settings change
OverkillFPV Mar 29, 2026
958204c
Merge branch 'dev' into lora-longer-preamble
OverkillFPV Apr 16, 2026
c7be216
fix(sensors): improve sensor initialization and handling to prevent h…
NickDunklee Apr 18, 2026
3fcf5b5
fix(sensecap_solar): set P_LORA_TX_LED to 12 after LED remap
Confituurke Mar 25, 2026
2773313
Added Xiao S3 variant.
IoTThinks Apr 24, 2026
b705d54
Update companion protocol documentation and enhance data type definit…
zjs81 Apr 24, 2026
5e03c00
Add unit tests for Utils::toHex
mtlynch Oct 12, 2025
b6a3aa1
Update googletest to use 1.17.0 exactly
mtlynch Apr 24, 2026
7f38e3f
feat: Enable GPS on RAK 1W kit
zevaryx Apr 25, 2026
835b0e9
fix(sensecap_solar): init LED_WHITE LOW to prevent always-on at boot
Confituurke Apr 25, 2026
40d7fcf
Merge pull request #2157 from aXistem-dev/fix/sensecap-solar-tx-led-12
oltaco Apr 25, 2026
b91f127
fix: correct device model name for Heltec Wireless Paper
jirogit Apr 26, 2026
cb669a2
Merge pull request #2407 from jirogit/fix/wireless-paper-device-model
liamcottle Apr 26, 2026
b6d0b7a
Refine data type definitions and update registration process in docum…
zjs81 Apr 27, 2026
9c8eb30
Clarify path length semantics and data handling in inbound group data…
zjs81 Apr 27, 2026
70212fb
Merge pull request #2401 from zevaryx/rak-3401-gps
liamcottle Apr 28, 2026
470ad43
Merge pull request #2392 from zjs81/meshcore_open_data_types
liamcottle Apr 28, 2026
0396cf6
Merge pull request #2383 from IoTThinks/MCdev-Added-XiaoS3-202604
ripplebiz Apr 28, 2026
c8d81bc
added website to repeater splash screen
liamcottle Apr 28, 2026
5f75b90
added website to companion splash screen
liamcottle Apr 28, 2026
3cd4090
added website to room server splash screen
liamcottle Apr 28, 2026
e111f71
added website to sensor splash screen
liamcottle Apr 28, 2026
cb81d34
Merge pull request #2424 from liamcottle/ui/website
ripplebiz Apr 28, 2026
12d9cc3
make g2 more in line with other variants
recrof Apr 28, 2026
b963681
replace all intendation tabs to spaces in pio ini files
recrof Apr 28, 2026
d8f3d59
Merge pull request #2427 from recrof/tabs-to-spaces
liamcottle Apr 28, 2026
04b69e8
revert bluefruit patch
oltaco Apr 27, 2026
f7d8fa3
use internal fork of Adafruit nRF52 Arduino
oltaco Apr 28, 2026
6600906
standardize the minewsemi variant
recrof Apr 28, 2026
5beef49
add kiss radio env to most of the variants
recrof Apr 28, 2026
0265851
added PIN_USER_BTN_ANA for rak3401 companion usb and companion ble
chrisdavis2110 Apr 29, 2026
5fbd473
added PIN_GPS_EN=-1 to rak3401 companion usb
chrisdavis2110 Apr 29, 2026
696aae6
Heltec boards have LNA disabled by default.
Quency-D Apr 29, 2026
2f6ca73
Merge pull request #2439 from Quency-D/fix-lna
liamcottle Apr 29, 2026
293a8a9
docs: add explanatory notes for txdelay, direct.txdelay, and rxdelay …
kizniche Apr 29, 2026
2522492
Merge pull request #2436 from chrisdavis2110/rak3401-comp-ana-button
liamcottle Apr 30, 2026
daa50e9
Merge pull request #2426 from recrof/nano-g2-rework
liamcottle Apr 30, 2026
c5bf23f
bump simple_sensor version to v1.15.0
weebl2000 Apr 30, 2026
2b0f74a
add comments
liamcottle Apr 30, 2026
9ce6b49
Merge pull request #2430 from oltaco/use-forked-adafruit-nrf52
liamcottle Apr 30, 2026
bd90475
Merge pull request #2448 from weebl2000/bump-sensor-version
liamcottle Apr 30, 2026
5c651b3
Merge pull request #1954 from OverkillFPV/lora-longer-preamble
liamcottle Apr 30, 2026
ffbf73d
Merge pull request #2432 from recrof/kiss-radio-everywhere
liamcottle Apr 30, 2026
d7e3a9d
Merge branch 'dev' into minewsemi-refactor
recrof Apr 30, 2026
c7c400e
Merge pull request #2428 from recrof/minewsemi-refactor
liamcottle Apr 30, 2026
0be082b
fix typos
Avi0n Mar 9, 2026
9b1ca6b
Merge pull request #2456 from Avi0n/docs/fix-typos
liamcottle May 1, 2026
ccda0a9
Merge pull request #925 from mtlynch/unit-tests
liamcottle May 1, 2026
0a8a0a4
* Refactor: removed duplicated radio_rng_seed(), radio_set_params(), …
ripplebiz May 1, 2026
5a50975
don't play startup tune if buzzer pref disabled
liamcottle May 1, 2026
679fb9c
Merge pull request #2460 from liamcottle/ui/startup-mute
liamcottle May 1, 2026
e727fd5
Merge pull request #2462 from meshcore-dev/target-dup-cleanup
liamcottle May 2, 2026
e56c1b3
Do not perform redundant reset on ST7789 displays
JosiahWI May 3, 2026
235706a
Incorrect time_t TypeDef in RAK12035_SoilMoisture
KPrivitt May 5, 2026
00afb06
Merge pull request #2475 from uwl-cpe-2025/fix/ST7789-reset-timing
ripplebiz May 6, 2026
f9ddd9d
Merge pull request #2445 from kizniche/update-docs-txdelay-rxdelay
ripplebiz May 6, 2026
19ebd8c
Merge pull request #2480 from KPrivitt/dev
liamcottle May 6, 2026
68ab882
fix CustomLFS version pinning
oltaco May 6, 2026
6b3df32
Merge pull request #2483 from oltaco/dev
oltaco May 6, 2026
3bde089
Gate PIN_GPS_EN
weebl2000 May 6, 2026
314d777
Enhance KissModem frame processing and timeout handling
tuzzmaniandevil May 7, 2026
b75cefb
Merge pull request #2327 from NickDunklee/fix-environment-sensor-refa…
ripplebiz May 7, 2026
bf733f0
Merge pull request #2488 from weebl2000/fix-rak-pin-gps-en-undefined
liamcottle May 7, 2026
6979326
* CMD_SET_FLOOD_SCOPE_KEY, now with second variant for explicitly sen…
ripplebiz May 7, 2026
5166588
Merge pull request #2492 from meshcore-dev/set-flood-scope-none
liamcottle May 7, 2026
4b6b8ab
Add missing Wire.h include for sensors
JosiahWI May 7, 2026
0800f8d
Merge pull request #2494 from uwl-cpe-2025/fix/missing-include
liamcottle May 7, 2026
ffa7601
Address two comments from PR
tuzzmaniandevil May 7, 2026
841db56
add build flag to configure allowed repeat freq range
liamcottle May 8, 2026
6e2e9cc
Merge pull request #2505 from liamcottle/feature/companion-repeat-bui…
oltaco May 8, 2026
56d4671
Merge pull request #2490 from tuzzmaniandevil/dev
liamcottle May 8, 2026
b37db66
Merge upstream/dev into mqtt-bridge-implementation-flex
agessaman May 9, 2026
ff031f4
Refactor MQTT origin handling to use effective origin logic
agessaman May 10, 2026
303cf8c
Enhance MQTT status message to include repeat status
agessaman May 10, 2026
b9f478c
Add MQTT origin handling and string utility function
agessaman May 10, 2026
0884734
Update MQTT implementation to include ColoradoMesh preset
agessaman May 10, 2026
c975152
Merge branch 'agessaman:mqtt-bridge-implementation-flex' into mqtt-br…
Elektr0Vodka May 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/run-unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Run Unit Tests

on:
push:
branches:
- main
- master
pull_request:
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
steps:

- name: Clone Repo
uses: actions/checkout@v4

- name: Setup Build Environment
uses: ./.github/actions/setup-build-environment

- name: Run Unit Tests
run: pio test -e native -vv

- name: Upload Test Results
# Upload test results even if the test step failed.
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: .pio/build/native/
13 changes: 8 additions & 5 deletions MQTT_IMPLEMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ get mqtt.status

The MQTT bridge implementation provides:
- Up to 6 MQTT connection slots with built-in presets
- Built-in presets for LetsMesh Analyzer (US/EU), MeshMapper, MeshRank, Waev, Meshomatic, CascadiaMesh, EastIdahoMesh, and TennMesh
- Built-in presets for LetsMesh Analyzer (US/EU), MeshMapper, MeshRank, Waev, Meshomatic, CascadiaMesh, EastIdahoMesh, ColoradoMesh, and TennMesh
- Custom broker support with username/password authentication
- JWT (Ed25519 device signing) authentication for most preset brokers; TennMesh uses a fixed username/password (plain MQTT)
- WSS (WebSocket Secure), direct MQTT/TLS, and plain MQTT (TennMesh) transport
Expand Down Expand Up @@ -108,6 +108,7 @@ The MQTT bridge uses a slot-based architecture with up to 6 concurrent connectio
| `chimesh` | wss://mqtt.chimesh.org:443 | JWT (Ed25519) | WSS |
| `meshat.se` | mqtts://mqtt.meshat.se:8883 | Username/password (fixed in firmware) | MQTT over TLS |
| `eastidahomesh` | wss://broker.eastidahomesh.net:443 | None | WSS |
| `coloradomesh` | wss://mqtt.meshcore.coloradomesh.org:1883 | JWT (Ed25519) | WSS |
| `custom` | User-configured | Username/Password | MQTT or WSS |
| `none` | (disabled) | — | — |

Expand Down Expand Up @@ -254,6 +255,7 @@ Each slot (1-6) supports the following commands:
- `set mqttN.preset chimesh` - Set slot N to ChicagolandMesh
- `set mqttN.preset meshat.se` - Set slot N to Meshat.se
- `set mqttN.preset eastidahomesh` - Set slot N to EastIdahoMesh (WSS/TLS, no auth; packets on `meshcore/{IATA}/{PUBLIC_KEY}/packets`)
- `set mqttN.preset coloradomesh` - Set slot N to ColoradoMesh
- `set mqttN.preset custom` - Set slot N to custom broker (configure server/port/username/password)
- `set mqttN.preset none` - Disable slot N
- `set mqttN.server <hostname>` - Set custom server hostname for slot N
Expand Down Expand Up @@ -330,7 +332,7 @@ When a slot's preset is `custom`, you can define a custom topic template using p

If no custom topic is set, custom slots default to: `meshcore/{iata}/{device}/{type}`

**Note:** Topic templates only apply to `custom` preset slots. Built-in presets (analyzer-us, analyzer-eu, meshmapper, meshrank, eastidahomesh, tennmesh, etc.) always use their hardcoded topic format.
**Note:** Topic templates only apply to `custom` preset slots. Built-in presets (analyzer-us, analyzer-eu, meshmapper, meshrank, eastidahomesh, coloradomesh, tennmesh, etc.) always use their hardcoded topic format.

### MQTT Shared Commands

Expand Down Expand Up @@ -478,7 +480,8 @@ Minimal raw packet data for map integration.
"model": "device_model",
"firmware_version": "firmware_version",
"radio": "radio_info",
"client_version": "meshcore-custom-repeater/{build_date}"
"client_version": "meshcore-custom-repeater/{build_date}",
"repeat": "on|off"
}
```

Expand Down Expand Up @@ -523,7 +526,7 @@ Minimal raw packet data for map integration.

### Slot-Based Preset System
- Up to 6 concurrent MQTT connections (with PSRAM), 2 without PSRAM
- Built-in presets for LetsMesh Analyzer (US/EU), MeshMapper, MeshRank, Waev, Meshomatic, CascadiaMesh, EastIdahoMesh, and TennMesh
- Built-in presets for LetsMesh Analyzer (US/EU), MeshMapper, MeshRank, Waev, Meshomatic, CascadiaMesh, EastIdahoMesh, ColoradoMesh, and TennMesh
- Custom broker support with username/password auth and custom topic templates
- JWT (Ed25519) for most preset brokers; MeshRank uses token-in-topic; TennMesh uses fixed username/password over plain MQTT
- WSS (WebSocket Secure), direct MQTT over TLS, and plain MQTT (TennMesh)
Expand Down Expand Up @@ -664,7 +667,7 @@ get mqtt1.diag # Last slot error details (TLS/sock/time)
get mqtt2.diag
get mqtt3.diag
get mqtt1.preset # Verify slots are configured
get mqtt.iata # IATA must be set for MeshCore-topic presets (e.g. Analyzer, TennMesh)
get mqtt.iata # IATA must be set for MeshCore-topic presets (e.g. Analyzer, ColoradoMesh, TennMesh)
```

#### Timezone Issues
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ Here are some general principals you should try to adhere to:

Help us prioritize! Please react with thumbs-up to issues/PRs you care about most. We look at reaction counts when planning work.

### Running unit tests

To run unit tests, run the following command:

```bash
pio test --environment native --verbose
```

## Road-Map / To-Do

There are a number of fairly major features in the pipeline, with no particular time-frames attached yet. In very rough chronological order:
Expand Down
198 changes: 0 additions & 198 deletions arch/nrf52/extra_scripts/patch_bluefruit.py

This file was deleted.

12 changes: 10 additions & 2 deletions docs/cli_commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore

**Note:** the 'path.hash.mode' sets the low-level ID/hash encoding size used when the repeater adverts. This setting has no impact on what packet ID/hash size this repeater forwards, all sizes should be forwarded on firmware >= 1.14. This feature was added in firmware 1.14

**Temporary Note:** adverts with ID/hash sizes of 2 or 3 bytes may have limited flood propogation in your network while this feature is new as v1.13.0 firmware and older will drop packets with multibyte path ID/hashes as only 1-byte hashes are suppored. Consider your install base of firmware >=1.14 has reached a criticality for effective network flooding before implementing higher ID/hash sizes.
**Temporary Note:** adverts with ID/hash sizes of 2 or 3 bytes may have limited flood propagation in your network while this feature is new as v1.13.0 firmware and older will drop packets with multibyte path ID/hashes as only 1-byte hashes are supported. Consider your install base of firmware >=1.14 has reached a criticality for effective network flooding before implementing higher ID/hash sizes.

---

Expand Down Expand Up @@ -488,6 +488,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore

**Default:** `0.5`

**Note:** When multiple nearby repeaters all hear the same flood packet, each waits a random amount of time before retransmitting to avoid simultaneous collisions. This factor scales the size of that random window. Higher values reduce collision risk at the cost of added latency. `0` disables the window entirely.

---

#### View or change the retransmit delay factor for direct traffic
Expand All @@ -500,6 +502,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore

**Default:** `0.2`

**Note:** Same collision-avoidance random window as `txdelay`, but applied to direct (non-flood, routed) traffic. The default is lower because direct packets are addressed to a specific next hop, so far fewer nodes compete to retransmit them.

---

#### [Experimental] View or change the processing delay for received traffic
Expand All @@ -512,6 +516,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore

**Default:** `0.0`

**Note:** When enabled, repeaters that received a flood packet with a weak signal are held in a delay queue before processing, while those that received it with a strong signal process it immediately. This gives strong-signal paths forwarding priority. By the time weak-signal nodes process their copy, the packet may have already propagated and will be suppressed as a duplicate, reducing redundant retransmissions.

---

#### View or change the duty cycle limit
Expand Down Expand Up @@ -760,6 +766,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore
- `name`: Region name
- `parent_name`: Parent region name (optional, defaults to wildcard)

**Note:** In firmware **v1.15.0** and later, `region put` enables flooding for that region by default (you do not need a separate `region allowf <name>` after each `put`). On **v1.14.0** and earlier, new regions may still require `region allowf` for flooding—see [`region allowf`](#allow-a-region).

---

#### Remove a region
Expand Down Expand Up @@ -939,7 +947,7 @@ region save

---

#### View or change thevalue of a sensor
#### View or change the value of a sensor
**Usage:**
- `sensor get <key>`
- `sensor set <key> <value>`
Expand Down
Loading
Loading