view src/cs/services/fcbm/fcbm_task.c @ 263:b5e8dfd114a7

Switch_ON(): go into charging boot mode on either CHGSTS or CHGPRES If someone were to plug and then unplug a charger into a switched-off phone in an extremely brief "glitch" manner, we should do an automatic power-off on boot in this condition. When we were checking only CHGPRES in Switch_ON(), we would go into Misc boot state instead, which is undesirable. Now if we have a CHGSTS but not CHGPRES condition, we will go into charging boot mode, and FCBM will then do the automatic power-off upon detecting absence of the charger in its periodic polling.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 May 2021 05:50:36 +0000
parents baa738eeb842
children
line wrap: on
line source

/*
 * The FCBM task's core function lives here.
 */

#include "fcbm/fcbm_env.h"
#include "fcbm/fcbm_func_i.h"
#include "fcbm/fcbm_timer_i.h"
#include "fcbm/fcbm_life_cycle.h"
#include "rv/rv_general.h"
#include "rvf/rvf_api.h"
#include "rvm/rvm_use_id_list.h"

enum fcbm_life_cycle_state fcbm_life_cycle_state;

T_RV_RET fcbm_core(void)
{	
	BOOLEAN error_occured = FALSE;
	T_RV_HDR *msg_ptr;

	/* 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(FCBM_MAILBOX);
			if (msg_ptr) {
				fcbm_process_message(msg_ptr);
				rvf_free_buf ((void *) msg_ptr);
			}
		}

		/* Timers */
		if (received_event & RVF_TIMER_0_EVT_MASK)
			fcbm_chg_periodic_timer();
		if (received_event & RVF_TIMER_1_EVT_MASK)
			fcbm_display_off_timer();

	}	 // end of while
	return RV_OK;	
}