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 * NFA interface to NFCEE - API functions 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 248a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <android-base/stringprintf.h> 258a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <base/logging.h> 268a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_dm_int.h" 281d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna#include "nfa_ee_api.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h" 301d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna#include "nfc_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 328a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachusing android::base::StringPrintf; 338a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 348a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachextern bool nfc_debug_enabled; 358a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** APIs 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeDiscover 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function retrieves the NFCEE information from NFCC. 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The NFCEE information is reported in NFA_EE_DISCOVER_EVT. 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** This function may be called when a system supports removable 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFCEEs, 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if information is retrieved successfully 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED If wrong state (retry later) 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeDiscover(tNFA_EE_CBACK* p_cback) { 556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_DISCOVER* p_msg; 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 586767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.em_state != NFA_EE_EM_STATE_INIT_DONE) { 616767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("NFA_EeDiscover bad em state: %d", 626767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi nfa_ee_cb.em_state); 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_FAILED; 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if ((nfa_ee_cb.p_ee_disc_cback != NULL) || (p_cback == NULL)) { 656767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("in progress or NULL callback function"); 666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 670c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 680c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_DISCOVER*)GKI_getbuf(sizeof(tNFA_EE_API_DISCOVER)); 690c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 700c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_DISCOVER_EVT; 710c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cback = p_cback; 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 730c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 750c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 760c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeGetInfo 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function retrieves the NFCEE information from NFA. 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The actual number of NFCEE is returned in p_num_nfcee 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and NFCEE information is returned in p_info 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if information is retrieved successfully 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED If wrong state (retry later) 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 956fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeGetInfo(uint8_t* p_num_nfcee, tNFA_EE_INFO* p_info) { 966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx, ret = nfa_ee_cb.cur_ee; 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb = nfa_ee_cb.ecb; 986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t max_ret; 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t num_ret = 0; 1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 1026767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("NFA_EeGetInfo em_state:%d cur_ee:%d", nfa_ee_cb.em_state, 1036767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi nfa_ee_cb.cur_ee); 1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* validate parameters */ 1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_info == NULL || p_num_nfcee == NULL) { 1066767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("NFA_EeGetInfo bad parameter"); 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_INVALID_PARAM); 1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi max_ret = *p_num_nfcee; 1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *p_num_nfcee = 0; 1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_INIT) { 1126767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("NFA_EeGetInfo bad em state: %d", 1136767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi nfa_ee_cb.em_state); 1146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* compose output */ 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; (xx < ret) && (num_ret < max_ret); xx++, p_cb++) { 1196767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 1206767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("xx:%d max_ret:%d, num_ret:%d ee_status:0x%x", xx, 1216767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi max_ret, num_ret, p_cb->ee_status); 1226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb->ee_status & NFA_EE_STATUS_INT_MASK) || 1236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_cb->ee_status == NFA_EE_STATUS_REMOVED)) { 1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi continue; 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_info->ee_handle = NFA_HANDLE_GROUP_EE | (tNFA_HANDLE)p_cb->nfcee_id; 1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_info->ee_status = p_cb->ee_status; 1286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_info->num_interface = p_cb->num_interface; 1296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_info->num_tlvs = p_cb->num_tlvs; 1306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_info->ee_interface, p_cb->ee_interface, p_cb->num_interface); 1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_info->ee_tlv, p_cb->ee_tlv, p_cb->num_tlvs * sizeof(tNFA_EE_TLV)); 13281e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna p_info->ee_power_supply_status = p_cb->ee_power_supply_status; 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_info++; 1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi num_ret++; 1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1366767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("num_ret:%d", num_ret); 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *p_num_nfcee = num_ret; 1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 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_EeRegister 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function registers a callback function to receive the 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** events from NFA-EE module. 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeRegister(tNFA_EE_CBACK* p_cback) { 1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_REGISTER* p_msg; 1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1576767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cback == NULL) { 1606767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("with NULL callback function"); 1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 1620c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 1630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_REGISTER*)GKI_getbuf(sizeof(tNFA_EE_API_REGISTER)); 1640c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 1650c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_REGISTER_EVT; 1660c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cback = p_cback; 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1680c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1700c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 1710c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeDeregister 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function de-registers the callback function 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeDeregister(tNFA_EE_CBACK* p_cback) { 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_DEREGISTER* p_msg; 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_INVALID_PARAM; 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int index = NFA_EE_MAX_CBACKS; 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx; 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++) { 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.p_ee_cback[xx] == p_cback) { 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi index = xx; 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_FAILED; 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2026767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 2036767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("%d, status:%d", index, status); 2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((status != NFA_STATUS_INVALID_PARAM) && 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_msg = (tNFA_EE_API_DEREGISTER*)GKI_getbuf( 2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi sizeof(tNFA_EE_API_DEREGISTER))) != NULL) { 2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_DEREGISTER_EVT; 2086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->index = index; 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_OK; 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeModeSet 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 222552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to activate 223552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** (mode = NFA_EE_MD_ACTIVATE) or deactivate 224552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** (mode = NFA_EE_MD_DEACTIVATE) the NFCEE identified by the 225552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** given ee_handle. The result of this operation is reported 226552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** with the NFA_EE_MODE_SET_EVT. 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeModeSet(tNFA_HANDLE ee_handle, tNFA_EE_MD mode) { 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_MODE_SET* p_msg; 2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB *p_cb, *p_found = NULL; 2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t xx; 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (ee_handle & 0xFF); 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_cb.ecb; 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) { 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfcee_id == p_cb->nfcee_id) { 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_found = p_cb; 2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2476767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 2486767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("handle:<0x%x>, mode:0x%02X", ee_handle, mode); 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_found == NULL) { 2516767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("invalid NFCEE:0x%04x", ee_handle); 2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 2530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 2540c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_MODE_SET*)GKI_getbuf(sizeof(tNFA_EE_API_MODE_SET)); 2550c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 2560c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_MODE_SET_EVT; 2570c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 2580c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->mode = mode; 2590c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_found; 2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2610c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 2640c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeSetDefaultTechRouting 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to add, change or remove the 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** default routing based on RF technology in the listen mode 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** routing table for the given ee_handle. The status of this 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation is reported as the NFA_EE_SET_TECH_CFG_EVT. 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 279552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 280552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 281552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 283552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: NFA_EeUpdateNow() should be called after last NFA-EE 284552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** function to change the listen mode routing is called. 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeSetDefaultTechRouting( 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE ee_handle, tNFA_TECHNOLOGY_MASK technologies_switch_on, 2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TECHNOLOGY_MASK technologies_switch_off, 294514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_TECHNOLOGY_MASK technologies_battery_off, 295514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_TECHNOLOGY_MASK technologies_screen_lock, 296514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_TECHNOLOGY_MASK technologies_screen_off, 297514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_TECHNOLOGY_MASK technologies_screen_off_lock) { 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_SET_TECH_CFG* p_msg; 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3036767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( 3046767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi "" 305514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna "handle:<0x%x>technology_mask:<0x%x>/<0x%x>/<0x%x><0x%x><0x%x><0x%x>", 3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ee_handle, technologies_switch_on, technologies_switch_off, 307514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna technologies_battery_off, technologies_screen_lock, 308514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna technologies_screen_off, technologies_screen_off_lock); 3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb == NULL) { 3126767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle"); 3136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 3140c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 3150c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = 3160c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (tNFA_EE_API_SET_TECH_CFG*)GKI_getbuf(sizeof(tNFA_EE_API_SET_TECH_CFG)); 3170c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 3180c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_SET_TECH_CFG_EVT; 3190c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 3200c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 3210c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->technologies_switch_on = technologies_switch_on; 3220c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->technologies_switch_off = technologies_switch_off; 3230c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->technologies_battery_off = technologies_battery_off; 324514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->technologies_screen_lock = technologies_screen_lock; 325514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->technologies_screen_off = technologies_screen_off; 326514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->technologies_screen_off_lock = technologies_screen_off_lock; 3270c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 3280c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 3290c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 3300c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 3310c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 3326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeSetDefaultProtoRouting 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to add, change or remove the 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** default routing based on Protocol in the listen mode routing 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** table for the given ee_handle. The status of this 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation is reported as the NFA_EE_SET_PROTO_CFG_EVT. 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 346552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 347552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 348552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 350552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: NFA_EeUpdateNow() should be called after last NFA-EE 351552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** function to change the listen mode routing is called. 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3586fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeSetDefaultProtoRouting( 3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE ee_handle, tNFA_PROTOCOL_MASK protocols_switch_on, 3606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_PROTOCOL_MASK protocols_switch_off, 361514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_PROTOCOL_MASK protocols_battery_off, 362514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_PROTOCOL_MASK protocols_screen_lock, 363514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_PROTOCOL_MASK protocols_screen_off, 364514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna tNFA_PROTOCOL_MASK protocols_screen_off_lock) { 3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_SET_PROTO_CFG* p_msg; 3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3706767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( 371514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna "handle:<0x%x>protocol_mask:<0x%x>/<0x%x>/<0x%x><0x%x><0x%x><0x%x>", 3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ee_handle, protocols_switch_on, protocols_switch_off, 373514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna protocols_battery_off, protocols_screen_lock, protocols_screen_off, 374514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna protocols_screen_off_lock); 3756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cb == NULL) { 3786767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle"); 3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 3800c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 3810c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_SET_PROTO_CFG*)GKI_getbuf( 3820c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi sizeof(tNFA_EE_API_SET_PROTO_CFG)); 3830c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 3840c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_SET_PROTO_CFG_EVT; 3850c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 3860c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 3870c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->protocols_switch_on = protocols_switch_on; 3880c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->protocols_switch_off = protocols_switch_off; 3890c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->protocols_battery_off = protocols_battery_off; 390514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->protocols_screen_lock = protocols_screen_lock; 391514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->protocols_screen_off = protocols_screen_off; 392514a14b93ac00984f27e5a61e2136089f02191a1Love Khanna p_msg->protocols_screen_off_lock = protocols_screen_off_lock; 3930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 3940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 3950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 3960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 3970c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeAddAidRouting 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to add an AID entry in the 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** listen mode routing table in NFCC. The status of this 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation is reported as the NFA_EE_ADD_AID_EVT. 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 411552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 412552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 413552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 415552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: NFA_EeUpdateNow() should be called after last NFA-EE 416552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** function to change the listen mode routing is called. 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4236fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeAddAidRouting(tNFA_HANDLE ee_handle, uint8_t aid_len, 424f3c018a8a041ec0d398cc45931e008b6b2a23523Love Khanna uint8_t* p_aid, tNFA_EE_PWR_STATE power_state, 425f3c018a8a041ec0d398cc45931e008b6b2a23523Love Khanna uint8_t aidInfo) { 4266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_ADD_AID* p_msg; 4276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 4286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t size = sizeof(tNFA_EE_API_ADD_AID) + aid_len; 4296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 4306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 4316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4326767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle); 4336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 4346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* validate parameters - make sure the AID is in valid length range */ 4366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb == NULL) || (aid_len == 0) || (p_aid == NULL) || 4376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (aid_len < NFA_MIN_AID_LEN) || (aid_len > NFA_MAX_AID_LEN)) { 4386767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle or AID (len=%d)", aid_len); 4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 4400c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 4410c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_ADD_AID*)GKI_getbuf(size); 4420c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 4436767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 4446767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("aid:<%02x%02x>", p_aid[0], p_aid[1]); 4450c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_ADD_AID_EVT; 4460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 4470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 4480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->aid_len = aid_len; 4490c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->power_state = power_state; 4500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_aid = (uint8_t*)(p_msg + 1); 451f3c018a8a041ec0d398cc45931e008b6b2a23523Love Khanna p_msg->aidInfo = aidInfo; 4520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi memcpy(p_msg->p_aid, p_aid, aid_len); 4530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 4540c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 4550c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 4560c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 4570c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 4586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeRemoveAidRouting 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 467552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to remove the given AID entry from 468552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** the listen mode routing table. If the entry configures VS, 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** it is also removed. The status of this operation is reported 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** as the NFA_EE_REMOVE_AID_EVT. 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 472552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 473552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 474552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 476552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: NFA_EeUpdateNow() should be called after last NFA-EE 477552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** function to change the listen mode routing is called. 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeRemoveAidRouting(uint8_t aid_len, uint8_t* p_aid) { 4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_REMOVE_AID* p_msg; 4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t size = sizeof(tNFA_EE_API_REMOVE_AID) + aid_len; 4886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4896767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 4906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((aid_len == 0) || (p_aid == NULL) || (aid_len > NFA_MAX_AID_LEN)) { 4916767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad AID"); 4926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 4930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 4940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_REMOVE_AID*)GKI_getbuf(size); 4950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 4960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_REMOVE_AID_EVT; 4970c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->aid_len = aid_len; 4980c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_aid = (uint8_t*)(p_msg + 1); 4990c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi memcpy(p_msg->p_aid, p_aid, aid_len); 5006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5010c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5030c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 5040c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 5056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 5066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 5121d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Function NFA_EeAddSystemCodeRouting 5131d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5141d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Description This function is called to add an system code entry in the 5151d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** listen mode routing table in NFCC. The status of this 5161d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** operation is reported as the NFA_EE_ADD_SYSCODE_EVT. 5171d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5181d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Note: If RF discovery is started, 5191d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 5201d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** happen before calling this function 5211d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5221d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Note: NFA_EeUpdateNow() should be called after last NFA-EE 5231d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** function to change the listen mode routing is called. 5241d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5251d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Returns NFA_STATUS_OK if successfully initiated 5261d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_STATUS_FAILED otherwise 5271d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_STATUS_INVALID_PARAM If bad parameter 5281d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5291d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna*******************************************************************************/ 5301d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love KhannatNFA_STATUS NFA_EeAddSystemCodeRouting(uint16_t systemcode, 5311d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_HANDLE ee_handle, 5321d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_EE_PWR_STATE power_state) { 5331d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_STATUS status = NFA_STATUS_FAILED; 5341d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 5351d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna DLOG_IF(INFO, nfc_debug_enabled) 5361d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna << StringPrintf("NFA_EeAddSystemCodeRouting(): handle:<0x%x>", ee_handle); 5371d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_EE_ECB* p_cb = nfa_ee_find_ecb(nfcee_id); 5381d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna 5391d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna if (p_cb == NULL || systemcode == 0) { 5401d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna LOG(ERROR) << StringPrintf("Bad ee_handle or System Code"); 5411d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_INVALID_PARAM; 5421d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } else if ((NFA_GetNCIVersion() != NCI_VERSION_2_0) && 5431d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna (nfc_cb.isScbrSupported == false)) { 5441d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna LOG(ERROR) << StringPrintf("Invalid NCI Version/SCBR not supported"); 5451d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_NOT_SUPPORTED; 5461d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } else { 5471d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_EE_API_ADD_SYSCODE* p_msg = 5481d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna (tNFA_EE_API_ADD_SYSCODE*)GKI_getbuf(sizeof(tNFA_EE_API_ADD_SYSCODE)); 5491d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna if (p_msg != NULL) { 5501d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->hdr.event = NFA_EE_API_ADD_SYSCODE_EVT; 5511d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->power_state = power_state; 5521d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->nfcee_id = nfcee_id; 5531d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->p_cb = p_cb; 5541d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna // adjust endianness of syscode 5551d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->syscode = (systemcode & 0x00FF) << 8 | (systemcode & 0xFF00) >> 8; 5561d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna nfa_sys_sendmsg(p_msg); 5571d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_OK; 5581d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } 5591d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } 5601d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna return status; 5611d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna} 5621d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna 5631d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna/******************************************************************************* 5641d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5651d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Function NFA_EeRemoveSystemCodeRouting 5661d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5671d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Description This function is called to remove the given System Code 5681d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** based entry from the listen mode routing table. The status 5691d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** of this operation is reported as the 5701d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_EE_REMOVE_SYSCODE_EVT. 5711d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5721d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Note: If RF discovery is started, 5731d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 5741d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** happen before calling this function 5751d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5761d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Note: NFA_EeUpdateNow() should be called after last NFA-EE 5771d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** function to change the listen mode routing is called. 5781d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5791d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** Returns NFA_STATUS_OK if successfully initiated 5801d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_STATUS_FAILED otherwise 5811d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** NFA_STATUS_INVALID_PARAM If bad parameter 5821d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 5831d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna*******************************************************************************/ 5841d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love KhannatNFA_STATUS NFA_EeRemoveSystemCodeRouting(uint16_t systemcode) { 5851d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_STATUS status = NFA_STATUS_FAILED; 5861d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna 5871d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna if (systemcode == 0) { 5881d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna LOG(ERROR) << "Bad ee_handle or System Code"; 5891d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_INVALID_PARAM; 5901d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } else if ((NFA_GetNCIVersion() != NCI_VERSION_2_0) && 5911d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna (nfc_cb.isScbrSupported == false)) { 5921d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna LOG(ERROR) << "Invalid NCI Version/SCBR Not supported"; 5931d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_NOT_SUPPORTED; 5941d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } else { 5951d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna tNFA_EE_API_REMOVE_SYSCODE* p_msg = (tNFA_EE_API_REMOVE_SYSCODE*)GKI_getbuf( 5961d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna sizeof(tNFA_EE_API_REMOVE_SYSCODE)); 5971d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna if (p_msg != NULL) { 5981d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->hdr.event = NFA_EE_API_REMOVE_SYSCODE_EVT; 5991d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg->syscode = (systemcode & 0x00FF) << 8 | (systemcode & 0xFF00) >> 8; 6001d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna nfa_sys_sendmsg(p_msg); 6011d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna status = NFA_STATUS_OK; 6021d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } 6031d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna } 6041d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna return status; 6051d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna} 6061d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna 6071d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna/******************************************************************************* 6081d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna** 609ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** Function NFA_EeGetLmrtRemainingSize 610ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** 611ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** Description This function is called to get remaining size of the 612ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** Listen Mode Routing Table. 613ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** The remaining size is reported in NFA_EE_REMAINING_SIZE_EVT 614ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** 615ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** Returns NFA_STATUS_OK if successfully initiated 616ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** NFA_STATUS_FAILED otherwise 617ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** 618ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith*******************************************************************************/ 6196fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeGetLmrtRemainingSize(void) { 6206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_LMRT_SIZE* p_msg; 6216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 6226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6236767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 6240c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_LMRT_SIZE*)GKI_getbuf(sizeof(tNFA_EE_API_LMRT_SIZE)); 6250c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_EE_API_LMRT_SIZE_EVT; 6276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 6286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_OK; 6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 632ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith} 633ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith 634ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith/****************************************************************************** 635ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith** 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeUpdateNow 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to send the current listen mode 639552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** routing table and VS configuration to the NFCC (without 640552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** waiting for NFA_EE_ROUT_TIMEOUT_VAL). 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 64240e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith** The status of this operation is 64340e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith** reported with the NFA_EE_UPDATED_EVT. 64440e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith** 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 64640e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith** NFA_STATUS_SEMANTIC_ERROR is update is currently in progress 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6506fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeUpdateNow(void) { 6516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 6526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6546767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 6556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_cb.ee_wait_evt & NFA_EE_WAIT_UPDATE_ALL) { 6566767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("update in progress"); 6576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_SEMANTIC_ERROR; 6580c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 6590c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(NFC_HDR_SIZE); 6600c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 6610c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->event = NFA_EE_API_UPDATE_NOW_EVT; 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6650c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 6660c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 6676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 6706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi} 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeConnect 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Open connection to an NFCEE attached to the NFCC 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The status of this operation is 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** reported with the NFA_EE_CONNECT_EVT. 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6866fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeConnect(tNFA_HANDLE ee_handle, uint8_t ee_interface, 6876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_CBACK* p_cback) { 6886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_CONNECT* p_msg; 6896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 6906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 6916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 6926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6936767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( 6946767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi "handle:<0x%x> ee_interface:0x%x", ee_handle, ee_interface); 6956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 6966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb == NULL) || (p_cback == NULL)) { 6986767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle or NULL callback function"); 6996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 7000c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 7010c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_CONNECT*)GKI_getbuf(sizeof(tNFA_EE_API_CONNECT)); 7020c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 7030c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_CONNECT_EVT; 7040c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 7050c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 7060c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->ee_interface = ee_interface; 7070c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cback = p_cback; 7080c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 7090c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 7100c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 7110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 7120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 7136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 7146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeSendData 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send data to the given NFCEE. 723552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** This function shall be called after NFA_EE_CONNECT_EVT is 724552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** reported and before NFA_EeDisconnect is called on the given 725552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** ee_handle. 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7326fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeSendData(tNFA_HANDLE ee_handle, uint16_t data_len, 7336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_data) { 7346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_SEND_DATA* p_msg; 7356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 7366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 7376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 7386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7396767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle); 7406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 7426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb == NULL) || (p_cb->conn_st != NFA_EE_CONN_ST_CONN) || 7446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_data == NULL)) { 7456767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle or NULL data"); 7466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 7470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 7480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_SEND_DATA*)GKI_getbuf( 7490c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_EE_API_SEND_DATA) + data_len)); 7500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 7510c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_SEND_DATA_EVT; 7520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 7530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 7540c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->data_len = data_len; 7550c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_data = (uint8_t*)(p_msg + 1); 7560c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi memcpy(p_msg->p_data, p_data, data_len); 7570c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 7580c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 7590c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi 7600c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 7610c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 7626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 7636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EeDisconnect 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Disconnect (if a connection is currently open) from an 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFCEE interface. The result of this operation is reported 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** with the NFA_EE_DISCONNECT_EVT. 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_INVALID_PARAM If bad parameter 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7806fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EeDisconnect(tNFA_HANDLE ee_handle) { 7816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_API_DISCONNECT* p_msg; 7826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_STATUS status = NFA_STATUS_FAILED; 7836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF); 7846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_EE_ECB* p_cb; 7856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7866767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle); 7876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_cb = nfa_ee_find_ecb(nfcee_id); 7886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_cb == NULL) || (p_cb->conn_st != NFA_EE_CONN_ST_CONN)) { 7906767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("Bad ee_handle"); 7916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFA_STATUS_INVALID_PARAM; 7920c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } else { 7930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_EE_API_DISCONNECT*)GKI_getbuf(sizeof(tNFA_EE_API_DISCONNECT)); 7940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 7950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->hdr.event = NFA_EE_API_DISCONNECT_EVT; 7960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->nfcee_id = nfcee_id; 7970c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg->p_cb = p_cb; 7986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7990c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi nfa_sys_sendmsg(p_msg); 8006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8010c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi status = NFA_STATUS_OK; 8020c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi } 8036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 8046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 807