view src/cs/services/fcbm/fcbm_kpd_if.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

/*
 * This module implements the interface to KPD for FCBM.
 */

#include "fcbm/fcbm_env.h"
#include "fcbm/fcbm_func_i.h"
#include "kpd/kpd_api.h"
#include "rv/rv_general.h"
#include "rvf/rvf_api.h"
#include "rvm/rvm_use_id_list.h"

static T_KPD_SUBSCRIBER fcbm_kpd_sub;

T_RV_RET fcbm_subscribe_kpd(void)
{
	T_RV_RET rc;
	T_RV_RETURN return_path;
	T_KPD_VIRTUAL_KEY_TABLE notified_keys;

	return_path.callback_func = 0;
	return_path.addr_id = fcbm_addr_id;

	notified_keys.nb_notified_keys = KPD_NB_PHYSICAL_KEYS;
	notified_keys.notified_keys[0] = KPD_KEY_0;
	notified_keys.notified_keys[1] = KPD_KEY_1;
	notified_keys.notified_keys[2] = KPD_KEY_2;
	notified_keys.notified_keys[3] = KPD_KEY_3;
	notified_keys.notified_keys[4] = KPD_KEY_4;
	notified_keys.notified_keys[5] = KPD_KEY_5;
	notified_keys.notified_keys[6] = KPD_KEY_6;
	notified_keys.notified_keys[7] = KPD_KEY_7;
	notified_keys.notified_keys[8] = KPD_KEY_8;
	notified_keys.notified_keys[9] = KPD_KEY_9;
	notified_keys.notified_keys[10] = KPD_KEY_UP;
	notified_keys.notified_keys[11] = KPD_KEY_DOWN;
	notified_keys.notified_keys[12] = KPD_KEY_SOFT_LEFT;
	notified_keys.notified_keys[13] = KPD_KEY_SOFT_RIGHT;
	notified_keys.notified_keys[14] = KPD_KEY_CONNECT;
	notified_keys.notified_keys[15] = KPD_KEY_DISCONNECT;
	notified_keys.notified_keys[16] = KPD_KEY_STAR;
	notified_keys.notified_keys[17] = KPD_KEY_DIESE;
	notified_keys.notified_keys[18] = KPD_KEY_LEFT;
	notified_keys.notified_keys[19] = KPD_KEY_RIGHT;
	notified_keys.notified_keys[20] = KPD_KEY_ENTER;
	notified_keys.notified_keys[21] = KPD_KEY_VOL_UP;
	notified_keys.notified_keys[22] = KPD_KEY_VOL_DOWN;
	notified_keys.notified_keys[23] = KPD_KEY_RECORD;

	rc = kpd_subscribe(&fcbm_kpd_sub, KPD_DEFAULT_MODE, &notified_keys,
			   return_path);
	if (rc != RV_OK) {
		rvf_send_trace("kpd_subscribe() failed", 22, rc,
				RV_TRACE_LEVEL_ERROR, FCBM_USE_ID);
		return rc;
	}

	/* long press and repeat times are dummies copied from MFW */
	rc = kpd_define_key_notification(fcbm_kpd_sub, &notified_keys,
					 KPD_FIRST_PRESS_NOTIF |
					 KPD_RELEASE_NOTIF, 30, 50);
	if (rc != RV_OK)
		rvf_send_trace("kpd_define_key_notification() failed", 36, rc,
				RV_TRACE_LEVEL_ERROR, FCBM_USE_ID);
	return rc;
}

T_RV_RET fcbm_unsubscribe_kpd(void)
{
	T_RV_RET rc;

	rc = kpd_unsubscribe(&fcbm_kpd_sub);
	if (rc != RV_OK)
		rvf_send_trace("kpd_unsubscribe() failed", 24, rc,
				RV_TRACE_LEVEL_ERROR, FCBM_USE_ID);
	return rc;
}