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 functions that interface with the NFC NCI transport.
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  On the receive side, it routes events to the appropriate handler
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  (callback). On the transmit side, it manages the command transmission.
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "gki.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "hcidefs.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_INCLUDED == TRUE)
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_api.h"
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h"
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h"
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_int.h"
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_int.h"
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_api.h"
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_int.h"
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "llcp_int.h"
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC mandates support for at least one logical connection;
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Update max_conn to the NFCC capability on InitRsp */
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_SET_MAX_CONN_DEFAULT()    {nfc_cb.max_conn = 1;}
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else /* NFC_RW_ONLY */
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define ce_init()
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define llcp_init()
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_SET_MAX_CONN_DEFAULT()
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_RW_ONLY */
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Declarations
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project****************************************************************************/
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFC_DYNAMIC_MEMORY == FALSE
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_CB nfc_cb;
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_NUM_INTERFACE_MAP   2
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_NUM_INTERFACE_MAP   1
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic const tNCI_DISCOVER_MAPS nfc_interface_mapping[NFC_NUM_INTERFACE_MAP] =
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Protocols that use Frame Interface do not need to be included in the interface mapping */
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_PROTOCOL_ISO_DEP,
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_INTERFACE_MODE_POLL_N_LISTEN,
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_INTERFACE_ISO_DEP
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ,
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* this can not be set here due to 2079xB0 NFCC issues */
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_PROTOCOL_NFC_DEP,
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_INTERFACE_MODE_POLL_N_LISTEN,
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NCI_INTERFACE_NFC_DEP
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_state_name
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the state name.
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NOTE             conditionally compiled to save memory.
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfc_state_name (UINT8 state)
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (state)
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_NONE:
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("NONE");
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_W4_HAL_OPEN:
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("W4_HAL_OPEN");
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_CORE_INIT:
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("CORE_INIT");
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_W4_POST_INIT_CPLT:
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("W4_POST_INIT_CPLT");
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_IDLE:
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("IDLE");
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_OPEN:
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("OPEN");
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_CLOSING:
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("CLOSING");
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_W4_HAL_CLOSE:
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("W4_HAL_CLOSE");
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFC_STATE_NFCC_POWER_OFF_SLEEP:
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("NFCC_POWER_OFF_SLEEP");
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("???? UNKNOWN STATE");
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**
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_hal_event_name
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the HAL event name.
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NOTE             conditionally compiled to save memory.
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic char *nfc_hal_event_name (UINT8 event)
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (event)
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_OPEN_CPLT_EVT:
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_OPEN_CPLT_EVT");
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_CLOSE_CPLT_EVT:
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_CLOSE_CPLT_EVT");
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_POST_INIT_CPLT_EVT:
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_POST_INIT_CPLT_EVT");
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_PRE_DISCOVER_CPLT_EVT:
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_PRE_DISCOVER_CPLT_EVT");
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_REQUEST_CONTROL_EVT:
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_REQUEST_CONTROL_EVT");
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_RELEASE_CONTROL_EVT:
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_RELEASE_CONTROL_EVT");
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_ERROR_EVT:
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("HAL_NFC_ERROR_EVT");
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("???? UNKNOWN EVENT");
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* BT_TRACE_VERBOSE == TRUE */
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_notify_enable_status
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Notify status of Enable/PowerOffSleep/PowerCycle
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfc_main_notify_enable_status (tNFC_STATUS nfc_status)
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_RESPONSE   evt_data;
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.status = nfc_status;
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.p_resp_cback)
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if getting out of PowerOffSleep mode or restarting NFCC */
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.flags & (NFC_FL_RESTARTING|NFC_FL_POWER_CYCLE_NFCC))
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.flags &= ~(NFC_FL_RESTARTING|NFC_FL_POWER_CYCLE_NFCC);
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_status != NFC_STATUS_OK)
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_cb.flags |= NFC_FL_POWER_OFF_SLEEP;
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (*nfc_cb.p_resp_cback) (NFC_NFCC_RESTART_REVT, &evt_data);
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (*nfc_cb.p_resp_cback) (NFC_ENABLE_REVT, &evt_data);
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
2055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_enabled
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      NFCC enabled, proceed with stack start up.
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_enabled (tNFC_STATUS nfc_status, BT_HDR *p_init_rsp_msg)
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_RESPONSE evt_data;
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB  *p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   *p;
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   num_interfaces = 0, xx;
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int     yy = 0;
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memset (&evt_data, 0, sizeof (tNFC_RESPONSE));
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_status == NCI_STATUS_OK)
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_IDLE);
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p = (UINT8 *) (p_init_rsp_msg + 1) + p_init_rsp_msg->offset + NCI_MSG_HDR_SIZE + 1;
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* we currently only support NCI of the same version.
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        * We may need to change this, when we support multiple version of NFCC */
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.enable.nci_version = NCI_VERSION;
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        STREAM_TO_UINT32 (evt_data.enable.nci_features, p);
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        STREAM_TO_UINT8 (num_interfaces, p);
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.enable.nci_interfaces = 0;
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        for (xx = 0; xx < num_interfaces; xx++)
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if ((*p) <= NCI_INTERFACE_MAX)
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.enable.nci_interfaces |= (1 << (*p));
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else if (((*p) > NCI_INTERFACE_FIRST_VS) && (yy < NFC_NFCC_MAX_NUM_VS_INTERFACE))
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* save the VS RF interface in control block, if there's still room */
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_cb.vs_interface[yy++] = *p;
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p++;
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.nci_interfaces    = evt_data.enable.nci_interfaces;
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        memcpy (evt_data.enable.vs_interface, nfc_cb.vs_interface, NFC_NFCC_MAX_NUM_VS_INTERFACE);
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.enable.max_conn = *p++;
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        STREAM_TO_UINT16 (evt_data.enable.max_ce_table, p);
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.max_ce_table          = evt_data.enable.max_ce_table;
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.nci_features          = evt_data.enable.nci_features;
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.max_conn              = evt_data.enable.max_conn;
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.nci_ctrl_size         = *p++; /* Max Control Packet Payload Length */
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb->init_credits           = p_cb->num_buff = 0;
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        STREAM_TO_UINT16 (evt_data.enable.max_param_size, p);
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_conn_id (p_cb, NFC_RF_CONN_ID);
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.enable.manufacture_id   = *p++;
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        STREAM_TO_ARRAY (evt_data.enable.nfcc_info, p, NFC_NFCC_INFO_LEN);
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_DiscoveryMap (nfc_cb.num_disc_maps, (tNCI_DISCOVER_MAPS *) nfc_cb.p_disc_maps, NULL);
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* else not successful. the buffers will be freed in nfc_free_conn_cb () */
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.flags & NFC_FL_RESTARTING)
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_set_state (NFC_STATE_NFCC_POWER_OFF_SLEEP);
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_free_conn_cb (p_cb);
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* if NFCC didn't respond to CORE_RESET or CORE_INIT */
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_cb.nfc_state == NFC_STATE_CORE_INIT)
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* report status after closing HAL */
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_cb.p_hal->close ();
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return;
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_set_state (NFC_STATE_NONE);
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_main_notify_enable_status (nfc_status);
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_set_state
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set the state of NFC stack
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_set_state (tNFC_STATE nfc_state)
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG4 ("nfc_set_state %d (%s)->%d (%s)", nfc_cb.nfc_state, nfc_state_name (nfc_cb.nfc_state), nfc_state, nfc_state_name (nfc_state));
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG2 ("nfc_set_state %d->%d", nfc_cb.nfc_state, nfc_state);
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nfc_state = nfc_state;
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_gen_cleanup
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Clean up for both going into low power mode and disabling NFC
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_gen_cleanup (void)
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.flags  &= ~NFC_FL_DEACTIVATING;
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* the HAL pre-discover is still active - clear the pending flag/free the buffer */
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.flags & NFC_FL_DISCOVER_PENDING)
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags &= ~NFC_FL_DISCOVER_PENDING;
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (nfc_cb.p_disc_pending);
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_disc_pending = NULL;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3291ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu    nfc_cb.flags &= ~(NFC_FL_CONTROL_REQUESTED | NFC_FL_CONTROL_GRANTED | NFC_FL_HAL_REQUESTED);
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_stop_timer (&nfc_cb.deactivate_timer);
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Reset the connection control blocks */
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_reset_all_conn_cbs ();
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.p_nci_init_rsp)
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (nfc_cb.p_nci_init_rsp);
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_nci_init_rsp = NULL;
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* clear any pending CMD/RSP */
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_main_flush_cmd_queue ();
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_handle_hal_evt
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Handle BT_EVT_TO_NFC_MSGS
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_main_handle_hal_evt (tNFC_HAL_EVT_MSG *p_msg)
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8  *ps;
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG1 ("nfc_main_handle_hal_evt(): HAL event=0x%x", p_msg->hal_evt);
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (p_msg->hal_evt)
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_OPEN_CPLT_EVT: /* only for failure case */
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_enabled (NFC_STATUS_FAILED, NULL);
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_CLOSE_CPLT_EVT:
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.p_resp_cback)
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_cb.nfc_state == NFC_STATE_W4_HAL_CLOSE)
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (nfc_cb.flags & NFC_FL_POWER_OFF_SLEEP)
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_cb.flags &= ~NFC_FL_POWER_OFF_SLEEP;
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_set_state (NFC_STATE_NFCC_POWER_OFF_SLEEP);
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    (*nfc_cb.p_resp_cback) (NFC_NFCC_POWER_OFF_REVT, NULL);
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                else
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_set_state (NFC_STATE_NONE);
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    (*nfc_cb.p_resp_cback) (NFC_DISABLE_REVT, NULL);
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_cb.p_resp_cback = NULL;
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* found error during initialization */
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_set_state (NFC_STATE_NONE);
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_main_notify_enable_status (NFC_STATUS_FAILED);
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_POST_INIT_CPLT_EVT:
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.p_nci_init_rsp)
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /*
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** if NFC_Disable() is called before receiving HAL_NFC_POST_INIT_CPLT_EVT,
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** then wait for HAL_NFC_CLOSE_CPLT_EVT.
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            */
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_cb.nfc_state == NFC_STATE_W4_POST_INIT_CPLT)
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (p_msg->status == HAL_NFC_STATUS_OK)
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_enabled (NCI_STATUS_OK, nfc_cb.p_nci_init_rsp);
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                else /* if post initailization failed */
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_enabled (NCI_STATUS_FAILED, NULL);
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (nfc_cb.p_nci_init_rsp);
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.p_nci_init_rsp = NULL;
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_PRE_DISCOVER_CPLT_EVT:
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* restore the command window, no matter if the discover command is still pending */
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.nci_cmd_window = NCI_MAX_CMD_WINDOW;
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags         &= ~NFC_FL_CONTROL_GRANTED;
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.flags & NFC_FL_DISCOVER_PENDING)
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* issue the discovery command now, if it is still pending */
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.flags &= ~NFC_FL_DISCOVER_PENDING;
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ps            = (UINT8 *)nfc_cb.p_disc_pending;
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nci_snd_discover_cmd (*ps, (tNFC_DISCOVER_PARAMS *)(ps + 1));
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (nfc_cb.p_disc_pending);
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.p_disc_pending = NULL;
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* check if there's other pending commands */
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_check_cmd_queue (NULL);
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_msg->status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT)
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_event_status (NFC_NFCC_TIMEOUT_REVT, NFC_STATUS_HW_TIMEOUT);
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_REQUEST_CONTROL_EVT:
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags    |= NFC_FL_CONTROL_REQUESTED;
4411ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu        nfc_cb.flags    |= NFC_FL_HAL_REQUESTED;
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_ncif_check_cmd_queue (NULL);
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_RELEASE_CONTROL_EVT:
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.flags & NFC_FL_CONTROL_GRANTED)
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.flags &= ~NFC_FL_CONTROL_GRANTED;
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.nci_cmd_window = NCI_MAX_CMD_WINDOW;
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_check_cmd_queue (NULL);
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (p_msg->status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT)
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_ncif_event_status (NFC_NFCC_TIMEOUT_REVT, NFC_STATUS_HW_TIMEOUT);
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_ERROR_EVT:
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        switch (p_msg->status)
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case HAL_NFC_STATUS_ERR_TRANSPORT:
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Notify app of transport error */
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_cb.p_resp_cback)
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                (*nfc_cb.p_resp_cback) (NFC_NFCC_TRANSPORT_ERR_REVT, NULL);
465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* if enabling NFC, notify upper layer of failure after closing HAL */
467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (nfc_cb.nfc_state < NFC_STATE_IDLE)
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfc_enabled (NFC_STATUS_FAILED, NULL);
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case HAL_NFC_STATUS_ERR_CMD_TIMEOUT:
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_event_status (NFC_NFCC_TIMEOUT_REVT, NFC_STATUS_HW_TIMEOUT);
476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* if enabling NFC, notify upper layer of failure after closing HAL */
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfc_cb.nfc_state < NFC_STATE_IDLE)
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_enabled (NFC_STATUS_FAILED, NULL);
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return;
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        default:
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_TRACE_ERROR1 ("nfc_main_handle_hal_evt (): unhandled event (0x%x).", p_msg->hal_evt);
492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_flush_cmd_queue
500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called when setting power off sleep state.
502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_main_flush_cmd_queue (void)
507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR *p_msg;
509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG0 ("nfc_main_flush_cmd_queue ()");
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* initialize command window */
513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nci_cmd_window = NCI_MAX_CMD_WINDOW;
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Stop command-pending timer */
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_stop_timer(&nfc_cb.nci_wait_rsp_timer);
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* dequeue and free buffer */
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while ((p_msg = (BT_HDR *)GKI_dequeue (&nfc_cb.nci_cmd_xmit_q)) != NULL)
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (p_msg);
522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_post_hal_evt
528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function posts HAL event to NFC_TASK
530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_main_post_hal_evt (UINT8 hal_evt, tHAL_NFC_STATUS status)
535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_HAL_EVT_MSG *p_msg;
537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFC_HAL_EVT_MSG *) GKI_getbuf (sizeof(tNFC_HAL_EVT_MSG))) != NULL)
539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Initialize BT_HDR */
541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.len    = 0;
542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event  = BT_EVT_TO_NFC_MSGS;
543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.offset = 0;
544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.layer_specific = 0;
545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hal_evt = hal_evt;
546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->status  = status;
547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_TRACE_ERROR0 ("nfc_main_post_hal_evt (): No buffer");
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_hal_cback
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      HAL event handler
561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfc_main_hal_cback(UINT8 event, tHAL_NFC_STATUS status)
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG3 ("nfc_main_hal_cback event: %s(0x%x), status=%d",
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                       nfc_hal_event_name (event), event, status);
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG2 ("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (event)
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_OPEN_CPLT_EVT:
577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /*
578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ** if NFC_Disable() is called before receiving HAL_NFC_OPEN_CPLT_EVT,
579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ** then wait for HAL_NFC_CLOSE_CPLT_EVT.
580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        */
581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.nfc_state == NFC_STATE_W4_HAL_OPEN)
582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (status == HAL_NFC_STATUS_OK)
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* Notify NFC_TASK that NCI tranport is initialized */
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                GKI_send_event (NFC_TASK, NFC_TASK_EVT_TRANSPORT_READY);
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfc_main_post_hal_evt (event, status);
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_CLOSE_CPLT_EVT:
596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_POST_INIT_CPLT_EVT:
597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_PRE_DISCOVER_CPLT_EVT:
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_REQUEST_CONTROL_EVT:
599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_RELEASE_CONTROL_EVT:
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case HAL_NFC_ERROR_EVT:
601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_main_post_hal_evt (event, status);
602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_TRACE_DEBUG1 ("nfc_main_hal_cback unhandled event %x", event);
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfc_main_hal_data_cback
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      HAL data event handler
615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfc_main_hal_data_cback(UINT16 data_len, UINT8   *p_data)
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR *p_msg;
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* ignore all data while shutting down NFCC */
624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.nfc_state == NFC_STATE_W4_HAL_CLOSE)
625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_data)
630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_msg = (BT_HDR *) GKI_getpoolbuf (NFC_NCI_POOL_ID)) != NULL)
632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Initialize BT_HDR */
634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->len    = data_len;
635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->event  = BT_EVT_TO_NFC_NCI;
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->offset = NFC_RECEIVE_MSGS_OFFSET;
637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* no need to check length, it always less than pool size */
639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy ((UINT8 *)(p_msg + 1) + p_msg->offset, p_data, p_msg->len);
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_ERROR0 ("nfc_main_hal_data_cback (): No buffer");
646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_Enable
653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function enables NFC. Prior to calling NFC_Enable:
655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - the NFCC must be powered up, and ready to receive commands.
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - GKI must be enabled
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - NFC_TASK must be started
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - NCIT_TASK must be started (if using dedicated NCI transport)
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  This function opens the NCI transport (if applicable),
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  resets the NFC controller, and initializes the NFC subsystems.
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  When the NFC startup procedure is completed, an
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC_ENABLE_REVT is returned to the application using the
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  tNFC_RESPONSE_CBACK.
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_Enable (tNFC_RESPONSE_CBACK *p_cback)
671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API0 ("NFC_Enable ()");
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Validate callback */
675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (!p_cback)
676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFC_STATUS_INVALID_PARAM);
678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.p_resp_cback = p_cback;
680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Open HAL transport. */
682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_set_state (NFC_STATE_W4_HAL_OPEN);
683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.p_hal->open (nfc_main_hal_cback, nfc_main_hal_data_cback);
684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFC_STATUS_OK);
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_Disable
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function performs clean up routines for shutting down
693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC and closes the NCI transport (if using dedicated NCI
694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport).
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  When the NFC shutdown procedure is completed, an
697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC_DISABLED_REVT is returned to the application using the
698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  tNFC_RESPONSE_CBACK.
699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NFC_Disable (void)
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API1 ("NFC_Disable (): nfc_state = %d", nfc_cb.nfc_state);
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
70785b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu    if ((nfc_cb.nfc_state == NFC_STATE_NONE) || (nfc_cb.nfc_state == NFC_STATE_NFCC_POWER_OFF_SLEEP))
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_NONE);
710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.p_resp_cback)
711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (*nfc_cb.p_resp_cback) (NFC_DISABLE_REVT, NULL);
713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.p_resp_cback = NULL;
714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Close transport and clean up */
719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_task_shutdown_nfcc ();
720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_Init
725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function initializes control block for NFC
727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          nothing
729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NFC_Init (tHAL_NFC_ENTRY *p_hal_entry_tbl)
732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int xx;
734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Clear nfc control block */
736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memset (&nfc_cb, 0, sizeof (tNFC_CB));
737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Reset the nfc control block */
739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NCI_MAX_CONN_CBS; xx++)
740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.conn_cb[xx].conn_id = NFC_ILLEGAL_CONN_ID;
742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NCI init */
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.p_hal            = p_hal_entry_tbl;
746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nfc_state        = NFC_STATE_NONE;
747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nci_cmd_window   = NCI_MAX_CMD_WINDOW;
748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nci_wait_rsp_tout= NFC_CMD_CMPL_TIMEOUT;
749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.p_disc_maps      = nfc_interface_mapping;
750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.num_disc_maps    = NFC_NUM_INTERFACE_MAP;
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.trace_level      = NFC_INITIAL_TRACE_LEVEL;
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.nci_ctrl_size    = NCI_CTRL_INIT_SIZE;
753a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    nfc_cb.reassembly       = TRUE;
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    rw_init ();
756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ce_init ();
757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    llcp_init ();
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_SET_MAX_CONN_DEFAULT ();
759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_GetLmrtSize
764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Called by application wto query the Listen Mode Routing
766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Table size supported by NFCC
767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          Listen Mode Routing Table size
769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT16 NFC_GetLmrtSize (void)
772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 size = 0;
774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    size = nfc_cb.max_ce_table;
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return size;
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_SetConfig
784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to send the configuration parameter
786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  TLV to NFCC. The response from NFCC is reported by
787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  tNFC_RESPONSE_CBACK as NFC_SET_CONFIG_REVT.
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       tlv_size - the length of p_param_tlvs.
790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_param_tlvs - the parameter ID/Len/Value list
791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_SetConfig (UINT8     tlv_size,
796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8    *p_param_tlvs)
797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return nci_snd_core_set_config (p_param_tlvs, tlv_size);
799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_GetConfig
804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to retrieve the parameter TLV from NFCC.
806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  as NFC_GET_CONFIG_REVT.
808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       num_ids - the number of parameter IDs
810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_param_ids - the parameter ID list.
811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_GetConfig (UINT8     num_ids,
816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8    *p_param_ids)
817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return nci_snd_core_get_config (p_param_ids, num_ids);
819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_DiscoveryMap
824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to set the discovery interface mapping.
826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK as.
827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC_MAP_DEVT.
828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       num - the number of items in p_params.
830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_maps - the discovery interface mappings
831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_cback - the discovery callback function
832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_DiscoveryMap (UINT8 num, tNFC_DISCOVER_MAPS *p_maps,
837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                        tNFC_DISCOVER_CBACK *p_cback)
838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   num_disc_maps = num;
840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   xx, yy, num_intf, intf_mask;
841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_DISCOVER_MAPS  max_maps[NFC_NFCC_MAX_NUM_VS_INTERFACE + NCI_INTERFACE_MAX];
842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN is_supported;
843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_cb.p_discv_cback = p_cback;
845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    num_intf             = 0;
846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_DEBUG1 ("nci_interfaces supported by NFCC: 0x%x", nfc_cb.nci_interfaces);
847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < num_disc_maps; xx++)
848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        is_supported = FALSE;
850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_maps[xx].intf_type > NCI_INTERFACE_MAX)
851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            for (yy = 0; yy < NFC_NFCC_MAX_NUM_VS_INTERFACE; yy++)
853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (nfc_cb.vs_interface[yy] == p_maps[xx].intf_type)
855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    is_supported    = TRUE;
856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_DEBUG3 ("[%d]: vs intf_type:0x%x is_supported:%d", xx, p_maps[xx].intf_type, is_supported);
858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            intf_mask = (1 << (p_maps[xx].intf_type));
862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (intf_mask & nfc_cb.nci_interfaces)
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                is_supported    = TRUE;
865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_DEBUG4 ("[%d]: intf_type:%d intf_mask: 0x%x is_supported:%d", xx, p_maps[xx].intf_type, intf_mask, is_supported);
867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (is_supported)
869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (&max_maps[num_intf++], &p_maps[xx], sizeof (tNFC_DISCOVER_MAPS));
870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFC_TRACE_WARNING1 ("NFC_DiscoveryMap interface=0x%x is not supported by NFCC", p_maps[xx].intf_type);
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return nci_snd_discover_map_cmd (num_intf, (tNCI_DISCOVER_MAPS *) max_maps);
877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_DiscoveryStart
882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to start Polling and/or Listening.
884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK as.
885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFC_START_DEVT. The notification from NFCC is reported by
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  tNFC_DISCOVER_CBACK as NFC_RESULT_DEVT.
887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       num_params - the number of items in p_params.
889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_params - the discovery parameters
890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_cback - the discovery callback function
891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_DiscoveryStart (UINT8                 num_params,
896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                tNFC_DISCOVER_PARAMS *p_params,
897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                tNFC_DISCOVER_CBACK  *p_cback)
898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   *p;
900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int     params_size;
901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS status = NFC_STATUS_NO_BUFFERS;
902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API0 ("NFC_DiscoveryStart");
904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.p_disc_pending)
905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_TRACE_ERROR0 ("There's pending NFC_DiscoveryStart");
907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = NFC_STATUS_BUSY;
908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_discv_cback = p_cback;
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags        |= NFC_FL_DISCOVER_PENDING;
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags        |= NFC_FL_CONTROL_REQUESTED;
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        params_size          = sizeof (tNFC_DISCOVER_PARAMS) * num_params;
915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_disc_pending = GKI_getbuf ((UINT16)(BT_HDR_SIZE + 1 + params_size));
916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfc_cb.p_disc_pending)
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p       = (UINT8 *)nfc_cb.p_disc_pending;
919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            *p++    = num_params;
920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (p, p_params, params_size);
921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            status = NFC_STATUS_CMD_STARTED;
922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_ncif_check_cmd_queue (NULL);
923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API1 ("NFC_DiscoveryStart status: 0x%x", status);
927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_DiscoverySelect
933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      If tNFC_DISCOVER_CBACK reports status=NFC_MULTIPLE_PROT,
935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the application needs to use this function to select the
936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the logical endpoint to continue. The response from NFCC is
937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  reported by tNFC_DISCOVER_CBACK as NFC_SELECT_DEVT.
938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       rf_disc_id - The ID identifies the remote device.
940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  protocol - the logical endpoint on the remote devide
941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  rf_interface - the RF interface to communicate with NFCC
942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_DiscoverySelect (UINT8    rf_disc_id,
947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 UINT8    protocol,
948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 UINT8    rf_interface)
949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return nci_snd_discover_select_cmd (rf_disc_id, protocol, rf_interface);
951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_ConnCreate
956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to create a logical connection with
958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFCC for data exchange.
959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       dest_type - the destination type
961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  id   - the NFCEE ID or RF Discovery ID .
962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  protocol   - the protocol.
963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_cback - the connection callback function
964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_ConnCreate (UINT8            dest_type,
969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            UINT8            id,
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            UINT8            protocol,
971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            tNFC_CONN_CBACK *p_cback)
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS     status = NFC_STATUS_FAILED;
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB    *p_cb;
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           num_tlv=0, tlv_size=0;
976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           param_tlvs[4], *pp;
977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_cb = nfc_alloc_conn_cb (p_cback);
979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_cb)
980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb->id = id;
982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        pp = param_tlvs;
983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (dest_type == NCI_DEST_TYPE_NFCEE)
984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            num_tlv = 1;
986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, NCI_CON_CREATE_TAG_NFCEE_VAL);
987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, 2);
988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, id);
989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, protocol);
990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            tlv_size = 4;
991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (dest_type == NCI_DEST_TYPE_REMOTE)
993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            num_tlv = 1;
995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, NCI_CON_CREATE_TAG_RF_DISC_ID);
996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, 1);
997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UINT8_TO_STREAM (pp, id);
998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            tlv_size = 3;
999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (dest_type == NCI_DEST_TYPE_NFCC)
1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_cb->id = NFC_TEST_ID;
1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Add handling of NCI_DEST_TYPE_REMOTE when more RF interface definitions are added */
1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb->act_protocol = protocol;
1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_cb->p_cback = p_cback;
1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = nci_snd_core_conn_create (dest_type, num_tlv, tlv_size, param_tlvs);
1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (status == NFC_STATUS_FAILED)
1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_free_conn_cb (p_cb);
1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_ConnClose
1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to close a logical connection with
1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFCC.
1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       conn_id - the connection id.
1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_ConnClose (UINT8 conn_id)
1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB *p_cb = nfc_find_conn_cb_by_conn_id (conn_id);
1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS     status = NFC_STATUS_FAILED;
1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_cb)
1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = nci_snd_core_conn_close (conn_id);
1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_SetStaticRfCback
1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to update the data callback function
1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  to receive the data for the given connection id.
1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       p_cback - the connection callback function
1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          Nothing
1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NFC_SetStaticRfCback (tNFC_CONN_CBACK    *p_cback)
1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB * p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_cb->p_cback = p_cback;
1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* just in case DH has received NCI data before the data callback is set
1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project     * check if there's any data event to report on this connection id */
1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfc_data_event (p_cb);
1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1062a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         NFC_SetReassemblyFlag
1063a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1064a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      This function is called to set if nfc will reassemble
1065a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  nci packet as much as its buffer can hold or it should not
1066a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  reassemble but forward the fragmented nci packet to layer above.
1067a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  If nci data pkt is fragmented, nfc may send multiple
1068a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  NFC_DATA_CEVT with status NFC_STATUS_CONTINUE before sending
1069a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  NFC_DATA_CEVT with status NFC_STATUS_OK based on reassembly
1070a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  configuration and reassembly buffer size
1071a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1072a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Parameters       reassembly - flag to indicate if nfc may reassemble or not
1073a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1074a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns          Nothing
1075a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1076a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
1077a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid NFC_SetReassemblyFlag (BOOLEAN    reassembly)
1078a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
1079a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    nfc_cb.reassembly = reassembly;
1080a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
1081a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
1082a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
1083a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_SendData
1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to send the given data packet
1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  to the connection identified by the given connection id.
1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       conn_id - the connection id.
1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_data - the data packet.
1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  p_data->offset must be >= NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE
1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The data payload starts at ((UINT8 *) (p_data + 1) + p_data->offset)
1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_SendData (UINT8       conn_id,
1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          BT_HDR     *p_data)
1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS     status = NFC_STATUS_FAILED;
1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB *p_cb = nfc_find_conn_cb_by_conn_id (conn_id);
1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_cb && p_data && p_data->offset >= NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE)
1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = nfc_ncif_send_data (p_cb, p_data);
1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (status != NFC_STATUS_OK)
1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (p_data);
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_FlushData
1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to discard the tx data queue of
1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the given connection id.
1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       conn_id - the connection id.
1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_FlushData (UINT8       conn_id)
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS     status = NFC_STATUS_FAILED;
1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB    *p_cb = nfc_find_conn_cb_by_conn_id (conn_id);
1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    void            *p_buf;
1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_cb)
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status  = NFC_STATUS_OK;
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        while ((p_buf = GKI_dequeue (&p_cb->tx_q)) != NULL)
1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (p_buf);
1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_Deactivate
1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to stop the discovery process or
1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  put the listen device in sleep mode or terminate the NFC link.
1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK
1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  as NFC_DEACTIVATE_DEVT.
1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Parameters       deactivate_type - NFC_DEACTIVATE_TYPE_IDLE, to IDLE mode.
1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                                    NFC_DEACTIVATE_TYPE_SLEEP to SLEEP mode.
1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                                    NFC_DEACTIVATE_TYPE_SLEEP_AF to SLEEP_AF mode.
1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_Deactivate (tNFC_DEACT_TYPE deactivate_type)
1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_CONN_CB * p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_STATUS  status = NFC_STATUS_OK;
1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API3 ("NFC_Deactivate %d (%s) deactivate_type:%d", nfc_cb.nfc_state, nfc_state_name (nfc_cb.nfc_state), deactivate_type);
1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API2 ("NFC_Deactivate %d deactivate_type:%d", nfc_cb.nfc_state, deactivate_type);
1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.flags & NFC_FL_DISCOVER_PENDING)
1171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* the HAL pre-discover is still active - clear the pending flag */
1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags &= ~NFC_FL_DISCOVER_PENDING;
11741ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu        if (!(nfc_cb.flags & NFC_FL_HAL_REQUESTED))
11751ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu        {
11761ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu            /* if HAL did not request for control, clear this bit now */
11771ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu            nfc_cb.flags &= ~NFC_FL_CONTROL_REQUESTED;
11781ba9dcccf5b342bd74a2f8213b7ed3be78b9db44Evan Chu        }
1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (nfc_cb.p_disc_pending);
1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_disc_pending = NULL;
1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return NFC_STATUS_OK;
1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.nfc_state == NFC_STATE_OPEN)
1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_CLOSING);
1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFC_TRACE_DEBUG3 ( "act_protocol %d credits:%d/%d", p_cb->act_protocol, p_cb->init_credits, p_cb->num_buff);
1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_cb->act_protocol == NCI_PROTOCOL_NFC_DEP) &&
1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (p_cb->init_credits != p_cb->num_buff))
1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.flags           |= NFC_FL_DEACTIVATING;
1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_cb.deactivate_timer.param = (TIMER_PARAM_TYPE) deactivate_type;
1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfc_start_timer (&nfc_cb.deactivate_timer , (UINT16) (NFC_TTYPE_WAIT_2_DEACTIVATE), NFC_DEACTIVATE_TIMEOUT);
1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return status;
1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = nci_snd_deactivate_cmd (deactivate_type);
1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_UpdateRFCommParams
1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to update RF Communication parameters
1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  once the Frame RF Interface has been activated.
1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  as NFC_RF_COMM_PARAMS_UPDATE_REVT.
1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_UpdateRFCommParams (tNFC_RF_COMM_PARAMS *p_params)
1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 tlvs[12];
1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 *p = tlvs;
1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 data_exch_config;
1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* RF Technology and Mode */
1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_params->include_rf_tech_mode)
1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, NCI_RF_PARAM_ID_TECH_N_MODE);
1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, 1);
1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, p_params->rf_tech_n_mode);
1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Transmit Bit Rate */
1230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_params->include_tx_bit_rate)
1231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, NCI_RF_PARAM_ID_TX_BIT_RATE);
1233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, 1);
1234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, p_params->tx_bit_rate);
1235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Receive Bit Rate */
1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_params->include_tx_bit_rate)
1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, NCI_RF_PARAM_ID_RX_BIT_RATE);
1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, 1);
1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, p_params->rx_bit_rate);
1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NFC-B Data Exchange Configuration */
1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_params->include_nfc_b_config)
1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, NCI_RF_PARAM_ID_B_DATA_EX_PARAM);
1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, 1);
1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        data_exch_config =  (p_params->min_tr0 & 0x03) << 6;          /* b7b6 : Mininum TR0 */
1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        data_exch_config |= (p_params->min_tr1 & 0x03) << 4;          /* b5b4 : Mininum TR1 */
1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        data_exch_config |= (p_params->suppression_eos & 0x01) << 3;  /* b3 :   Suppression of EoS */
1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        data_exch_config |= (p_params->suppression_sos & 0x01) << 2;  /* b2 :   Suppression of SoS */
1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        data_exch_config |= (p_params->min_tr2 & 0x03);               /* b1b0 : Mininum TR2 */
1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        UINT8_TO_STREAM (p, data_exch_config);
1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return nci_snd_parameter_update_cmd (tlvs, (UINT8) (p - tlvs));
1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_SetPowerOffSleep
1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function closes/opens transport and turns off/on NFCC.
1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_SetPowerOffSleep (BOOLEAN enable)
1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API1 ("NFC_SetPowerOffSleep () enable = %d", enable);
1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (enable == FALSE)
1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&(nfc_cb.nfc_state == NFC_STATE_NFCC_POWER_OFF_SLEEP)  )
1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags |= NFC_FL_RESTARTING;
1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* open transport */
1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_set_state (NFC_STATE_W4_HAL_OPEN);
1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.p_hal->open (nfc_main_hal_cback, nfc_main_hal_data_cback);
1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return NFC_STATUS_OK;
1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (  (enable == TRUE)
1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project             &&(nfc_cb.nfc_state == NFC_STATE_IDLE)  )
1289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* close transport to turn off NFCC and clean up */
1291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags |= NFC_FL_POWER_OFF_SLEEP;
1292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_task_shutdown_nfcc ();
1293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return NFC_STATUS_OK;
1295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_ERROR1 ("NFC_SetPowerOffSleep () invalid state = %d", nfc_cb.nfc_state);
1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return NFC_STATUS_FAILED;
1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_PowerCycleNFCC
1304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function turns off and then on NFCC.
1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          tNFC_STATUS
1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS NFC_PowerCycleNFCC (void)
1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API0 ("NFC_PowerCycleNFCC ()");
1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfc_cb.nfc_state == NFC_STATE_IDLE)
1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* power cycle NFCC */
1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.flags |= NFC_FL_POWER_CYCLE_NFCC;
1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_task_shutdown_nfcc ();
1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return NFC_STATUS_OK;
1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_ERROR1 ("NFC_PowerCycleNFCC () invalid state = %d", nfc_cb.nfc_state);
1324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return NFC_STATUS_FAILED;
1325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFC_SetTraceLevel
1331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function sets the trace level for NFC.  If called with
1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  a value of 0xFF, it simply returns the current trace level.
1334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          The new or current trace level
1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 NFC_SetTraceLevel (UINT8 new_level)
1339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFC_TRACE_API1 ("NFC_SetTraceLevel () new_level = %d", new_level);
1341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (new_level != 0xFF)
1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfc_cb.trace_level = new_level;
1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (nfc_cb.trace_level);
1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1348a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#if (BT_TRACE_VERBOSE == TRUE)
1349a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
1350a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1351a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         NFC_GetStatusName
1352a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1353a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      This function returns the status name.
1354a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1355a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** NOTE             conditionally compiled to save memory.
1356a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1357a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns          pointer to the name
1358a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
1359a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
1360a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuchar *NFC_GetStatusName (tNFC_STATUS status)
1361a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
1362a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    switch (status)
1363a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    {
1364a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_OK:
1365a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "OK";
1366a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_REJECTED:
1367a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "REJECTED";
1368a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_MSG_CORRUPTED:
1369a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "CORRUPTED";
1370a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_BUFFER_FULL:
1371a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "BUFFER_FULL";
1372a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_FAILED:
1373a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "FAILED";
1374a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_NOT_INITIALIZED:
1375a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "NOT_INITIALIZED";
1376a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_SYNTAX_ERROR:
1377a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "SYNTAX_ERROR";
1378a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_SEMANTIC_ERROR:
1379a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "SEMANTIC_ERROR";
1380a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_UNKNOWN_GID:
1381a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "UNKNOWN_GID";
1382a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_UNKNOWN_OID:
1383a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "UNKNOWN_OID";
1384a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_INVALID_PARAM:
1385a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "INVALID_PARAM";
1386a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_MSG_SIZE_TOO_BIG:
1387a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "MSG_SIZE_TOO_BIG";
1388a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_ALREADY_STARTED:
1389a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "ALREADY_STARTED";
1390a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_ACTIVATION_FAILED:
1391a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "ACTIVATION_FAILED";
1392a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_TEAR_DOWN:
1393a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "TEAR_DOWN";
1394a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_RF_TRANSMISSION_ERR:
1395a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "RF_TRANSMISSION_ERR";
1396a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_RF_PROTOCOL_ERR:
1397a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "RF_PROTOCOL_ERR";
1398a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_TIMEOUT:
1399a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "TIMEOUT";
1400a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_EE_INTF_ACTIVE_FAIL:
1401a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "EE_INTF_ACTIVE_FAIL";
1402a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_EE_TRANSMISSION_ERR:
1403a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "EE_TRANSMISSION_ERR";
1404a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_EE_PROTOCOL_ERR:
1405a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "EE_PROTOCOL_ERR";
1406a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_EE_TIMEOUT:
1407a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "EE_TIMEOUT";
1408a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_CMD_STARTED:
1409a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "CMD_STARTED";
1410a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_HW_TIMEOUT:
1411a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "HW_TIMEOUT";
1412a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_CONTINUE:
1413a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "CONTINUE";
1414a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_REFUSED:
1415a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "REFUSED";
1416a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_BAD_RESP:
1417a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "BAD_RESP";
1418a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_CMD_NOT_CMPLTD:
1419a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "CMD_NOT_CMPLTD";
1420a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_NO_BUFFERS:
1421a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "NO_BUFFERS";
1422a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_WRONG_PROTOCOL:
1423a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "WRONG_PROTOCOL";
1424a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_BUSY:
1425a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "BUSY";
1426a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_LINK_LOSS:
1427a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "LINK_LOSS";
1428a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_BAD_LENGTH:
1429a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "BAD_LENGTH";
1430a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_BAD_HANDLE:
1431a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "BAD_HANDLE";
1432a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    case NFC_STATUS_CONGESTED:
1433a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return "CONGESTED";
1434a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    default:
1435a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return"UNKNOWN";
1436a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    }
1437a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
1438a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#endif
1439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE */
1441