Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
4ac8742
feat: use RAK hardware crypto on advert processing
NickDunklee Jun 23, 2026
7a2764e
Added Heltec t096 and seeed t1000-e
NickDunklee Jun 24, 2026
8c033a5
Merge remote-tracking branch 'upstream/dev' into rak-advert-hw-encryp…
NickDunklee Jul 14, 2026
a9d2574
feat: add more crypto
NickDunklee Jul 14, 2026
2af1e6d
* first draft of new ConfigSerializer. (simple embedded JSON prefs)
ripplebiz Jul 14, 2026
63f4b17
* misc fixes
ripplebiz Jul 15, 2026
85285c6
Merge branch 'dev' into config-serializer
ripplebiz Jul 16, 2026
874f0c9
Minor ifdef rename as it now covers more than just Ed25519
NickDunklee Jul 17, 2026
f515716
* new NodePrefs for companion
ripplebiz Jul 17, 2026
ae2667e
* added unit tests for ConfigSerializer
ripplebiz Jul 17, 2026
d9f1e12
* loadSerial(), support for \n and \r
ripplebiz Jul 17, 2026
2189f22
* added prefs initialisers to match original zeroed state
ripplebiz Jul 18, 2026
a0b52be
* RP2040 build fixes
ripplebiz Jul 18, 2026
79dc1de
fix: preserve UTF-8 advert names
Jul 20, 2026
59e9a79
Merge branch 'dev' into rak-advert-hw-encryption
NickDunklee Jul 20, 2026
b8504e5
* refactor of Color mapping in UITasks / DisplayDrivers
ripplebiz Jul 22, 2026
a96a66a
* build fixes for NullDisplayDriver
ripplebiz Jul 22, 2026
56274db
* build fixes for old ESP32 boards
ripplebiz Jul 22, 2026
783b21b
Global nrf52 hardware crypto, removed from individual configs
NickDunklee Jul 23, 2026
ee79df4
Merge branch 'dev' into config-serializer
ripplebiz Jul 24, 2026
3857f45
* monochrome displays now do _not_ invert titlebar
ripplebiz Jul 24, 2026
0c04a47
* fixed for mono ST7789 display driver
ripplebiz Jul 24, 2026
f83ad03
* T114 display fix
ripplebiz Jul 24, 2026
b62b421
docs: increase header levels on payloads page to fix table of contents
blowfishpro Jul 26, 2026
cee6d94
Merge pull request #3040 from blowfishpro/docs/FixPayloadDocsFormatting
liamcottle Jul 27, 2026
301bc10
Merge pull request #3034 from meshcore-dev/ui-color-refactor
ripplebiz Jul 27, 2026
c86e63d
Merge pull request #2982 from meshcore-dev/config-serializer
ripplebiz Jul 27, 2026
5de857f
initial ch390 ethernet support for thinknode m7 companion
liamcottle Jul 17, 2026
b4143a4
rename class
liamcottle Jul 17, 2026
e672679
refactored companion interfaces to allow for multiple active connecti…
liamcottle Jul 19, 2026
203fd4e
refactor rak13800 to new ethernet interface class
liamcottle Jul 27, 2026
834ad72
remove old rak ethernet interface
liamcottle Jul 27, 2026
e7f2c71
usb companion firmwares now require build flag to include usb interface
liamcottle Jul 27, 2026
dd778e2
fix bluetooth toggle on ui tiny
liamcottle Jul 27, 2026
4050b7d
nRF52840 "start ota" Failure Recovery
entr0p1 Jul 28, 2026
3a9f19c
room_server: add room.post system posts
Che177 Jul 28, 2026
adc631f
Merge pull request #3048 from entr0p1/fix/startota-failure-recovery
liamcottle Jul 28, 2026
5a04e06
room_server: use standard mesh debug logging
Che177 Jul 29, 2026
d7f378b
Clean up debugs left on in platform.ini files
entr0p1 Jul 29, 2026
20f55a4
fix unnecessary IRQ clear
oltaco Jul 29, 2026
9f73fbf
Merge pull request #3062 from oltaco/fix-irq-clear
ripplebiz Jul 29, 2026
a7426de
LR1110: fix unnecessary IRQ clear
oltaco Jul 29, 2026
a5c323c
STM32WLx: add IRQ timeout logic
oltaco Jul 29, 2026
a3732e1
SX1268: add IRQ timeout logic
oltaco Jul 29, 2026
79eb7f5
LLCC68: add IRQ timeout logic
oltaco Jul 29, 2026
279ac78
Merge pull request #3049 from liamcottle/feature/ethernet
ripplebiz Jul 29, 2026
6e39cff
Merge pull request #3063 from oltaco/unify-irq-timeout
ripplebiz Jul 29, 2026
b797ca1
Merge pull request #3060 from entr0p1/fix/mesh-debug-active
ripplebiz Jul 30, 2026
57ddada
Merge pull request #3004 from axhoff/agent/preserve-utf8-advert-names
ripplebiz Jul 30, 2026
db23280
Merge pull request #2688 from Che177/feature/room-server-system-posts
ripplebiz Jul 30, 2026
78723d2
LR1110: fix startReceive() passing an IRQ bit as the RX timeout
Jul 30, 2026
ae1b610
fix: M5Stack Unit C6L merged.bin fails to boot (flash_mode qio->dio)
jirogit Aug 2, 2026
626a82f
Merge pull request #2824 from NickDunklee/rak-advert-hw-encryption
ripplebiz Aug 2, 2026
d6ee3a1
Merge pull request #3098 from jirogit/fix/unit-c6l-flash-mode-dio
liamcottle Aug 3, 2026
5d940a1
Clean up comments in startReceive method
oltaco Aug 3, 2026
9d902e6
Merge pull request #3076 from MDamon/fix/lr1110-rx-timeout
oltaco Aug 3, 2026
c90493f
Add Muzi Base board support (Duo + Uno + SuperIO)
tjdownes Jul 25, 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
72 changes: 72 additions & 0 deletions boards/muzi_base.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"build": {
"arduino": {
"ldscript": "nrf52840_s140_v6.ld"
},
"core": "nRF5",
"cpu": "cortex-m4",
"extra_flags": "-DARDUINO_NRF52840_MUZI_BASE -DNRF52840_XXAA",
"f_cpu": "64000000L",
"hwids": [
[
"0x239A",
"0x4405"
],
[
"0x239A",
"0x0029"
],
[
"0x239A",
"0x002A"
]
],
"usb_product": "muzi_base",
"mcu": "nrf52840",
"variant": "MUZI_BASE",
"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",
"onboard_tools": [
"jlink"
],
"svd_path": "nrf52840.svd",
"openocd_target": "nrf52.cfg"
},
"frameworks": [
"arduino"
],
"name": "Muzi Base",
"upload": {
"maximum_ram_size": 248832,
"maximum_size": 815104,
"speed": 115200,
"use_1200bps_touch": true,
"require_upload_port": true,
"wait_for_upload_port": true,
"protocol": "nrfutil",
"protocols": [
"jlink",
"nrfjprog",
"nrfutil",
"stlink"
]
},
"url": "https://github.com/muzi-works",
"vendor": "MuziWorks"
}
2 changes: 1 addition & 1 deletion docs/cli_commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore

**Default:** Varies by board

**Note:** Max length varies. If a location is set, the max length is 24 bytes; 32 otherwise. Emoji and unicode characters may take more than one byte.
**Note:** Advertised names can use up to 23 bytes when location is included and 31 bytes otherwise. Emoji and Unicode characters may take more than one byte. Names that exceed the available advert space are truncated at a valid UTF-8 code point boundary.

---

Expand Down
52 changes: 26 additions & 26 deletions docs/payloads.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ NOTE: all 16 and 32-bit integer fields are Little Endian.

* Node hash: the first byte of the node's public key

# Node advertisement
## Node advertisement
This kind of payload notifies receivers that a node exists, and gives information about the node

| Field | Size (bytes) | Description |
Expand Down Expand Up @@ -57,7 +57,7 @@ Appdata Flags
| `0x40` | has feature 2 | Reserved for future use. |
| `0x80` | has name | appdata contains a node name |

# Acknowledgement
## Acknowledgement

An acknowledgement that a message was received. Note that for returned path messages, an acknowledgement can be sent in the "extra" payload (see [Returned Path](#returned-path)) instead of as a separate acknowledgement packet. CLI commands do not cause acknowledgement responses, neither discrete nor extra.

Expand All @@ -66,7 +66,7 @@ An acknowledgement that a message was received. Note that for returned path mess
| checksum | 4 | CRC checksum of message timestamp, text, and sender pubkey |


# Returned path, request, response, and plain text message
## Returned path, request, response, and plain text message

Returned path, request, response, and plain text messages are all formatted in the same way. See the subsection for more details about the ciphertext's associated plaintext representation.

Expand All @@ -77,7 +77,7 @@ Returned path, request, response, and plain text messages are all formatted in t
| cipher MAC | 2 | MAC for encrypted data in next field |
| ciphertext | rest of payload | encrypted message, see subsections below for details |

## Returned path
### Returned path

Returned path messages provide a description of the route a packet took from the original author. Receivers will send returned path messages to the author of the original message.

Expand All @@ -88,7 +88,7 @@ Returned path messages provide a description of the route a packet took from the
| extra type | 1 | extra, bundled payload type, eg., acknowledgement or response. Same values as in [Packet Format](./packet_format.md) |
| extra | rest of data | extra, bundled payload content, follows same format as main content defined by this document |

## Request
### Request

| Field | Size (bytes) | Description |
|--------------|-----------------|------------------------------------------|
Expand All @@ -102,7 +102,7 @@ For the common chat/server helpers in `BaseChatMesh`, the current request type v
| `0x01` | get stats | get stats of repeater or room server |
| `0x02` | keepalive | keep-alive request used for maintained connections |

### Get stats
#### Get stats

Gets information about the node, possibly including the following:

Expand All @@ -125,40 +125,40 @@ Gets information about the node, possibly including the following:
* Number posted (?)
* Number of post pushes (?)

### Get telemetry data
#### Get telemetry data

Not defined in `BaseChatMesh`. Sensor- and application-specific request payloads may be implemented by higher-level firmware.

### Get Telemetry
#### Get Telemetry

Not defined in `BaseChatMesh`.

### Get Min/Max/Ave (Sensor nodes)
#### Get Min/Max/Ave (Sensor nodes)

Not defined in `BaseChatMesh`.

### Get Access List
#### Get Access List

Not defined in `BaseChatMesh`.

### Get Neighbors
#### Get Neighbors

Not defined in `BaseChatMesh`.

### Get Owner Info
#### Get Owner Info

Not defined in `BaseChatMesh`.


## Response
### Response

| Field | Size (bytes) | Description |
|---------|-----------------|-----------------------------------|
| content | rest of payload | application-defined response body |

Response contents are opaque application data. There is no single generic response envelope beyond the encrypted payload wrapper shown above.

## Plain text message
### Plain text message

| Field | Size (bytes) | Description |
|--------------------|-----------------|-----------------------------------------------------------------------------------|
Expand All @@ -174,7 +174,7 @@ txt_type
| `0x01` | CLI command | the command text of the message |
| `0x02` | signed plain text message | first four bytes is sender pubkey prefix, followed by plain text message |

# Anonymous request
## Anonymous request

| Field | Size (bytes) | Description |
|------------------|-----------------|-------------------------------------------|
Expand All @@ -183,22 +183,22 @@ txt_type
| cipher MAC | 2 | MAC for encrypted data in next field |
| ciphertext | rest of payload | encrypted message, see below for details |

## Room server login
### Room server login

| Field | Size (bytes) | Description |
|----------------|-----------------|-------------------------------------------------------------------------------|
| timestamp | 4 | sender time (unix timestamp) |
| sync timestamp | 4 | sender's "sync messages SINCE x" timestamp |
| password | rest of message | password for room |

## Repeater/Sensor login
### Repeater/Sensor login

| Field | Size (bytes) | Description |
|----------------|-----------------|-------------------------------------------------------------------------------|
| timestamp | 4 | sender time (unix timestamp) |
| password | rest of message | password for repeater/sensor |

## Repeater - Regions request
### Repeater - Regions request

| Field | Size (bytes) | Description |
|----------------|--------------|------------------------------|
Expand All @@ -207,7 +207,7 @@ txt_type
| reply path len | 1 | path len for reply |
| reply path | (variable) | reply path |

## Repeater - Owner info request
### Repeater - Owner info request

| Field | Size (bytes) | Description |
|----------------|--------------|------------------------------|
Expand All @@ -216,7 +216,7 @@ txt_type
| reply path len | 1 | path len for reply |
| reply path | (variable) | reply path |

## Repeater - Clock and status request
### Repeater - Clock and status request

| Field | Size (bytes) | Description |
|----------------|--------------|------------------------------|
Expand All @@ -226,7 +226,7 @@ txt_type
| reply path | (variable) | reply path |


# Group text message
## Group text message

| Field | Size (bytes) | Description |
|--------------|-----------------|----------------------------------------------|
Expand All @@ -236,7 +236,7 @@ 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
## Group datagram

| Field | Size (bytes) | Description |
|--------------|-----------------|----------------------------------------------|
Expand All @@ -253,14 +253,14 @@ The data contained in the ciphertext uses the format below:
| data | rest of payload | (depends on data type) |


# Control data
## Control data

| Field | Size (bytes) | Description |
|--------------|-----------------|--------------------------------------------|
| flags | 1 | upper 4 bits is sub_type |
| data | rest of payload | typically unencrypted data |

## DISCOVER_REQ (sub_type)
### DISCOVER_REQ (sub_type)

| Field | Size (bytes) | Description |
|--------------|-----------------|----------------------------------------------|
Expand All @@ -269,7 +269,7 @@ The data contained in the ciphertext uses the format below:
| tag | 4 | randomly generate by sender |
| since | 4 | (optional) epoch timestamp (0 by default) |

## DISCOVER_RESP (sub_type)
### DISCOVER_RESP (sub_type)

| Field | Size (bytes) | Description |
|--------------|-----------------|--------------------------------------------|
Expand All @@ -279,6 +279,6 @@ The data contained in the ciphertext uses the format below:
| pubkey | 8 or 32 | node's ID (or prefix) |


# Custom packet
## Custom packet

Custom packets have no defined format.
12 changes: 6 additions & 6 deletions examples/companion_radio/AbstractUITask.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <helpers/ui/DisplayDriver.h>
#include <helpers/ui/UIScreen.h>
#include <helpers/SensorManager.h>
#include <helpers/BaseSerialInterface.h>
#include <helpers/MultiSerialInterface.h>
#include <Arduino.h>

#ifdef PIN_BUZZER
Expand All @@ -25,20 +25,20 @@ enum class UIEventType {
class AbstractUITask {
protected:
mesh::MainBoard* _board;
BaseSerialInterface* _serial;
MultiSerialInterface* _interfaceManager;
bool _connected;

AbstractUITask(mesh::MainBoard* board, BaseSerialInterface* serial) : _board(board), _serial(serial) {
AbstractUITask(mesh::MainBoard* board, MultiSerialInterface* interfaceManager) : _board(board), _interfaceManager(interfaceManager) {
_connected = false;
}

public:
void setHasConnection(bool connected) { _connected = connected; }
bool hasConnection() const { return _connected; }
uint16_t getBattMilliVolts() const { return _board->getBattMilliVolts(); }
bool isSerialEnabled() const { return _serial->isEnabled(); }
void enableSerial() { _serial->enable(); }
void disableSerial() { _serial->disable(); }
bool isBluetoothEnabled() const { return _interfaceManager->isBluetoothEnabled(); }
void enableBluetooth() { _interfaceManager->enableBluetooth(); }
void disableBluetooth() { _interfaceManager->disableBluetooth(); }
virtual void msgRead(int msgcount) = 0;
virtual void newMsg(uint8_t path_len, const char* from_name, const char* text, int msgcount) = 0;
virtual void notify(UIEventType t = UIEventType::none) = 0;
Expand Down
Loading
Loading