Skip to content

Commit e8ed16b

Browse files
konglingboyYuv Zhao
andauthored
修复charging_pin为NC充电时Battery Level不更新的问题 (78#1316)
Co-authored-by: Yuv Zhao <[email protected]>
1 parent 3176a45 commit e8ed16b

File tree

1 file changed

+22
-25
lines changed

1 file changed

+22
-25
lines changed

main/boards/common/adc_battery_monitor.cc

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6368
bool 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

8486
bool AdcBatteryMonitor::IsDischarging() {
@@ -104,11 +106,6 @@ void AdcBatteryMonitor::OnChargingStatusChanged(std::function<void(bool)> callba
104106
}
105107

106108
void 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

Comments
 (0)