mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-03-30 14:55:46 +00:00
* companion support for TRACE packets. (CMD_SEND_TRACE_PATH, PUSH_CODE_TRACE_DATA)
This commit is contained in:
@@ -175,6 +175,7 @@ static uint32_t _atoi(const char* sp) {
|
||||
#define CMD_SIGN_START 33
|
||||
#define CMD_SIGN_DATA 34
|
||||
#define CMD_SIGN_FINISH 35
|
||||
#define CMD_SEND_TRACE_PATH 36
|
||||
|
||||
#define RESP_CODE_OK 0
|
||||
#define RESP_CODE_ERR 1
|
||||
@@ -208,6 +209,7 @@ static uint32_t _atoi(const char* sp) {
|
||||
#define PUSH_CODE_LOGIN_FAIL 0x86
|
||||
#define PUSH_CODE_STATUS_RESPONSE 0x87
|
||||
#define PUSH_CODE_LOG_RX_DATA 0x88
|
||||
#define PUSH_CODE_TRACE_DATA 0x89
|
||||
|
||||
/* -------------------------------------------------------------------------------------- */
|
||||
|
||||
@@ -710,6 +712,25 @@ protected:
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
int i = 0;
|
||||
out_frame[i++] = PUSH_CODE_TRACE_DATA;
|
||||
out_frame[i++] = 0; // reserved
|
||||
out_frame[i++] = path_len;
|
||||
out_frame[i++] = flags;
|
||||
memcpy(&out_frame[i], &tag, 4); i += 4;
|
||||
memcpy(&out_frame[i], &auth_code, 4); i += 4;
|
||||
memcpy(&out_frame[i], path_hashes, path_len); i += path_len;
|
||||
memcpy(&out_frame[i], path_snrs, path_len); i += path_len;
|
||||
out_frame[i++] = (int8_t)(_radio->getLastSNR() * 4); // extra/final SNR (to this node)
|
||||
|
||||
if (_serial->isConnected()) {
|
||||
_serial->writeFrame(out_frame, i);
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("onTraceRecv(), data received while app offline");
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const override {
|
||||
return SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis);
|
||||
}
|
||||
@@ -1337,6 +1358,18 @@ public:
|
||||
} else {
|
||||
writeErrFrame();
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SEND_TRACE_PATH && len > 10 && len - 10 < MAX_PATH_SIZE) {
|
||||
uint32_t tag, auth;
|
||||
memcpy(&tag, &cmd_frame[1], 4);
|
||||
memcpy(&auth, &cmd_frame[5], 4);
|
||||
auto pkt = createTrace(tag, auth, cmd_frame[9]);
|
||||
if (pkt) {
|
||||
uint8_t path_len = len - 10;
|
||||
sendDirect(pkt, &cmd_frame[10], path_len);
|
||||
writeOKFrame();
|
||||
} else {
|
||||
writeErrFrame();
|
||||
}
|
||||
} else {
|
||||
writeErrFrame();
|
||||
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);
|
||||
|
||||
Reference in New Issue
Block a user