view src/cs/drivers/drv_app/fchg/fchg_task.c @ 597:f18b29e27be5

First attempt at MCSI voice path automatic switching The function is implemented at the ACI level in both aci2 and aci3, successfully avoids triggering the DSP bug on the first call, but the shutdown of MCSI upon call completion is not working properly yet in either version.
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 27 Mar 2019 22:18:35 +0000
parents 1c711302732a
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 "rv/rv_general.h"
#include "rvf/rvf_api.h"
#include "rvm/rvm_use_id_list.h"
#include "abb/abb.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->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_load_ffs_charging_config();
	set_initial_state();
	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;	
}