fix(battery): harden charge-complete inference

This commit is contained in:
chenjintao
2026-08-25 10:03:36 +08:00
parent f33ad70c16
commit 61f034b288
3 changed files with 34 additions and 6 deletions
@@ -22,9 +22,9 @@
#define BATTERY_STOP_POLL_MS 10
#define BATTERY_CHARGE_DEBOUNCE_MS 30
#define BATTERY_FULL_CONFIRM_RETRY_MS 1000
#define BATTERY_FULL_CONFIRM_TIME_MS 5000
#define BATTERY_FULL_CONFIRM_TIME_MS \
((uint32_t)CONFIG_TQ_BATTERY_FULL_CONFIRM_SEC * 1000U)
#define BATTERY_FULL_CONFIRM_SAMPLES 3U
#define BATTERY_FULL_MIN_VOLTAGE_MV 4050
#define BATTERY_SHUTDOWN_CONFIRM_SAMPLES 3U
#define BATTERY_EMERGENCY_CONFIRM_SAMPLES 2U
#define BATTERY_SHUTDOWN_RETRY_MS 1000
@@ -339,8 +339,9 @@ static void control_plane_battery_full_hint_hook(
}
ESP_LOGI(TAG,
"Inferred charge-complete prompt start voltage=%dmV file=%s",
"Inferred charge-complete prompt start voltage=%dmV level=%u%% file=%s",
status->voltage_mv,
(unsigned)status->percentage,
BATTERY_FULL_PROMPT_FILE);
esp_err_t prompt_err = domain_runtime_behavior_play_prompt_file(
BATTERY_FULL_PROMPT_FILE);
@@ -453,11 +454,13 @@ static void battery_worker(void *arg)
if (full_hint_candidate && status.valid &&
!status.measurement_suppressed) {
if (status.charge_state != DOMAIN_BATTERY_CHARGE_NOT_CHARGING ||
status.voltage_mv < BATTERY_FULL_MIN_VOLTAGE_MV) {
status.voltage_mv < CONFIG_TQ_BATTERY_FULL_MIN_VOLTAGE_MV ||
status.percentage < CONFIG_TQ_BATTERY_FULL_MIN_PERCENT) {
ESP_LOGI(TAG,
"Charge-complete inference cancelled charge=%s voltage=%dmV",
"Charge-complete inference cancelled charge=%s voltage=%dmV level=%u%%",
charge_state_name(status.charge_state),
status.voltage_mv);
status.voltage_mv,
(unsigned)status.percentage);
full_hint_candidate = false;
full_hint_confirmations = 0U;
} else {