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