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