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 is the main implementation file for the NFA EE.
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h"
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ee_int.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void nfa_ee_vs_cback (tNFC_VS_EVT event, BT_HDR *p_data);
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Global Variables
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* system manager control block definition */
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFA_DYNAMIC_MEMORY == FALSE
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_CB nfa_ee_cb;
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic const tNFA_SYS_REG nfa_ee_sys_reg =
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_sys_enable,
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_evt_hdlr,
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_sys_disable,
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_proc_nfcc_power_mode
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_EE_NUM_ACTIONS  (NFA_EE_MAX_EVT & 0x00ff)
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectconst tNFA_EE_SM_ACT nfa_ee_actions[] =
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NFA-EE action function/ internal events */
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_discover     ,   /* NFA_EE_API_DISCOVER_EVT      */
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_register     ,   /* NFA_EE_API_REGISTER_EVT      */
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_deregister   ,   /* NFA_EE_API_DEREGISTER_EVT    */
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_mode_set     ,   /* NFA_EE_API_MODE_SET_EVT      */
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_set_tech_cfg ,   /* NFA_EE_API_SET_TECH_CFG_EVT  */
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_set_proto_cfg,   /* NFA_EE_API_SET_PROTO_CFG_EVT */
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_add_aid      ,   /* NFA_EE_API_ADD_AID_EVT       */
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_remove_aid   ,   /* NFA_EE_API_REMOVE_AID_EVT    */
68ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith    nfa_ee_api_lmrt_size    ,   /* NFA_EE_API_LMRT_SIZE_EVT     */
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_update_now   ,   /* NFA_EE_API_UPDATE_NOW_EVT    */
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_connect      ,   /* NFA_EE_API_CONNECT_EVT       */
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_send_data    ,   /* NFA_EE_API_SEND_DATA_EVT     */
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_api_disconnect   ,   /* NFA_EE_API_DISCONNECT_EVT    */
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_disc_rsp     ,   /* NFA_EE_NCI_DISC_RSP_EVT      */
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_disc_ntf     ,   /* NFA_EE_NCI_DISC_NTF_EVT      */
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_mode_set_rsp ,   /* NFA_EE_NCI_MODE_SET_RSP_EVT  */
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_conn         ,   /* NFA_EE_NCI_CONN_EVT          */
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_conn         ,   /* NFA_EE_NCI_DATA_EVT          */
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_action_ntf   ,   /* NFA_EE_NCI_ACTION_NTF_EVT    */
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_nci_disc_req_ntf ,   /* NFA_EE_NCI_DISC_REQ_NTF_EVT  */
8040e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith    nfa_ee_nci_wait_rsp     ,   /* NFA_EE_NCI_WAIT_RSP_EVT      */
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_rout_timeout     ,   /* NFA_EE_ROUT_TIMEOUT_EVT      */
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_discv_timeout    ,   /* NFA_EE_DISCV_TIMEOUT_EVT     */
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_lmrt_to_nfcc         /* NFA_EE_CFG_TO_NFCC_EVT       */
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_init
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Initialize NFA EE control block
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  register to NFA SYS
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_init (void)
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int xx;
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_ee_init ()");
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* initialize control block */
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memset (&nfa_ee_cb, 0, sizeof (tNFA_EE_CB));
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++)
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_cb.ecb[xx].nfcee_id       = NFA_EE_INVALID;
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_cb.ecb[xx].ee_status      = NFC_NFCEE_STATUS_INACTIVE;
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_cb.ecb[NFA_EE_CB_4_DH].ee_status       = NFC_NFCEE_STATUS_ACTIVE;
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_cb.ecb[NFA_EE_CB_4_DH].nfcee_id        = NFC_DH_ID;
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* register message handler on NFA SYS */
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_sys_register (NFA_ID_EE,  &nfa_ee_sys_reg);
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_sys_enable
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Enable NFA EE
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_sys_enable (void)
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
12981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    if (nfa_ee_max_ee_cfg)
13081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    {
13181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        /* collect NFCEE information */
13281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        NFC_NfceeDiscover (TRUE);
13381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        nfa_sys_start_timer (&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL);
13481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    }
13581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    else
13681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    {
13781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        nfa_ee_cb.em_state = NFA_EE_EM_STATE_INIT_DONE;
13881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        nfa_sys_cback_notify_enable_complete (NFA_ID_EE);
13981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith    }
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_restore_one_ecb
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      activate the NFCEE and restore the routing when
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  changing power state from low power mode to full power mode
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_restore_one_ecb (tNFA_EE_ECB *p_cb)
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   mask;
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_NFCEE_MODE_SET_REVT    rsp;
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_NCI_MODE_SET        ee_msg;
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG4 ("nfa_ee_restore_one_ecb () nfcee_id:0x%x, ecb_flags:0x%x ee_status:0x%x ee_old_status: 0x%x", p_cb->nfcee_id, p_cb->ecb_flags, p_cb->ee_status, p_cb->ee_old_status);
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_cb->nfcee_id != NFA_EE_INVALID) && (p_cb->ee_status & NFA_EE_STATUS_RESTORING) == 0 && (p_cb->ee_old_status & NFA_EE_STATUS_RESTORING) != 0)
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb->ee_old_status &= ~NFA_EE_STATUS_RESTORING;
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        mask = nfa_ee_ecb_to_mask(p_cb);
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_cb->ee_status != p_cb->ee_old_status)
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_cb->ecb_flags   |= NFA_EE_ECB_FLAGS_RESTORE;
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (p_cb->ee_old_status == NFC_NFCEE_STATUS_ACTIVE)
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                NFC_NfceeModeSet (p_cb->nfcee_id, NFC_MODE_ACTIVATE);
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (nfa_ee_cb.ee_cfged & mask)
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    /* if any routing is configured on this NFCEE. need to mark this NFCEE as changed
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     * to cause the configuration to be sent to NFCC again */
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING;
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS;
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                NFC_NfceeModeSet (p_cb->nfcee_id, NFC_MODE_DEACTIVATE);
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE)
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* the initial NFCEE status after start up is the same as the current status and it's active:
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project             * process the same as the host gets activate rsp */
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_cb->ecb_flags   |= NFA_EE_ECB_FLAGS_RESTORE;
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfa_ee_cb.ee_cfged & mask)
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* if any routing is configured on this NFCEE. need to mark this NFCEE as changed
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                 * to cause the configuration to be sent to NFCC again */
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING;
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS;
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rsp.mode        = NFA_EE_MD_ACTIVATE;
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rsp.nfcee_id    = p_cb->nfcee_id;
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            rsp.status      = NFA_STATUS_OK;
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ee_msg.p_data   = &rsp;
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_ee_nci_mode_set_rsp ((tNFA_EE_MSG *) &ee_msg);
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_proc_nfcc_power_mode
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Restore NFA EE sub-module
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_nfcc_power_mode (UINT8 nfcc_power_mode)
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          xx;
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_ECB     *p_cb;
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN         proc_complete = TRUE;
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_ee_proc_nfcc_power_mode (): nfcc_power_mode=%d", nfcc_power_mode);
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if NFCC power state is change to full power */
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL)
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
22381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith        if (nfa_ee_max_ee_cfg)
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
22581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            p_cb = nfa_ee_cb.ecb;
22681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++)
22781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            {
22881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                p_cb->ee_old_status = 0;
22981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                if (xx >= nfa_ee_cb.cur_ee)
23081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    p_cb->nfcee_id = NFA_EE_INVALID;
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
23281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                if ((p_cb->nfcee_id != NFA_EE_INVALID) && (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS) && (p_cb->ee_status  != NFA_EE_STATUS_REMOVED))
23381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                {
23481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    proc_complete       = FALSE;
23581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    /* NFA_EE_STATUS_RESTORING bit makes sure the ee_status restore to ee_old_status
23681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                     * NFA_EE_STATUS_RESTORING bit is cleared in ee_status at NFCEE_DISCOVER NTF.
23781ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                     * NFA_EE_STATUS_RESTORING bit is cleared in ee_old_status at restoring the activate/inactive status after NFCEE_DISCOVER NTF */
23881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    p_cb->ee_status    |= NFA_EE_STATUS_RESTORING;
23981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    p_cb->ee_old_status = p_cb->ee_status;
24081ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    /* NFA_EE_FLAGS_RESTORE bit makes sure the routing/nci logical connection is restore to prior to entering low power mode */
24181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                    p_cb->ecb_flags    |= NFA_EE_ECB_FLAGS_RESTORE;
24281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                }
24381ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            }
24481ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            nfa_ee_cb.em_state          = NFA_EE_EM_STATE_RESTORING;
24581ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            nfa_ee_cb.num_ee_expecting  = 0;
24681ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            if (nfa_sys_is_register (NFA_ID_HCI))
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
24881ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                nfa_ee_cb.ee_flags   |= NFA_EE_FLAG_WAIT_HCI;
24981ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith                nfa_ee_cb.ee_flags   |= NFA_EE_FLAG_NOTIFY_HCI;
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
25181ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            NFC_NfceeDiscover (TRUE);
25281ad4777853d75c3259ce5f71847866b4e41f358Sherry Smith            nfa_sys_start_timer (&nfa_ee_cb.discv_timer, NFA_EE_DISCV_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL);
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_stop_timer (&nfa_ee_cb.timer);
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_cb.num_ee_expecting = 0;
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (proc_complete)
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_cback_notify_nfcc_power_mode_proc_complete (NFA_ID_EE);
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_proc_hci_info_cback
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      HCI initialization complete from power off sleep mode
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_hci_info_cback (void)
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          xx;
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_ECB     *p_cb;
27945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu    tNFA_EE_MSG     data;
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_ee_proc_hci_info_cback ()");
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if NFCC power state is change to full power */
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_cb.ee_flags   &= ~NFA_EE_FLAG_WAIT_HCI;
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_cb = nfa_ee_cb.ecb;
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++)
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* NCI spec says: An NFCEE_DISCOVER_NTF that contains a Protocol type of "HCI Access"
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         * SHALL NOT contain any other additional Protocol
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         * i.e. check only first supported NFCEE interface is HCI access */
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* NFA_HCI module handles restoring configurations for HCI access */
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_cb->ee_interface[0] != NFC_NFCEE_INTERFACE_HCI_ACCESS)
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_ee_restore_one_ecb (p_cb);
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
29745e68232b8524aca5165dca28b994ec8c11593b1Evan Chu
29845e68232b8524aca5165dca28b994ec8c11593b1Evan Chu    if (nfa_ee_restore_ntf_done())
29945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu    {
30045e68232b8524aca5165dca28b994ec8c11593b1Evan Chu        nfa_ee_check_restore_complete();
30145e68232b8524aca5165dca28b994ec8c11593b1Evan Chu        if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_INIT_DONE)
30245e68232b8524aca5165dca28b994ec8c11593b1Evan Chu        {
30345e68232b8524aca5165dca28b994ec8c11593b1Evan Chu            if (nfa_ee_cb.discv_timer.in_use)
30445e68232b8524aca5165dca28b994ec8c11593b1Evan Chu            {
30545e68232b8524aca5165dca28b994ec8c11593b1Evan Chu                nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
30645e68232b8524aca5165dca28b994ec8c11593b1Evan Chu                data.hdr.event = NFA_EE_DISCV_TIMEOUT_EVT;
30745e68232b8524aca5165dca28b994ec8c11593b1Evan Chu                nfa_ee_evt_hdlr((BT_HDR *)&data);
30845e68232b8524aca5165dca28b994ec8c11593b1Evan Chu            }
30945e68232b8524aca5165dca28b994ec8c11593b1Evan Chu        }
31045e68232b8524aca5165dca28b994ec8c11593b1Evan Chu    }
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_proc_evt
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process NFCEE related events from NFC stack
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_proc_evt (tNFC_RESPONSE_EVT event, void *p_data)
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_INT_EVT         int_event=0;
32640e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith    tNFA_EE_NCI_WAIT_RSP    cbk;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR                  *p_hdr;
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (event)
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_DISCOVER_REVT:                /* 4  NFCEE Discover response */
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        int_event   = NFA_EE_NCI_DISC_RSP_EVT;
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_INFO_REVT:                    /* 5  NFCEE Discover Notification */
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        int_event    = NFA_EE_NCI_DISC_NTF_EVT;
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_NFCEE_MODE_SET_REVT:                /* 6  NFCEE Mode Set response */
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        int_event   = NFA_EE_NCI_MODE_SET_RSP_EVT;
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_EE_ACTION_REVT:
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        int_event   = NFA_EE_NCI_ACTION_NTF_EVT;
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_EE_DISCOVER_REQ_REVT:               /* 10 EE Discover Req notification */
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        int_event   = NFA_EE_NCI_DISC_REQ_NTF_EVT;
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
35140e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith    case NFC_SET_ROUTING_REVT:
35240e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith        int_event   = NFA_EE_NCI_WAIT_RSP_EVT;
35340e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith        cbk.opcode  = NCI_MSG_RF_SET_ROUTING;
35440e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith        break;
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG2 ("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event, int_event);
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (int_event)
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_hdr           = (BT_HDR *) &cbk;
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        cbk.hdr.event   = int_event;
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        cbk.p_data      = p_data;
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_evt_hdlr (p_hdr);
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_ecb_to_mask
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Given a ecb, return the bit mask to be used in nfa_ee_cb.ee_cfged
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          the bitmask for the given ecb.
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_ee_ecb_to_mask (tNFA_EE_ECB *p_cb)
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   mask;
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   index;
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    index = (UINT8) (p_cb - nfa_ee_cb.ecb);
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    mask  = 1 << index;
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return mask;
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_find_ecb
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Return the ecb associated with the given nfcee_id
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFA_EE_ECB
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_ECB * nfa_ee_find_ecb (UINT8 nfcee_id)
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32  xx;
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_ECB *p_ret = NULL, *p_cb;
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_ee_find_ecb ()");
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfcee_id == NFC_DH_ID)
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_ret = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb = nfa_ee_cb.ecb;
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++)
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfcee_id == p_cb->nfcee_id)
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_ret = p_cb;
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                break;
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return p_ret;
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_find_ecb_by_conn_id
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Return the ecb associated with the given connection id
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFA_EE_ECB
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_EE_ECB * nfa_ee_find_ecb_by_conn_id (UINT8 conn_id)
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32  xx;
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_ECB *p_ret = NULL, *p_cb;
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_ee_find_ecb_by_conn_id ()");
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_cb = nfa_ee_cb.ecb;
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (conn_id == p_cb->conn_id)
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_ret = p_cb;
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return p_ret;
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_sys_disable
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deregister NFA EE from NFA SYS/DM
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_sys_disable (void)
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32  xx;
465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_ECB *p_cb;
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_MSG     msg;
4675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_ee_sys_disable ()");
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* report NFA_EE_DEREGISTER_EVT to all registered to EE */
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++)
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_ee_cb.p_ee_cback[xx])
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            msg.deregister.index     = xx;
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_ee_api_deregister (&msg);
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    nfa_ee_cb.num_ee_expecting  = 0;
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_cb = nfa_ee_cb.ecb;
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_cb->conn_st == NFA_EE_CONN_ST_CONN)
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfa_sys_is_graceful_disable ())
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* Disconnect NCI connection on graceful shutdown */
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                msg.disconnect.p_cb = p_cb;
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_ee_api_disconnect (&msg);
4925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen                nfa_ee_cb.num_ee_expecting++;
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* fake NFA_EE_DISCONNECT_EVT on ungraceful shutdown */
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                msg.conn.conn_id    = p_cb->conn_id;
498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                msg.conn.event      = NFC_CONN_CLOSE_CEVT;
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_ee_nci_conn (&msg);
500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
5035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
5045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    if (nfa_ee_cb.num_ee_expecting)
5055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    {
5065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_DISCONN;
5075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        nfa_ee_cb.em_state  = NFA_EE_EM_STATE_DISABLING;
5085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    }
5095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
5105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_sys_stop_timer (&nfa_ee_cb.timer);
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If Application initiated NFCEE discovery, fake/report the event */
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_report_disc_done (FALSE);
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* deregister message handler on NFA SYS */
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLED)
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_deregister (NFA_ID_EE);
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
5225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
5235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/*******************************************************************************
5245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
5255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function         nfa_ee_check_disable
5265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
5275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description      Check if it is safe to move to disabled state
5285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
5295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns          None
5305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
5315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/
5325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid nfa_ee_check_disable (void)
5335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{
5345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    if (!(nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN))
5355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    {
5365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
5375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        nfa_sys_deregister (NFA_ID_EE);
5385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    }
5395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen}
540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_reg_cback_enable_done
543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Allow a module to register to EE to be notified when NFA-EE
545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  finishes enable process
546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_ee_reg_cback_enable_done (tNFA_EE_ENABLE_DONE_CBACK *p_cback)
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_ee_cb.p_enable_cback = p_cback;
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_sm_st_2_str
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      convert nfa-ee state to string
561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_ee_sm_st_2_str (UINT8 state)
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (state)
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_INIT:
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "INIT";
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_INIT_DONE:
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "INIT_DONE";
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_RESTORING:
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "RESTORING";
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_DISABLING:
577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "DISABLING";
578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_DISABLED:
580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "DISABLED";
581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "Unknown";
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_sm_evt_2_str
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      convert nfa-ee evt to string
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfa_ee_sm_evt_2_str (UINT16 event)
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (event)
597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_DISCOVER_EVT:
599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_DISCOVER";
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_REGISTER_EVT:
601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_REGISTER";
602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_DEREGISTER_EVT:
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_DEREGISTER";
604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_MODE_SET_EVT:
605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_MODE_SET";
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_SET_TECH_CFG_EVT:
607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_SET_TECH_CFG";
608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_SET_PROTO_CFG_EVT:
609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_SET_PROTO_CFG";
610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_ADD_AID_EVT:
611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_ADD_AID";
612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_REMOVE_AID_EVT:
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_REMOVE_AID";
614ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith    case NFA_EE_API_LMRT_SIZE_EVT:
615ca0bff46ca93ed18142e20f03db5174399e1de75Sherry Smith        return "API_LMRT_SIZE";
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_UPDATE_NOW_EVT:
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_UPDATE_NOW";
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_CONNECT_EVT:
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_CONNECT";
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_SEND_DATA_EVT:
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_SEND_DATA";
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_API_DISCONNECT_EVT:
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "API_DISCONNECT";
624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_DISC_RSP_EVT:
625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_DISC_RSP";
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_DISC_NTF_EVT:
627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_DISC_NTF";
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_MODE_SET_RSP_EVT:
629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_MODE_SET";
630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_CONN_EVT:
631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_CONN";
632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_DATA_EVT:
633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_DATA";
634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_ACTION_NTF_EVT:
635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_ACTION";
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_NCI_DISC_REQ_NTF_EVT:
637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NCI_DISC_REQ";
63840e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith    case NFA_EE_NCI_WAIT_RSP_EVT:
63940e67c9ec7191cbda00cde97e4f988d1d5737762Sherry Smith        return "NCI_WAIT_RSP";
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_ROUT_TIMEOUT_EVT:
641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "ROUT_TIMEOUT";
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_DISCV_TIMEOUT_EVT:
643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "NFA_EE_DISCV_TIMEOUT_EVT";
644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_CFG_TO_NFCC_EVT:
645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "CFG_TO_NFCC";
646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return "Unknown";
648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_TRACE_VERBOSE */
651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ee_evt_hdlr
655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing event for NFA EE
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE if p_msg needs to be deallocated
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_ee_evt_hdlr (BT_HDR *p_msg)
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_EE_MSG *p_evt_data = (tNFA_EE_MSG *) p_msg;
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16  event = p_msg->event & 0x00ff;
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN act = FALSE;
667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG4 ("nfa_ee_evt_hdlr (): Event %s(0x%02x), State: %s(%d)",
670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_sm_evt_2_str (p_evt_data->hdr.event), p_evt_data->hdr.event,
671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_ee_sm_st_2_str (nfa_ee_cb.em_state), nfa_ee_cb.em_state);
672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG2 ("nfa_ee_evt_hdlr (): Event 0x%02x, State: %d", p_evt_data->hdr.event, nfa_ee_cb.em_state);
674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (nfa_ee_cb.em_state)
677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_INIT_DONE:
679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_RESTORING:
680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        act = TRUE;
681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_INIT:
683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_msg->event == NFA_EE_NCI_DISC_NTF_EVT) || (p_msg->event == NFA_EE_NCI_DISC_RSP_EVT))
684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            act = TRUE;
685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_EE_EM_STATE_DISABLING:
687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_msg->event == NFA_EE_NCI_CONN_EVT)
688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            act = TRUE;
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (act)
692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (event < NFA_EE_NUM_ACTIONS)
694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (*nfa_ee_actions[event]) (p_evt_data);
696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if the data event is not handled by action function, free the data packet */
701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_msg->event == NFA_EE_NCI_DATA_EVT)
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (p_evt_data->conn.p_data);
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
709