Skip to content

Commit 4a5404d

Browse files
author
Scott Powell
committed
* companion: added CMD_SEND_CONTROL_DATA, and PUSH_CODE_CONTROL_DATA
1 parent ddac13a commit 4a5404d

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

examples/companion_radio/MyMesh.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#define CMD_FACTORY_RESET 51
5252
#define CMD_SEND_PATH_DISCOVERY_REQ 52
5353
#define CMD_SET_FLOOD_SCOPE 54
54+
#define CMD_SEND_CONTROL_DATA 55
5455

5556
#define RESP_CODE_OK 0
5657
#define RESP_CODE_ERR 1
@@ -100,6 +101,7 @@
100101
#define PUSH_CODE_TELEMETRY_RESPONSE 0x8B
101102
#define PUSH_CODE_BINARY_RESPONSE 0x8C
102103
#define PUSH_CODE_PATH_DISCOVERY_RESPONSE 0x8D
104+
#define PUSH_CODE_CONTROL_DATA 0x8E
103105

104106
#define ERR_CODE_UNSUPPORTED_CMD 1
105107
#define ERR_CODE_NOT_FOUND 2
@@ -626,6 +628,26 @@ bool MyMesh::onContactPathRecv(ContactInfo& contact, uint8_t* in_path, uint8_t i
626628
return BaseChatMesh::onContactPathRecv(contact, in_path, in_path_len, out_path, out_path_len, extra_type, extra, extra_len);
627629
}
628630

631+
void MyMesh::onControlDataRecv(mesh::Packet *packet) {
632+
if (packet->payload_len + 4 > sizeof(out_frame)) {
633+
MESH_DEBUG_PRINTLN("onControlDataRecv(), payload_len too long: %d", packet->payload_len);
634+
return;
635+
}
636+
int i = 0;
637+
out_frame[i++] = PUSH_CODE_CONTROL_DATA;
638+
out_frame[i++] = (int8_t)(_radio->getLastSNR() * 4);
639+
out_frame[i++] = (int8_t)(_radio->getLastRSSI());
640+
out_frame[i++] = packet->path_len;
641+
memcpy(&out_frame[i], packet->payload, packet->payload_len);
642+
i += packet->payload_len;
643+
644+
if (_serial->isConnected()) {
645+
_serial->writeFrame(out_frame, i);
646+
} else {
647+
MESH_DEBUG_PRINTLN("onControlDataRecv(), data received while app offline");
648+
}
649+
}
650+
629651
void MyMesh::onRawDataRecv(mesh::Packet *packet) {
630652
if (packet->payload_len + 4 > sizeof(out_frame)) {
631653
MESH_DEBUG_PRINTLN("onRawDataRecv(), payload_len too long: %d", packet->payload_len);
@@ -1523,6 +1545,14 @@ void MyMesh::handleCmdFrame(size_t len) {
15231545
memset(send_scope.key, 0, sizeof(send_scope.key)); // set scope to null
15241546
}
15251547
writeOKFrame();
1548+
} else if (cmd_frame[0] == CMD_SEND_CONTROL_DATA && len >= 2 && (cmd_frame[1] & 0x80) != 0) {
1549+
auto resp = createControlData(&cmd_frame[1], len - 1);
1550+
if (resp) {
1551+
sendZeroHop(resp);
1552+
writeOKFrame();
1553+
} else {
1554+
writeErrFrame(ERR_CODE_TABLE_FULL);
1555+
}
15261556
} else {
15271557
writeErrFrame(ERR_CODE_UNSUPPORTED_CMD);
15281558
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);

examples/companion_radio/MyMesh.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class MyMesh : public BaseChatMesh, public DataStoreHost {
133133
uint8_t onContactRequest(const ContactInfo &contact, uint32_t sender_timestamp, const uint8_t *data,
134134
uint8_t len, uint8_t *reply) override;
135135
void onContactResponse(const ContactInfo &contact, const uint8_t *data, uint8_t len) override;
136+
void onControlDataRecv(mesh::Packet *packet) override;
136137
void onRawDataRecv(mesh::Packet *packet) override;
137138
void onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code, uint8_t flags,
138139
const uint8_t *path_snrs, const uint8_t *path_hashes, uint8_t path_len) override;

0 commit comments

Comments
 (0)