1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 1999-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 "nfc_target.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_INCLUDED == TRUE) 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_alloc_conn_cb 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to allocation a control block for 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NCI logical connection 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns The allocated control block or NULL 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_CONN_CB * nfc_alloc_conn_cb (tNFC_CONN_CBACK *p_cback) 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx, max = NCI_MAX_CONN_CBS; 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_CONN_CB *p_conn_cb = NULL; 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_CHECK_MAX_CONN (); 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < max; xx++) 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfc_cb.conn_cb[xx].conn_id == NFC_ILLEGAL_CONN_ID) 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_cb.conn_cb[xx].conn_id = NFC_PEND_CONN_ID; /* to indicate this cb is used */ 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_conn_cb = &nfc_cb.conn_cb[xx]; 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_conn_cb->p_cback = p_cback; 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return p_conn_cb; 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_set_conn_id 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to set the connection id to the 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** connection control block and the id mapping table 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_set_conn_id (tNFC_CONN_CB * p_cb, UINT8 conn_id) 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 handle; 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb == NULL) 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->conn_id = conn_id; 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project handle = (UINT8) (p_cb - nfc_cb.conn_cb + 1); 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_cb.conn_id[conn_id] = handle; 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG2 ("nfc_set_conn_id conn_id:%d, handle:%d", conn_id, handle); 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_find_conn_cb_by_handle 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to locate the control block for 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** loopback test. 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns The loopback test control block or NULL 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_CONN_CB * nfc_find_conn_cb_by_handle (UINT8 id) 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_CONN_CB *p_conn_cb = NULL; 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NCI_MAX_CONN_CBS; xx++) 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfc_cb.conn_cb[xx].id == id) 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_conn_cb = &nfc_cb.conn_cb[xx]; 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return p_conn_cb; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_find_conn_cb_by_conn_id 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to locate the control block for 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the given connection id 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns The control block or NULL 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_CONN_CB * nfc_find_conn_cb_by_conn_id (UINT8 conn_id) 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_CONN_CB *p_conn_cb = NULL; 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 handle; 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 id; 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (conn_id == NFC_PEND_CONN_ID) 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NCI_MAX_CONN_CBS; xx++) 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfc_cb.conn_cb[xx].conn_id == NFC_PEND_CONN_ID) 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_conn_cb = &nfc_cb.conn_cb[xx]; 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project id = conn_id & NFC_CONN_ID_ID_MASK; 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (id < NFC_MAX_CONN_ID) 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project handle = nfc_cb.conn_id[id]; 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (handle > 0) 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_conn_cb = &nfc_cb.conn_cb[handle - 1]; 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return p_conn_cb; 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_free_conn_cb 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to free the control block and 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** resources and id mapping table 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfc_free_conn_cb (tNFC_CONN_CB *p_cb) 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void *p_buf; 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb == NULL) 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while ((p_buf = GKI_dequeue (&p_cb->rx_q)) != NULL) 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_buf); 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while ((p_buf = GKI_dequeue (&p_cb->tx_q)) != NULL) 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_buf); 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_cb.conn_id[p_cb->conn_id] = 0; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->p_cback = NULL; 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cb->conn_id = NFC_ILLEGAL_CONN_ID; 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfc_reset_all_conn_cbs 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to free all the control blocks and 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** resources and id mapping table 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNFC_API extern void nfc_reset_all_conn_cbs (void) 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_CONN_CB *p_conn_cb = &nfc_cb.conn_cb[0]; 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_DEACTIVATE_DEVT deact; 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact.status = NFC_STATUS_NOT_INITIALIZED; 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact.type = NFC_DEACTIVATE_TYPE_IDLE; 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project deact.is_ntf = TRUE; 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NCI_MAX_CONN_CBS; xx++, p_conn_cb++) 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_conn_cb->conn_id != NFC_ILLEGAL_CONN_ID) 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_conn_cb->p_cback) 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_conn_cb->p_cback) (p_conn_cb->conn_id, NFC_DEACTIVATE_CEVT, (tNFC_CONN *) &deact); 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_free_conn_cb (p_conn_cb); 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE */ 215