Skip to content

Commit 15d52a6

Browse files
authored
Merge branch 'meshcore-dev:dev' into dev
2 parents 00e0635 + 91e9fce commit 15d52a6

File tree

34 files changed

+185
-134
lines changed

34 files changed

+185
-134
lines changed

examples/companion_radio/MyMesh.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
#define FIRMWARE_VER_CODE 8
99

1010
#ifndef FIRMWARE_BUILD_DATE
11-
#define FIRMWARE_BUILD_DATE "2 Oct 2025"
11+
#define FIRMWARE_BUILD_DATE "13 Nov 2025"
1212
#endif
1313

1414
#ifndef FIRMWARE_VERSION
15-
#define FIRMWARE_VERSION "v1.9.1"
15+
#define FIRMWARE_VERSION "v1.10.0"
1616
#endif
1717

1818
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)

examples/simple_repeater/MyMesh.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,10 @@ int MyMesh::handleRequest(ClientInfo *sender, uint32_t sender_timestamp, uint8_t
170170
telemetry.reset();
171171
telemetry.addVoltage(TELEM_CHANNEL_SELF, (float)board.getBattMilliVolts() / 1000.0f);
172172
// query other sensors -- target specific
173-
sensors.querySensors((sender->isAdmin() ? 0xFF : 0x00) & perm_mask, telemetry);
173+
if ((sender->permissions & PERM_ACL_ROLE_MASK) == PERM_ACL_GUEST) {
174+
perm_mask = 0x00; // just base telemetry allowed
175+
}
176+
sensors.querySensors(perm_mask, telemetry);
174177

175178
uint8_t tlen = telemetry.getSize();
176179
memcpy(&reply_data[4], telemetry.getBuffer(), tlen);

examples/simple_repeater/MyMesh.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ struct NeighbourInfo {
6868
};
6969

7070
#ifndef FIRMWARE_BUILD_DATE
71-
#define FIRMWARE_BUILD_DATE "2 Oct 2025"
71+
#define FIRMWARE_BUILD_DATE "13 Nov 2025"
7272
#endif
7373

7474
#ifndef FIRMWARE_VERSION
75-
#define FIRMWARE_VERSION "v1.9.1"
75+
#define FIRMWARE_VERSION "v1.10.0"
7676
#endif
7777

7878
#define FIRMWARE_ROLE "repeater"
@@ -148,7 +148,7 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
148148

149149
#if ENV_INCLUDE_GPS == 1
150150
void applyGpsPrefs() {
151-
sensors.setSettingByKey("gps", _prefs.gps_enabled?"1":"0");
151+
sensors.setSettingValue("gps", _prefs.gps_enabled?"1":"0");
152152
}
153153
#endif
154154

examples/simple_room_server/MyMesh.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,10 @@ int MyMesh::handleRequest(ClientInfo *sender, uint32_t sender_timestamp, uint8_t
165165
telemetry.reset();
166166
telemetry.addVoltage(TELEM_CHANNEL_SELF, (float)board.getBattMilliVolts() / 1000.0f);
167167
// query other sensors -- target specific
168-
sensors.querySensors((sender->isAdmin() ? 0xFF : 0x00) & perm_mask, telemetry);
168+
if ((sender->permissions & PERM_ACL_ROLE_MASK) == PERM_ACL_GUEST) {
169+
perm_mask = 0x00; // just base telemetry allowed
170+
}
171+
sensors.querySensors(perm_mask, telemetry);
169172

170173
uint8_t tlen = telemetry.getSize();
171174
memcpy(&reply_data[4], telemetry.getBuffer(), tlen);

examples/simple_room_server/MyMesh.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
/* ------------------------------ Config -------------------------------- */
2727

2828
#ifndef FIRMWARE_BUILD_DATE
29-
#define FIRMWARE_BUILD_DATE "2 Oct 2025"
29+
#define FIRMWARE_BUILD_DATE "13 Nov 2025"
3030
#endif
3131

3232
#ifndef FIRMWARE_VERSION
33-
#define FIRMWARE_VERSION "v1.9.1"
33+
#define FIRMWARE_VERSION "v1.10.0"
3434
#endif
3535

3636
#ifndef LORA_FREQ
@@ -154,7 +154,7 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
154154

155155
#if ENV_INCLUDE_GPS == 1
156156
void applyGpsPrefs() {
157-
sensors.setSettingByKey("gps", _prefs.gps_enabled?"1":"0");
157+
sensors.setSettingValue("gps", _prefs.gps_enabled?"1":"0");
158158
}
159159
#endif
160160

examples/simple_sensor/SensorMesh.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,39 @@ bool SensorMesh::handleIncomingMsg(ClientInfo& from, uint32_t timestamp, uint8_t
617617
return false;
618618
}
619619

620+
#define CTL_TYPE_NODE_DISCOVER_REQ 0x80
621+
#define CTL_TYPE_NODE_DISCOVER_RESP 0x90
622+
623+
void SensorMesh::onControlDataRecv(mesh::Packet* packet) {
624+
uint8_t type = packet->payload[0] & 0xF0; // just test upper 4 bits
625+
if (type == CTL_TYPE_NODE_DISCOVER_REQ && packet->payload_len >= 6) {
626+
// TODO: apply rate limiting to these!
627+
int i = 1;
628+
uint8_t filter = packet->payload[i++];
629+
uint32_t tag;
630+
memcpy(&tag, &packet->payload[i], 4); i += 4;
631+
uint32_t since;
632+
if (packet->payload_len >= i+4) { // optional since field
633+
memcpy(&since, &packet->payload[i], 4); i += 4;
634+
} else {
635+
since = 0;
636+
}
637+
638+
if ((filter & (1 << ADV_TYPE_SENSOR)) != 0 && _prefs.discovery_mod_timestamp >= since) {
639+
bool prefix_only = packet->payload[0] & 1;
640+
uint8_t data[6 + PUB_KEY_SIZE];
641+
data[0] = CTL_TYPE_NODE_DISCOVER_RESP | ADV_TYPE_SENSOR; // low 4-bits for node type
642+
data[1] = packet->_snr; // let sender know the inbound SNR ( x 4)
643+
memcpy(&data[2], &tag, 4); // include tag from request, for client to match to
644+
memcpy(&data[6], self_id.pub_key, PUB_KEY_SIZE);
645+
auto resp = createControlData(data, prefix_only ? 6 + 8 : 6 + PUB_KEY_SIZE);
646+
if (resp) {
647+
sendZeroHop(resp, getRetransmitDelay(resp)*4); // apply random delay (widened x4), as multiple nodes can respond to this
648+
}
649+
}
650+
}
651+
}
652+
620653
bool SensorMesh::onPeerPathRecv(mesh::Packet* packet, int sender_idx, const uint8_t* secret, uint8_t* path, uint8_t path_len, uint8_t extra_type, uint8_t* extra, uint8_t extra_len) {
621654
int i = matching_peer_indexes[sender_idx];
622655
if (i < 0 || i >= acl.getNumClients()) {

examples/simple_sensor/SensorMesh.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
#define PERM_RECV_ALERTS_HI (1 << 7) // high priority alerts
3434

3535
#ifndef FIRMWARE_BUILD_DATE
36-
#define FIRMWARE_BUILD_DATE "2 Oct 2025"
36+
#define FIRMWARE_BUILD_DATE "13 Nov 2025"
3737
#endif
3838

3939
#ifndef FIRMWARE_VERSION
40-
#define FIRMWARE_VERSION "v1.9.1"
40+
#define FIRMWARE_VERSION "v1.10.0"
4141
#endif
4242

4343
#define FIRMWARE_ROLE "sensor"
@@ -125,6 +125,7 @@ class SensorMesh : public mesh::Mesh, public CommonCLICallbacks {
125125
void getPeerSharedSecret(uint8_t* dest_secret, int peer_idx) override;
126126
void onPeerDataRecv(mesh::Packet* packet, uint8_t type, int sender_idx, const uint8_t* secret, uint8_t* data, size_t len) override;
127127
bool onPeerPathRecv(mesh::Packet* packet, int sender_idx, const uint8_t* secret, uint8_t* path, uint8_t path_len, uint8_t extra_type, uint8_t* extra, uint8_t extra_len) override;
128+
void onControlDataRecv(mesh::Packet* packet) override;
128129
void onAckRecv(mesh::Packet* packet, uint32_t ack_crc) override;
129130
virtual bool handleIncomingMsg(ClientInfo& from, uint32_t timestamp, uint8_t* data, uint flags, size_t len);
130131
void sendAckTo(const ClientInfo& dest, uint32_t ack_hash);
@@ -155,7 +156,7 @@ class SensorMesh : public mesh::Mesh, public CommonCLICallbacks {
155156

156157
#if ENV_INCLUDE_GPS == 1
157158
void applyGpsPrefs() {
158-
sensors.setSettingByKey("gps", _prefs.gps_enabled?"1":"0");
159+
sensors.setSettingValue("gps", _prefs.gps_enabled?"1":"0");
159160
}
160161
#endif
161162
};

library.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"name": "MeshCore",
3-
"version" : "1.8.0",
3+
"version" : "1.10.0",
44
"dependencies": {
55
"SPI": "*",
66
"Wire": "*",
7-
"jgromes/RadioLib": "^7.1.2",
7+
"jgromes/RadioLib": "^7.3.0",
88
"rweather/Crypto": "^0.4.0",
99
"adafruit/RTClib": "^2.1.3",
1010
"melopero/Melopero RV3028": "^1.1.0",
11-
"electroniccats/CayenneLPP": "1.4.0"
11+
"electroniccats/CayenneLPP": "1.6.1"
1212
},
1313
"build": {
1414
"extraScript": "build_as_lib.py"

src/helpers/CommonCLI.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
547547
int num = mesh::Utils::parseTextParts(tmp, parts, 2, ' ');
548548
const char *key = (num > 0) ? parts[0] : "";
549549
const char *value = (num > 1) ? parts[1] : "null";
550-
if (_sensors->setSettingByKey(key, value)) {
550+
if (_sensors->setSettingValue(key, value)) {
551551
strcpy(reply, "ok");
552552
} else {
553553
strcpy(reply, "can't find custom var");
@@ -579,15 +579,15 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
579579
}
580580
#if ENV_INCLUDE_GPS == 1
581581
} else if (memcmp(command, "gps on", 6) == 0) {
582-
if (_sensors->setSettingByKey("gps", "1")) {
582+
if (_sensors->setSettingValue("gps", "1")) {
583583
_prefs->gps_enabled = 1;
584584
savePrefs();
585585
strcpy(reply, "ok");
586586
} else {
587587
strcpy(reply, "gps toggle not found");
588588
}
589589
} else if (memcmp(command, "gps off", 7) == 0) {
590-
if (_sensors->setSettingByKey("gps", "0")) {
590+
if (_sensors->setSettingValue("gps", "0")) {
591591
_prefs->gps_enabled = 0;
592592
savePrefs();
593593
strcpy(reply, "ok");

src/helpers/SensorManager.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,4 @@ class SensorManager {
3434
}
3535
return NULL;
3636
}
37-
38-
bool setSettingByKey(const char* key, const char* value) {
39-
int num = getNumSettings();
40-
for (int i = 0; i < num; i++) {
41-
if (strcmp(getSettingName(i), key) == 0) {
42-
return setSettingValue(key, value);
43-
}
44-
}
45-
return false;
46-
}
4737
};

0 commit comments

Comments
 (0)