@@ -26,14 +26,19 @@ AdcBatteryMonitor::AdcBatteryMonitor(adc_unit_t adc_unit, adc_channel_t adc_chan
2626 .upper_resistor = upper_resistor,
2727 .lower_resistor = lower_resistor
2828 };
29- adc_cfg. charging_detect_cb = []( void *user_data) -> bool {
30- AdcBatteryMonitor *self = (AdcBatteryMonitor *)user_data;
31- if (self-> charging_pin_ == GPIO_NUM_NC)
32- return false ;
33- else
29+
30+ // 在ADC配置部分进行条件设置
31+ if ( charging_pin_ != GPIO_NUM_NC) {
32+ adc_cfg. charging_detect_cb = []( void *user_data) -> bool {
33+ AdcBatteryMonitor *self = (AdcBatteryMonitor *)user_data;
3434 return gpio_get_level (self->charging_pin_ ) == 1 ;
35- };
36- adc_cfg.charging_detect_user_data = this ;
35+ };
36+ adc_cfg.charging_detect_user_data = this ;
37+ } else {
38+ // 不设置回调,让adc_battery_estimation库使用软件估算
39+ adc_cfg.charging_detect_cb = nullptr ;
40+ adc_cfg.charging_detect_user_data = nullptr ;
41+ }
3742 adc_battery_estimation_handle_ = adc_battery_estimation_create (&adc_cfg);
3843
3944 // Initialize timer
@@ -61,24 +66,21 @@ AdcBatteryMonitor::~AdcBatteryMonitor() {
6166}
6267
6368bool AdcBatteryMonitor::IsCharging () {
64- // 如果没有充电检测引脚,直接返回false
65- if (charging_pin_ == GPIO_NUM_NC) {
66- return false ;
69+ // 优先使用adc_battery_estimation库的功能
70+ if (adc_battery_estimation_handle_ != nullptr ) {
71+ bool is_charging = false ;
72+ esp_err_t err = adc_battery_estimation_get_charging_state (adc_battery_estimation_handle_, &is_charging);
73+ if (err == ESP_OK) {
74+ return is_charging;
75+ }
6776 }
6877
69- // 如果句柄无效,回退到直接读取GPIO
70- if (adc_battery_estimation_handle_ == nullptr ) {
78+ // 回退到GPIO读取或返回默认值
79+ if (charging_pin_ != GPIO_NUM_NC ) {
7180 return gpio_get_level (charging_pin_) == 1 ;
7281 }
7382
74- // 尝试通过adc_battery_estimation获取状态
75- bool is_charging = false ;
76- esp_err_t err = adc_battery_estimation_get_charging_state (adc_battery_estimation_handle_, &is_charging);
77- if (err != ESP_OK) {
78- // 如果调用失败,回退到直接读取GPIO引脚状态
79- return gpio_get_level (charging_pin_) == 1 ;
80- }
81- return is_charging;
83+ return false ;
8284}
8385
8486bool AdcBatteryMonitor::IsDischarging () {
@@ -104,11 +106,6 @@ void AdcBatteryMonitor::OnChargingStatusChanged(std::function<void(bool)> callba
104106}
105107
106108void AdcBatteryMonitor::CheckBatteryStatus () {
107- // 避免在GPIO_NUM_NC情况下进行检查
108- if (charging_pin_ == GPIO_NUM_NC) {
109- return ;
110- }
111-
112109 bool new_charging_status = IsCharging ();
113110 if (new_charging_status != is_charging_) {
114111 is_charging_ = new_charging_status;
0 commit comments