1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 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 "llcp_api.h" 266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "llcp_defs.h" 276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_dm_int.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_api.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_p2p_int.h" 306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_sys.h" 316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfa_sys_int.h" 326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_api.h" 336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "string.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** 54512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoi** Returns uint8_t 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic uint8_t nfa_p2p_allocate_conn_cb(uint8_t local_sap) { 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++) { 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.conn_cb[xx].flags == 0) { 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_IN_USE; 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].local_sap = local_sap; 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (xx); 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0("nfa_p2p_allocate_conn_cb (): No resource"); 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return LLCP_MAX_DATA_LINK; 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_deallocate_conn_cb 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deallocate data link connection control block 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_p2p_deallocate_conn_cb(uint8_t xx) { 856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx < LLCP_MAX_DATA_LINK) { 866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags = 0; 876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR1("nfa_p2p_deallocate_conn_cb (): Invalid index (%d)", xx); 896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_find_conn_cb 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find data link connection control block by local/remote SAP 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 99512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoi** Returns uint8_t 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic uint8_t nfa_p2p_find_conn_cb(uint8_t local_sap, uint8_t remote_sap) { 1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++) { 1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE) && 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.conn_cb[xx].local_sap == local_sap) && 1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.conn_cb[xx].remote_sap == remote_sap)) { 1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (xx); 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (LLCP_MAX_DATA_LINK); 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_llcp_cback 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing SAP callback events from LLCP 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void nfa_p2p_llcp_cback(tLLCP_SAP_CBACK_DATA* p_data) { 1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG2("nfa_p2p_llcp_cback (): event:0x%02X, local_sap:0x%02X", 1286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->hdr.event, p_data->hdr.local_sap); 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi switch (p_data->hdr.event) { 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_DATA_IND: 1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_data_ind(p_data); 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_CONNECT_IND: 1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_connect_ind(p_data); 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_CONNECT_RESP: 1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_connect_resp(p_data); 1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_DISCONNECT_IND: 1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_disconnect_ind(p_data); 1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_DISCONNECT_RESP: 1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_disconnect_resp(p_data); 1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_CONGEST: 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_congestion(p_data); 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case LLCP_SAP_EVT_LINK_STATUS: 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_proc_llcp_link_status(p_data); 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR1("nfa_p2p_llcp_cback (): Unknown event:0x%02X", 1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->hdr.event); 1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return; 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_sdp_cback 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process SDP callback event from LLCP 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_sdp_cback(uint8_t tid, uint8_t remote_sap) { 1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG2("nfa_p2p_sdp_cback (): tid:0x%02X, remote_sap:0x%02X", tid, 1826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi remote_sap); 1836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* search for callback function to process */ 1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++) { 1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((nfa_p2p_cb.sdp_cb[xx].local_sap != LLCP_INVALID_SAP) && 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.sdp_cb[xx].tid == tid)) { 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = nfa_p2p_cb.sdp_cb[xx].local_sap; 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.sdp.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.sdp.remote_sap = remote_sap; 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_SDP_EVT, &evt_data); 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sdp_cb[xx].local_sap = LLCP_INVALID_SAP; 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_start_sdp 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Initiate SDP 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE if success 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_start_sdp(char* p_service_name, uint8_t local_sap) { 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx; 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG1("nfa_p2p_start_sdp (): SN:<%s>", p_service_name); 2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* search for empty slot */ 2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++) { 2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sdp_cb[xx].local_sap == LLCP_INVALID_SAP) { 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (LLCP_DiscoverService(p_service_name, nfa_p2p_sdp_cback, 2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi &(nfa_p2p_cb.sdp_cb[xx].tid)) == 2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_STATUS_SUCCESS) { 2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sdp_cb[xx].local_sap = local_sap; 2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* failure of SDP */ 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return false; 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return false; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_data_ind 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing incoming data event from LLCP 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_data_ind(tLLCP_SAP_CBACK_DATA* p_data) { 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_data_ind ()"); 2476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->data_ind.local_sap; 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.data.handle = 0; 2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if connectionless */ 2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->data_ind.link_type == NFA_P2P_LLINK_TYPE) { 2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.data.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_find_conn_cb(p_data->data_ind.local_sap, 2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->data_ind.remote_sap); 2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.data.handle = 2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.data.remote_sap = p_data->data_ind.remote_sap; 2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.data.link_type = p_data->data_ind.link_type; 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify upper layer that there are data at LLCP */ 2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DATA_EVT, &evt_data); 2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_connect_ind 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing connection request from peer 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_connect_ind(tLLCP_SAP_CBACK_DATA* p_data) { 2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t server_sap, local_sap; 2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG1("nfa_p2p_proc_llcp_connect_ind () server_sap:0x%x", 2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->connect_ind.server_sap); 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi server_sap = p_data->connect_ind.server_sap; 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->connect_ind.local_sap; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[server_sap].p_cback) { 2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_allocate_conn_cb(server_sap); 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap = p_data->connect_ind.remote_sap; 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_miu = p_data->connect_ind.miu; 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* peer will not receive any data */ 3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->connect_ind.rw == 0) 3036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO; 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.conn_req.server_handle = (NFA_HANDLE_GROUP_P2P | server_sap); 3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.conn_req.conn_handle = 3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.conn_req.remote_sap = p_data->connect_ind.remote_sap; 3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.conn_req.remote_miu = p_data->connect_ind.miu; 3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.conn_req.remote_rw = p_data->connect_ind.rw; 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[server_sap].p_cback(NFA_P2P_CONN_REQ_EVT, &evt_data); 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0("nfa_p2p_proc_llcp_connect_ind (): Not registered"); 3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_connect_resp 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing connection response from peer 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_connect_resp(tLLCP_SAP_CBACK_DATA* p_data) { 3306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 3316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_connect_resp ()"); 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->connect_resp.local_sap; 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_allocate_conn_cb(local_sap); 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap = p_data->connect_resp.remote_sap; 3426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_miu = p_data->connect_resp.miu; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* peer will not receive any data */ 3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->connect_resp.rw == 0) 3466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO; 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.connected.client_handle = (NFA_HANDLE_GROUP_P2P | local_sap); 3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.connected.conn_handle = 3506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 3516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.connected.remote_sap = p_data->connect_resp.remote_sap; 3526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.connected.remote_miu = p_data->connect_resp.miu; 3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.connected.remote_rw = p_data->connect_resp.rw; 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONNECTED_EVT, &evt_data); 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 3576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_disconnect_ind 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing disconnection request from peer 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_disconnect_ind(tLLCP_SAP_CBACK_DATA* p_data) { 3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_disconnect_ind ()"); 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->disconnect_ind.local_sap; 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_find_conn_cb(p_data->disconnect_ind.local_sap, 3806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->disconnect_ind.remote_sap); 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = 3846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 3856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_REMOTE_INITIATE; 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* 3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ** LLCP link has been deactivated before receiving CC or DM. 3936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ** Return NFA_P2P_DISC_EVT to indicate failure of creating 3946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ** connection 3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi */ 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED; 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0("nfa_p2p_proc_llcp_disconnect_ind (): Link deactivated"); 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 4046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_disconnect_resp 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing rejected connection from peer 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_disconnect_resp(tLLCP_SAP_CBACK_DATA* p_data) { 4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 4196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 4206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_disconnect_resp ()"); 4226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->disconnect_resp.local_sap; 4246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 4266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_RESP_DISC) { 4276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_LOCAL_INITITATE; 4286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if ((p_data->disconnect_resp.reason == 4296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_APP_REJECTED) || 4306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_data->disconnect_resp.reason == 4316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_PERM_REJECT_THIS) || 4326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_data->disconnect_resp.reason == 4336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_PERM_REJECT_ANY) || 4346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_data->disconnect_resp.reason == 4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_TEMP_REJECT_THIS) || 4366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_data->disconnect_resp.reason == 4376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_TEMP_REJECT_ANY)) { 4386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_REMOTE_REJECT; 4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (p_data->disconnect_resp.reason == 4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_NO_SERVICE) { 4416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_SERVICE; 4426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (p_data->disconnect_resp.reason == 4436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_NO_ACTIVE_CONNECTION) { 4446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED; 4456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_INFORMATION; 4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (evt_data.disc.reason == NFA_P2P_DISC_REASON_LOCAL_INITITATE) { 4506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_find_conn_cb(p_data->disconnect_resp.local_sap, 4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->disconnect_resp.remote_sap); 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = 4556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 4616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0( 4626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "nfa_p2p_proc_llcp_disconnect_resp (): No connection found"); 4636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 4666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_congest 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing LLCP congestion event 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_congestion(tLLCP_SAP_CBACK_DATA* p_data) { 4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, remote_sap, xx; 4836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->congest.local_sap; 4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi remote_sap = p_data->congest.remote_sap; 4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.link_type = p_data->congest.link_type; 4896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.is_congested = p_data->congest.is_congested; 4906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->congest.is_congested) { 4926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG2("nfa_p2p_proc_llcp_congestion () START SAP=(0x%x,0x%x)", 4936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap, remote_sap); 4946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 4966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG2("nfa_p2p_proc_llcp_congestion () END SAP=(0x%x,0x%x)", 4976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap, remote_sap); 4986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 5016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (evt_data.congest.link_type == NFA_P2P_LLINK_TYPE) { 5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 5036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((evt_data.congest.is_congested == false) && 5056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.sap_cb[local_sap].flags & 5066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_P2P_SAP_FLAG_LLINK_CONGESTED)) { 5076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags &= ~NFA_P2P_SAP_FLAG_LLINK_CONGESTED; 5086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data); 5096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if ((evt_data.congest.is_congested == true) && 5106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (!(nfa_p2p_cb.sap_cb[local_sap].flags & 5116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_P2P_SAP_FLAG_LLINK_CONGESTED))) { 5126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* this is overall congestion due to high usage of buffer pool */ 5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED; 5146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data); 5156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 5166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 5176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = nfa_p2p_find_conn_cb(local_sap, remote_sap); 5186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx != LLCP_MAX_DATA_LINK) { 5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.handle = 5216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 5226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((evt_data.congest.is_congested == false) && 5246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED)) { 5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags &= ~NFA_P2P_CONN_FLAG_CONGESTED; 5266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data); 5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if ((evt_data.congest.is_congested == true) && 5286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (!(nfa_p2p_cb.conn_cb[xx].flags & 5296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_P2P_CONN_FLAG_CONGESTED))) { 5306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* this is overall congestion due to high usage of buffer pool */ 5316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED; 5326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data); 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 5346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 5356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0( 5366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "nfa_p2p_proc_llcp_congestion (): No connection found"); 5376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 5396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_proc_llcp_link_status 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Processing LLCP link status 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns next state after processing this event 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_proc_llcp_link_status(tLLCP_SAP_CBACK_DATA* p_data) { 5536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 5546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG1("nfa_p2p_proc_llcp_link_status () is_activated:%d", 5576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->link_status.is_activated); 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = p_data->link_status.local_sap; 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 5626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data->link_status.is_activated) { 5636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* only for server */ 5646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 5656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.local_link_miu = nfa_p2p_cb.local_link_miu; 5666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.remote_link_miu = nfa_p2p_cb.remote_link_miu; 5676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_ACTIVATED_EVT, &evt_data); 5696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else /* if LLCP link is deactivated */ 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 5716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++) { 5726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE) && 5736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.conn_cb[xx].local_sap == local_sap)) { 5746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = 5756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 5766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_LLCP_DEACTIVATED; 5776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 5796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 5816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 5826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify deactivation and clear flags */ 5846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_SERVER) { 5856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.deactivated.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 5866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DEACTIVATED_EVT, 5876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi &evt_data); 5886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags = NFA_P2P_SAP_FLAG_SERVER; 5906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (nfa_p2p_cb.sap_cb[local_sap].flags & NFA_P2P_SAP_FLAG_CLIENT) { 5916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.deactivated.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 5926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DEACTIVATED_EVT, 5936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi &evt_data); 5946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags = NFA_P2P_SAP_FLAG_CLIENT; 5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else /* if this is not registered service */ 5976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi { 5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback = NULL; 5996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 6016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_reg_server 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allocate a service as server and register to LLCP 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns FALSE if need to keep buffer 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_reg_server(tNFA_P2P_MSG* p_msg) { 6156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 6166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t server_sap; 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_reg_server ()"); 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi server_sap = LLCP_RegisterServer( 6216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_reg_server.server_sap, p_msg->api_reg_server.link_type, 6226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_reg_server.service_name, nfa_p2p_llcp_cback); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (server_sap == LLCP_INVALID_SAP) { 6256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_server.server_handle = NFA_HANDLE_INVALID; 6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_server.server_sap = NFA_P2P_INVALID_SAP; 6276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi strncpy(evt_data.reg_server.service_name, 6286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_reg_server.service_name, LLCP_MAX_SN_LEN); 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.reg_server.service_name[LLCP_MAX_SN_LEN] = 0; 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_reg_server.p_cback(NFA_P2P_REG_SERVER_EVT, &evt_data); 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6334a179646f6d5567830a0383050aee7610a0222a6Ruchi Kandoi return true; 6346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if need to update WKS in LLCP Gen bytes */ 6376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (server_sap <= LLCP_UPPER_BOUND_WK_SAP) { 6386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_enable_listening(NFA_ID_P2P, true); 6396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (!nfa_p2p_cb.is_p2p_listening) { 6406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_enable_listening(NFA_ID_P2P, false); 6416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[server_sap].p_cback = p_msg->api_reg_server.p_cback; 6446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[server_sap].flags = NFA_P2P_SAP_FLAG_SERVER; 6456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_server.server_handle = (NFA_HANDLE_GROUP_P2P | server_sap); 6476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_server.server_sap = server_sap; 6486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi strncpy(evt_data.reg_server.service_name, p_msg->api_reg_server.service_name, 6496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_MAX_SN_LEN); 6506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_server.service_name[LLCP_MAX_SN_LEN] = 0; 6516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify NFA_P2P_REG_SERVER_EVT to server */ 6536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[server_sap].p_cback(NFA_P2P_REG_SERVER_EVT, &evt_data); 6546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if LLCP is already activated */ 6566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED) { 6576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.handle = (NFA_HANDLE_GROUP_P2P | server_sap); 6586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.local_link_miu = nfa_p2p_cb.local_link_miu; 6596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.remote_link_miu = nfa_p2p_cb.remote_link_miu; 6606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify NFA_P2P_ACTIVATED_EVT to server */ 6626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[server_sap].p_cback(NFA_P2P_ACTIVATED_EVT, &evt_data); 6636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_reg_client 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allocate a service as client and register to LLCP 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_reg_client(tNFA_P2P_MSG* p_msg) { 6796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 6806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_reg_client ()"); 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = 6856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_RegisterClient(p_msg->api_reg_client.link_type, nfa_p2p_llcp_cback); 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (local_sap == LLCP_INVALID_SAP) { 6886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_client.client_handle = NFA_HANDLE_INVALID; 6896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_reg_client.p_cback(NFA_P2P_REG_CLIENT_EVT, &evt_data); 6906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 6916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback = p_msg->api_reg_client.p_cback; 6946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags = NFA_P2P_SAP_FLAG_CLIENT; 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.reg_client.client_handle = (NFA_HANDLE_GROUP_P2P | local_sap); 6976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_REG_CLIENT_EVT, &evt_data); 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if LLCP is already activated */ 7006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED) { 7016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 7026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.local_link_miu = nfa_p2p_cb.local_link_miu; 7036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.activated.remote_link_miu = nfa_p2p_cb.remote_link_miu; 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify NFA_P2P_ACTIVATED_EVT to client */ 7066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_ACTIVATED_EVT, &evt_data); 7076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_dereg 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 716552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description Deallocate a service as server or client and deregister to 717552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** LLCP. LLCP will deallocate data link connection created by 718552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** this server 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_dereg(tNFA_P2P_MSG* p_msg) { 7246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_dereg ()"); 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = (uint8_t)(p_msg->api_dereg.handle & NFA_HANDLE_MASK); 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 7316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < LLCP_MAX_DATA_LINK; xx++) { 7326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_IN_USE) && 7336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.conn_cb[xx].local_sap == local_sap)) { 7346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 7356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 7376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_Deregister(local_sap); 7406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback = NULL; 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.is_p2p_listening) { 7436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* check if this is the last server on NFA P2P */ 7446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < NFA_P2P_NUM_SAP; xx++) { 7456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((nfa_p2p_cb.sap_cb[xx].p_cback) && 7466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (nfa_p2p_cb.sap_cb[xx].flags & NFA_P2P_SAP_FLAG_SERVER)) { 7476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi break; 7486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 7496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx >= NFA_P2P_NUM_SAP) { 7526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if need to update WKS in LLCP Gen bytes */ 7536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (local_sap <= LLCP_UPPER_BOUND_WK_SAP) 7546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_disable_listening(NFA_ID_P2P, true); 7556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi else 7566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_disable_listening(NFA_ID_P2P, false); 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 7586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if need to update WKS in LLCP Gen bytes */ 7596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi else if (local_sap <= LLCP_UPPER_BOUND_WK_SAP) { 7606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_enable_listening(NFA_ID_P2P, true); 7616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 7626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_accept_connection 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Connection Confirm from local application 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_accept_connection(tNFA_P2P_MSG* p_msg) { 7786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 7796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_CONNECTION_PARAMS params; 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_accept_connection ()"); 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = (uint8_t)(p_msg->api_accept.conn_handle & NFA_HANDLE_MASK); 7846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx &= ~NFA_P2P_HANDLE_FLAG_CONN; 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi params.miu = p_msg->api_accept.miu; 7876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi params.rw = p_msg->api_accept.rw; 7886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi params.sn[0] = 0; 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_ConnectCfm(nfa_p2p_cb.conn_cb[xx].local_sap, 7916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap, ¶ms); 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_reject_connection 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Reject connection by local application 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_reject_connection(tNFA_P2P_MSG* p_msg) { 8076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_reject_connection ()"); 810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = (uint8_t)(p_msg->api_reject.conn_handle & NFA_HANDLE_MASK); 8126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx &= ~NFA_P2P_HANDLE_FLAG_CONN; 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_ConnectReject(nfa_p2p_cb.conn_cb[xx].local_sap, 8156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap, 8166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SAP_DM_REASON_APP_REJECTED); 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* no need to deregister service on LLCP */ 8196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_disconnect 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Disconnect data link connection by local application 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_disconnect(tNFA_P2P_MSG* p_msg) { 8356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap, xx; 8366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_STATUS status; 8376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_disconnect ()"); 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = (uint8_t)(p_msg->api_disconnect.conn_handle & NFA_HANDLE_MASK); 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* if this is for data link connection */ 8446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (xx & NFA_P2P_HANDLE_FLAG_CONN) { 8456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx &= ~NFA_P2P_HANDLE_FLAG_CONN; 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = LLCP_DisconnectReq(nfa_p2p_cb.conn_cb[xx].local_sap, 8486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap, 8496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_disconnect.flush); 8506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (status == LLCP_STATUS_SUCCESS) { 8526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* wait for disconnect response if successful */ 8536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 8546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 8556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* 8566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ** while we are waiting for connect confirm, 8576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ** we cannot sent DISC because we don't know DSAP yet 8586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi */ 8596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = nfa_p2p_cb.conn_cb[xx].local_sap; 8606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].p_cback) { 8626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = 8636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 8646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_LOCAL_INITITATE; 8656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_deallocate_conn_cb(xx); 8676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 8686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 8706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 8716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_ERROR0("Handle is not for Data link connection"); 8726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_create_data_link_connection 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Create data link connection 882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_create_data_link_connection(tNFA_P2P_MSG* p_msg) { 8886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 8896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 8906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_CONNECTION_PARAMS conn_params; 8916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_STATUS status; 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_create_data_link_connection ()"); 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = (uint8_t)(p_msg->api_connect.client_handle & NFA_HANDLE_MASK); 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi conn_params.miu = p_msg->api_connect.miu; 8986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi conn_params.rw = p_msg->api_connect.rw; 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_P2pConnectBySap () */ 9016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_msg->api_connect.dsap != LLCP_INVALID_SAP) { 9026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi conn_params.sn[0] = 0; 9036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = LLCP_ConnectReq(local_sap, p_msg->api_connect.dsap, &conn_params); 9046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 9056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_P2pConnectByName () */ 9066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi else { 9076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi strncpy(conn_params.sn, p_msg->api_connect.service_name, LLCP_MAX_SN_LEN); 9086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi conn_params.sn[LLCP_MAX_SN_LEN] = 0; 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = LLCP_ConnectReq(local_sap, LLCP_SAP_SDP, &conn_params); 9116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (status != LLCP_STATUS_SUCCESS) { 9146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 9156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.disc.reason = NFA_P2P_DISC_REASON_NO_INFORMATION; 916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data); 9186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_send_ui 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send UI PDU 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 9336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_send_ui(tNFA_P2P_MSG* p_msg) { 9346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 9356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_STATUS status; 9366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_send_ui ()"); 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = (uint8_t)(p_msg->api_send_ui.handle & NFA_HANDLE_MASK); 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* decrease number of tx UI PDU which is not processed by NFA for congestion 9436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * control */ 9446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.sap_cb[local_sap].num_pending_ui_pdu) 9456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].num_pending_ui_pdu--; 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.total_pending_ui_pdu) nfa_p2p_cb.total_pending_ui_pdu--; 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = 9506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SendUI(local_sap, p_msg->api_send_ui.dsap, p_msg->api_send_ui.p_msg); 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (status == LLCP_STATUS_CONGESTED) { 9536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!(nfa_p2p_cb.sap_cb[local_sap].flags & 9546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_P2P_SAP_FLAG_LLINK_CONGESTED)) { 9556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED; 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify that this logical link is congested */ 9586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.link_type = NFA_P2P_LLINK_TYPE; 9596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.handle = (NFA_HANDLE_GROUP_P2P | local_sap); 9606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.is_congested = true; 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data); 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 9646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_send_data 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send I PDU 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 9796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_send_data(tNFA_P2P_MSG* p_msg) { 9806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 9816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tLLCP_STATUS status; 9826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_send_data ()"); 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = (uint8_t)(p_msg->api_send_data.conn_handle & NFA_HANDLE_MASK); 9876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx &= ~NFA_P2P_HANDLE_FLAG_CONN; 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* decrease number of tx I PDU which is not processed by NFA for congestion 9906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * control */ 9916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu) 9926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].num_pending_i_pdu--; 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_p2p_cb.total_pending_i_pdu) nfa_p2p_cb.total_pending_i_pdu--; 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = LLCP_SendData(nfa_p2p_cb.conn_cb[xx].local_sap, 9976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap, 9986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_send_data.p_msg); 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (status == LLCP_STATUS_CONGESTED) { 10016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!(nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED)) { 10026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED; 1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* notify that this data link is congested */ 10056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.link_type = NFA_P2P_DLINK_TYPE; 10066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.handle = 10076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (NFA_HANDLE_GROUP_P2P | NFA_P2P_HANDLE_FLAG_CONN | xx); 10086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.congest.is_congested = true; 1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[nfa_p2p_cb.conn_cb[xx].local_sap].p_cback( 10116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_P2P_CONGEST_EVT, &evt_data); 1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 10136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_set_local_busy 1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set or reset local busy 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 10286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_set_local_busy(tNFA_P2P_MSG* p_msg) { 10296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t xx; 1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_set_local_busy ()"); 1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx = (uint8_t)(p_msg->api_local_busy.conn_handle & NFA_HANDLE_MASK); 10346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi xx &= ~NFA_P2P_HANDLE_FLAG_CONN; 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SetLocalBusyStatus(nfa_p2p_cb.conn_cb[xx].local_sap, 10376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.conn_cb[xx].remote_sap, 10386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_local_busy.is_busy); 1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_get_link_info 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Get WKS of remote and link MIU 1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 10536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_get_link_info(tNFA_P2P_MSG* p_msg) { 10546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 10556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_get_link_info ()"); 1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.link_info.handle = p_msg->api_link_info.handle; 10606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.link_info.wks = LLCP_GetRemoteWKS(); 10616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.link_info.local_link_miu = nfa_p2p_cb.local_link_miu; 10626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.link_info.remote_link_miu = nfa_p2p_cb.remote_link_miu; 1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = (uint8_t)(p_msg->api_link_info.handle & NFA_HANDLE_MASK); 10656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_LINK_INFO_EVT, &evt_data); 1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_get_remote_sap 1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Get remote SAP 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 10806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_get_remote_sap(tNFA_P2P_MSG* p_msg) { 10816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_P2P_EVT_DATA evt_data; 10826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t local_sap; 1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_get_remote_sap ()"); 1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi local_sap = (uint8_t)(p_msg->api_remote_sap.handle & NFA_HANDLE_MASK); 1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!nfa_p2p_start_sdp(p_msg->api_remote_sap.service_name, local_sap)) { 10896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.sdp.handle = p_msg->api_remote_sap.handle; 10906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi evt_data.sdp.remote_sap = 0x00; 10916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_SDP_EVT, &evt_data); 10926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_p2p_set_llcp_cfg 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set LLCP configuration 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE to deallocate buffer 1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 11076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_set_llcp_cfg(tNFA_P2P_MSG* p_msg) { 11086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LLCP_SetConfig(p_msg->api_set_llcp_cfg.link_miu, p_msg->api_set_llcp_cfg.opt, 11096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.wt, 11106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.link_timeout, 11116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.inact_timeout_init, 11126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.inact_timeout_target, 11136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.symm_delay, 11146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.data_link_timeout, 11156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->api_set_llcp_cfg.delay_first_pdu_timeout); 11166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 11176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 11195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 11205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 11215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 11225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function nfa_p2p_restart_rf_discovery 11235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 11245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description Restart RF discovery by deactivating to IDLE 11255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 11265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 11275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns TRUE to deallocate buffer 11285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 11295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 11306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_p2p_restart_rf_discovery(tNFA_P2P_MSG* p_msg) { 11316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi P2P_TRACE_DEBUG0("nfa_p2p_restart_rf_discovery ()"); 11325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 11336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE); 11345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 11356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return true; 11365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 1137