PMU_STATUS BAT_BatteryFullAction(void) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery full !!\n\r"); BMT_status.bat_full = KAL_TRUE; BMT_status.total_charging_time = 0; BMT_status.PRE_charging_time = 0; BMT_status.CC_charging_time = 0; BMT_status.TOPOFF_charging_time = 0; BMT_status.POSTFULL_charging_time = 0; BMT_status.bat_in_recharging_state = KAL_FALSE; if(charging_full_check() == KAL_FALSE) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Re-charging !!\n\r"); BMT_status.bat_in_recharging_state = KAL_TRUE; BMT_status.bat_charging_state = CHR_CC; battery_meter_reset(); } else { if(need_recharge_check()) { kal_uint32 charging_enable = 2; battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable); // 这里进行了扩展,2相当于先复位,然后在置位 苏 勇 2014年05月19日 09:56:24 } } return PMU_STATUS_OK; }
PMU_STATUS BAT_TopOffModeAction(void) { kal_uint32 charging_enable = KAL_FALSE; battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Top Off mode charge, timer=%ld on %ld !!\n\r", BMT_status.TOPOFF_charging_time, BMT_status.total_charging_time); BMT_status.PRE_charging_time = 0; BMT_status.CC_charging_time = 0; BMT_status.TOPOFF_charging_time += BAT_TASK_PERIOD; BMT_status.total_charging_time += BAT_TASK_PERIOD; pchr_turn_on_charging(); if ((BMT_status.TOPOFF_charging_time >= MAX_CV_CHARGING_TIME) || (charging_full_check() == KAL_TRUE) ) { BMT_status.bat_charging_state = CHR_BATFULL; BMT_status.bat_full = KAL_TRUE; g_charging_full_reset_bat_meter = KAL_TRUE; /* Disable charging */ battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable); } return PMU_STATUS_OK; }
PMU_STATUS BAT_TopOffModeAction(void) { kal_uint32 charging_enable = KAL_FALSE; #ifdef HIGH_BATTERY_VOLTAGE_SUPPORT kal_uint32 cv_voltage = 4350; #else kal_uint32 cv_voltage = 4200; #endif battery_log(BAT_LOG_CRTI, "[BATTERY] Top Off mode charge, timer=%d on %d !!\n\r", BMT_status.TOPOFF_charging_time, BMT_status.total_charging_time); BMT_status.PRE_charging_time = 0; BMT_status.CC_charging_time = 0; BMT_status.TOPOFF_charging_time += BAT_TASK_PERIOD; BMT_status.total_charging_time += BAT_TASK_PERIOD; if(BMT_status.bat_vol > (cv_voltage-CV_CHECK_DELAT_FOR_BANDGAP)) { /* CV - 0.08V */ pchr_sw_cv_charing_current_check(); } pchr_turn_on_charging(); if ((BMT_status.TOPOFF_charging_time >= MAX_CV_CHARGING_TIME) || (charging_full_check() == KAL_TRUE)) { BMT_status.bat_charging_state = CHR_BATFULL; BMT_status.bat_full = KAL_TRUE; g_charging_full_reset_bat_meter = KAL_TRUE; /* Disable charging */ battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable); } return PMU_STATUS_OK; }
PMU_STATUS BAT_ConstantCurrentModeAction(void) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] CC mode charge, timer=%ld on %ld !!\n\r", BMT_status.CC_charging_time, BMT_status.total_charging_time); BMT_status.PRE_charging_time = 0; BMT_status.CC_charging_time += BAT_TASK_PERIOD; BMT_status.TOPOFF_charging_time = 0; BMT_status.total_charging_time += BAT_TASK_PERIOD; /* Enable charger */ pchr_turn_on_charging(); if(charging_full_check() == KAL_TRUE) { BMT_status.bat_charging_state = CHR_BATFULL; BMT_status.bat_full = KAL_TRUE; g_charging_full_reset_bat_meter = KAL_TRUE; } return PMU_STATUS_OK; }
PMU_STATUS BAT_BatteryFullAction(void) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery full !!\n\r"); BMT_status.bat_full = KAL_TRUE; BMT_status.total_charging_time = 0; BMT_status.PRE_charging_time = 0; BMT_status.CC_charging_time = 0; BMT_status.TOPOFF_charging_time = 0; BMT_status.POSTFULL_charging_time = 0; BMT_status.bat_in_recharging_state = KAL_FALSE; if (charging_full_check() == KAL_FALSE) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Re-charging !!\n\r"); BMT_status.bat_in_recharging_state = KAL_TRUE; BMT_status.bat_charging_state = CHR_CC; battery_meter_reset(); } return PMU_STATUS_OK; }