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