1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This is the main implementation file for the NFA EE. 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void nfa_ee_vs_cback (tNFC_VS_EVT event, BT_HDR *p_data); 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Global Variables 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* system manager control block definition */ 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFA_DYNAMIC_MEMORY == FALSE 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_CB nfa_ee_cb; 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Constants 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic const tNFA_SYS_REG nfa_ee_sys_reg = 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_sys_enable, 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_evt_hdlr, 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_sys_disable, 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_proc_nfcc_power_mode 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_EE_NUM_ACTIONS (NFA_EE_MAX_EVT & 0x00ff) 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectconst tNFA_EE_SM_ACT nfa_ee_actions[] = 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFA-EE action function/ internal events */ 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_discover , /* NFA_EE_API_DISCOVER_EVT */ 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_register , /* NFA_EE_API_REGISTER_EVT */ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_deregister , /* NFA_EE_API_DEREGISTER_EVT */ 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_mode_set , /* NFA_EE_API_MODE_SET_EVT */ 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_set_tech_cfg , /* NFA_EE_API_SET_TECH_CFG_EVT */ 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_set_proto_cfg, /* NFA_EE_API_SET_PROTO_CFG_EVT */ 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_add_aid , /* NFA_EE_API_ADD_AID_EVT */ 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_remove_aid , /* NFA_EE_API_REMOVE_AID_EVT */ 68ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith nfa_ee_api_lmrt_size , /* NFA_EE_API_LMRT_SIZE_EVT */ 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_update_now , /* NFA_EE_API_UPDATE_NOW_EVT */ 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_connect , /* NFA_EE_API_CONNECT_EVT */ 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_send_data , /* NFA_EE_API_SEND_DATA_EVT */ 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_disconnect , /* NFA_EE_API_DISCONNECT_EVT */ 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_disc_rsp , /* NFA_EE_NCI_DISC_RSP_EVT */ 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_disc_ntf , /* NFA_EE_NCI_DISC_NTF_EVT */ 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_mode_set_rsp , /* NFA_EE_NCI_MODE_SET_RSP_EVT */ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_conn , /* NFA_EE_NCI_CONN_EVT */ 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_conn , /* NFA_EE_NCI_DATA_EVT */ 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_action_ntf , /* NFA_EE_NCI_ACTION_NTF_EVT */ 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_disc_req_ntf , /* NFA_EE_NCI_DISC_REQ_NTF_EVT */ 8040e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith nfa_ee_nci_wait_rsp , /* NFA_EE_NCI_WAIT_RSP_EVT */ 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_rout_timeout , /* NFA_EE_ROUT_TIMEOUT_EVT */ 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_discv_timeout , /* NFA_EE_DISCV_TIMEOUT_EVT */ 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_lmrt_to_nfcc /* NFA_EE_CFG_TO_NFCC_EVT */ 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_init 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Initialize NFA EE control block 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** register to NFA SYS 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_init (void) 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_ee_init ()"); 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* initialize control block */ 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&nfa_ee_cb, 0, sizeof (tNFA_EE_CB)); 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++) 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.ecb[xx].nfcee_id = NFA_EE_INVALID; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.ecb[xx].ee_status = NFC_NFCEE_STATUS_INACTIVE; 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.ecb[NFA_EE_CB_4_DH].ee_status = NFC_NFCEE_STATUS_ACTIVE; 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.ecb[NFA_EE_CB_4_DH].nfcee_id = NFC_DH_ID; 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* register message handler on NFA SYS */ 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_register (NFA_ID_EE, &nfa_ee_sys_reg); 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sys_enable 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Enable NFA EE 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_sys_enable (void) 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 12981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith if (nfa_ee_max_ee_cfg) 13081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith { 13181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith /* collect NFCEE information */ 13281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith NFC_NfceeDiscover (TRUE); 13381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_sys_start_timer (&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL); 13481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith } 13581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith else 13681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith { 13781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_ee_cb.em_state = NFA_EE_EM_STATE_INIT_DONE; 13881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_sys_cback_notify_enable_complete (NFA_ID_EE); 13981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith } 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_restore_one_ecb 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description activate the NFCEE and restore the routing when 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** changing power state from low power mode to full power mode 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_restore_one_ecb (tNFA_EE_ECB *p_cb) 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 mask; 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_MODE_SET_REVT rsp; 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_NCI_MODE_SET ee_msg; 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG4 ("nfa_ee_restore_one_ecb () nfcee_id:0x%x, ecb_flags:0x%x ee_status:0x%x ee_old_status: 0x%x", p_cb->nfcee_id, p_cb->ecb_flags, p_cb->ee_status, p_cb->ee_old_status); 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_cb->nfcee_id != NFA_EE_INVALID) && (p_cb->ee_status & NFA_EE_STATUS_RESTORING) == 0 && (p_cb->ee_old_status & NFA_EE_STATUS_RESTORING) != 0) 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ee_old_status &= ~NFA_EE_STATUS_RESTORING; 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mask = nfa_ee_ecb_to_mask(p_cb); 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb->ee_status != p_cb->ee_old_status) 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb->ee_old_status == NFC_NFCEE_STATUS_ACTIVE) 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_NfceeModeSet (p_cb->nfcee_id, NFC_MODE_ACTIVATE); 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_ee_cb.ee_cfged & mask) 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if any routing is configured on this NFCEE. need to mark this NFCEE as changed 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * to cause the configuration to be sent to NFCC again */ 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING; 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS; 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_NfceeModeSet (p_cb->nfcee_id, NFC_MODE_DEACTIVATE); 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* the initial NFCEE status after start up is the same as the current status and it's active: 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * process the same as the host gets activate rsp */ 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_ee_cb.ee_cfged & mask) 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if any routing is configured on this NFCEE. need to mark this NFCEE as changed 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * to cause the configuration to be sent to NFCC again */ 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING; 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS; 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rsp.mode = NFA_EE_MD_ACTIVATE; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rsp.nfcee_id = p_cb->nfcee_id; 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rsp.status = NFA_STATUS_OK; 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ee_msg.p_data = &rsp; 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_mode_set_rsp ((tNFA_EE_MSG *) &ee_msg); 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_nfcc_power_mode 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Restore NFA EE sub-module 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_nfcc_power_mode (UINT8 nfcc_power_mode) 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 xx; 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_ECB *p_cb; 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN proc_complete = TRUE; 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_ee_proc_nfcc_power_mode (): nfcc_power_mode=%d", nfcc_power_mode); 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFCC power state is change to full power */ 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 22381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith if (nfa_ee_max_ee_cfg) 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 22581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb = nfa_ee_cb.ecb; 22681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) 22781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith { 22881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb->ee_old_status = 0; 22981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith if (xx >= nfa_ee_cb.cur_ee) 23081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb->nfcee_id = NFA_EE_INVALID; 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 23281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith if ((p_cb->nfcee_id != NFA_EE_INVALID) && (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS) && (p_cb->ee_status != NFA_EE_STATUS_REMOVED)) 23381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith { 23481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith proc_complete = FALSE; 23581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith /* NFA_EE_STATUS_RESTORING bit makes sure the ee_status restore to ee_old_status 23681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith * NFA_EE_STATUS_RESTORING bit is cleared in ee_status at NFCEE_DISCOVER NTF. 23781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith * NFA_EE_STATUS_RESTORING bit is cleared in ee_old_status at restoring the activate/inactive status after NFCEE_DISCOVER NTF */ 23881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb->ee_status |= NFA_EE_STATUS_RESTORING; 23981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb->ee_old_status = p_cb->ee_status; 24081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith /* NFA_EE_FLAGS_RESTORE bit makes sure the routing/nci logical connection is restore to prior to entering low power mode */ 24181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 24281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith } 24381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith } 24481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_ee_cb.em_state = NFA_EE_EM_STATE_RESTORING; 24581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_ee_cb.num_ee_expecting = 0; 24681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith if (nfa_sys_is_register (NFA_ID_HCI)) 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 24881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_HCI; 24981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_ee_cb.ee_flags |= NFA_EE_FLAG_NOTIFY_HCI; 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 25181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith NFC_NfceeDiscover (TRUE); 25281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith nfa_sys_start_timer (&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL); 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_stop_timer (&nfa_ee_cb.timer); 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_stop_timer (&nfa_ee_cb.discv_timer); 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.num_ee_expecting = 0; 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (proc_complete) 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_cback_notify_nfcc_power_mode_proc_complete (NFA_ID_EE); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_hci_info_cback 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description HCI initialization complete from power off sleep mode 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_hci_info_cback (void) 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 xx; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_ECB *p_cb; 27945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu tNFA_EE_MSG data; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_ee_proc_hci_info_cback ()"); 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFCC power state is change to full power */ 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_HCI; 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb = nfa_ee_cb.ecb; 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NCI spec says: An NFCEE_DISCOVER_NTF that contains a Protocol type of "HCI Access" 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * SHALL NOT contain any other additional Protocol 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * i.e. check only first supported NFCEE interface is HCI access */ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFA_HCI module handles restoring configurations for HCI access */ 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS) 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_restore_one_ecb (p_cb); 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 29745e68232b8524aca5165dca28b994ec8c11593b1Evan Chu 29845e68232b8524aca5165dca28b994ec8c11593b1Evan Chu if (nfa_ee_restore_ntf_done()) 29945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu { 30045e68232b8524aca5165dca28b994ec8c11593b1Evan Chu nfa_ee_check_restore_complete(); 30145e68232b8524aca5165dca28b994ec8c11593b1Evan Chu if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_INIT_DONE) 30245e68232b8524aca5165dca28b994ec8c11593b1Evan Chu { 30345e68232b8524aca5165dca28b994ec8c11593b1Evan Chu if (nfa_ee_cb.discv_timer.in_use) 30445e68232b8524aca5165dca28b994ec8c11593b1Evan Chu { 30545e68232b8524aca5165dca28b994ec8c11593b1Evan Chu nfa_sys_stop_timer (&nfa_ee_cb.discv_timer); 30645e68232b8524aca5165dca28b994ec8c11593b1Evan Chu data.hdr.event = NFA_EE_DISCV_TIMEOUT_EVT; 30745e68232b8524aca5165dca28b994ec8c11593b1Evan Chu nfa_ee_evt_hdlr((BT_HDR *)&data); 30845e68232b8524aca5165dca28b994ec8c11593b1Evan Chu } 30945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu } 31045e68232b8524aca5165dca28b994ec8c11593b1Evan Chu } 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_evt 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NFCEE related events from NFC stack 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_evt (tNFC_RESPONSE_EVT event, void *p_data) 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_INT_EVT int_event=0; 32640e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith tNFA_EE_NCI_WAIT_RSP cbk; 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_hdr; 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_DISCOVER_REVT: /* 4 NFCEE Discover response */ 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int_event = NFA_EE_NCI_DISC_RSP_EVT; 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_INFO_REVT: /* 5 NFCEE Discover Notification */ 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int_event = NFA_EE_NCI_DISC_NTF_EVT; 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_MODE_SET_REVT: /* 6 NFCEE Mode Set response */ 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int_event = NFA_EE_NCI_MODE_SET_RSP_EVT; 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_ACTION_REVT: 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int_event = NFA_EE_NCI_ACTION_NTF_EVT; 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_DISCOVER_REQ_REVT: /* 10 EE Discover Req notification */ 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int_event = NFA_EE_NCI_DISC_REQ_NTF_EVT; 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35140e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith case NFC_SET_ROUTING_REVT: 35240e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith int_event = NFA_EE_NCI_WAIT_RSP_EVT; 35340e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith cbk.opcode = NCI_MSG_RF_SET_ROUTING; 35440e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith break; 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event, int_event); 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (int_event) 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_hdr = (BT_HDR *) &cbk; 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project cbk.hdr.event = int_event; 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project cbk.p_data = p_data; 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_evt_hdlr (p_hdr); 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_ecb_to_mask 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Given a ecb, return the bit mask to be used in nfa_ee_cb.ee_cfged 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns the bitmask for the given ecb. 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_ee_ecb_to_mask (tNFA_EE_ECB *p_cb) 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 mask; 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 index; 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project index = (UINT8) (p_cb - nfa_ee_cb.ecb); 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mask = 1 << index; 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return mask; 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_find_ecb 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Return the ecb associated with the given nfcee_id 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_EE_ECB 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_ECB * nfa_ee_find_ecb (UINT8 nfcee_id) 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 xx; 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_ECB *p_ret = NULL, *p_cb; 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_ee_find_ecb ()"); 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcee_id == NFC_DH_ID) 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_ret = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH]; 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb = nfa_ee_cb.ecb; 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcee_id == p_cb->nfcee_id) 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_ret = p_cb; 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return p_ret; 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_find_ecb_by_conn_id 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Return the ecb associated with the given connection id 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_EE_ECB 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_ECB * nfa_ee_find_ecb_by_conn_id (UINT8 conn_id) 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 xx; 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_ECB *p_ret = NULL, *p_cb; 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_ee_find_ecb_by_conn_id ()"); 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb = nfa_ee_cb.ecb; 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (conn_id == p_cb->conn_id) 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_ret = p_cb; 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return p_ret; 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sys_disable 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deregister NFA EE from NFA SYS/DM 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_sys_disable (void) 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 xx; 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_ECB *p_cb; 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_MSG msg; 4675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_ee_sys_disable ()"); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED; 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* report NFA_EE_DEREGISTER_EVT to all registered to EE */ 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++) 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_ee_cb.p_ee_cback[xx]) 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project msg.deregister.index = xx; 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_deregister (&msg); 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_cb.num_ee_expecting = 0; 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb = nfa_ee_cb.ecb; 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb->conn_st == NFA_EE_CONN_ST_CONN) 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_sys_is_graceful_disable ()) 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Disconnect NCI connection on graceful shutdown */ 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project msg.disconnect.p_cb = p_cb; 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_api_disconnect (&msg); 4925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_cb.num_ee_expecting++; 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* fake NFA_EE_DISCONNECT_EVT on ungraceful shutdown */ 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project msg.conn.conn_id = p_cb->conn_id; 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project msg.conn.event = NFC_CONN_CLOSE_CEVT; 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_nci_conn (&msg); 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 5035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_ee_cb.num_ee_expecting) 5055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 5065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_DISCONN; 5075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLING; 5085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 5095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_stop_timer (&nfa_ee_cb.timer); 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_stop_timer (&nfa_ee_cb.discv_timer); 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If Application initiated NFCEE discovery, fake/report the event */ 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_report_disc_done (FALSE); 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* deregister message handler on NFA SYS */ 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLED) 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_deregister (NFA_ID_EE); 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 5225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function nfa_ee_check_disable 5265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description Check if it is safe to move to disabled state 5285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns None 5305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 5325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid nfa_ee_check_disable (void) 5335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 5345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN)) 5355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 5365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED; 5375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_deregister (NFA_ID_EE); 5385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 5395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_reg_cback_enable_done 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allow a module to register to EE to be notified when NFA-EE 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** finishes enable process 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_reg_cback_enable_done (tNFA_EE_ENABLE_DONE_CBACK *p_cback) 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_cb.p_enable_cback = p_cback; 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sm_st_2_str 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfa-ee state to string 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_ee_sm_st_2_str (UINT8 state) 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (state) 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT: 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "INIT"; 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT_DONE: 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "INIT_DONE"; 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_RESTORING: 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "RESTORING"; 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLING: 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISABLING"; 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLED: 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISABLED"; 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "Unknown"; 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sm_evt_2_str 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfa-ee evt to string 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_ee_sm_evt_2_str (UINT16 event) 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DISCOVER_EVT: 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_DISCOVER"; 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_REGISTER_EVT: 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_REGISTER"; 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DEREGISTER_EVT: 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_DEREGISTER"; 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_MODE_SET_EVT: 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_MODE_SET"; 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SET_TECH_CFG_EVT: 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_SET_TECH_CFG"; 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SET_PROTO_CFG_EVT: 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_SET_PROTO_CFG"; 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_ADD_AID_EVT: 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_ADD_AID"; 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_REMOVE_AID_EVT: 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_REMOVE_AID"; 614ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith case NFA_EE_API_LMRT_SIZE_EVT: 615ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith return "API_LMRT_SIZE"; 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_UPDATE_NOW_EVT: 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_UPDATE_NOW"; 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_CONNECT_EVT: 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_CONNECT"; 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SEND_DATA_EVT: 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_SEND_DATA"; 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DISCONNECT_EVT: 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "API_DISCONNECT"; 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_RSP_EVT: 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_DISC_RSP"; 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_NTF_EVT: 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_DISC_NTF"; 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_MODE_SET_RSP_EVT: 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_MODE_SET"; 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_CONN_EVT: 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_CONN"; 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DATA_EVT: 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_DATA"; 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_ACTION_NTF_EVT: 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_ACTION"; 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_REQ_NTF_EVT: 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NCI_DISC_REQ"; 63840e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith case NFA_EE_NCI_WAIT_RSP_EVT: 63940e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith return "NCI_WAIT_RSP"; 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_ROUT_TIMEOUT_EVT: 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "ROUT_TIMEOUT"; 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_DISCV_TIMEOUT_EVT: 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFA_EE_DISCV_TIMEOUT_EVT"; 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_CFG_TO_NFCC_EVT: 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "CFG_TO_NFCC"; 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "Unknown"; 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_TRACE_VERBOSE */ 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_evt_hdlr 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing event for NFA EE 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE if p_msg needs to be deallocated 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_ee_evt_hdlr (BT_HDR *p_msg) 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_EE_MSG *p_evt_data = (tNFA_EE_MSG *) p_msg; 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 event = p_msg->event & 0x00ff; 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN act = FALSE; 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG4 ("nfa_ee_evt_hdlr (): Event %s(0x%02x), State: %s(%d)", 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_sm_evt_2_str (p_evt_data->hdr.event), p_evt_data->hdr.event, 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_sm_st_2_str (nfa_ee_cb.em_state), nfa_ee_cb.em_state); 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_ee_evt_hdlr (): Event 0x%02x, State: %d", p_evt_data->hdr.event, nfa_ee_cb.em_state); 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (nfa_ee_cb.em_state) 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT_DONE: 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_RESTORING: 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project act = TRUE; 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT: 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg->event == NFA_EE_NCI_DISC_NTF_EVT) || (p_msg->event == NFA_EE_NCI_DISC_RSP_EVT)) 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project act = TRUE; 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLING: 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_msg->event == NFA_EE_NCI_CONN_EVT) 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project act = TRUE; 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (act) 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (event < NFA_EE_NUM_ACTIONS) 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_ee_actions[event]) (p_evt_data); 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if the data event is not handled by action function, free the data packet */ 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_msg->event == NFA_EE_NCI_DATA_EVT) 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_evt_data->conn.p_data); 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 709