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 LLCP
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 "llcp_defs.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "llcp_api.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_api.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_int.h"
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pRegisterServer
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to listen to a SAP as server on LLCP.
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_REG_SERVER_EVT will be returned with status and handle.
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If server_sap is set to NFA_P2P_ANY_SAP, then NFA will allocate
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Otherwise, server_sap must be between (LLCP_SDP_SAP + 1) and
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  LLCP_UPPER_BOUND_SDP_SAP
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pRegisterServer (UINT8              server_sap,
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                   tNFA_P2P_LINK_TYPE link_type,
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                   char               *p_service_name,
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                   tNFA_P2P_CBACK     *p_cback)
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_REG_SERVER *p_msg;
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API3 ("NFA_P2pRegisterServer (): server_sap:0x%02x, link_type:0x%x, SN:<%s>",
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     server_sap, link_type, p_service_name);
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (server_sap != NFA_P2P_ANY_SAP)
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&((server_sap <= LLCP_SAP_SDP) ||(server_sap > LLCP_UPPER_BOUND_SDP_SAP))  )
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR2 ("NFA_P2pRegisterServer (): server_sap must be between %d and %d",
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          LLCP_SAP_SDP + 1, LLCP_UPPER_BOUND_SDP_SAP);
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (  ((link_type & NFA_P2P_LLINK_TYPE) == 0x00)
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project             &&((link_type & NFA_P2P_DLINK_TYPE) == 0x00)  )
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pRegisterServer(): link type (0x%x) must be specified", link_type);
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_REG_SERVER *) GKI_getbuf (sizeof (tNFA_P2P_API_REG_SERVER))) != NULL)
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_REG_SERVER_EVT;
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->server_sap = server_sap;
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->link_type  = link_type;
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name), p_service_name, LLCP_MAX_SN_LEN);
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->p_cback = p_cback;
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pRegisterClient
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to register a client service on LLCP.
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_REG_CLIENT_EVT will be returned with status and handle.
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pRegisterClient (tNFA_P2P_LINK_TYPE link_type,
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                   tNFA_P2P_CBACK     *p_cback)
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_REG_CLIENT *p_msg;
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pRegisterClient (): link_type:0x%x", link_type);
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  ((link_type & NFA_P2P_LLINK_TYPE) == 0x00)
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&((link_type & NFA_P2P_DLINK_TYPE) == 0x00)  )
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pRegisterClient (): link type (0x%x) must be specified", link_type);
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_REG_CLIENT *) GKI_getbuf (sizeof (tNFA_P2P_API_REG_CLIENT))) != NULL)
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_REG_CLIENT_EVT;
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->p_cback   = p_cback;
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->link_type = link_type;
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pDeregister
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to stop listening to a SAP as server
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  or stop client service on LLCP.
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If this function is called to de-register a server and RF discovery
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pDeregister (tNFA_HANDLE handle)
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_DEREG *p_msg;
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE         xx;
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pDeregister (): handle:0x%02X", handle);
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pDeregister (): Handle is invalid or not registered");
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_DEREG *) GKI_getbuf (sizeof (tNFA_P2P_API_DEREG))) != NULL)
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_DEREG_EVT;
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->handle    = handle;
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pAcceptConn
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to accept a request of data link
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  connection to a listening SAP on LLCP after receiving
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_CONN_REQ_EVT.
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pAcceptConn (tNFA_HANDLE handle,
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                               UINT16      miu,
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                               UINT8       rw)
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_ACCEPT_CONN *p_msg;
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE               xx;
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API3 ("NFA_P2pAcceptConn (): handle:0x%02X, MIU:%d, RW:%d", handle, miu, rw);
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (!(xx & NFA_P2P_HANDLE_FLAG_CONN))
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pAcceptConn (): Connection Handle is not valid");
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= LLCP_MAX_DATA_LINK)
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pAcceptConn (): Connection Handle is not valid");
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((miu < LLCP_DEFAULT_MIU) || (nfa_p2p_cb.local_link_miu < miu))
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR3 ("NFA_P2pAcceptConn (): MIU(%d) must be between %d and %d",
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if ((p_msg = (tNFA_P2P_API_ACCEPT_CONN *) GKI_getbuf (sizeof (tNFA_P2P_API_ACCEPT_CONN))) != NULL)
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_ACCEPT_CONN_EVT;
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->conn_handle  = handle;
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->miu          = miu;
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->rw           = rw;
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pRejectConn
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to reject a request of data link
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  connection to a listening SAP on LLCP after receiving
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_CONN_REQ_EVT.
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pRejectConn (tNFA_HANDLE handle)
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_REJECT_CONN *p_msg;
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE               xx;
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pRejectConn (): handle:0x%02X", handle);
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (!(xx & NFA_P2P_HANDLE_FLAG_CONN))
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pRejectConn (): Connection Handle is not valid");
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= LLCP_MAX_DATA_LINK)
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pRejectConn (): Connection Handle is not valid");
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_REJECT_CONN *) GKI_getbuf (sizeof (tNFA_P2P_API_REJECT_CONN))) != NULL)
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_REJECT_CONN_EVT;
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->conn_handle  = handle;
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pDisconnect
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to disconnect an existing or
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  connecting data link connection.
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  discard any pending data on data link connection if flush is set to TRUE
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_DISC_EVT will be returned after data link connection is disconnected
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pDisconnect (tNFA_HANDLE handle, BOOLEAN flush)
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_DISCONNECT *p_msg;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE              xx;
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API2 ("NFA_P2pDisconnect (): handle:0x%02X, flush=%d", handle, flush);
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (xx & NFA_P2P_HANDLE_FLAG_CONN)
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (xx >= LLCP_MAX_DATA_LINK)
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            P2P_TRACE_ERROR0 ("NFA_P2pDisconnect (): Connection Handle is not valid");
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_STATUS_BAD_HANDLE);
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pDisconnect (): Handle is not valid");
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_DISCONNECT *) GKI_getbuf (sizeof (tNFA_P2P_API_DISCONNECT))) != NULL)
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_DISCONNECT_EVT;
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->conn_handle  = handle;
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->flush        = flush;
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pConnectByName
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to create a connection-oriented transport
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  by a service name.
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_CONNECTED_EVT if success
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_DISC_EVT if failed
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if client is not registered
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pConnectByName (tNFA_HANDLE client_handle,
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  char        *p_service_name,
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16      miu,
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT8       rw)
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_CONNECT *p_msg;
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE           xx;
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("NFA_P2pConnectByName (): client_handle:0x%x, SN:<%s>, MIU:%d, RW:%d",
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    client_handle, p_service_name, miu, rw);
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = client_handle & NFA_HANDLE_MASK;
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pConnectByName (): Client Handle is not valid");
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (miu < LLCP_DEFAULT_MIU)
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED)
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.local_link_miu < miu)  )
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR3 ("NFA_P2pConnectByName (): MIU(%d) must be between %d and %d or LLCP link is not activated",
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if ((p_msg = (tNFA_P2P_API_CONNECT *) GKI_getbuf (sizeof (tNFA_P2P_API_CONNECT))) != NULL)
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_CONNECT_EVT;
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name), p_service_name, LLCP_MAX_SN_LEN);
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->dsap    = LLCP_INVALID_SAP;
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->miu     = miu;
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->rw      = rw;
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->client_handle = client_handle;
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pConnectBySap
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to create a connection-oriented transport
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  by a SAP.
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_CONNECTED_EVT if success
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_DISC_EVT if failed
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if client is not registered
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pConnectBySap (tNFA_HANDLE client_handle,
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 UINT8       dsap,
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 UINT16      miu,
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 UINT8       rw)
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_CONNECT *p_msg;
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE           xx;
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("NFA_P2pConnectBySap (): client_handle:0x%x, DSAP:0x%02X, MIU:%d, RW:%d",
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    client_handle, dsap, miu, rw);
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = client_handle & NFA_HANDLE_MASK;
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pConnectBySap (): Client Handle is not valid");
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (miu < LLCP_DEFAULT_MIU)
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED)
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.local_link_miu < miu)  )
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR3 ("NFA_P2pConnectBySap (): MIU(%d) must be between %d and %d, or LLCP link is not activated",
465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if ((p_msg = (tNFA_P2P_API_CONNECT *) GKI_getbuf (sizeof (tNFA_P2P_API_CONNECT))) != NULL)
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_CONNECT_EVT;
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->dsap    = dsap;
474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->miu     = miu;
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->rw      = rw;
476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->client_handle = client_handle;
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pSendUI
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to send data on connectionless
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport.
492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_LENGTH if data length is more than remote link MIU
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_CONGESTED  if congested
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pSendUI (tNFA_HANDLE handle,
501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8       dsap,
502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16      length,
503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8      *p_data)
504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_SEND_UI *p_msg;
506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS           ret_status = NFA_STATUS_FAILED;
507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE           xx;
508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API3 ("NFA_P2pSendUI (): handle:0x%X, DSAP:0x%02X, length:%d", handle, dsap, length);
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL))
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pSendUI (): Handle (0x%X) is not valid", handle);
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (length > nfa_p2p_cb.remote_link_miu)
522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR3 ("NFA_P2pSendUI (): handle:0x%X, length(%d) must be less than remote link MIU(%d)",
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           handle, length, nfa_p2p_cb.remote_link_miu);
525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_LENGTH;
526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (nfa_p2p_cb.sap_cb[xx].flags & NFA_P2P_SAP_FLAG_LLINK_CONGESTED)
528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_WARNING1 ("NFA_P2pSendUI (): handle:0x%X, logical data link is already congested",
530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             handle);
531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_CONGESTED;
532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (LLCP_IsLogicalLinkCongested ((UINT8)xx,
534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                          nfa_p2p_cb.sap_cb[xx].num_pending_ui_pdu,
535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                          nfa_p2p_cb.total_pending_ui_pdu,
536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                          nfa_p2p_cb.total_pending_i_pdu))
537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[xx].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_WARNING1 ("NFA_P2pSendUI(): handle:0x%X, logical data link is congested",
541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             handle);
542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_CONGESTED;
543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if ((p_msg = (tNFA_P2P_API_SEND_UI *) GKI_getbuf (sizeof(tNFA_P2P_API_SEND_UI))) != NULL)
545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_SEND_UI_EVT;
547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->handle  = handle;
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->dsap    = dsap;
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_msg->p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->p_msg->len    = length;
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->p_msg->offset = LLCP_MIN_OFFSET;
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (((UINT8*) (p_msg->p_msg + 1) + p_msg->p_msg->offset), p_data, length);
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* increase number of tx UI PDU which is not processed by NFA for congestion control */
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[xx].num_pending_ui_pdu++;
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.total_pending_ui_pdu++;
560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_sys_sendmsg (p_msg);
561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ret_status = NFA_STATUS_OK;
563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (p_msg);
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[xx].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ret_status = NFA_STATUS_CONGESTED;
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pReadUI
581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to read data on connectionless
583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_LLINK_TYPE.
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Remote SAP who sent UI PDU is returned.
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Information of UI PDU up to max_data_len is copied into p_data.
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - If more information of UI PDU or more UI PDU in queue then more
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                    is returned to TRUE.
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Information of next UI PDU is not concatenated.
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pReadUI (tNFA_HANDLE handle,
596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT32      max_data_len,
597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8       *p_remote_sap,
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT32      *p_data_len,
599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8       *p_data,
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           BOOLEAN     *p_more)
601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS ret_status;
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE xx;
604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pReadUI (): handle:0x%X", handle);
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pReadUI (): Handle (0x%X) is not valid", handle);
615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_more = LLCP_ReadLogicalLinkData ((UINT8)xx,
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                            max_data_len,
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                            p_remote_sap,
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                            p_data_len,
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                            p_data);
624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_OK;
625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pFlushUI
635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to flush data on connectionless
637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport.
638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pFlushUI (tNFA_HANDLE handle,
644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            UINT32      *p_length)
645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS ret_status;
647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE xx;
648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pReadUI (): handle:0x%X", handle);
650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pFlushUI (): Handle (0x%X) is not valid", handle);
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_length  = 0;
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_length  = LLCP_FlushLogicalLinkRxData ((UINT8)xx);
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_OK;
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pSendData
676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to send data on connection-oriented
678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport.
679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_LENGTH if data length is more than remote MIU
683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_CONGESTED  if congested
684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pSendData (tNFA_HANDLE handle,
688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             UINT16      length,
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             UINT8      *p_data)
690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_SEND_DATA *p_msg;
692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS            ret_status = NFA_STATUS_FAILED;
693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE            xx;
694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API2 ("NFA_P2pSendData (): handle:0x%X, length:%d", handle, length);
696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (!(handle & NFA_P2P_HANDLE_FLAG_CONN))
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(xx >= LLCP_MAX_DATA_LINK)
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pSendData (): Handle(0x%X) is not valid", handle);
707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO)
710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pSendData (): handle:0x%X, Remote set RW to 0 (flow off)", handle);
712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_FAILED;
713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (nfa_p2p_cb.conn_cb[xx].remote_miu < length)
715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR2 ("NFA_P2pSendData (): handle:0x%X, Data more than remote MIU(%d)",
717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           handle, nfa_p2p_cb.conn_cb[xx].remote_miu);
718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_LENGTH;
719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED)
721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_WARNING1 ("NFA_P2pSendData (): handle:0x%X, data link connection is already congested",
723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            handle);
724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_CONGESTED;
725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (LLCP_IsDataLinkCongested (nfa_p2p_cb.conn_cb[xx].local_sap,
727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       nfa_p2p_cb.conn_cb[xx].remote_sap,
728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu,
729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       nfa_p2p_cb.total_pending_ui_pdu,
730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       nfa_p2p_cb.total_pending_i_pdu))
731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED;
733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_WARNING1 ("NFA_P2pSendData (): handle:0x%X, data link connection is congested",
735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            handle);
736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_CONGESTED;
737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if ((p_msg = (tNFA_P2P_API_SEND_DATA *) GKI_getbuf (sizeof(tNFA_P2P_API_SEND_DATA))) != NULL)
739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_SEND_DATA_EVT;
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->conn_handle  = handle;
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_msg->p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->p_msg->len    = length;
747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_msg->p_msg->offset = LLCP_MIN_OFFSET;
748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (((UINT8*) (p_msg->p_msg + 1) + p_msg->p_msg->offset), p_data, length);
749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* increase number of tx I PDU which is not processed by NFA for congestion control */
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu++;
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.total_pending_i_pdu++;
753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_sys_sendmsg (p_msg);
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ret_status = NFA_STATUS_OK;
756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_freebuf (p_msg);
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED;
761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ret_status = NFA_STATUS_CONGESTED;
762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pReadData
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to read data on connection-oriented
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_DLINK_TYPE.
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Information of I PDU is copied into p_data up to max_data_len.
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - If more information of I PDU or more I PDU in queue, then more
779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                    is returned to TRUE.
780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Information of next I PDU is not concatenated.
781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pReadData (tNFA_HANDLE handle,
787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             UINT32      max_data_len,
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             UINT32      *p_data_len,
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             UINT8       *p_data,
790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             BOOLEAN     *p_more)
791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS ret_status;
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE xx;
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pReadData (): handle:0x%X", handle);
796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (!(handle & NFA_P2P_HANDLE_FLAG_CONN))
803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(xx >= LLCP_MAX_DATA_LINK)
804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pReadData (): Handle(0x%X) is not valid", handle);
807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_more = LLCP_ReadDataLinkData (nfa_p2p_cb.conn_cb[xx].local_sap,
812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         nfa_p2p_cb.conn_cb[xx].remote_sap,
813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         max_data_len,
814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         p_data_len,
815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         p_data);
816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_OK;
817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pFlushData
827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to flush data on connection-oriented
829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  transport.
830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pFlushData (tNFA_HANDLE handle,
836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                              UINT32      *p_length)
837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS ret_status;
839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE xx;
840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pFlushData (): handle:0x%X", handle);
842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_lock ();
844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (!(handle & NFA_P2P_HANDLE_FLAG_CONN))
849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(xx >= LLCP_MAX_DATA_LINK)
850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("NFA_P2pFlushData (): Handle(0x%X) is not valid", handle);
853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_BAD_HANDLE;
854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_length = LLCP_FlushDataLinkRxData (nfa_p2p_cb.conn_cb[xx].local_sap,
858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                              nfa_p2p_cb.conn_cb[xx].remote_sap);
859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ret_status = NFA_STATUS_OK;
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_sched_unlock ();
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (ret_status);
865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pSetLocalBusy
870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to stop or resume incoming data on
872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  connection-oriented transport.
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if handle is not valid
876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pSetLocalBusy (tNFA_HANDLE conn_handle,
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 BOOLEAN     is_busy)
881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_SET_LOCAL_BUSY *p_msg;
883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE                  xx;
884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API2 ("NFA_P2pSetLocalBusy (): conn_handle:0x%02X, is_busy:%d", conn_handle, is_busy);
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = conn_handle & NFA_HANDLE_MASK;
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (!(xx & NFA_P2P_HANDLE_FLAG_CONN))
890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pSetLocalBusy (): Connection Handle is not valid");
892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= LLCP_MAX_DATA_LINK)
900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.conn_cb[xx].flags == 0)  )
901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pSetLocalBusy (): Connection Handle is not valid");
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_SET_LOCAL_BUSY *) GKI_getbuf (sizeof (tNFA_P2P_API_SET_LOCAL_BUSY))) != NULL)
907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_SET_LOCAL_BUSY_EVT;
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->conn_handle = conn_handle;
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->is_busy     = is_busy;
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pGetLinkInfo
924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to get local/remote link MIU and
926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Well-Known Service list encoded as a 16-bit field of connected LLCP.
927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_LINK_INFO_EVT will be returned.
928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if server or client is not registered
931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pGetLinkInfo (tNFA_HANDLE handle)
935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_GET_LINK_INFO *p_msg;
937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE                 xx;
938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("NFA_P2pGetLinkInfo (): handle:0x%x", handle);
940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED)
942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pGetLinkInfo (): LLCP link is not activated");
944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pGetLinkInfo (): Handle is invalid or not registered");
953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_GET_LINK_INFO *) GKI_getbuf (sizeof (tNFA_P2P_API_GET_LINK_INFO))) != NULL)
957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_GET_LINK_INFO_EVT;
959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->handle = handle;
961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pGetRemoteSap
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to get SAP associated by service name
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  on connected remote LLCP.
976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_P2P_SDP_EVT will be returned.
977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if server or client is not registered
980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pGetRemoteSap (tNFA_HANDLE handle,
984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                 char        *p_service_name)
985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_GET_REMOTE_SAP *p_msg;
987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HANDLE                  xx;
988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API2 ("NFA_P2pGetRemoteSap(): handle:0x%x, SN:<%s>", handle, p_service_name);
990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED)
992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pGetRemoteSap(): LLCP link is not activated");
994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = handle & NFA_HANDLE_MASK;
998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (xx >= NFA_P2P_NUM_SAP)
1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ||(nfa_p2p_cb.sap_cb[xx].p_cback == NULL)  )
1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pGetRemoteSap (): Handle is invalid or not registered");
1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_GET_REMOTE_SAP *) GKI_getbuf (sizeof (tNFA_P2P_API_GET_REMOTE_SAP))) != NULL)
1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_GET_REMOTE_SAP_EVT;
1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->handle = handle;
1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name), p_service_name, LLCP_MAX_SN_LEN);
1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pSetLLCPConfig
1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to change LLCP config parameters.
1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Application must call while LLCP is not activated.
1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Parameters descriptions (default value)
1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Local Link MIU (LLCP_MIU)
1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Option parameter (LLCP_OPT_VALUE)
1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Response Waiting Time Index (LLCP_WAITING_TIME)
1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Local Link Timeout (LLCP_LTO_VALUE)
1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Inactivity Timeout as initiator role (LLCP_INIT_INACTIVITY_TIMEOUT)
1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Inactivity Timeout as target role (LLCP_TARGET_INACTIVITY_TIMEOUT)
1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Delay SYMM response (LLCP_DELAY_RESP_TIME)
1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Data link connection timeout (LLCP_DATA_LINK_CONNECTION_TOUT)
1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Delay timeout to send first PDU as initiator (LLCP_DELAY_TIME_TO_SEND_FIRST_PDU)
1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_P2pSetLLCPConfig (UINT16 link_miu,
1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT8  opt,
1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT8  wt,
1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 link_timeout,
1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 inact_timeout_init,
1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 inact_timeout_target,
1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 symm_delay,
1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 data_link_timeout,
1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                  UINT16 delay_first_pdu_timeout)
1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_API_SET_LLCP_CFG *p_msg;
1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("NFA_P2pSetLLCPConfig ():link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     link_miu, opt, wt, link_timeout);
1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("                       inact_timeout(init:%d, target:%d), symm_delay:%d, data_link_timeout:%d",
1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     inact_timeout_init, inact_timeout_target, symm_delay, data_link_timeout);
1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("                       delay_first_pdu_timeout:%d", delay_first_pdu_timeout);
1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED)
1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("NFA_P2pSetLLCPConfig (): LLCP link is activated");
1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_P2P_API_SET_LLCP_CFG *) GKI_getbuf (sizeof (tNFA_P2P_API_SET_LLCP_CFG))) != NULL)
1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event = NFA_P2P_API_SET_LLCP_CFG_EVT;
1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->link_miu             = link_miu;
1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->opt                  = opt;
1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->wt                   = wt;
1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->link_timeout         = link_timeout;
1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->inact_timeout_init   = inact_timeout_init;
1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->inact_timeout_target = inact_timeout_target;
1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->symm_delay           = symm_delay;
1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->data_link_timeout    = data_link_timeout;
1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->delay_first_pdu_timeout = delay_first_pdu_timeout;
1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pGetLLCPConfig
1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function is called to read LLCP config parameters.
1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Parameters descriptions
1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Local Link MIU
1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Option parameter
1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Response Waiting Time Index
1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Local Link Timeout
1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Inactivity Timeout as initiator role
1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Inactivity Timeout as target role
1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Delay SYMM response
1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Data link connection timeout
1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  - Delay timeout to send first PDU as initiator
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NFA_P2pGetLLCPConfig (UINT16 *p_link_miu,
1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8  *p_opt,
1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT8  *p_wt,
1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_link_timeout,
1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_inact_timeout_init,
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_inact_timeout_target,
1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_symm_delay,
1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_data_link_timeout,
1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                           UINT16 *p_delay_first_pdu_timeout)
1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_GetConfig (p_link_miu,
1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_opt,
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_wt,
1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_link_timeout,
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_inact_timeout_init,
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_inact_timeout_target,
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_symm_delay,
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_data_link_timeout,
1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_delay_first_pdu_timeout);
1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("NFA_P2pGetLLCPConfig () link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     *p_link_miu, *p_opt, *p_wt, *p_link_timeout);
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API4 ("                       inact_timeout(init:%d, target:%d), symm_delay:%d, data_link_timeout:%d",
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     *p_inact_timeout_init, *p_inact_timeout_target, *p_symm_delay, *p_data_link_timeout);
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_API1 ("                       delay_first_pdu_timeout:%d", *p_delay_first_pdu_timeout);
1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_P2pSetTraceLevel
1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function sets the trace level for P2P.  If called with
1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  a value of 0xFF, it simply returns the current trace level.
1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          The new or current trace level
1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 NFA_P2pSetTraceLevel (UINT8 new_level)
1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (new_level != 0xFF)
1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.trace_level = new_level;
1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (nfa_p2p_cb.trace_level);
1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1157