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 for device management
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
258a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach
268a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <android-base/stringprintf.h>
278a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <base/logging.h>
288a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach
296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "ndef_utils.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ce_int.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
338a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachusing android::base::StringPrintf;
348a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach
358a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachextern bool nfc_debug_enabled;
368a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  APIs
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_Init
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function initializes control blocks for NFA
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_hal_entry_tbl points to a table of HAL entry points
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NOTE: the buffer that p_hal_entry_tbl points must be
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  persistent until NFA is disabled.
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          none
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid NFA_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl) {
596767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_sys_init();
616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_init();
626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_p2p_init();
636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_snep_init(false);
646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_rw_init();
656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_ce_init();
666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_ee_init();
676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_ee_max_ee_cfg != 0) {
686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.get_max_ee = p_hal_entry_tbl->get_max_ee;
696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_hci_init();
706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Initialize NFC module */
736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_Init(p_hal_entry_tbl);
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_Enable
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function enables NFC. Prior to calling NFA_Enable,
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the NFCC must be powered up, and ready to receive commands.
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  This function enables the tasks needed by NFC, opens the NCI
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport, resets the NFC controller, downloads patches to
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the NFCC (if necessary), and initializes the NFC subsystems.
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
86552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  This function should only be called once - typically when
87552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFC is enabled during boot-up, or when NFC is enabled from a
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  settings UI. Subsequent calls to NFA_Enable while NFA is
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  enabling or enabled will be ignored. When the NFC startup
90552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  procedure is completed, an NFA_DM_ENABLE_EVT is returned to
91552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  the application using the tNFA_DM_CBACK.
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
976fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Enable(tNFA_DM_CBACK* p_dm_cback,
986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                       tNFA_CONN_CBACK* p_conn_cback) {
996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_ENABLE* p_msg;
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Validate parameters */
1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((!p_dm_cback) || (!p_conn_cback)) {
1056767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("error null callback");
1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_FAILED);
1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1090c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_ENABLE*)GKI_getbuf(sizeof(tNFA_DM_API_ENABLE));
1100c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_ENABLE_EVT;
1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_dm_cback = p_dm_cback;
1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_conn_cback = p_conn_cback;
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_Disable
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to shutdown NFC. The tasks for NFC
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  are terminated, and clean up routines are performed. This
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  function is typically called during platform shut-down, or
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  when NFC is disabled from a settings UI. When the NFC
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  shutdown procedure is completed, an NFA_DM_DISABLE_EVT is
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  returned to the application using the tNFA_DM_CBACK.
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The platform should wait until the NFC_DISABLE_REVT is
135552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  received before powering down the NFC chip and NCI
136552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  transport. This is required to so that NFA can gracefully
137552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  shut down any open connections.
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Disable(bool graceful) {
1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_DISABLE* p_msg;
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
1476767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("NFA_Disable (graceful=%i)", graceful);
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1490c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_DISABLE*)GKI_getbuf(sizeof(tNFA_DM_API_DISABLE));
1500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_DISABLE_EVT;
1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->graceful = graceful;
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
16181e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna
16281e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna/*******************************************************************************
16381e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna**
16481e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Function         NFA_GetNCIVersion
16581e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna**
16681e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Description      Returns the NCI version of the NFCC to upper layer
16781e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna**
16881e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna**
16981e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Returns          NCI version NCI2.0 / NCI1.0
17081e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna**
17181e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna*******************************************************************************/
17281e4f816534a9d9137ce202d1b158720cc13eb78Love Khannauint8_t NFA_GetNCIVersion() { return NFC_GetNCIVersion(); }
17381e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna
1745e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna/*******************************************************************************
1755e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**
1765e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Function         NFA_SetPowerSubStateForScreenState
1775e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**
1785e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Description      Update the power sub-state as per current screen state to
1795e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**                  NFCC.
1805e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**
1815e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Returns          NFA_STATUS_OK if successfully initiated
1825e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**                  NFA_STATUS_FAILED otherwise
1835e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna**
1845e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna*******************************************************************************/
1855e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love KhannatNFA_STATUS NFA_SetPowerSubStateForScreenState(uint8_t screenState) {
1866767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
1876767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("%s: state:0x%X", __func__, screenState);
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1895e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  uint8_t nci_scren_state = 0xFF;
1905e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  uint16_t buf_size = sizeof(tNFA_DM_API_SET_POWER_SUB_STATE);
1915e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  tNFA_DM_API_SET_POWER_SUB_STATE* p_msg =
1925e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      (tNFA_DM_API_SET_POWER_SUB_STATE*)GKI_getbuf(buf_size);
1935e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna
1945e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  if (p_msg != NULL) {
1955e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    p_msg->hdr.event = NFA_DM_API_SET_POWER_SUB_STATE_EVT;
1965e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    switch (screenState) {
1975e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      case NFA_SCREEN_STATE_ON_UNLOCKED:
1985e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        nci_scren_state = SCREEN_STATE_ON_UNLOCKED;
1995e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        break;
2005e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      case NFA_SCREEN_STATE_OFF_UNLOCKED:
2015e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        nci_scren_state = SCREEN_STATE_OFF_UNLOCKED;
2025e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        break;
2035e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      case NFA_SCREEN_STATE_ON_LOCKED:
2045e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        nci_scren_state = SCREEN_STATE_ON_LOCKED;
2055e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        break;
2065e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      case NFA_SCREEN_STATE_OFF_LOCKED:
2075e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        nci_scren_state = SCREEN_STATE_OFF_LOCKED;
2085e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        break;
2095e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna
2105e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna      default:
2116767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi        DLOG_IF(INFO, nfc_debug_enabled)
2126767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi            << StringPrintf("%s, unknown screen state", __func__);
2135e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna        break;
2145e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    }
2155e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna
2165e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    p_msg->screen_state = nci_scren_state;
2175e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna
2185e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    nfa_sys_sendmsg(p_msg);
2195e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna    return (NFA_STATUS_OK);
2205e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  }
2215e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna  return (NFA_STATUS_FAILED);
2225e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna}
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_SetConfig
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set the configuration parameters to NFCC. The result is
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  reported with an NFA_DM_SET_CONFIG_EVT in the tNFA_DM_CBACK
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  callback.
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
231552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
232552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
233552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function. Most Configuration
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  parameters are related to RF discovery.
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BUSY if previous setting is on-going
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetConfig(tNFA_PMID param_id, uint8_t length, uint8_t* p_data) {
2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_SET_CONFIG* p_msg;
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2446767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("param_id:0x%X", param_id);
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_SET_CONFIG*)GKI_getbuf(
2470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_SET_CONFIG) + length));
2480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_SET_CONFIG_EVT;
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->param_id = param_id;
2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->length = length;
2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_data = (uint8_t*)(p_msg + 1);
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Copy parameter data */
2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(p_msg->p_data, p_data, length);
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_GetConfig
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Get the configuration parameters from NFCC. The result is
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  reported with an NFA_DM_GET_CONFIG_EVT in the tNFA_DM_CBACK
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  callback.
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_GetConfig(uint8_t num_ids, tNFA_PMID* p_param_ids) {
2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_GET_CONFIG* p_msg;
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2816767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("num_ids: %i", num_ids);
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2830c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_GET_CONFIG*)GKI_getbuf(
2840c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_GET_CONFIG) + num_ids));
2850c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_GET_CONFIG_EVT;
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->num_ids = num_ids;
2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_pmids = (tNFA_PMID*)(p_msg + 1);
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Copy the param IDs */
2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(p_msg->p_pmids, p_param_ids, num_ids);
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_RequestExclusiveRfControl
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Request exclusive control of NFC.
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Previous behavior (polling/tag reading, DH card emulation)
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                    will be suspended .
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Polling and listening will be done based on the specified
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                    params
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT event of
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  tNFA_CONN_CBACK indicates the status of the operation.
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT indicates link
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  activation/deactivation.
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
318552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_SendRawFrame is used to send data to the peer.
319552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_DATA_EVT indicates data from the peer.
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If a tag is activated, then the NFA_RW APIs may be used to
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  send commands to the tag. Incoming NDEF messages are sent to
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the NDEF callback.
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Once exclusive RF control has started, NFA will not activate
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  LLCP internally. The application has exclusive control of
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the link.
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
329552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
330552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
331552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_RequestExclusiveRfControl(tNFA_TECHNOLOGY_MASK poll_mask,
3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          tNFA_LISTEN_CFG* p_listen_cfg,
3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          tNFA_CONN_CBACK* p_conn_cback,
3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          tNFA_NDEF_CBACK* p_ndef_cback) {
3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_REQ_EXCL_RF_CTRL* p_msg;
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3436767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("poll_mask=0x%x", poll_mask);
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!p_conn_cback) {
3466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("error null callback");
3476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_FAILED);
3486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_REQ_EXCL_RF_CTRL*)GKI_getbuf(
3510c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      sizeof(tNFA_DM_API_REQ_EXCL_RF_CTRL));
3520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT;
3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->poll_mask = poll_mask;
3556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_conn_cback = p_conn_cback;
3566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_ndef_cback = p_ndef_cback;
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (p_listen_cfg)
3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      memcpy(&p_msg->listen_cfg, p_listen_cfg, sizeof(tNFA_LISTEN_CFG));
3606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    else
3616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      memset(&p_msg->listen_cfg, 0x00, sizeof(tNFA_LISTEN_CFG));
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
3646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_ReleaseExclusiveRfControl
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Release exclusive control of NFC. Once released, behavior
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  prior to obtaining exclusive RF control will resume.
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_ReleaseExclusiveRfControl(void) {
3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3856767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!nfa_dm_cb.p_excl_conn_cback) {
3886767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf(
3896767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi        "Exclusive rf control is not in "
3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        "progress");
3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_FAILED);
3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
3950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT;
3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_EnablePolling
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Enable polling for technologies specified by poll_mask.
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The following events (notified using the connection
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  callback registered with NFA_Enable) are generated during
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  polling:
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - NFA_POLL_ENABLED_EVT indicates whether or not polling
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                    successfully enabled.
416552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  - NFA_DISC_RESULT_EVT indicates there are more than one
417552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    devices, so application must select one of tags by calling
418552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    NFA_Select().
419552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  - NFA_SELECT_RESULT_EVT indicates whether previous selection
420552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    was successful or not. If it was failed then application
421552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    must select again or deactivate by calling
422552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    NFA_Deactivate().
423552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  - NFA_ACTIVATED_EVT is generated when an NFC link is
424552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    activated.
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - NFA_NDEF_DETECT_EVT is generated if tag is activated
426552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  - NFA_LLCP_ACTIVATED_EVT/NFA_LLCP_DEACTIVATED_EVT is
427552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    generated if NFC-DEP is activated
428552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  - NFA_DEACTIVATED_EVT will be returned after deactivating
429552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                    NFC link.
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
431552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
432552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
433552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EnablePolling(tNFA_TECHNOLOGY_MASK poll_mask) {
4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_ENABLE_POLL* p_msg;
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4426767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("0x%X", poll_mask);
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4440c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_ENABLE_POLL*)GKI_getbuf(sizeof(tNFA_DM_API_ENABLE_POLL));
4450c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_ENABLE_POLLING_EVT;
4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->poll_mask = poll_mask;
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_DisablePolling
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Disable polling
462552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_POLL_DISABLED_EVT will be returned after stopping
463552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  polling.
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
465552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
466552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
467552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_DisablePolling(void) {
4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4766767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4780c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
4790c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_DISABLE_POLLING_EVT;
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
49267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         NFA_EnableListening
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
49467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Enable listening.
495552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_LISTEN_ENABLED_EVT will be returned after listening is
496552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  allowed.
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
49867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  The actual listening technologies are specified by other NFA
49967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  API functions. Such functions include (but not limited to)
50067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_CeConfigureUiccListenTech.
501552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  If NFA_DisableListening () is called to ignore the listening
502552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  technologies, NFA_EnableListening () is called to restore
503552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  the listening technologies set by these functions.
504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
505552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
506552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
507552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EnableListening(void) {
5146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5166767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5180c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
5190c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_ENABLE_LISTENING_EVT;
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
53067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
53167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
53267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         NFA_DisableListening
53367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
53467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Disable listening
535552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_LISTEN_DISABLED_EVT will be returned after stopping
536552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  listening. This function is called to exclude listen at RF
537552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  discovery.
53867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
539552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
540552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
541552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
54267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
54367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
54467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_STATUS_FAILED otherwise
54567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
54667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_DisableListening(void) {
5486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
54909de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5506767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
55109de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
5530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
5546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_DISABLE_LISTENING_EVT;
55509de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
55709de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
5596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
56009de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
56209de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen}
56309de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
56467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
56567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
56667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         NFA_PauseP2p
56767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
56867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Pause P2P services.
56967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_P2P_PAUSED_EVT will be returned after P2P services are
57067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  disabled.
57167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
57267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  The P2P services enabled by NFA_P2p* API functions are not
57367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  available. NFA_ResumeP2p() is called to resume the P2P
57467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  services.
57567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
576552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
577552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
578552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
57967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
58067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
58167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_STATUS_FAILED otherwise
58267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
58367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
5846fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_PauseP2p(void) {
5856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
58609de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5876767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
58809de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
5890c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
5900c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
5916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_PAUSE_P2P_EVT;
59267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
5936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
59467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
5956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
59767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
59967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
60067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
60167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
60267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
60367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         NFA_ResumeP2p
60467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
60567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Resume P2P services.
60667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_P2P_RESUMED_EVT will be returned after P2P services are.
60767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  enables again.
60867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
609552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
610552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
611552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
61267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
61367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
61467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_STATUS_FAILED otherwise
61567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
61667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
6176fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_ResumeP2p(void) {
6186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
61967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6206767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
62167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6220c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
6230c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_RESUME_P2P_EVT;
62567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
62767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
63067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
63267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
63367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
63467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
63567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
63667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         NFA_SetP2pListenTech
63767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
638552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description      This function is called to set listen technology for
639552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFC-DEP. This funtion may be called before or after starting
640552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  any server on NFA P2P/CHO/SNEP.
64167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  If there is no technology for NFC-DEP, P2P listening will be
64267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  stopped.
64367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
64467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_SET_P2P_LISTEN_TECH_EVT without data will be returned.
64567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
646552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
647552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
648552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
64967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
65067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
65167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**                  NFA_STATUS_FAILED otherwise
65267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
65367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
6546fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetP2pListenTech(tNFA_TECHNOLOGY_MASK tech_mask) {
6556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_SET_P2P_LISTEN_TECH* p_msg;
65667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6576767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("tech_mask:0x%X", tech_mask);
65867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
6590c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_SET_P2P_LISTEN_TECH*)GKI_getbuf(
6600c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      sizeof(tNFA_DM_API_SET_P2P_LISTEN_TECH));
6610c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
6626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_SET_P2P_LISTEN_TECH_EVT;
6636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->tech_mask = tech_mask;
66409de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
6656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
66609de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
6676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
6686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
66909de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
6706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
67109de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen}
67209de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_StartRfDiscovery
676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Start RF discovery
678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  RF discovery parameters shall be set by other APIs.
679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
680552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  An NFA_RF_DISCOVERY_STARTED_EVT indicates whether starting
681552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  was successful or not.
682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
6876fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_StartRfDiscovery(void) {
6886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6906767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6920c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
6930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
6946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_START_RF_DISCOVERY_EVT;
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
6996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_StopRfDiscovery
707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Stop RF discovery
709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
710552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  An NFA_RF_DISCOVERY_STOPPED_EVT indicates whether stopping
711552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  was successful or not.
712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7176fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_StopRfDiscovery(void) {
7186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7206767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7220c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
7230c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
7246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_STOP_RF_DISCOVERY_EVT;
725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
7296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_SetRfDiscoveryDuration
737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set the duration of the single discovery period in [ms].
739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Allowable range: 0 ms to 0xFFFF ms.
740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If discovery is already started, the application should
742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  call NFA_StopRfDiscovery prior to calling
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_SetRfDiscoveryDuration, and then call
744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_StartRfDiscovery afterwards to restart discovery using
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the new duration.
746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
747552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note:            If RF discovery is started,
748552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
749552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  happen before calling this function
750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK, if command accepted
753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED: otherwise
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7566fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetRfDiscoveryDuration(uint16_t discovery_period_ms) {
7576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_SET_RF_DISC_DUR* p_msg;
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7596767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Post the API message */
7621d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna  p_msg = (tNFA_DM_API_SET_RF_DISC_DUR*)GKI_getbuf(sizeof(NFC_HDR));
7630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
7646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_SET_RF_DISC_DURATION_EVT;
765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Set discovery duration */
7676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->rf_disc_dur_ms = discovery_period_ms;
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
7726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_Select
780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Select one from detected devices during discovery
782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  (from NFA_DISC_RESULT_EVTs). The application should wait for
783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the final NFA_DISC_RESULT_EVT before selecting.
784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
785552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  An NFA_SELECT_RESULT_EVT indicates whether selection was
786552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  successful or not. If failed then application must select
787552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  again or deactivate by NFA_Deactivate().
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
790552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_STATUS_INVALID_PARAM if RF interface is not matched
791552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  protocol
792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7956fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Select(uint8_t rf_disc_id, tNFA_NFC_PROTOCOL protocol,
7966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                       tNFA_INTF_TYPE rf_interface) {
7976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_SELECT* p_msg;
7986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
7996767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
8006767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
8016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi                      rf_disc_id, protocol, rf_interface);
8026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (((rf_interface == NFA_INTERFACE_ISO_DEP) &&
8046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi       (protocol != NFA_PROTOCOL_ISO_DEP)) ||
8056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ((rf_interface == NFA_INTERFACE_NFC_DEP) &&
8066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi       (protocol != NFA_PROTOCOL_NFC_DEP))) {
8076767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("RF interface is not matched protocol");
8086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_INVALID_PARAM);
8096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
8106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg =
8120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (tNFA_DM_API_SELECT*)GKI_getbuf((uint16_t)(sizeof(tNFA_DM_API_SELECT)));
8130c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
8146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_SELECT_EVT;
8156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->rf_disc_id = rf_disc_id;
8166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->protocol = protocol;
8176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->rf_interface = rf_interface;
8186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
8206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
8226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
8236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_UpdateRFCommParams
830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
831552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description      This function is called to update RF Communication
832552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  parameters once the Frame RF Interface has been activated.
833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  An NFA_UPDATE_RF_PARAM_RESULT_EVT indicates whether updating
835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  was successful or not.
836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
8416fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_UpdateRFCommParams(tNFA_RF_COMM_PARAMS* p_params) {
8426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_UPDATE_RF_PARAMS* p_msg;
843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8446767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_UPDATE_RF_PARAMS*)GKI_getbuf(
8470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_UPDATE_RF_PARAMS)));
8480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
8496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_UPDATE_RF_PARAMS_EVT;
8506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(&p_msg->params, p_params, sizeof(tNFA_RF_COMM_PARAMS));
851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
8556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_Deactivate
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description
865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If sleep_mode=TRUE:
866552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      Deselect the activated device by deactivating into sleep
867552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      mode.
868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
869552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      An NFA_DEACTIVATE_FAIL_EVT indicates that selection was
870552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      not successful. Application can select another
871552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      discovered device or deactivate by NFA_Deactivate()
872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                      after receiving NFA_DEACTIVATED_EVT.
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
874552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      Deactivating to sleep mode is not allowed when NFCC is
875552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      in wait-for-host-select mode, or in listen-sleep states;
876552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      NFA will deactivate to idle or discovery state for these
877552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      cases respectively.
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If sleep_mode=FALSE:
881552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      Deactivate the connection (e.g. as a result of presence
882552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      check failure) NFA_DEACTIVATED_EVT will indicate that
883552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      link is deactivated. Polling/listening will resume
884552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                      (unless the nfcc is in wait_for-all-discoveries state)
885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
8916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_Deactivate(bool sleep_mode) {
8926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_DEACTIVATE* p_msg;
893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8946767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("sleep_mode:%i", sleep_mode);
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_DEACTIVATE*)GKI_getbuf(
8970c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_DEACTIVATE)));
8980c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
8996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_DEACTIVATE_EVT;
9006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->sleep_mode = sleep_mode;
901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
9056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_SendRawFrame
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send a raw frame over the activated interface with the NFCC.
915552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  This function can only be called after NFC link is
916552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  activated.
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
918552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  If the activated interface is a tag and auto-presence check
919552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  is enabled then presence_check_start_delay can be used to
920552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  indicate the delay in msec after which the next auto
921552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  presence check command can be sent.
922552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY can be used as the
923552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  default value for the delay.
9245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
9296fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SendRawFrame(uint8_t* p_raw_data, uint16_t data_len,
9306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                             uint16_t presence_check_start_delay) {
9316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
9326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t size;
9336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p;
934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9356767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("data_len:%d", data_len);
9366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Validate parameters */
9386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((data_len == 0) || (p_raw_data == NULL))
9396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_INVALID_PARAM);
9406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  size = NFC_HDR_SIZE + NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE + data_len;
9420c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(size);
9430c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
9446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_RAW_FRAME_EVT;
9456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->layer_specific = presence_check_start_delay;
9466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
9476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->len = data_len;
9486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
9506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(p, p_raw_data, data_len);
9516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
9536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
9556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
9566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NDEF Handler APIs
962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_RegisterNDefTypeHandler
967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function allows the applications to register for
969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  specific types of NDEF records. When NDEF records are
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  received, NFA will parse the record-type field, and pass
971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the record to the registered tNFA_NDEF_CBACK.
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  For records types which were not registered, the record will
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  be sent to the default handler. A default type-handler may
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  be registered by calling this NFA_RegisterNDefTypeHandler
976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  with tnf=NFA_TNF_DEFAULT. In this case, all un-registered
977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  record types will be sent to the callback. Only one default
978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  handler may be registered at a time.
979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  to indicate that registration was successful, and provide a
982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  handle for this record type.
983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
9886fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_RegisterNDefTypeHandler(bool handle_whole_message, tNFA_TNF tnf,
9896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                        uint8_t* p_type_name,
9906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                        uint8_t type_name_len,
9916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                        tNFA_NDEF_CBACK* p_ndef_cback) {
9926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_REG_NDEF_HDLR* p_msg;
9936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9946767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
9956767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      "handle whole ndef message: %i, "
9966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      "tnf=0x%02x",
9976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      handle_whole_message, tnf);
9986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Check for NULL callback */
10006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!p_ndef_cback) {
10016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("error - null callback");
10026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_INVALID_PARAM);
10036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
10046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10050c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_REG_NDEF_HDLR*)GKI_getbuf(
10060c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_REG_NDEF_HDLR) + type_name_len));
10070c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
10086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT;
10096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->flags =
10116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (handle_whole_message ? NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE : 0);
10126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->tnf = tnf;
10136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->name_len = type_name_len;
10146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_ndef_cback = p_ndef_cback;
10156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(p_msg->name, p_type_name, type_name_len);
10166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
10186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
10206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
10216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_RegisterNDefUriHandler
1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This API is a special-case of NFA_RegisterNDefTypeHandler
1030552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  with TNF=NFA_TNF_WKT, and type_name='U' (URI record); and
1031552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  allows registering for specific URI types (e.g. 'tel:' or
1032552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  'mailto:').
1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  to indicate that registration was successful, and provide a
1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  handle for this registration.
1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1038552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  If uri_id=NFA_NDEF_URI_ID_ABSOLUTE, then p_abs_uri contains
1039552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  the unabridged URI. For all other uri_id values,
1040552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  the p_abs_uri parameter is ignored (i.e the URI prefix is
1041552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  implied by uri_id). See [NFC RTD URI] for more information.
1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
10476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_RegisterNDefUriHandler(bool handle_whole_message,
10486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              tNFA_NDEF_URI_ID uri_id,
10496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              uint8_t* p_abs_uri,
10506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              uint8_t uri_id_len,
10516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              tNFA_NDEF_CBACK* p_ndef_cback) {
10526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_REG_NDEF_HDLR* p_msg;
10536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10546767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
10556767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      "handle whole ndef message: %i, "
10566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      "uri_id=0x%02x",
10576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      handle_whole_message, uri_id);
10586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Check for NULL callback */
10606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!p_ndef_cback) {
10616767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("error - null callback");
10626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_INVALID_PARAM);
10636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
10646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10650c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_REG_NDEF_HDLR*)GKI_getbuf(
10660c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_REG_NDEF_HDLR) + uri_id_len));
10670c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
10686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT;
10696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->flags = NFA_NDEF_FLAGS_WKT_URI;
10716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (handle_whole_message) {
10736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_msg->flags |= NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE;
1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* abs_uri is only valid fir uri_id=NFA_NDEF_URI_ID_ABSOLUTE */
10776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (uri_id != NFA_NDEF_URI_ID_ABSOLUTE) {
10786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      uri_id_len = 0;
10796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->tnf = NFA_TNF_WKT;
10826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->uri_id = uri_id;
10836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->name_len = uri_id_len;
10846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_ndef_cback = p_ndef_cback;
10856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(p_msg->name, p_abs_uri, uri_id_len);
1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
10906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_DeregisterNDefTypeHandler
1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deregister NDEF record type handler.
1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_DeregisterNDefTypeHandler(tNFA_HANDLE ndef_type_handle) {
11066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_DEREG_NDEF_HDLR* p_msg;
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11086767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
11096767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("handle 0x%08x", ndef_type_handle);
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_DEREG_NDEF_HDLR*)GKI_getbuf(
11120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi      (uint16_t)(sizeof(tNFA_DM_API_DEREG_NDEF_HDLR)));
11130c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
11146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_DEREG_NDEF_HDLR_EVT;
11156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->ndef_type_handle = ndef_type_handle;
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
11206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_PowerOffSleepMode
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1129552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description      This function is called to enter or leave NFCC Power Off
1130552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  Sleep mode NFA_DM_PWR_MODE_CHANGE_EVT will be sent to
1131552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  indicate status.
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  start_stop : TRUE if entering Power Off Sleep mode
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                               FALSE if leaving Power Off Sleep mode
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11406fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_PowerOffSleepMode(bool start_stop) {
11416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11436767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("start_stop=%d", start_stop);
1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.flags & NFA_DM_FLAGS_SETTING_PWR_MODE) {
11466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("NFA DM is busy to update power mode");
11476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_FAILED);
11486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
11496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_SETTING_PWR_MODE;
11506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
11530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
11546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->event = NFA_DM_API_POWER_OFF_SLEEP_EVT;
11556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->layer_specific = start_stop;
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
11606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_RegVSCback
1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1169552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description      This function is called to register or de-register a
1170552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  callback function to receive Proprietary NCI response and
1171552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  notification events. The maximum number of callback
1172552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  functions allowed is NFC_NUM_VS_CBACKS
1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11776fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS NFA_RegVSCback(bool is_register, tNFA_VSC_CBACK* p_cback) {
11786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_REG_VSC* p_msg;
1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11806767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
11816767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("is_register=%d", is_register);
1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_cback == NULL) {
11846767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi    LOG(ERROR) << StringPrintf("requires a valid callback function");
11856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_FAILED);
11866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11880c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_REG_VSC*)GKI_getbuf(sizeof(tNFA_DM_API_REG_VSC));
11890c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
11906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_REG_VSC_EVT;
11916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->is_register = is_register;
11926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_cback = p_cback;
1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
11976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_SendVsCommand
1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to send an NCI Vendor Specific
1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  command to NFCC.
1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  oid             - The opcode of the VS command.
1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  cmd_params_len  - The command parameter len
1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_cmd_params    - The command parameter
1212552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  p_cback         - The callback function to receive the
1213552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                                    command status
1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12196fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SendVsCommand(uint8_t oid, uint8_t cmd_params_len,
12206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                              uint8_t* p_cmd_params, tNFA_VSC_CBACK* p_cback) {
12216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_SEND_VSC* p_msg;
12226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len;
12236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12246767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("oid=0x%x", oid);
12256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12260c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  p_msg = (tNFA_DM_API_SEND_VSC*)GKI_getbuf(size);
12270c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi  if (p_msg != NULL) {
12286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->hdr.event = NFA_DM_API_SEND_VSC_EVT;
12296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->oid = oid;
12306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg->p_cback = p_cback;
12316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (cmd_params_len && p_cmd_params) {
12326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_msg->cmd_params_len = cmd_params_len;
12336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_msg->p_cmd_params = (uint8_t*)(p_msg + 1);
12346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      memcpy(p_msg->p_cmd_params, p_cmd_params, cmd_params_len);
12356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
12366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_msg->cmd_params_len = 0;
12376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_msg->p_cmd_params = NULL;
1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_sendmsg(p_msg);
12416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return (NFA_STATUS_OK);
12436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
12446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (NFA_STATUS_FAILED);
1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1250d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Function         NFA_SendRawVsCommand
1251d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1252d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Description      This function is called to send raw Vendor Specific
1253d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                  command to NFCC.
1254d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1255d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                  cmd_params_len  - The command parameter len
1256d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                  p_cmd_params    - The command parameter
1257d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                  p_cback         - The callback function to receive the
1258d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                                    command
1259d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1260d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Returns          NFA_STATUS_OK if successfully initiated
1261d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**                  NFA_STATUS_FAILED otherwise
1262d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1263d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna*******************************************************************************/
1264d7852c900bb5cd0139708fc22bf60fbb5303830aLove KhannatNFA_STATUS NFA_SendRawVsCommand(uint8_t cmd_params_len, uint8_t* p_cmd_params,
1265d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna                                 tNFA_VSC_CBACK* p_cback) {
1266d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  if (cmd_params_len == 0x00 || p_cmd_params == NULL || p_cback == NULL) {
1267d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    return NFA_STATUS_INVALID_PARAM;
1268d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  }
1269d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  uint16_t size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len;
1270d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  tNFA_DM_API_SEND_VSC* p_msg = (tNFA_DM_API_SEND_VSC*)GKI_getbuf(size);
1271d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna
1272d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  if (p_msg != NULL) {
1273d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    p_msg->hdr.event = NFA_DM_API_SEND_RAW_VS_EVT;
1274d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    p_msg->p_cback = p_cback;
1275d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    if (cmd_params_len && p_cmd_params) {
1276d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna      p_msg->cmd_params_len = cmd_params_len;
1277d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna      p_msg->p_cmd_params = (uint8_t*)(p_msg + 1);
1278d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna      memcpy(p_msg->p_cmd_params, p_cmd_params, cmd_params_len);
1279d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    } else {
1280d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna      p_msg->cmd_params_len = 0;
1281d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna      p_msg->p_cmd_params = NULL;
1282d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    }
1283d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna
1284d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    nfa_sys_sendmsg(p_msg);
1285d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna
1286d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna    return NFA_STATUS_OK;
1287d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  }
1288d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna
1289d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  return NFA_STATUS_FAILED;
1290d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna}
1291d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna
1292d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna/*******************************************************************************
1293d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1294d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Function:        NFA_EnableDtamode
1295d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1296d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Description:     Enable DTA Mode
1297d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1298d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Returns:         none:
1299d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna**
1300d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna*******************************************************************************/
1301d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khannavoid NFA_EnableDtamode(tNFA_eDtaModes eDtaMode) {
13026767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi  DLOG_IF(INFO, nfc_debug_enabled)
13036767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi      << StringPrintf("%s: 0x%x ", __func__, eDtaMode);
1304d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  appl_dta_mode_flag = 0x01;
1305d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  nfa_dm_cb.eDtaMode = eDtaMode;
1306d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna}
1307