Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
9312fe7
add heltec v4.3
Quency-D Feb 26, 2026
f0d37e5
Added version identification.
Quency-D Feb 27, 2026
8b7fed6
default lna_enabled=true
weebl2000 Mar 2, 2026
14f066b
Fix sleep
weebl2000 Mar 2, 2026
70d3b96
Update variants/heltec_v4/LoRaFEMControl.cpp init function
Quency-D Mar 3, 2026
bab650f
LNA is enabled by default.
Quency-D Mar 3, 2026
3b5139a
Update variants/heltec_v4/LoRaFEMControl.cpp
Quency-D Mar 3, 2026
c6d5301
Merge pull request #3 from weebl2000/dev-heltec-v4.3
Quency-D Mar 3, 2026
8769c4b
Merge branch 'dev' into dev-heltec-v4.3
Quency-D Mar 4, 2026
efd9fb4
Merge branch 'dev' into dev-heltec-v4.3
Quency-D Mar 5, 2026
241805e
Fixed the compilation error of HeltecV4Board::begin.
Quency-D Mar 5, 2026
f633843
Add get/set dutycycle command
weebl2000 Mar 7, 2026
3c0d186
Fix memcp compare length off by one
weebl2000 Mar 11, 2026
c994c62
Add GAT562 Mesh EVB Pro Repeater and Room Server.
whywilson Mar 13, 2026
fa662d7
Merge branch 'dev' of https://github.com/meshcore-dev/MeshCore into dev
whywilson Mar 16, 2026
69123ca
Update GAT562_Mesh_EVB_Pro Config and remove LoRa Specification and c…
whywilson Mar 17, 2026
9b84278
feat: Add support for PAYLOAD_TYPE_GRP_DATA
dz0ny Mar 5, 2026
0e98939
feat: Require 0xFF for custom payloads
dz0ny Mar 5, 2026
a21b83b
fix: address comments
dz0ny Mar 8, 2026
f25d7a8
fix: Align channel data framing
dz0ny Mar 18, 2026
37b72ff
fix: Scope group data docs
dz0ny Mar 18, 2026
896d60c
fix: Keep data docs only
dz0ny Mar 18, 2026
2fe3c36
fix: Trim grp docs
dz0ny Mar 18, 2026
1f48d2b
Address comments
weebl2000 Mar 18, 2026
1fb26e7
fix: Drop grp data timestamp
dz0ny Mar 19, 2026
2f68769
fix: Widen grp data type
dz0ny Mar 19, 2026
ae9fcb3
fix: Rename grp dev type
dz0ny Mar 19, 2026
f6cfed6
add heltec_mesh_node_t096 board.
Quency-D Mar 20, 2026
0b0fdb8
Merge pull request #2097 from Quency-D/heltec-t096
liamcottle Mar 20, 2026
7fa7ac2
Merge pull request #1867 from Quency-D/dev-heltec-v4.3
ripplebiz Mar 20, 2026
dbfc29b
Documented get/set radio.rxgain CLI command
jeroenvermeulen Mar 20, 2026
7e6d8dd
Update note about setting when upgrading
jeroenvermeulen Mar 20, 2026
0ac3347
fix: update devcontainer features to use node instead of bun
jbrazio Mar 21, 2026
b07ab2b
Remove useless define in GAT562_Mesh_EVB_Pro.
whywilson Mar 21, 2026
c7b8db5
Fix typo for ThinkNode M5 room server environment
archef2000 Mar 21, 2026
127057e
Merge pull request #2042 from whywilson/dev
liamcottle Mar 22, 2026
ff5aad7
Make radio.rxgain true by default after upgrades
weebl2000 Mar 22, 2026
d4ba66c
Merge pull request #2124 from weebl2000/fix-radio-rxgain-true-by-def
ripplebiz Mar 22, 2026
1ccb054
Merge pull request #2109 from jbrazio/2026/from-bun-to-node
liamcottle Mar 22, 2026
285fc68
allow to set lower LoRa frequency
recrof Mar 22, 2026
8009cf0
Merge pull request #2126 from recrof/allow-lower-freq
liamcottle Mar 22, 2026
31a08e1
Update note for upgrade to version 1.14.1
jeroenvermeulen Mar 22, 2026
f543ba2
Update temporary note with a hyperlink to issue #2118
jeroenvermeulen Mar 22, 2026
46de7f4
Merge pull request #1 from meshcore-dev/dev
jeroenvermeulen Mar 22, 2026
54f6ac4
Add discover.neighbors command documentation
jeroenvermeulen Mar 22, 2026
7d49faa
Merge pull request #2106 from jeroenvermeulen/document-radio.rxgain
liamcottle Mar 22, 2026
91aed04
Merge pull request #1928 from dz0ny/feat/grp-data-upstream
liamcottle Mar 23, 2026
ed32625
add support for direct paths when sending group data
liamcottle Mar 23, 2026
c78f713
reorder command args
liamcottle Mar 23, 2026
1d61df7
add define for reserved group data type
liamcottle Mar 23, 2026
df01fd3
Merge pull request #2130 from liamcottle/refactor/channel-data
ripplebiz Mar 23, 2026
7829c51
Bump to RadioLib 7.6.0
weebl2000 Mar 9, 2026
0aa0ec1
Add get/set dutycycle command
weebl2000 Mar 7, 2026
7413928
Fix memcp compare length off by one
weebl2000 Mar 11, 2026
728b586
Address comments
weebl2000 Mar 18, 2026
da689c8
Fix default radio.rxgain for Station G2
jeroenvermeulen Mar 23, 2026
bdf1050
Merge pull request #2134 from jeroenvermeulen/station-g2-default-radi…
liamcottle Mar 24, 2026
fb08fc0
restore docs
weebl2000 Mar 24, 2026
37d1a75
Merge branch 'dutycycle-command' of github.com:weebl2000/MeshCore int…
weebl2000 Mar 24, 2026
f8dbdce
fix: apply persisted GPS enabled setting on boot for companion radio
got-root Mar 13, 2026
8637a74
Merge pull request #2018 from got-root/fix/companion-radio-gps-persis…
liamcottle Mar 24, 2026
2325973
* Companion: applyGPSPrefs() now just in one place (moved out of UITask)
Mar 25, 2026
15b2469
Merge pull request #2121 from archef2000/patch-1
fdlamotte Mar 25, 2026
517f2f1
Merge pull request #1961 from weebl2000/dutycycle-command
ripplebiz Mar 26, 2026
515af35
* docs changes for PAYLOAD_TYPE_GRP_DATA
ripplebiz Mar 28, 2026
6fb8e60
* number_allocations.md data-type range changes
ripplebiz Mar 30, 2026
efc875b
* more notes about number_allocations
ripplebiz Mar 30, 2026
bdeb7d8
Merge pull request #1982 from weebl2000/radiolib7.6.0
ripplebiz Mar 30, 2026
4a45b11
Added without_display variant for repeater.
MeetTheTree Mar 30, 2026
76f6fbb
Implemented check for conditional loading of display libraries.
MeetTheTree Mar 30, 2026
4cd24f2
Update platformio.ini
MeetTheTree Mar 30, 2026
c4932eb
Update target.h
MeetTheTree Mar 30, 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
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "MeshCore",
"image": "mcr.microsoft.com/devcontainers/python:3-bookworm",
"features": {
"ghcr.io/devcontainers-extra/features/bun:1": {},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
"packages": [
"sudo"
Expand Down
61 changes: 61 additions & 0 deletions boards/heltec_t096.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"build": {
"arduino": {
"ldscript": "nrf52840_s140_v6.ld"
},
"core": "nRF5",
"cpu": "cortex-m4",
"extra_flags": "-DARDUINO_NRF52840_FEATHER -DNRF52840_XXAA",
"f_cpu": "64000000L",
"hwids": [
["0x239A","0x8029"],
["0x239A","0x0029"],
["0x239A","0x002A"],
["0x239A","0x802A"]
],
"usb_product": "HT-n5262G",
"mcu": "nrf52840",
"variant": "Heltec_T096_Board",
"bsp": {
"name": "adafruit"
},
"softdevice": {
"sd_flags": "-DS140",
"sd_name": "s140",
"sd_version": "6.1.1",
"sd_fwid": "0x00B6"
},
"bootloader": {
"settings_addr": "0xFF000"
}
},
"connectivity": [
"bluetooth"
],
"debug": {
"jlink_device": "nRF52840_xxAA",
"svd_path": "nrf52840.svd",
"openocd_target": "nrf52.cfg"
},
"frameworks": [
"arduino"
],
"name": "Heltec T096 Board",
"upload": {
"maximum_ram_size": 235520,
"maximum_size": 815104,
"speed": 115200,
"protocol": "nrfutil",
"protocols": [
"jlink",
"nrfjprog",
"nrfutil",
"stlink"
],
"use_1200bps_touch": true,
"require_upload_port": true,
"wait_for_upload_port": true
},
"url": "https://heltec.org/",
"vendor": "Heltec"
}
51 changes: 48 additions & 3 deletions docs/cli_commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ This document provides an overview of CLI commands that can be sent to MeshCore

---

### Discover zero hop neighbors

**Usage:**
- `discover.neighbors`

---

## Statistics

### Clear Stats
Expand Down Expand Up @@ -238,6 +245,22 @@ This document provides an overview of CLI commands that can be sent to MeshCore
**Note:** Requires reboot to apply
**Serial Only:** `set freq <frequency>`

---

#### View or change this node's rx boosted gain mode (SX12xx only, v1.14.1+)
**Usage:**
- `get radio.rxgain`
- `set radio.rxgain <state>`

**Parameters:**
- `state`: `on`|`off`

**Default:** `on`

**Temporary Note:** If you upgraded from an older version to 1.14.1 without erasing flash, this setting is `off` because of [#2118](https://github.com/meshcore-dev/MeshCore/issues/2118)

---

### System

#### View or change this node's name
Expand Down Expand Up @@ -477,7 +500,29 @@ This document provides an overview of CLI commands that can be sent to MeshCore

---

#### View or change the duty cycle limit
**Usage:**
- `get dutycycle`
- `set dutycycle <value>`

**Parameters:**
- `value`: Duty cycle percentage (1-100)

**Default:** `50%` (equivalent to airtime factor 1.0)

**Examples:**
- `set dutycycle 100` — no duty cycle limit
- `set dutycycle 50` — 50% duty cycle (default)
- `set dutycycle 10` — 10% duty cycle
- `set dutycycle 1` — 1% duty cycle (strictest EU requirement)

> **Note:** Added in firmware v1.15.0

---

#### View or change the airtime factor (duty cycle limit)
> **Deprecated** as of firmware v1.15.0. Use [`get/set dutycycle`](#view-or-change-the-duty-cycle-limit) instead.

**Usage:**
- `get af`
- `set af <value>`
Expand All @@ -487,8 +532,8 @@ This document provides an overview of CLI commands that can be sent to MeshCore
- `af = 1` → ~50% duty
- `af = 2` → ~33% duty
- `af = 3` → ~25% duty
- `af = 9` → ~10% duty
Yyou are responsible for choosing a value that is appropriate for your jurisdiction and channel plan (for example EU 868 Mhz 10% duty cycle regulation).
- `af = 9` → ~10% duty
You are responsible for choosing a value that is appropriate for your jurisdiction and channel plan (for example EU 868 Mhz 10% duty cycle regulation).

**Default:** `1.0`

Expand All @@ -512,7 +557,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore
- `set agc.reset.interval <value>`

**Parameters:**
- `value`: Interval in seconds rounded down to a multiple of 4 (17 becomes 16)
- `value`: Interval in seconds rounded down to a multiple of 4 (17 becomes 16). 0 to disable.

**Default:** `0.0`

Expand Down
27 changes: 27 additions & 0 deletions docs/companion_protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,33 @@ Bytes 7+: Message Text (UTF-8, variable length)

---

### 6. Send Channel Data Datagram

**Purpose**: Send binary datagram data to a channel.

**Command Format**:
```
Byte 0: 0x3E
Bytes 1-2: Data Type (`data_type`, 16-bit little-endian)
Byte 3: Channel Index (0-7)
Bytes 4+: Binary payload bytes (variable length)
```

**Data Type / Transport Mapping**:
- `0x0000` is invalid for this command.
- `0xFFFF` (`DATA_TYPE_DEV`) is the developer namespace for experimenting and developing apps.
- Other non-zero values can be used as assigned application/community namespaces.

**Note**: Applications that need a timestamp should encode it inside the binary payload.

**Limits**:
- Maximum payload length is `163` bytes.
- Larger payloads are rejected with `PACKET_ERROR`.

**Response**: `PACKET_OK` (0x00) on success

---

### 6. Get Message

**Purpose**: Request the next queued message from the device.
Expand Down
2 changes: 1 addition & 1 deletion docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ https://github.com/meshcore-dev/MeshCore/blob/main/src/Packet.h#L19
#define PAYLOAD_TYPE_TXT_MSG 0x02 // a plain text message (prefixed with dest/src hashes, MAC) (enc data: timestamp, text)
#define PAYLOAD_TYPE_ACK 0x03 // a simple ack #define PAYLOAD_TYPE_ADVERT 0x04 // a node advertising its Identity
#define PAYLOAD_TYPE_GRP_TXT 0x05 // an (unverified) group text message (prefixed with channel hash, MAC) (enc data: timestamp, "name: msg")
#define PAYLOAD_TYPE_GRP_DATA 0x06 // an (unverified) group datagram (prefixed with channel hash, MAC) (enc data: timestamp, blob)
#define PAYLOAD_TYPE_GRP_DATA 0x06 // an (unverified) group datagram (prefixed with channel hash, MAC) (enc data: data_type, data_len, blob)
#define PAYLOAD_TYPE_ANON_REQ 0x07 // generic request (prefixed with dest_hash, ephemeral pub_key, MAC) (enc data: ...)
#define PAYLOAD_TYPE_PATH 0x08 // returned path (prefixed with dest/src hashes, MAC) (enc data: path, extra)

Expand Down
20 changes: 20 additions & 0 deletions docs/number_allocations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Number Allocations

This document lists unique numbers/identifiers used in various MeshCore protcol payloads.

# Group Data Types

The `PAYLOAD_TYPE_GRP_DATA` payloads have a 16-bit data-type field, which identifies which application the packet is for.

To make sure multiple applications can function without interfering with each other, the table below is for reserving various ranges of data-type values. Just modify this table, adding a row, then submit a PR to have it authorised/merged.

NOTE: the range FF00 - FFFF is for use while you're developing, doing POC, and for these you don't need to request to use/allocate.

Once you have a working app/project, you need to be able to demonstrate it exists/works, and THEN request type IDs. So, just use the testing/dev range while developing, then request IDs before you transition to publishing your project.

| Data-Type range | App name | Contact |
|-----------------|-----------------------------|------------------------------------------------------|
| 0000 - 00FF | -reserved for internal use- | |
| FF00 - FFFF | -reserved for testing/dev- | |

(add rows, inside the range 0100 - FEFF for custom apps)
18 changes: 17 additions & 1 deletion docs/payloads.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ txt_type
| reply path | (variable) | reply path |


# Group text message / datagram
# Group text message

| Field | Size (bytes) | Description |
|--------------|-----------------|--------------------------------------------|
Expand All @@ -236,6 +236,22 @@ txt_type

The plaintext contained in the ciphertext matches the format described in [plain text message](#plain-text-message). Specifically, it consists of a four byte timestamp, a flags byte, and the message. The flags byte will generally be `0x00` because it is a "plain text message". The message will be of the form `<sender name>: <message body>` (eg., `user123: I'm on my way`).

# Group datagram

| Field | Size (bytes) | Description |
|--------------|-----------------|--------------------------------------------|
| channel hash | 1 | first byte of SHA256 of channel's shared key |
| cipher MAC | 2 | MAC for encrypted data in next field |
| ciphertext | rest of payload | encrypted data, see below for details |

The data contained in the ciphertext uses the format below:

| Field | Size (bytes) | Description |
|--------------|-----------------|--------------------------------------------|
| data type | 2 | Identifier for type of data. (See number_allocations.md) |
| data len | 1 | byte length of data |
| data | rest of payload | (depends on data type) |


# Control data

Expand Down
7 changes: 6 additions & 1 deletion docs/terminal_chat_cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,15 @@ set lon {longitude}
```
Sets your advertisement map longitude. (decimal degrees)

```
set dutycycle {percent}
```
Sets the transmit duty cycle limit (1-100%). Example: `set dutycycle 10` for 10%.

```
set af {air-time-factor}
```
Sets the transmit air-time-factor.
Sets the transmit air-time-factor. Deprecated — use `set dutycycle` instead.


```
Expand Down
Loading