1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu *  Copyright (C) 2010-2014 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  This file contains the action functions for device manager state
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  machine.
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nci_hmsgs.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h"
286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_ce_int.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h"
306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_p2p_int.h"
316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_rw_api.h"
326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_rw_int.h"
336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_sys.h"
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h"
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE)
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h"
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_int.h"
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
42303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (NFA_SNEP_INCLUDED == TRUE)
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_snep_int.h"
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/* This is the timeout value to guarantee disable is performed within reasonable
476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * amount of time */
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_DM_DISABLE_TIMEOUT_VAL
496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISABLE_TIMEOUT_VAL 1000
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_set_init_nci_params(void);
536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic tNFA_STATUS nfa_dm_start_polling(void);
546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic bool nfa_dm_deactivate_polling(void);
556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_excl_disc_cback(tNFA_DM_RF_DISC_EVT event,
566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                   tNFC_DISCOVER* p_data);
576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_poll_disc_cback(tNFA_DM_RF_DISC_EVT event,
586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                   tNFC_DISCOVER* p_data);
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_module_init_cback
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing initialization complete event from sub-modules
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_module_init_cback(void) {
706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_CBACK_DATA dm_cback_data;
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_ENABLE_EVT_PEND;
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* All subsystem are initialized */
756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  dm_cback_data.status = NFA_STATUS_OK;
766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  (*nfa_dm_cb.p_dm_cback)(NFA_DM_ENABLE_EVT, &dm_cback_data);
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_nfcc_power_mode_proc_complete_cback
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing complete of processing NFCC power state change
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  from all sub-modules
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_nfcc_power_mode_proc_complete_cback(void) {
906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_PWR_MODE_CHANGE power_mode_change;
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1(
936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      "nfa_dm_nfcc_power_mode_proc_complete_cback () nfcc_pwr_mode = 0x%x",
946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.nfcc_pwr_mode);
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* if NFCC power state is change to full power */
976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.nfcc_pwr_mode != NFA_DM_PWR_MODE_OFF_SLEEP) {
986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags &= ~NFA_DM_FLAGS_NFCC_IS_RESTORING;
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* reconfigure BRCM NFCC */
1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_disc_sm_execute(NFA_DM_RF_DISCOVER_CMD, NULL);
1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SETTING_PWR_MODE;
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  power_mode_change.status = NFA_STATUS_OK;
1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  power_mode_change.power_mode = nfa_dm_cb.nfcc_pwr_mode;
1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  (*nfa_dm_cb.p_dm_cback)(NFA_DM_PWR_MODE_CHANGE_EVT,
1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                          (tNFA_DM_CBACK_DATA*)&power_mode_change);
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_sys_enable
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function on enable
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_sys_enable(void) { nfa_dm_set_init_nci_params(); }
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_set_init_nci_params
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set initial NCI configuration parameters
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_set_init_nci_params(void) {
1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t xx;
1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* set NCI default value if other than zero */
1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* LF_T3T_IDENTIFIERS_1/2/.../16 */
1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  for (xx = 0; xx < NFA_CE_LISTEN_INFO_MAX; xx++) {
1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.params.lf_t3t_id[xx][0] = 0xFF;
1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.params.lf_t3t_id[xx][1] = 0xFF;
1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.params.lf_t3t_id[xx][2] = 0x02;
1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.params.lf_t3t_id[xx][3] = 0xFE;
1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* LF_T3T_PMM */
1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  for (xx = 0; xx < NCI_PARAM_LEN_LF_T3T_PMM; xx++) {
1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.params.lf_t3t_pmm[xx] = 0xFF;
1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* LF_T3T_FLAGS:
1506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  ** DH needs to set this configuration, even if default value (not listening)
1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  ** is used, to let NFCC know of intention (not listening) of DH.
1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  */
1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* FWI */
1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.params.fwi[0] = 0x04;
1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* WT */
1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.params.wt[0] = 14;
1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Set CE default configuration */
1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_nfa_dm_ce_cfg[0]) {
1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_check_set_config(p_nfa_dm_ce_cfg[0], &p_nfa_dm_ce_cfg[1], false);
1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Set optional general default configuration */
1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_nfa_dm_gen_cfg && p_nfa_dm_gen_cfg[0]) {
1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_check_set_config(p_nfa_dm_gen_cfg[0], &p_nfa_dm_gen_cfg[1], false);
1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_nfa_dm_interface_mapping && nfa_dm_num_dm_interface_mapping) {
1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_DiscoveryMap(nfa_dm_num_dm_interface_mapping,
1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                     p_nfa_dm_interface_mapping, NULL);
1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_proc_nfcc_power_mode
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing NFCC power mode changes
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_proc_nfcc_power_mode(uint8_t nfcc_power_mode) {
1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_proc_nfcc_power_mode (): nfcc_power_mode=%d",
1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   nfcc_power_mode);
1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* if NFCC power mode is change to full power */
1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memset(&nfa_dm_cb.params, 0x00, sizeof(tNFA_DM_PARAMS));
1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_DEBUG2("setcfg_pending_mask=0x%x, setcfg_pending_num=%d",
1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                     nfa_dm_cb.setcfg_pending_mask,
1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                     nfa_dm_cb.setcfg_pending_num);
1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.setcfg_pending_mask = 0;
1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.setcfg_pending_num = 0;
1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_set_init_nci_params();
1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags &= ~NFA_DM_FLAGS_POWER_OFF_SLEEP;
2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else if (nfcc_power_mode == NFA_DM_PWR_MODE_OFF_SLEEP) {
2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_POWER_OFF_SLEEP;
2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_sys_cback_notify_nfcc_power_mode_proc_complete(NFA_ID_DM);
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_disable_event
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      report disable event
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_disable_event(void) {
2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Deregister DM from sys */
2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_sys_deregister(NFA_ID_DM);
2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Notify app */
2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &=
2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ~(NFA_DM_FLAGS_DM_IS_ACTIVE | NFA_DM_FLAGS_DM_DISABLING_NFC |
2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFA_DM_FLAGS_ENABLE_EVT_PEND);
2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  (*nfa_dm_cb.p_dm_cback)(NFA_DM_DISABLE_EVT, NULL);
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_nfc_response_cback
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Call DM event hanlder with NFC response callback data
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_nfc_response_cback(tNFC_RESPONSE_EVT event,
2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                      tNFC_RESPONSE* p_data) {
2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_CBACK_DATA dm_cback_data;
2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_GET_CONFIG* p_nfa_get_confg;
2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA conn_evt;
2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t dm_cback_evt;
2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t max_ee = 0;
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG2("nfa_dm_nfc_response_cback () %s(0x%x)",
2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   nfa_dm_nfc_revt_2_str(event), event);
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_nfc_response_cback () event=0x%x", event);
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  switch (event) {
2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_ENABLE_REVT: /* 0  Enable event */
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* NFC stack enabled. Enable nfa sub-systems */
2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (p_data->enable.status == NFC_STATUS_OK) {
2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if (nfa_ee_max_ee_cfg != 0) {
2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          if (nfa_dm_cb.get_max_ee) {
2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            max_ee = nfa_dm_cb.get_max_ee();
2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            if (max_ee) {
2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              nfa_ee_max_ee_cfg = max_ee;
261d23e0531b6835ab75b543dd51cfe5edec8edefe4Evan Chu            }
2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          }
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
2646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Initialize NFA subsystems */
2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_sys_enable_subsystems();
2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else if (nfa_dm_cb.flags & NFA_DM_FLAGS_ENABLE_EVT_PEND) {
2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Notify app */
2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.flags &=
2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            ~(NFA_DM_FLAGS_ENABLE_EVT_PEND | NFA_DM_FLAGS_DM_IS_ACTIVE);
2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        dm_cback_data.status = p_data->enable.status;
2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (*nfa_dm_cb.p_dm_cback)(NFA_DM_ENABLE_EVT, &dm_cback_data);
2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_DISABLE_REVT: /* 1  Disable event */
2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_disable_event();
2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_SET_CONFIG_REVT: /* 2  Set Config Response */
2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* If this setconfig was due to NFA_SetConfig, then notify the app */
2816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* lsb=whether last NCI_SET_CONFIG was due to NFA_SetConfig */
2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.setcfg_pending_mask & 1) {
2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        dm_cback_data.set_config.status = p_data->set_config.status;
2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        dm_cback_data.set_config.num_param_id = p_data->set_config.num_param_id;
2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        memcpy(dm_cback_data.set_config.param_ids, p_data->set_config.param_ids,
2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi               p_data->set_config.num_param_id);
2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (*nfa_dm_cb.p_dm_cback)(NFA_DM_SET_CONFIG_EVT, &dm_cback_data);
2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Update the pending mask */
2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.setcfg_pending_num > 0) {
2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.setcfg_pending_mask >>= 1;
2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.setcfg_pending_num--;
2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* This should not occur (means we got a SET_CONFIG_NTF that's
2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi         * unaccounted for */
2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFA_TRACE_ERROR0("NFA received unexpected NFC_SET_CONFIG_REVT");
2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_GET_CONFIG_REVT: /* 3  Get Config Response */
3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (p_data->get_config.status == NFC_STATUS_OK) {
3030c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi        p_nfa_get_confg = (tNFA_GET_CONFIG*)GKI_getbuf(
3040c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi            (uint16_t)(sizeof(tNFA_GET_CONFIG) + p_data->get_config.tlv_size));
3050c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi        if (p_nfa_get_confg != NULL) {
3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          p_nfa_get_confg->status = NFA_STATUS_OK;
3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          p_nfa_get_confg->tlv_size = p_data->get_config.tlv_size;
3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          memcpy(p_nfa_get_confg->param_tlvs, p_data->get_config.p_param_tlvs,
3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                 p_data->get_config.tlv_size);
3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (*nfa_dm_cb.p_dm_cback)(NFA_DM_GET_CONFIG_EVT,
3116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                  (tNFA_DM_CBACK_DATA*)p_nfa_get_confg);
3126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          GKI_freebuf(p_nfa_get_confg);
3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          return;
3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        } else {
3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          NFA_TRACE_DEBUG0(
3176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              "nfa_dm_nfc_response_cback unable to allocate buffer");
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
3196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Return result of getconfig to the app */
3226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      dm_cback_data.get_config.status = NFA_STATUS_FAILED;
3236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (*nfa_dm_cb.p_dm_cback)(NFA_DM_GET_CONFIG_EVT, &dm_cback_data);
3246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE)
3276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_NFCEE_DISCOVER_REVT: /* NFCEE Discover response */
3286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_NFCEE_INFO_REVT:     /* NFCEE Discover Notification */
3296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_EE_ACTION_REVT:      /* EE Action notification */
3306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */
3316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_SET_ROUTING_REVT:    /* Configure Routing response */
3326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_ee_proc_evt(event, p_data);
3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
3346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_EE_DISCOVER_REQ_REVT: /* EE Discover Req notification */
3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_is_active() &&
3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY)) {
3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_ee_proc_evt(event, p_data);
3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
3426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_GET_ROUTING_REVT: /* Retrieve Routing response */
3446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_RF_FIELD_REVT: /* RF Field information            */
3486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      dm_cback_data.rf_field.status = NFA_STATUS_OK;
3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      dm_cback_data.rf_field.rf_field_status = p_data->rf_field.rf_field;
3506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (*nfa_dm_cb.p_dm_cback)(NFA_DM_RF_FIELD_EVT, &dm_cback_data);
3516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_GEN_ERROR_REVT: /* generic error command or notification */
3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    case NFC_NFCC_RESTART_REVT: /* NFCC has been re-initialized */
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (p_data->status == NFC_STATUS_OK) {
3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_FULL;
3606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.flags |= NFA_DM_FLAGS_NFCC_IS_RESTORING;
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* NFCC will start from IDLE when turned on again */
3636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
3646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.disc_state = NFA_DM_RFST_IDLE;
3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_OFF_SLEEP;
3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Notify NFA submodules change of NFCC power mode */
3706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_sys_cback_reg_nfcc_power_mode_proc_complete(
3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_nfcc_power_mode_proc_complete_cback);
3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_sys_notify_nfcc_power_mode(nfa_dm_cb.nfcc_pwr_mode);
3736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_TIMEOUT_REVT:
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_TRANSPORT_ERR_REVT:
3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFA_TRACE_DEBUG1("flags:0x%08x", nfa_dm_cb.flags);
3786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      dm_cback_evt = (event == NFC_NFCC_TIMEOUT_REVT)
3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                         ? NFA_DM_NFCC_TIMEOUT_EVT
3806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                         : NFA_DM_NFCC_TRANSPORT_ERR_EVT;
3816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (*nfa_dm_cb.p_dm_cback)(dm_cback_evt, NULL);
3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_POWER_OFF_REVT:
3856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_OFF_SLEEP;
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Notify NFA submodules change of NFCC power mode */
3886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_sys_cback_reg_nfcc_power_mode_proc_complete(
3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_nfcc_power_mode_proc_complete_cback);
3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_sys_notify_nfcc_power_mode(NFA_DM_PWR_MODE_OFF_SLEEP);
3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_RF_COMM_PARAMS_UPDATE_REVT:
3946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      conn_evt.status = p_data->status;
3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt);
3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
3975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_enable
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Initialises the NFC device manager
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
4126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_enable(tNFA_DM_MSG* p_data) {
4136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_CBACK_DATA dm_cback_data;
4146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_enable ()");
4156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Check if NFA is already enabled */
4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_DM_IS_ACTIVE)) {
4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Initialize BRCM control block, it musb be called before setting any flags
4196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi     */
4206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |=
4216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (NFA_DM_FLAGS_DM_IS_ACTIVE | NFA_DM_FLAGS_ENABLE_EVT_PEND);
4226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_cback_reg_enable_complete(nfa_dm_module_init_cback);
4236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Store Enable parameters */
4256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.p_dm_cback = p_data->enable.p_dm_cback;
4266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.p_conn_cback = p_data->enable.p_conn_cback;
4276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Enable NFC stack */
4296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_Enable(nfa_dm_nfc_response_cback);
4306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
4316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_ERROR0("nfa_dm_enable: ERROR ALREADY ENABLED.");
4326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    dm_cback_data.status = NFA_STATUS_ALREADY_STARTED;
4336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (*(p_data->enable.p_dm_cback))(NFA_DM_ENABLE_EVT, &dm_cback_data);
4346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_disable
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Disables the NFC device manager
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_disable(tNFA_DM_MSG* p_data) {
4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_DEACT_TYPE deactivate_type = NFA_DEACTIVATE_TYPE_IDLE;
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_disable (): graceful:%d", p_data->disable.graceful);
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_data->disable.graceful) {
4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* if RF discovery is enabled */
4556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) {
4566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED;
4576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) {
4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* if waiting RSP in idle state */
4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) {
4616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING;
4626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        }
4636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING;
4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD,
4666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                               (tNFA_DM_RF_DISC_DATA*)&deactivate_type);
4676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if ((nfa_dm_cb.disc_cb.disc_flags &
4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi             (NFA_DM_DISC_FLAGS_W4_RSP | NFA_DM_DISC_FLAGS_W4_NTF)) == 0) {
4696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          /* not waiting to deactivate, clear the flag now */
4706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING;
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
4726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Start timeout for graceful shutdown. If timer expires, then force an
4756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi     * ungraceful shutdown */
4766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_start_timer(&nfa_dm_cb.tle, NFA_DM_TIMEOUT_DISABLE_EVT,
4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                        NFA_DM_DISABLE_TIMEOUT_VAL);
4786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
4796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Disable all subsystems other than DM (DM will be disabled after all  */
4816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* the other subsystem have been disabled)                              */
4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_sys_disable_subsystems(p_data->disable.graceful);
4836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_disable_complete
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Called when all NFA subsytems are disabled.
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC core stack can now be disabled.
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
4976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_disable_complete(void) {
4986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_disable_complete ()");
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((nfa_dm_cb.flags & NFA_DM_FLAGS_DM_DISABLING_NFC) == 0) {
5016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_DEBUG0(
5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        "nfa_dm_disable_complete (): proceeding with nfc core shutdown.");
503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_DM_DISABLING_NFC;
505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_stop_timer(&nfa_dm_cb.tle);
507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Free all buffers for NDEF handlers */
5096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_ndef_dereg_all();
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Disable nfc core stack */
5126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_Disable();
5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_set_config
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process set config command
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_set_config(tNFA_DM_MSG* p_data) {
5266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_STATUS status;
5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t buff[255];
5286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p = buff;
5296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
5306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_CBACK_DATA dm_cback_data;
5316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
5326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (p_data->setconfig.length + 2 > 255) {
5336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Total length of TLV must be less than 256 (1 byte) */
5346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    status = NFC_STATUS_FAILED;
5356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
5366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    UINT8_TO_STREAM(p, p_data->setconfig.param_id);
5376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    UINT8_TO_STREAM(p, p_data->setconfig.length);
5386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    ARRAY_TO_STREAM(p, p_data->setconfig.p_data, p_data->setconfig.length)
5396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    status = nfa_dm_check_set_config((uint8_t)(p_data->setconfig.length + 2),
5406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     buff, true);
5416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
5426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
5436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (status != NFC_STATUS_OK) {
5446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    dm_cback_data.set_config.status = NFA_STATUS_INVALID_PARAM;
5456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (*nfa_dm_cb.p_dm_cback)(NFA_DM_SET_CONFIG_EVT, &dm_cback_data);
5466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
5486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_get_config
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process get config command
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
5606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_get_config(tNFA_DM_MSG* p_data) {
5616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_GetConfig(p_data->getconfig.num_ids, p_data->getconfig.p_pmids);
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_conn_cback_event_notify
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Notify application of CONN_CBACK event, using appropriate
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  callback
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
5766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_conn_cback_event_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data) {
5776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) {
5786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Use exclusive RF mode callback */
5796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.p_excl_conn_cback)
5806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (*nfa_dm_cb.p_excl_conn_cback)(event, p_data);
5816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
5826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (*nfa_dm_cb.p_conn_cback)(event, p_data);
5836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_rel_excl_rf_control_and_notify
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Stop exclusive RF control and notify app of
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_rel_excl_rf_control_and_notify(void) {
5976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA conn_evt;
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_rel_excl_rf_control_and_notify ()");
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Exclusive RF control stopped. Notify app */
6026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_EXCL_RF_ACTIVE;
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Stop exclusive RF discovery for exclusive RF mode */
6056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_stop_excl_discovery();
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Notify app that exclusive RF control has stopped */
6086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  conn_evt.status = NFA_STATUS_OK;
6096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  (*nfa_dm_cb.p_excl_conn_cback)(NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT,
6106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                 &conn_evt);
6116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.p_excl_conn_cback = NULL;
6126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.p_excl_ndef_cback = NULL;
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_request_excl_rf_ctrl
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Request exclusive RF control
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_request_excl_rf_ctrl(tNFA_DM_MSG* p_data) {
6256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA conn_evt;
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_request_excl_rf_ctrl ()");
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!nfa_dm_cb.p_excl_conn_cback) {
6306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE) {
6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      conn_evt.status = NFA_STATUS_FAILED;
6326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (*p_data->req_excl_rf_ctrl.p_conn_cback)(
6336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &conn_evt);
6346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return true;
6356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* Store callbacks */
6386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.p_excl_conn_cback = p_data->req_excl_rf_ctrl.p_conn_cback;
6396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.p_excl_ndef_cback = p_data->req_excl_rf_ctrl.p_ndef_cback;
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_EXCL_RF_ACTIVE;
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* start exclusive RF discovery */
6446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_start_excl_discovery(p_data->req_excl_rf_ctrl.poll_mask,
6456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                &p_data->req_excl_rf_ctrl.listen_cfg,
6466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                nfa_dm_excl_disc_cback);
6476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
6486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_ERROR0("Exclusive rf control already requested");
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    conn_evt.status = NFA_STATUS_FAILED;
6516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    (*p_data->req_excl_rf_ctrl.p_conn_cback)(
6526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &conn_evt);
6536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_release_excl_rf_ctrl
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Release exclusive RF control
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
6676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_release_excl_rf_ctrl(tNFA_DM_MSG* p_data) {
6686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_release_excl_rf_ctrl ()");
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* nfa_dm_rel_excl_rf_control_and_notify() is called when discovery state goes
6716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi   * IDLE */
6726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING;
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* if discover command has been sent in IDLE state and waiting for response
6756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  ** then just wait for responose. Otherwise initiate deactivating.
6766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  */
6776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!((nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) &&
6786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))) {
6796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
6806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.disc_cb.kovio_tle.in_use)
6836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_sys_stop_timer(&nfa_dm_cb.disc_cb.kovio_tle);
6847c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu
6856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_deactivate
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process deactivate command
693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
6976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_deactivate(tNFA_DM_MSG* p_data) {
6986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA conn_evt;
6996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DEACTIVATE_TYPE deact_type;
7006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
7016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_deactivate ()");
7026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
7036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Always allow deactivate to IDLE */
7046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Do not allow deactivate to SLEEP for T1T,NFCDEP, ISO15693 */
7056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((p_data->deactivate.sleep_mode == false) ||
7066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ((nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_T1T) &&
7076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi       (nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_NFC_DEP) &&
7086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi       (nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_ISO15693) &&
7096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi       (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_KOVIO))) {
7106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    deact_type = NFA_DEACTIVATE_TYPE_DISCOVERY;
7116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (p_data->deactivate.sleep_mode) {
7126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) {
7136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Deactivate to sleep mode not allowed in this state. */
7146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        deact_type = NFA_DEACTIVATE_TYPE_IDLE;
7156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_LISTEN_SLEEP) {
7166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        deact_type = NFA_DEACTIVATE_TYPE_SLEEP;
7176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
7186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
7196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_ALL_DISCOVERIES) {
7206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Only deactivate to IDLE is allowed in this state. */
7216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      deact_type = NFA_DEACTIVATE_TYPE_IDLE;
7226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
72367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
7246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if ((nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_NFC_DEP) &&
7256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        ((nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) == 0x00)) {
7266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Exclusive RF control doesn't use NFA P2P */
7276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* NFA P2P will deactivate NFC link after deactivating LLCP link */
7286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED)) {
7296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_p2p_deactivate_llcp();
7306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
7316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_rf_deactivate(deact_type);
7326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
7336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return true;
7346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
7356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_rf_deactivate(deact_type) == NFA_STATUS_OK) {
7366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if (nfa_dm_cb.disc_cb.kovio_tle.in_use)
7376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_sys_stop_timer(&nfa_dm_cb.disc_cb.kovio_tle);
7386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_rw_stop_presence_check_timer();
7396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        return true;
7406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
7426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_ERROR0("nfa_dm_act_deactivate (): invalid protocol, mode or state");
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Notify error to application */
7476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  conn_evt.status = NFA_STATUS_FAILED;
7486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_DEACTIVATE_FAIL_EVT, &conn_evt);
749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_power_off_sleep
756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process power off sleep mode request
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_power_off_sleep(tNFA_DM_MSG* p_data) {
7636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_power_off_sleep ()");
764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_SetPowerOffSleep((bool)(p_data->hdr.layer_specific));
766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
7676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_reg_vsc
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process registers VSC callback
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_reg_vsc(tNFA_DM_MSG* p_data) {
7806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (NFC_RegVSCback(p_data->reg_vsc.is_register, p_data->reg_vsc.p_cback) !=
7816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFC_STATUS_OK) {
7826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_ERROR0("NFC_RegVSCback failed");
7836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
7846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_send_vsc
790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
791552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description      Send the NCI Vendor Specific command to the NCI command
792552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi**                  queue
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          FALSE (message buffer is NOT freed by caller)
795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
7976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_send_vsc(tNFA_DM_MSG* p_data) {
7986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_cmd = (NFC_HDR*)p_data;
7996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  p_cmd->offset = sizeof(tNFA_DM_API_SEND_VSC) - NFC_HDR_SIZE;
8016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  p_cmd->len = p_data->send_vsc.cmd_params_len;
8026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_SendVsCommand(p_data->send_vsc.oid, p_cmd, p_data->send_vsc.p_cback);
8036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Most dm action functions return TRUE, so nfa-sys frees the GKI buffer
8056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi   * carrying the message,
8066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi   * This action function re-use the GKI buffer to send the VSC, so the GKI
8076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi   * buffer can not be freed by nfa-sys */
8086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return false;
809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_start_polling
814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Start polling
816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFA_STATUS
818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
8206fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS nfa_dm_start_polling(void) {
8216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
8226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_TECHNOLOGY_MASK poll_tech_mask;
8236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0;
8246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_start_polling ()");
8266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  poll_tech_mask = nfa_dm_cb.poll_mask;
8286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
8296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* start RF discovery with discovery callback */
8306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.poll_disc_handle == NFA_HANDLE_INVALID) {
8316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A) {
8326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PA_T1T;
8336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PA_T2T;
8346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PA_ISO_DEP;
8356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PA_NFC_DEP;
8366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_P_LEGACY;
8376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE) {
8396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PAA_NFC_DEP;
8406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B) {
8426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PB_ISO_DEP;
8436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F) {
8456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PF_T3T;
8466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PF_NFC_DEP;
8476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE) {
8496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_PFA_NFC_DEP;
8506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_ISO15693) {
8526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_P_ISO15693;
8536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B_PRIME) {
8556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_P_B_PRIME;
8566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
8576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (poll_tech_mask & NFA_TECHNOLOGY_MASK_KOVIO) {
8586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      poll_disc_mask |= NFA_DM_DISC_MASK_P_KOVIO;
8596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.poll_disc_handle = nfa_dm_add_rf_discover(
8626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        poll_disc_mask, NFA_DM_DISC_HOST_ID_DH, nfa_dm_poll_disc_cback);
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.poll_disc_handle != NFA_HANDLE_INVALID)
8656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      status = NFA_STATUS_OK;
866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
8676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      status = NFA_STATUS_FAILED;
8686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
8696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    status = NFA_STATUS_OK;
8706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (status);
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_enable_polling
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process enable polling command
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
8846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_enable_polling(tNFA_DM_MSG* p_data) {
8856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_enable_polling ()");
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) &&
8906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE))) {
8916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.poll_mask = p_data->enable_poll.poll_mask;
892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_start_polling() == NFA_STATUS_OK) {
8946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.flags |= NFA_DM_FLAGS_POLLING_ENABLED;
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
8966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.status = NFA_STATUS_OK;
8976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_POLL_ENABLED_EVT, &evt_data);
8986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return true;
899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
9006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
9016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFA_TRACE_ERROR0("nfa_dm_act_enable_polling (): already started");
9026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* send NFA_POLL_ENABLED_EVT with NFA_STATUS_FAILED */
9056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  evt_data.status = NFA_STATUS_FAILED;
9066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_POLL_ENABLED_EVT, &evt_data);
907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_deactivate_polling
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deactivate any polling state
916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE if need to wait for deactivation
918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
9206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic bool nfa_dm_deactivate_polling(void) {
9216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_deactivate_polling ()");
9226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
9236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_ALL_DISCOVERIES) ||
9246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT)) {
9256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
9266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return false;
9276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) {
9286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) {
9296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* NFA P2P will deactivate NFC link after deactivating LLCP link */
9306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_p2p_deactivate_llcp();
9316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
9326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
9346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return true;
9356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
9366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return false;
9376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_disable_polling
943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process disable polling command
945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
9496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_polling(tNFA_DM_MSG* p_data) {
9506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_disable_polling ()");
953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.poll_disc_handle != NFA_HANDLE_INVALID) {
9556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags &= ~NFA_DM_FLAGS_POLLING_ENABLED;
956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_deactivate_polling() == false) {
9586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_delete_rf_discover(nfa_dm_cb.poll_disc_handle);
9596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID;
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.status = NFA_STATUS_OK;
9626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_POLL_DISABLED_EVT, &evt_data);
9636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
9646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.flags |= NFA_DM_FLAGS_SEND_POLL_STOP_EVT;
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
9666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
9676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    evt_data.status = NFA_STATUS_FAILED;
9686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_conn_cback_event_notify(NFA_POLL_DISABLED_EVT, &evt_data);
9696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
9716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
97667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         nfa_dm_act_enable_listening
97767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
97867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Process enable listening command
97967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
98067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          TRUE (message buffer to be freed by caller)
98167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
98267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
9836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_enable_listening(tNFA_DM_MSG* p_data) {
9846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
98567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
9866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_enable_listening ()");
98767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
9886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_LISTEN_DISABLED;
9896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  evt_data.status = NFA_STATUS_OK;
9906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_LISTEN_ENABLED_EVT, &evt_data);
99167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
9926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
99367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
99467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
99567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
99667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
99767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         nfa_dm_act_disable_listening
99867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
99967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Process disable listening command
100067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
100167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          TRUE (message buffer to be freed by caller)
100267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
100367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
10046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_listening(tNFA_DM_MSG* p_data) {
10056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
100667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_disable_listening ()");
100867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags |= NFA_DM_FLAGS_LISTEN_DISABLED;
10106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  evt_data.status = NFA_STATUS_OK;
10116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_LISTEN_DISABLED_EVT, &evt_data);
101267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
101467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
101567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
101667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
101767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
101867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         nfa_dm_act_pause_p2p
101967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
102067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Process Pause P2P command
102167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
102267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          TRUE (message buffer to be freed by caller)
102367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
102467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
10256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_pause_p2p(tNFA_DM_MSG* p_data) {
10266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
102767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_pause_p2p ()");
102967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags |= NFA_DM_FLAGS_P2P_PAUSED;
10316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  evt_data.status = NFA_STATUS_OK;
10326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_P2P_PAUSED_EVT, &evt_data);
103367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
103567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
103667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
103767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
103867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
103967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function         nfa_dm_act_resume_p2p
104067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
104167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description      Process resume P2P command
104267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
104367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns          TRUE (message buffer to be freed by caller)
104467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
104567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/
10466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_resume_p2p(tNFA_DM_MSG* p_data) {
10476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
104867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_resume_p2p ()");
105067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_P2P_PAUSED;
10526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  evt_data.status = NFA_STATUS_OK;
10536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_P2P_RESUMED_EVT, &evt_data);
105467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
10556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
105667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu}
105767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu
105867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/*******************************************************************************
105967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu**
1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_send_raw_frame
1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send an raw frame on RF link
1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
10676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_send_raw_frame(tNFA_DM_MSG* p_data) {
10686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_STATUS status = NFC_STATUS_FAILED;
10696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_send_raw_frame ()");
10716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
10726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* If NFC link is activated */
10736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if ((nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) ||
10746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE)) {
10756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_RAW_FRAME;
10766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_SetReassemblyFlag(false);
10776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* If not in exclusive mode, and not activated for LISTEN, then forward raw
10786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi     * data to NFA_RW to send */
10796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) &&
10806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        !(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) &&
10816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        ((nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T1T) ||
10826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi         (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T2T) ||
10836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi         (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T3T) ||
10846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi         (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO_DEP) ||
10856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi         (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693))) {
10866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* if RW is checking presence then it will put into pending queue */
10876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      status = nfa_rw_send_raw_frame((NFC_HDR*)p_data);
10886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
10896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      status = NFC_SendData(NFC_RF_CONN_ID, (NFC_HDR*)p_data);
10906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (status != NFC_STATUS_OK) {
10916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFC_SetReassemblyFlag(true);
10926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
10936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* Already freed or NCI layer will free buffer */
10946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return false;
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
10966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (status == NFC_STATUS_FAILED) {
10996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_SetReassemblyFlag(true);
11006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* free the buffer */
11016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return true;
11026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
11036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* NCI layer will free buffer */
11046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return false;
11056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_set_p2p_listen_tech
1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Notify change of P2P listen technologies to NFA P2P
1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_set_p2p_listen_tech(tNFA_DM_MSG* p_data) {
11186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_set_p2p_listen_tech ()  tech_mask = %d",
11196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   p_data->set_p2p_listen_tech.tech_mask);
1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_p2p_update_listen_tech(p_data->set_p2p_listen_tech.tech_mask);
11226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(NFA_SET_P2P_LISTEN_TECH_EVT, NULL);
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_start_rf_discovery
1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process start RF discovery command
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_start_rf_discovery(tNFA_DM_MSG* p_data) {
11376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_start_rf_discovery ()");
1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) {
11426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    evt_data.status = NFA_STATUS_OK;
11436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_conn_cback_event_notify(NFA_RF_DISCOVERY_STARTED_EVT, &evt_data);
11446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE) {
11456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    evt_data.status = NFA_STATUS_SEMANTIC_ERROR;
11466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_conn_cback_event_notify(NFA_RF_DISCOVERY_STARTED_EVT, &evt_data);
11476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
11486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.disc_cb.disc_flags |=
11496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (NFA_DM_DISC_FLAGS_ENABLED | NFA_DM_DISC_FLAGS_NOTIFY);
11506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_start_rf_discover();
11516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
11526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
11536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_stop_rf_discovery
1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process stop RF discovery command
1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
11656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_stop_rf_discovery(tNFA_DM_MSG* p_data) {
11666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_stop_rf_discovery ()");
1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) ||
11716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE)) {
11726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED;
1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
11746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* if discover command has been sent in IDLE state and waiting for response
11756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi     */
11766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) {
11776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING;
11786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
11796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.status = NFA_STATUS_OK;
11806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_RF_DISCOVERY_STOPPED_EVT, &evt_data);
1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
11826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
11836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED;
11846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING;
11857c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu
11866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE) == NFA_STATUS_OK) {
11876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.kovio_tle.in_use)
11886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_sys_stop_timer(&nfa_dm_cb.disc_cb.kovio_tle);
11896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_rw_stop_presence_check_timer();
1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
11916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
11926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_set_rf_disc_duration
1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set duration for RF discovery
1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_set_rf_disc_duration(tNFA_DM_MSG* p_data) {
12056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.disc_cb.disc_duration = p_data->disc_duration.rf_disc_dur_ms;
12066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
12112ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao** Function         nfa_dm_act_get_rf_disc_duration
12122ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao**
12132ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao** Description      Get duration for RF discovery
12142ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao**
1215512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoi** Returns          uint16_t
12162ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao**
12172ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao*******************************************************************************/
12186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint16_t nfa_dm_act_get_rf_disc_duration() {
12196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return (nfa_dm_cb.disc_cb.disc_duration);
12202ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao}
12212ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao/*******************************************************************************
12222ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao**
1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_select
1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process RF select command
1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_select(tNFA_DM_MSG* p_data) {
12316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_select ()");
1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_rf_discover_select(p_data->select.rf_disc_id, p_data->select.protocol,
12346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                            p_data->select.rf_interface);
12356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_update_rf_params
1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process update RF communication parameters command
1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_update_rf_params(tNFA_DM_MSG* p_data) {
12486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA conn_evt;
1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG0("nfa_dm_act_update_rf_params ()");
1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (NFC_UpdateRFCommParams(&p_data->update_rf_params.params) !=
12536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFC_STATUS_OK) {
12546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    conn_evt.status = NFA_STATUS_FAILED;
12556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_conn_cback_event_notify(NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt);
12566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_disable_timeout
1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      timeout on disable process. Shutdown immediately
1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE (message buffer to be freed by caller)
1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_timeout(tNFA_DM_MSG* p_data) {
12716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_DM_API_DISABLE disable;
1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
12736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  disable.graceful = false;
12746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_disable((tNFA_DM_MSG*)&disable);
12756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  return true;
1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_conn_cback_notify
1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Notify app of reader/writer/ndef events
1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
12876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_act_conn_cback_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data) {
12886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_act_conn_cback_notify (): event:0x%X", event);
12896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Notify event using appropriate CONN_CBACK */
12916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_conn_cback_event_notify(event, p_data);
12926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
12936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* If not in exclusive RF mode, then read NDEF message from tag (if automatic
12946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi   * reading is enabled) */
12956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE)) {
12966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if ((event == NFA_NDEF_DETECT_EVT) &&
12976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        (nfa_dm_cb.flags & NFA_DM_FLAGS_AUTO_READING_NDEF)) {
12986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* read NDEF message from tag */
12996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (p_data->ndef_detect.status == NFA_STATUS_OK) {
13006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFA_RwReadNDef();
13016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else if (p_data->ndef_detect.status == NFA_STATUS_FAILED) {
13026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.flags &= ~NFA_DM_FLAGS_AUTO_READING_NDEF;
13036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
13046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* ignore NFA_STATUS_BUSY */
13056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if ((event == NFA_READ_CPLT_EVT) &&
13066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi               (nfa_dm_cb.flags & NFA_DM_FLAGS_AUTO_READING_NDEF)) {
13076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* reading NDEF message is done */
13086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.flags &= ~NFA_DM_FLAGS_AUTO_READING_NDEF;
1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
13106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_act_data_cback
1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing data from RF link
1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
13226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_act_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
13236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                  tNFC_CONN* p_data) {
13246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_msg;
13256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_act_data_cback (): event = 0x%X", event);
1328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (event == NFC_DATA_CEVT) {
13306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_msg = (NFC_HDR*)p_data->data.p_data;
13317c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu
13326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (p_msg) {
13336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.data.status = p_data->data.status;
13346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.data.p_data = (uint8_t*)(p_msg + 1) + p_msg->offset;
13356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.data.len = p_msg->len;
1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_DATA_EVT, &evt_data);
1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      GKI_freebuf(p_msg);
13406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
13416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFA_TRACE_ERROR0(
13426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          "nfa_dm_act_data_cback (): received NFC_DATA_CEVT with NULL data "
13436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          "pointer");
1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
13456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else if (event == NFC_DEACTIVATE_CEVT) {
13466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    NFC_SetStaticRfCback(NULL);
13476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_excl_disc_cback
1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing event from discovery callback
1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
13596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_excl_disc_cback(tNFA_DM_RF_DISC_EVT event,
13606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                   tNFC_DISCOVER* p_data) {
13616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
1362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_excl_disc_cback (): event:0x%02X", event);
1364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  switch (event) {
1366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_START_EVT:
13676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      evt_data.status = NFA_STATUS_OK;
13686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT,
13696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     &evt_data);
13706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
1371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_ACTIVATED_EVT:
13736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_A) {
13746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* store SEL_RES response */
13756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.activated_sel_res =
13766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            p_data->activate.rf_tech_param.param.pa.sel_rsp;
13776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
13786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
13796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) {
13806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Set data callback to receive raw frame */
13816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        NFC_SetStaticRfCback(nfa_dm_act_data_cback);
13826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
13836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        memset(&(evt_data.activated.params), 0x00, sizeof(tNFA_TAG_PARAMS));
13846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        memcpy(&(evt_data.activated.activate_ntf), &(p_data->activate),
13856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi               sizeof(tNFC_ACTIVATE_DEVT));
13866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
13876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_conn_cback_event_notify(NFA_ACTIVATED_EVT, &evt_data);
13886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
13896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* holding activation notification until sub-module is ready */
13906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.p_activate_ntf =
13916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (uint8_t*)GKI_getbuf(sizeof(tNFC_ACTIVATE_DEVT));
13926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
13936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if (nfa_dm_cb.p_activate_ntf) {
13946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          memcpy(nfa_dm_cb.p_activate_ntf, &(p_data->activate),
13956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                 sizeof(tNFC_ACTIVATE_DEVT));
13966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
13976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) ||
13986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) ||
13996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) ||
14006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP) ||
14016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693) ||
14026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO)) {
14036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            /* Notify NFA tag sub-system */
14046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_ACTIVATED_EVT, p_data, false);
14056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          } else /* if NFC-DEP, ISO-DEP with frame interface or others */
14066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          {
1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Set data callback to receive raw frame */
14086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            NFC_SetStaticRfCback(nfa_dm_act_data_cback);
14096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            nfa_dm_notify_activation_status(NFA_STATUS_OK, NULL);
14106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          }
14116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        } else {
14126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          /* deactivate and restart RF discovery */
14136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
1414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
14156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
14166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
1417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_DEACTIVATED_EVT:
1419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
14206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* if deactivated to idle or discovery */
14216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) ||
14226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)) {
14236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* clear stored NFCID/UID/KOVIO bar code */
14246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.activated_nfcid_len = 0;
14256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
14266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_NFC_DEP) {
14286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Notify NFA RW sub-systems */
14296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, false);
14306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
14316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* if deactivated as sleep mode */
14336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) ||
14346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)) {
14356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP;
14366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
14376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
14386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
14396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* notify deactivation to upper layer */
14416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_DEACTIVATED_EVT, &evt_data);
14426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* clean up SEL_RES response */
14446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.disc_cb.activated_sel_res = 0;
14456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
1446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
14486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFA_TRACE_ERROR0("Unexpected event");
14496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
14506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_poll_disc_cback
1456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing event from discovery callback
1458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
14626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_dm_poll_disc_cback(tNFA_DM_RF_DISC_EVT event,
14636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                   tNFC_DISCOVER* p_data) {
14646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
1465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
14666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_poll_disc_cback (): event:0x%02X", event);
1467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
14686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  switch (event) {
1469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_START_EVT:
14706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
1471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_ACTIVATED_EVT:
1473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
14746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.disc_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_A) {
14756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* store SEL_RES response */
14766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.disc_cb.activated_sel_res =
14776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            p_data->activate.rf_tech_param.param.pa.sel_rsp;
14786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
14796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* holding activation notification until sub-module is ready */
14816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.p_activate_ntf =
14826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (uint8_t*)GKI_getbuf(sizeof(tNFC_ACTIVATE_DEVT));
14836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.p_activate_ntf) {
14856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        memcpy(nfa_dm_cb.p_activate_ntf, &(p_data->activate),
14866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi               sizeof(tNFC_ACTIVATE_DEVT));
14876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
14886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) &&
14896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (nfa_dm_cb.disc_cb.activated_rf_interface ==
14906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi             NFC_INTERFACE_NFC_DEP)) {
14916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED)) {
14926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            /* activate LLCP */
14936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            nfa_p2p_activate_llcp(p_data);
14946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            if (nfa_dm_cb.p_activate_ntf) {
14956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              GKI_freebuf(nfa_dm_cb.p_activate_ntf);
14966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              nfa_dm_cb.p_activate_ntf = NULL;
1497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
14986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          } else {
14996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            NFA_TRACE_DEBUG0("P2P is paused");
15006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            nfa_dm_notify_activation_status(NFA_STATUS_OK, NULL);
15016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          }
15026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        } else if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) ||
15036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) ||
15046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) ||
15056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol ==
15066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                    NFC_PROTOCOL_ISO_DEP) ||
15076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol ==
15086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                    NFC_PROTOCOL_15693) ||
15096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol ==
15106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                    NFC_PROTOCOL_KOVIO) ||
15116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                   (nfa_dm_cb.disc_cb.activated_protocol ==
15126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                    NFC_PROTOCOL_MIFARE)) {
15136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          /* Notify NFA tag sub-system */
15146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_ACTIVATED_EVT, p_data, true);
15156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        } else /* if NFC-DEP/ISO-DEP with frame interface */
1516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
15176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          /* Set data callback to receive raw frame */
15186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          NFC_SetStaticRfCback(nfa_dm_act_data_cback);
15196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_notify_activation_status(NFA_STATUS_OK, NULL);
1520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
15216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
15226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* deactivate and restart RF discovery */
15236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
15246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
15256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
1526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_DM_RF_DISC_DEACTIVATED_EVT:
1528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* if deactivated to idle or discovery */
15306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) ||
15316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)) {
15326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* clear stored NFCID/UID/KOVIO bar code */
15336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.activated_nfcid_len = 0;
15346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
1535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) &&
15376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_NFC_DEP)) {
15386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /*
15396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        ** If LLCP link is not deactivated yet,
15406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        ** LLCP will receive deactivation ntf through data callback.
15416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        ** NFA P2P will receive callback event from LLCP.
15426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        */
15436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
15446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* Notify NFA RW sub-systems */
15456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, true);
15466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
1547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* if NFA sent NFA_ACTIVATED_EVT earlier */
15496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_DEACTIVATED_EVT) {
15506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_DEACTIVATED_EVT;
1551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* if deactivated as sleep mode */
15536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) ||
15546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)) {
15556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP;
15566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        } else {
15576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
1558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
15596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* notify deactivation to application */
15606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_conn_cback_event_notify(NFA_DEACTIVATED_EVT, &evt_data);
15616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
1562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /* clean up SEL_RES response */
15646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_cb.disc_cb.activated_sel_res = 0;
1565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) {
15676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* deregister discovery callback from NFA DM Discovery */
15686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_delete_rf_discover(nfa_dm_cb.poll_disc_handle);
15696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID;
1570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        /* this is for disable polling */
15726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_POLL_STOP_EVT) {
15736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_POLL_STOP_EVT;
1574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          evt_data.status = NFA_STATUS_OK;
15766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          nfa_dm_conn_cback_event_notify(NFA_POLL_DISABLED_EVT, &evt_data);
1577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
15786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
15796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
15806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_notify_activation_status
1586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing activation status from sub-modules
1588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
15926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_notify_activation_status(tNFA_STATUS status,
15936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     tNFA_TAG_PARAMS* p_params) {
15946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_CONN_EVT_DATA evt_data;
15956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_RF_TECH_PARAMS* p_tech_params;
15966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t *p_nfcid = NULL, nfcid_len;
1597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
15986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_TRACE_DEBUG1("nfa_dm_notify_activation_status (): status:0x%X", status);
1599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (!nfa_dm_cb.p_activate_ntf) {
16016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* this is for NFA P2P listen */
16026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    return;
16036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  if (status == NFA_STATUS_OK) {
16066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* notify NFC link activation */
16076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memcpy(&(evt_data.activated.activate_ntf), nfa_dm_cb.p_activate_ntf,
16086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi           sizeof(tNFC_ACTIVATE_DEVT));
1609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    p_tech_params = &evt_data.activated.activate_ntf.rf_tech_param;
1611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    memset(&(evt_data.activated.params), 0x00, sizeof(tNFA_TAG_PARAMS));
16136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (p_params) {
16146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      memcpy(&(evt_data.activated.params), p_params, sizeof(tNFA_TAG_PARAMS));
16156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
1616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* get length of NFCID and location */
16186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_A) {
16196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((p_tech_params->param.pa.nfcid1_len == 0) && (p_params != NULL)) {
16206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfcid_len = sizeof(p_params->t1t.uid);
16216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        p_nfcid = p_params->t1t.uid;
16226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        evt_data.activated.activate_ntf.rf_tech_param.param.pa.nfcid1_len =
16236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            nfcid_len;
16246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        memcpy(evt_data.activated.activate_ntf.rf_tech_param.param.pa.nfcid1,
16256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi               p_nfcid, nfcid_len);
16266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      } else {
16276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        nfcid_len = p_tech_params->param.pa.nfcid1_len;
16286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        p_nfcid = p_tech_params->param.pa.nfcid1;
16296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
16306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_B) {
16316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfcid_len = NFC_NFCID0_MAX_LEN;
16326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_nfcid = p_tech_params->param.pb.nfcid0;
16336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_F) {
16346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfcid_len = NFC_NFCID2_LEN;
16356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_nfcid = p_tech_params->param.pf.nfcid2;
16366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_ISO15693) {
16376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfcid_len = NFC_ISO15693_UID_LEN;
16386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_nfcid = p_tech_params->param.pi93.uid;
16396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_KOVIO) {
16406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfcid_len = p_tech_params->param.pk.uid_len;
16416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_nfcid = p_tech_params->param.pk.uid;
16426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else {
16436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfcid_len = 0;
1644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
16456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
16466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /*
16476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    ** If not in exlusive RF mode, and
16486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    **      P2P activation, then push default NDEF message through SNEP
16496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    **      TAG activation, then read NDEF message
16506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    */
16516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) {
16526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /*
16536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ** Default NDEF message will be put to NFC Forum defualt SNEP server
16546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ** after receiving NFA_LLCP_ACTIVATED_EVT.
16556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      */
16566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    } else if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE)) {
16576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      /*
16586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ** if the same tag is activated then do not perform auto NDEF
16596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ** detection. Application may put a tag into sleep mode and
16606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      ** reactivate the same tag.
16616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      */
16626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
16636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      if ((p_tech_params->mode != nfa_dm_cb.activated_tech_mode) ||
16646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (nfcid_len != nfa_dm_cb.activated_nfcid_len) ||
16656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          (memcmp(p_nfcid, nfa_dm_cb.activated_nfcid, nfcid_len))) {
16666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi        if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) ||
16676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) ||
16686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) ||
16696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP) &&
16706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi             (nfa_dm_cb.disc_cb.activated_rf_interface ==
16716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              NFC_INTERFACE_ISO_DEP)) ||
16726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693)) {
16736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          if (p_nfa_dm_cfg->auto_detect_ndef) {
16746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            if (p_nfa_dm_cfg->auto_read_ndef) {
16756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi              nfa_dm_cb.flags |= NFA_DM_FLAGS_AUTO_READING_NDEF;
16766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            }
16776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            NFA_RwDetectNDef();
16786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          } else if (p_nfa_dm_cfg->auto_read_ndef) {
16796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi            NFA_RwReadNDef();
16806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi          }
1681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
16826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      }
1683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
16856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* store activated tag information */
16866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.activated_tech_mode = p_tech_params->mode;
16876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.activated_nfcid_len = nfcid_len;
16886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfcid_len) memcpy(nfa_dm_cb.activated_nfcid, p_nfcid, nfcid_len);
16896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
16906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    nfa_dm_cb.flags |= NFA_DM_FLAGS_SEND_DEACTIVATED_EVT;
16916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING))
16926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_conn_cback_event_notify(NFA_ACTIVATED_EVT, &evt_data);
16936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } else {
16946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    /* if NFC_DEP, NFA P2P will deactivate */
16956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_NFC_DEP) {
16966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
16976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    }
16986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
16996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
17006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  GKI_freebuf(nfa_dm_cb.p_activate_ntf);
17016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nfa_dm_cb.p_activate_ntf = NULL;
1702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
1705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_dm_nfc_revt_2_str
1708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      convert nfc revt to string
1710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
17126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoichar* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event) {
17136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  switch (event) {
1714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_ENABLE_REVT:
17156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_ENABLE_REVT";
1716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_DISABLE_REVT:
17186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_DISABLE_REVT";
1719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_SET_CONFIG_REVT:
17216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_SET_CONFIG_REVT";
1722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_GET_CONFIG_REVT:
17246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_GET_CONFIG_REVT";
1725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_DISCOVER_REVT:
17276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCEE_DISCOVER_REVT";
1728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_INFO_REVT:
17306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCEE_INFO_REVT";
1731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_MODE_SET_REVT:
17336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCEE_MODE_SET_REVT";
1734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_RF_FIELD_REVT:
17366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_RF_FIELD_REVT";
1737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_EE_ACTION_REVT:
17396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_EE_ACTION_REVT";
1740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_EE_DISCOVER_REQ_REVT:
17426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_EE_DISCOVER_REQ_REVT";
1743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_SET_ROUTING_REVT:
17456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_SET_ROUTING_REVT";
1746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_GET_ROUTING_REVT:
17486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_GET_ROUTING_REVT";
1749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_GEN_ERROR_REVT:
17516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_GEN_ERROR_REVT";
1752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_RESTART_REVT:
17546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCC_RESTART_REVT";
1755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_TIMEOUT_REVT:
17576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCC_TIMEOUT_REVT";
1758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_TRANSPORT_ERR_REVT:
17606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCC_TRANSPORT_ERR_REVT";
1761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCC_POWER_OFF_REVT:
17636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "NFC_NFCC_POWER_OFF_REVT";
1764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
17666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      return "unknown revt";
17676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      break;
17686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
1769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_VERBOSE */
1771