FreeCalypso > hg > fc-tourmaline
view src/cs/drivers/drv_app/fchg/fchg_task.c @ 292:0f688d07b068
block deep sleep on activity in new PWT and vibrator drivers
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 27 Mar 2022 00:29:19 +0000 |
parents | aec644728174 |
children |
line wrap: on
line source
/* * The FCHG task's core function lives here. */ #include "fchg/fchg_env.h" #include "fchg/fchg_func_i.h" #include "fchg/bsim_func_i.h" #include "rv/rv_general.h" #include "rvf/rvf_api.h" #include "rvm/rvm_use_id_list.h" #include "abb/abb.h" #include "etm/etm.h" #include "etm/etm_api.h" static void set_initial_state(void) { SYS_UWORD16 abb_status; abb_status = ABB_Read_Status(); if (abb_status & CHGPRES) { if (pwr_ctrl->config_present || pwr_ctrl->bsim_mode) pwr_ctrl->state = FCHG_STATE_READY_TO_CHARGE; else pwr_ctrl->state = FCHG_STATE_NO_CHARGING; } else pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; } T_RV_RET fchg_core(void) { BOOLEAN error_occured = FALSE; T_RV_HDR *msg_ptr; rvf_send_trace("FCHG task: Initialization", 25, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, FCHG_USE_ID); pwr_load_ffs_batt_table(); pwr_check_ffs_bsim(); if (!pwr_ctrl->bsim_mode) pwr_load_ffs_charging_config(); set_initial_state(); /* just for safety, clear any previous BCI hardware state */ ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); if (pwr_ctrl->bsim_mode) { bsim_init_percent(); etm_register("BSIM", ETM_BSIM, 0, pwr_ctrl->addr_id, 0); } else pwr_init_discharge(); /* loop to process messages */ while (error_occured == FALSE) { /* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */ UINT16 received_event = rvf_wait (0xffff, 0); /* If an event related to mailbox 0 is received, then */ if (received_event & RVF_TASK_MBOX_0_EVT_MASK) { /* Read the message in the driver mailbox and delegate action..*/ msg_ptr = (T_RV_HDR *) rvf_read_mbox(FCHG_MAILBOX); if (msg_ptr) { pwr_process_message(msg_ptr); rvf_free_buf ((void *) msg_ptr); } } /* Timers */ if (received_event & RVF_TIMER_0_EVT_MASK) pwr_handle_timer(); } // end of while return RV_OK; }