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