#endif\r
#ifdef SUPPORT_BATTERY_SERVICE\r
#include "battery_service.h"\r
+#include "charge_ic.h"\r
#endif\r
#ifdef SUPORT_MAG_SERVICE\r
#include "mag_service.h"\r
(void)nv_upg_upgrade_task_process();\r
thread_init();\r
\r
+#ifdef SUPPORT_BATTERY_SERVICE\r
+ (void)charge_ic_init();\r
+#endif\r
+\r
//尽早显示启动logo ,需要 lcd 驱动,mount file system , power_display 线程管理 lcd背光\r
- ohos_show_bootup_logo(); \r
+ ohos_show_bootup_logo();\r
\r
#ifdef SUPPORT_AT_VIBRATOR\r
uapi_vibrator_service_init();\r
#include "charge_ic.h"\r
#endif\r
\r
+#if defined(ENABLE_SGM41562)\r
+#include "sgm41562.h"\r
+#endif\r
+\r
#include "vibrator_service.h"\r
\r
#define POWER_ON_VOLTAGE_STABILIZE_MS 1000\r
{\r
#if defined(SUPPORT_BATTERY_SERVICE)\r
\r
- extern uint8_t get_charge_stat(void);\r
- if(!get_charge_stat())\r
- {\r
+ (void)charge_ic_init();\r
+ charge_ic_prepare_low_power_charge();\r
+\r
+ if (!charge_ic_is_adapter_present_retry(3, 200)) {\r
PRINT("low power, need charge\n");\r
uapi_tcxo_delay_ms(1000);\r
mcu_poweroff();\r
return;\r
}\r
\r
-\r
- // hp4570n_init(HP4570N);\r
-\r
- charge_ic_init();\r
-\r
//显示充电图片\r
ShowGraphicChargingLogo();\r
\r
\r
while(1)\r
{\r
- if(!get_charge_stat())\r
- {\r
+ if (!charge_ic_is_adapter_present()) {\r
PRINT("low power, need charge\n");\r
uapi_tcxo_delay_ms(1000);\r
mcu_poweroff();\r
if(check_power_on_voltage())\r
{ \r
uapi_watchdog_kick();\r
+#if defined(ENABLE_SGM41562)\r
+ sgm41562_read_all_reg();\r
+#endif\r
uapi_tcxo_delay_ms(5000);\r
-// #ifdef ENABLE_HP4570\r
-// if (hp4570n_read_status_wdt_fault()) \r
-// {\r
-// PRINT("[battery] HP4570 WDT fault, hp4570n_reset()\r\n");\r
-// hp4570n_reset();\r
-// }\r
-// hp4570n_wdt_rst();\r
-// #endif\r
}\r
else\r
mcu_reset();\r
${CMAKE_CURRENT_SOURCE_DIR}/service
)
set(PRIVATE_HEADER
+ ${ROOT_DIR}/zhihui/drivers/charge
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include
batteryservice_get_voltage_by_channel(&cur_vol,ADC_CHANNEL_BAT_VOLTAGE);
if (bat_vol.percent > 0 && bat_vol.percent <= 100) {
- float threshold = get_charge_stat() ? 0.4f : 0.25f;
+ uint8_t adapter_present = get_charge_stat();
+ if (!adapter_present && charge_ic_is_inited()) {
+ adapter_present = charge_ic_is_adapter_present() ? 1 : 0;
+ }
+ float threshold = adapter_present ? 0.4f : 0.25f;
if (fabsf(cur_vol - bat_vol.avg_vol) < threshold) {
history_percent = bat_vol.percent;
}
extern uint8_t is_doing_shutdown_or_reboot(void);
-#ifdef ENABLE_HP4570
-#include "hp4570.h"
+#include "charge_ic_config.h"
+
+#ifdef ENABLE_CC_CYCLE
#include "cc_cycle_service.h"
extern uint8_t cc_cycle_is_discharge_phase(void);
-#elif defined ENABLE_SGM41562
-#include "sgm41562.h"
#endif
#include "charge_ic.h"
#define BAT_FILE_PATH "user/userdata/bat_data.bin"
-#define CHARGE_1C_MA (256u)
-#define CHARGE_02C_MA ((CHARGE_1C_MA * 2u) / 10u) /* 52 */
-#define CHARGE_05C_MA ((CHARGE_1C_MA) / 2u) /* 130 */
-
bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);
battery_info_t *get_current_battery_info(void);
static bool g_batter_service_initialled = false;
if (is_doing_shutdown_or_reboot()) {
return;
}
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
/* 拷机放电:Hi-Z/禁充由 cc_cycle 管;拷机充电:走正常温控与 ICHG 档位 */
if (cc_cycle_is_discharge_phase()) {
return;
}
g_chargestatus = 0;
}else{
-
+ uint16_t charge_1c_mA = charge_ic_get_1c_mA();
+
if(bat_temp >= 0 && bat_temp < 15)
{
- charge_mA = CHARGE_02C_MA;
+ charge_mA = charge_1c_mA * 2u / 10u;
}
else if((bat_temp >= 15 && bat_temp < 25) || (bat_temp >= 45 && bat_temp < 60))
{
- charge_mA = CHARGE_05C_MA;
+ charge_mA = charge_1c_mA / 2u;
}
else if(bat_temp >= 25 && bat_temp < 45)
{
- charge_mA = CHARGE_1C_MA;
+ charge_mA = charge_1c_mA;
}
+ else if (bat_temp >= 60)
+ {
+ PRINT("battery temp >= 60, disable charge !\r\n");
+ charge_ic_set_charge_enable(false);
+ g_chargestatus = 0;
+ return;
+ }
+ else
+ {
+ charge_mA = charge_1c_mA;
+ }
- // if(charge_mA != last_charge_mA)
- // {
- // last_charge_mA = charge_mA;
- // printf("last_charge_mA : %d\n",last_charge_mA);
-
- charge_ic_set_chrg_ichg_mA(charge_mA);
+ if (charge_mA == 0) {
+ charge_mA = charge_1c_mA;
+ }
- // }
+ charge_ic_set_chrg_ichg_mA(charge_mA);
/**
* check and control charge current event
battery_save_data();
charge_ic_reset();
+ {
+ char reg_buf[512];
+ (void)charge_ic_dump_debug_registers(reg_buf, sizeof(reg_buf));
+ printf("[battery] charge plug reg dump:\n%s", reg_buf);
+ }
}else if (mail.comm.event == BATTERY_CMD_CHARGE_UNPLUG) {
// PRINT("[battery][service] charger_plug_event_ui_sendmsg_toUI unplugged \n");
if(plugged == 1){
send_battery_svr_cmd_msg(BATTERY_CMD_CHARGE_PLUG);
batinfo->usb_plugged = true;
-#ifdef ENABLE_HP4570
- /* VBUS/插线状态已更新后再通知拷机,且不在本线程做 HP4570/UI */
+#ifdef ENABLE_CC_CYCLE
+ /* VBUS/插线状态已更新后再通知拷机,且不在本线程做充电 IC/UI */
cc_cycle_on_charger_plug(1);
#endif
}else{
{
charge_ic_init();
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_cycle_early_boot_sync();
#endif
// battery_restore_vol();
#include "charge_ic.h"
#include "custom_utils.h"
#include "errcode.h"
+#include "button_porting.h"
+#include "tcxo.h"
#if defined(ENABLE_HP4570)
#include "hp4570.h"
#define CHARGE_IC_I2C_BUS I2C_BUS_0
#endif
-#define CHARGE_1C_MA (256u)
-
-static uint16_t last_charge_mA = 0;
+static uint16_t last_charge_mA = 0;
static charge_ic_type_t g_charge_ic_type = CHARGE_IC_TYPE_NONE;
+static bool g_charge_ic_inited = false;
+
+static void charge_ic_apply_1c_ichg(void)
+{
+ last_charge_mA = 0;
+ charge_ic_set_chrg_ichg_mA(charge_ic_get_1c_mA());
+}
charge_ic_type_t charge_ic_get_type(void)
{
return g_charge_ic_type;
}
+uint16_t charge_ic_get_1c_mA(void)
+{
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_SGM41562:
+ return CHARGE_1C_MA_SGM41562;
+ case CHARGE_IC_TYPE_HP4570:
+ return CHARGE_1C_MA_HP4570;
+ default:
+ return CHARGE_1C_MA_HP4570;
+ }
+}
+
static charge_ic_type_t charge_ic_detect(void)
{
return CHARGE_IC_TYPE_NONE;
}
+bool charge_ic_is_inited(void)
+{
+ return g_charge_ic_inited;
+}
+
+static bool charge_ic_read_ic_vbus_pg(void)
+{
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_HP4570:
+#if defined(ENABLE_HP4570)
+ return hp4570n_read_status_vbus_pg();
+#else
+ return false;
+#endif
+ case CHARGE_IC_TYPE_SGM41562:
+#if defined(ENABLE_SGM41562)
+ return sgm41562_read_status_vbus_pg();
+#else
+ return false;
+#endif
+ default:
+ return false;
+ }
+}
+
+bool charge_ic_is_adapter_present(void)
+{
+ if (uapi_get_charger_plug_status()) {
+ return true;
+ }
+ if (!g_charge_ic_inited || g_charge_ic_type == CHARGE_IC_TYPE_NONE) {
+ return false;
+ }
+ return charge_ic_read_ic_vbus_pg();
+}
+
+bool charge_ic_is_adapter_present_retry(uint8_t tries, uint32_t delay_ms)
+{
+ if (tries == 0) {
+ return false;
+ }
+
+ for (uint8_t i = 0; i < tries; i++) {
+ if (charge_ic_is_adapter_present()) {
+ return true;
+ }
+ if (delay_ms > 0 && (i + 1) < tries) {
+ uapi_tcxo_delay_ms(delay_ms);
+ }
+ }
+ return false;
+}
+
+void charge_ic_prepare_low_power_charge(void)
+{
+ if (!g_charge_ic_inited || g_charge_ic_type == CHARGE_IC_TYPE_NONE) {
+ return;
+ }
+
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_HP4570:
+#if defined(ENABLE_HP4570)
+ (void)hp4570n_set_batfet_dis(false);
+#endif
+ break;
+ case CHARGE_IC_TYPE_SGM41562:
+#if defined(ENABLE_SGM41562)
+ sgm41562_exit_shipmode();
+ uapi_tcxo_delay_ms(50);
+#endif
+ break;
+ default:
+ break;
+ }
+
+ charge_ic_set_charge_enable(true);
+}
+
errcode_t charge_ic_init(void)
{
+ if (g_charge_ic_inited) {
+ return ERRCODE_SUCC;
+ }
+
g_charge_ic_type = CHARGE_IC_TYPE_NONE;
custom_i2c_init(CHARGE_IC_I2C_BUS);
return ERRCODE_FAIL;
}
- last_charge_mA = CHARGE_1C_MA;
+ last_charge_mA = charge_ic_get_1c_mA();
switch (g_charge_ic_type) {
case CHARGE_IC_TYPE_HP4570:
default:
return ERRCODE_FAIL;
}
+
+ charge_ic_apply_1c_ichg();
+ g_charge_ic_inited = true;
return ERRCODE_SUCC;
}
void charge_ic_reset(void)
{
- last_charge_mA = CHARGE_1C_MA;
-
if (g_charge_ic_type == CHARGE_IC_TYPE_NONE) {
return;
}
+ last_charge_mA = charge_ic_get_1c_mA();
+
switch (g_charge_ic_type) {
case CHARGE_IC_TYPE_HP4570:
#if defined(ENABLE_HP4570)
default:
break;
}
+
+ charge_ic_apply_1c_ichg();
}
size_t charge_ic_dump_debug_registers(char *buf, size_t buf_len)
}
#if defined(ENABLE_SGM41562)
- sgm41562_entry_shipmode();
+ /*
+ * 用户关机须保持 BAT→SYS,MCU 才能进 ULP 且 ULP Systick 继续走时。
+ * entry_shipmode(FET_DIS) 会断电池,整机掉电,开机时间仍停在关机前时刻。
+ */
+ sgm41562_entry_shutdown_lpm();
+ sgm41562_set_batfet_dis(false);
+#endif
+}
+
+#if defined(ENABLE_CC_CYCLE)
+
+void charge_ic_set_cycle_charge_path(bool enable_charge)
+{
+ if (g_charge_ic_type == CHARGE_IC_TYPE_NONE) {
+ return;
+ }
+
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_HP4570:
+#if defined(ENABLE_HP4570)
+ if (enable_charge) {
+ hp4570n_set_hiz_en(false);
+ hp4570n_set_ceb_en(true);
+ } else {
+ hp4570n_set_ceb_en(false);
+ hp4570n_set_hiz_en(true);
+ }
+#endif
+ break;
+ case CHARGE_IC_TYPE_SGM41562:
+#if defined(ENABLE_SGM41562)
+ if (enable_charge) {
+ sgm41562_exit_shipmode();
+ sgm41562_set_batfet_dis(false);
+ sgm41562_set_charge_en(false);
+ sgm41562_set_hiz_en(false);
+ } else {
+ sgm41562_set_charge_en(true);
+ sgm41562_set_hiz_en(true);
+ sgm41562_set_batfet_dis(false);
+ }
#endif
+ break;
+ default:
+ break;
+ }
}
+
+bool charge_ic_read_chrg_ichg_mA(uint16_t *current_mA)
+{
+ if (current_mA == NULL || g_charge_ic_type == CHARGE_IC_TYPE_NONE) {
+ return false;
+ }
+
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_HP4570:
+#if defined(ENABLE_HP4570)
+ return hp4570n_read_chrg_ichg_mA(current_mA);
+#else
+ return false;
+#endif
+ case CHARGE_IC_TYPE_SGM41562:
+#if defined(ENABLE_SGM41562)
+ return sgm41562_read_chrg_ichg_mA(current_mA);
+#else
+ return false;
+#endif
+ default:
+ return false;
+ }
+}
+
+bool charge_ic_hw_is_actively_charging(void)
+{
+ switch (g_charge_ic_type) {
+ case CHARGE_IC_TYPE_HP4570:
+#if defined(ENABLE_HP4570)
+ if (hp4570n_read_chrg_stat_fast_chrg() || hp4570n_read_chrg_stat_pre_chrg() ||
+ hp4570n_read_chrg_stat_dead_chrg()) {
+ return true;
+ }
+ return false;
+#else
+ return false;
+#endif
+ case CHARGE_IC_TYPE_SGM41562:
+#if defined(ENABLE_SGM41562)
+ return sgm41562_read_chrg_stat_fast_chrg() || sgm41562_read_chrg_stat_pre_chrg();
+#else
+ return false;
+#endif
+ default:
+ return false;
+ }
+}
+
+bool charge_ic_should_finish_cc_charging(uint8_t soc, uint8_t soc_full, uint8_t chg_done_min_soc)
+{
+ if (soc >= soc_full) {
+ return true;
+ }
+ if (charge_ic_check_charge_done() && soc >= chg_done_min_soc) {
+ return true;
+ }
+ return false;
+}
+
+#endif /* ENABLE_CC_CYCLE */
#include <stdint.h>
#include <stdbool.h>
#include "errcode.h"
+#include "charge_ic_config.h"
#ifdef __cplusplus
extern "C" {
CHARGE_IC_TYPE_SGM41562,
} charge_ic_type_t;
+/** @brief 按已识别 IC 类型返回 1C 充电电流(mA),值来自 charge_ic_config.h 宏 */
+uint16_t charge_ic_get_1c_mA(void);
+
+bool charge_ic_is_inited(void);
+
+/** @brief MCU VBUS GPIO 或充电 IC PG 任一为真则视为已插适配器(需已 init) */
+bool charge_ic_is_adapter_present(void);
+
+/** @brief 多次采样适配器在位,tries 次、间隔 delay_ms */
+bool charge_ic_is_adapter_present_retry(uint8_t tries, uint32_t delay_ms);
+
+/** @brief 低电充电前:退出船运/开 BATFET 并允充 */
+void charge_ic_prepare_low_power_charge(void);
+
errcode_t charge_ic_init(void);
void charge_ic_set_charge_enable(bool enable);
/** @brief 导出充电 IC 调试寄存器到 buf,返回写入字节数 */
size_t charge_ic_dump_debug_registers(char *buf, size_t buf_len);
-/** @brief 关机前 SGM41562 进船运(FET_DIS);依赖开机 charge_ic_init 已识别 */
+/** @brief 关机前 41562 低功耗:禁充+HiZ,不断 BAT→SYS(保持 RTC/ULP 走时) */
void charge_ic_shutdown_lpm(void);
+#if defined(ENABLE_CC_CYCLE)
+/** @brief 拷机充/放电路径:true=允充并退出 HiZ;false=禁充+HiZ(电池放电) */
+void charge_ic_set_cycle_charge_path(bool enable_charge);
+
+/** @brief 读 REG 配置的快充电流(mA) */
+bool charge_ic_read_chrg_ichg_mA(uint16_t *current_mA);
+
+/** @brief REG 状态:预充/快充进行中 */
+bool charge_ic_hw_is_actively_charging(void);
+
+/** @brief 拷机充电阶段是否应结束(SOC 满或 CHG_DONE) */
+bool charge_ic_should_finish_cc_charging(uint8_t soc, uint8_t soc_full, uint8_t chg_done_min_soc);
+#endif
+
#ifdef __cplusplus
}
#endif
${ROOT_DIR}/zhihui/utils
${ROOT_DIR}/zhihui/services/battery/hal
${ROOT_DIR}/zhihui/services/battery/service
+ ${ROOT_DIR}/zhihui/drivers/charge
${ROOT_DIR}/zhihui/drivers/charge/hp4570
+ ${ROOT_DIR}/zhihui/drivers/charge/sgm41562
${ROOT_DIR}/zhihui/services/gnss/inc
${ROOT_DIR}/application/brandy/brandy_standard
${ROOT_DIR}/application/wearable/fd272/service/power_manager/include
#include "custom_utils.h"
#include "errcode.h"
#include "battery_hal.h"
+#include "charge_ic_config.h"
#include "cmsis_os2.h"
#include "securec.h"
#include "chip_system_time.h"
#include <unistd.h>
#include <time.h>
-#ifdef ENABLE_HP4570
-#include "hp4570.h"
+#ifdef ENABLE_CC_CYCLE
+#include "charge_ic.h"
#include "battery_service.h"
#include "power_display_service.h"
#include "pm_definition.h"
#include "pm.h"
#endif
+#ifdef ENABLE_HP4570
+#include "hp4570.h"
+#endif
+
+#ifdef ENABLE_SGM41562
+#include "sgm41562.h"
+#endif
+
#if defined(SUPPORT_GNSS)
#include "gnss_ctl.h"
#endif
static void cc_schedule_charge_reconfig(void)
{
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
g_pending_charge_reconfig = 1;
#endif
}
static void cc_flush_pending_charge_reconfig(void)
{
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
if (g_pending_charge_reconfig) {
g_pending_charge_reconfig = 0;
battery_request_charge_reconfig();
*/
static void cc_set_charge_enable(uint8_t on)
{
-#ifdef ENABLE_HP4570
- if (on) {
- /* 恢复 VBUS 路径、允充;ICHG 由 battery_service 按温度/SOC 配置(非固定死 260mA) */
- hp4570n_set_hiz_en(false);
- hp4570n_set_ceb_en(true);
- disable_02c();
- } else {
- hp4570n_set_ceb_en(false);
- hp4570n_set_hiz_en(true);
- }
+#ifdef ENABLE_CC_CYCLE
+ charge_ic_set_cycle_charge_path(on != 0);
#else
(void)on;
#endif
}
}
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
/* 拷机运行中:充/放电均常亮 + 禁灭屏超时;停止拷机时恢复 */
static void cc_set_discharge_screen_hold(uint8_t on)
{
static uint8_t cc_read_charge_ic_id(void)
{
-#ifdef ENABLE_HP4570
- uint8_t id = hp4570n_get_id();
- return (id == 0x2) ? 1 : 0;
+#ifdef SUPPORT_BATTERY_SERVICE
+ uint8_t id = charge_ic_get_id();
+ return (id == 0x2 || id == 0x4) ? 1 : 0;
#else
return 0;
#endif
if (charge_id != NULL) {
*charge_id = cc_read_charge_ic_id();
}
+#ifdef SUPPORT_BATTERY_SERVICE
+ if (charge_ic_get_type() == CHARGE_IC_TYPE_HP4570) {
#ifdef ENABLE_HP4570
- if (vbus_pg != NULL) {
- *vbus_pg = hp4570n_read_status_vbus_pg() ? 1 : 0;
- }
- if (chrg_fast != NULL) {
- *chrg_fast = hp4570n_read_chrg_stat_fast_chrg() ? 1 : 0;
- }
- if (chrg_done != NULL) {
- *chrg_done = hp4570n_read_chrg_stat_chrg_done() ? 1 : 0;
+ if (vbus_pg != NULL) {
+ *vbus_pg = hp4570n_read_status_vbus_pg() ? 1 : 0;
+ }
+ if (chrg_fast != NULL) {
+ *chrg_fast = hp4570n_read_chrg_stat_fast_chrg() ? 1 : 0;
+ }
+ if (chrg_done != NULL) {
+ *chrg_done = hp4570n_read_chrg_stat_chrg_done() ? 1 : 0;
+ }
+#endif
+ } else if (charge_ic_get_type() == CHARGE_IC_TYPE_SGM41562) {
+#ifdef ENABLE_SGM41562
+ if (vbus_pg != NULL) {
+ *vbus_pg = sgm41562_read_status_vbus_pg() ? 1 : 0;
+ }
+ if (chrg_fast != NULL) {
+ *chrg_fast = (sgm41562_read_chrg_stat_fast_chrg() ||
+ sgm41562_read_chrg_stat_pre_chrg()) ? 1 : 0;
+ }
+ if (chrg_done != NULL) {
+ *chrg_done = sgm41562_read_chrg_stat_chrg_done() ? 1 : 0;
+ }
+#endif
+ } else {
+ if (vbus_pg != NULL) {
+ *vbus_pg = 0;
+ }
+ if (chrg_fast != NULL) {
+ *chrg_fast = 0;
+ }
+ if (chrg_done != NULL) {
+ *chrg_done = 0;
+ }
}
#else
if (vbus_pg != NULL) {
snap.vbus_pg = vbus_pg;
snap.chrg_fast = chrg_fast;
snap.chrg_done = chrg_done;
-#ifdef ENABLE_HP4570
- (void)hp4570n_dump_debug_registers(snap.reg_dump, sizeof(snap.reg_dump));
+#ifdef ENABLE_CC_CYCLE
+ (void)charge_ic_dump_debug_registers(snap.reg_dump, sizeof(snap.reg_dump));
#endif
cc_ensure_userdata_dir();
uapi_save_file_data((char *)CC_CYCLE_DEFECT_SNAPSHOT_PATH, (uint8_t *)&snap,
cc_log_event_persist_locked(defect_name, now, soc);
}
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
static uint8_t cc_hw_is_actively_charging(void)
{
- if (hp4570n_read_chrg_stat_fast_chrg() || hp4570n_read_chrg_stat_pre_chrg() ||
- hp4570n_read_chrg_stat_dead_chrg()) {
- return 1;
- }
- return 0;
+ return charge_ic_hw_is_actively_charging() ? 1 : 0;
}
static uint8_t cc_should_finish_charging(uint8_t soc)
{
- if (soc >= CC_CYCLE_SOC_FULL) {
- return 1;
- }
- if (hp4570n_read_chrg_stat_chrg_done() && soc >= CC_CYCLE_CHG_DONE_MIN_SOC) {
- return 1;
- }
- return 0;
+ return charge_ic_should_finish_cc_charging(soc, CC_CYCLE_SOC_FULL,
+ CC_CYCLE_CHG_DONE_MIN_SOC) ? 1 : 0;
}
static uint16_t cc_read_configured_ichg_mA(void)
{
uint16_t ichg = 0;
- if (hp4570n_read_chrg_ichg_mA(&ichg)) {
+ if (charge_ic_read_chrg_ichg_mA(&ichg)) {
return ichg;
}
return 0;
g_defect_soc_drop_base_soc = soc;
}
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
if (defect == (uint8_t)CC_DEFECT_NONE && soc < CC_CYCLE_SOC_FULL) {
uint8_t hw_chg = cc_hw_is_actively_charging();
uint32_t chg_elapsed = 0;
}
cc_set_charge_enable(1);
cc_sync_discharge_soc_mode();
-#ifdef ENABLE_HP4570
- /* 延迟到释放 cc_lock 后再重配,避免 UI 线程持锁时与 battery 任务并发访问 HP4570 */
+#ifdef ENABLE_CC_CYCLE
+ /* 延迟到释放 cc_lock 后再重配,避免 UI 线程持锁时与 battery 任务并发访问充电 IC */
cc_schedule_charge_reconfig();
#endif
if (g_store.auto_running) {
static void cc_pick_initial_phase(uint8_t soc)
{
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
if (soc >= CC_CYCLE_SOC_FULL || cc_should_finish_charging(soc)) {
cc_enter_discharge_phase();
} else if (soc <= CC_CYCLE_SOC_LOW) {
cc_set_discharge_screen_hold(0);
cc_set_charge_enable(1);
battery_set_force_discharge_soc(0);
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_schedule_charge_reconfig();
#endif
}
cc_clear_pending_charge();
cc_clear_start_timestamps();
battery_set_force_discharge_soc(0);
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_schedule_charge_reconfig();
#endif
g_pending_hide_burn_ui = 1;
cc_log_event_persist_locked("charge_start", now, soc);
}
cc_apply_charge_defect(soc, now);
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
if (cc_should_finish_charging(soc)) {
cc_finish_charging_phase(soc);
}
uint8_t cc_cycle_get_hw_is_charging(void)
{
-#ifdef ENABLE_HP4570
- if (hp4570n_read_chrg_stat_fast_chrg() || hp4570n_read_chrg_stat_pre_chrg() ||
- hp4570n_read_chrg_stat_dead_chrg()) {
+#ifdef ENABLE_CC_CYCLE
+ if (charge_ic_hw_is_actively_charging()) {
return 1;
}
- if (hp4570n_read_chrg_stat_chrg_done()) {
+ if (charge_ic_check_charge_done()) {
return 0;
}
#endif
if (n < 0) {
return 0;
}
-#ifdef ENABLE_HP4570
+#ifdef SUPPORT_BATTERY_SERVICE
if ((unsigned int)n < buf_size - 1) {
size_t off = (size_t)n;
- off += hp4570n_dump_debug_registers(buf + off, buf_size - off);
+ off += charge_ic_dump_debug_registers(buf + off, buf_size - off);
(void)off;
}
#endif
return 0;
}
buf[0] = '\0';
-#ifdef ENABLE_HP4570
- return (int)hp4570n_dump_debug_registers(buf, buf_size);
+#ifdef SUPPORT_BATTERY_SERVICE
+ return (int)charge_ic_dump_debug_registers(buf, buf_size);
#else
- return snprintf_s(buf, buf_size, buf_size - 1, "HP4570 未启用");
+ return snprintf_s(buf, buf_size, buf_size - 1, "battery service 未启用");
#endif
}
#include <stdint.h>
#include "errcode.h"
+#include "charge_ic_config.h"
#ifdef __cplusplus
extern "C" {
CC_DEFECT_RED = 1, /* 充电 SOC 下降 */
CC_DEFECT_YELLOW = 2, /* 充电超 2h 未满 */
CC_DEFECT_BLUE = 3, /* SOC 卡在 ~80% */
- CC_DEFECT_LOW_ICHG = 4, /* HP4570 配置 ICHG 持续过低(如10mA级) */
+ CC_DEFECT_LOW_ICHG = 4, /* 配置 ICHG 持续过低(如10mA级) */
CC_DEFECT_HW_NO_CHG = 5, /* 拷机充电阶段 HW 未充且 SOC 长时间不涨 */
} cc_cycle_defect_type_e;
uint8_t cc_cycle_get_soc(void);
/* 软件意图:放电阶段为0(禁充),充电阶段为1(允充) */
uint8_t cc_cycle_get_charge_enable_intent(void);
-/* HP4570 硬件充电状态:1=预充/快充中 */
+/* 硬件充电状态:1=预充/快充中 */
uint8_t cc_cycle_get_hw_is_charging(void);
uint8_t cc_cycle_is_active(void);
-/* 拷机开关开且已运行:允许控制 HP4570/GPS/常亮/SOC 特殊模式 */
+/* 拷机开关开且已运行:允许控制充电 IC/GPS/常亮/SOC 特殊模式 */
uint8_t cc_cycle_is_active_hw(void);
/* 仅放电阶段:拷机需接管 Hi-Z/禁充;充电阶段交还 battery_service 管电流 */
uint8_t cc_cycle_is_discharge_phase(void);
int cc_cycle_read_defect_snapshot(cc_cycle_defect_snapshot_t *out);
/* 实时 IC 状态文本,buf 建议>=512 字节 */
int cc_cycle_format_ic_status_live(char *buf, unsigned int buf_size);
-/* 仅 HP4570 寄存器 dump,与 Debug 页一致,buf 建议>=2048 字节 */
+/* 充电 IC 寄存器 dump,buf 建议>=2048 字节 */
int cc_cycle_format_ic_registers(char *buf, unsigned int buf_size);
#define CC_CYCLE_HISTORY_BUF_RECOMMEND 4096u
#include "custom_utils.h"
#include "custom_save_runtime.h"
-#ifdef ENABLE_HP4570
+#include "charge_ic_config.h"
+#ifdef ENABLE_CC_CYCLE
#include "cc_cycle_service.h"
#endif
void start_shutdown_or_reboot(uint8_t type)
{
PRINT("[PWR_FLOW] start_shutdown_or_reboot: type=%d (prev=%d)\r\n", type, doing_shutdown_type);
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_cycle_prepare_for_shutdown();
#endif
doing_shutdown_type = type;
#endif
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_cycle_on_boot();
#endif
}
//恢复存储
resume_report_log();
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_cycle_clear_storage();
#endif
//恢复存储
resume_report_log();
-#ifdef ENABLE_HP4570
+#ifdef ENABLE_CC_CYCLE
cc_cycle_clear_storage();
#endif