Browse Source

feat(log): name payload types in packet log

Co-authored-by: Cursor <[email protected]>
pull/2991/head
Ben Allfree 1 week ago
parent
commit
761a9d4244
  1. 24
      examples/simple_repeater/MyMesh.cpp
  2. 24
      examples/simple_room_server/MyMesh.cpp
  3. 40
      src/Packet.cpp
  4. 3
      src/Packet.h

24
examples/simple_repeater/MyMesh.cpp

@ -463,6 +463,14 @@ const char *MyMesh::getLogDateTime() {
return tmp;
}
namespace {
const char* packetLogTypeLabel(const mesh::Packet* pkt) {
static char label[40];
mesh::formatPayloadType(pkt->getPayloadType(), label, sizeof label);
return label;
}
}
void MyMesh::logRxRaw(float snr, float rssi, const uint8_t raw[], int len) {
#if MESH_PACKET_LOGGING
Serial.print(getLogDateTime());
@ -474,8 +482,8 @@ void MyMesh::logRxRaw(float snr, float rssi, const uint8_t raw[], int len) {
void MyMesh::mirrorPacketLogRxToSerial(mesh::Packet *pkt, int len, float score) {
Serial.print(getLogDateTime());
Serial.printf(": RX, len=%d (type=%d, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
pkt->getPayloadType(), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
Serial.printf(": RX, len=%d (type=%s, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
packetLogTypeLabel(pkt), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
(int)_radio->getLastSNR(), (int)_radio->getLastRSSI(), (int)(score * 1000));
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -487,7 +495,7 @@ void MyMesh::mirrorPacketLogRxToSerial(mesh::Packet *pkt, int len, float score)
void MyMesh::mirrorPacketLogTxToSerial(mesh::Packet *pkt, int len) {
Serial.print(getLogDateTime());
Serial.printf(": TX, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
Serial.printf(": TX, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -499,7 +507,7 @@ void MyMesh::mirrorPacketLogTxToSerial(mesh::Packet *pkt, int len) {
void MyMesh::mirrorPacketLogTxFailToSerial(mesh::Packet *pkt, int len) {
Serial.print(getLogDateTime());
Serial.printf(": TX FAIL!, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
Serial.printf(": TX FAIL!, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
Serial.print("\r\n");
}
@ -515,8 +523,8 @@ void MyMesh::logRx(mesh::Packet *pkt, int len, float score) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": RX, len=%d (type=%d, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
pkt->getPayloadType(), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
f.printf(": RX, len=%d (type=%s, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
packetLogTypeLabel(pkt), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
(int)_radio->getLastSNR(), (int)_radio->getLastRSSI(), (int)(score * 1000));
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -544,7 +552,7 @@ void MyMesh::logTx(mesh::Packet *pkt, int len) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": TX, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
f.printf(": TX, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -566,7 +574,7 @@ void MyMesh::logTxFail(mesh::Packet *pkt, int len) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": TX FAIL!, len=%d (type=%d, route=%s, payload_len=%d)\n", len, pkt->getPayloadType(),
f.printf(": TX FAIL!, len=%d (type=%s, route=%s, payload_len=%d)\n", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
f.close();
}

24
examples/simple_room_server/MyMesh.cpp

@ -199,6 +199,14 @@ int MyMesh::handleRequest(ClientInfo *sender, uint32_t sender_timestamp, uint8_t
return 0; // unknown command
}
namespace {
const char* packetLogTypeLabel(const mesh::Packet* pkt) {
static char label[40];
mesh::formatPayloadType(pkt->getPayloadType(), label, sizeof label);
return label;
}
}
void MyMesh::logRxRaw(float snr, float rssi, const uint8_t raw[], int len) {
#if MESH_PACKET_LOGGING
Serial.print(getLogDateTime());
@ -210,8 +218,8 @@ void MyMesh::logRxRaw(float snr, float rssi, const uint8_t raw[], int len) {
void MyMesh::mirrorPacketLogRxToSerial(mesh::Packet *pkt, int len, float score) {
Serial.print(getLogDateTime());
Serial.printf(": RX, len=%d (type=%d, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
pkt->getPayloadType(), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
Serial.printf(": RX, len=%d (type=%s, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
packetLogTypeLabel(pkt), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
(int)_radio->getLastSNR(), (int)_radio->getLastRSSI(), (int)(score * 1000));
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -223,7 +231,7 @@ void MyMesh::mirrorPacketLogRxToSerial(mesh::Packet *pkt, int len, float score)
void MyMesh::mirrorPacketLogTxToSerial(mesh::Packet *pkt, int len) {
Serial.print(getLogDateTime());
Serial.printf(": TX, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
Serial.printf(": TX, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -235,7 +243,7 @@ void MyMesh::mirrorPacketLogTxToSerial(mesh::Packet *pkt, int len) {
void MyMesh::mirrorPacketLogTxFailToSerial(mesh::Packet *pkt, int len) {
Serial.print(getLogDateTime());
Serial.printf(": TX FAIL!, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
Serial.printf(": TX FAIL!, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
Serial.print("\r\n");
}
@ -245,8 +253,8 @@ void MyMesh::logRx(mesh::Packet *pkt, int len, float score) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": RX, len=%d (type=%d, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
pkt->getPayloadType(), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
f.printf(": RX, len=%d (type=%s, route=%s, payload_len=%d) SNR=%d RSSI=%d score=%d", len,
packetLogTypeLabel(pkt), pkt->isRouteDirect() ? "D" : "F", pkt->payload_len,
(int)_radio->getLastSNR(), (int)_radio->getLastRSSI(), (int)(score * 1000));
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -267,7 +275,7 @@ void MyMesh::logTx(mesh::Packet *pkt, int len) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": TX, len=%d (type=%d, route=%s, payload_len=%d)", len, pkt->getPayloadType(),
f.printf(": TX, len=%d (type=%s, route=%s, payload_len=%d)", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH || pkt->getPayloadType() == PAYLOAD_TYPE_REQ ||
@ -288,7 +296,7 @@ void MyMesh::logTxFail(mesh::Packet *pkt, int len) {
File f = openAppend(PACKET_LOG_FILE);
if (f) {
f.print(getLogDateTime());
f.printf(": TX FAIL!, len=%d (type=%d, route=%s, payload_len=%d)\n", len, pkt->getPayloadType(),
f.printf(": TX FAIL!, len=%d (type=%s, route=%s, payload_len=%d)\n", len, packetLogTypeLabel(pkt),
pkt->isRouteDirect() ? "D" : "F", pkt->payload_len);
f.close();
}

40
src/Packet.cpp

@ -1,9 +1,49 @@
#include "Packet.h"
#include <stdio.h>
#include <string.h>
#include <SHA256.h>
namespace mesh {
namespace {
struct PayloadTypeName { uint8_t type; const char* name; };
static const PayloadTypeName PAYLOAD_TYPE_NAMES[] = {
{ PAYLOAD_TYPE_REQ, "PAYLOAD_TYPE_REQ" },
{ PAYLOAD_TYPE_RESPONSE, "PAYLOAD_TYPE_RESPONSE" },
{ PAYLOAD_TYPE_TXT_MSG, "PAYLOAD_TYPE_TXT_MSG" },
{ PAYLOAD_TYPE_ACK, "PAYLOAD_TYPE_ACK" },
{ PAYLOAD_TYPE_ADVERT, "PAYLOAD_TYPE_ADVERT" },
{ PAYLOAD_TYPE_GRP_TXT, "PAYLOAD_TYPE_GRP_TXT" },
{ PAYLOAD_TYPE_GRP_DATA, "PAYLOAD_TYPE_GRP_DATA" },
{ PAYLOAD_TYPE_ANON_REQ, "PAYLOAD_TYPE_ANON_REQ" },
{ PAYLOAD_TYPE_PATH, "PAYLOAD_TYPE_PATH" },
{ PAYLOAD_TYPE_TRACE, "PAYLOAD_TYPE_TRACE" },
{ PAYLOAD_TYPE_MULTIPART, "PAYLOAD_TYPE_MULTIPART" },
{ PAYLOAD_TYPE_CONTROL, "PAYLOAD_TYPE_CONTROL" },
{ PAYLOAD_TYPE_OTA, "PAYLOAD_TYPE_OTA" },
{ PAYLOAD_TYPE_RAW_CUSTOM, "PAYLOAD_TYPE_RAW_CUSTOM" },
};
} // namespace
const char* payloadTypeName(uint8_t type) {
for (unsigned i = 0; i < sizeof(PAYLOAD_TYPE_NAMES) / sizeof(PAYLOAD_TYPE_NAMES[0]); i++) {
if (PAYLOAD_TYPE_NAMES[i].type == type) return PAYLOAD_TYPE_NAMES[i].name;
}
return nullptr;
}
void formatPayloadType(uint8_t type, char* buf, size_t cap) {
const char* name = payloadTypeName(type);
if (name) {
snprintf(buf, cap, "%s (0x%02X)", name, type);
} else {
snprintf(buf, cap, "UNKNOWN (0x%02X)", type);
}
}
Packet::Packet() {
header = 0;
path_len = 0;

3
src/Packet.h

@ -111,4 +111,7 @@ public:
bool readFrom(const uint8_t src[], uint8_t len);
};
const char* payloadTypeName(uint8_t type);
void formatPayloadType(uint8_t type, char* buf, size_t cap);
}

Loading…
Cancel
Save