From 000e1d3a6d92c372edfda7dfff2e320d45400e13 Mon Sep 17 00:00:00 2001 From: richardclli Date: Thu, 18 Jun 2026 08:05:10 +0800 Subject: [PATCH] fix(pl18): add timeout to isChargerActive() to prevent hang (#7468) --- radio/src/targets/pl18/battery_driver.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/radio/src/targets/pl18/battery_driver.cpp b/radio/src/targets/pl18/battery_driver.cpp index bdd4688b9..9b5928d03 100644 --- a/radio/src/targets/pl18/battery_driver.cpp +++ b/radio/src/targets/pl18/battery_driver.cpp @@ -61,6 +61,7 @@ #endif #define WCHARGER_LOW_CURRENT_DELAY_CNT 6000 #define WCHARGER_HIGH_CURRENT_DELAY_CNT 24000 +#define CHARGER_DETECTION_TIMEOUT 40 // 400ms typedef struct { @@ -298,14 +299,16 @@ uint16_t get_battery_charge_state() bool isChargerActive() { #if defined(WIRELESS_CHARGER) - while (!(uCharger.isChargerDetectionReady && wCharger.isChargerDetectionReady)) + uint16_t timeout = CHARGER_DETECTION_TIMEOUT; + while (!(uCharger.isChargerDetectionReady && wCharger.isChargerDetectionReady) && timeout--) { get_battery_charge_state(); delay_ms(10); } return uCharger.hasCharger || wCharger.hasCharger; #else - while (!uCharger.isChargerDetectionReady) + uint16_t timeout = CHARGER_DETECTION_TIMEOUT; + while (!uCharger.isChargerDetectionReady && timeout--) { get_battery_charge_state(); delay_ms(10);