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