nfa_dm_act.c revision e9df6ba5a8fcccf306a80b1670b423be8fe7746
1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 2010-2012 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> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ce_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_rw_int.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_rw_api.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_int.h" 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_cho_int.h" 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h" 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_int.h" 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE)) 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_snep_int.h" 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define nfa_snep_init () 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* This is the timeout value to guarantee disable is performed within reasonable amount of time */ 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_DM_DISABLE_TIMEOUT_VAL 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_DM_DISABLE_TIMEOUT_VAL 1000 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_set_init_nci_params (void); 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_STATUS nfa_dm_start_polling (void); 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic BOOLEAN nfa_dm_deactivate_polling (void); 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_excl_disc_cback (tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_poll_disc_cback (tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data); 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_module_init_cback 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing initialization complete event from sub-modules 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_module_init_cback (void) 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_CBACK_DATA dm_cback_data; 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_ENABLE_EVT_PEND; 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* All subsystem are initialized */ 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.status = NFA_STATUS_OK; 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_ENABLE_EVT, &dm_cback_data); 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_nfcc_power_mode_proc_complete_cback 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing complete of processing NFCC power state change 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** from all sub-modules 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_nfcc_power_mode_proc_complete_cback (void) 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_PWR_MODE_CHANGE power_mode_change; 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_nfcc_power_mode_proc_complete_cback () nfcc_pwr_mode = 0x%x", 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.nfcc_pwr_mode); 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFCC power state is change to full power */ 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.nfcc_pwr_mode != NFA_DM_PWR_MODE_OFF_SLEEP) 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_NFCC_IS_RESTORING; 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* reconfigure BRCM NFCC */ 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_CMD, NULL); 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SETTING_PWR_MODE; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project power_mode_change.status = NFA_STATUS_OK; 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project power_mode_change.power_mode = nfa_dm_cb.nfcc_pwr_mode; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_PWR_MODE_CHANGE_EVT, (tNFA_DM_CBACK_DATA*) &power_mode_change); 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_sys_enable 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function on enable 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_sys_enable (void) 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_init_nci_params (); 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_init_nci_params 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set initial NCI configuration parameters 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_set_init_nci_params (void) 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* set NCI default value if other than zero */ 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* LF_T3T_IDENTIFIERS_1/2/.../16 */ 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_CE_LISTEN_INFO_MAX; xx++) 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.lf_t3t_id[xx][0] = 0xFF; 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.lf_t3t_id[xx][1] = 0xFF; 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.lf_t3t_id[xx][2] = 0x02; 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.lf_t3t_id[xx][2] = 0xFE; 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* LF_T3T_PMM */ 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NCI_PARAM_LEN_LF_T3T_PMM; xx++) 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.lf_t3t_pmm[xx] = 0xFF; 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* LF_T3T_FLAGS: 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** DH needs to set this configuration, even if default value (not listening) is used, 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** to let NFCC know of intention (not listening) of DH. 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* FWI */ 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.fwi[0] = 0x04; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* WT */ 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.params.wt[0] = 14; 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set CE default configuration */ 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_nfa_dm_ce_cfg[0]) 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config (p_nfa_dm_ce_cfg[0], &p_nfa_dm_ce_cfg[1], FALSE); 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set optional general default configuration */ 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_nfa_dm_gen_cfg && p_nfa_dm_gen_cfg[0]) 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config (p_nfa_dm_gen_cfg[0], &p_nfa_dm_gen_cfg[1], FALSE); 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_nfa_dm_interface_mapping && nfa_dm_num_dm_interface_mapping) 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_DiscoveryMap (nfa_dm_num_dm_interface_mapping, p_nfa_dm_interface_mapping, NULL); 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_proc_nfcc_power_mode 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing NFCC power mode changes 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_proc_nfcc_power_mode (UINT8 nfcc_power_mode) 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_proc_nfcc_power_mode (): nfcc_power_mode=%d", 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcc_power_mode); 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFCC power mode is change to full power */ 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&nfa_dm_cb.params, 0x00, sizeof (tNFA_DM_PARAMS)); 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.setcfg_pending_mask = 0; 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.setcfg_pending_num = 0; 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_init_nci_params (); 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_cback_notify_nfcc_power_mode_proc_complete (NFA_ID_DM); 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disable_event 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description report disable event 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disable_event (void) 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Deregister DM from sys */ 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_deregister (NFA_ID_DM); 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify app */ 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~(NFA_DM_FLAGS_DM_IS_ACTIVE 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_FLAGS_DM_DISABLING_NFC 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_FLAGS_ENABLE_EVT_PEND); 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_DISABLE_EVT, NULL); 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_nfc_response_cback 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Call DM event hanlder with NFC response callback data 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_nfc_response_cback (tNFC_RESPONSE_EVT event, tNFC_RESPONSE *p_data) 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_CBACK_DATA dm_cback_data; 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_GET_CONFIG *p_nfa_get_confg; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 dm_cback_evt; 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_dm_nfc_response_cback () %s(0x%x)", nfa_dm_nfc_revt_2_str (event), event); 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_nfc_response_cback () event=0x%x", event); 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_ENABLE_REVT: /* 0 Enable event */ 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFC stack enabled. Enable nfa sub-systems */ 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->enable.status == NFC_STATUS_OK) 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_init_nci_params (); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Initialize NFA subsystems */ 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_enable_subsystems (); 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (nfa_dm_cb.flags & NFA_DM_FLAGS_ENABLE_EVT_PEND) 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify app */ 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~(NFA_DM_FLAGS_ENABLE_EVT_PEND | NFA_DM_FLAGS_DM_IS_ACTIVE); 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.status = p_data->enable.status; 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_ENABLE_EVT, &dm_cback_data); 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISABLE_REVT: /* 1 Disable event */ 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disable_event (); 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_SET_CONFIG_REVT: /* 2 Set Config Response */ 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If this setconfig was due to NFA_SetConfig, then notify the app */ 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.setcfg_pending_mask & 1) /* lsb=whether last NCI_SET_CONFIG was due to NFA_SetConfig */ 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.set_config.status = p_data->set_config.status; 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.set_config.num_param_id = p_data->set_config.num_param_id; 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (dm_cback_data.set_config.param_ids, p_data->set_config.param_ids, p_data->set_config.num_param_id); 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_SET_CONFIG_EVT, &dm_cback_data); 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Update the pending mask */ 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.setcfg_pending_num>0) 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.setcfg_pending_mask >>= 1; 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.setcfg_pending_num--; 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* This should not occur (means we got a SET_CONFIG_NTF that's unaccounted for */ 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("NFA received unexpected NFC_SET_CONFIG_REVT"); 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GET_CONFIG_REVT: /* 3 Get Config Response */ 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->get_config.status == NFC_STATUS_OK) 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_nfa_get_confg = (tNFA_GET_CONFIG *) GKI_getbuf ((UINT16) (sizeof (tNFA_GET_CONFIG) + p_data->get_config.tlv_size))) != NULL) 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfa_get_confg->status = NFA_STATUS_OK; 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfa_get_confg->tlv_size = p_data->get_config.tlv_size; 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_nfa_get_confg->param_tlvs, p_data->get_config.p_param_tlvs, p_data->get_config.tlv_size); 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_GET_CONFIG_EVT, (tNFA_DM_CBACK_DATA *) p_nfa_get_confg); 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_nfa_get_confg); 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_nfc_response_cback unable to allocate buffer"); 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Return result of getconfig to the app */ 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.get_config.status = NFA_STATUS_FAILED; 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_GET_CONFIG_EVT, &dm_cback_data); 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_DISCOVER_REVT: /* NFCEE Discover response */ 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_INFO_REVT: /* NFCEE Discover Notification */ 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_ACTION_REVT: /* EE Action notification */ 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */ 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_DISCOVER_REQ_REVT: /* EE Discover Req notification */ 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_proc_evt (event, p_data); 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_RF_FIELD_REVT: /* RF Field information */ 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.rf_field.status = NFA_STATUS_OK; 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.rf_field.rf_field_status = p_data->rf_field.rf_field; 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_RF_FIELD_EVT, &dm_cback_data); 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_SET_ROUTING_REVT: /* Configure Routing response */ 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GET_ROUTING_REVT: /* Retrieve Routing response */ 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GEN_ERROR_REVT: /* generic error command or notification */ 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_RESTART_REVT: /* NFCC has been re-initialized */ 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->status == NFC_STATUS_OK) 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_FULL; 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_NFCC_IS_RESTORING; 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFCC will start from IDLE when turned on again */ 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_state = NFA_DM_RFST_IDLE; 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_OFF_SLEEP; 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA submodules change of NFCC power mode */ 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_cback_reg_nfcc_power_mode_proc_complete (nfa_dm_nfcc_power_mode_proc_complete_cback); 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_notify_nfcc_power_mode (nfa_dm_cb.nfcc_pwr_mode); 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_TIMEOUT_REVT: 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_TRANSPORT_ERR_REVT: 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("flags:0x%08x", nfa_dm_cb.flags); 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_evt = (event == NFC_NFCC_TIMEOUT_REVT) ? NFA_DM_NFCC_TIMEOUT_EVT : NFA_DM_NFCC_TRANSPORT_ERR_EVT; 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (dm_cback_evt, NULL); 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_POWER_OFF_REVT: 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.nfcc_pwr_mode = NFA_DM_PWR_MODE_OFF_SLEEP; 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA submodules change of NFCC power mode */ 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_cback_reg_nfcc_power_mode_proc_complete (nfa_dm_nfcc_power_mode_proc_complete_cback); 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_notify_nfcc_power_mode (NFA_DM_PWR_MODE_OFF_SLEEP); 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_RF_COMM_PARAMS_UPDATE_REVT: 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = p_data->status; 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt); 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_enable 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Initialises the NFC device manager 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_enable (tNFA_DM_MSG *p_data) 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_CBACK_DATA dm_cback_data; 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_enable ()"); 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check if NFA is already enabled */ 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_DM_IS_ACTIVE)) 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Initialize BRCM control block, it musb be called before setting any flags */ 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= (NFA_DM_FLAGS_DM_IS_ACTIVE | NFA_DM_FLAGS_ENABLE_EVT_PEND); 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_cback_reg_enable_complete (nfa_dm_module_init_cback); 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Store Enable parameters */ 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_dm_cback = p_data->enable.p_dm_cback; 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_conn_cback = p_data->enable.p_conn_cback; 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Enable NFC stack */ 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Enable (nfa_dm_nfc_response_cback); 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_enable: ERROR ALREADY ENABLED."); 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.status = NFA_STATUS_ALREADY_STARTED; 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(p_data->enable.p_dm_cback)) (NFA_DM_ENABLE_EVT, &dm_cback_data); 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 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*******************************************************************************/ 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_disable (tNFA_DM_MSG *p_data) 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DEACT_TYPE deactivate_type = NFA_DEACTIVATE_TYPE_IDLE; 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_disable (): graceful:%d", p_data->disable.graceful); 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->disable.graceful) 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if RF discovery is enabled */ 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED; 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if waiting RSP in idle state */ 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING; 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING; 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type); 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((nfa_dm_cb.disc_cb.disc_flags & (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF)) == 0) 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* not waiting to deactivate, clear the flag now */ 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING; 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Start timeout for graceful shutdown. If timer expires, then force an ungraceful shutdown */ 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_start_timer (&nfa_dm_cb.tle, NFA_DM_TIMEOUT_DISABLE_EVT, NFA_DM_DISABLE_TIMEOUT_VAL); 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Disable all subsystems other than DM (DM will be disabled after all */ 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* the other subsystem have been disabled) */ 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_disable_subsystems (p_data->disable.graceful); 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disable_complete 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Called when all NFA subsytems are disabled. 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC core stack can now be disabled. 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_disable_complete (void) 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_disable_complete ()"); 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((nfa_dm_cb.flags & NFA_DM_FLAGS_DM_DISABLING_NFC) == 0) 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_disable_complete (): proceeding with nfc core shutdown."); 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_DM_DISABLING_NFC; 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_stop_timer (&nfa_dm_cb.tle); 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Free all buffers for NDEF handlers */ 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_ndef_dereg_all(); 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Disable nfc core stack */ 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Disable (); 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_config 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process set config command 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_set_config (tNFA_DM_MSG *p_data) 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status; 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 buff[255]; 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p = buff; 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_CBACK_DATA dm_cback_data; 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->setconfig.length + 2 > 255) 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Total length of TLV must be less than 256 (1 byte) */ 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFC_STATUS_FAILED; 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_data->setconfig.param_id); 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_data->setconfig.length); 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_data->setconfig.p_data, p_data->setconfig.length) 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_dm_check_set_config ((UINT8) (p_data->setconfig.length + 2), buff, TRUE); 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (status != NFC_STATUS_OK) 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_cback_data.set_config.status = NFA_STATUS_INVALID_PARAM; 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_dm_cback) (NFA_DM_SET_CONFIG_EVT, &dm_cback_data); 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_get_config 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process get config command 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_get_config (tNFA_DM_MSG *p_data) 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_GetConfig (p_data->getconfig.num_ids, p_data->getconfig.p_pmids); 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_conn_cback_event_notify 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Notify application of CONN_CBACK event, using appropriate 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns nothing 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_conn_cback_event_notify (UINT8 event, tNFA_CONN_EVT_DATA *p_data) 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Use exclusive RF mode callback */ 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.p_excl_conn_cback) 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_excl_conn_cback) (event, p_data); 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_conn_cback) (event, p_data); 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_rel_excl_rf_control_and_notify 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Stop exclusive RF control and notify app of 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_rel_excl_rf_control_and_notify (void) 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_rel_excl_rf_control_and_notify ()"); 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Exclusive RF control stopped. Notify app */ 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_EXCL_RF_ACTIVE; 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Stop exclusive RF discovery for exclusive RF mode */ 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_stop_excl_discovery (); 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify app that exclusive RF control has stopped */ 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_OK; 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_excl_conn_cback) (NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT, &conn_evt); 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_excl_conn_cback = NULL; 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_excl_ndef_cback = NULL; 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_request_excl_rf_ctrl 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Request exclusive RF control 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_request_excl_rf_ctrl (tNFA_DM_MSG *p_data) 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_request_excl_rf_ctrl ()"); 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!nfa_dm_cb.p_excl_conn_cback) 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE) 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_data->req_excl_rf_ctrl.p_conn_cback) (NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &conn_evt); 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Store callbacks */ 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_excl_conn_cback = p_data->req_excl_rf_ctrl.p_conn_cback; 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_excl_ndef_cback = p_data->req_excl_rf_ctrl.p_ndef_cback; 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_EXCL_RF_ACTIVE; 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* start exclusive RF discovery */ 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_excl_discovery (p_data->req_excl_rf_ctrl.poll_mask, 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &p_data->req_excl_rf_ctrl.listen_cfg, 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_excl_disc_cback); 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("Exclusive rf control already requested"); 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_data->req_excl_rf_ctrl.p_conn_cback) (NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &conn_evt); 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_release_excl_rf_ctrl 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Release exclusive RF control 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_release_excl_rf_ctrl (tNFA_DM_MSG *p_data) 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_release_excl_rf_ctrl ()"); 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* nfa_dm_rel_excl_rf_control_and_notify() is called when discovery state goes IDLE */ 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING; 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if discover command has been sent in IDLE state and waiting for response 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** then just wait for responose. Otherwise initiate deactivating. 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!( (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) )) 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE); 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_deactivate 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process deactivate command 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_deactivate (tNFA_DM_MSG *p_data) 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DEACTIVATE_TYPE deact_type; 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_deactivate ()"); 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (p_data->deactivate.sleep_mode == FALSE) /* Always allow deactivate to IDLE */ 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||( (nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_T1T) /* Do not allow deactivate to SLEEP for T1T,NFCDEP, ISO15693 */ 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_NFC_DEP) 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_protocol != NFA_PROTOCOL_ISO15693) ) ) 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_NFC_DEP) 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) == 0x00) ) 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Exclusive RF control doesn't use NFA P2P */ 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFA P2P will deactivate NFC link after deactivating LLCP link */ 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_p2p_deactivate_llcp (); 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact_type = NFA_DEACTIVATE_TYPE_DISCOVERY; 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->deactivate.sleep_mode) 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Deactivate to sleep mode not allowed in this state. */ 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact_type = NFA_DEACTIVATE_TYPE_IDLE; 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_LISTEN_SLEEP) 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact_type = NFA_DEACTIVATE_TYPE_SLEEP; 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_ALL_DISCOVERIES) 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Only deactivate to IDLE is allowed in this state. */ 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact_type = NFA_DEACTIVATE_TYPE_IDLE; 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_rf_deactivate (deact_type) == NFA_STATUS_OK) 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_rw_stop_presence_check_timer (); 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_act_deactivate (): invalid protocol or mode"); 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify error to application */ 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATE_FAIL_EVT, &conn_evt); 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_power_off_sleep 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process power off sleep mode request 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_power_off_sleep (tNFA_DM_MSG *p_data) 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_power_off_sleep ()"); 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetPowerOffSleep ((BOOLEAN) (p_data->hdr.layer_specific)); 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_reg_vsc 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process registers VSC callback 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_reg_vsc(tNFA_DM_MSG *p_data) 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (NFC_RegVSCback(p_data->reg_vsc.is_register, p_data->reg_vsc.p_cback) != NFC_STATUS_OK) 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("NFC_RegVSCback failed"); 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_send_vsc 810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send the NCI Vendor Specific command to the NCI command queue 812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns FALSE (message buffer is NOT freed by caller) 814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_send_vsc(tNFA_DM_MSG *p_data) 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_cmd = (BT_HDR *)p_data; 819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cmd->offset = sizeof (tNFA_DM_API_SEND_VSC) - BT_HDR_SIZE; 821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cmd->len = p_data->send_vsc.cmd_params_len; 822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SendVsCommand (p_data->send_vsc.oid, p_cmd, p_data->send_vsc.p_cback); 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Most dm action functions return TRUE, so nfa-sys frees the GKI buffer carrying the message, 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This action function re-use the GKI buffer to send the VSC, so the GKI buffer can not be freed by nfa-sys */ 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (FALSE); 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_start_polling 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Start polling 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_STATUS 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_dm_start_polling (void) 839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_TECHNOLOGY_MASK poll_tech_mask; 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0; 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_start_polling ()"); 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_tech_mask = nfa_dm_cb.poll_mask; 847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* start RF discovery with discovery callback */ 849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.poll_disc_handle == NFA_HANDLE_INVALID) 850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A) 852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_T1T; 854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_T2T; 855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_ISO_DEP; 856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_NFC_DEP; 857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_LEGACY; 858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE) 860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PAA_NFC_DEP; 862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B) 864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PB_ISO_DEP; 866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F) 868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PF_T3T; 870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PF_NFC_DEP; 871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE) 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PFA_NFC_DEP; 875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_ISO15693) 877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_ISO15693; 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B_PRIME) 881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_B_PRIME; 883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_KOVIO) 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_KOVIO; 887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.poll_disc_handle = nfa_dm_add_rf_discover (poll_disc_mask, 890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_DM_DISC_HOST_ID_DH, 891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_poll_disc_cback); 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.poll_disc_handle != NFA_HANDLE_INVALID) 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFA_STATUS_OK; 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFA_STATUS_FAILED; 897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFA_STATUS_OK; 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (status); 904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_enable_polling 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process enable polling command 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_enable_polling (tNFA_DM_MSG *p_data) 916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_enable_polling ()"); 920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) 922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) ) ) 923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.poll_mask = p_data->enable_poll.poll_mask; 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_start_polling () == NFA_STATUS_OK) 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_POLLING_ENABLED; 929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_ENABLED_EVT, &evt_data); 932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_act_enable_polling (): already started"); 938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* send NFA_POLL_ENABLED_EVT with NFA_STATUS_FAILED */ 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_FAILED; 942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_ENABLED_EVT, &evt_data); 943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_deactivate_polling 950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deactivate any polling state 952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE if need to wait for deactivation 954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic BOOLEAN nfa_dm_deactivate_polling (void) 957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_deactivate_polling ()"); 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_ALL_DISCOVERIES) 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) ) 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE); 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFA P2P will deactivate NFC link after deactivating LLCP link */ 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_p2p_deactivate_llcp (); 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE); 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_disable_polling 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process disable polling command 990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_disable_polling (tNFA_DM_MSG *p_data) 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_disable_polling ()"); 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.poll_disc_handle != NFA_HANDLE_INVALID) 1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_POLLING_ENABLED; 1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_deactivate_polling () == FALSE) 1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_delete_rf_discover (nfa_dm_cb.poll_disc_handle); 1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID; 1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data); 1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_SEND_POLL_STOP_EVT; 1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_FAILED; 1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data); 1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_send_raw_frame 1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send an raw frame on RF link 1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_send_raw_frame (tNFA_DM_MSG *p_data) 1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status = NFC_STATUS_FAILED; 1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_send_raw_frame ()"); 1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If NFC link is activated */ 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) ) 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If not in exclusive mode, and not activated for LISTEN, then forward raw data to NFA_RW to send */ 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( !(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&!(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) 1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&( (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T1T) 1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T2T) 1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T3T) 1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||( (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO_DEP) 1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_ISO_DEP) ) 1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693) ) ) 1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if RW is checking presence then it will put into pending queue */ 1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_rw_send_raw_frame ((BT_HDR*)p_data); 1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFC_SendData (NFC_RF_CONN_ID, (BT_HDR*) p_data); 1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (status == NFC_STATUS_FAILED) 1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* free the buffer */ 1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NCI layer will free buffer */ 1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_p2p_listen_tech 1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Notify change of P2P listen technologies to NFA P2P 1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_set_p2p_listen_tech (tNFA_DM_MSG *p_data) 1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_set_p2p_listen_tech () tech_mask = %d", 1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->set_p2p_listen_tech.tech_mask); 1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_p2p_update_listen_tech (p_data->set_p2p_listen_tech.tech_mask); 1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_SET_P2P_LISTEN_TECH_EVT, NULL); 1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_start_rf_discovery 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process start RF discovery command 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_start_rf_discovery (tNFA_DM_MSG *p_data) 1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_start_rf_discovery ()"); 1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) 1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STARTED_EVT, &evt_data); 1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE) 1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_SEMANTIC_ERROR; 1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STARTED_EVT, &evt_data); 1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_ENABLED|NFA_DM_DISC_FLAGS_NOTIFY); 1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_stop_rf_discovery 1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process stop RF discovery command 1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_stop_rf_discovery (tNFA_DM_MSG *p_data) 1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_stop_rf_discovery ()"); 1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) || 1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) ) 1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED; 1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if discover command has been sent in IDLE state and waiting for response */ 1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING; 1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STOPPED_EVT, &evt_data); 1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_ENABLED; 1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_STOPPING; 1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_set_rf_disc_duration 1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set duration for RF discovery 1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_set_rf_disc_duration (tNFA_DM_MSG *p_data) 1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_duration = p_data->disc_duration.rf_disc_dur_ms; 1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_select 1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process RF select command 1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_select (tNFA_DM_MSG *p_data) 1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_select ()"); 1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_discover_select (p_data->select.rf_disc_id, 1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->select.protocol, 1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->select.rf_interface); 1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_update_rf_params 1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process update RF communication parameters command 1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_update_rf_params (tNFA_DM_MSG *p_data) 1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_act_update_rf_params ()"); 1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (NFC_UpdateRFCommParams (&p_data->update_rf_params.params) != NFC_STATUS_OK) 1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt); 1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_disable_timeout 1231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description timeout on disable process. Shutdown immediately 1233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE (message buffer to be freed by caller) 1235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_dm_act_disable_timeout (tNFA_DM_MSG *p_data) 1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_API_DISABLE disable; 1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disable.graceful = FALSE; 1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disable ((tNFA_DM_MSG *) &disable); 1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (TRUE); 1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_conn_cback_notify 1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Notify app of reader/writer/ndef events 1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns nothing 1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_act_conn_cback_notify (UINT8 event, tNFA_CONN_EVT_DATA *p_data) 1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_act_conn_cback_notify (): event:0x%X", event); 1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify event using appropriate CONN_CBACK */ 1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (event, p_data); 1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If not in exclusive RF mode, then read NDEF message from tag (if automatic reading is enabled) */ 1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE)) 1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (event == NFA_NDEF_DETECT_EVT) 1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.flags & NFA_DM_FLAGS_AUTO_READING_NDEF) ) 1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* read NDEF message from tag */ 1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->ndef_detect.status == NFA_STATUS_OK) 1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_RwReadNDef (); 1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_data->ndef_detect.status == NFA_STATUS_FAILED) 1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_AUTO_READING_NDEF; 1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* ignore NFA_STATUS_BUSY */ 1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if ( (event == NFA_READ_CPLT_EVT) 1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.flags & NFA_DM_FLAGS_AUTO_READING_NDEF)) 1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* reading NDEF message is done */ 1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_AUTO_READING_NDEF; 1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_act_data_cback 1291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing data from RF link 1293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_act_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data) 1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_msg = (BT_HDR *) p_data->data.p_data; 1300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_act_data_cback (): event = 0x%X", event); 1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (event == NFC_DATA_CEVT) 1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_msg) 1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.data.p_data = (UINT8 *) (p_msg + 1) + p_msg->offset; 1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.data.len = p_msg->len; 1310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DATA_EVT, &evt_data); 1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_msg); 1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_act_data_cback (): received NFC_DATA_CEVT with NULL data pointer"); 1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (event == NFC_DEACTIVATE_CEVT) 1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (NULL); 1323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_excl_disc_cback 1329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing event from discovery callback 1331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_excl_disc_cback (tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data) 1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_excl_disc_cback (): event:0x%02X", event); 1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 1342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_START_EVT: 1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &evt_data); 1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_ACTIVATED_EVT: 1349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_A) 1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* store SEL_RES response */ 1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_sel_res = p_data->activate.rf_tech_param.param.pa.sel_rsp; 1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) 1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set data callback to receive raw frame */ 1358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_act_data_cback); 1359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&(evt_data.activated.params), 0x00, sizeof (tNFA_TAG_PARAMS)); 1361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&(evt_data.activated.activate_ntf), &(p_data->activate), sizeof (tNFC_ACTIVATE_DEVT)); 1362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_ACTIVATED_EVT, &evt_data); 1364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* holding activation notification until sub-module is ready */ 1368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_activate_ntf = (UINT8*) GKI_getbuf (sizeof (tNFC_ACTIVATE_DEVT)); 1369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.p_activate_ntf) 1371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (nfa_dm_cb.p_activate_ntf, 1373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &(p_data->activate), 1374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sizeof (tNFC_ACTIVATE_DEVT)); 1375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) 1377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) 1378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) 1379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP) 1380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_ISO_DEP) ) 1381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693) ) 1382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA tag sub-system */ 1384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data, FALSE); 1385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else /* if NFC-DEP, ISO-DEP with frame interface or others */ 1387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set data callback to receive raw frame */ 1389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_act_data_cback); 1390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_notify_activation_status (NFA_STATUS_OK, NULL); 1391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* deactivate and restart RF discovery */ 1396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY); 1397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_DEACTIVATED_EVT: 1402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear stored NFCID/UID */ 1404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.activated_nfcid_len = 0; 1405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_NFC_DEP) 1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA RW sub-systems */ 1409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, FALSE); 1410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivated as sleep mode */ 1413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 1414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 1415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP; 1417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify deactivation to upper layer */ 1424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clean up SEL_RES response */ 1427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_sel_res = 0; 1428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT: 1431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */ 1432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* No need to notify NFA RW sub-systems */ 1433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify deactivation to application */ 1436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("Unexpected event"); 1441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_poll_disc_cback 1448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing event from discovery callback 1450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_poll_disc_cback (tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data) 1455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_poll_disc_cback (): event:0x%02X", event); 1459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 1461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_START_EVT: 1463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_ACTIVATED_EVT: 1466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_A) 1468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* store SEL_RES response */ 1470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_sel_res = p_data->activate.rf_tech_param.param.pa.sel_rsp; 1471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* holding activation notification until sub-module is ready */ 1474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_activate_ntf = (UINT8*) GKI_getbuf (sizeof (tNFC_ACTIVATE_DEVT)); 1475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.p_activate_ntf) 1477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (nfa_dm_cb.p_activate_ntf, 1479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &(p_data->activate), 1480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sizeof (tNFC_ACTIVATE_DEVT)); 1481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) 1483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_NFC_DEP) ) 1484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* activate LLCP */ 1486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_p2p_activate_llcp (p_data); 1487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) 1489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) 1490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) 1491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP) 1492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_ISO_DEP) ) 1493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693) ) 1494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA tag sub-system */ 1496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data, TRUE); 1497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else /* if NFC-DEP/ISO-DEP with frame interface */ 1499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set data callback to receive raw frame */ 1501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_act_data_cback); 1502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_notify_activation_status (NFA_STATUS_OK, NULL); 1503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* deactivate and restart RF discovery */ 1508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY); 1509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_DEACTIVATED_EVT: 1513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear stored NFCID/UID */ 1515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.activated_nfcid_len = 0; 1516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) 1518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_NFC_DEP) ) 1519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** If LLCP link is not deactivated yet, 1522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** LLCP will receive deactivation ntf through data callback. 1523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** NFA P2P will receive callback event from LLCP. 1524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Notify NFA RW sub-systems */ 1529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, TRUE); 1530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFA sent NFA_ACTIVATED_EVT earlier */ 1533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_DEACTIVATED_EVT) 1534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_DEACTIVATED_EVT; 1536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivated as sleep mode */ 1538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 1539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 1540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP; 1542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify deactivation to application */ 1548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clean up SEL_RES response */ 1552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_sel_res = 0; 1553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) 1555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* deregister discovery callback from NFA DM Discovery */ 1557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_delete_rf_discover (nfa_dm_cb.poll_disc_handle); 1558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID; 1559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* this is for disable polling */ 1561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_POLL_STOP_EVT) 1562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_POLL_STOP_EVT; 1564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data); 1567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT: 1573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */ 1574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* No need to notify NFA RW sub-systems */ 1575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear stored NFCID/UID */ 1577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.activated_nfcid_len = 0; 1578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clean up SEL_RES response */ 1579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_sel_res = 0; 1580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify deactivation to application */ 1583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) 1586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* deregister discovery callback from NFA DM Discovery */ 1588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_delete_rf_discover (nfa_dm_cb.poll_disc_handle); 1589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID; 1590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* this is for disable polling */ 1592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_POLL_STOP_EVT) 1593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_POLL_STOP_EVT; 1595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data); 1598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_notify_activation_status 1607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing activation status from sub-modules 1609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_notify_activation_status (tNFA_STATUS status, tNFA_TAG_PARAMS *p_params) 1614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RF_TECH_PARAMS *p_tech_params; 1617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_nfcid = NULL, nfcid_len; 1618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_notify_activation_status (): status:0x%X", status); 1620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!nfa_dm_cb.p_activate_ntf) 1622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* this is for NFA P2P listen */ 1624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 1625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (status == NFA_STATUS_OK) 1628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify NFC link activation */ 1630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy ( &(evt_data.activated.activate_ntf), 1631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_activate_ntf, 1632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sizeof (tNFC_ACTIVATE_DEVT)); 1633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_tech_params = &evt_data.activated.activate_ntf.rf_tech_param; 1635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_params) 1637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&(evt_data.activated.params), 1639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_params, 1640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sizeof (tNFA_TAG_PARAMS)); 1641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* get length of NFCID and location */ 1644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_A) 1645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcid_len = p_tech_params->param.pa.nfcid1_len; 1647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfcid = p_tech_params->param.pa.nfcid1; 1648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_B) 1650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcid_len = NFC_NFCID0_MAX_LEN; 1652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfcid = p_tech_params->param.pb.nfcid0; 1653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_F) 1655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcid_len = NFC_NFCID2_LEN; 1657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfcid = p_tech_params->param.pf.nfcid2; 1658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_ISO15693) 1660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcid_len = NFC_ISO15693_UID_LEN; 1662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_nfcid = p_tech_params->param.pi93.uid; 1663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcid_len = 0; 1667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** If not in exlusive RF mode, and 1671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** P2P activation, then push default NDEF message through SNEP 1672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** TAG activation, then read NDEF message 1673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_NFC_DEP) 1675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Default NDEF message will be put to NFC Forum defualt SNEP server 1678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** after receiving NFA_LLCP_ACTIVATED_EVT. 1679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Do not perform NDEF operations on KOVIO */ 1682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_KOVIO) 1683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("Not an NFC-Forum tag, bypassing NDEF detection", nfa_dm_cb.disc_cb.activated_protocol); 1685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE)) 1687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** if the same tag is activated then do not perform auto NDEF detection. 1690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Application may put a tag into sleep mode and reactivate the same tag. 1691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (p_tech_params->mode != nfa_dm_cb.disc_cb.activated_tech_mode) 1694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfcid_len != nfa_dm_cb.activated_nfcid_len) 1695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(memcmp (p_nfcid, nfa_dm_cb.activated_nfcid, nfcid_len))) 1696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T1T) 1698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T2T) 1699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T) 1700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP) 1701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.activated_rf_interface == NFC_INTERFACE_ISO_DEP) ) 1702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_ISO15693) ) 1703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_nfa_dm_cfg->auto_detect_ndef) 1705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_nfa_dm_cfg->auto_read_ndef) 1707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_AUTO_READING_NDEF; 1709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_RwDetectNDef (); 1711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_nfa_dm_cfg->auto_read_ndef) 1713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_RwReadNDef (); 1715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* store activated tag information */ 1721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.activated_nfcid_len = nfcid_len; 1722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcid_len) 1723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (nfa_dm_cb.activated_nfcid, p_nfcid, nfcid_len); 1724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.flags |= NFA_DM_FLAGS_SEND_DEACTIVATED_EVT; 1726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_ACTIVATED_EVT, &evt_data); 1727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if NFC_DEP, NFA P2P will deactivate */ 1731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_NFC_DEP) 1732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY); 1734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (nfa_dm_cb.p_activate_ntf); 1738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.p_activate_ntf = NULL; 1739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 1742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_nfc_revt_2_str 1745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfc revt to string 1747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_dm_nfc_revt_2_str (tNFC_RESPONSE_EVT event) 1750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) { 1752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_ENABLE_REVT: 1753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_ENABLE_REVT"; 1754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISABLE_REVT: 1756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_DISABLE_REVT"; 1757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_SET_CONFIG_REVT: 1759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_SET_CONFIG_REVT"; 1760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GET_CONFIG_REVT: 1762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_GET_CONFIG_REVT"; 1763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_DISCOVER_REVT: 1765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCEE_DISCOVER_REVT"; 1766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_INFO_REVT: 1768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCEE_INFO_REVT"; 1769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCEE_MODE_SET_REVT: 1771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCEE_MODE_SET_REVT"; 1772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_RF_FIELD_REVT: 1774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_RF_FIELD_REVT"; 1775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_ACTION_REVT: 1777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_EE_ACTION_REVT"; 1778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_EE_DISCOVER_REQ_REVT: 1780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_EE_DISCOVER_REQ_REVT"; 1781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_SET_ROUTING_REVT: 1783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_SET_ROUTING_REVT"; 1784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GET_ROUTING_REVT: 1786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_GET_ROUTING_REVT"; 1787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_GEN_ERROR_REVT: 1789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_GEN_ERROR_REVT"; 1790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_RESTART_REVT: 1792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCC_RESTART_REVT"; 1793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_TIMEOUT_REVT: 1795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCC_TIMEOUT_REVT"; 1796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_TRANSPORT_ERR_REVT: 1798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCC_TRANSPORT_ERR_REVT"; 1799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_NFCC_POWER_OFF_REVT: 1801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFC_NFCC_POWER_OFF_REVT"; 1802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "unknown revt"; 1805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_VERBOSE */ 1809