# HG changeset patch # User Mychaela Falconia # Date 1513284078 0 # Node ID 6c0659acf93eef7bd928691a39363153579bad64 # Parent d583a1f5bd6a48ababe320cfe1ba674c5a84997c FCHG: implemented functions for user-initiated charge start and stop diff -r d583a1f5bd6a -r 6c0659acf93e src/cs/drivers/drv_app/fchg/fchg_func_i.h --- a/src/cs/drivers/drv_app/fchg/fchg_func_i.h Thu Dec 14 19:54:18 2017 +0000 +++ b/src/cs/drivers/drv_app/fchg/fchg_func_i.h Thu Dec 14 20:41:18 2017 +0000 @@ -16,5 +16,7 @@ void pwr_handle_timer(void); void pwr_charger_plug(void); void pwr_charger_unplug(void); +void pwr_charge_start_req(void); +void pwr_charge_stop_req(void); #endif /* include guard */ diff -r d583a1f5bd6a -r 6c0659acf93e src/cs/drivers/drv_app/fchg/fchg_process.c --- a/src/cs/drivers/drv_app/fchg/fchg_process.c Thu Dec 14 19:54:18 2017 +0000 +++ b/src/cs/drivers/drv_app/fchg/fchg_process.c Thu Dec 14 20:41:18 2017 +0000 @@ -294,3 +294,74 @@ FCHG_USE_ID); } } + +void pwr_charge_start_req(void) +{ + switch (pwr_ctrl->state) { + case FCHG_STATE_NO_EXT_PWR: + rvf_send_trace("Cannot charge without a power source", 36, + NULL_PARAM, RV_TRACE_LEVEL_ERROR, FCHG_USE_ID); + return; + case FCHG_STATE_NO_CHARGING: + if (!pwr_ctrl->config_present) { + rvf_send_trace("No config set, cannot charge", 28, + NULL_PARAM, RV_TRACE_LEVEL_ERROR, + FCHG_USE_ID); + return; + } + /* FALL THRU */ + case FCHG_STATE_PWR_PLUG_TIMER: + case FCHG_STATE_READY_TO_CHARGE: + case FCHG_STATE_READY_TO_RECHARGE: + rvf_send_trace("Starting charge on user request", 31, + NULL_PARAM, RV_TRACE_LEVEL_DEBUG_HIGH, + FCHG_USE_ID); + pwr_ctrl->state = FCHG_STATE_I2V_CAL_1; + return; + case FCHG_STATE_I2V_CAL_1: + case FCHG_STATE_I2V_CAL_2: + case FCHG_STATE_CI_CHARGING: + case FCHG_STATE_CV_CHARGING: + rvf_send_trace( + "Charging already in progress, start request ignored", + 51, NULL_PARAM, RV_TRACE_LEVEL_WARNING, FCHG_USE_ID); + return; + default: + rvf_send_trace("Invalid state in pwr_charge_start_req()", 37, + pwr_ctrl->state, RV_TRACE_LEVEL_ERROR, + FCHG_USE_ID); + } +} + +void pwr_charge_stop_req(void) +{ + switch (pwr_ctrl->state) { + case FCHG_STATE_NO_EXT_PWR: + case FCHG_STATE_NO_CHARGING: + /* nothing to do */ + return; + case FCHG_STATE_PWR_PLUG_TIMER: + case FCHG_STATE_READY_TO_CHARGE: + case FCHG_STATE_READY_TO_RECHARGE: + case FCHG_STATE_I2V_CAL_1: + rvf_send_trace("Charging disabled by user request", 33, + NULL_PARAM, RV_TRACE_LEVEL_DEBUG_HIGH, + FCHG_USE_ID); + pwr_ctrl->state = FCHG_STATE_NO_CHARGING; + return; + case FCHG_STATE_I2V_CAL_2: + case FCHG_STATE_CI_CHARGING: + case FCHG_STATE_CV_CHARGING: + ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); + rvf_send_trace("Charging stopped by user request", 32, + NULL_PARAM, RV_TRACE_LEVEL_DEBUG_HIGH, + FCHG_USE_ID); + pwr_ctrl->state = FCHG_STATE_NO_CHARGING; + pwr_init_discharge(); + return; + default: + rvf_send_trace("Invalid state in pwr_charge_stop_req()", 36, + pwr_ctrl->state, RV_TRACE_LEVEL_ERROR, + FCHG_USE_ID); + } +}