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