nfa_dm_discover.c revision 8adba7675549bb507514c4f602723aa7d8e43f67
1f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/****************************************************************************** 2f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * 3f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * Copyright (C) 2010-2014 Broadcom Corporation 4f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * 5f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * Licensed under the Apache License, Version 2.0 (the "License"); 6f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * you may not use this file except in compliance with the License. 7f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * You may obtain a copy of the License at: 8f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * 9f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * http://www.apache.org/licenses/LICENSE-2.0 10f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * 11f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * Unless required by applicable law or agreed to in writing, software 12f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * distributed under the License is distributed on an "AS IS" BASIS, 13f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * See the License for the specific language governing permissions and 1504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * limitations under the License. 1604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * 1704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ******************************************************************************/ 1804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 19f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/****************************************************************************** 2104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * 2204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * This file contains the action functions for device manager discovery 2304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * function. 2404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * 2504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ******************************************************************************/ 2604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include <string.h> 27f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#include "nfa_sys.h" 28f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#include "nfa_api.h" 2904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include "nfa_dm_int.h" 3004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include "nfa_p2p_int.h" 3104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include "nfa_sys_int.h" 32f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#if (NFC_NFCEE_INCLUDED == TRUE) 3304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include "nfa_ee_api.h" 34f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#include "nfa_ee_int.h" 3504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#endif 3604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#include "nfa_rw_int.h" 3704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 3804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/* 3904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** static functions 4004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*/ 4104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 4204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic UINT8 nfa_dm_get_rf_discover_config (tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask, 43f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DISCOVER_PARAMS disc_params[], 4404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8 max_params); 45f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic tNFA_STATUS nfa_dm_set_rf_listen_mode_config (tNFA_DM_DISC_TECH_PROTO_MASK tech_proto_mask); 4604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_set_rf_listen_mode_raw_config (tNFA_DM_DISC_TECH_PROTO_MASK *p_disc_mask); 47f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic tNFA_DM_DISC_TECH_PROTO_MASK nfa_dm_disc_get_disc_mask (tNFC_RF_TECH_N_MODE tech_n_mode, 4804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_PROTOCOL protocol); 49f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_notify_discovery (tNFA_DM_RF_DISC_DATA *p_data); 5004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic tNFA_STATUS nfa_dm_disc_notify_activation (tNFC_DISCOVER *p_data); 5104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_notify_deactivation (tNFA_DM_RF_DISC_SM_EVENT sm_event, tNFC_DISCOVER *p_data); 52f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data); 5304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_kovio_timeout_cback (TIMER_LIST_ENT *p_tle); 5404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_report_kovio_presence_check (tNFC_STATUS status); 55f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 5604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#if (BT_TRACE_VERBOSE == TRUE) 5704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic char *nfa_dm_disc_state_2_str (UINT8 state); 58f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic char *nfa_dm_disc_event_2_str (UINT8 event); 5904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#endif 60f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 6104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 6204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 6304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 6404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_get_rf_discover_config 65f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 6604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Build RF discovery configurations from tNFA_DM_DISC_TECH_PROTO_MASK 6704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 6804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns number of RF discovery configurations 69f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 7004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 7104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic UINT8 nfa_dm_get_rf_discover_config (tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask, 72f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DISCOVER_PARAMS disc_params[], 7304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8 max_params) 7404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 75f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 num_params = 0; 7604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 7704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED) 7804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 7904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config () listen disabled, rm listen from 0x%x", dm_disc_mask); 80f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian dm_disc_mask &= NFA_DM_DISC_MASK_POLL; 8104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 8204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_is_p2p_paused ()) 8304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 8404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_mask &= ~NFA_DM_DISC_MASK_NFC_DEP; 85f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 8604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 8704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling A */ 88f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (dm_disc_mask & ( NFA_DM_DISC_MASK_PA_T1T 8904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_PA_T2T 9004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_PA_ISO_DEP 91f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian |NFA_DM_DISC_MASK_PA_NFC_DEP 9204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_P_LEGACY) ) 93f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 94f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_A; 9504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pa; 9604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 9704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 9804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 99f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 10004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 101f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 10204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling B */ 10304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_PB_ISO_DEP) 10404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 105f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_B; 10604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pb; 107f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 10804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 10904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 110f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 11104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 112f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 11304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling F */ 114f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (dm_disc_mask & ( NFA_DM_DISC_MASK_PF_T3T 11504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_PF_NFC_DEP) ) 11604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 117f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_F; 11804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pf; 119f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 12004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 12104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 122f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 12304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 124f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 12504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling A Active mode */ 12604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_PAA_NFC_DEP) 12704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 12804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_A_ACTIVE; 129f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->paa; 13004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 131f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 132f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (num_params >= max_params) 13304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 13404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 13504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 13604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling F Active mode */ 13704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_PFA_NFC_DEP) 13804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 139f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_F_ACTIVE; 14004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pfa; 14104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 142f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 14304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 144f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 14504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 14604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 147f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check listening A */ 14804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & ( NFA_DM_DISC_MASK_LA_T1T 149f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_T2T 15004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_ISO_DEP 15104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_NFC_DEP) ) 152f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 15304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_A; 15404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 155f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 15604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 15704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 158f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 15904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 160f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 161f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check listening B */ 16204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 16304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 16404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_B; 16504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 166f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 16704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 16804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 169f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 17004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 171f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 17204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check listening F */ 173f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (dm_disc_mask & ( NFA_DM_DISC_MASK_LF_T3T 17404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LF_NFC_DEP) ) 175f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 17604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_F; 17704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 178f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 17904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 18004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 18104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 18204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 18304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 184f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check listening A Active mode */ 18504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_LAA_NFC_DEP) 186f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 18704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE; 18804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 189f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 19004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 19104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 192f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 19304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 194f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 195f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check listening F Active mode */ 19604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_LFA_NFC_DEP) 19704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 19804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE; 199f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 20004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 20104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 20204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 20304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 204f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 20504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 206f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check polling ISO 15693 */ 20704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_P_ISO15693) 20804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 209f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_ISO15693; 21004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pi93; 21104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 212f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 21304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 214f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 215f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 21604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 21704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check polling B' */ 218f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_P_B_PRIME) 21904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 22004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_B_PRIME; 221f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pbp; 22204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian num_params++; 22304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 22404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 22504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 22604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 22704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 228f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check polling KOVIO */ 22904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_P_KOVIO) 23004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 231f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_POLL_KOVIO; 23204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = p_nfa_dm_rf_disc_freq_cfg->pk; 233f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 23404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 23504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params >= max_params) 236f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 23704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 238f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 23904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check listening ISO 15693 */ 24004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_L_ISO15693) 241f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 24204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_ISO15693; 24304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 244f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 24504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 246f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (num_params >= max_params) 24704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 24804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 249f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 25004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Check listening B' */ 25104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_L_B_PRIME) 252f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 25304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].type = NFC_DISCOVERY_TYPE_LISTEN_B_PRIME; 25404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_params[num_params].frequency = 1; 255f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params++; 25604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 257f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (num_params >= max_params) 258f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return num_params; 25904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 26004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 26104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return num_params; 26204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 263f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 26404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 26504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 266f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_set_rf_listen_mode_config 26704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 268f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Update listening protocol to NFCC 26904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 270f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns NFA_STATUS_OK if success 27104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 27204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 273f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic tNFA_STATUS nfa_dm_set_rf_listen_mode_config (tNFA_DM_DISC_TECH_PROTO_MASK tech_proto_mask) 27404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 275f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 params[40], *p; 27604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8 platform = 0; 277f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 sens_info = 0; 27804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 27904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_set_rf_listen_mode_config () tech_proto_mask = 0x%08X", 28004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tech_proto_mask); 281f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 28204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 28304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** T1T listen LA_PROT 0x80, LA_SENS_RES byte1:0x00 byte2:0x0C 284f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** T2T listen LA_PROT 0x00 28504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** T3T listen No bit for T3T in LF_PROT (CE T3T set listen parameters, system code, NFCID2, etc.) 286f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** ISO-DEP listen LA_PROT 0x01, LB_PROT 0x01 28704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** NFC-DEP listen LA_PROT 0x02, LF_PROT 0x02 288f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 289f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 29004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (tech_proto_mask & NFA_DM_DISC_MASK_LA_T1T) 29104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 29204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian platform = NCI_PARAM_PLATFORM_T1T; 29304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 29404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else if (tech_proto_mask & NFA_DM_DISC_MASK_LA_T2T) 295f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 29604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* platform = 0 and sens_info = 0 */ 297f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 29804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 299f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 30004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (tech_proto_mask & NFA_DM_DISC_MASK_LA_ISO_DEP) 30104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 302f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian sens_info |= NCI_PARAM_SEL_INFO_ISODEP; 30304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 304f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 30504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (tech_proto_mask & NFA_DM_DISC_MASK_LA_NFC_DEP) 30604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 307f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian sens_info |= NCI_PARAM_SEL_INFO_NFCDEP; 30804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 309f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 31004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 31104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p = params; 312f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 31304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 314f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** for Listen A 31504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** 316f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** Set ATQA 0x0C00 for T1T listen 31704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** If the ATQA values are 0x0000, then the FW will use 0x0400 31804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** which works for ISODEP, T2T and NFCDEP. 319f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 32004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A] == NFA_DM_DISC_HOST_ID_DH) 321f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 322f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 32304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD); 32404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0x04); 32504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 32604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG); 327f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, platform); 32804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 329f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO); 33004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, sens_info); 33104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 33204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else /* Let NFCC use UICC configuration by configuring with length = 0 */ 33304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 33404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 335f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 33604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 337f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 33804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 33904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 34004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1); 34104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 34204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_HIST_BY); 343f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 34404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 34504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 346f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* for Listen B */ 34704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B] == NFA_DM_DISC_HOST_ID_DH) 348f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 34904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 35004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_SENSB_INFO); 35104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (tech_proto_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 35204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 35304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_LISTEN_PROTOCOL_ISO_DEP); 35404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 355f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 35604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 357f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0x00); 35804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 35904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 360f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else /* Let NFCC use UICC configuration by configuring with length = 0 */ 36104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 362f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 36304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 364f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_NFCID0); 365f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 36604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_APPDATA); 36704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 36804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_ADC_FO); 36904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 370f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_H_INFO); 37104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0); 372f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 37304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 37404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* for Listen F */ 37504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* NFCC can support NFC-DEP and T3T listening based on NFCID routing regardless of NFC-F tech routing */ 37604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_PROTOCOL); 37704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_PROTOCOL); 378f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ((tech_proto_mask & NFA_DM_DISC_MASK_LF_NFC_DEP) && 37904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian !nfa_dm_is_p2p_paused() ) 38004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 38104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_LISTEN_PROTOCOL_NFC_DEP); 38204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 38304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 38404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 385f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, 0x00); 38604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 38704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 388f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p > params) 38904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 390f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 39104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 39204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 39304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_OK; 39404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 39504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 396f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 39704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 39804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_set_total_duration 399f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 40004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Update total duration to NFCC 401f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 40204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 40304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 404f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 40504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_set_total_duration (void) 40604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 407f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 params[10], *p; 40804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 409f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_set_total_duration ()"); 41004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 41104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p = params; 412f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 413f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* for total duration */ 41404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_TOTAL_DURATION); 415f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_TOTAL_DURATION); 41604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT16_TO_STREAM (p, nfa_dm_cb.disc_cb.disc_duration); 417f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 41804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p > params) 419f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 42004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 42104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 42204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 42304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 42404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 425f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 42604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_set_rf_listen_mode_raw_config 42704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 42804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Set raw listen parameters 42904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 430f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 43104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 43204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 433f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_set_rf_listen_mode_raw_config (tNFA_DM_DISC_TECH_PROTO_MASK *p_disc_mask) 434f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 43504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = 0; 43604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_LISTEN_CFG *p_cfg = &nfa_dm_cb.disc_cb.excl_listen_config; 437f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 params[250], *p, xx; 43804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 439f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_set_rf_listen_mode_raw_config ()"); 44004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 441f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* 44204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** Discovery Configuration Parameters for Listen A 44304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 444f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A] == NFA_DM_DISC_HOST_ID_DH) 44504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(p_cfg->la_enable) ) 44604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 447f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian p = params; 44804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 44904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); 450f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD); 45104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->la_bit_frame_sdd); 45204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 453f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); 45404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG); 45504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->la_platform_config); 456f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 45704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); 45804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO); 459f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->la_sel_info); 46004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 46104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_cfg->la_platform_config == NCI_PARAM_PLATFORM_T1T) 462f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 46304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LA_T1T; 46404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 46504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 466f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 46704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* If T4T or NFCDEP */ 46804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_cfg->la_sel_info & NCI_PARAM_SEL_INFO_ISODEP) 469f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 47004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LA_ISO_DEP; 47104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 472f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 47304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_cfg->la_sel_info & NCI_PARAM_SEL_INFO_NFCDEP) 47404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 475f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LA_NFC_DEP; 47604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 47704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 478f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* If neither, T4T nor NFCDEP, then its T2T */ 47904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (disc_mask == 0) 480f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 48104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LA_T2T; 482f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 48304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 48404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 485f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1); 48604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->la_nfcid1_len); 48704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->la_nfcid1, p_cfg->la_nfcid1_len); 48804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 489f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 490f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 49104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 49204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 493f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** Discovery Configuration Parameters for Listen B 49404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 495f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B] == NFA_DM_DISC_HOST_ID_DH) 49604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(p_cfg->lb_enable) ) 497f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 49804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p = params; 49904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 500f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO); 50104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_SENSB_INFO); 50204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lb_sensb_info); 503f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 50404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_NFCID0); 50504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lb_nfcid0_len); 506f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->lb_nfcid0, p_cfg->lb_nfcid0_len); 50704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 50804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_APPDATA); 509f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_APPDATA); 51004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->lb_app_data, NCI_PARAM_LEN_LB_APPDATA); 51104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 512f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_SFGI); 51304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 1); 51404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lb_adc_fo); 515f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 51604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_ADC_FO); 517f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_ADC_FO); 51804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lb_adc_fo); 519f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 52004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 52104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 522f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_cfg->lb_sensb_info & NCI_LISTEN_PROTOCOL_ISO_DEP) 52304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 524f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LB_ISO_DEP; 52504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 526f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 52704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 52804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 529f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** Discovery Configuration Parameters for Listen F 53004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 53104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_F] == NFA_DM_DISC_HOST_ID_DH) 532f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(p_cfg->lf_enable) ) 53304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 534f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian p = params; 53504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 536f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_CON_BITR_F); 53704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 1); 53804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lf_con_bitr_f); 539f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 54004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_PROTOCOL); 541f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_PROTOCOL); 54204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lf_protocol_type); 54304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 544f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_FLAGS2); 54504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_T3T_FLAGS2); 54604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT16_TO_STREAM(p, p_cfg->lf_t3t_flags); 547f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 54804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if the bit at position X is set to 0, SC/NFCID2 with index X shall be ignored */ 54904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian for (xx = 0; xx < NFA_LF_MAX_SC_NFCID2; xx++) 550f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 55104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ((p_cfg->lf_t3t_flags & (0x0001 << xx)) != 0x0000) 55204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 55304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_ID1 + xx); 55404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN); 555f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->lf_t3t_identifier[xx], NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN); 55604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 55704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 55804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 55904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LF_T3T_PMM); 560f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_LF_T3T_PMM); 56104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->lf_t3t_pmm, NCI_PARAM_LEN_LF_T3T_PMM); 56204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 56304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 56404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 565f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_cfg->lf_t3t_flags != NCI_LF_T3T_FLAGS2_ALL_DISABLED) 56604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 56704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LF_T3T; 56804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 56904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_cfg->lf_protocol_type & NCI_LISTEN_PROTOCOL_NFC_DEP) 57004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 571f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask |= NFA_DM_DISC_MASK_LF_NFC_DEP; 57204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 573f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 57404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 57504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 57604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** Discovery Configuration Parameters for Listen ISO-DEP 57704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 578f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ((disc_mask & (NFA_DM_DISC_MASK_LA_ISO_DEP|NFA_DM_DISC_MASK_LB_ISO_DEP)) 57904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(p_cfg->li_enable)) 58004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 58104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p = params; 58204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 583f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_FWI); 58404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_FWI); 58504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->li_fwi); 586f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 587f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP) 58804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 58904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LA_HIST_BY); 59004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->la_hist_bytes_len); 59104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->la_hist_bytes, p_cfg->la_hist_bytes_len); 59204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 593f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 594f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP) 59504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 59604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_LB_H_INFO); 59704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->lb_h_info_resp_len); 59804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->lb_h_info_resp, p_cfg->lb_h_info_resp_len); 59904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 60004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 60104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 60204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 60304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 60404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 60504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** Discovery Configuration Parameters for Listen NFC-DEP 60604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 60704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (disc_mask & (NFA_DM_DISC_MASK_LA_NFC_DEP|NFA_DM_DISC_MASK_LF_NFC_DEP)) 60804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(p_cfg->ln_enable)) 60904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 61004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p = params; 61104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 61204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_WT); 61304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NCI_PARAM_LEN_WT); 61404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->ln_wt); 61504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 61604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_ATR_RES_GEN_BYTES); 61704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->ln_atr_res_gen_bytes_len); 61804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ARRAY_TO_STREAM (p, p_cfg->ln_atr_res_gen_bytes, p_cfg->ln_atr_res_gen_bytes_len); 61904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 62004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, NFC_PMID_ATR_RSP_CONFIG); 62104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, 1); 62204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8_TO_STREAM (p, p_cfg->ln_atr_res_config); 62304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 62404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_check_set_config ((UINT8) (p - params), params, FALSE); 62504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 62604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 62704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian *p_disc_mask = disc_mask; 62804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 629f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_set_rf_listen_mode_raw_config () disc_mask = 0x%x", disc_mask); 63004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 63104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 63204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 63304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 63404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_get_disc_mask 635f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 636f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Convert RF technology, mode and protocol to bit mask 63704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 63804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns tNFA_DM_DISC_TECH_PROTO_MASK 63904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 64004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 641f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic tNFA_DM_DISC_TECH_PROTO_MASK nfa_dm_disc_get_disc_mask (tNFC_RF_TECH_N_MODE tech_n_mode, 64204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_PROTOCOL protocol) 643f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 64404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Set initial disc_mask to legacy poll or listen */ 645f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = ((tech_n_mode & 0x80) ? NFA_DM_DISC_MASK_L_LEGACY : NFA_DM_DISC_MASK_P_LEGACY); 64604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 647f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (tech_n_mode) 64804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 64904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_A: 650f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (protocol) 65104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 65204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_T1T: 653f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PA_T1T; 65404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 65504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_T2T: 656f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PA_T2T; 65704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 65804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_ISO_DEP: 65904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PA_ISO_DEP; 66004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 66104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_NFC_DEP: 66204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PA_NFC_DEP; 66304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 66404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 66504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 66604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_B: 66704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_ISO_DEP) 66804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PB_ISO_DEP; 66904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 67004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_F: 67104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_T3T) 67204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PF_T3T; 67304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else if (protocol == NFC_PROTOCOL_NFC_DEP) 67404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PF_NFC_DEP; 67504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 67604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_ISO15693: 677f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_P_ISO15693; 67804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 67904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_B_PRIME: 68004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_P_B_PRIME; 681f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 68204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_KOVIO: 68304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_P_KOVIO; 684f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 68504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE: 68604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PAA_NFC_DEP; 687f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 68804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE: 68904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_PFA_NFC_DEP; 690f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 69104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 69204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_A: 693f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (protocol) 69404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 69504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_T1T: 696f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LA_T1T; 69704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 698f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFC_PROTOCOL_T2T: 69904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LA_T2T; 700f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 70104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_ISO_DEP: 702f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LA_ISO_DEP; 70304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 70404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_PROTOCOL_NFC_DEP: 705f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LA_NFC_DEP; 70604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 70704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 708f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 70904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_B: 71004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_ISO_DEP) 711f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LB_ISO_DEP; 71204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 713f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_F: 71404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_T3T) 71504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LF_T3T; 716f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (protocol == NFC_PROTOCOL_NFC_DEP) 71704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LF_NFC_DEP; 718f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 71904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_ISO15693: 720f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_L_ISO15693; 72104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 72204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME: 723f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_L_B_PRIME; 72404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 72504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE: 72604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LAA_NFC_DEP; 727f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 72804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE: 72904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian disc_mask = NFA_DM_DISC_MASK_LFA_NFC_DEP; 730f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 73104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 73204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 733f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG3 ("nfa_dm_disc_get_disc_mask (): tech_n_mode:0x%X, protocol:0x%X, disc_mask:0x%X", 73404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tech_n_mode, protocol, disc_mask); 73504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return (disc_mask); 73604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 737f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 73804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 73904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 740f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_discovery_cback 74104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 74204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Discovery callback event from NFC 743f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 74404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 74504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 746f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 74704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_discovery_cback (tNFC_DISCOVER_EVT event, tNFC_DISCOVER *p_data) 74804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 749f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_SM_EVENT dm_disc_event = NFA_DM_DISC_SM_MAX_EVENT; 75004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 75104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_disc_discovery_cback (): event:0x%X", event); 752f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 75304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 75404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 755f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFC_START_DEVT: 756f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_DISCOVER_RSP; 75704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 75804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_RESULT_DEVT: 75904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_DISCOVER_NTF; 76004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 76104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFC_SELECT_DEVT: 762f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_DISCOVER_SELECT_RSP; 76304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 764f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFC_ACTIVATE_DEVT: 76504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_INTF_ACTIVATED_NTF; 76604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 767f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFC_DEACTIVATE_DEVT: 76804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_data->deactivate.is_ntf) 769f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 77004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_DEACTIVATE_NTF; 77104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ((p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) || (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)) 77204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 773f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_SetReassemblyFlag (TRUE); 77404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.flags &= ~NFA_DM_FLAGS_RAW_FRAME; 77504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 77604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 777f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 77804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_event = NFA_DM_RF_DEACTIVATE_RSP; 77904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 780f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 78104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("Unexpected event"); 78204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return; 783f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 78404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 78504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (dm_disc_event, (tNFA_DM_RF_DISC_DATA *) p_data); 786f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 78704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 78804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 789f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 79004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_notify_started 79104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 792f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Report NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT or 79304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** NFA_RF_DISCOVERY_STARTED_EVT, if needed 79404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 795f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 79604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 79704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 798f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_notify_started (tNFA_STATUS status) 79904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 80004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_CONN_EVT_DATA evt_data; 801f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 80204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 80304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 804f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 80504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 80604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian evt_data.status = status; 807f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 80804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 80904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT, &evt_data); 810f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 81104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STARTED_EVT, &evt_data); 812f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 81304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 81404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 815f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 81604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 81704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_conn_event_notify 818f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 81904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Notify application of CONN_CBACK event, using appropriate 82004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** callback 821f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 82204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns nothing 82304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 824f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 82504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_disc_conn_event_notify (UINT8 event, tNFA_STATUS status) 82604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 827f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_CONN_EVT_DATA evt_data; 82804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 82904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 830f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 83104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 832f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian evt_data.status = status; 83304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 83404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 835f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 83604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Use exclusive RF mode callback */ 837f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.p_excl_conn_cback) 83804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian (*nfa_dm_cb.p_excl_conn_cback) (event, &evt_data); 839f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 84004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 841f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 84204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian (*nfa_dm_cb.p_conn_cback) (event, &evt_data); 84304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 844f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 84504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 846f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 84704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 84804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 849f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_force_to_idle 85004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 85104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Force NFCC to idle state while waiting for deactivation NTF 85204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 853f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns tNFC_STATUS 85404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 85504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 856f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic tNFC_STATUS nfa_dm_disc_force_to_idle (void) 85704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 85804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR; 859f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 86004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_disc_force_to_idle() disc_flags = 0x%x", nfa_dm_cb.disc_cb.disc_flags); 861f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 86204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) /* do not execute more than one */ 86304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 86404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF); 86504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP); 86604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 867f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian status = NFC_Deactivate (NFC_DEACTIVATE_TYPE_IDLE); 86804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 86904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 870f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (status); 87104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 87204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 873f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 87404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 875f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_deact_ntf_timeout_cback 87604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 87704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Timeout while waiting for deactivation NTF 87804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 87904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 88004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 88104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 882f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_deact_ntf_timeout_cback (TIMER_LIST_ENT *p_tle) 88304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 88404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()"); 88504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 88604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_force_to_idle(); 88704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 88804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 88904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 890f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 89104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_send_deactivate_cmd 89204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 893f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Send deactivate command to NFCC, if needed. 89404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 895f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns NFC_STATUS_OK - deactivate cmd is sent 89604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** NCI_STATUS_FAILED - no buffers 89704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** NFC_STATUS_SEMANTIC_ERROR - this function does not attempt 89804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** to send deactivate cmd 89904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 90004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 90104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic tNFC_STATUS nfa_dm_send_deactivate_cmd (tNFC_DEACT_TYPE deactivate_type) 90204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 903f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR; 90404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 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); 90504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 906f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!w4_flags) 90704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 908f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if deactivate CMD was not sent to NFCC */ 90904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 91004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 91104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian status = NFC_Deactivate (deactivate_type); 912f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 913f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!nfa_dm_cb.disc_cb.tle.in_use) 91404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 91504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_deact_ntf_timeout_cback; 916f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.tle, 0, NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF); 91704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 918f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 91904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 92004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 921f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (deactivate_type == NFC_DEACTIVATE_TYPE_SLEEP) 92204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 92304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian status = NFC_STATUS_SEMANTIC_ERROR; 924f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 92504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else if (nfa_dm_cb.disc_cb.tle.in_use) 92604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 927f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian status = NFC_STATUS_OK; 92804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 92904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 93004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 931f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian status = nfa_dm_disc_force_to_idle (); 93204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 93304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 93404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 935f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return status; 936f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 93704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 93804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 93904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 940f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_start_rf_discover 94104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 942f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Start RF discovery 94304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 944f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 94504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 94604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 947f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianvoid nfa_dm_start_rf_discover (void) 94804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 949f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DISCOVER_PARAMS disc_params[NFA_DM_MAX_DISC_PARAMS]; 95004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask = 0, poll_mask, listen_mask; 951f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 num_params, xx; 95204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 95304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_start_rf_discover ()"); 954f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Make sure that RF discovery was enabled, or some app has exclusive control */ 95504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED)) 95604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.excl_disc_entry.in_use == FALSE) ) 95704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 958f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return; 95904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 96004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 961f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* get listen mode routing table for technology */ 96204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_ee_get_tech_route (NFA_EE_PWR_STATE_ON, nfa_dm_cb.disc_cb.listen_RT); 963f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 96404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 965f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 96604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_set_rf_listen_mode_raw_config (&dm_disc_mask); 96704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_mask |= (nfa_dm_cb.disc_cb.excl_disc_entry.requested_disc_mask & NFA_DM_DISC_MASK_POLL); 96804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.selected_disc_mask = dm_disc_mask; 96904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 970f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 97104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 972f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Collect RF discovery request from sub-modules */ 97304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 97404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 975f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].in_use) 97604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 97704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_mask = (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_POLL); 978f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 97904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* clear poll mode technolgies and protocols which are already used by others */ 98004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_mask &= ~(dm_disc_mask & NFA_DM_DISC_MASK_POLL); 981f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 98204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian listen_mask = 0; 98304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 984f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* 98504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** add listen mode technolgies and protocols if host ID is matched to listen mode routing table 98604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 987f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 98804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* NFC-A */ 98904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].host_id == nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A]) 990f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 99104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 992f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian & ( NFA_DM_DISC_MASK_LA_T1T 99304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_T2T 994f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_ISO_DEP 99504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_NFC_DEP 99604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LAA_NFC_DEP ); 99704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 99804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 999f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 100004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* host can listen ISO-DEP based on AID routing */ 1001f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP); 100204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 100304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* host can listen NFC-DEP based on protocol routing */ 1004f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LA_NFC_DEP); 100504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian listen_mask |= (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_LAA_NFC_DEP); 100604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1007f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 100804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* NFC-B */ 100904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* multiple hosts can listen ISO-DEP based on AID routing */ 1010f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 101104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian & NFA_DM_DISC_MASK_LB_ISO_DEP; 101204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1013f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* NFC-F */ 101404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* NFCC can support NFC-DEP and T3T listening based on NFCID routing regardless of NFC-F tech routing */ 1015f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 101604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian & ( NFA_DM_DISC_MASK_LF_T3T 101704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LF_NFC_DEP 1018f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LFA_NFC_DEP ); 101904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1020f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* NFC-B Prime */ 102104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].host_id == nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_BP]) 1022f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 102304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian listen_mask |= nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask 102404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian & NFA_DM_DISC_MASK_L_B_PRIME; 102504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 102604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1027f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* 102804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** clear listen mode technolgies and protocols which are already used by others 1029f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 103004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1031f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check if other modules are listening T1T or T2T */ 1032f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (dm_disc_mask & (NFA_DM_DISC_MASK_LA_T1T|NFA_DM_DISC_MASK_LA_T2T)) 1033f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1034f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask &= ~( NFA_DM_DISC_MASK_LA_T1T 103504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_T2T 103604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_ISO_DEP 103704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_NFC_DEP ); 103804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1039f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 104004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* T1T/T2T has priority on NFC-A */ 1041f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (dm_disc_mask & (NFA_DM_DISC_MASK_LA_ISO_DEP|NFA_DM_DISC_MASK_LA_NFC_DEP)) 1042f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(listen_mask & (NFA_DM_DISC_MASK_LA_T1T|NFA_DM_DISC_MASK_LA_T2T))) 1043f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1044f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian dm_disc_mask &= ~( NFA_DM_DISC_MASK_LA_ISO_DEP 1045f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LA_NFC_DEP ); 1046f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 104704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 104804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Don't remove ISO-DEP because multiple hosts can listen ISO-DEP based on AID routing */ 104904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1050f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Check if other modules are listening NFC-DEP */ 105104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & (NFA_DM_DISC_MASK_LA_NFC_DEP | NFA_DM_DISC_MASK_LAA_NFC_DEP)) 105204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1053f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian listen_mask &= ~( NFA_DM_DISC_MASK_LA_NFC_DEP 105404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian |NFA_DM_DISC_MASK_LAA_NFC_DEP ); 105504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 105604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1057f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask = poll_mask | listen_mask; 105804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 105904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG2 ("nfa_dm_cb.disc_cb.entry[%d].selected_disc_mask = 0x%x", 106004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian xx, nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask); 1061f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 106204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian dm_disc_mask |= nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask; 106304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 106404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1065f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 106604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Let P2P set GEN bytes for LLCP to NFCC */ 106704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (dm_disc_mask & NFA_DM_DISC_MASK_NFC_DEP) 106804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1069f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_p2p_set_config (dm_disc_mask); 107004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1071f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 107204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1073f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("dm_disc_mask = 0x%x", dm_disc_mask); 107404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 107504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Get Discovery Technology parameters */ 1076f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian num_params = nfa_dm_get_rf_discover_config (dm_disc_mask, disc_params, NFA_DM_MAX_DISC_PARAMS); 107704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 107804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (num_params) 1079f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 108004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* 1081f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** NFCC will abort programming personality slots if not available. 108204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** NFCC programs the personality slots in the following order of RF technologies: 108304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** NFC-A, NFC-B, NFC-BP, NFC-I93 1084f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 108504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1086f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if this is not for exclusive control */ 108704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 108804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 108904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* update listening protocols in each NFC technology */ 1090f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_set_rf_listen_mode_config (dm_disc_mask); 109104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 109204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1093f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Set polling duty cycle */ 109404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_set_total_duration (); 109504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.dm_disc_mask = dm_disc_mask; 109604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 109704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_DiscoveryStart (num_params, disc_params, nfa_dm_disc_discovery_cback); 109804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* set flag about waiting for response in IDLE state */ 109904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 110004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 110104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* register callback to get interface error NTF */ 110204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 110304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 110404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 110504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 110604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* RF discovery is started but there is no valid technology or protocol to discover */ 110704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_started (NFA_STATUS_OK); 110804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 110904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 111004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if Kovio presence check timer is running, timeout callback will reset the activation information */ 111104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.activated_protocol != NFC_PROTOCOL_KOVIO) 111204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ||(!nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 111304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 111404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* reset protocol and hanlde of activated sub-module */ 111504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 111604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 111704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 111804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 111904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 112004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 112104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 112204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_notify_discovery 112304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 112404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Send RF discovery notification to upper layer 112504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 112604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 1127f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 112804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 112904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_notify_discovery (tNFA_DM_RF_DISC_DATA *p_data) 113004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 1131f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_CONN_EVT_DATA conn_evt; 113204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 113304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* let application select a device */ 1134f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian conn_evt.disc_result.status = NFA_STATUS_OK; 113504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian memcpy (&(conn_evt.disc_result.discovery_ntf), 113604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &(p_data->nfc_discover.result), 113704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian sizeof (tNFC_RESULT_DEVT)); 1138f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 113904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_DISC_RESULT_EVT, &conn_evt); 114004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 114104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 114204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1143f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 114404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 114504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_handle_kovio_activation 1146f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 114704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Handle Kovio activation; whether it's new or repeated activation 114804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1149f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns TRUE if repeated activation. No need to notify activated event to upper layer 115004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 115104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 115204839626ed859623901ebd3a5fd483982186b59dVignesh VenkatasubramanianBOOLEAN nfa_dm_disc_handle_kovio_activation (tNFC_DISCOVER *p_data, tNFA_DISCOVER_CBACK *p_disc_cback) 1153f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 115404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_DISCOVER disc_data; 115504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1156f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 115704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1158f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if this is new Kovio bar code tag */ 115904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (nfa_dm_cb.activated_nfcid_len != p_data->activate.rf_tech_param.param.pk.uid_len) 1160f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ||(memcmp (p_data->activate.rf_tech_param.param.pk.uid, 116104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.activated_nfcid, nfa_dm_cb.activated_nfcid_len))) 116204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 116304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("new Kovio tag is detected"); 1164f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 116504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify presence check failure for previous tag, if presence check is pending */ 1166f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_report_kovio_presence_check (NFA_STATUS_FAILED); 116704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 116804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify deactivation of previous activation before notifying new activation */ 116904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_disc_cback) 117004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1171f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 117204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian (*(p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 117304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 117404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1175f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* restart timer */ 1176f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 117704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 117804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 117904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1180f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify presence check ok, if presence check is pending */ 118104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_report_kovio_presence_check (NFC_STATUS_OK); 1182f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 118304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* restart timer and do not notify upper layer */ 118404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 118504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return (TRUE); 1186f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 118704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 118804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 118904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 119004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* this is the first activation, so start timer and notify upper layer */ 1191f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.kovio_tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_kovio_timeout_cback; 119204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 119304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1194f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 119504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return (FALSE); 119604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 1197f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 119804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 119904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1200f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_notify_activation 120104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 120204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Send RF activation notification to sub-module 1203f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 120404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns NFA_STATUS_OK if success 1205f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 120604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 120704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic tNFA_STATUS nfa_dm_disc_notify_activation (tNFC_DISCOVER *p_data) 120804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 120904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian UINT8 xx, host_id_in_LRT; 1210f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 iso_dep_t3t__listen = NFA_DM_DISC_NUM_ENTRIES; 1211f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1212f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_RF_TECH_N_MODE tech_n_mode = p_data->activate.rf_tech_param.mode; 121304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_PROTOCOL protocol = p_data->activate.protocol; 1214f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1215f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_DISC_TECH_PROTO_MASK activated_disc_mask; 121604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1217f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG2 ("nfa_dm_disc_notify_activation (): tech_n_mode:0x%X, proto:0x%X", 1218f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tech_n_mode, protocol); 1219f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1220f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1221f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1222f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_tech_mode = tech_n_mode; 1223f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1224f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 1225f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = protocol; 1226f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 1227f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1228f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_KOVIO) 1229f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1230f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* check whether it's new or repeated activation */ 1231f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_disc_handle_kovio_activation (p_data, nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) 1232f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1233f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* do not notify activation of Kovio to upper layer */ 1234f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_OK); 1235f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1236f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1237f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1238f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1239f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1240f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1241f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_OK); 1242f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1243f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1244f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if this is NFCEE direct RF interface, notify activation to whoever listening UICC */ 1245f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF) 1246f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1247f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1248f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1249f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 1250f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].host_id != NFA_DM_DISC_HOST_ID_DH)) 1251f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1252f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1253f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 1254f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = NFC_PROTOCOL_UNKNOWN; 1255f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = xx; 1256f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1257f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG2 ("activated_rf_interface:0x%x, activated_handle: 0x%x", 1258f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface, 1259f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle); 1260f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1261f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1262f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1263f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1264f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_OK); 1265f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1266f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1267f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_FAILED); 1268f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1269f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1270f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* get bit mask of technolgies/mode and protocol */ 1271f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian activated_disc_mask = nfa_dm_disc_get_disc_mask (tech_n_mode, protocol); 1272f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1273f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* get host ID of technology from listen mode routing table */ 1274f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A) 1275f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1276f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A]; 1277f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1278f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B) 1279f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1280f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_B]; 1281f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1282f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F) 1283f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1284f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_F]; 1285f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1286f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME) 1287f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1288f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_BP]; 1289f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1290f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else /* DH only */ 1291f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1292f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = NFA_DM_DISC_HOST_ID_DH; 1293f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1294f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1295f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_NFC_DEP) 1296f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1297f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Force NFC-DEP to the host */ 1298f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian host_id_in_LRT = NFA_DM_DISC_HOST_ID_DH; 1299f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1300f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1301f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1302f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1303f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if any matching NFC technology and protocol */ 1304f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].in_use) 1305f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1306f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].host_id == host_id_in_LRT) 1307f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1308f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & activated_disc_mask) 1309f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 1310f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1311f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1312f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1313f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* check ISO-DEP listening even if host in LRT is not matched */ 1314f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_ISO_DEP) 1315f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1316f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A) 1317f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LA_ISO_DEP)) 1318f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1319f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian iso_dep_t3t__listen = xx; 1320f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1321f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B) 1322f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LB_ISO_DEP)) 1323f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1324f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian iso_dep_t3t__listen = xx; 1325f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1326f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1327f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* check T3T listening even if host in LRT is not matched */ 1328f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (protocol == NFC_PROTOCOL_T3T) 1329f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1330f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F) 1331f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LF_T3T)) 1332f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1333f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian iso_dep_t3t__listen = xx; 1334f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1335f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1336f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1337f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1338f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1339f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1340f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (xx >= NFA_DM_DISC_NUM_ENTRIES) 1341f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1342f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if any ISO-DEP or T3T listening even if host in LRT is not matched */ 1343f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian xx = iso_dep_t3t__listen; 1344f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1345f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1346f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (xx < NFA_DM_DISC_NUM_ENTRIES) 1347f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1348f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_tech_mode = tech_n_mode; 1349f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_disc_id = p_data->activate.rf_disc_id; 1350f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface = p_data->activate.intf_param.type; 135104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = protocol; 135204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = xx; 135304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1354f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG2 ("activated_protocol:0x%x, activated_handle: 0x%x", 1355f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol, 1356f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle); 1357f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1358f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (protocol == NFC_PROTOCOL_KOVIO) 1359f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1360f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* check whether it's new or repeated activation */ 1361f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_disc_handle_kovio_activation (p_data, nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) 1362f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1363f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* do not notify activation of Kovio to upper layer */ 1364f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_OK); 1365f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1366f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1367f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1368f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1369f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data); 1370f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1371f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_OK); 1372f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1373f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1374f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1375f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 1376f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 1377f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (NFA_STATUS_FAILED); 1378f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1379f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 138004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1381f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 1382f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1383f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_notify_deactivation 1384f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1385f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Send deactivation notification to sub-module 1386f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1387f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns None 1388f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1389f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 1390f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_notify_deactivation (tNFA_DM_RF_DISC_SM_EVENT sm_event, 1391f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DISCOVER *p_data) 1392f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 1393f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_HANDLE xx; 1394f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_CONN_EVT_DATA evt_data; 1395f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DISCOVER disc_data; 1396f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1397f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_disc_notify_deactivation (): activated_handle=%d", 1398f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle); 1399f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1400f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 1401f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1402f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_disc_notify_deactivation (): for sleep wakeup"); 1403f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return; 1404f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1405f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1406f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (sm_event == NFA_DM_RF_DEACTIVATE_RSP) 1407f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1408f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* 1409f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_ALL_DISCOVERIES or NFA_DM_RFST_W4_HOST_SELECT 1410f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** Deactivation by upper layer or RF link loss in NFA_DM_RFST_LISTEN_SLEEP 1411f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** No sub-module is activated at this state. 1412f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 1413f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1414f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_SLEEP) 1415f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1416f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1417f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1418f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1419f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1420f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 1421f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 1422f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1423f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1424f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1425f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1426f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* let each sub-module handle deactivation */ 1427f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1428f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 142904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 1430f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LISTEN) ) 1431f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1432f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 1433f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data); 1434f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1435f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1436f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1437f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1438f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if ( (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)) 1439f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ||(nfa_dm_cb.disc_cb.deact_notify_pending) ) 1440f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1441f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian xx = nfa_dm_cb.disc_cb.activated_handle; 1442f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1443f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify event to activated module if failed while reactivation */ 1444f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1445f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1446f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1447f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1448f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 1449f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 1450f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1451f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1452f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if ( (xx < NFA_DM_DISC_NUM_ENTRIES) 1453f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].in_use) 1454f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) ) 1455f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1456f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 1457f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1458f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1459f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1460f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify deactivation to application if there is no activated module */ 1461f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 1462f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 1463f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1464f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1465f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1466f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1467f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1468f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 1469f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1470f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 1471f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1472f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* restart timer and do not notify upper layer */ 1473f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 1474f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return; 1475f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1476f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Otherwise, upper layer initiated deactivation. */ 1477f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1478f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1479f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify event to activated module */ 1480f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1481f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1482f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1483f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1484f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE; 1485f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 1486f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1487f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1488f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1489f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1490f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian xx = nfa_dm_cb.disc_cb.activated_handle; 1491f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1492f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use)) 1493f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1494f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 1495f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data); 1496f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1497f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1498f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1499f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1500f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* clear activated information */ 1501f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_tech_mode = 0; 1502f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_disc_id = 0; 1503f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface = 0; 1504f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol = NFA_PROTOCOL_INVALID; 1505f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID; 150604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_notify_pending = FALSE; 1507f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 150804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 150904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 1510f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 151104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_sleep_wakeup 151204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1513f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Put tag to sleep, then wake it up. Can be used Perform 151404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** legacy presence check or to wake up tag that went to HALT 1515f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** state 151604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1517f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns TRUE if operation started 151804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 151904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1520f0ceed9d146017d218d64ca946d5c2b31356389bVignesh VenkatasubramaniantNFC_STATUS nfa_dm_disc_sleep_wakeup (void) 152104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 152204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_STATUS status = NFC_STATUS_FAILED; 1523f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 152404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 1525f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 152604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Deactivate to sleep mode */ 1527f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian status = nfa_dm_send_deactivate_cmd(NFC_DEACTIVATE_TYPE_SLEEP); 1528f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (status == NFC_STATUS_OK) 1529f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 153004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* deactivate to sleep is sent on behalf of sleep wakeup. 153104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * set the sleep wakeup information in control block */ 153204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 1533f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = FALSE; 153404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1535f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 153604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 153704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return (status); 1538f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 153904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 154004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 1541f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 154204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_is_raw_frame_session 154304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1544f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description If NFA_SendRawFrame is called since RF activation, 154504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** this function returns TRUE. 154604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1547f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns TRUE if NFA_SendRawFrame is called 154804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 154904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1550f0ceed9d146017d218d64ca946d5c2b31356389bVignesh VenkatasubramanianBOOLEAN nfa_dm_is_raw_frame_session (void) 155104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 155204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return ((nfa_dm_cb.flags & NFA_DM_FLAGS_RAW_FRAME) ? TRUE : FALSE); 1553f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 155404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1555f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 155604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 155704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_is_p2p_paused 155804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1559f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description If NFA_PauseP2p is called sand still effective, 156004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** this function returns TRUE. 156104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1562f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns TRUE if NFA_SendRawFrame is called 156304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 156404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 156504839626ed859623901ebd3a5fd483982186b59dVignesh VenkatasubramanianBOOLEAN nfa_dm_is_p2p_paused (void) 1566f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 156704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return ((nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED) ? TRUE : FALSE); 156804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 1569f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 157004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 157104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 157204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_end_sleep_wakeup 1573f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 157404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Sleep Wakeup is complete 157504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1576f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns None 157704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 157804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1579f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_end_sleep_wakeup (tNFC_STATUS status) 158004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 1581f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 158204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 158304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1584f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* ignore it while doing Kovio presence check */ 1585f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return; 158604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 158704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 158804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 158904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1590f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING; 159104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1592f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify RW module that sleep wakeup is finished */ 159304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_rw_handle_sleep_wakeup_rsp (status); 159404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1595f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.deact_pending) 159604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 159704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = FALSE; 1598f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Perform pending deactivate command and on response notfiy deactivation */ 159904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_notify_pending = TRUE; 160004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, 1601f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type); 160204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 160304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1604f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 160504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 160604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 1607f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 160804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_kovio_timeout_cback 1609f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 161004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Timeout for Kovio bar code tag presence check 161104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 161204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 1613f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 161404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1615f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_kovio_timeout_cback (TIMER_LIST_ENT *p_tle) 161604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 1617f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_DEACTIVATE_DEVT deact; 161804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 161904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_disc_kovio_timeout_cback()"); 162004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1621f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify presence check failure, if presence check is pending */ 162204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_report_kovio_presence_check (NFC_STATUS_FAILED); 162304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 162404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 1625f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 162604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* restart timer in case that upper layer's presence check interval is too long */ 162704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 162804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1629f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 163004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 163104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify upper layer deactivated event */ 1632f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deact.status = NFC_STATUS_OK; 1633f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deact.type = NFC_DEACTIVATE_TYPE_DISCOVERY; 163404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian deact.is_ntf = TRUE; 163504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 163604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 163704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 163804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1639f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 164004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 164104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_start_kovio_presence_check 164204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1643f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Deactivate to discovery mode and wait for activation 164404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1645f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns TRUE if operation started 164604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 164704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1648f0ceed9d146017d218d64ca946d5c2b31356389bVignesh VenkatasubramaniantNFC_STATUS nfa_dm_disc_start_kovio_presence_check (void) 164904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 165004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_STATUS status = NFC_STATUS_FAILED; 1651f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 165204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_disc_start_kovio_presence_check ()"); 165304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1654f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) 165504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.kovio_tle.in_use) ) 165604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1657f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) 165804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 165904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* restart timer */ 1660f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_start_timer (&nfa_dm_cb.disc_cb.kovio_tle, 0, NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK); 166104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 166204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Deactivate to discovery mode */ 166304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian status = nfa_dm_send_deactivate_cmd (NFC_DEACTIVATE_TYPE_DISCOVERY); 1664f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1665f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (status == NFC_STATUS_OK) 166604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 166704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* deactivate to sleep is sent on behalf of sleep wakeup. 166804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * set the sleep wakeup information in control block */ 166904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 167004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = FALSE; 167104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 167204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 167304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 167404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 167504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* wait for next activation */ 167604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_CHECKING; 1677f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = FALSE; 167804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian status = NFC_STATUS_OK; 167904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 168004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1681f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1682f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return (status); 168304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 168404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1685f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 168604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 168704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_report_kovio_presence_check 1688f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 168904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Report Kovio presence check status 1690f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 169104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns None 169204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1693f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 169404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_report_kovio_presence_check (tNFC_STATUS status) 169504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 1696f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_disc_report_kovio_presence_check ()"); 169704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1698f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) 169904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 170004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING; 1701f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 170204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify RW module that sleep wakeup is finished */ 170304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_rw_handle_presence_check_rsp (status); 170404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 170504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.deact_pending) 1706f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 170704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = FALSE; 170804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, 170904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type); 1710f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 171104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1712f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 171304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1714f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 171504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 171604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_data_cback 1717f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 171804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Monitoring interface error through data callback 1719f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 172004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 172104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1722f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 172304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data) 1724f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 172504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_disc_data_cback ()"); 172604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1727f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if selection failed */ 172804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (event == NFC_ERROR_CEVT) 1729f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 173004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_CORE_INTF_ERROR_NTF, NULL); 173104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1732f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (event == NFC_DATA_CEVT) 173304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1734f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian GKI_freebuf (p_data->data.p_data); 173504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1736f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 173704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 173804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 1739f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 174004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_new_state 174104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 174204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_IDLE state 1743f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 174404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 174504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 174604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 174704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_disc_new_state (tNFA_DM_RF_DISC_STATE new_state) 174804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 1749f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_CONN_EVT_DATA evt_data; 175004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_RF_DISC_STATE old_state = nfa_dm_cb.disc_cb.disc_state; 175104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1752f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#if (BT_TRACE_VERBOSE == TRUE) 1753f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG5 ("nfa_dm_disc_new_state (): old_state: %s (%d), new_state: %s (%d) disc_flags: 0x%x", 175404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 175504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_state_2_str (new_state), new_state, nfa_dm_cb.disc_cb.disc_flags); 175604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#else 1757f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG3 ("nfa_dm_disc_new_state(): old_state: %d, new_state: %d disc_flags: 0x%x", 175804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_state, new_state, nfa_dm_cb.disc_cb.disc_flags); 1759f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#endif 176004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 176104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_state = new_state; 176204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1763f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (new_state == NFA_DM_RFST_IDLE) 176404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) ) /* not error recovering */ 1765f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 176604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 176704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 176804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_STOPPING; 1769f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 177004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if exclusive RF control is stopping */ 1771f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE) 177204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1773f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (old_state > NFA_DM_RFST_DISCOVERY) 1774f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 177504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify deactivation to application */ 1776f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE; 177704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data); 177804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 177904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1780f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_rel_excl_rf_control_and_notify (); 178104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 178204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 1783f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 178404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian evt_data.status = NFA_STATUS_OK; 1785f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_RF_DISCOVERY_STOPPED_EVT, &evt_data); 1786f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 178704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1788f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_DISABLING) 178904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 179004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING; 179104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_check_disabled (); 1792f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 179304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 179404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 1795f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 179604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 179704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1798f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_idle 1799f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1800f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_IDLE state 1801f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1802f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 1803f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 1804f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 1805f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_idle (tNFA_DM_RF_DISC_SM_EVENT event, 1806f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 1807f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 1808f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 xx; 1809f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1810f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (event) 1811f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1812f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_CMD: 1813f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 1814f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 1815f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1816f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_RSP: 1817f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 1818f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1819f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->nfc_discover.status == NFC_STATUS_OK) 1820f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1821f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 1822f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1823f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if RF discovery was stopped while waiting for response */ 1824f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & (NFA_DM_DISC_FLAGS_STOPPING|NFA_DM_DISC_FLAGS_DISABLING)) 1825f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1826f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* stop discovery */ 1827f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1828f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1829f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 1830f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1831f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1832f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) 1833f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1834f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) 1835f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1836f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 1837f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1838f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback) 1839f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*) p_data); 1840f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1841f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1842f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1843f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1844f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify event to each module which is waiting for start */ 1845f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 1846f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1847f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if registered module is waiting for starting discovery */ 184804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (nfa_dm_cb.disc_cb.entry[xx].in_use) 184904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.dm_disc_mask & nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask) 185004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian &&(nfa_dm_cb.disc_cb.entry[xx].disc_flags & NFA_DM_DISC_FLAGS_NOTIFY) ) 1851f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 185204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].disc_flags &= ~NFA_DM_DISC_FLAGS_NOTIFY; 185304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1854f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback) 185504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*) p_data); 1856f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 185704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1858f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 185904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 186004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_started (p_data->nfc_discover.status); 1861f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 186204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 1863f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 186404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* in rare case that the discovery states of NFCC and DH mismatch and NFCC rejects Discover Cmd 1865f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * deactivate idle and then start disvocery when got deactivate rsp */ 186604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 186704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 1868f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 186904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 187004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1871f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 187204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 187304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 187404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if NFCC goes to idle successfully */ 187504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_data->nfc_discover.status == NFC_STATUS_OK) 1876f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 187704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if DH forced to go idle while waiting for deactivation NTF */ 1878f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 187904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 188004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 1881f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 188204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */ 188304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 188404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* check if need to restart discovery after resync discovery state with NFCC */ 188504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 188604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1887f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Otherwise, deactivating when getting unexpected activation */ 188804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 188904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Otherwise, wait for deactivation NTF */ 1890f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 189104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 189204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 1893f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if NFCC sent this after NFCC had rejected deactivate CMD to idle while deactivating */ 189404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 1895f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 189604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 1897f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 189804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* stop discovery */ 189904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1900f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 190104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 190204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 1903f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 190404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 1905f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */ 190604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 190704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* check if need to restart discovery after resync discovery state with NFCC */ 190804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 190904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1910f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 191104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Otherwise, deactivated when received unexpected activation in idle state */ 1912f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 191304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 191404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1915f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 191604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* unexpected activation, deactivate to idle */ 191704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 191804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 191904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 192004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 1921f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_LP_LISTEN_CMD: 192204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LP_LISTEN); 192304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 1924f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 192504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian default: 192604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_idle (): Unexpected discovery event"); 1927f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 192804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 1929f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 193004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 193104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 1932f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 193304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_sm_discovery 193404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 1935f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_DISCOVERY state 193604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 193704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 1938f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 193904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 1940f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_discovery (tNFA_DM_RF_DISC_SM_EVENT event, 194104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 1942f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 194304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 194404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1945f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 194604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if deactivate CMD was not sent to NFCC */ 194704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 1948f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 194904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 1950f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (p_data->deactivate_type); 195104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 195204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 1953f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 195404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 1955f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 195604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if it's not race condition between deactivate CMD and activate NTF */ 195704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 195804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 1959f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* do not notify deactivated to idle in RF discovery state 196004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** because it is internal or stopping RF discovery 1961f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 1962f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1963f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* there was no activation while waiting for deactivation RSP */ 1964f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 1965f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 1966f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1967f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 1968f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_NTF: 1969f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_W4_ALL_DISCOVERIES); 1970f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_notify_discovery (p_data); 1971f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 1972f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 1973f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 1974f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1975f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("RF Activated while waiting for deactivation RSP"); 1976f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* it's race condition. DH has to wait for deactivation NTF */ 1977f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_NTF; 1978f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1979f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1980f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1981f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF) 1982f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1983f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 1984f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1985f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80) 1986f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1987f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Listen mode */ 1988f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 1989f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1990f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 1991f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1992f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Poll mode */ 1993f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 1994f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 1995f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 1996f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 1997f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 1998f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 1999f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2000f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* after receiving deactivate event, restart discovery */ 2001f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 2002f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2003f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2004f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2005f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2006f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2007f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 2008f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if there was race condition between deactivate CMD and activate NTF */ 2009f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) 2010f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2011f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* race condition is resolved */ 2012f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 2013f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2014f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2015f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2016f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* do not notify deactivated to idle in RF discovery state 2017f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** because it is internal or stopping RF discovery 2018f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian */ 2019f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2020f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2021f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 2022f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 202304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 202404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 202504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_LP_LISTEN_CMD: 202604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2027f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_CORE_INTF_ERROR_NTF: 202804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 202904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian default: 2030f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_discovery (): Unexpected discovery event"); 203104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2032f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 203304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2034f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 203504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 203604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2037f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_w4_all_discoveries 203804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 203904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_W4_ALL_DISCOVERIES state 2040f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 204104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 204204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2043f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 204404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_w4_all_discoveries (tNFA_DM_RF_DISC_SM_EVENT event, 2045f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 204604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2047f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (event) 204804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 204904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 2050f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if deactivate CMD was not sent to NFCC */ 205104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 205204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2053f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 205404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* only IDLE mode is allowed */ 2055f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 205604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 205704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2058f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 205904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 206004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify exiting from w4 all discoverie state */ 206104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 206204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 206304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 206404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 206504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 206604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_NTF: 206704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if deactivate CMD is already sent then ignore discover NTF */ 206804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 2069f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 207004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */ 2071f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE) 207204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 207304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT); 2074f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 207504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_notify_discovery (p_data); 207604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2077f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 207804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 2079f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* 208004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ** This is only for ISO15693. 2081f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ** FW sends activation NTF when all responses are received from tags without host selecting. 208204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian */ 208304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 2084f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 208504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 208604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2087f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 208804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2089f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* after receiving deactivate event, restart discovery */ 209004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2091f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 209204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 209304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian default: 2094f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_w4_all_discoveries (): Unexpected discovery event"); 209504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 209604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2097f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 209804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2099f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 210004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 210104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_sm_w4_host_select 2102f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 210304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_W4_HOST_SELECT state 2104f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 210504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 210604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2107f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 210804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_w4_host_select (tNFA_DM_RF_DISC_SM_EVENT event, 2109f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 211004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 211104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_CONN_EVT_DATA conn_evt; 2112f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_DISC_FLAGS old_sleep_wakeup_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING); 211304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian BOOLEAN sleep_wakeup_event = FALSE; 2114f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian BOOLEAN sleep_wakeup_event_processed = FALSE; 2115f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_STATUS status; 2116f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 211704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 211804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 211904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_SELECT_CMD: 212004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if not waiting to deactivate */ 212104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 212204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 212304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_DiscoverySelect (p_data->select.rf_disc_id, 212404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p_data->select.protocol, 212504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian p_data->select.rf_interface); 212604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 212704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 212804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 212904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_conn_event_notify (NFA_SELECT_RESULT_EVT, NFA_STATUS_FAILED); 213004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 213104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 213204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 213304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_SELECT_RSP: 213404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian sleep_wakeup_event = TRUE; 213504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify application status of selection */ 213604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_data->nfc_discover.status == NFC_STATUS_OK) 213704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2138f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian sleep_wakeup_event_processed = TRUE; 213904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian conn_evt.status = NFA_STATUS_OK; 214004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* register callback to get interface error NTF */ 214104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 214204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2143f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 2144f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian conn_evt.status = NFA_STATUS_FAILED; 214504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 214604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!old_sleep_wakeup_flag) 214704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2148f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_conn_event_notify (NFA_SELECT_RESULT_EVT, p_data->nfc_discover.status); 214904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 215004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2151f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 215204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE); 215304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* always call nfa_dm_disc_notify_activation to update protocol/interface information in NFA control blocks */ 215404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian status = nfa_dm_disc_notify_activation (&(p_data->nfc_discover)); 215504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (old_sleep_wakeup_flag) 2156f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 215704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Handle sleep wakeup success: notify RW module of sleep wakeup of tag; if deactivation is pending then deactivate */ 215804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_OK); 215904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2160f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (status == NFA_STATUS_FAILED) 216104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 216204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 2163f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 216404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* after receiving deactivate event, restart discovery */ 2165f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 216604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 216704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2168f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 216904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (old_sleep_wakeup_flag) 2170f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 217104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = TRUE; 217204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.pending_deact_type = p_data->deactivate_type; 2173f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 217404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* if deactivate CMD was not sent to NFCC */ 2175f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)) 217604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 217704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP; 217804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* only IDLE mode is allowed */ 2179f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 218004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2181f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 218204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 218304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 218404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* notify exiting from host select state */ 2185f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 218604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 218704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2188f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 218904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 219004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2191f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_CORE_INTF_ERROR_NTF: 219204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian sleep_wakeup_event = TRUE; 219304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!old_sleep_wakeup_flag) 219404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2195f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* target activation failed, upper layer may deactivate or select again */ 2196f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian conn_evt.status = NFA_STATUS_FAILED; 219704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_SELECT_RESULT_EVT, &conn_evt); 219804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2199f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 220004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian default: 220104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_w4_host_select (): Unexpected discovery event"); 2202f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 220304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 220404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2205f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (old_sleep_wakeup_flag && sleep_wakeup_event && !sleep_wakeup_event_processed) 220604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 220704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* performing sleep wakeup and exception conditions happened 2208f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * clear sleep wakeup information and report failure */ 220904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_FAILED); 221004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2211f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 221204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2213f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 221404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 221504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_sm_poll_active 221604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2217f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_POLL_ACTIVE state 221804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 221904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 2220f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2221f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 222204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_poll_active (tNFA_DM_RF_DISC_SM_EVENT event, 222304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 222404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2225f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFC_STATUS status; 222604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_DISC_FLAGS old_sleep_wakeup_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING); 2227f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian BOOLEAN sleep_wakeup_event = FALSE; 222804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian BOOLEAN sleep_wakeup_event_processed = FALSE; 222904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_DEACTIVATE_DEVT deact; 2230f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 223104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 2232f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 223304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 2234f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (old_sleep_wakeup_flag) 223504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 223604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* sleep wakeup is already enabled when deactivate cmd is requested, 2237f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian * keep the information in control block to issue it later */ 223804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.deact_pending = TRUE; 2239f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.pending_deact_type = p_data->deactivate_type; 224004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 224104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 224204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2243f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian status = nfa_dm_send_deactivate_cmd(p_data->deactivate_type); 224404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2245f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 224604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 224704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 224804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 2249f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* register callback to get interface error NTF */ 225004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_SetStaticRfCback (nfa_dm_disc_data_cback); 225104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2252f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 225304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 225404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* it's race condition. received deactivate NTF before receiving RSP */ 225504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2256f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deact.status = NFC_STATUS_OK; 225704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian deact.type = NFC_DEACTIVATE_TYPE_IDLE; 225804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian deact.is_ntf = TRUE; 2259f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 226004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2261f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* NFCC is in IDLE state */ 226204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 226304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 226404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 226504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 226604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 2267f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 226804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 226904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 227004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2271f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 227204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 227304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* it's race condition. received deactivate NTF before receiving RSP */ 2274f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify deactivation after receiving deactivate RSP */ 227504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP"); 227604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2277f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 227804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 227904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian sleep_wakeup_event = TRUE; 2280f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2281f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 228204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 228304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 228404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 228504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2286f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT); 2287f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (old_sleep_wakeup_flag) 2288f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2289f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian sleep_wakeup_event_processed = TRUE; 2290f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* process pending deactivate request */ 2291f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.deact_pending) 2292f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2293f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify RW module that sleep wakeup is finished */ 2294f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if deactivation is pending then deactivate */ 2295f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_OK); 2296f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2297f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will not call this function */ 2298f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, TRUE); 2299f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2300f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 2301f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2302f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Successfully went to sleep mode for sleep wakeup */ 2303f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Now wake up the tag to complete the operation */ 2304f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_DiscoverySelect (nfa_dm_cb.disc_cb.activated_rf_disc_id, 2305f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_protocol, 2306f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.activated_rf_interface); 2307f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2308f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2309f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2310f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2311f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 2312f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2313f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2314f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 2315f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2316f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 2317f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2318f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 2319f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 2320f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2321f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* stop discovery */ 2322f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2323f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2324f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2325f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2326f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2327f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_CORE_INTF_ERROR_NTF: 2328f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian sleep_wakeup_event = TRUE; 2329f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if ( (!old_sleep_wakeup_flag) 2330f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ||(!nfa_dm_cb.disc_cb.deact_pending) ) 2331f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2332f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_send_deactivate_cmd (NFA_DEACTIVATE_TYPE_DISCOVERY); 2333f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2334f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2335f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2336f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 2337f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_poll_active (): Unexpected discovery event"); 2338f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2339f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2340f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2341f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (old_sleep_wakeup_flag && sleep_wakeup_event && !sleep_wakeup_event_processed) 2342f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 234304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* performing sleep wakeup and exception conditions happened 234404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian * clear sleep wakeup information and report failure */ 2345f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_end_sleep_wakeup (NFC_STATUS_FAILED); 234604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 234704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2348f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 234904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 235004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2351f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_listen_active 235204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 235304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_LISTEN_ACTIVE state 2354f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 235504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 235604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2357f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 235804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_listen_active (tNFA_DM_RF_DISC_SM_EVENT event, 235904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 236004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 236104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFC_DEACTIVATE_DEVT deact; 2362f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 236304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 236404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 236504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 236604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_send_deactivate_cmd(p_data->deactivate_type); 236704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2368f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 236904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 237004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 2371f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 237204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* it's race condition. received deactivate NTF before receiving RSP */ 237304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2374f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deact.status = NFC_STATUS_OK; 237504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian deact.type = NFC_DEACTIVATE_TYPE_IDLE; 2376f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deact.is_ntf = TRUE; 237704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact); 237804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 237904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* NFCC is in IDLE state */ 238004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2381f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 238204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 238304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2384f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 238504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 238604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 238704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 2388f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 238904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) 239004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 239104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* it's race condition. received deactivate NTF before receiving RSP */ 2392f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* notify deactivation after receiving deactivate RSP */ 2393f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP"); 239404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 239504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 239604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 239704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 239804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 239904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 240004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2401f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 240204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 240304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2404f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if ( (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) 2405f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF) ) 2406f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2407f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP); 2408f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2409f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY) 2410f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2411f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Discovery */ 2412f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 2413f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING) 2414f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2415f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* stop discovery */ 2416f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2417f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2418f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2419f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2420f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2421f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2422f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_CORE_INTF_ERROR_NTF: 2423f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2424f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 2425f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_listen_active (): Unexpected discovery event"); 2426f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2427f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2428f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 2429f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2430f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 2431f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2432f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_listen_sleep 2433f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2434f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_LISTEN_SLEEP state 2435f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2436f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 2437f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2438f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 2439f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_listen_sleep (tNFA_DM_RF_DISC_SM_EVENT event, 2440f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 2441f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 2442f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (event) 2443f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2444f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 2445f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_send_deactivate_cmd (p_data->deactivate_type); 2446f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2447f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if deactivate type is not discovery then NFCC will not sent deactivation NTF */ 2448f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->deactivate_type != NFA_DEACTIVATE_TYPE_DISCOVERY) 2449f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2450f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF; 2451f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 2452f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2453f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2454f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 2455f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP; 2456f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* if deactivate type in CMD was IDLE */ 2457f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) 2458f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2459f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 2460f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2461f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2462f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 2463f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2464f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 246504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 246604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */ 246704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF); 2468f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle); 246904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 247004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* there is no active protocol in this state, so broadcast to all by using NFA_DM_RF_DEACTIVATE_RSP */ 2471f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover)); 2472f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2473f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE) 2474f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2475f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 2476f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 2477f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2478f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (p_data->nfc_discover.deactivate.type == NFA_DEACTIVATE_TYPE_DISCOVERY) 2479f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2480f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY); 248104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 248204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 2483f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 248404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("Unexpected deactivation type"); 248504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_IDLE); 248604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_start_rf_discover (); 2487f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 248804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2489f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 2490f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE); 249104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 249204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 249304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf"); 2494f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 249504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* after receiving deactivate event, restart discovery */ 249604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE); 2497f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2498f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2499f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 2500f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_listen_sleep (): Unexpected discovery event"); 2501f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2502f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2503f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 2504f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2505f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 2506f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2507f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_lp_listen 2508f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2509f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_LP_LISTEN state 2510f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2511f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 2512f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2513f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 2514f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_lp_listen (tNFA_DM_RF_DISC_SM_EVENT event, 2515f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 2516f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 251704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 2518f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 251904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 252004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LP_ACTIVE); 2521f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_activation (&(p_data->nfc_discover)); 252204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED) 252304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 252404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("Not matched, unexpected activation"); 2525f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2526f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 252704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2528f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 2529f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_lp_listen (): Unexpected discovery event"); 253004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 253104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 253204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2533f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 253404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 253504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 253604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_sm_lp_active 2537f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2538f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Processing discovery events in NFA_DM_RFST_LP_ACTIVE state 2539f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2540f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 2541f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2542f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 2543f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic void nfa_dm_disc_sm_lp_active (tNFA_DM_RF_DISC_SM_EVENT event, 2544f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_RF_DISC_DATA *p_data) 2545f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 2546f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian switch (event) 2547f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 2548f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 2549f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_new_state (NFA_DM_RFST_LP_LISTEN); 2550f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover)); 2551f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2552f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian default: 2553f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("nfa_dm_disc_sm_lp_active (): Unexpected discovery event"); 2554f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 2555f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2556f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 2557f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 255804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 255904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2560f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_sm_execute 256104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 256204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Processing discovery related events 256304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2564f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 256504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2566f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 256704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_disc_sm_execute (tNFA_DM_RF_DISC_SM_EVENT event, tNFA_DM_RF_DISC_DATA *p_data) 256804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2569f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#if (BT_TRACE_VERBOSE == TRUE) 257004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG5 ("nfa_dm_disc_sm_execute (): state: %s (%d), event: %s(%d) disc_flags: 0x%x", 257104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 257204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_event_2_str (event), event, nfa_dm_cb.disc_cb.disc_flags); 2573f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#else 2574f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG3 ("nfa_dm_disc_sm_execute(): state: %d, event:%d disc_flags: 0x%x", 257504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_state, event, nfa_dm_cb.disc_cb.disc_flags); 2576f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#endif 2577f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 257804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (nfa_dm_cb.disc_cb.disc_state) 257904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 258004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* RF Discovery State - Idle */ 258104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_IDLE: 2582f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_sm_idle (event, p_data); 258304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 258404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2585f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* RF Discovery State - Discovery */ 258604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_DISCOVERY: 2587f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_sm_discovery (event, p_data); 2588f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 258904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 259004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /*RF Discovery State - Wait for all discoveries */ 259104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_W4_ALL_DISCOVERIES: 259204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_w4_all_discoveries (event, p_data); 2593f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 259404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2595f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* RF Discovery State - Wait for host selection */ 259604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_W4_HOST_SELECT: 259704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_w4_host_select (event, p_data); 2598f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian break; 259904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 260004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* RF Discovery State - Poll mode activated */ 260104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_POLL_ACTIVE: 260204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_poll_active (event, p_data); 260304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2604f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 260504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* RF Discovery State - listen mode activated */ 260604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_LISTEN_ACTIVE: 2607f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_sm_listen_active (event, p_data); 260804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 260904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2610f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* RF Discovery State - listen mode sleep */ 261104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_LISTEN_SLEEP: 261204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_listen_sleep (event, p_data); 261304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 2614f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 261504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Listening in Low Power mode */ 261604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_LP_LISTEN: 2617f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_sm_lp_listen (event, p_data); 261804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 261904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 262004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* Activated in Low Power mode */ 262104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_LP_ACTIVE: 262204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_lp_active (event, p_data); 262304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian break; 262404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2625f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#if (BT_TRACE_VERBOSE == TRUE) 262604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG3 ("nfa_dm_disc_sm_execute (): new state: %s (%d), disc_flags: 0x%x", 262704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_state_2_str (nfa_dm_cb.disc_cb.disc_state), nfa_dm_cb.disc_cb.disc_state, 2628f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags); 262904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#else 263004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG2 ("nfa_dm_disc_sm_execute(): new state: %d, disc_flags: 0x%x", 2631f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_state, nfa_dm_cb.disc_cb.disc_flags); 263204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#endif 2633f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 263404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 263504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 263604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 263704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_add_rf_discover 2638f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 263904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Add discovery configuration and callback function 2640f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 2641f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns valid handle if success 264204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 264304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 264404839626ed859623901ebd3a5fd483982186b59dVignesh VenkatasubramaniantNFA_HANDLE nfa_dm_add_rf_discover (tNFA_DM_DISC_TECH_PROTO_MASK disc_mask, 2645f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_DM_DISC_HOST_ID host_id, 264604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DISCOVER_CBACK *p_disc_cback) 264704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2648f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian UINT8 xx; 264904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2650f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_add_rf_discover () disc_mask=0x%x", disc_mask); 265104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 265204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) 2653f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 265404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (!nfa_dm_cb.disc_cb.entry[xx].in_use) 265504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 265604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].in_use = TRUE; 265704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask = disc_mask; 265804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].host_id = host_id; 2659f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].p_disc_cback = p_disc_cback; 266004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[xx].disc_flags = NFA_DM_DISC_FLAGS_NOTIFY; 266104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return xx; 2662f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 266304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 266404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2665f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return NFA_HANDLE_INVALID; 266604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 266704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 266804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 2669f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 267004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_start_excl_discovery 267104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2672f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Start exclusive RF discovery 267304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 267404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 267504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 267604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 267704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_start_excl_discovery (tNFA_TECHNOLOGY_MASK poll_tech_mask, 267804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_LISTEN_CFG *p_listen_cfg, 267904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DISCOVER_CBACK *p_disc_cback) 2680f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 268104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0; 268204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2683f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_start_excl_discovery ()"); 268404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 268504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A) 268604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2687f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PA_T1T; 268804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PA_T2T; 2689f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PA_ISO_DEP; 269004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PA_NFC_DEP; 269104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_P_LEGACY; 269204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 269304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE) 2694f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 269504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PAA_NFC_DEP; 2696f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2697f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B) 269804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 269904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PB_ISO_DEP; 270004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 270104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F) 270204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 270304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PF_T3T; 270404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PF_NFC_DEP; 270504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2706f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE) 2707f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 270804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_PFA_NFC_DEP; 2709f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 271004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_ISO15693) 271104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 271204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_P_ISO15693; 2713f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 271404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_B_PRIME) 271504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2716f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_P_B_PRIME; 271704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 271804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (poll_tech_mask & NFA_TECHNOLOGY_MASK_KOVIO) 2719f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 272004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian poll_disc_mask |= NFA_DM_DISC_MASK_P_KOVIO; 272104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2722f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 272304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.in_use = TRUE; 2724f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.requested_disc_mask = poll_disc_mask; 272504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.host_id = NFA_DM_DISC_HOST_ID_DH; 272604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback = p_disc_cback; 2727f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.disc_flags = NFA_DM_DISC_FLAGS_NOTIFY; 272804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 272904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian memcpy (&nfa_dm_cb.disc_cb.excl_listen_config, p_listen_cfg, sizeof (tNFA_LISTEN_CFG)); 273004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 273104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_CMD, NULL); 2732f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 273304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2734f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian/******************************************************************************* 273504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 273604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_stop_excl_discovery 2737f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 273804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Stop exclusive RF discovery 273904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2740f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Returns void 274104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 274204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 2743f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianvoid nfa_dm_stop_excl_discovery (void) 274404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2745f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_stop_excl_discovery ()"); 274604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2747f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.in_use = FALSE; 274804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback = NULL; 2749f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian} 275004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 275104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 2752f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 275304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_delete_rf_discover 275404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 275504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Remove discovery configuration and callback function 2756f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 275704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 2758f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 275904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 276004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_delete_rf_discover (tNFA_HANDLE handle) 276104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 2762f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_delete_rf_discover () handle=0x%x", handle); 276304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 276404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (handle < NFA_DM_DISC_NUM_ENTRIES) 2765f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 276604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.entry[handle].in_use = FALSE; 276704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2768f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 276904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 277004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_ERROR0 ("Invalid discovery handle"); 2771f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 277204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 277304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 277404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 2775f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 277604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_rf_discover_select 277704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2778f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description Select target, protocol and RF interface 277904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 278004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns void 278104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2782f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 278304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanianvoid nfa_dm_rf_discover_select (UINT8 rf_disc_id, 2784f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian tNFA_NFC_PROTOCOL protocol, 278504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_INTF_TYPE rf_interface) 2786f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian{ 278704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_DM_DISC_SELECT_PARAMS select_params; 278804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian tNFA_CONN_EVT_DATA conn_evt; 2789f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 279004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG3 ("nfa_dm_disc_select () rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X", 279104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian rf_disc_id, protocol, rf_interface); 2792f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 279304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) 279404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 279504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian /* state is OK: notify the status when the response is received from NFCC */ 2796f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian select_params.rf_disc_id = rf_disc_id; 279704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian select_params.protocol = protocol; 2798f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian select_params.rf_interface = rf_interface; 279904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 280004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_NOTIFY; 280104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_SELECT_CMD, (tNFA_DM_RF_DISC_DATA *) &select_params); 2802f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 280304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 280404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2805f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* Wrong state: notify failed status right away */ 280604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian conn_evt.status = NFA_STATUS_FAILED; 280704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_conn_cback_event_notify (NFA_SELECT_RESULT_EVT, &conn_evt); 280804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 280904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2810f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 281104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 281204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 281304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_rf_deactivate 2814f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 281504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Description Deactivate NFC link 2816f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 281704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Returns NFA_STATUS_OK if success 281804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2819f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian*******************************************************************************/ 2820f0ceed9d146017d218d64ca946d5c2b31356389bVignesh VenkatasubramaniantNFA_STATUS nfa_dm_rf_deactivate (tNFA_DEACTIVATE_TYPE deactivate_type) 282104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 282204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG1 ("nfa_dm_rf_deactivate () deactivate_type:0x%X", deactivate_type); 282304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 282404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (deactivate_type == NFA_DEACTIVATE_TYPE_SLEEP) 2825f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 282604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_NFC_DEP) 282704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian deactivate_type = NFC_DEACTIVATE_TYPE_SLEEP_AF; 282804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 2829f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian deactivate_type = NFC_DEACTIVATE_TYPE_SLEEP; 283004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 283104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2832f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) 283304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 283404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_FAILED; 283504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2836f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) 283704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2838f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian if (deactivate_type == NFA_DEACTIVATE_TYPE_DISCOVERY) 283904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 284004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 284104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2842f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle); 284304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle); 284404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_OK; 2845f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 284604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else 284704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2848f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian /* it could be race condition. */ 284904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian NFA_TRACE_DEBUG0 ("nfa_dm_rf_deactivate (): already in discovery state"); 285004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_FAILED; 2851f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 285204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 285304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian else if (deactivate_type == NFA_DEACTIVATE_TYPE_IDLE) 2854f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 285504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian if (nfa_dm_cb.disc_cb.kovio_tle.in_use) 285604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 285704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle); 2858f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle); 285904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 286004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type); 286104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_OK; 2862f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 2863f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 286404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 286504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return NFA_STATUS_FAILED; 2866f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian } 286704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2868f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian else 286904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 287004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type); 2871f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return NFA_STATUS_OK; 287204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 287304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2874f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 287504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian#if (BT_TRACE_VERBOSE == TRUE) 287604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 287704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2878f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Function nfa_dm_disc_state_2_str 287904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2880f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description convert nfc discovery state to string 2881f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 288204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 2883f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic char *nfa_dm_disc_state_2_str (UINT8 state) 288404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 288504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (state) 288604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian { 2887f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_IDLE: 288804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "IDLE"; 288904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2890f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_DISCOVERY: 289104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "DISCOVERY"; 289204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2893f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_W4_ALL_DISCOVERIES: 289404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "W4_ALL_DISCOVERIES"; 2895f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 289604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RFST_W4_HOST_SELECT: 2897f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "W4_HOST_SELECT"; 2898f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2899f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_POLL_ACTIVE: 2900f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "POLL_ACTIVE"; 2901f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2902f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_LISTEN_ACTIVE: 2903f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "LISTEN_ACTIVE"; 2904f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2905f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_LISTEN_SLEEP: 2906f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "LISTEN_SLEEP"; 2907f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2908f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_LP_LISTEN: 2909f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "LP_LISTEN"; 2910f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2911f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RFST_LP_ACTIVE: 2912f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "LP_ACTIVE"; 291304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 291404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "Unknown"; 291504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2916f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 291704839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian/******************************************************************************* 2918f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** 291904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** Function nfa_dm_disc_event_2_str 292004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 2921f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian** Description convert nfc discovery RSP/NTF to string 292204839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian** 292304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian*******************************************************************************/ 2924f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanianstatic char *nfa_dm_disc_event_2_str (UINT8 event) 292504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian{ 292604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian switch (event) 2927f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian { 292804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_CMD: 2929f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "DISCOVER_CMD"; 293004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2931f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_RSP: 2932f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "DISCOVER_RSP"; 2933f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 293404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_NTF: 293504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "DISCOVER_NTF"; 293604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2937f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_SELECT_CMD: 293804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "SELECT_CMD"; 293904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2940f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DISCOVER_SELECT_RSP: 294104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "SELECT_RSP"; 2942f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2943f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_INTF_ACTIVATED_NTF: 294404839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "ACTIVATED_NTF"; 294504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 294604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_CMD: 2947f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "DEACTIVATE_CMD"; 294804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2949f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_RSP: 295004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "DEACTIVATE_RSP"; 295104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 2952f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_RF_DEACTIVATE_NTF: 295304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "DEACTIVATE_NTF"; 2954f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 2955f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian case NFA_DM_LP_LISTEN_CMD: 295604839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "NFA_DM_LP_LISTEN_CMD"; 2957f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian 295804839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian case NFA_DM_CORE_INTF_ERROR_NTF: 295904839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian return "INTF_ERROR_NTF"; 296004839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian 296104839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian } 2962f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian return "Unknown"; 296304839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian} 2964f0ceed9d146017d218d64ca946d5c2b31356389bVignesh Venkatasubramanian#endif /* BT_TRACE_VERBOSE */ 296504839626ed859623901ebd3a5fd483982186b59dVignesh Venkatasubramanian