From 880afdf87721e7bd920d1939b2a429e573bdba3b Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 14 Jan 2023 22:42:42 +0100 Subject: [PATCH] stability improvement for CDC Serial --- wled00/wled.cpp | 2 +- wled00/wled_serial.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 6753ab6b..06703528 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -299,7 +299,7 @@ void WLED::setup() Serial0.setDebugOutput(false); Serial.setDebugOutput(true); #else - Serial.setTimeout(50); + if (Serial) Serial.setTimeout(50); // WLEDMM - only when serial is initialized #endif //Serial0.setDebugOutput(false); diff --git a/wled00/wled_serial.cpp b/wled00/wled_serial.cpp index 562d31a3..daf60b45 100644 --- a/wled00/wled_serial.cpp +++ b/wled00/wled_serial.cpp @@ -68,6 +68,10 @@ void sendBytes(){ } bool canUseSerial(void) { // WLEDMM returns true if Serial can be used for debug output (i.e. not configured for other purpose) + #if defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(WLED_DEBUG_HOST) + // on -C3, USB CDC blocks if disconnected! so check if Serial is active before printing to it. + if (!Serial) return false; + #endif if (pinManager.isPinAllocated(hardwareTX) && (pinManager.getPinOwner(hardwareTX) != PinOwner::DebugOut)) return false; // TX allocated to LEDs or other functions if ((realtimeMode == REALTIME_MODE_GENERIC) || (realtimeMode == REALTIME_MODE_ADALIGHT) || (realtimeMode == REALTIME_MODE_TPM2NET))