diff src/cs/drivers/drv_app/fchg/fchg_task.c @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children 032a561fab2b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/drivers/drv_app/fchg/fchg_task.c	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,61 @@
+/*
+ * 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;	
+}