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