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 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This is the main implementation file for the NFA EE. 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 25c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna#include "config.h" 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h" 286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_sys.h" 296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_sys_int.h" 306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_api.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_ee_vs_cback(tNFC_VS_EVT event, NFC_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 ProjecttNFA_EE_CB nfa_ee_cb; 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Constants 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic const tNFA_SYS_REG nfa_ee_sys_reg = {nfa_ee_sys_enable, nfa_ee_evt_hdlr, 446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_sys_disable, 456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_proc_nfcc_power_mode}; 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_EE_NUM_ACTIONS (NFA_EE_MAX_EVT & 0x00ff) 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiconst tNFA_EE_SM_ACT nfa_ee_actions[] = { 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFA-EE action function/ internal events */ 516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_discover, /* NFA_EE_API_DISCOVER_EVT */ 526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_register, /* NFA_EE_API_REGISTER_EVT */ 536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_deregister, /* NFA_EE_API_DEREGISTER_EVT */ 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_mode_set, /* NFA_EE_API_MODE_SET_EVT */ 556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_set_tech_cfg, /* NFA_EE_API_SET_TECH_CFG_EVT */ 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_set_proto_cfg, /* NFA_EE_API_SET_PROTO_CFG_EVT */ 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_add_aid, /* NFA_EE_API_ADD_AID_EVT */ 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_remove_aid, /* NFA_EE_API_REMOVE_AID_EVT */ 596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_lmrt_size, /* NFA_EE_API_LMRT_SIZE_EVT */ 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_update_now, /* NFA_EE_API_UPDATE_NOW_EVT */ 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_connect, /* NFA_EE_API_CONNECT_EVT */ 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_send_data, /* NFA_EE_API_SEND_DATA_EVT */ 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_disconnect, /* NFA_EE_API_DISCONNECT_EVT */ 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_disc_rsp, /* NFA_EE_NCI_DISC_RSP_EVT */ 656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_disc_ntf, /* NFA_EE_NCI_DISC_NTF_EVT */ 666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_mode_set_rsp, /* NFA_EE_NCI_MODE_SET_RSP_EVT */ 676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_conn, /* NFA_EE_NCI_CONN_EVT */ 686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_conn, /* NFA_EE_NCI_DATA_EVT */ 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_action_ntf, /* NFA_EE_NCI_ACTION_NTF_EVT */ 706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_disc_req_ntf, /* NFA_EE_NCI_DISC_REQ_NTF_EVT */ 716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_wait_rsp, /* NFA_EE_NCI_WAIT_RSP_EVT */ 726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_rout_timeout, /* NFA_EE_ROUT_TIMEOUT_EVT */ 736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_discv_timeout, /* NFA_EE_DISCV_TIMEOUT_EVT */ 746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_lmrt_to_nfcc /* NFA_EE_CFG_TO_NFCC_EVT */ 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_init 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Initialize NFA EE control block 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** register to NFA SYS 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_init(void) { 886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx; 896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG0("nfa_ee_init ()"); 916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* initialize control block */ 936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(&nfa_ee_cb, 0, sizeof(tNFA_EE_CB)); 946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++) { 956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ecb[xx].nfcee_id = NFA_EE_INVALID; 966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ecb[xx].ee_status = NFC_NFCEE_STATUS_INACTIVE; 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ecb[NFA_EE_CB_4_DH].ee_status = NFC_NFCEE_STATUS_ACTIVE; 1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ecb[NFA_EE_CB_4_DH].nfcee_id = NFC_DH_ID; 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* register message handler on NFA SYS */ 1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_register(NFA_ID_EE, &nfa_ee_sys_reg); 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sys_enable 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Enable NFA EE 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_sys_enable(void) { 116c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna unsigned long retlen = 0; 117c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna 118c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna NFA_TRACE_DEBUG1("%s", __func__); 119c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna 120c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna nfa_ee_cb.route_block_control = 0x00; 121c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna 122c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna if (GetNumValue(NAME_NFA_AID_BLOCK_ROUTE, (void*)&retlen, sizeof(retlen))) { 123c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna if ((retlen == 0x01) && (NFC_GetNCIVersion() == NCI_VERSION_2_0)) { 124c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna nfa_ee_cb.route_block_control = NCI_ROUTE_QUAL_BLOCK_ROUTE; 125c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna NFA_TRACE_DEBUG1("nfa_ee_cb.route_block_control=0x%x", 126c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna nfa_ee_cb.route_block_control); 127c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna } 128c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna } 129c6bd78b8abf1ac3ba685648be47fbd7e80bf9cfdLove Khanna 1306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_max_ee_cfg) { 1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* collect NFCEE information */ 1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_NfceeDiscover(true); 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_start_timer(&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, 1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_EE_DISCV_TIMEOUT_VAL); 1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.em_state = NFA_EE_EM_STATE_INIT_DONE; 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_cback_notify_enable_complete(NFA_ID_EE); 1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_restore_one_ecb 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description activate the NFCEE and restore the routing when 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** changing power state from low power mode to full power mode 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_restore_one_ecb(tNFA_EE_ECB* p_cb) { 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t mask; 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_NFCEE_MODE_SET_REVT rsp; 1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_NCI_MODE_SET ee_msg; 1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG4( 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "nfa_ee_restore_one_ecb () nfcee_id:0x%x, ecb_flags:0x%x ee_status:0x%x " 1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "ee_old_status: 0x%x", 1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->nfcee_id, p_cb->ecb_flags, p_cb->ee_status, p_cb->ee_old_status); 1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb->nfcee_id != NFA_EE_INVALID) && 1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_cb->ee_status & NFA_EE_STATUS_RESTORING) == 0 && 1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_cb->ee_old_status & NFA_EE_STATUS_RESTORING) != 0) { 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ee_old_status &= ~NFA_EE_STATUS_RESTORING; 1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi mask = nfa_ee_ecb_to_mask(p_cb); 1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb->ee_status != p_cb->ee_old_status) { 1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb->ee_old_status == NFC_NFCEE_STATUS_ACTIVE) { 1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_NfceeModeSet(p_cb->nfcee_id, NFC_MODE_ACTIVATE); 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.ee_cfged & mask) { 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if any routing is configured on this NFCEE. need to mark this NFCEE 1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * as changed 1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * to cause the configuration to be sent to NFCC again */ 1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING; 1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS; 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_NfceeModeSet(p_cb->nfcee_id, NFC_MODE_DEACTIVATE); 1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) { 1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* the initial NFCEE status after start up is the same as the current 1826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * status and it's active: 1836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * process the same as the host gets activate rsp */ 1846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.ee_cfged & mask) { 1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if any routing is configured on this NFCEE. need to mark this NFCEE 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * as changed 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * to cause the configuration to be sent to NFCC again */ 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING; 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS; 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rsp.mode = NFA_EE_MD_ACTIVATE; 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rsp.nfcee_id = p_cb->nfcee_id; 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rsp.status = NFA_STATUS_OK; 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ee_msg.p_data = &rsp; 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_mode_set_rsp((tNFA_EE_MSG*)&ee_msg); 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_nfcc_power_mode 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Restore NFA EE sub-module 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_proc_nfcc_power_mode(uint8_t nfcc_power_mode) { 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool proc_complete = true; 2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG1("nfa_ee_proc_nfcc_power_mode (): nfcc_power_mode=%d", 2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfcc_power_mode); 2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if NFCC power state is change to full power */ 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) { 2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_max_ee_cfg) { 2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) { 2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ee_old_status = 0; 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx >= nfa_ee_cb.cur_ee) p_cb->nfcee_id = NFA_EE_INVALID; 2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb->nfcee_id != NFA_EE_INVALID) && 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS) && 2276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_cb->ee_status != NFA_EE_STATUS_REMOVED)) { 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi proc_complete = false; 2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_EE_STATUS_RESTORING bit makes sure the ee_status restore to 2306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * ee_old_status 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * NFA_EE_STATUS_RESTORING bit is cleared in ee_status at 2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * NFCEE_DISCOVER NTF. 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * NFA_EE_STATUS_RESTORING bit is cleared in ee_old_status at 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * restoring the activate/inactive status after NFCEE_DISCOVER NTF */ 2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ee_status |= NFA_EE_STATUS_RESTORING; 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ee_old_status = p_cb->ee_status; 2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_EE_FLAGS_RESTORE bit makes sure the routing/nci logical 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * connection is restore to prior to entering low power mode */ 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_RESTORE; 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.em_state = NFA_EE_EM_STATE_RESTORING; 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.num_ee_expecting = 0; 2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_sys_is_register(NFA_ID_HCI)) { 2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_HCI; 2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ee_flags |= NFA_EE_FLAG_NOTIFY_HCI; 2476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_NfceeDiscover(true); 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_start_timer(&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, 2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_EE_DISCV_TIMEOUT_VAL); 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_stop_timer(&nfa_ee_cb.timer); 2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_stop_timer(&nfa_ee_cb.discv_timer); 2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.num_ee_expecting = 0; 2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (proc_complete) 2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_cback_notify_nfcc_power_mode_proc_complete(NFA_ID_EE); 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_hci_info_cback 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description HCI initialization complete from power off sleep mode 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_proc_hci_info_cback(void) { 2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_MSG data; 2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG0("nfa_ee_proc_hci_info_cback ()"); 2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if NFCC power state is change to full power */ 2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_HCI; 2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 2816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) { 2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NCI spec says: An NFCEE_DISCOVER_NTF that contains a Protocol type of 2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * "HCI Access" 2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * SHALL NOT contain any other additional Protocol 2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * i.e. check only first supported NFCEE interface is HCI access */ 2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_HCI module handles restoring configurations for HCI access */ 2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS) { 2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_restore_one_ecb(p_cb); 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_restore_ntf_done()) { 2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_check_restore_complete(); 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_INIT_DONE) { 2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.discv_timer.in_use) { 2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_stop_timer(&nfa_ee_cb.discv_timer); 2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi data.hdr.event = NFA_EE_DISCV_TIMEOUT_EVT; 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_evt_hdlr((NFC_HDR*)&data); 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 30045e68232b8524aca5165dca28b994ec8c11593b1Evan Chu } 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_proc_evt 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NFCEE related events from NFC stack 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_proc_evt(tNFC_RESPONSE_EVT event, void* p_data) { 3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_INT_EVT int_event = 0; 3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_NCI_WAIT_RSP cbk; 3176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_hdr; 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi switch (event) { 3206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi case NFC_NFCEE_DISCOVER_REVT: /* 4 NFCEE Discover response */ 3216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_DISC_RSP_EVT; 3226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi case NFC_NFCEE_INFO_REVT: /* 5 NFCEE Discover Notification */ 3256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_DISC_NTF_EVT; 3266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 3276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi case NFC_NFCEE_MODE_SET_REVT: /* 6 NFCEE Mode Set response */ 3296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_MODE_SET_RSP_EVT; 3306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_ACTION_REVT: 3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_ACTION_NTF_EVT; 3346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi case NFC_EE_DISCOVER_REQ_REVT: /* 10 EE Discover Req notification */ 3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_DISC_REQ_NTF_EVT; 3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34040e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith case NFC_SET_ROUTING_REVT: 3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event = NFA_EE_NCI_WAIT_RSP_EVT; 3426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi cbk.opcode = NCI_MSG_RF_SET_ROUTING; 3436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 3446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG2("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event, 3476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int_event); 3486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (int_event) { 3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_hdr = (NFC_HDR*)&cbk; 3506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi cbk.hdr.event = int_event; 3516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi cbk.p_data = p_data; 3526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_evt_hdlr(p_hdr); 3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_ecb_to_mask 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 361552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description Given a ecb, return the bit mask to be used in 362552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** nfa_ee_cb.ee_cfged 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns the bitmask for the given ecb. 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nfa_ee_ecb_to_mask(tNFA_EE_ECB* p_cb) { 3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t mask; 3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t index; 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi index = (uint8_t)(p_cb - nfa_ee_cb.ecb); 3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi mask = 1 << index; 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return mask; 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_find_ecb 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Return the ecb associated with the given nfcee_id 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_EE_ECB 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3866fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_EE_ECB* nfa_ee_find_ecb(uint8_t nfcee_id) { 3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 3886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB *p_ret = NULL, *p_cb; 3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG0("nfa_ee_find_ecb ()"); 3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfcee_id == NFC_DH_ID) { 3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_ret = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH]; 3936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 3946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) { 3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfcee_id == p_cb->nfcee_id) { 3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_ret = p_cb; 3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 4016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return p_ret; 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_find_ecb_by_conn_id 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Return the ecb associated with the given connection id 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_EE_ECB 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4156fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_EE_ECB* nfa_ee_find_ecb_by_conn_id(uint8_t conn_id) { 4166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB *p_ret = NULL, *p_cb; 4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG0("nfa_ee_find_ecb_by_conn_id ()"); 4196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 4216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) { 4226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (conn_id == p_cb->conn_id) { 4236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_ret = p_cb; 4246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 4266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return p_ret; 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sys_disable 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deregister NFA EE from NFA SYS/DM 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_sys_disable(void) { 4426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 4436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 4446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_MSG msg; 4456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG0("nfa_ee_sys_disable ()"); 4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED; 4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* report NFA_EE_DEREGISTER_EVT to all registered to EE */ 4506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++) { 4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.p_ee_cback[xx]) { 4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi msg.deregister.index = xx; 4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_deregister(&msg); 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 4556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.num_ee_expecting = 0; 4586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) { 4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb->conn_st == NFA_EE_CONN_ST_CONN) { 4616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_sys_is_graceful_disable()) { 4626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Disconnect NCI connection on graceful shutdown */ 4636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi msg.disconnect.p_cb = p_cb; 4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_api_disconnect(&msg); 4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.num_ee_expecting++; 4666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 4676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* fake NFA_EE_DISCONNECT_EVT on ungraceful shutdown */ 4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi msg.conn.conn_id = p_cb->conn_id; 4696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi msg.conn.event = NFC_CONN_CLOSE_CEVT; 4706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_nci_conn(&msg); 4716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 4756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.num_ee_expecting) { 4766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_DISCONN; 4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLING; 4786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_stop_timer(&nfa_ee_cb.timer); 4816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_stop_timer(&nfa_ee_cb.discv_timer); 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* If Application initiated NFCEE discovery, fake/report the event */ 4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_report_disc_done(false); 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* deregister message handler on NFA SYS */ 4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLED) 4886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_deregister(NFA_ID_EE); 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 4905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 4915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 4925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 4935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function nfa_ee_check_disable 4945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 4955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description Check if it is safe to move to disabled state 4965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 4975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns None 4985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 4995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 5006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_check_disable(void) { 5016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!(nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN)) { 5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED; 5036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_deregister(NFA_ID_EE); 5046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 5055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_reg_cback_enable_done 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allow a module to register to EE to be notified when NFA-EE 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** finishes enable process 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_reg_cback_enable_done(tNFA_EE_ENABLE_DONE_CBACK* p_cback) { 5176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_cb.p_enable_cback = p_cback; 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sm_st_2_str 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfa-ee state to string 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic char* nfa_ee_sm_st_2_str(uint8_t state) { 5296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi switch (state) { 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT: 5316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "INIT"; 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT_DONE: 5346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "INIT_DONE"; 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_RESTORING: 5376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "RESTORING"; 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLING: 5406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "DISABLING"; 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLED: 5436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "DISABLED"; 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 5466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "Unknown"; 5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_sm_evt_2_str 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfa-ee evt to string 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic char* nfa_ee_sm_evt_2_str(uint16_t event) { 5586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi switch (event) { 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DISCOVER_EVT: 5606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_DISCOVER"; 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_REGISTER_EVT: 5626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_REGISTER"; 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DEREGISTER_EVT: 5646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_DEREGISTER"; 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_MODE_SET_EVT: 5666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_MODE_SET"; 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SET_TECH_CFG_EVT: 5686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_SET_TECH_CFG"; 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SET_PROTO_CFG_EVT: 5706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_SET_PROTO_CFG"; 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_ADD_AID_EVT: 5726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_ADD_AID"; 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_REMOVE_AID_EVT: 5746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_REMOVE_AID"; 575ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith case NFA_EE_API_LMRT_SIZE_EVT: 5766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_LMRT_SIZE"; 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_UPDATE_NOW_EVT: 5786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_UPDATE_NOW"; 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_CONNECT_EVT: 5806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_CONNECT"; 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_SEND_DATA_EVT: 5826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_SEND_DATA"; 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_API_DISCONNECT_EVT: 5846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "API_DISCONNECT"; 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_RSP_EVT: 5866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_DISC_RSP"; 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_NTF_EVT: 5886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_DISC_NTF"; 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_MODE_SET_RSP_EVT: 5906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_MODE_SET"; 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_CONN_EVT: 5926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_CONN"; 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DATA_EVT: 5946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_DATA"; 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_ACTION_NTF_EVT: 5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_ACTION"; 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_NCI_DISC_REQ_NTF_EVT: 5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_DISC_REQ"; 59940e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith case NFA_EE_NCI_WAIT_RSP_EVT: 6006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NCI_WAIT_RSP"; 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_ROUT_TIMEOUT_EVT: 6026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "ROUT_TIMEOUT"; 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_DISCV_TIMEOUT_EVT: 6046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "NFA_EE_DISCV_TIMEOUT_EVT"; 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_CFG_TO_NFCC_EVT: 6066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "CFG_TO_NFCC"; 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 6086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return "Unknown"; 6096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_TRACE_VERBOSE */ 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_ee_evt_hdlr 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing event for NFA EE 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE if p_msg needs to be deallocated 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_ee_evt_hdlr(NFC_HDR* p_msg) { 6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_MSG* p_evt_data = (tNFA_EE_MSG*)p_msg; 6256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t event = p_msg->event & 0x00ff; 6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool act = false; 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG4("nfa_ee_evt_hdlr (): Event %s(0x%02x), State: %s(%d)", 6306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_sm_evt_2_str(p_evt_data->hdr.event), 6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_evt_data->hdr.event, 6326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_sm_st_2_str(nfa_ee_cb.em_state), nfa_ee_cb.em_state); 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 6346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_TRACE_DEBUG2("nfa_ee_evt_hdlr (): Event 0x%02x, State: %d", 6356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_evt_data->hdr.event, nfa_ee_cb.em_state); 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi switch (nfa_ee_cb.em_state) { 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT_DONE: 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_RESTORING: 6416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi act = true; 6426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_INIT: 6446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_msg->event == NFA_EE_NCI_DISC_NTF_EVT) || 6456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_msg->event == NFA_EE_NCI_DISC_RSP_EVT)) 6466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi act = true; 6476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_EE_EM_STATE_DISABLING: 6496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_msg->event == NFA_EE_NCI_CONN_EVT) act = true; 6506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 6516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (act) { 6536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (event < NFA_EE_NUM_ACTIONS) { 6546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (*nfa_ee_actions[event])(p_evt_data); 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 6566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 6576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if the data event is not handled by action function, free the data packet 6586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi */ 6596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_msg->event == NFA_EE_NCI_DATA_EVT) 6606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi GKI_freebuf(p_evt_data->conn.p_data); 6616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 665