1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains the action functions for device manager discovery 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * function. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_api.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h" 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_rw_int.h" 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** static functions 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/ 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic UINT8 nfa_dm_get_rf_discover_config (tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask, 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DISCOVER_PARAMS disc_params[], 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 max_params); 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_STATUS nfa_dm_set_rf_listen_mode_config (tNFA_DM_DISC_TECH_PROTO_MASK tech_proto_mask); 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_set_rf_listen_mode_raw_config (tNFA_DM_DISC_TECH_PROTO_MASK *p_disc_mask); 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_DM_DISC_TECH_PROTO_MASK nfa_dm_disc_get_disc_mask (tNFC_RF_TECH_N_MODE tech_n_mode, 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_PROTOCOL protocol); 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_notify_discovery (tNFA_DM_RF_DISC_DATA *p_data); 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_STATUS nfa_dm_disc_notify_activation (tNFC_DISCOVER *p_data); 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_notify_deactivation (tNFA_DM_RF_DISC_SM_EVENT sm_event, tNFC_DISCOVER *p_data); 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data); 537c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chustatic void nfa_dm_disc_kovio_timeout_cback (TIMER_LIST_ENT *p_tle); 547c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chustatic void nfa_dm_disc_report_kovio_presence_check (tNFC_STATUS status); 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_dm_disc_state_2_str (UINT8 state); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_dm_disc_event_2_str (UINT8 event); 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_get_rf_discover_config 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Build RF discovery configurations from tNFA_DM_DISC_TECH_PROTO_MASK 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns number of RF discovery configurations 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic UINT8 nfa_dm_get_rf_discover_config (tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask, 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DISCOVER_PARAMS disc_params[], 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 max_params) 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_params = 0; 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED) 7867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu { 7967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config () listen disabled, rm listen from 0x%x", dm_disc_mask); 8067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu dm_disc_mask &= NFA_DM_DISC_MASK_POLL; 8167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu } 82a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nfa_dm_is_p2p_paused ()) 83a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 84a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu dm_disc_mask &= ~NFA_DM_DISC_MASK_NFC_DEP; 85a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 8667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling A */ 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & ( NFA_DM_DISC_MASK_PA_T1T 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_PA_T2T 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_PA_ISO_DEP 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_PA_NFC_DEP 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_P_LEGACY) ) 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_A; 9591ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pa; 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling B */ 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_PB_ISO_DEP) 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_B; 10691ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pb; 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling F */ 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & ( NFA_DM_DISC_MASK_PF_T3T 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_PF_NFC_DEP) ) 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_F; 11891ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pf; 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling A Active mode */ 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_PAA_NFC_DEP) 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_A_ACTIVE; 12991ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->paa; 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling F Active mode */ 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_PFA_NFC_DEP) 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_F_ACTIVE; 14091ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pfa; 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening A */ 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & ( NFA_DM_DISC_MASK_LA_T1T 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_T2T 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_ISO_DEP 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_NFC_DEP) ) 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_A; 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening B */ 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_B; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening F */ 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & ( NFA_DM_DISC_MASK_LF_T3T 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LF_NFC_DEP) ) 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_F; 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening A Active mode */ 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_LAA_NFC_DEP) 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE; 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening F Active mode */ 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_LFA_NFC_DEP) 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE; 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling ISO 15693 */ 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_P_ISO15693) 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_ISO15693; 21091ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pi93; 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling B' */ 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_P_B_PRIME) 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_B_PRIME; 22191ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pbp; 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check polling KOVIO */ 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_P_KOVIO) 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_KOVIO; 23291ada91fa991b4df5372a19a2cf81f074b298712Evan Chu disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pk; 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening ISO 15693 */ 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_L_ISO15693) 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_ISO15693; 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check listening B' */ 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & NFA_DM_DISC_MASK_L_B_PRIME) 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_B_PRIME; 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_params[num_params].frequency = 1; 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params++; 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params >= max_params) 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return num_params; 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_rf_listen_mode_config 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Update listening protocol to NFCC 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if success 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_STATUS nfa_dm_set_rf_listen_mode_config (tNFA_DM_DISC_TECH_PROTO_MASK tech_proto_mask) 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 params[40], *p; 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 platform = 0; 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 sens_info = 0; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_set_rf_listen_mode_config () tech_proto_mask = 0x%08X", 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tech_proto_mask); 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** T1T listen LA_PROT 0x80, LA_SENS_RES byte1:0x00 byte2:0x0C 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** T2T listen LA_PROT 0x00 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** T3T listen No bit for T3T in LF_PROT (CE T3T set listen parameters, system code, NFCID2, etc.) 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** ISO-DEP listen LA_PROT 0x01, LB_PROT 0x01 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** NFC-DEP listen LA_PROT 0x02, LF_PROT 0x02 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tech_proto_mask & NFA_DM_DISC_MASK_LA_T1T) 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project platform = NCI_PARAM_PLATFORM_T1T; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tech_proto_mask & NFA_DM_DISC_MASK_LA_T2T) 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* platform = 0 and sens_info = 0 */ 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tech_proto_mask & NFA_DM_DISC_MASK_LA_ISO_DEP) 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sens_info |= NCI_PARAM_SEL_INFO_ISODEP; 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tech_proto_mask & NFA_DM_DISC_MASK_LA_NFC_DEP) 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sens_info |= NCI_PARAM_SEL_INFO_NFCDEP; 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** for Listen A 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Set ATQA 0x0C00 for T1T listen 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** If the ATQA values are 0x0000, then the FW will use 0x0400 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** which works for ISODEP, T2T and NFCDEP. 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 32067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu if (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A] == NFA_DM_DISC_HOST_ID_DH) 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD); 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0x04); 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG); 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, platform); 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, sens_info); 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else /* Let NFCC use UICC configuration by configuring with length = 0 */ 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1); 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_HIST_BY); 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* for Listen B */ 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B] == NFA_DM_DISC_HOST_ID_DH) 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_SENSB_INFO); 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tech_proto_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_LISTEN_PROTOCOL_ISO_DEP); 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0x00); 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else /* Let NFCC use UICC configuration by configuring with length = 0 */ 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_NFCID0); 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_APPDATA); 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_ADC_FO); 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_H_INFO); 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 0); 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* for Listen F */ 3757c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* NFCC can support NFC-DEP and T3T listening based on NFCID routing regardless of NFC-F tech routing */ 3767c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu UINT8_TO_STREAM (p, NFC_PMID_LF_PROTOCOL); 3777c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_PROTOCOL); 378a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ((tech_proto_mask & NFA_DM_DISC_MASK_LF_NFC_DEP) && 379a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu !nfa_dm_is_p2p_paused() ) 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 3817c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu UINT8_TO_STREAM (p, NCI_LISTEN_PROTOCOL_NFC_DEP); 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 3857c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu UINT8_TO_STREAM (p, 0x00); 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p > params) 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_STATUS_OK; 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_total_duration 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Update total duration to NFCC 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_set_total_duration (void) 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 params[10], *p; 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_set_total_duration ()"); 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* for total duration */ 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_TOTAL_DURATION); 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_TOTAL_DURATION); 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16_TO_STREAM (p, nfa_dm_cb.disc_cb.disc_duration); 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p > params) 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_set_rf_listen_mode_raw_config 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set raw listen parameters 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_set_rf_listen_mode_raw_config (tNFA_DM_DISC_TECH_PROTO_MASK *p_disc_mask) 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = 0; 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_LISTEN_CFG *p_cfg = &nfa_dm_cb.disc_cb.excl_listen_config; 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 params[250], *p, xx; 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_set_rf_listen_mode_raw_config ()"); 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Discovery Configuration Parameters for Listen A 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A] == NFA_DM_DISC_HOST_ID_DH) 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_cfg->la_enable) ) 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD); 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->la_bit_frame_sdd); 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG); 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->la_platform_config); 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO); 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->la_sel_info); 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->la_platform_config == NCI_PARAM_PLATFORM_T1T) 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LA_T1T; 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If T4T or NFCDEP */ 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->la_sel_info & NCI_PARAM_SEL_INFO_ISODEP) 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LA_ISO_DEP; 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->la_sel_info & NCI_PARAM_SEL_INFO_NFCDEP) 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LA_NFC_DEP; 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If neither, T4T nor NFCDEP, then its T2T */ 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (disc_mask == 0) 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LA_T2T; 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1); 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->la_nfcid1_len); 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->la_nfcid1, p_cfg->la_nfcid1_len); 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Discovery Configuration Parameters for Listen B 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B] == NFA_DM_DISC_HOST_ID_DH) 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_cfg->lb_enable) ) 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_SENSB_INFO); 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lb_sensb_info); 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_NFCID0); 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lb_nfcid0_len); 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->lb_nfcid0, p_cfg->lb_nfcid0_len); 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_APPDATA); 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_APPDATA); 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->lb_app_data, NCI_PARAM_LEN_LB_APPDATA); 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_SFGI); 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 1); 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lb_adc_fo); 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_ADC_FO); 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_ADC_FO); 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lb_adc_fo); 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->lb_sensb_info & NCI_LISTEN_PROTOCOL_ISO_DEP) 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LB_ISO_DEP; 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Discovery Configuration Parameters for Listen F 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_F] == NFA_DM_DISC_HOST_ID_DH) 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_cfg->lf_enable) ) 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LF_CON_BITR_F); 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 1); 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lf_con_bitr_f); 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LF_PROTOCOL); 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_PROTOCOL); 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lf_protocol_type); 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_FLAGS2); 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_T3T_FLAGS2); 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16_TO_STREAM(p, p_cfg->lf_t3t_flags); 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if the bit at position X is set to 0, SC/NFCID2 with index X shall be ignored */ 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_LF_MAX_SC_NFCID2; xx++) 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_cfg->lf_t3t_flags & (0x0001 << xx)) != 0x0000) 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_ID1 + xx); 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN); 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->lf_t3t_identifier[xx], NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN); 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_PMM); 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_T3T_PMM); 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->lf_t3t_pmm, NCI_PARAM_LEN_LF_T3T_PMM); 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->lf_t3t_flags != NCI_LF_T3T_FLAGS2_ALL_DISABLED) 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LF_T3T; 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cfg->lf_protocol_type & NCI_LISTEN_PROTOCOL_NFC_DEP) 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask |= NFA_DM_DISC_MASK_LF_NFC_DEP; 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Discovery Configuration Parameters for Listen ISO-DEP 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((disc_mask & (NFA_DM_DISC_MASK_LA_ISO_DEP|NFA_DM_DISC_MASK_LB_ISO_DEP)) 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_cfg->li_enable)) 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_FWI); 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_FWI); 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->li_fwi); 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP) 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LA_HIST_BY); 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->la_hist_bytes_len); 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->la_hist_bytes, p_cfg->la_hist_bytes_len); 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_LB_H_INFO); 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->lb_h_info_resp_len); 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->lb_h_info_resp, p_cfg->lb_h_info_resp_len); 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Discovery Configuration Parameters for Listen NFC-DEP 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (disc_mask & (NFA_DM_DISC_MASK_LA_NFC_DEP|NFA_DM_DISC_MASK_LF_NFC_DEP)) 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_cfg->ln_enable)) 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = params; 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_WT); 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NCI_PARAM_LEN_WT); 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->ln_wt); 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_ATR_RES_GEN_BYTES); 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->ln_atr_res_gen_bytes_len); 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (p, p_cfg->ln_atr_res_gen_bytes, p_cfg->ln_atr_res_gen_bytes_len); 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, NFC_PMID_ATR_RSP_CONFIG); 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, 1); 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (p, p_cfg->ln_atr_res_config); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_disc_mask = disc_mask; 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_set_rf_listen_mode_raw_config () disc_mask = 0x%x", disc_mask); 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_get_disc_mask 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Convert RF technology, mode and protocol to bit mask 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFA_DM_DISC_TECH_PROTO_MASK 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_DM_DISC_TECH_PROTO_MASK nfa_dm_disc_get_disc_mask (tNFC_RF_TECH_N_MODE tech_n_mode, 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_PROTOCOL protocol) 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set initial disc_mask to legacy poll or listen */ 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = ((tech_n_mode & 0x80) ? NFA_DM_DISC_MASK_L_LEGACY : NFA_DM_DISC_MASK_P_LEGACY); 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (tech_n_mode) 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_A: 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (protocol) 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T1T: 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PA_T1T; 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T2T: 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PA_T2T; 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_ISO_DEP: 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PA_ISO_DEP; 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_NFC_DEP: 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PA_NFC_DEP; 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_B: 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (protocol == NFC_PROTOCOL_ISO_DEP) 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PB_ISO_DEP; 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_F: 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (protocol == NFC_PROTOCOL_T3T) 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PF_T3T; 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (protocol == NFC_PROTOCOL_NFC_DEP) 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PF_NFC_DEP; 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_ISO15693: 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_P_ISO15693; 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_B_PRIME: 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_P_B_PRIME; 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_KOVIO: 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_P_KOVIO; 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE: 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PAA_NFC_DEP; 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE: 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_PFA_NFC_DEP; 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_A: 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (protocol) 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T1T: 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LA_T1T; 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T2T: 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LA_T2T; 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_ISO_DEP: 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LA_ISO_DEP; 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_NFC_DEP: 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LA_NFC_DEP; 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_B: 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (protocol == NFC_PROTOCOL_ISO_DEP) 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LB_ISO_DEP; 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_F: 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (protocol == NFC_PROTOCOL_T3T) 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LF_T3T; 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (protocol == NFC_PROTOCOL_NFC_DEP) 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LF_NFC_DEP; 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_ISO15693: 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_L_ISO15693; 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME: 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_L_B_PRIME; 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE: 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LAA_NFC_DEP; 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE: 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project disc_mask = NFA_DM_DISC_MASK_LFA_NFC_DEP; 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_dm_disc_get_disc_mask (): tech_n_mode:0x%X, protocol:0x%X, disc_mask:0x%X", 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tech_n_mode, protocol, disc_mask); 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (disc_mask); 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_discovery_cback 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Discovery callback event from NFC 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_discovery_cback (tNFC_DISCOVER_EVT event, tNFC_DISCOVER *p_data) 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_SM_EVENT dm_disc_event = NFA_DM_DISC_SM_MAX_EVENT; 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_disc_discovery_cback (): event:0x%X", event); 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_START_DEVT: 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_DISCOVER_RSP; 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_RESULT_DEVT: 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_DISCOVER_NTF; 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_SELECT_DEVT: 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_DISCOVER_SELECT_RSP; 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_ACTIVATE_DEVT: 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_INTF_ACTIVATED_NTF; 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_DEACTIVATE_DEVT: 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->deactivate.is_ntf) 769a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_DEACTIVATE_NTF; 771a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) || (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)) 772a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 773a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu NFC_SetReassemblyFlag (TRUE); 774a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu nfa_dm_cb.flags &= ~NFA_DM_FLAGS_RAW_FRAME; 775a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 776a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_event = NFA_DM_RF_DEACTIVATE_RSP; 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("Unexpected event"); 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (dm_disc_event, (tNFA_DM_RF_DISC_DATA *) p_data); 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_notify_started 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Report NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT or 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_RF_DISCOVERY_STARTED_EVT, if needed 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_notify_started (tNFA_STATUS status) 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = status; 807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &evt_data); 810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STARTED_EVT, &evt_data); 812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_conn_event_notify 818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Notify application of CONN_CBACK event, using appropriate 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback 821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns nothing 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_disc_conn_event_notify (UINT8 event, tNFA_STATUS status) 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = status; 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Use exclusive RF mode callback */ 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.p_excl_conn_cback) 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_excl_conn_cback) (event, &evt_data); 839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfa_dm_cb.p_conn_cback) (event, &evt_data); 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 8495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function nfa_dm_disc_force_to_idle 8505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description Force NFCC to idle state while waiting for deactivation NTF 8525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8535c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns tNFC_STATUS 8545c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8555c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 8565c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenstatic tNFC_STATUS nfa_dm_disc_force_to_idle (void) 8575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 8585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR; 8595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_DEBUG1 ("nfa_dm_disc_force_to_idle() disc_flags = 0x%x", nfa_dm_cb.disc_cb.disc_flags); 8615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) /* do not execute more than one */ 8635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 8645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF); 8655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP); 8665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 8675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen status = NFC_Deactivate (NFC_DEACTIVATE_TYPE_IDLE); 8685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 8695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen return (status); 8715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 8725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 8745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function nfa_dm_disc_deact_ntf_timeout_cback 8765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description Timeout while waiting for deactivation NTF 8785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns void 8805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 8815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 8825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenstatic void nfa_dm_disc_deact_ntf_timeout_cback (TIMER_LIST_ENT *p_tle) 8835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 8845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()"); 8855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_force_to_idle(); 8875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 8885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 8895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 8905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_send_deactivate_cmd 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send deactivate command to NFCC, if needed. 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFC_STATUS_OK - deactivate cmd is sent 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NCI_STATUS_FAILED - no buffers 897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_SEMANTIC_ERROR - this function does not attempt 898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to send deactivate cmd 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFC_STATUS nfa_dm_send_deactivate_cmd (tNFC_DEACT_TYPE deactivate_type) 902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR; 904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_FLAGS w4_flags = nfa_dm_cb.disc_cb.disc_flags & (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!w4_flags) 907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivate CMD was not sent to NFCC */ 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFC_Deactivate (deactivate_type); 9125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 9135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!nfa_dm_cb.disc_cb.tle.in_use) 9145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 9155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_deact_ntf_timeout_cback; 9165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_start_timer (&nfa_dm_cb.disc_cb.tle, 0, NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF); 9175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 9195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 9215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (deactivate_type == NFC_DEACTIVATE_TYPE_SLEEP) 9225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 9235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen status = NFC_STATUS_SEMANTIC_ERROR; 9245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 9255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if (nfa_dm_cb.disc_cb.tle.in_use) 9265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 9275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen status = NFC_STATUS_OK; 9285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 9295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 9305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 9315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen status = nfa_dm_disc_force_to_idle (); 9325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_start_rf_discover 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Start RF discovery 943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_start_rf_discover (void) 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DISCOVER_PARAMS disc_params[NFA_DM_MAX_DISC_PARAMS]; 950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask = 0, poll_mask, listen_mask; 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_params, xx; 952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_start_rf_discover ()"); 954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Make sure that RF discovery was enabled, or some app has exclusive control */ 955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED)) 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.excl_disc_entry.in_use == FALSE) ) 957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* get listen mode routing table for technology */ 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_ee_get_tech_route (NFA_EE_PWR_STATE_ON, nfa_dm_cb.disc_cb.listen_RT); 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_rf_listen_mode_raw_config (&dm_disc_mask); 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_mask |= (nfa_dm_cb.disc_cb.excl_disc_entry.requested_disc_mask & NFA_DM_DISC_MASK_POLL); 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.selected_disc_mask = dm_disc_mask; 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Collect RF discovery request from sub-modules */ 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].in_use) 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_mask = (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_POLL); 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear poll mode technolgies and protocols which are already used by others */ 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_mask &= ~(dm_disc_mask & NFA_DM_DISC_MASK_POLL); 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask = 0; 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** add listen mode technolgies and protocols if host ID is matched to listen mode routing table 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFC-A */ 989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].host_id == nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A]) 990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project & ( NFA_DM_DISC_MASK_LA_T1T 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_T2T 994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_ISO_DEP 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_NFC_DEP 996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LAA_NFC_DEP ); 997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* host can listen ISO-DEP based on AID routing */ 1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP); 100285b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu 100385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu /* host can listen NFC-DEP based on protocol routing */ 1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LA_NFC_DEP); 1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LAA_NFC_DEP); 1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFC-B */ 1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* multiple hosts can listen ISO-DEP based on AID routing */ 1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project & NFA_DM_DISC_MASK_LB_ISO_DEP; 1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFC-F */ 10147c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* NFCC can support NFC-DEP and T3T listening based on NFCID routing regardless of NFC-F tech routing */ 10157c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 10167c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu & ( NFA_DM_DISC_MASK_LF_T3T 10177c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu |NFA_DM_DISC_MASK_LF_NFC_DEP 10187c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu |NFA_DM_DISC_MASK_LFA_NFC_DEP ); 1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* NFC-B Prime */ 1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].host_id == nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_BP]) 1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project & NFA_DM_DISC_MASK_L_B_PRIME; 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** clear listen mode technolgies and protocols which are already used by others 1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check if other modules are listening T1T or T2T */ 1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & (NFA_DM_DISC_MASK_LA_T1T|NFA_DM_DISC_MASK_LA_T2T)) 1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask &= ~( NFA_DM_DISC_MASK_LA_T1T 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_T2T 1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_ISO_DEP 1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_NFC_DEP ); 1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* T1T/T2T has priority on NFC-A */ 1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (dm_disc_mask & (NFA_DM_DISC_MASK_LA_ISO_DEP|NFA_DM_DISC_MASK_LA_NFC_DEP)) 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(listen_mask & (NFA_DM_DISC_MASK_LA_T1T|NFA_DM_DISC_MASK_LA_T2T))) 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_mask &= ~( NFA_DM_DISC_MASK_LA_ISO_DEP 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LA_NFC_DEP ); 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Don't remove ISO-DEP because multiple hosts can listen ISO-DEP based on AID routing */ 1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check if other modules are listening NFC-DEP */ 1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (dm_disc_mask & (NFA_DM_DISC_MASK_LA_NFC_DEP | NFA_DM_DISC_MASK_LAA_NFC_DEP)) 1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project listen_mask &= ~( NFA_DM_DISC_MASK_LA_NFC_DEP 1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project |NFA_DM_DISC_MASK_LAA_NFC_DEP ); 1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask = poll_mask | listen_mask; 1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_dm_cb.disc_cb.entry[%d].selected_disc_mask = 0x%x", 1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project xx, nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask); 1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project dm_disc_mask |= nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask; 1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Let P2P set GEN bytes for LLCP to NFCC */ 1067a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (dm_disc_mask & NFA_DM_DISC_MASK_NFC_DEP) 1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_p2p_set_config (dm_disc_mask); 1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("dm_disc_mask = 0x%x", dm_disc_mask); 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Get Discovery Technology parameters */ 1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num_params = nfa_dm_get_rf_discover_config (dm_disc_mask, disc_params, NFA_DM_MAX_DISC_PARAMS); 1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (num_params) 1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** NFCC will abort programming personality slots if not available. 1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** NFCC programs the personality slots in the following order of RF technologies: 1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** NFC-A, NFC-B, NFC-BP, NFC-I93 1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if this is not for exclusive control */ 1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* update listening protocols in each NFC technology */ 1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_rf_listen_mode_config (dm_disc_mask); 1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Set polling duty cycle */ 1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_set_total_duration (); 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.dm_disc_mask = dm_disc_mask; 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_DiscoveryStart (num_params, disc_params, nfa_dm_disc_discovery_cback); 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* set flag about waiting for response in IDLE state */ 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* register callback to get interface error NTF */ 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF discovery is started but there is no valid technology or protocol to discover */ 1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_started (NFA_STATUS_OK); 1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 11095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 11107c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* if Kovio presence check timer is running, timeout callback will reset the activation information */ 11117c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if ( (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_KOVIO) 11127c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu ||(!nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 11137c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11147c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* reset protocol and hanlde of activated sub-module */ 11157c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 11167c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 11177c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_notify_discovery 1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send RF discovery notification to upper layer 1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_notify_discovery (tNFA_DM_RF_DISC_DATA *p_data) 1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* let application select a device */ 1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.disc_result.status = NFA_STATUS_OK; 1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&(conn_evt.disc_result.discovery_ntf), 1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &(p_data->nfc_discover.result), 1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project sizeof (tNFC_RESULT_DEVT)); 1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DISC_RESULT_EVT, &conn_evt); 1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11427c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11437c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu/******************************************************************************* 11447c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 11457c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Function nfa_dm_disc_handle_kovio_activation 11467c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 11477c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Description Handle Kovio activation; whether it's new or repeated activation 11487c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 11497c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Returns TRUE if repeated activation. No need to notify activated event to upper layer 11507c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 11517c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu*******************************************************************************/ 11527c69b2723b60a59df4aaa58b13985b3483b291bfEvan ChuBOOLEAN nfa_dm_disc_handle_kovio_activation (tNFC_DISCOVER *p_data, tNFA_DISCOVER_CBACK *p_disc_cback) 11537c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu{ 11547c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu tNFC_DISCOVER disc_data; 11557c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11567c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 11577c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11587c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* if this is new Kovio bar code tag */ 11597c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if ( (nfa_dm_cb.activated_nfcid_len != p_data->activate.rf_tech_param.param.pk.uid_len) 11607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu ||(memcmp (p_data->activate.rf_tech_param.param.pk.uid, 11617c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.activated_nfcid, nfa_dm_cb.activated_nfcid_len))) 11627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11637c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("new Kovio tag is detected"); 11647c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11657c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify presence check failure for previous tag, if presence check is pending */ 11667c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_report_kovio_presence_check (NFA_STATUS_FAILED); 11677c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11687c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify deactivation of previous activation before notifying new activation */ 11697c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (p_disc_cback) 11707c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11717c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 11727c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu (*(p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 11737c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 11747c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11757c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* restart timer */ 11767c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 11777c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 11787c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 11797c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11807c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify presence check ok, if presence check is pending */ 11817c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_report_kovio_presence_check (NFC_STATUS_OK); 11827c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11837c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* restart timer and do not notify upper layer */ 11847c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 11857c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return (TRUE); 11867c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 11877c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 11887c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 11897c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 11907c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* this is the first activation, so start timer and notify upper layer */ 11917c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.kovio_tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_kovio_timeout_cback; 11927c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 11937c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 11947c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 11957c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return (FALSE); 11967c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu} 11977c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_notify_activation 1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send RF activation notification to sub-module 1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if success 1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic tNFA_STATUS nfa_dm_disc_notify_activation (tNFC_DISCOVER *p_data) 1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx, host_id_in_LRT; 1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 iso_dep_t3t__listen = NFA_DM_DISC_NUM_ENTRIES; 1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RF_TECH_N_MODE tech_n_mode = p_data->activate.rf_tech_param.mode; 1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_PROTOCOL protocol = p_data->activate.protocol; 1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK activated_disc_mask; 1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_dm_disc_notify_activation (): tech_n_mode:0x%X, proto:0x%X", 1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tech_n_mode, protocol); 1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_tech_mode = tech_n_mode; 1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol = protocol; 1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 12287c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (protocol == NFC_PROTOCOL_KOVIO) 12297c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 12307c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* check whether it's new or repeated activation */ 12317c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_disc_handle_kovio_activation (p_data, nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) 12327c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 12337c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* do not notify activation of Kovio to upper layer */ 12347c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return (NFA_STATUS_OK); 12357c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 12367c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 12377c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if this is NFCEE direct RF interface, notify activation to whoever listening UICC */ 1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF) 1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.entry[xx].host_id != NFA_DM_DISC_HOST_ID_DH)) 1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol = NFC_PROTOCOL_UNKNOWN; 1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle = xx; 1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("activated_rf_interface:0x%x, activated_handle: 0x%x", 1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface, 1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle); 1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* get bit mask of technolgies/mode and protocol */ 1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project activated_disc_mask = nfa_dm_disc_get_disc_mask (tech_n_mode, protocol); 1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* get host ID of technology from listen mode routing table */ 1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A) 1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A]; 1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B) 1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B]; 1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F) 1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_F]; 1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME) 1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_BP]; 1289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else /* DH only */ 1291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = NFA_DM_DISC_HOST_ID_DH; 1293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 129585b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu if (protocol == NFC_PROTOCOL_NFC_DEP) 129685b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu { 129785b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu /* Force NFC-DEP to the host */ 1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project host_id_in_LRT = NFA_DM_DISC_HOST_ID_DH; 1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if any matching NFC technology and protocol */ 1304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].in_use) 1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].host_id == host_id_in_LRT) 1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & activated_disc_mask) 1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* check ISO-DEP listening even if host in LRT is not matched */ 1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (protocol == NFC_PROTOCOL_ISO_DEP) 1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A) 1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP)) 1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project iso_dep_t3t__listen = xx; 1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B) 1322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP)) 1323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project iso_dep_t3t__listen = xx; 1325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* check T3T listening even if host in LRT is not matched */ 1328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (protocol == NFC_PROTOCOL_T3T) 1329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F) 1331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LF_T3T)) 1332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project iso_dep_t3t__listen = xx; 1334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (xx >= NFA_DM_DISC_NUM_ENTRIES) 1341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if any ISO-DEP or T3T listening even if host in LRT is not matched */ 1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project xx = iso_dep_t3t__listen; 1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (xx < NFA_DM_DISC_NUM_ENTRIES) 1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_tech_mode = tech_n_mode; 1349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol = protocol; 1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle = xx; 1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("activated_protocol:0x%x, activated_handle: 0x%x", 1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol, 1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle); 1357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 13587c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (protocol == NFC_PROTOCOL_KOVIO) 13597c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 13607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* check whether it's new or repeated activation */ 13617c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_disc_handle_kovio_activation (p_data, nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) 13627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 13637c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* do not notify activation of Kovio to upper layer */ 13647c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return (NFA_STATUS_OK); 13657c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 13667c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 13677c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 1376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 1377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_notify_deactivation 1384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send deactivation notification to sub-module 1386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_notify_deactivation (tNFA_DM_RF_DISC_SM_EVENT sm_event, 1391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DISCOVER *p_data) 1392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HANDLE xx; 13945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tNFA_CONN_EVT_DATA evt_data; 13955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tNFC_DISCOVER disc_data; 1396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_disc_notify_deactivation (): activated_handle=%d", 1398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_handle); 1399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 1401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1402c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu NFA_TRACE_DEBUG0 ("nfa_dm_disc_notify_deactivation (): for sleep wakeup"); 1403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 1404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (sm_event == NFA_DM_RF_DEACTIVATE_RSP) 1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 14095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_ALL_DISCOVERIES or NFA_DM_RFST_W4_HOST_SELECT 14105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ** Deactivation by upper layer or RF link loss in NFA_DM_RFST_LISTEN_SLEEP 14115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ** No sub-module is activated at this state. 1412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 1413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 14145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_SLEEP) 14155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 14175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 14195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 14215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 14225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 14235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 14245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 14255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* let each sub-module handle deactivation */ 14275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 14285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 14305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LISTEN) ) 14315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 14335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 14345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 14355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 14365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 14375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1438df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu else if ( (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)) 1439df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu ||(nfa_dm_cb.disc_cb.deact_notify_pending) ) 14405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14417c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu xx = nfa_dm_cb.disc_cb.activated_handle; 14427c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 14437c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify event to activated module if failed while reactivation */ 14447c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 14457c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14467c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 14477c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14487c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 14497c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 14507c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14517c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14527c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else if ( (xx < NFA_DM_DISC_NUM_ENTRIES) 14537c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu &&(nfa_dm_cb.disc_cb.entry[xx].in_use) 14547c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu &&(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) ) 14557c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14567c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 14577c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14587c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 14597c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify deactivation to application if there is no activated module */ 14617c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 14627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 14637c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 14687c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 14697c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14707c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 14717c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 14727c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* restart timer and do not notify upper layer */ 14737c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 14747c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return; 14757c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14767c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* Otherwise, upper layer initiated deactivation. */ 14777c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 14787c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify event to activated module */ 14805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 14825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 14835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 14855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 14865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 14885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 14905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen xx = nfa_dm_cb.disc_cb.activated_handle; 14915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 14925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use)) 14935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 14945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 14955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 14965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear activated information */ 1501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_tech_mode = 0; 1502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_disc_id = 0; 1503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface = 0; 1504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 15055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 1506df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu nfa_dm_cb.disc_cb.deact_notify_pending = FALSE; 1507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1511c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** Function nfa_dm_disc_sleep_wakeup 1512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1513c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** Description Put tag to sleep, then wake it up. Can be used Perform 1514c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** legacy presence check or to wake up tag that went to HALT 1515c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** state 1516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE if operation started 1518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1520c95c79ccb65d82a65b960919077d5c359cf28cedEvan ChutNFC_STATUS nfa_dm_disc_sleep_wakeup (void) 1521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status = NFC_STATUS_FAILED; 1523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 1525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Deactivate to sleep mode */ 1527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_dm_send_deactivate_cmd(NFC_DEACTIVATE_TYPE_SLEEP); 1528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (status == NFC_STATUS_OK) 1529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1530c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* deactivate to sleep is sent on behalf of sleep wakeup. 1531c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu * set the sleep wakeup information in control block */ 15327c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 15337c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = FALSE; 1534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (status); 1538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1542a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function nfa_dm_is_raw_frame_session 1543a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 1544a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description If NFA_SendRawFrame is called since RF activation, 1545a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** this function returns TRUE. 1546a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 1547a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns TRUE if NFA_SendRawFrame is called 1548a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 1549a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/ 1550a24be4f06674b2707b57904deaa0dff5a95823bdEvan ChuBOOLEAN nfa_dm_is_raw_frame_session (void) 1551a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 1552a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return ((nfa_dm_cb.flags & NFA_DM_FLAGS_RAW_FRAME) ? TRUE : FALSE); 1553a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 1554a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 1555a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/******************************************************************************* 1556a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 155767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function nfa_dm_is_p2p_paused 155867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 155967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description If NFA_PauseP2p is called sand still effective, 156067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** this function returns TRUE. 156167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 156267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns TRUE if NFA_SendRawFrame is called 156367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 156467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/ 156567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan ChuBOOLEAN nfa_dm_is_p2p_paused (void) 156667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu{ 156767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu return ((nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED) ? TRUE : FALSE); 156867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu} 156967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 157067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/******************************************************************************* 157167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 1572c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** Function nfa_dm_disc_end_sleep_wakeup 1573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1574c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** Description Sleep Wakeup is complete 1575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1576c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu** Returns None 1577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1579c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chustatic void nfa_dm_disc_end_sleep_wakeup (tNFC_STATUS status) 1580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 15817c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 15827c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu &&(nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 15837c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 15847c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* ignore it while doing Kovio presence check */ 15857c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return; 15867c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 15877c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 1589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 15905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING; 15915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1592c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* notify RW module that sleep wakeup is finished */ 1593c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu nfa_rw_handle_sleep_wakeup_rsp (status); 15945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 15957c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.deact_pending) 1596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 15977c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = FALSE; 1598df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu /* Perform pending deactivate command and on response notfiy deactivation */ 1599df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu nfa_dm_cb.disc_cb.deact_notify_pending = TRUE; 1600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, 16017c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type); 16027c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16037c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16047c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu} 16057c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16067c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu/******************************************************************************* 16077c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16087c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Function nfa_dm_disc_kovio_timeout_cback 16097c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16107c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Description Timeout for Kovio bar code tag presence check 16117c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16127c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Returns void 16137c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16147c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu*******************************************************************************/ 16157c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chustatic void nfa_dm_disc_kovio_timeout_cback (TIMER_LIST_ENT *p_tle) 16167c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu{ 16177c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu tNFC_DEACTIVATE_DEVT deact; 16187c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16197c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("nfa_dm_disc_kovio_timeout_cback()"); 16207c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16217c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify presence check failure, if presence check is pending */ 16227c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_report_kovio_presence_check (NFC_STATUS_FAILED); 16237c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16247c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 16257c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16267c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* restart timer in case that upper layer's presence check interval is too long */ 16277c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 16287c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16297c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 16307c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16317c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify upper layer deactivated event */ 16327c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu deact.status = NFC_STATUS_OK; 16337c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu deact.type = NFC_DEACTIVATE_TYPE_DISCOVERY; 16347c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu deact.is_ntf = TRUE; 16357c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 16367c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16377c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu} 16387c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16397c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu/******************************************************************************* 16407c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16417c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Function nfa_dm_disc_start_kovio_presence_check 16427c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16437c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Description Deactivate to discovery mode and wait for activation 16447c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16457c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Returns TRUE if operation started 16467c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16477c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu*******************************************************************************/ 16487c69b2723b60a59df4aaa58b13985b3483b291bfEvan ChutNFC_STATUS nfa_dm_disc_start_kovio_presence_check (void) 16497c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu{ 16507c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu tNFC_STATUS status = NFC_STATUS_FAILED; 16517c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16527c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("nfa_dm_disc_start_kovio_presence_check ()"); 16537c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16547c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 16557c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu &&(nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 16567c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16577c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 16587c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16597c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* restart timer */ 16607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 16617c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* Deactivate to discovery mode */ 16637c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu status = nfa_dm_send_deactivate_cmd (NFC_DEACTIVATE_TYPE_DISCOVERY); 16647c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16657c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (status == NFC_STATUS_OK) 16667c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16677c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* deactivate to sleep is sent on behalf of sleep wakeup. 16687c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu * set the sleep wakeup information in control block */ 16697c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 16707c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = FALSE; 16717c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16727c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16737c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 16747c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 16757c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* wait for next activation */ 16767c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 16777c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = FALSE; 16787c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu status = NFC_STATUS_OK; 16797c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16807c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 16817c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16827c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return (status); 16837c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu} 16847c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16857c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu/******************************************************************************* 16867c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16877c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Function nfa_dm_disc_report_kovio_presence_check 16887c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16897c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Description Report Kovio presence check status 16907c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16917c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** Returns None 16927c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu** 16937c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu*******************************************************************************/ 16947c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chustatic void nfa_dm_disc_report_kovio_presence_check (tNFC_STATUS status) 16957c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu{ 16967c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("nfa_dm_disc_report_kovio_presence_check ()"); 16977c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 16987c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 16997c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 17007c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING; 17017c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 17027c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* notify RW module that sleep wakeup is finished */ 17037c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_rw_handle_presence_check_rsp (status); 17047c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 17057c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.deact_pending) 17067c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 17077c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = FALSE; 17087c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, 17097c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type); 1710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_data_cback 1717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Monitoring interface error through data callback 1719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 1721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data) 1724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_disc_data_cback ()"); 1726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if selection failed */ 1728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (event == NFC_ERROR_CEVT) 1729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_CORE_INTF_ERROR_NTF, NULL); 1731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (event == NFC_DATA_CEVT) 1733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_data->data.p_data); 1735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_new_state 1741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_IDLE state 1743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 1745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_disc_new_state (tNFA_DM_RF_DISC_STATE new_state) 1748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA evt_data; 1750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_STATE old_state = nfa_dm_cb.disc_cb.disc_state; 1751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 1753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG5 ("nfa_dm_disc_new_state (): old_state: %s (%d), new_state: %s (%d) disc_flags: 0x%x", 1754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 1755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_state_2_str (new_state), new_state, nfa_dm_cb.disc_cb.disc_flags); 1756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 1757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_dm_disc_new_state(): old_state: %d, new_state: %d disc_flags: 0x%x", 1758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_state, new_state, nfa_dm_cb.disc_cb.disc_flags); 1759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 17607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 1761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_state = new_state; 17627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 17635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( (new_state == NFA_DM_RFST_IDLE) 17645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen &&(!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) ) /* not error recovering */ 1765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 1767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_STOPPING; 1769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if exclusive RF control is stopping */ 1771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 1772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (old_state > NFA_DM_RFST_DISCOVERY) 1774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify deactivation to application */ 1776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_rel_excl_rf_control_and_notify (); 1781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.status = NFA_STATUS_OK; 1785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STOPPED_EVT, &evt_data); 1786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_DISABLING) 1789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING; 1791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_check_disabled (); 1792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_idle 1799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_IDLE state 1801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 1803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_idle (tNFA_DM_RF_DISC_SM_EVENT event, 1806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 1807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 1809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 1811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_CMD: 1813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 1814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_RSP: 1817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 1818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->nfc_discover.status == NFC_STATUS_OK) 1820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 1822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if RF discovery was stopped while waiting for response */ 1824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & (NFA_DM_DISC_FLAGS_STOPPING|NFA_DM_DISC_FLAGS_DISABLING)) 1825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* stop discovery */ 1827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 1835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 1837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*) p_data); 1840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify event to each module which is waiting for start */ 1845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if registered module is waiting for starting discovery */ 1848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 1849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.dm_disc_mask & nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask) 1850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_dm_cb.disc_cb.entry[xx].disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) ) 1851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 1853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*) p_data); 1856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_started (p_data->nfc_discover.status); 1861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* in rare case that the discovery states of NFCC and DH mismatch and NFCC rejects Discover Cmd 1865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * deactivate idle and then start disvocery when got deactivate rsp */ 1866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 1872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 18735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 18745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if NFCC goes to idle successfully */ 18755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->nfc_discover.status == NFC_STATUS_OK) 1876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 18775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if DH forced to go idle while waiting for deactivation NTF */ 18785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 18795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 18805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 18815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 18825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */ 18835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 18845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* check if need to restart discovery after resync discovery state with NFCC */ 18855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 18865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 18875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Otherwise, deactivating when getting unexpected activation */ 1888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 18895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Otherwise, wait for deactivation NTF */ 18905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 18915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 18925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_DM_RF_DEACTIVATE_NTF: 18935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if NFCC sent this after NFCC had rejected deactivate CMD to idle while deactivating */ 18945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 18955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 18965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 18975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 18985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* stop discovery */ 18995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 19005c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 19015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 19035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 19055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */ 19065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 19075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* check if need to restart discovery after resync discovery state with NFCC */ 19085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 19095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Otherwise, deactivated when received unexpected activation in idle state */ 19125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 19135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 19145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 19155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_DM_RF_INTF_ACTIVATED_NTF: 19165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* unexpected activation, deactivate to idle */ 19175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 19185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_LP_LISTEN_CMD: 1922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_LP_LISTEN); 1923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_idle (): Unexpected discovery event"); 1927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_discovery 1934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_DISCOVERY state 1936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 1938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_discovery (tNFA_DM_RF_DISC_SM_EVENT event, 1941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 1942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 1944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 1946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivate CMD was not sent to NFCC */ 1947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 1948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (p_data->deactivate_type); 1951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 1954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 19555c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 19565c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if it's not race condition between deactivate CMD and activate NTF */ 19575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 19585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* do not notify deactivated to idle in RF discovery state 19605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ** because it is internal or stopping RF discovery 19615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen */ 19625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 19635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* there was no activation while waiting for deactivation RSP */ 19645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 19655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 19665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_NTF: 1969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_W4_ALL_DISCOVERIES); 1970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_notify_discovery (p_data); 1971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 19735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 1974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 19755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_DEBUG0 ("RF Activated while waiting for deactivation RSP"); 19765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* it's race condition. DH has to wait for deactivation NTF */ 19775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_NTF; 1978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 19815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF) 19825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 19845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80) 19865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Listen mode */ 19885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 19895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 19915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Poll mode */ 19935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 19945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 19955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 19965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 19975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 19985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 19995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20005c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* after receiving deactivate event, restart discovery */ 20015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 20025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 20035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 2004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 20055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 2006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 20075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_DM_RF_DEACTIVATE_NTF: 20085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if there was race condition between deactivate CMD and activate NTF */ 20095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) 2010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 20115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* race condition is resolved */ 20125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 2013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 20145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 20155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 20165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* do not notify deactivated to idle in RF discovery state 20175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ** because it is internal or stopping RF discovery 20185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen */ 20195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 20215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 20225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 2023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_LP_LISTEN_CMD: 2026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_CORE_INTF_ERROR_NTF: 2028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_discovery (): Unexpected discovery event"); 2031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_w4_all_discoveries 2038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_W4_ALL_DISCOVERIES state 2040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_w4_all_discoveries (tNFA_DM_RF_DISC_SM_EVENT event, 2045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivate CMD was not sent to NFCC */ 2051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 2054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* only IDLE mode is allowed */ 2055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 20605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* notify exiting from w4 all discoverie state */ 20615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 20625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 2063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 2065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_NTF: 20675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if deactivate CMD is already sent then ignore discover NTF */ 20685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 20705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */ 20715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE) 20725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 20735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT); 20745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 20755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_notify_discovery (p_data); 2076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 2079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* 2080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** This is only for ISO15693. 2081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** FW sends activation NTF when all responses are received from tags without host selecting. 2082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project */ 2083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 2084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 2086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 2088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* after receiving deactivate event, restart discovery */ 2090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_w4_all_discoveries (): Unexpected discovery event"); 2095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_w4_host_select 2102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_W4_HOST_SELECT state 2104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_w4_host_select (tNFA_DM_RF_DISC_SM_EVENT event, 2109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 2112c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu tNFA_DM_DISC_FLAGS old_sleep_wakeup_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING); 2113c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu BOOLEAN sleep_wakeup_event = FALSE; 2114c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu BOOLEAN sleep_wakeup_event_processed = FALSE; 21158adba7675549bb507514c4f602723aa7d8e43f67Sherry Smith tNFA_STATUS status; 2116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_SELECT_CMD: 2120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if not waiting to deactivate */ 2121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_DiscoverySelect (p_data->select.rf_disc_id, 2124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->select.protocol, 2125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->select.rf_interface); 2126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_conn_event_notify (NFA_SELECT_RESULT_EVT, NFA_STATUS_FAILED); 2130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_SELECT_RSP: 2134c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event = TRUE; 2135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify application status of selection */ 2136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->nfc_discover.status == NFC_STATUS_OK) 2137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2138c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event_processed = TRUE; 2139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_OK; 2140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* register callback to get interface error NTF */ 2141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 2142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 2145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2146c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (!old_sleep_wakeup_flag) 2147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_conn_event_notify (NFA_SELECT_RESULT_EVT, p_data->nfc_discover.status); 2149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 2152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 21538adba7675549bb507514c4f602723aa7d8e43f67Sherry Smith /* always call nfa_dm_disc_notify_activation to update protocol/interface information in NFA control blocks */ 21548adba7675549bb507514c4f602723aa7d8e43f67Sherry Smith status = nfa_dm_disc_notify_activation (&(p_data->nfc_discover)); 2155c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag) 2156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2157c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* Handle sleep wakeup success: notify RW module of sleep wakeup of tag; if deactivation is pending then deactivate */ 2158c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_OK); 2159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 21608adba7675549bb507514c4f602723aa7d8e43f67Sherry Smith else if (status == NFA_STATUS_FAILED) 2161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 2163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* after receiving deactivate event, restart discovery */ 2165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2169c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag) 2170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 21717c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = TRUE; 21727c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.pending_deact_type = p_data->deactivate_type; 2173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivate CMD was not sent to NFCC */ 2175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 2178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* only IDLE mode is allowed */ 2179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 2184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* notify exiting from host select state */ 2185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 21865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 21875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 21885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 2189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_CORE_INTF_ERROR_NTF: 2192c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event = TRUE; 2193c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (!old_sleep_wakeup_flag) 2194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* target activation failed, upper layer may deactivate or select again */ 2196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 2197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_SELECT_RESULT_EVT, &conn_evt); 2198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_w4_host_select (): Unexpected discovery event"); 2202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2205c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag && sleep_wakeup_event && !sleep_wakeup_event_processed) 2206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2207c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* performing sleep wakeup and exception conditions happened 2208c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu * clear sleep wakeup information and report failure */ 2209c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_FAILED); 2210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_poll_active 2216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_POLL_ACTIVE state 2218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_poll_active (tNFA_DM_RF_DISC_SM_EVENT event, 2223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status; 2226c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu tNFA_DM_DISC_FLAGS old_sleep_wakeup_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING); 2227c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu BOOLEAN sleep_wakeup_event = FALSE; 2228c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu BOOLEAN sleep_wakeup_event_processed = FALSE; 22295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tNFC_DEACTIVATE_DEVT deact; 2230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2234c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag) 2235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2236c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* sleep wakeup is already enabled when deactivate cmd is requested, 2237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * keep the information in control block to issue it later */ 22387c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.deact_pending = TRUE; 22397c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_cb.disc_cb.pending_deact_type = p_data->deactivate_type; 2240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_dm_send_deactivate_cmd(p_data->deactivate_type); 2244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 2249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* register callback to get interface error NTF */ 2250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 22515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 22535c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 22545c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* it's race condition. received deactivate NTF before receiving RSP */ 22555c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22565c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.status = NFC_STATUS_OK; 22575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.type = NFC_DEACTIVATE_TYPE_IDLE; 22585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.is_ntf = TRUE; 22595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 22605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* NFCC is in IDLE state */ 22625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 22635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 22645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 2265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_NTF: 2267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 22685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 22705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 22725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 22735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* it's race condition. received deactivate NTF before receiving RSP */ 22745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* notify deactivation after receiving deactivate RSP */ 22755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP"); 22765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 22775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 22785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 2279c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event = TRUE; 22805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 22815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 22825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 2283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 2284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 2285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT); 2287c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag) 2288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2289c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event_processed = TRUE; 2290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* process pending deactivate request */ 22917c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.deact_pending) 2292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2293c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* notify RW module that sleep wakeup is finished */ 22945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if deactivation is pending then deactivate */ 2295c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_OK); 2296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 22975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will not call this function */ 22985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, TRUE); 2299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2302c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* Successfully went to sleep mode for sleep wakeup */ 2303c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* Now wake up the tag to complete the operation */ 2304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_DiscoverySelect (nfa_dm_cb.disc_cb.activated_rf_disc_id, 2305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_protocol, 2306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.activated_rf_interface); 2307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 2312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 2315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 2317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 2319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 2320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* stop discovery */ 2322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_CORE_INTF_ERROR_NTF: 2328c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu sleep_wakeup_event = TRUE; 2329df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu if ( (!old_sleep_wakeup_flag) 2330df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu ||(!nfa_dm_cb.disc_cb.deact_pending) ) 2331df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu { 23321ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu nfa_dm_send_deactivate_cmd (NFA_DEACTIVATE_TYPE_DISCOVERY); 2333df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu } 2334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_poll_active (): Unexpected discovery event"); 2338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2341c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu if (old_sleep_wakeup_flag && sleep_wakeup_event && !sleep_wakeup_event_processed) 2342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2343c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu /* performing sleep wakeup and exception conditions happened 2344c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu * clear sleep wakeup information and report failure */ 2345c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_FAILED); 2346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_listen_active 2352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_LISTEN_ACTIVE state 2354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_listen_active (tNFA_DM_RF_DISC_SM_EVENT event, 2359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 23615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tNFC_DEACTIVATE_DEVT deact; 23625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 2363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_send_deactivate_cmd(p_data->deactivate_type); 2367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 23705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 2371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 23725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* it's race condition. received deactivate NTF before receiving RSP */ 23735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 23745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.status = NFC_STATUS_OK; 23755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.type = NFC_DEACTIVATE_TYPE_IDLE; 23765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen deact.is_ntf = TRUE; 23775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 23785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 23795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* NFCC is in IDLE state */ 2380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 2382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 23835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 23845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_DM_RF_DEACTIVATE_NTF: 23855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 23865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 23875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 23885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 23895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 2390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 23915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* it's race condition. received deactivate NTF before receiving RSP */ 23925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* notify deactivation after receiving deactivate RSP */ 23935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP"); 2394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 23955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 2396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 23975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 23985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 23995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 2400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 24015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 24025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 24035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 24045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 24055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 24065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 24075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP); 24085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 24095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 24105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 24115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* Discovery */ 24125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 24135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 24145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 24155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* stop discovery */ 24165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 24175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 2418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_CORE_INTF_ERROR_NTF: 2423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_listen_active (): Unexpected discovery event"); 2426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_listen_sleep 2433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_LISTEN_SLEEP state 2435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_listen_sleep (tNFA_DM_RF_DISC_SM_EVENT event, 2440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_send_deactivate_cmd (p_data->deactivate_type); 24465c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 24475c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* if deactivate type is not discovery then NFCC will not sent deactivation NTF */ 24485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (p_data->deactivate_type != NFA_DEACTIVATE_TYPE_DISCOVERY) 24495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 24505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 24515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 24525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 2453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 2456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* if deactivate type in CMD was IDLE */ 2457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 2458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 24605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 24615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 24625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_start_rf_discover (); 2463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_NTF: 2466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */ 2467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 24685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 24695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 24705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen /* there is no active protocol in this state, so broadcast to all by using NFA_DM_RF_DEACTIVATE_RSP */ 24715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 24725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 2473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 2474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 2477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (p_data->nfc_discover.deactivate.type == NFA_DEACTIVATE_TYPE_DISCOVERY) 2479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 2481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("Unexpected deactivation type"); 2485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_start_rf_discover (); 2487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 2490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 2491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 2492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 2494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* after receiving deactivate event, restart discovery */ 2496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_listen_sleep (): Unexpected discovery event"); 2501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_lp_listen 2508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_LP_LISTEN state 2510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_lp_listen (tNFA_DM_RF_DISC_SM_EVENT event, 2515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 2520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_LP_ACTIVE); 2521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_activation (&(p_data->nfc_discover)); 25227c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 25237c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 25247c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("Not matched, unexpected activation"); 25257c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 2526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_lp_listen (): Unexpected discovery event"); 2530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_lp_active 2537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery events in NFA_DM_RFST_LP_ACTIVE state 2539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_dm_disc_sm_lp_active (tNFA_DM_RF_DISC_SM_EVENT event, 2544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_RF_DISC_DATA *p_data) 2545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_NTF: 2549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_new_state (NFA_DM_RFST_LP_LISTEN); 2550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 2551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 2553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_lp_active (): Unexpected discovery event"); 2554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_sm_execute 2561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing discovery related events 2563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_disc_sm_execute (tNFA_DM_RF_DISC_SM_EVENT event, tNFA_DM_RF_DISC_DATA *p_data) 2568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 2570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG5 ("nfa_dm_disc_sm_execute (): state: %s (%d), event: %s(%d) disc_flags: 0x%x", 2571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 2572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_event_2_str (event), event, nfa_dm_cb.disc_cb.disc_flags); 2573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 2574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_dm_disc_sm_execute(): state: %d, event:%d disc_flags: 0x%x", 2575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_state, event, nfa_dm_cb.disc_cb.disc_flags); 2576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 2577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (nfa_dm_cb.disc_cb.disc_state) 2579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - Idle */ 2581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_IDLE: 2582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_idle (event, p_data); 2583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - Discovery */ 2586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_DISCOVERY: 2587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_discovery (event, p_data); 2588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /*RF Discovery State - Wait for all discoveries */ 2591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_W4_ALL_DISCOVERIES: 2592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_w4_all_discoveries (event, p_data); 2593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - Wait for host selection */ 2596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_W4_HOST_SELECT: 2597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_w4_host_select (event, p_data); 2598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - Poll mode activated */ 2601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_POLL_ACTIVE: 2602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_poll_active (event, p_data); 2603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - listen mode activated */ 2606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LISTEN_ACTIVE: 2607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_listen_active (event, p_data); 2608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* RF Discovery State - listen mode sleep */ 2611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LISTEN_SLEEP: 2612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_listen_sleep (event, p_data); 2613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Listening in Low Power mode */ 2616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LP_LISTEN: 2617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_lp_listen (event, p_data); 2618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Activated in Low Power mode */ 2621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LP_ACTIVE: 2622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_lp_active (event, p_data); 2623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 2624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 2626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_dm_disc_sm_execute (): new state: %s (%d), disc_flags: 0x%x", 2627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 2628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags); 2629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 2630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_dm_disc_sm_execute(): new state: %d, disc_flags: 0x%x", 2631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_state, nfa_dm_cb.disc_cb.disc_flags); 2632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 2633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_add_rf_discover 2638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Add discovery configuration and callback function 2640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns valid handle if success 2642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HANDLE nfa_dm_add_rf_discover (tNFA_DM_DISC_TECH_PROTO_MASK disc_mask, 2645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_HOST_ID host_id, 2646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DISCOVER_CBACK *p_disc_cback) 2647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 2649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_add_rf_discover () disc_mask=0x%x", disc_mask); 2651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 2653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!nfa_dm_cb.disc_cb.entry[xx].in_use) 2655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].in_use = TRUE; 2657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask = disc_mask; 2658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].host_id = host_id; 2659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].p_disc_cback = p_disc_cback; 2660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[xx].disc_flags = NFA_DM_DISC_FLAGS_NOTIFY; 2661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return xx; 2662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_HANDLE_INVALID; 2666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_start_excl_discovery 2671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Start exclusive RF discovery 2673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_start_excl_discovery (tNFA_TECHNOLOGY_MASK poll_tech_mask, 2678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_LISTEN_CFG *p_listen_cfg, 2679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DISCOVER_CBACK *p_disc_cback) 2680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0; 2682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_start_excl_discovery ()"); 2684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A) 2686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_T1T; 2688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_T2T; 2689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_ISO_DEP; 2690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PA_NFC_DEP; 2691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_LEGACY; 2692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE) 2694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PAA_NFC_DEP; 2696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B) 2698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PB_ISO_DEP; 2700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F) 2702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PF_T3T; 2704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PF_NFC_DEP; 2705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE) 2707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_PFA_NFC_DEP; 2709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_ISO15693) 2711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_ISO15693; 2713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B_PRIME) 2715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_B_PRIME; 2717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (poll_tech_mask & NFA_TECHNOLOGY_MASK_KOVIO) 2719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project poll_disc_mask |= NFA_DM_DISC_MASK_P_KOVIO; 2721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.in_use = TRUE; 2724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.requested_disc_mask = poll_disc_mask; 2725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.host_id = NFA_DM_DISC_HOST_ID_DH; 2726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback = p_disc_cback; 2727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags = NFA_DM_DISC_FLAGS_NOTIFY; 2728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&nfa_dm_cb.disc_cb.excl_listen_config, p_listen_cfg, sizeof (tNFA_LISTEN_CFG)); 2730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_CMD, NULL); 2732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_stop_excl_discovery 2737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Stop exclusive RF discovery 2739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_stop_excl_discovery (void) 2744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_dm_stop_excl_discovery ()"); 2746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.in_use = FALSE; 2748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback = NULL; 2749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_delete_rf_discover 2754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Remove discovery configuration and callback function 2756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_delete_rf_discover (tNFA_HANDLE handle) 2761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_delete_rf_discover () handle=0x%x", handle); 2763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (handle < NFA_DM_DISC_NUM_ENTRIES) 2765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.entry[handle].in_use = FALSE; 2767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("Invalid discovery handle"); 2771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_rf_discover_select 2777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Select target, protocol and RF interface 2779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 2781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_dm_rf_discover_select (UINT8 rf_disc_id, 2784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_NFC_PROTOCOL protocol, 2785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_INTF_TYPE rf_interface) 2786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_DM_DISC_SELECT_PARAMS select_params; 2788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_CONN_EVT_DATA conn_evt; 2789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_dm_disc_select () rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X", 2791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rf_disc_id, protocol, rf_interface); 2792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) 2794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* state is OK: notify the status when the response is received from NFCC */ 2796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project select_params.rf_disc_id = rf_disc_id; 2797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project select_params.protocol = protocol; 2798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project select_params.rf_interface = rf_interface; 2799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_NOTIFY; 2801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_SELECT_CMD, (tNFA_DM_RF_DISC_DATA *) &select_params); 2802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Wrong state: notify failed status right away */ 2806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_evt.status = NFA_STATUS_FAILED; 2807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_conn_cback_event_notify (NFA_SELECT_RESULT_EVT, &conn_evt); 2808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_rf_deactivate 2814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deactivate NFC link 2816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if success 2818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_dm_rf_deactivate (tNFA_DEACTIVATE_TYPE deactivate_type) 2821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_dm_rf_deactivate () deactivate_type:0x%X", deactivate_type); 2823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (deactivate_type == NFA_DEACTIVATE_TYPE_SLEEP) 2825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_NFC_DEP) 2827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deactivate_type = NFC_DEACTIVATE_TYPE_SLEEP_AF; 2828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deactivate_type = NFC_DEACTIVATE_TYPE_SLEEP; 2830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) 2833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_STATUS_FAILED; 2835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 28367c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) 28377c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28387c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (deactivate_type == NFA_DEACTIVATE_TYPE_DISCOVERY) 28397c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28407c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 28417c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28427c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle); 28437c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle); 28447c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return NFA_STATUS_OK; 28457c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28467c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 28477c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28487c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu /* it could be race condition. */ 28497c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu NFA_TRACE_DEBUG0 ("nfa_dm_rf_deactivate (): already in discovery state"); 28507c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return NFA_STATUS_FAILED; 28517c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28527c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28537c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else if (deactivate_type == NFA_DEACTIVATE_TYPE_IDLE) 28547c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28557c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 28567c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28577c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle); 28587c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle); 28597c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28607c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type); 28617c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return NFA_STATUS_OK; 28627c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28637c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu else 28647c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu { 28657c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu return NFA_STATUS_FAILED; 28667c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 28677c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu } 2868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 2869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type); 2871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_STATUS_OK; 2872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 2876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_state_2_str 2879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfc discovery state to string 2881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_dm_disc_state_2_str (UINT8 state) 2884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (state) 2886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_IDLE: 2888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "IDLE"; 2889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_DISCOVERY: 2891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISCOVERY"; 2892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_W4_ALL_DISCOVERIES: 2894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "W4_ALL_DISCOVERIES"; 2895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_W4_HOST_SELECT: 2897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "W4_HOST_SELECT"; 2898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_POLL_ACTIVE: 2900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "POLL_ACTIVE"; 2901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LISTEN_ACTIVE: 2903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "LISTEN_ACTIVE"; 2904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LISTEN_SLEEP: 2906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "LISTEN_SLEEP"; 2907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LP_LISTEN: 2909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "LP_LISTEN"; 2910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RFST_LP_ACTIVE: 2912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "LP_ACTIVE"; 2913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "Unknown"; 2915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 2918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_dm_disc_event_2_str 2920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description convert nfc discovery RSP/NTF to string 2922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 2923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_dm_disc_event_2_str (UINT8 event) 2925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 2926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 2927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_CMD: 2929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISCOVER_CMD"; 2930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_RSP: 2932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISCOVER_RSP"; 2933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_NTF: 2935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DISCOVER_NTF"; 2936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_SELECT_CMD: 2938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "SELECT_CMD"; 2939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DISCOVER_SELECT_RSP: 2941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "SELECT_RSP"; 2942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_INTF_ACTIVATED_NTF: 2944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "ACTIVATED_NTF"; 2945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_CMD: 2947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DEACTIVATE_CMD"; 2948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_RSP: 2950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DEACTIVATE_RSP"; 2951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_RF_DEACTIVATE_NTF: 2953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "DEACTIVATE_NTF"; 2954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_LP_LISTEN_CMD: 2956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "NFA_DM_LP_LISTEN_CMD"; 2957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_DM_CORE_INTF_ERROR_NTF: 2959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "INTF_ERROR_NTF"; 2960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return "Unknown"; 2963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 2964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_TRACE_VERBOSE */ 2965