* companion: added CMD_SEND_CONTROL_DATA, and PUSH_CODE_CONTROL_DATA
This commit is contained in:
@@ -51,6 +51,7 @@
|
|||||||
#define CMD_FACTORY_RESET 51
|
#define CMD_FACTORY_RESET 51
|
||||||
#define CMD_SEND_PATH_DISCOVERY_REQ 52
|
#define CMD_SEND_PATH_DISCOVERY_REQ 52
|
||||||
#define CMD_SET_FLOOD_SCOPE 54
|
#define CMD_SET_FLOOD_SCOPE 54
|
||||||
|
#define CMD_SEND_CONTROL_DATA 55
|
||||||
|
|
||||||
#define RESP_CODE_OK 0
|
#define RESP_CODE_OK 0
|
||||||
#define RESP_CODE_ERR 1
|
#define RESP_CODE_ERR 1
|
||||||
@@ -100,6 +101,7 @@
|
|||||||
#define PUSH_CODE_TELEMETRY_RESPONSE 0x8B
|
#define PUSH_CODE_TELEMETRY_RESPONSE 0x8B
|
||||||
#define PUSH_CODE_BINARY_RESPONSE 0x8C
|
#define PUSH_CODE_BINARY_RESPONSE 0x8C
|
||||||
#define PUSH_CODE_PATH_DISCOVERY_RESPONSE 0x8D
|
#define PUSH_CODE_PATH_DISCOVERY_RESPONSE 0x8D
|
||||||
|
#define PUSH_CODE_CONTROL_DATA 0x8E
|
||||||
|
|
||||||
#define ERR_CODE_UNSUPPORTED_CMD 1
|
#define ERR_CODE_UNSUPPORTED_CMD 1
|
||||||
#define ERR_CODE_NOT_FOUND 2
|
#define ERR_CODE_NOT_FOUND 2
|
||||||
@@ -626,6 +628,26 @@ bool MyMesh::onContactPathRecv(ContactInfo& contact, uint8_t* in_path, uint8_t i
|
|||||||
return BaseChatMesh::onContactPathRecv(contact, in_path, in_path_len, out_path, out_path_len, extra_type, extra, extra_len);
|
return BaseChatMesh::onContactPathRecv(contact, in_path, in_path_len, out_path, out_path_len, extra_type, extra, extra_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyMesh::onControlDataRecv(mesh::Packet *packet) {
|
||||||
|
if (packet->payload_len + 4 > sizeof(out_frame)) {
|
||||||
|
MESH_DEBUG_PRINTLN("onControlDataRecv(), payload_len too long: %d", packet->payload_len);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int i = 0;
|
||||||
|
out_frame[i++] = PUSH_CODE_CONTROL_DATA;
|
||||||
|
out_frame[i++] = (int8_t)(_radio->getLastSNR() * 4);
|
||||||
|
out_frame[i++] = (int8_t)(_radio->getLastRSSI());
|
||||||
|
out_frame[i++] = packet->path_len;
|
||||||
|
memcpy(&out_frame[i], packet->payload, packet->payload_len);
|
||||||
|
i += packet->payload_len;
|
||||||
|
|
||||||
|
if (_serial->isConnected()) {
|
||||||
|
_serial->writeFrame(out_frame, i);
|
||||||
|
} else {
|
||||||
|
MESH_DEBUG_PRINTLN("onControlDataRecv(), data received while app offline");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MyMesh::onRawDataRecv(mesh::Packet *packet) {
|
void MyMesh::onRawDataRecv(mesh::Packet *packet) {
|
||||||
if (packet->payload_len + 4 > sizeof(out_frame)) {
|
if (packet->payload_len + 4 > sizeof(out_frame)) {
|
||||||
MESH_DEBUG_PRINTLN("onRawDataRecv(), payload_len too long: %d", packet->payload_len);
|
MESH_DEBUG_PRINTLN("onRawDataRecv(), payload_len too long: %d", packet->payload_len);
|
||||||
@@ -1523,6 +1545,14 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
memset(send_scope.key, 0, sizeof(send_scope.key)); // set scope to null
|
memset(send_scope.key, 0, sizeof(send_scope.key)); // set scope to null
|
||||||
}
|
}
|
||||||
writeOKFrame();
|
writeOKFrame();
|
||||||
|
} else if (cmd_frame[0] == CMD_SEND_CONTROL_DATA && len >= 2 && (cmd_frame[1] & 0x80) != 0) {
|
||||||
|
auto resp = createControlData(&cmd_frame[1], len - 1);
|
||||||
|
if (resp) {
|
||||||
|
sendZeroHop(resp);
|
||||||
|
writeOKFrame();
|
||||||
|
} else {
|
||||||
|
writeErrFrame(ERR_CODE_TABLE_FULL);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
writeErrFrame(ERR_CODE_UNSUPPORTED_CMD);
|
writeErrFrame(ERR_CODE_UNSUPPORTED_CMD);
|
||||||
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);
|
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ protected:
|
|||||||
uint8_t onContactRequest(const ContactInfo &contact, uint32_t sender_timestamp, const uint8_t *data,
|
uint8_t onContactRequest(const ContactInfo &contact, uint32_t sender_timestamp, const uint8_t *data,
|
||||||
uint8_t len, uint8_t *reply) override;
|
uint8_t len, uint8_t *reply) override;
|
||||||
void onContactResponse(const ContactInfo &contact, const uint8_t *data, uint8_t len) override;
|
void onContactResponse(const ContactInfo &contact, const uint8_t *data, uint8_t len) override;
|
||||||
|
void onControlDataRecv(mesh::Packet *packet) override;
|
||||||
void onRawDataRecv(mesh::Packet *packet) override;
|
void onRawDataRecv(mesh::Packet *packet) override;
|
||||||
void onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code, uint8_t flags,
|
void onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code, uint8_t flags,
|
||||||
const uint8_t *path_snrs, const uint8_t *path_hashes, uint8_t path_len) override;
|
const uint8_t *path_snrs, const uint8_t *path_hashes, uint8_t path_len) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user