Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 34 additions & 20 deletions wled00/net_debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

#ifdef WLED_DEBUG_HOST

size_t NetworkDebugPrinter::write(uint8_t c) {
if (!WLED_CONNECTED || !netDebugEnabled) return 0;

void NetworkDebugPrinter::resolveHostName() {
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) {
#ifdef ESP8266
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750);
Expand All @@ -16,34 +14,50 @@ size_t NetworkDebugPrinter::write(uint8_t c) {
#endif
#endif
}
}

void NetworkDebugPrinter::flushBuffer() {
if (buffer.length() == 0) return;

resolveHostName();

debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort);
debugUdp.write(c);
debugUdp.printf("%s %s", serverDescription, buffer.c_str());
debugUdp.endPacket();
buffer = "";
}

size_t NetworkDebugPrinter::write(uint8_t c) {
if (!WLED_CONNECTED || !netDebugEnabled) return 0;

buffer += (char)c;

// Flush on newline or if buffer gets too large
if (c == '\n' || buffer.length() >= MAX_BUFFER_SIZE) {
flushBuffer();
}

return 1;
}

size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) {
if (!WLED_CONNECTED || buf == nullptr || !netDebugEnabled) return 0;

if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) {
#ifdef ESP8266
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750);
#else
#ifdef WLED_USE_ETHERNET
ETH.hostByName(netDebugPrintHost, debugPrintHostIP);
#else
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP);
#endif
#endif

for (size_t i = 0; i < size; i++) {
buffer += (char)buf[i];
if (buf[i] == '\n') {
flushBuffer();
}
}

debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort);
size = debugUdp.write(buf, size);
debugUdp.endPacket();

// If buffer is large but no newline was found, flush anyway
if (buffer.length() >= MAX_BUFFER_SIZE) {
flushBuffer();
}

return size;
}

NetworkDebugPrinter NetDebug;

#endif
#endif
8 changes: 5 additions & 3 deletions wled00/net_debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@

class NetworkDebugPrinter : public Print {
private:
WiFiUDP debugUdp; // needs to be here otherwise UDP messages get truncated upon destruction
WiFiUDP debugUdp;
IPAddress debugPrintHostIP;
String buffer;
const size_t MAX_BUFFER_SIZE = 1024; // Safety limit
void resolveHostName();
void flushBuffer();
public:
virtual size_t write(uint8_t c);
virtual size_t write(const uint8_t *buf, size_t s);
};

// use it on your linux/macOS with: nc -p 7868 -u -l -s <network ip>
extern NetworkDebugPrinter NetDebug;

#endif