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