diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 7b011c98..97b402fe 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/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(); } diff --git a/examples/simple_room_server/MyMesh.cpp b/examples/simple_room_server/MyMesh.cpp index fce5c333..61927d03 100644 --- a/examples/simple_room_server/MyMesh.cpp +++ b/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(); } diff --git a/src/Packet.cpp b/src/Packet.cpp index aad3e2f4..f55af06f 100644 --- a/src/Packet.cpp +++ b/src/Packet.cpp @@ -1,9 +1,49 @@ #include "Packet.h" +#include #include #include 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; diff --git a/src/Packet.h b/src/Packet.h index c19d9e9d..b5c976c9 100644 --- a/src/Packet.h +++ b/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); + }