From be68aaed20aa35bf97cfdb214925885b190f1963 Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Sun, 13 Jul 2025 18:50:52 +1000 Subject: [PATCH] * simple_sensor: new REQ_TYPE_GET_ACCESS_LIST --- examples/simple_sensor/SensorMesh.cpp | 14 ++++++++++++++ examples/simple_sensor/SensorMesh.h | 4 +--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/simple_sensor/SensorMesh.cpp b/examples/simple_sensor/SensorMesh.cpp index 2943fd90..d169f9b5 100644 --- a/examples/simple_sensor/SensorMesh.cpp +++ b/examples/simple_sensor/SensorMesh.cpp @@ -51,6 +51,7 @@ #define REQ_TYPE_KEEP_ALIVE 0x02 #define REQ_TYPE_GET_TELEMETRY_DATA 0x03 #define REQ_TYPE_GET_AVG_MIN_MAX 0x04 +#define REQ_TYPE_GET_ACCESS_LIST 0x05 #define RESP_SERVER_LOGIN_OK 0 // response to ANON_REQ @@ -286,6 +287,19 @@ uint8_t SensorMesh::handleRequest(uint16_t perms, uint32_t sender_timestamp, uin } return ofs; } + if (req_type == REQ_TYPE_GET_ACCESS_LIST && (perms & PERM_IS_ADMIN) != 0) { + uint8_t res1 = payload[0]; // reserved for future (extra query params) + uint8_t res2 = payload[1]; + if (res1 == 0 && res2 == 0) { + uint8_t ofs = 4; + for (int i = 0; i < num_contacts && ofs + 8 <= sizeof(reply_data) - 4; i++) { + auto c = &contacts[i]; + memcpy(&reply_data[ofs], c->id.pub_key, 6); ofs += 6; // just 6-byte pub_key prefix + memcpy(&reply_data[ofs], &c->permissions, 2); ofs += 2; + } + return ofs; + } + } return 0; // unknown command } diff --git a/examples/simple_sensor/SensorMesh.h b/examples/simple_sensor/SensorMesh.h index 6edbfc26..77c30a8d 100644 --- a/examples/simple_sensor/SensorMesh.h +++ b/examples/simple_sensor/SensorMesh.h @@ -51,9 +51,7 @@ struct ContactInfo { #define FIRMWARE_ROLE "sensor" -#ifndef MAX_CONTACTS - #define MAX_CONTACTS 32 -#endif +#define MAX_CONTACTS 20 #define MAX_SEARCH_RESULTS 8 #define MAX_CONCURRENT_ALERTS 4