From c812091a4a702a1e716df383b0e69116263e398a Mon Sep 17 00:00:00 2001 From: Justin Mitchell Date: Sat, 20 Jun 2026 12:15:45 -0400 Subject: [PATCH] Make USB detection pin configurable Replace hardcoded UART0_RXD pin with configurable BoardConfig::ACTIVE.usbDetect. Also simplify wakeup reason detection logic to prioritize GPIO/EXT1 wakeup from deep sleep as PowerButton event. --- lib/hal/HalGPIO.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/hal/HalGPIO.cpp b/lib/hal/HalGPIO.cpp index 836dea1e..3940a4d6 100644 --- a/lib/hal/HalGPIO.cpp +++ b/lib/hal/HalGPIO.cpp @@ -334,8 +334,10 @@ bool HalGPIO::isUsbConnected() const { } return false; } - // U0RXD/GPIO20 reads HIGH when USB is connected - return digitalRead(UART0_RXD) == HIGH; + if (BoardConfig::ACTIVE.usbDetect < 0) { + return false; + } + return digitalRead(BoardConfig::ACTIVE.usbDetect) == HIGH; } HalGPIO::WakeupReason HalGPIO::getWakeupReason() const { @@ -344,8 +346,11 @@ HalGPIO::WakeupReason HalGPIO::getWakeupReason() const { const bool usbConnected = isUsbConnected(); - if ((wakeupCause == ESP_SLEEP_WAKEUP_UNDEFINED && resetReason == ESP_RST_POWERON && !usbConnected) || - (wakeupCause == ESP_SLEEP_WAKEUP_GPIO && resetReason == ESP_RST_DEEPSLEEP && usbConnected)) { + if (resetReason == ESP_RST_DEEPSLEEP && + (wakeupCause == ESP_SLEEP_WAKEUP_GPIO || wakeupCause == ESP_SLEEP_WAKEUP_EXT1)) { + return WakeupReason::PowerButton; + } + if (wakeupCause == ESP_SLEEP_WAKEUP_UNDEFINED && resetReason == ESP_RST_POWERON && !usbConnected) { return WakeupReason::PowerButton; } if (wakeupCause == ESP_SLEEP_WAKEUP_UNDEFINED && resetReason == ESP_RST_UNKNOWN && usbConnected) {