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