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