nfa_p2p_act.c revision 5c65c3a0f42e174e47fecd4e569606003217ff4e
1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
35c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen *  Copyright (C) 2010-2013 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 *  This is the implementation file for the NFA P2P.
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "string.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_dm_int.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "llcp_defs.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "llcp_api.h"
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_api.h"
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_int.h"
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Global Variables
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Static Functions
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_allocate_conn_cb
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Allocate data link connection control block
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          UINT8
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic UINT8 nfa_p2p_allocate_conn_cb (UINT8 local_sap)
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 xx;
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++)
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_p2p_cb.conn_cb[xx].flags == 0)
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_IN_USE;
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].local_sap = local_sap;
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (xx);
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_ERROR0 ("nfa_p2p_allocate_conn_cb (): No resource");
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return LLCP_MAX_DATA_LINK;
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_deallocate_conn_cb
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deallocate data link connection control block
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_p2p_deallocate_conn_cb (UINT8 xx)
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (xx < LLCP_MAX_DATA_LINK)
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.conn_cb[xx].flags = 0;
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("nfa_p2p_deallocate_conn_cb (): Invalid index (%d)", xx);
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_find_conn_cb
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Find data link connection control block by local/remote SAP
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          UINT8
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic UINT8 nfa_p2p_find_conn_cb (UINT8 local_sap, UINT8 remote_sap)
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 xx;
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++)
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE)
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_p2p_cb.conn_cb[xx].local_sap == local_sap)
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_p2p_cb.conn_cb[xx].remote_sap == remote_sap)  )
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (xx);
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (LLCP_MAX_DATA_LINK);
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_llcp_cback
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing SAP callback events from LLCP
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void nfa_p2p_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data)
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG2 ("nfa_p2p_llcp_cback (): event:0x%02X, local_sap:0x%02X", p_data->hdr.event, p_data->hdr.local_sap);
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (p_data->hdr.event)
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_DATA_IND:
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         nfa_p2p_proc_llcp_data_ind (p_data);
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_CONNECT_IND:
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_connect_ind (p_data);
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_CONNECT_RESP:
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_connect_resp (p_data);
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_DISCONNECT_IND:
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_disconnect_ind (p_data);
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_DISCONNECT_RESP:
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_disconnect_resp (p_data);
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_CONGEST:
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_congestion (p_data);
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case LLCP_SAP_EVT_LINK_STATUS:
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_proc_llcp_link_status (p_data);
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR1 ("nfa_p2p_llcp_cback (): Unknown event:0x%02X", p_data->hdr.event);
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_sdp_cback
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Process SDP callback event from LLCP
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_sdp_cback (UINT8 tid, UINT8 remote_sap)
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap;
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             xx;
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG2 ("nfa_p2p_sdp_cback (): tid:0x%02X, remote_sap:0x%02X", tid, remote_sap);
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* search for callback function to process */
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++)
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (nfa_p2p_cb.sdp_cb[xx].local_sap != LLCP_INVALID_SAP)
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_p2p_cb.sdp_cb[xx].tid == tid)  )
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            local_sap = nfa_p2p_cb.sdp_cb[xx].local_sap;
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.sdp.handle     = (NFA_HANDLE_GROUP_P2P | local_sap);
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.sdp.remote_sap = remote_sap;
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_SDP_EVT, &evt_data);
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sdp_cb[xx].local_sap = LLCP_INVALID_SAP;
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_start_sdp
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Initiate SDP
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE if success
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_start_sdp (char *p_service_name, UINT8 local_sap)
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int xx;
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG1 ("nfa_p2p_start_sdp (): SN:<%s>", p_service_name);
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* search for empty slot */
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++)
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_p2p_cb.sdp_cb[xx].local_sap == LLCP_INVALID_SAP)
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (LLCP_DiscoverService (p_service_name,
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      nfa_p2p_sdp_cback,
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      &(nfa_p2p_cb.sdp_cb[xx].tid)) == LLCP_STATUS_SUCCESS)
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sdp_cb[xx].local_sap    = local_sap;
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return TRUE;
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* failure of SDP */
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return FALSE;
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return FALSE;
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_data_ind
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing incoming data event from LLCP
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data)
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_proc_llcp_data_ind ()");
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap = p_data->data_ind.local_sap;
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.data.handle    = 0;
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if connectionless */
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_data->data_ind.link_type == NFA_P2P_LLINK_TYPE)
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.data.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            xx = nfa_p2p_find_conn_cb (p_data->data_ind.local_sap,
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       p_data->data_ind.remote_sap);
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (xx != LLCP_MAX_DATA_LINK)
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.data.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.data.remote_sap = p_data->data_ind.remote_sap;
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.data.link_type  = p_data->data_ind.link_type;
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* notify upper layer that there are data at LLCP */
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DATA_EVT, &evt_data);
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_connect_ind
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing connection request from peer
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data)
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             server_sap, local_sap;
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             xx;
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG1 ("nfa_p2p_proc_llcp_connect_ind () server_sap:0x%x",
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                       p_data->connect_ind.server_sap);
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    server_sap = p_data->connect_ind.server_sap;
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->connect_ind.local_sap;
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[server_sap].p_cback)
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx = nfa_p2p_allocate_conn_cb (server_sap);
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (xx != LLCP_MAX_DATA_LINK)
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].remote_sap = p_data->connect_ind.remote_sap;
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].remote_miu = p_data->connect_ind.miu;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* peer will not receive any data */
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (p_data->connect_ind.rw == 0)
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO;
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.conn_req.server_handle = (NFA_HANDLE_GROUP_P2P | server_sap);
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.conn_req.conn_handle   = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.conn_req.remote_sap    = p_data->connect_ind.remote_sap;
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.conn_req.remote_miu    = p_data->connect_ind.miu;
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.conn_req.remote_rw     = p_data->connect_ind.rw;
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[server_sap].p_cback (NFA_P2P_CONN_REQ_EVT, &evt_data);
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("nfa_p2p_proc_llcp_connect_ind (): Not registered");
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_connect_resp
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing connection response from peer
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data)
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_proc_llcp_connect_resp ()");
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->connect_resp.local_sap;
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx = nfa_p2p_allocate_conn_cb (local_sap);
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (xx != LLCP_MAX_DATA_LINK)
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].remote_sap = p_data->connect_resp.remote_sap;
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].remote_miu = p_data->connect_resp.miu;
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* peer will not receive any data */
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (p_data->connect_resp.rw == 0)
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO;
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.connected.client_handle = (NFA_HANDLE_GROUP_P2P | local_sap);
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.connected.conn_handle   = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.connected.remote_sap    = p_data->connect_resp.remote_sap;
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.connected.remote_miu    = p_data->connect_resp.miu;
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.connected.remote_rw     = p_data->connect_resp.rw;
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONNECTED_EVT, &evt_data);
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_disconnect_ind
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing disconnection request from peer
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data)
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_proc_llcp_disconnect_ind ()");
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->disconnect_ind.local_sap;
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx = nfa_p2p_find_conn_cb (p_data->disconnect_ind.local_sap,
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                   p_data->disconnect_ind.remote_sap);
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (xx != LLCP_MAX_DATA_LINK)
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_REMOTE_INITIATE;
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_deallocate_conn_cb (xx);
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /*
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** LLCP link has been deactivated before receiving CC or DM.
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** Return NFA_P2P_DISC_EVT to indicate failure of creating connection
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            */
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED;
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            P2P_TRACE_ERROR0 ("nfa_p2p_proc_llcp_disconnect_ind (): Link deactivated");
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_disconnect_resp
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing rejected connection from peer
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data)
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_proc_llcp_disconnect_resp ()");
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->disconnect_resp.local_sap;
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_RESP_DISC)
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_LOCAL_INITITATE;
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (  (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_APP_REJECTED)
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                 ||(p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_PERM_REJECT_THIS)
467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                 ||(p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_PERM_REJECT_ANY)
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                 ||(p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_TEMP_REJECT_THIS)
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                 ||(p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_TEMP_REJECT_ANY)  )
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_REMOTE_REJECT;
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_NO_SERVICE)
474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_SERVICE;
476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_NO_ACTIVE_CONNECTION)
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED;
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_INFORMATION;
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (evt_data.disc.reason == NFA_P2P_DISC_REASON_LOCAL_INITITATE)
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            xx = nfa_p2p_find_conn_cb (p_data->disconnect_resp.local_sap,
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                       p_data->disconnect_resp.remote_sap);
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (xx != LLCP_MAX_DATA_LINK)
492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_deallocate_conn_cb (xx);
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                P2P_TRACE_ERROR0 ("nfa_p2p_proc_llcp_disconnect_resp (): No connection found");
502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_congest
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing LLCP congestion event
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_congestion (tLLCP_SAP_CBACK_DATA  *p_data)
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, remote_sap, xx;
525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->congest.local_sap;
528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    remote_sap = p_data->congest.remote_sap;
529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.congest.link_type    = p_data->congest.link_type;
531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.congest.is_congested = p_data->congest.is_congested;
532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_data->congest.is_congested)
534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_DEBUG2 ("nfa_p2p_proc_llcp_congestion () START SAP=(0x%x,0x%x)",
536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          local_sap, remote_sap);
537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_DEBUG2 ("nfa_p2p_proc_llcp_congestion () END SAP=(0x%x,0x%x)",
542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          local_sap, remote_sap);
543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (evt_data.congest.link_type == NFA_P2P_LLINK_TYPE)
548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  (evt_data.congest.is_congested == FALSE)
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_LLINK_CONGESTED)  )
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].flags &= ~NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else if (  (evt_data.congest.is_congested == TRUE)
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                     &&(!(nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_LLINK_CONGESTED))  )
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                /* this is overall congestion due to high usage of buffer pool */
561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            xx = nfa_p2p_find_conn_cb (local_sap, remote_sap);
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (xx != LLCP_MAX_DATA_LINK)
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.congest.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (  (evt_data.congest.is_congested == FALSE)
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    &&(nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED)  )
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_cb.conn_cb[xx].flags &= ~NFA_P2P_CONN_FLAG_CONGESTED;
577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                else if (  (evt_data.congest.is_congested == TRUE)
580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                         &&(!(nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED))  )
581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    /* this is overall congestion due to high usage of buffer pool */
583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED;
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                P2P_TRACE_ERROR0 ("nfa_p2p_proc_llcp_congestion (): No connection found");
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_proc_llcp_link_status
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Processing LLCP link status
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          next state after processing this event
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_p2p_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data)
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG1 ("nfa_p2p_proc_llcp_link_status () is_activated:%d",
611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                       p_data->link_status.is_activated);
612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap  = p_data->link_status.local_sap;
614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_data->link_status.is_activated)
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* only for server */
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.activated.handle           = (NFA_HANDLE_GROUP_P2P | local_sap);
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.activated.local_link_miu   = nfa_p2p_cb.local_link_miu;
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.activated.remote_link_miu  = nfa_p2p_cb.remote_link_miu;
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_ACTIVATED_EVT, &evt_data);
625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else /* if LLCP link is deactivated */
627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++)
629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (  (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE)
631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    &&(nfa_p2p_cb.conn_cb[xx].local_sap == local_sap))
632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                {
633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED;
635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_deallocate_conn_cb (xx);
637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                }
639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* notify deactivation and clear flags */
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_SERVER)
643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.deactivated.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DEACTIVATED_EVT, &evt_data);
646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].flags = NFA_P2P_SAP_FLAG_SERVER;
648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else if (nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_CLIENT)
650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.deactivated.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DEACTIVATED_EVT, &evt_data);
653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].flags = NFA_P2P_SAP_FLAG_CLIENT;
655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else /* if this is not registered service */
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback = NULL;
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_reg_server
667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Allocate a service as server and register to LLCP
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          FALSE if need to keep buffer
672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_reg_server (tNFA_P2P_MSG *p_msg)
675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA  evt_data;
677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8              server_sap;
678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_reg_server ()");
680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    server_sap = LLCP_RegisterServer (p_msg->api_reg_server.server_sap,
682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      p_msg->api_reg_server.link_type,
683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      p_msg->api_reg_server.service_name,
684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      nfa_p2p_llcp_cback);
685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (server_sap == LLCP_INVALID_SAP)
687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.reg_server.server_handle = NFA_HANDLE_INVALID;
689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.reg_server.server_sap    = NFA_P2P_INVALID_SAP;
690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        BCM_STRNCPY_S (evt_data.reg_server.service_name, sizeof (evt_data.reg_server.service_name),
691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                       p_msg->api_reg_server.service_name, LLCP_MAX_SN_LEN);
692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.reg_server.service_name[LLCP_MAX_SN_LEN] = 0;
693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->api_reg_server.p_cback (NFA_P2P_REG_SERVER_EVT, &evt_data);
695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return TRUE;
697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if need to update WKS in LLCP Gen bytes */
700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (server_sap <= LLCP_UPPER_BOUND_WK_SAP)
701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_enable_listening (NFA_ID_P2P, TRUE);
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (!nfa_p2p_cb.is_p2p_listening)
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_enable_listening (NFA_ID_P2P, FALSE);
707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[server_sap].p_cback    = p_msg->api_reg_server.p_cback;
710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[server_sap].flags      = NFA_P2P_SAP_FLAG_SERVER;
711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.reg_server.server_handle = (NFA_HANDLE_GROUP_P2P | server_sap);
713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.reg_server.server_sap    = server_sap;
714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BCM_STRNCPY_S (evt_data.reg_server.service_name, sizeof (evt_data.reg_server.service_name),
715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                   p_msg->api_reg_server.service_name, LLCP_MAX_SN_LEN);
716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.reg_server.service_name[LLCP_MAX_SN_LEN] = 0;
717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* notify NFA_P2P_REG_SERVER_EVT to server */
719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[server_sap].p_cback (NFA_P2P_REG_SERVER_EVT, &evt_data);
720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if LLCP is already activated */
722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED)
723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.handle          = (NFA_HANDLE_GROUP_P2P | server_sap);
725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.local_link_miu  = nfa_p2p_cb.local_link_miu;
726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.remote_link_miu = nfa_p2p_cb.remote_link_miu;
727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* notify NFA_P2P_ACTIVATED_EVT to server */
729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[server_sap].p_cback (NFA_P2P_ACTIVATED_EVT, &evt_data);
730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_reg_client
738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Allocate a service as client and register to LLCP
740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_reg_client (tNFA_P2P_MSG *p_msg)
746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA  evt_data;
748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8              local_sap;
749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_reg_client ()");
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap = LLCP_RegisterClient (p_msg->api_reg_client.link_type,
753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     nfa_p2p_llcp_cback);
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (local_sap == LLCP_INVALID_SAP)
756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.reg_client.client_handle = NFA_HANDLE_INVALID;
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->api_reg_client.p_cback (NFA_P2P_REG_CLIENT_EVT, &evt_data);
759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return TRUE;
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[local_sap].p_cback = p_msg->api_reg_client.p_cback;
763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[local_sap].flags   = NFA_P2P_SAP_FLAG_CLIENT;
764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.reg_client.client_handle = (NFA_HANDLE_GROUP_P2P | local_sap);
766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_REG_CLIENT_EVT, &evt_data);
767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if LLCP is already activated */
769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED)
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.handle           = (NFA_HANDLE_GROUP_P2P | local_sap);
772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.local_link_miu   = nfa_p2p_cb.local_link_miu;
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.activated.remote_link_miu  = nfa_p2p_cb.remote_link_miu;
774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* notify NFA_P2P_ACTIVATED_EVT to client */
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_ACTIVATED_EVT, &evt_data);
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_dereg
785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deallocate a service as server or client and deregister to LLCP
787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  LLCP will deallocate data link connection created by this server
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_dereg (tNFA_P2P_MSG *p_msg)
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 local_sap, xx;
795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_dereg ()");
797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap = (UINT8) (p_msg->api_dereg.handle & NFA_HANDLE_MASK);
799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++)
803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE)
805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(nfa_p2p_cb.conn_cb[xx].local_sap == local_sap)  )
806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_deallocate_conn_cb (xx);
808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_Deregister (local_sap);
813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[local_sap].p_cback = NULL;
814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.is_p2p_listening)
816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* check if this is the last server on NFA P2P */
818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        for (xx = 0; xx < NFA_P2P_NUM_SAP; xx++)
819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  (nfa_p2p_cb.sap_cb[xx].p_cback)
821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(nfa_p2p_cb.sap_cb[xx].flags & NFA_P2P_SAP_FLAG_SERVER)  )
822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                break;
824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (xx >= NFA_P2P_NUM_SAP)
828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* if need to update WKS in LLCP Gen bytes */
830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_disable_listening (NFA_ID_P2P, TRUE);
832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_disable_listening (NFA_ID_P2P, FALSE);
834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* if need to update WKS in LLCP Gen bytes */
836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_enable_listening (NFA_ID_P2P, TRUE);
839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_accept_connection
848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Connection Confirm from local application
850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_accept_connection (tNFA_P2P_MSG *p_msg)
856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8                   xx;
858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_CONNECTION_PARAMS params;
859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_accept_connection ()");
861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx  = (UINT8) (p_msg->api_accept.conn_handle & NFA_HANDLE_MASK);
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    params.miu   = p_msg->api_accept.miu;
866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    params.rw    = p_msg->api_accept.rw;
867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    params.sn[0] = 0;
868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_ConnectCfm (nfa_p2p_cb.conn_cb[xx].local_sap, nfa_p2p_cb.conn_cb[xx].remote_sap, &params);
870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_reject_connection
877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Reject connection by local application
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_reject_connection (tNFA_P2P_MSG *p_msg)
885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 xx;
887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_reject_connection ()");
889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx  = (UINT8) (p_msg->api_reject.conn_handle & NFA_HANDLE_MASK);
891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_ConnectReject (nfa_p2p_cb.conn_cb[xx].local_sap, nfa_p2p_cb.conn_cb[xx].remote_sap,
894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        LLCP_SAP_DM_REASON_APP_REJECTED);
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* no need to deregister service on LLCP */
897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_deallocate_conn_cb (xx);
898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_disconnect
905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Disconnect data link connection by local application
907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_disconnect (tNFA_P2P_MSG *p_msg)
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap, xx;
915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_STATUS      status;
916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_disconnect ()");
919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = (UINT8) (p_msg->api_disconnect.conn_handle & NFA_HANDLE_MASK);
921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* if this is for data link connection */
923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (xx & NFA_P2P_HANDLE_FLAG_CONN)
924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = LLCP_DisconnectReq (nfa_p2p_cb.conn_cb[xx].local_sap, nfa_p2p_cb.conn_cb[xx].remote_sap,
928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     p_msg->api_disconnect.flush);
929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (status == LLCP_STATUS_SUCCESS)
931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* wait for disconnect response if successful */
933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return TRUE;
934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /*
938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** while we are waiting for connect confirm,
939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            ** we cannot sent DISC because we don't know DSAP yet
940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            */
941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            local_sap = nfa_p2p_cb.conn_cb[xx].local_sap;
942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (nfa_p2p_cb.sap_cb[local_sap].p_cback)
944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                evt_data.disc.reason = NFA_P2P_DISC_REASON_LOCAL_INITITATE;
947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_deallocate_conn_cb (xx);
949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        P2P_TRACE_ERROR0 ("Handle is not for Data link connection");
956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_create_data_link_connection
964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Create data link connection
966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_create_data_link_connection (tNFA_P2P_MSG *p_msg)
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8                   local_sap;
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA       evt_data;
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_CONNECTION_PARAMS conn_params;
976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_STATUS            status;
977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_create_data_link_connection ()");
979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap = (UINT8) (p_msg->api_connect.client_handle & NFA_HANDLE_MASK);
981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    conn_params.miu = p_msg->api_connect.miu;
983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    conn_params.rw  = p_msg->api_connect.rw;
984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NFA_P2pConnectBySap () */
986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_msg->api_connect.dsap != LLCP_INVALID_SAP)
987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        conn_params.sn[0] = 0;
989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = LLCP_ConnectReq (local_sap, p_msg->api_connect.dsap, &conn_params);
990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NFA_P2pConnectByName () */
992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        BCM_STRNCPY_S (conn_params.sn, sizeof (conn_params.sn),
995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                       p_msg->api_connect.service_name, LLCP_MAX_SN_LEN);
996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        conn_params.sn[LLCP_MAX_SN_LEN] = 0;
997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        status = LLCP_ConnectReq (local_sap, LLCP_SAP_SDP, &conn_params);
999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (status != LLCP_STATUS_SUCCESS)
1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_INFORMATION;
1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_DISC_EVT, &evt_data);
1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_send_ui
1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send UI PDU
1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_send_ui (tNFA_P2P_MSG *p_msg)
1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap;
1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_STATUS      status;
1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_send_ui ()");
1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap = (UINT8) (p_msg->api_send_ui.handle & NFA_HANDLE_MASK);
1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* decrease number of tx UI PDU which is not processed by NFA for congestion control */
1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.sap_cb[local_sap].num_pending_ui_pdu)
1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[local_sap].num_pending_ui_pdu--;
1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.total_pending_ui_pdu)
1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.total_pending_ui_pdu--;
1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = LLCP_SendUI (local_sap,
1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          p_msg->api_send_ui.dsap,
1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          p_msg->api_send_ui.p_msg);
1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (status == LLCP_STATUS_CONGESTED)
1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (!(nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_LLINK_CONGESTED))
1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* notify that this logical link is congested */
1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.link_type    = NFA_P2P_LLINK_TYPE;
1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.handle       = (NFA_HANDLE_GROUP_P2P | local_sap);
1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.is_congested = TRUE;
1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_send_data
1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send I PDU
1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_send_data (tNFA_P2P_MSG *p_msg)
1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tLLCP_STATUS      status;
1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             xx;
1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_send_data ()");
1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = (UINT8) (p_msg->api_send_data.conn_handle & NFA_HANDLE_MASK);
1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* decrease number of tx I PDU which is not processed by NFA for congestion control */
1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu)
1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu--;
1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (nfa_p2p_cb.total_pending_i_pdu)
1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.total_pending_i_pdu--;
1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = LLCP_SendData (nfa_p2p_cb.conn_cb[xx].local_sap,
1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            nfa_p2p_cb.conn_cb[xx].remote_sap,
1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            p_msg->api_send_data.p_msg);
1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (status == LLCP_STATUS_CONGESTED)
1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (!(nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED))
1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED;
1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* notify that this data link is congested */
1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.link_type    = NFA_P2P_DLINK_TYPE;
1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.handle       = (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx);
1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.congest.is_congested = TRUE;
1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_p2p_cb.sap_cb[nfa_p2p_cb.conn_cb[xx].local_sap].p_cback (NFA_P2P_CONGEST_EVT, &evt_data);
1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_set_local_busy
1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set or reset local busy
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_set_local_busy (tNFA_P2P_MSG *p_msg)
1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 xx;
1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_set_local_busy ()");
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx = (UINT8) (p_msg->api_local_busy.conn_handle & NFA_HANDLE_MASK);
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_SetLocalBusyStatus (nfa_p2p_cb.conn_cb[xx].local_sap,
1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             nfa_p2p_cb.conn_cb[xx].remote_sap,
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                             p_msg->api_local_busy.is_busy);
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_get_link_info
1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Get WKS of remote and link MIU
1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_get_link_info (tNFA_P2P_MSG *p_msg)
1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap;
1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_get_link_info ()");
1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.link_info.handle          = p_msg->api_link_info.handle;
1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.link_info.wks             = LLCP_GetRemoteWKS ();
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.link_info.local_link_miu  = nfa_p2p_cb.local_link_miu;
1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    evt_data.link_info.remote_link_miu = nfa_p2p_cb.remote_link_miu;
1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap =  (UINT8) (p_msg->api_link_info.handle & NFA_HANDLE_MASK);
1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_LINK_INFO_EVT, &evt_data);
1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_get_remote_sap
1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Get remote SAP
1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_get_remote_sap (tNFA_P2P_MSG *p_msg)
1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_P2P_EVT_DATA evt_data;
1178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8             local_sap;
1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    P2P_TRACE_DEBUG0 ("nfa_p2p_get_remote_sap ()");
1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    local_sap =  (UINT8) (p_msg->api_remote_sap.handle & NFA_HANDLE_MASK);
1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (!nfa_p2p_start_sdp (p_msg->api_remote_sap.service_name,
1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            local_sap))
1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.sdp.handle     = p_msg->api_remote_sap.handle;
1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        evt_data.sdp.remote_sap = 0x00;
1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_p2p_cb.sap_cb[local_sap].p_cback (NFA_P2P_SDP_EVT, &evt_data);
1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_p2p_set_llcp_cfg
1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set LLCP configuration
1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE to deallocate buffer
1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_p2p_set_llcp_cfg (tNFA_P2P_MSG *p_msg)
1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    LLCP_SetConfig (p_msg->api_set_llcp_cfg.link_miu,
1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.opt,
1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.wt,
1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.link_timeout,
1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.inact_timeout_init,
1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.inact_timeout_target,
1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.symm_delay,
1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.data_link_timeout,
1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg->api_set_llcp_cfg.delay_first_pdu_timeout);
1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
12195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
12205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/*******************************************************************************
12215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
12225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function         nfa_p2p_restart_rf_discovery
12235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
12245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description      Restart RF discovery by deactivating to IDLE
12255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
12265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
12275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns          TRUE to deallocate buffer
12285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**
12295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/
12305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenenBOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg)
12315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{
12325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    P2P_TRACE_DEBUG0 ("nfa_p2p_restart_rf_discovery ()");
12335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
12345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
12355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
12365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    return TRUE;
12375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen}
1238