nfa_hci_api.c revision e9629bad30a9f478b336ab46b8e6e02f7f87af46
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 * NFA interface to HCI 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_api.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_defs.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciRegister 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will register an application with hci and 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** returns an application handle and provides a mechanism to 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** register a callback with HCI to receive NFA HCI event notification. 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the application is registered (or if an error occurs), 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the app will be notified with NFA_HCI_REGISTER_EVT. Previous 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** session information including allocated gates, created pipes 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and pipes states will be returned as part of tNFA_HCI_REGISTER data. 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciRegister (char *p_app_name, tNFA_HCI_CBACK *p_cback, BOOLEAN b_send_conn_evts) 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_REGISTER_APP *p_msg; 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_name_len; 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_app_name == NULL) 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciRegister (): Invalid Application name"); 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cback == NULL) 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciRegister (): Application should provide callback function to register!"); 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciRegister (): Application Name: %s", p_app_name); 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project app_name_len = (UINT8) strlen (p_app_name); 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Register the application with HCI */ 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(p_app_name != NULL) 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(app_name_len <= NFA_MAX_HCI_APP_NAME_LEN) 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_REGISTER_APP *) GKI_getbuf (sizeof (tNFA_HCI_API_REGISTER_APP))) != NULL)) 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_REGISTER_APP_EVT; 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Save application name and callback */ 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (p_msg->app_name, 0, sizeof (p_msg->app_name)); 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BCM_STRNCPY_S (p_msg->app_name, sizeof (p_msg->app_name), p_app_name, NFA_MAX_HCI_APP_NAME_LEN); 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->p_cback = p_cback; 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->b_send_conn_evts = b_send_conn_evts; 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciGetGateAndPipeList 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will get the list of gates allocated to the 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** application and list of dynamic pipes created by the 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** application. The app will be notified with 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_GET_GATE_PIPE_LIST_EVT. List of allocated dynamic 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** gates to the application and list of pipes created by the 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** application will be returned as part of 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** tNFA_HCI_GET_GATE_PIPE_LIST data. 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciGetGateAndPipeList (tNFA_HANDLE hci_handle) 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_GET_APP_GATE_PIPE *p_msg; 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetGateAndPipeList (): Invalid hci_handle:0x%04x", hci_handle); 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetGateAndPipeList (): hci_handle:0x%04x", hci_handle); 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Register the application with HCI */ 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_GET_APP_GATE_PIPE *) GKI_getbuf (sizeof (tNFA_HCI_API_GET_APP_GATE_PIPE))) != NULL)) 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_GET_APP_GATE_PIPE_EVT; 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciDeregister 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to deregister an application 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** from HCI. The app will be notified by NFA_HCI_DEREGISTER_EVT 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** after deleting all the pipes owned by the app and deallocating 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** all the gates allocated to the app or if an error occurs. 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Even if deregistration fails, the app has to register again 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to provide a new cback function. 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if the application is deregistered successfully 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciDeregister (char *p_app_name) 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_DEREGISTER_APP *p_msg; 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_name_len; 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_app_name == NULL) 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDeregister (): Invalid Application"); 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciDeregister (): Application Name: %s", p_app_name); 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project app_name_len = (UINT8) strlen (p_app_name); 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (app_name_len > NFA_MAX_HCI_APP_NAME_LEN) 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Find the application registration */ 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_APP_CB; xx++) 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.cfg.reg_app_names[xx][0] != 0) 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!strncmp (p_app_name, &nfa_hci_cb.cfg.reg_app_names[xx][0], app_name_len)) ) 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (xx == NFA_HCI_MAX_APP_CB) 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR1 ("NFA_HciDeregister (): Application Name: %s NOT FOUND", p_app_name); 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Deregister the application with HCI */ 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_DEREGISTER_APP *) GKI_getbuf (sizeof (tNFA_HCI_API_DEREGISTER_APP))) != NULL) ) 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_DEREGISTER_APP_EVT; 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (p_msg->app_name, 0, sizeof (p_msg->app_name)); 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BCM_STRNCPY_S (p_msg->app_name, sizeof (p_msg->app_name), p_app_name, NFA_MAX_HCI_APP_NAME_LEN); 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciAllocGate 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will allocate an available generic gate for 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the app to provide an entry point for a particular service 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to other host or to establish communication with other host. 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the generic gate is allocated (or if an error occurs), 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the app will be notified with NFA_HCI_ALLOCATE_GATE_EVT with 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the gate id. The allocated Gate information will be stored in 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** non volatile memory. 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if this API started 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED if no generic gate is available 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciAllocGate (tNFA_HANDLE hci_handle) 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_ALLOC_GATE *p_msg; 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAllocGate (): Invalid hci_handle:0x%04x", hci_handle); 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAllocGate (): hci_handle:0x%04x", hci_handle); 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to allocate a gate to the application */ 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_ALLOC_GATE *) GKI_getbuf (sizeof (tNFA_HCI_API_ALLOC_GATE))) != NULL) ) 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_ALLOC_GATE_EVT; 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciDeallocGate 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will release the specified gate that was 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** previously allocated to the application. When the generic 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** gate is released (or if an error occurs), the app will be 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** notified with NFA_HCI_DEALLOCATE_GATE_EVT with the gate id. 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciDeallocGate (tNFA_HANDLE hci_handle, UINT8 gate) 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_DEALLOC_GATE *p_msg; 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciDeallocGate (): Invalid hci_handle:0x%04x", hci_handle); 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((gate < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) || (gate > NFA_HCI_LAST_HOST_SPECIFIC_GENERIC_GATE) || (gate == NFA_HCI_CONNECTIVITY_GATE)) 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciDeallocGate (): Cannot deallocate the gate:0x%02x", gate); 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciDeallocGate (): hci_handle:0x%04x, gate:0x%02X", hci_handle, gate); 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to deallocate the gate that was previously allocated to the application */ 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_DEALLOC_GATE *) GKI_getbuf (sizeof (tNFA_HCI_API_DEALLOC_GATE))) != NULL) ) 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_DEALLOC_GATE_EVT; 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->gate = gate; 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciGetHostList 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will request the host controller to return the 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** list of hosts that are present in the host network. When 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** host controller responds with the host list (or if an error 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** occurs), the app will be notified with NFA_HCI_HOST_LIST_EVT 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciGetHostList (tNFA_HANDLE hci_handle) 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_GET_HOST_LIST *p_msg; 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetHostList (): Invalid hci_handle:0x%04x", hci_handle); 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetHostList (): hci_handle:0x%04x",hci_handle); 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to get list of host in the hci network */ 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_GET_HOST_LIST *) GKI_getbuf (sizeof (tNFA_HCI_API_GET_HOST_LIST))) != NULL) ) 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_GET_HOST_LIST_EVT; 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciCreatePipe 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to create a dynamic pipe with the 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** specified host. When the dynamic pipe is created (or 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** if an error occurs), the app will be notified with 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_CREATE_PIPE_EVT with the pipe id. If a pipe exists 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** between the two gates passed as argument and if it was 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** created earlier by the calling application then the pipe 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** id of the existing pipe will be returned and a new pipe 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** will not be created. After successful creation of pipe, 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** registry entry will be created for the dynamic pipe and 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** all information related to the pipe will be stored in non 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** volatile memory. 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciCreatePipe (tNFA_HANDLE hci_handle, 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 source_gate_id, 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 dest_host, 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 dest_gate) 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_CREATE_PIPE_EVT *p_msg; 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API4 ("NFA_HciCreatePipe (): hci_handle:0x%04x, source gate:0x%02X, destination host:0x%02X , destination gate:0x%02X", 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project hci_handle, source_gate_id, dest_host, dest_gate); 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciCreatePipe (): Invalid hci_handle:0x%04x", hci_handle); 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((source_gate_id < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) || (source_gate_id > NFA_HCI_LAST_HOST_SPECIFIC_GENERIC_GATE)) 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciCreatePipe (): Invalid local Gate:0x%02x", source_gate_id); 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((dest_gate < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) && (dest_gate != NFA_HCI_LOOP_BACK_GATE) && (dest_gate != NFA_HCI_IDENTITY_MANAGEMENT_GATE)) 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(dest_gate > NFA_HCI_LAST_HOST_SPECIFIC_GENERIC_GATE)) 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciCreatePipe (): Invalid Destination Gate:0x%02x", dest_gate); 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++) 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.inactive_host[xx] == dest_host) 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (xx != NFA_HCI_MAX_HOST_IN_NETWORK) 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciCreatePipe (): Host not active:0x%02x", dest_host); 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to create a pipe between two specified gates */ 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!nfa_hci_cb.b_low_power_mode) 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_CREATE_PIPE_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_CREATE_PIPE_EVT))) != NULL) ) 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_CREATE_PIPE_EVT; 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->source_gate = source_gate_id; 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->dest_host = dest_host; /* Host id of the destination host */ 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->dest_gate = dest_gate; /* Gate id of the destination gate */ 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciOpenPipe 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to open a dynamic pipe. 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the dynamic pipe is opened (or 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** if an error occurs), the app will be notified with 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_OPEN_PIPE_EVT with the pipe id. 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciOpenPipe (tNFA_HANDLE hci_handle, UINT8 pipe) 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_OPEN_PIPE_EVT *p_msg; 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciOpenPipe (): Invalid hci_handle:0x%04x", hci_handle); 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) || (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciOpenPipe (): Invalid Pipe:0x%02x", pipe); 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciOpenPipe (): hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe); 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to open a pipe if it is in closed state */ 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!nfa_hci_cb.b_low_power_mode) 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_OPEN_PIPE_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_OPEN_PIPE_EVT))) != NULL) ) 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_OPEN_PIPE_EVT; 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; /* Pipe ID of the pipe to open */ 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciGetRegistry 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function requests a peer host to return the desired 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** registry field value for the gate that the pipe is on. 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the peer host responds,the app is notified with 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_GET_REG_RSP_EVT or 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** if an error occurs in sending the command the app will be 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** notified by NFA_HCI_CMD_SENT_EVT 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciGetRegistry (tNFA_HANDLE hci_handle, UINT8 pipe, UINT8 reg_inx) 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_GET_REGISTRY *p_msg; 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetRegistry (): Invalid hci_handle:0x%04x", hci_handle); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciGetRegistry (): Invalid Pipe:0x%02x", pipe); 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciGetRegistry (): hci_handle:0x%04x Pipe: 0x%02x", hci_handle, pipe); 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to get list of gates supported by the specified host */ 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_GET_REGISTRY *) GKI_getbuf (sizeof (tNFA_HCI_API_GET_REGISTRY))) != NULL) ) 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_GET_REGISTRY_EVT; 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->reg_inx = reg_inx; 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 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** Function NFA_HciSetRegistry 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function requests a peer host to set the desired 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** registry field value for the gate that the pipe is on. 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the peer host responds,the app is notified with 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_SET_REG_RSP_EVT or 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** if an error occurs in sending the command the app will be 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** notified by NFA_HCI_CMD_SENT_EVT 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNFC_API extern tNFA_STATUS NFA_HciSetRegistry (tNFA_HANDLE hci_handle, 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe, 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 reg_inx, 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 data_size, 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data) 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_SET_REGISTRY *p_msg; 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSetRegistry (): Invalid hci_handle:0x%04x", hci_handle); 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSetRegistry (): Invalid Pipe:0x%02x", pipe); 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((data_size == 0) || (p_data == NULL) || (data_size > NFA_MAX_HCI_CMD_LEN)) 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSetRegistry (): Invalid data size:0x%02x", data_size); 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciSetRegistry (): hci_handle:0x%04x Pipe: 0x%02x", hci_handle, pipe); 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to get list of gates supported by the specified host */ 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_SET_REGISTRY *) GKI_getbuf (sizeof (tNFA_HCI_API_SET_REGISTRY))) != NULL) ) 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_SET_REGISTRY_EVT; 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->reg_inx = reg_inx; 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->size = data_size; 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->data, p_data, data_size); 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciSendCommand 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to send a command on a pipe created 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** by the application. 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The app will be notified by NFA_HCI_CMD_SENT_EVT if an error 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** occurs. 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the peer host responds,the app is notified with 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_RSP_RCVD_EVT 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciSendCommand (tNFA_HANDLE hci_handle, 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe, 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 cmd_code, 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 cmd_size, 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data) 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_SEND_CMD_EVT *p_msg; 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendCommand (): Invalid hci_handle:0x%04x", hci_handle); 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendCommand (): Invalid Pipe:0x%02x", pipe); 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((cmd_size && (p_data == NULL)) || (cmd_size > NFA_MAX_HCI_CMD_LEN)) 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendCommand (): Invalid cmd size:0x%02x", cmd_size); 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API3 ("NFA_HciSendCommand (): hci_handle:0x%04x, pipe:0x%02x Code: 0x%02x", hci_handle, pipe, cmd_code); 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to post event data on a particular pipe */ 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_SEND_CMD_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_SEND_CMD_EVT))) != NULL) ) 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_SEND_CMD_EVT; 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->cmd_code = cmd_code; 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->cmd_len = cmd_size; 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (cmd_size) 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->data, p_data, cmd_size); 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciSendResponse 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to send a response on a pipe created 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** by the application. 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The app will be notified by NFA_HCI_RSP_SENT_EVT if an error 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** occurs. 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNFC_API extern tNFA_STATUS NFA_HciSendResponse (tNFA_HANDLE hci_handle, 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe, 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 response, 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 data_size, 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data) 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_SEND_RSP_EVT *p_msg; 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendResponse (): Invalid hci_handle:0x%04x", hci_handle); 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendResponse (): Invalid Pipe:0x%02x", pipe); 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((data_size && (p_data == NULL)) || (data_size > NFA_MAX_HCI_RSP_LEN)) 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendResponse (): Invalid data size:0x%02x", data_size); 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API3 ("NFA_HciSendResponse (): hci_handle:0x%04x Pipe: 0x%02x Response: 0x%02x", hci_handle, pipe, response); 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to get list of gates supported by the specified host */ 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_SEND_RSP_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_SEND_RSP_EVT))) != NULL) ) 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_SEND_RSP_EVT; 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->response = response; 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->size = data_size; 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (data_size) 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->data, p_data, data_size); 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciSendEvent 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to send any event on a pipe created 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** by the application. 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The app will be notified by NFA_HCI_EVENT_SENT_EVT 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** after successfully sending the event on the specified pipe 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** or if an error occurs. The application should wait for this 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** event before releasing event buffer passed as argument. 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If the app is expecting a response to the event then it can 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** provide response buffer for collecting the response. If it 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** provides a response buffer it can also provide response 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** timeout indicating maximum timeout for the response. 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Maximum of NFA_MAX_HCI_EVENT_LEN bytes APDU can be received 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** using internal buffer if no response buffer is provided by 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the application. The app will be notified by 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_EVENT_RCVD_EVT after receiving the response event 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** or on timeout if app provided response buffer and response 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** timeout. If response buffer and response timeout is provided 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** by the application, it should wait for this event before 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** releasing the response buffer. If the application did not 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** provide response timeout then it should not release the 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** response buffer until it receives NFA_HCI_EVENT_RCVD_EVT or 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** after timeout it sends next event on the same pipe 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and receives NFA_HCI_EVENT_SENT_EVT for that event. 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciSendEvent (tNFA_HANDLE hci_handle, 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe, 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 evt_code, 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 evt_size, 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data, 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rsp_size, 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_rsp_buf, 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rsp_timeout) 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_SEND_EVENT_EVT *p_msg; 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API3 ("NFA_HciSendEvent(): hci_handle:0x%04x, pipe:0x%02x Code: 0x%02x", hci_handle, pipe, evt_code); 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendEvent (): Invalid hci_handle:0x%04x", hci_handle); 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendEvent (): Invalid Pipe:0x%02x", pipe); 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (evt_size && (p_data == NULL)) 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendEvent (): Invalid Event size:0x%02x", evt_size); 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (rsp_size && (p_rsp_buf == NULL)) 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciSendEvent (): No Event buffer, but invalid event buffer size :%u", rsp_size); 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to post event data on a particular pipe */ 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_SEND_EVENT_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_SEND_EVENT_EVT))) != NULL) ) 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_SEND_EVENT_EVT; 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->evt_code = evt_code; 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->evt_len = evt_size; 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->p_evt_buf = p_data; 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->rsp_len = rsp_size; 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->p_rsp_buf = p_rsp_buf; 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->rsp_timeout = rsp_timeout; 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciClosePipe 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to close a dynamic pipe. 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the dynamic pipe is closed (or 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** if an error occurs), the app will be notified with 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_CLOSE_PIPE_EVT with the pipe id. 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciClosePipe (tNFA_HANDLE hci_handle, UINT8 pipe) 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_CLOSE_PIPE_EVT *p_msg; 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciClosePipe (): hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe); 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciClosePipe (): Invalid hci_handle:0x%04x", hci_handle); 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) || (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciClosePipe (): Invalid Pipe:0x%02x", pipe); 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to close a pipe if it is in opened state */ 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!nfa_hci_cb.b_low_power_mode) 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_CLOSE_PIPE_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_CLOSE_PIPE_EVT))) != NULL) ) 807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_CLOSE_PIPE_EVT; 809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciDeletePipe 821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to delete a particular dynamic pipe. 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the dynamic pipe is deleted (or if an error occurs), 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the app will be notified with NFA_HCI_DELETE_PIPE_EVT with 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the pipe id. After successful deletion of pipe, registry 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** entry will be deleted for the dynamic pipe and all 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** information related to the pipe will be deleted from non 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** volatile memory. 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciDeletePipe (tNFA_HANDLE hci_handle, UINT8 pipe) 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_DELETE_PIPE_EVT *p_msg; 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciDeletePipe (): Invalid hci_handle:0x%04x", hci_handle); 841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) || (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciDeletePipe (): Invalid Pipe:0x%02x", pipe); 847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciDeletePipe (): hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe); 851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to delete a pipe created by the application identified by hci handle */ 853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(!nfa_hci_cb.b_low_power_mode) 855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_DELETE_PIPE_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_DELETE_PIPE_EVT))) != NULL) ) 856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_DELETE_PIPE_EVT; 858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciAddStaticPipe 871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to add a static pipe for sending 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 7816 APDUs. When the static pipe is added (or if an error occurs), 874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the app will be notified with NFA_HCI_ADD_STATIC_PIPE_EVT with 875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the status. 876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_HciAddStaticPipe (tNFA_HANDLE hci_handle, UINT8 host, UINT8 gate, UINT8 pipe) 881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_API_ADD_STATIC_PIPE_EVT *p_msg; 883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAddStaticPipe (): Invalid hci_handle:0x%04x", hci_handle); 888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++) 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.inactive_host[xx] == host) 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (xx != NFA_HCI_MAX_HOST_IN_NETWORK) 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAddStaticPipe (): Host not active:0x%02x", host); 898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (gate <= NFA_HCI_LAST_HOST_SPECIFIC_GATE) 902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAddStaticPipe (): Invalid Gate:0x%02x", gate); 904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe <= NFA_HCI_LAST_DYNAMIC_PIPE) 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_HciAddStaticPipe (): Invalid Pipe:0x%02x", pipe); 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_HciAddStaticPipe (): hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe); 914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Request HCI to delete a pipe created by the application identified by hci handle */ 916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) 917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_msg = (tNFA_HCI_API_ADD_STATIC_PIPE_EVT *) GKI_getbuf (sizeof (tNFA_HCI_API_ADD_STATIC_PIPE_EVT))) != NULL) ) 918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_HCI_API_ADD_STATIC_PIPE_EVT; 920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hci_handle = hci_handle; 921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->host = host; 922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->gate = gate; 923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->pipe = pipe; 924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Unable to add static pipe */ 929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_HciDebug 935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Debug function. 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NFA_HciDebug (UINT8 action, UINT8 size, UINT8 *p_data) 940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg = nfa_hci_cb.cfg.dyn_gates; 943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp = nfa_hci_cb.cfg.dyn_pipes; 944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_msg; 945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (action) 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_DEBUG_DISPLAY_CB: 950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDebug Host List:"); 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_APP_CB; xx++) 952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.cfg.reg_app_names[xx][0] != 0) 954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 (" Host Inx: %u Name: %s", xx, &nfa_hci_cb.cfg.reg_app_names[xx][0]); 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDebug Gate List:"); 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pg->gate_id != 0) 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API4 (" Gate Inx: %x ID: 0x%02x Owner: 0x%04x PipeInxMask: 0x%08x", 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project xx, pg->gate_id, pg->gate_owner, pg->pipe_inx_mask); 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDebug Pipe List:"); 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pp->pipe_id != 0) 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API6 (" Pipe Inx: %x ID: 0x%02x State: %u LocalGate: 0x%02x Dest Gate: 0x%02x Host: 0x%02x", 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project xx, pp->pipe_id, pp->pipe_state, pp->local_gate, pp->dest_gate, pp->dest_host); 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_DEBUG_SIM_HCI_EVENT: 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID)) != NULL) 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1); 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->event = NFA_HCI_CHECK_QUEUE_EVT; 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->len = size; 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->offset = 0; 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p, p_data, size); 990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_DEBUG_ENABLE_LOOPBACK: 996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDebug HCI_LOOPBACK_DEBUG = TRUE"); 997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HCI_LOOPBACK_DEBUG = TRUE; 998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_DEBUG_DISABLE_LOOPBACK: 1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_HciDebug HCI_LOOPBACK_DEBUG = FALSE"); 1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HCI_LOOPBACK_DEBUG = FALSE; 1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1006