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