16ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/****************************************************************************** 26ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 36ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * Copyright (C) 2006-2012 Broadcom Corporation 46ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 56ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * Licensed under the Apache License, Version 2.0 (the "License"); 66ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * you may not use this file except in compliance with the License. 76ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * You may obtain a copy of the License at: 86ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 96ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * http://www.apache.org/licenses/LICENSE-2.0 106ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 116ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * Unless required by applicable law or agreed to in writing, software 126ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * distributed under the License is distributed on an "AS IS" BASIS, 136ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 146ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * See the License for the specific language governing permissions and 156ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * limitations under the License. 166ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 176ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach ******************************************************************************/ 186ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach 196ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/****************************************************************************** 206ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 216ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * This file contains action functions for advanced audio. 226ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * 236ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach ******************************************************************************/ 2466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 2566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include <hardware/bluetooth.h> 2666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include <arpa/inet.h> 2766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 2866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bt_types.h" 2966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "gki.h" 3066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bd.h" 3166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "utl.h" 3266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bta_sys.h" 3366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bta_api.h" 3466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bta_jv_api.h" 3566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bta_jv_int.h" 3666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "bta_jv_co.h" 3766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "btm_api.h" 3866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "btm_int.h" 3966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "sdp_api.h" 4066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "l2c_api.h" 4166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "port_api.h" 4266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include <string.h> 4366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "rfcdefs.h" 4466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "avct_api.h" 4566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include "avdt_api.h" 4666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 4766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 4866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#include <cutils/log.h> 49595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie#define info(fmt, ...) ALOGI ("%s: " fmt,__FUNCTION__, ## __VA_ARGS__) 50595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie#define debug(fmt, ...) ALOGD ("%s: " fmt,__FUNCTION__, ## __VA_ARGS__) 51595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie#define error(fmt, ...) ALOGE ("## ERROR : %s: " fmt "##",__FUNCTION__, ## __VA_ARGS__) 52595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie#define asrt(s) if(!(s)) ALOGE ("## %s assert %s failed at line:%d ##",__FUNCTION__, #s, __LINE__) 5366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 5466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 5566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 5666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#define HDL2CB(handle) \ 5766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 __hi = ((handle) & BTA_JV_RFC_HDL_MASK) - 1; \ 5866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 __si = BTA_JV_RFC_HDL_TO_SIDX(handle); \ 5966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = &bta_jv_cb.rfc_cb[__hi]; \ 6066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[__si] - 1] 6166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 6266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryaniextern void uuid_to_string(bt_uuid_t *p_uuid, char *str); 6366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic inline void logu(const char* title, const uint8_t * p_uuid) 6466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 6566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani char uuids[128]; 6666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani uuid_to_string((bt_uuid_t*)p_uuid, uuids); 67595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie ALOGD("%s: %s", title, uuids); 6866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 6966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 7066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 7166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb); 7266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 7366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 7466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 7566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_local_device_addr_cback 7666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 7766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback from btm after local bdaddr is read 7866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 7966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 8066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 8166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 8266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_get_local_device_addr_cback(BD_ADDR bd_addr) 8366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 8466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 8566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_LOCAL_ADDR_EVT, (tBTA_JV *)bd_addr, 0); 8666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 8766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 8866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 8966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 9066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_remote_device_name_cback 9166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 9266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback from btm after remote name is read 9366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 9466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 9566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 9666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 9766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_get_remote_device_name_cback(tBTM_REMOTE_DEV_NAME *p_name) 9866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 9966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 10066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_name = p_name->remote_bd_name; 10166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 10266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_REMOTE_NAME_EVT, &evt_data, 0); 10366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 10466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 10566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 10666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 10766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_alloc_sec_id 10866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 10966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description allocate a security id 11066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 11166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 11266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 11366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 11466aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniUINT8 bta_jv_alloc_sec_id(void) 11566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 11666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 ret = 0; 11766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int i; 11866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_NUM_SERVICE_ID; i++) 11966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 12066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(0 == bta_jv_cb.sec_id[i]) 12166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 12266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sec_id[i] = BTA_JV_FIRST_SERVICE_ID + i; 12366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = bta_jv_cb.sec_id[i]; 12466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 12566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 12666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 12766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return ret; 12866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 12966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 13066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 13166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 13266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 13366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_sec_id 13466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 13566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free the given security id 13666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 13766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 13866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 13966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 14066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_free_sec_id(UINT8 *p_sec_id) 14166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 14266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 sec_id = *p_sec_id; 14366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani *p_sec_id = 0; 14466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(sec_id >= BTA_JV_FIRST_SERVICE_ID && sec_id <= BTA_JV_LAST_SERVICE_ID) 14566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 14666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SecClrService(sec_id); 14766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sec_id[sec_id - BTA_JV_FIRST_SERVICE_ID] = 0; 14866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 14966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 15066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 15166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 15266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 15366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_alloc_rfc_cb 15466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 15566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description allocate a control block for the given port handle 15666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 15766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 15866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 15966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 16066aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_RFC_CB * bta_jv_alloc_rfc_cb(UINT16 port_handle, tBTA_JV_PCB **pp_pcb) 16166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 16266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = NULL; 16366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb; 16466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int i; 16566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_RFC_CONN; i++) 16666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 16766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(0 == bta_jv_cb.rfc_cb[i].handle ) 16866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 16966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = &bta_jv_cb.rfc_cb[i]; 17066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->handle = i + 1; 17166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->max_sess = 1; 17266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->rfc_hdl[0] = port_handle; 17366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "bta_jv_alloc_rfc_cb port_handle:%d handle:%d", 17466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani port_handle, p_cb->handle); 17566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; 17666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->handle = p_cb->handle; 17766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->port_handle = port_handle; 17866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani *pp_pcb = p_pcb; 17966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 18066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 18166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 18266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return p_cb; 18366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 18466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 18566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 18666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 18766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfc_port_to_pcb 18866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 18966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description find the port control block associated with the given port handle 19066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 19166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 19266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 19366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 19466aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_PCB * bta_jv_rfc_port_to_pcb(UINT16 port_handle) 19566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 19666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = NULL; 19766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) && bta_jv_cb.port_cb[port_handle - 1].handle) 19966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 20066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; 20166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 20266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 20366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return p_pcb; 20466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 20566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 20666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 20766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 20866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfc_port_to_cb 20966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 21066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description find the RFCOMM control block associated with the given port handle 21166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 21266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 21366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 21466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 21566aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_RFC_CB * bta_jv_rfc_port_to_cb(UINT16 port_handle) 21666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 21766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = NULL; 21866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 handle; 21966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 22066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) && bta_jv_cb.port_cb[port_handle - 1].handle) 22166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 22266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = bta_jv_cb.port_cb[port_handle - 1].handle; 22366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle &= BTA_JV_RFC_HDL_MASK; 22466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (handle) 22566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = &bta_jv_cb.rfc_cb[handle - 1]; 22666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 22766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return p_cb; 22866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 22966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 23066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 23166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 23266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_rfc_pcb 23366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 23466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free the given port control block 23566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 23666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 23766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 23866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 23966aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_STATUS bta_jv_free_rfc_pcb(tBTA_JV_PCB *p_pcb) 24066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 24166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 24266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BOOLEAN remove = FALSE; 24366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BOOLEAN is_server = TRUE; 24466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 port_handle; 24566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 24666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "bta_jv_free_rfc_pcb handle:%d s:%d", p_pcb->port_handle, p_pcb->state); 24766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 24866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_pcb->port_handle) 24966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 25066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_ST_NONE != p_pcb->state) 25166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 25266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani remove = TRUE; 25366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_pcb->state <= BTA_JV_ST_CL_MAX) 25466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani is_server = FALSE; 25566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani port_handle = p_pcb->port_handle; 25666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 25766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->port_handle = 0; 25866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_NONE; 25966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 26066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //Initialize congestion flags 26166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = FALSE; 26266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 26366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(remove) 26466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 26566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(is_server) 26666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 26766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(RFCOMM_RemoveServer(port_handle) != PORT_SUCCESS) 26866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_FAILURE; 26966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 27066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 27166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 27266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(RFCOMM_RemoveConnection(port_handle) != PORT_SUCCESS) 27366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_FAILURE; 27466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 27566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 27666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 27766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return status; 27866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 27966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 28066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 28166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 28266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_rfc_cb 28366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 28466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free the given RFCOMM control block 28566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 28666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 28766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 28866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 28966aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB *p_cb) 29066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 29166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 29266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 i; 29366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "bta_jv_free_rfc_cb max_sess:%d", p_cb->max_sess); 29466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (i=0; i<p_cb->max_sess; i++) 29566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 29666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "[%d]: port=%d", i, p_cb->rfc_hdl[i]); 29766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->rfc_hdl[i]) 29866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_rfc_pcb (&bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]); 29966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 30066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 30166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->scn = 0; 30266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&p_cb->sec_id); 30366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = NULL; 30466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->handle = 0; 30566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 30666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return status; 30766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 30866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic tBTA_JV_STATUS bta_jv_free_rfc_listen_cb(tBTA_JV_RFC_CB *p_cb) 30966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 31066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 31166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 i; 31266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug( "max_sess:%d", p_cb->max_sess); 31366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (i=0; i<p_cb->max_sess; i++) 31466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 31566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "[%d]: port=%d", i, p_cb->rfc_hdl[i]); 31666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->rfc_hdl[i]) 31766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 31866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; 31966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_pcb->state == BTA_JV_ST_SR_LISTEN) 32066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 32166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug( "free listen pcb: scn:%d, ueser_data:%d", p_cb->scn, (int)p_pcb->user_data); 32266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->user_data = 0; 32366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_rfc_pcb (p_pcb); 32466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->max_sess = 1; 32566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 32666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 32766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 32866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 32966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //p_cb->scn = 0; 33066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&p_cb->sec_id); 33166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //p_cb->p_cback = NULL; 33266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //p_cb->handle = 0; 33366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return status; 33466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 33566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 33666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 33766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 33866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_l2c_cb 33966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 34066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free the given L2CAP control block 34166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 34266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 34366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 34466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 34566aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyanitBTA_JV_STATUS bta_jv_free_l2c_cb(tBTA_JV_L2C_CB *p_cb) 34666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 34766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 34866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 34966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 35066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_ST_NONE != p_cb->state) 35166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 35266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if SDP_FOR_JV_INCLUDED == TRUE 35366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_L2C_FOR_SDP_HDL == p_cb->handle) 35466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 35566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_data_size = 0; 35666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(SDP_ConnClose(bta_jv_cb.sdp_for_jv)) 35766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 35866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_for_jv = 0; 35966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 36066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 36166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_FAILURE; 36266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 36366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 36466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 36566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(GAP_ConnClose(p_cb->handle) != BT_PASS) 36666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_FAILURE; 36766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 36866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->psm = 0; 36966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_NONE; 37066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&p_cb->sec_id); 37166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = NULL; 37266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return status; 37366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 37466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return 0; 37566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 37666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 37766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 37866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 37966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_alloc_sdp_id 38066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 38166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description allocate a SDP id for the given SDP record handle 38266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 38366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 38466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 38566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 38666aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniUINT32 bta_jv_alloc_sdp_id(UINT32 sdp_handle) 38766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 38866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int j; 38966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 id = 0; 39066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 39166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* find a free entry */ 39266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (j = 0; j < BTA_JV_MAX_SDP_REC; j++) 39366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 39466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (bta_jv_cb.sdp_handle[j] == 0) 39566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 39666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_handle[j] = sdp_handle; 39766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani id = (UINT32)(j + 1); 39866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 39966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 40066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 40166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* the SDP record handle reported is the (index + 1) to control block */ 40266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return id; 40366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 40466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 40566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 40666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 40766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_sdp_id 40866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 40966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free the sdp id 41066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 41166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 41266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 41366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 41466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_free_sdp_id(UINT32 sdp_id) 41566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 41666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(sdp_id > 0 && sdp_id <= BTA_JV_MAX_SDP_REC) 41766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 41866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_handle[sdp_id - 1] = 0; 41966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 42066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 42166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 42266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 42366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 42466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_sdp_handle 42566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 42666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description find the SDP handle associated with the given sdp id 42766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 42866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 42966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 43066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 43166aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniUINT32 bta_jv_get_sdp_handle(UINT32 sdp_id) 43266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 43366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 sdp_handle = 0; 43466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 43566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(sdp_id > 0 && sdp_id <= BTA_JV_MAX_SDP_REC) 43666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 43766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani sdp_handle = bta_jv_cb.sdp_handle[sdp_id - 1]; 43866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 43966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return sdp_handle; 44066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 44166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 44266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 44366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 44466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_check_psm 44566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 44666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description for now use only the legal PSM per JSR82 spec 44766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 44866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns TRUE, if allowed 44966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 45066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 45166aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniBOOLEAN bta_jv_check_psm(UINT16 psm) 45266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 45366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BOOLEAN ret = FALSE; 45466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 45566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(L2C_IS_VALID_PSM(psm) ) 45666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 45766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(psm < 0x1001) 45866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 45966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* see if this is defined by spec */ 46066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani switch(psm) 46166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 46266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case SDP_PSM: /* 1 */ 46366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case BT_PSM_RFCOMM: /* 3 */ 46466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* do not allow java app to use these 2 PSMs */ 46566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 46666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 46766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case TCS_PSM_INTERCOM: /* 5 */ 46866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case TCS_PSM_CORDLESS: /* 7 */ 46966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if( FALSE == bta_sys_is_register(BTA_ID_CT) && 47066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani FALSE == bta_sys_is_register(BTA_ID_CG) ) 47166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 47266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 47366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 47466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case BT_PSM_BNEP: /* F */ 47566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(FALSE == bta_sys_is_register(BTA_ID_PAN)) 47666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 47766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 47866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 47966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case HID_PSM_CONTROL: /* 0x11 */ 48066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case HID_PSM_INTERRUPT: /* 0x13 */ 48166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //FIX: allow HID Device and HID Host to coexist 48266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if( FALSE == bta_sys_is_register(BTA_ID_HD) || 48366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani FALSE == bta_sys_is_register(BTA_ID_HH) ) 48466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 48566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 48666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 48766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case AVCT_PSM: /* 0x17 */ 48866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case AVDT_PSM: /* 0x19 */ 48966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if ((FALSE == bta_sys_is_register(BTA_ID_AV)) && 49066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani (FALSE == bta_sys_is_register(BTA_ID_AVK))) 49166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 49266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 49366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 49466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani default: 49566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 49666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 49766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 49866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 49966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 50066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ret = TRUE; 50166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 50266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return ret; 50366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 50466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 50566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 50666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 50766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 50866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_enable 50966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 51066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Initialises the JAVA I/F 51166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 51266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 51366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 51466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 51566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_enable(tBTA_JV_MSG *p_data) 51666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 51766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 51866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback = p_data->enable.p_cback; 51966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_ENABLE_EVT, (tBTA_JV *)&status, 0); 52066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 52166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 52266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 52366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 52466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_disable 52566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 52666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Disables the BT device manager 52766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** free the resources used by java 52866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 52966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 53066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 53166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 53266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_disable (tBTA_JV_MSG *p_data) 53366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 53466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int i; 53566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 53666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback = NULL; 53766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* delete the SDP records created by java apps */ 53866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_SDP_REC; i++) 53966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 54066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.sdp_handle[i]) 54166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 54266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "delete SDP record: %d", bta_jv_cb.sdp_handle[i]); 54366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani SDP_DeleteRecord(bta_jv_cb.sdp_handle[i]); 54466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_handle[i] = 0; 54566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 54666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 54766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 54866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* free the SCNs allocated by java apps */ 54966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_SCN; i++) 55066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 55166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.scn[i]) 55266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 55366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "free scn: %d", (i+1)); 55466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_FreeSCN((UINT8)(i+1)); 55566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.scn[i] = FALSE; 55666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 55766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 55866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 55966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* disconnect L2CAP connections */ 56066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_L2C_CONN; i++) 56166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 56266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_l2c_cb(&bta_jv_cb.l2c_cb[i]); 56366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 56466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 56566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* disconnect RFCOMM connections */ 56666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_RFC_CONN; i++) 56766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 56866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_rfc_cb(&bta_jv_cb.rfc_cb[i]); 56966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 57066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 57166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* free the service records allocated by java apps */ 57266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_NUM_SERVICE_ID; i++) 57366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 57466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.sec_id[i]) 57566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 57666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SecClrService(bta_jv_cb.sec_id[i]); 57766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sec_id[i] = 0; 57866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 57966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 58066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 58166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 58266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 58366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 58466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_set_discoverability 58566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 58666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Sets discoverability 58766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 58866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 58966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 59066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 59166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_set_discoverability (tBTA_JV_MSG *p_data) 59266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 59366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 59466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 59566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.set_discover.status = BTA_JV_FAILURE; 59666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* initialize the default value for the event as the current mode */ 59766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.set_discover.disc_mode = BTM_ReadDiscoverability(NULL, NULL); 59866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 59966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTM_SUCCESS == BTM_SetDiscoverability((UINT8)p_data->set_discoverability.disc_mode, 0, 0)) 60066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 60166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.set_discover.status = BTA_JV_SUCCESS; 60266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* update the mode, after BTM_SetDiscoverability() is successful */ 60366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.set_discover.disc_mode = p_data->set_discoverability.disc_mode; 60466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 60566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 60666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 60766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_SET_DISCOVER_EVT, &evt_data, 0); 60866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 60966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 61066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 61166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 61266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_local_device_addr 61366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 61466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Reads the local Bluetooth device address 61566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 61666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 61766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 61866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 61966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_get_local_device_addr(tBTA_JV_MSG *p_data) 62066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 62166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_ReadLocalDeviceAddr((tBTM_CMPL_CB *)bta_jv_get_local_device_addr_cback); 62266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 62366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 62466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 62566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 62666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_local_device_name 62766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 62866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Reads the local Bluetooth device name 62966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 63066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 63166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 63266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 63366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_get_local_device_name(tBTA_JV_MSG *p_data) 63466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 63566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 63666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani char *name; 63766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 63866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_ReadLocalDeviceName(&name); 63966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_name = (UINT8*)name; 64066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 64166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_LOCAL_NAME_EVT, &evt_data, 0); 64266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 64366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 64466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 64566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 64666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_remote_device_name 64766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 64866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Reads the local Bluetooth device name 64966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 65066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 65166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 65266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 65366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_get_remote_device_name(tBTA_JV_MSG *p_data) 65466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 65566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 65666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_ReadRemoteDeviceName(p_data->get_rmt_name.bd_addr, 65766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani (tBTM_CMPL_CB *)bta_jv_get_remote_device_name_cback); 65866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 65966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 66066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 66166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 66266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_set_service_class 66366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 66466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description update the service class field of device class 66566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 66666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 66766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 66866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 66966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_set_service_class (tBTA_JV_MSG *p_data) 67066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 67166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_UTL_COD cod; 67266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 67366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* set class of device */ 67466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* BTA_JvSetServiceClass(UINT32 service) assumes that the service class passed to the API function as defined in the assigned number page. 67566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani For example: the object transfer bit is bit 20 of the 24-bit Class of device; the value of this bit is 0x00100000 (value 1) 67666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani Our btm_api.h defines this bit as #define BTM_COD_SERVICE_OBJ_TRANSFER 0x1000 // (value 2) 67766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani This reflects that the service class defined at btm is UINT16, which starts at bit 8 of the 24 bit Class of Device 67866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani The following statement converts from (value 1) into (value 2) */ 67966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cod.service = (p_data->set_service.service >> 8); 68066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); 68166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 68266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 68366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 68466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 68566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_sec_cback 68666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 68766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description callback function to handle set encryption complete event 68866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 68966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 69066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 69166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 69266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_sec_cback (BD_ADDR bd_addr, void *p_ref_data, tBTM_STATUS result) 69366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 69466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_SET_ENCRYPTION set_enc; 69566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 69666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 69766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(set_enc.bd_addr, bd_addr); 69866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani set_enc.status = result; 69966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (result > BTA_JV_BUSY) 70066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani set_enc.status = BTA_JV_FAILURE; 70166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_SET_ENCRYPTION_EVT, (tBTA_JV *)&set_enc, 0); 70266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 70366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 70466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 70566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 70666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 70766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_set_encryption 70866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 70966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Reads the local Bluetooth device name 71066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 71166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 71266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 71366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 71466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_set_encryption(tBTA_JV_MSG *p_data) 71566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 71666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SetEncryption(p_data->set_encrypt.bd_addr, bta_jv_sec_cback, NULL); 71766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 71866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 71966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 72066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 72166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_scn 72266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 72366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description obtain a free SCN 72466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 72566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 72666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 72766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 72866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_get_scn(tBTA_JV_MSG *p_data) 72966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 73066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 73166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 scn; 73266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani scn = BTM_AllocateSCN(); 73366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(scn) 73466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.scn[scn-1] = TRUE; 73566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 73666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_GET_SCN_EVT, (tBTA_JV *)&scn); 73766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 73866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 73966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 74066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 74166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 74266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_free_scn 74366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 74466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description free a SCN 74566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 74666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 74766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 74866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 74966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_free_scn(tBTA_JV_MSG *p_data) 75066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 75166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 scn = p_data->free_scn.scn; 75266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 75366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (scn > 0 && scn <= BTA_JV_MAX_SCN && bta_jv_cb.scn[scn-1]) 75466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 75566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* this scn is used by JV */ 75666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.scn[scn-1] = FALSE; 75766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_FreeSCN(scn); 75866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 75966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 76066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) 76166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 76266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani static uint8_t bt_base_uuid[] = 76366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }; 76466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 76566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani logu("in, uuid:", u); 76666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("uuid len:%d", u->len); 76766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(u->len == 16) 76866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 76966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) == 0) 77066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 77166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBT_UUID su; 77266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memset(&su, 0, sizeof(su)); 77366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) 77466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 77566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani su.len = 2; 77666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani uint16_t u16; 77766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); 77866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani su.uu.uuid16 = ntohs(u16); 77966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("shorten to 16 bits uuid: %x", su.uu.uuid16); 78066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 78166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 78266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 78366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani su.len = 4; 78466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani uint32_t u32; 78566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); 78666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani su.uu.uuid32 = ntohl(u32); 78766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("shorten to 32 bits uuid: %x", su.uu.uuid32); 78866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 78966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return su; 79066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 79166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 79266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("cannot shorten none-reserved 128 bits uuid"); 79366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return *u; 79466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 79566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 79666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 79766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 79866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_start_discovery_cback 79966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 80066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback for Start Discovery 80166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 80266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 80366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 80466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 80566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_start_discovery_cback(UINT16 result, void * user_data) 80666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 80766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status; 80866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 old_sdp_act = bta_jv_cb.sdp_active; 80966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 81066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug( "bta_jv_start_discovery_cback res: 0x%x", result); 81166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 81266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; 81366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 81466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 81566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (old_sdp_act == BTA_JV_SDP_ACT_CANCEL) 81666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 81766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("BTA_JV_SDP_ACT_CANCEL"); 81866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_SUCCESS; 81966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_CANCEL_DISCVRY_EVT, (tBTA_JV *)&status, user_data); 82066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 82166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 82266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 82366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_DISCOVERY_COMP dcomp; 82466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani dcomp.scn = 0; 82566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_FAILURE; 82666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (result == SDP_SUCCESS || result == SDP_DB_FULL) 82766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 82866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tSDP_DISC_REC *p_sdp_rec = NULL; 82966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tSDP_PROTOCOL_ELEM pe; 83066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani logu("bta_jv_cb.uuid", bta_jv_cb.uuid.uu.uuid128); 83166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBT_UUID su = shorten_sdp_uuid(&bta_jv_cb.uuid); 83266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani logu("shorten uuid:", su.uu.uuid128); 83366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_sdp_rec = SDP_FindServiceUUIDInDb(p_bta_jv_cfg->p_sdp_db, &su, p_sdp_rec); 83466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("p_sdp_rec:%p", p_sdp_rec); 83566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) 83666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 83766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani dcomp.scn = (UINT8) pe.params[0]; 83866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_SUCCESS; 83966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 84066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 84166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 84266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani dcomp.status = status; 84366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&dcomp, user_data); 84466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 84566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //free sdp db 84666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //utl_freebuf(&(p_bta_jv_cfg->p_sdp_db)); 84766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 84866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 84966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 85066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 85166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 85266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_start_discovery 85366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 85466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Discovers services on a remote device 85566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 85666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 85766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 85866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 85966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_start_discovery(tBTA_JV_MSG *p_data) 86066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 86166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_FAILURE; 86266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("in, sdp_active:%d", bta_jv_cb.sdp_active); 86366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (bta_jv_cb.sdp_active != BTA_JV_SDP_ACT_NONE) 86466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 86566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* SDP is still in progress */ 86666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani status = BTA_JV_BUSY; 86766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 86866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); 86966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 87066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 87166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/* 87266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_data->start_discovery.num_uuid == 0) 87366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 87466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->start_discovery.num_uuid = 1; 87566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->start_discovery.uuid_list[0].len = 2; 87666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->start_discovery.uuid_list[0].uu.uuid16 = UUID_SERVCLASS_PUBLIC_BROWSE_GROUP; 87766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 87866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*/ 87966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* init the database/set up the filter */ 88066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("call SDP_InitDiscoveryDb, p_data->start_discovery.num_uuid:%d", 88166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->start_discovery.num_uuid); 88266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani SDP_InitDiscoveryDb (p_bta_jv_cfg->p_sdp_db, p_bta_jv_cfg->sdp_db_size, 88366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->start_discovery.num_uuid, p_data->start_discovery.uuid_list, 0, NULL); 88466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 88566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* tell SDP to keep the raw data */ 88666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_bta_jv_cfg->p_sdp_db->raw_data = p_bta_jv_cfg->p_sdp_raw_data; 88766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_bta_jv_cfg->p_sdp_db->raw_size = p_bta_jv_cfg->sdp_raw_size; 88866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 88966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_sel_raw_data = 0; 89066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.uuid = p_data->start_discovery.uuid_list[0]; 89166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 89266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_YES; 89366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (!SDP_ServiceSearchAttributeRequest2(p_data->start_discovery.bd_addr, 89466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_bta_jv_cfg->p_sdp_db, 89566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_start_discovery_cback, p_data->start_discovery.user_data)) 89666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 89766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; 89866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* failed to start SDP. report the failure right away */ 89966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 90066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); 90166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 90266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* 90366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else report the result when the cback is called 90466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani */ 90566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 90666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 90766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 90866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 90966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_cancel_discovery 91066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 91166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Cancels an active discovery 91266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 91366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 91466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 91566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 91666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_cancel_discovery(tBTA_JV_MSG *p_data) 91766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 91866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_STATUS status = BTA_JV_SUCCESS; 91966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (bta_jv_cb.sdp_active == BTA_JV_SDP_ACT_YES) 92066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 92166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (SDP_CancelServiceSearch (p_bta_jv_cfg->p_sdp_db)) 92266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 92366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_CANCEL; 92466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 92566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 92666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 92766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 92866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_CANCEL_DISCVRY_EVT, (tBTA_JV *)&status, p_data->cancel_discovery.user_data); 92966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 93066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 93166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 93266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 93366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_services_length 93466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 93566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Obtain the length of each record in the SDP DB. 93666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 93766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 93866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 93966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 94066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_get_services_length(tBTA_JV_MSG *p_data) 94166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 94266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 94366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_SERVICES_LEN evt_data; 94466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *p, *np, *op, type; 94566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 raw_used, raw_cur; 94666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 len; 94766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 94866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.num_services = -1; 94966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_services_len = p_data->get_services_length.p_services_len; 95066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_bta_jv_cfg->p_sdp_db->p_first_rec) 95166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 95266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* the database is valid */ 95366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.num_services = 0; 95466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p = p_bta_jv_cfg->p_sdp_db->raw_data; 95566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_used = p_bta_jv_cfg->p_sdp_db->raw_used; 95666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani while(raw_used && p) 95766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 95866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani op = p; 95966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani type = *p++; 96066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani np = sdpu_get_len_from_type(p, type, &len); 96166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p = np + len; 96266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_cur = p - op; 96366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(raw_used >= raw_cur) 96466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 96566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_used -= raw_cur; 96666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 96766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 96866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 96966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* error. can not continue */ 97066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 97166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 97266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_data->get_services_length.inc_hdr) 97366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 97466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_services_len[evt_data.num_services++] = len + np - op; 97566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 97666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 97766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 97866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_services_len[evt_data.num_services++] = len; 97966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 98066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } /* end of while */ 98166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 98266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 98366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 98466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_SERVICES_LEN_EVT, (tBTA_JV *)&evt_data); 98566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 98666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 98766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 98866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 98966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 99066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_service_select 99166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 99266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Obtain the length of given UUID in the SDP DB. 99366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 99466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 99566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 99666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 99766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_service_select(tBTA_JV_MSG *p_data) 99866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 99966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 100066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_SERVICE_SEL serv_sel; 100166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tSDP_DISC_REC *p_rec, *p_tmp; 100266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *p, *np, *op, type; 100366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 raw_used, raw_cur; 100466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 len; 100566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 100666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani serv_sel.service_len = 0; 100766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_sel_raw_data = 0; 100866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_rec = SDP_FindServiceInDb (p_bta_jv_cfg->p_sdp_db, p_data->service_select.uuid, NULL); 100966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_rec) 101066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 101166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* found the record in the database */ 101266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* the database must be valid */ 101366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p = p_bta_jv_cfg->p_sdp_db->raw_data; 101466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_used = p_bta_jv_cfg->p_sdp_db->raw_used; 101566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_tmp = p_bta_jv_cfg->p_sdp_db->p_first_rec; 101666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani while(raw_used && p && p_tmp) 101766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 101866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani op = p; 101966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani type = *p++; 102066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani np = sdpu_get_len_from_type(p, type, &len); 102166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_tmp == p_rec) 102266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 102366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_sel_raw_data = op; 102466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sel_len = len; 102566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani serv_sel.service_len = len; 102666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(serv_sel.bd_addr, p_rec->remote_bd_addr); 102766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "bta_jv_service_select found uuid: 0x%x", 102866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_data->service_select.uuid); 102966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 103066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 103166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p = np + len; 103266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_cur = p - op; 103366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(raw_used >= raw_cur) 103466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 103566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani raw_used -= raw_cur; 103666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 103766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 103866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 103966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* error. can not continue */ 104066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 104166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 104266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_tmp = p_tmp->p_next_rec; 104366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } /* end of while */ 104466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 104566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "service_len: %d", serv_sel.service_len); 104666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 104766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_SERVICE_SEL_EVT, (tBTA_JV *)&serv_sel); 104866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 104966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 105066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 105166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 105266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 105366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_create_record 105466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 105566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Create an SDP record with the given attributes 105666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 105766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 105866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 105966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 106066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_create_record(tBTA_JV_MSG *p_data) 106166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 106266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_CREATE_RECORD *cr = &(p_data->create_record); 106366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_CREATE_RECORD evt_data; 106466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 106566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 106666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //callback user immediately to create his own sdp record in stack thread context 106766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_CREATE_RECORD_EVT, (tBTA_JV *)&evt_data, cr->user_data); 106866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 106966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 107066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 107166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 107266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_update_record 107366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 107466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Update an SDP record with the given attributes 107566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 107666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 107766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 107866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 107966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_update_record(tBTA_JV_MSG *p_data) 108066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 108166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 108266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_UPDATE_RECORD *ur = &(p_data->update_record); 108366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_UPDATE_RECORD evt_data; 108466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 handle; 108566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani INT32 i; 108666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *ptr; 108766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *next_ptr; 108866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *end; 108966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 len; 109066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 type; 109166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 109266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 109366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = ur->handle; 109466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 109566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = bta_jv_get_sdp_handle(ur->handle); 109666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 109766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(handle) 109866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 109966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* this is a record created by JV */ 110066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (i = 0; i < ur->array_len; i++) 110166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 110266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ptr = ur->p_values[i]; 110366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani end = ptr + ur->p_value_sizes[i]; 110466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 110566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani while (ptr < end) 110666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 110766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani type = *ptr; 110866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani next_ptr = sdpu_get_len_from_type(ptr + 1, *ptr, &len); 110966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 111066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(ATTR_ID_SERVICE_RECORD_HDL != ur->p_ids[i]) 111166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 111266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (!SDP_AddAttribute(handle, ur->p_ids[i], (UINT8)((type >> 3) & 0x1f), 111366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani len, next_ptr)) 111466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 111566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* failed on updating attributes. */ 111666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 111766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_UPDATE_RECORD_EVT, (tBTA_JV *)&evt_data); 111866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 111966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 112066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 112166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 112266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ptr = next_ptr + len; 112366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } /* end of while */ 112466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } /* end of for */ 112566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 112666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 112766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 112866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 112966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_UPDATE_RECORD_EVT, (tBTA_JV *)&evt_data); 113066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 113166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 113266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 113366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 113466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 113566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_add_attribute 113666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 113766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Add an attribute to an SDP record 113866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 113966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 114066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 114166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 114266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_add_attribute(tBTA_JV_MSG *p_data) 114366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 114466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 114566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_ADD_ATTRIBUTE *aa = &(p_data->add_attr); 114666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_ADD_ATTR evt_data; 114766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 handle; 114866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 type; 114966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 len; 115066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *ptr; 115166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *next_ptr; 115266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 115366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 115466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = aa->handle; 115566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = bta_jv_get_sdp_handle(aa->handle); 115666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 115766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(handle) 115866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 115966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* this is a record created by JV */ 116066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ptr = aa->p_value; 116166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani type = *ptr; 116266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani next_ptr = sdpu_get_len_from_type(ptr + 1, *ptr, &len); 116366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG3( "bta_jv_add_attribute: ptr chg:%d len:%d, size:%d", 116466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani (next_ptr - ptr), len, aa->value_size); 116566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(ATTR_ID_SERVICE_RECORD_HDL != aa->attr_id && /* do not allow the SDP record handle to be updated */ 116666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ((INT32)(next_ptr - ptr + len) == aa->value_size) && /* double check data size */ 116766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani SDP_AddAttribute(handle, aa->attr_id, (UINT8)((type >> 3) & 0x1f), 116866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani len, next_ptr)) 116966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 117066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 117166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 117266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 117366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 117466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 117566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_ADD_ATTR_EVT, (tBTA_JV *)&evt_data); 117666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 117766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 117866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 117966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 118066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 118166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_delete_attribute 118266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 118366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Delete an attribute from the given SDP record 118466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 118566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 118666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 118766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 118866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_delete_attribute(tBTA_JV_MSG *p_data) 118966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 119066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 119166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_ADD_ATTRIBUTE *da = &(p_data->add_attr); 119266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_DELETE_ATTR evt_data; 119366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 handle; 119466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 119566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 119666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = da->handle; 119766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = bta_jv_get_sdp_handle(da->handle); 119866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 119966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(handle) 120066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 120166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* this is a record created by JV */ 120266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(SDP_DeleteAttribute(handle, da->attr_id)) 120366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 120466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 120566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 120666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.p_dm_cback) 120766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.p_dm_cback(BTA_JV_DELETE_ATTR_EVT, (tBTA_JV *)&evt_data); 120866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 120966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 121066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 121166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 121266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 121366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_delete_record 121466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 121566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Delete an SDP record 121666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 121766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 121866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 121966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 122066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 122166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_delete_record(tBTA_JV_MSG *p_data) 122266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 122366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_ADD_ATTRIBUTE *dr = &(p_data->add_attr); 122466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 handle; 122566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 122666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = bta_jv_get_sdp_handle(dr->handle); 122766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 122866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(handle) 122966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 123066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* this is a record created by JV */ 123166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani SDP_DeleteRecord(handle); 123266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sdp_id(dr->handle); 123366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 123466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 123566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 123666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 123766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 123866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_client_cback 123966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 124066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description handles the l2cap client events 124166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 124266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 124366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 124466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 124566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_l2cap_client_cback(UINT16 gap_handle, UINT16 event) 124666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 124766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 124866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[gap_handle]; 124966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 125066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 125166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) 125266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 125366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 125466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "bta_jv_l2cap_client_cback: %d evt:x%x", 125566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani gap_handle, event); 125666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.status = BTA_JV_SUCCESS; 125766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.handle = gap_handle; 125866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani switch (event) 125966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 126066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_OPENED: 126166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); 126266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); 126366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_CL_OPEN; 126466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data); 126566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 126666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 126766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_CLOSED: 126866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_NONE; 126966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&p_cb->sec_id); 127066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_close.async = TRUE; 127166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data); 127266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = NULL; 127366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 127466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 127566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_DATA_AVAIL: 127666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = gap_handle; 127766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data); 127866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 127966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 128066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_CONGESTED: 128166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_UNCONGESTED: 128266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? TRUE : FALSE; 128366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_cong.cong = p_cb->cong; 128466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data); 128566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 128666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 128766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani default: 128866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 128966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 129066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 129166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 129266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 129366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if SDP_FOR_JV_INCLUDED == TRUE 129466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 129566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 129666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_sdp_res_cback 129766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 129866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback for Start Discovery 129966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 130066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 130166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 130266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 130366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_sdp_res_cback (UINT16 event, tSDP_DATA *p_data) 130466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 130566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 130666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[BTA_JV_L2C_FOR_SDP_HDL]; 130766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 130866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "bta_jv_sdp_res_cback: %d evt:x%x", 130966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_for_jv, event); 131066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 131166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(!bta_jv_cb.sdp_for_jv) 131266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 131366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 131466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.status = BTA_JV_SUCCESS; 131566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.handle = BTA_JV_L2C_FOR_SDP_HDL; 131666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 131766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani switch(event) 131866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 131966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case SDP_EVT_OPEN: 132066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(evt_data.l2c_open.rem_bda, p_data->open.peer_addr); 132166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.tx_mtu = p_data->open.peer_mtu; 132266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_SR_OPEN; 132366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data); 132466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 132566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case SDP_EVT_DATA_IND: 132666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = BTA_JV_L2C_FOR_SDP_HDL; 132766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memcpy(p_bta_jv_cfg->p_sdp_raw_data, p_data->data.p_data, p_data->data.data_len); 132866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "data size: %d/%d ", bta_jv_cb.sdp_data_size, p_data->data.data_len); 132966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_data_size = p_data->data.data_len; 133066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data); 133166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 133266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 133366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 133466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 133566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 133666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 133766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_sdp_cback 133866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 133966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback for Start Discovery 134066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 134166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 134266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 134366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 134466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_sdp_cback(UINT16 result) 134566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 134666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CLOSE close; 134766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[BTA_JV_L2C_FOR_SDP_HDL]; 134866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "bta_jv_sdp_cback: result:x%x", result); 134966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 135066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_cb->p_cback) 135166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 135266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani close.handle = BTA_JV_L2C_FOR_SDP_HDL; 135366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani close.async = FALSE; 135466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani close.status = BTA_JV_SUCCESS; 135566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&p_cb->sec_id); 135666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&close); 135766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 135866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 135966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_for_jv = 0; 136066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = NULL; 136166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 136266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 136366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 136466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 136566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 136666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 136766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_connect 136866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 136966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description makes an l2cap client connection 137066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 137166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 137266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 137366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 137466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_connect(tBTA_JV_MSG *p_data) 137566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 137666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 137766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb; 137866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CL_INIT evt_data; 137966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 handle=GAP_INVALID_HANDLE; 138066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 sec_id; 138166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tL2CAP_CFG_INFO cfg; 138266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_CONNECT *cc = &(p_data->l2cap_connect); 138366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 138466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); 138566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu_present = TRUE; 138666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu = cc->rx_mtu; 138766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* TODO: DM role manager 138866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani L2CA_SetDesireRole(cc->role); 138966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani */ 139066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 139166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani sec_id = bta_jv_alloc_sec_id(); 139266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.sec_id = sec_id; 139366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 139466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (sec_id) 139566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 139666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if SDP_FOR_JV_INCLUDED == TRUE 139766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(SDP_PSM == cc->remote_psm && 0 == bta_jv_cb.sdp_for_jv) 139866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 139966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_for_jv = SDP_ConnOpen(cc->peer_bd_addr, 140066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_sdp_res_cback, 140166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_sdp_cback); 140266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.sdp_for_jv) 140366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 140466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_data_size = 0; 140566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani handle = BTA_JV_L2C_FOR_SDP_HDL; 140666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 140766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 140866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 140966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 141066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 141166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_check_psm(cc->remote_psm)) /* allowed */ 141266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 141366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if( (handle = GAP_ConnOpen("", sec_id, 0, cc->peer_bd_addr, cc->remote_psm, 141466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani &cfg, cc->sec_mask, GAP_FCR_CHAN_OPT_BASIC, 141566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_l2cap_client_cback)) != GAP_INVALID_HANDLE ) 141666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 141766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 141866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 141966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 142066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 142166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 142266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (evt_data.status == BTA_JV_SUCCESS) 142366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 142466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = &bta_jv_cb.l2c_cb[handle]; 142566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->handle = handle; 142666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = cc->p_cback; 142766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->psm = 0; /* not a server */ 142866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->sec_id = sec_id; 142966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_CL_OPENING; 143066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 143166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 143266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 143366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&sec_id); 143466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 143566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = handle; 143666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, (tBTA_JV *)&evt_data); 143766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 143866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 143966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 144066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 144166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 144266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_close 144366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 144466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Close an L2CAP client connection 144566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 144666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 144766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 144866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 144966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_close(tBTA_JV_MSG *p_data) 145066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 145166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 145266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CLOSE evt_data; 145366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_CLOSE *cc = &(p_data->l2cap_close); 145466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CBACK *p_cback = cc->p_cb->p_cback; 145566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 145666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = cc->handle; 145766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = bta_jv_free_l2c_cb(cc->p_cb); 145866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.async = FALSE; 145966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 146066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cback) 146166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data); 146266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 146366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_ERROR0("### NO CALLBACK SET !!! ###"); 146466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 146566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 146666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 146766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 146866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 146966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_server_cback 147066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 147166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description handles the l2cap server callback 147266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 147366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 147466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 147566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 147666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_l2cap_server_cback(UINT16 gap_handle, UINT16 event) 147766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 147866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 147966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[gap_handle]; 148066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 148166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CBACK *p_cback; 148266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 148366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) 148466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 148566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 148666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG2( "bta_jv_l2cap_server_cback: %d evt:x%x", 148766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani gap_handle, event); 148866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.status = BTA_JV_SUCCESS; 148966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.handle = gap_handle; 149066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 149166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani switch (event) 149266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 149366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_OPENED: 149466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); 149566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); 149666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_SR_OPEN; 149766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data); 149866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 149966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 150066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_CLOSED: 150166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_close.async = TRUE; 150266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_close.handle = p_cb->handle; 150366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback = p_cb->p_cback; 150466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_close.status = bta_jv_free_l2c_cb(p_cb); 150566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data); 150666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 150766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 150866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_DATA_AVAIL: 150966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = gap_handle; 151066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data); 151166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 151266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 151366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_CONGESTED: 151466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case GAP_EVT_CONN_UNCONGESTED: 151566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? TRUE : FALSE; 151666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.l2c_cong.cong = p_cb->cong; 151766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data); 151866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 151966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 152066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani default: 152166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 152266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 152366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 152466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 152566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 152666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 152766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 152866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_start_server 152966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 153066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description starts an L2CAP server 153166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 153266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 153366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 153466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 153566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_start_server(tBTA_JV_MSG *p_data) 153666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 153766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 153866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb; 153966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 sec_id; 154066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 handle; 154166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tL2CAP_CFG_INFO cfg; 154266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_START evt_data; 154366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); 154466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 154566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); 154666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 154766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //FIX: MTU=0 means not present 154866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (ls->rx_mtu >0) 154966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 155066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu_present = TRUE; 155166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu = ls->rx_mtu; 155266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 155366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 155466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 155566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu_present = FALSE; 155666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cfg.mtu = 0; 155766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 155866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 155966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* TODO DM role manager 156066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani L2CA_SetDesireRole(ls->role); 156166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani */ 156266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 156366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani sec_id = bta_jv_alloc_sec_id(); 156466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (0 == sec_id || (FALSE == bta_jv_check_psm(ls->local_psm)) || 156566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, 0, ls->local_psm, &cfg, 156666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ls->sec_mask, GAP_FCR_CHAN_OPT_BASIC, bta_jv_l2cap_server_cback)) == GAP_INVALID_HANDLE) 156766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 156866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_sec_id(&sec_id); 156966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 157066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 157166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 157266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 157366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* default JV implementation requires explicit call 157466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani to allow incoming connections when ready*/ 157566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 157666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani GAP_SetAcceptReady(handle, FALSE); 157766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 157866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = &bta_jv_cb.l2c_cb[handle]; 157966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 158066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = handle; 158166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.sec_id = sec_id; 158266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = ls->p_cback; 158366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->handle = handle; 158466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->sec_id = sec_id; 158566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->state = BTA_JV_ST_SR_LISTEN; 158666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->psm = ls->local_psm; 158766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 158866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ls->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV *)&evt_data); 158966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 159066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 159166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 159266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 159366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 159466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_stop_server 159566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 159666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description stops an L2CAP server 159766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 159866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 159966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 160066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 160166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_stop_server(tBTA_JV_MSG *p_data) 160266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 160366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 160466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2C_CB *p_cb; 160566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CLOSE evt_data; 160666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); 160766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_CBACK *p_cback; 160866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int i; 160966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 161066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for(i=0; i<BTA_JV_MAX_L2C_CONN; i++) 161166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 161266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(bta_jv_cb.l2c_cb[i].psm == ls->local_psm) 161366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 161466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = &bta_jv_cb.l2c_cb[i]; 161566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback = p_cb->p_cback; 161666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 161766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = bta_jv_free_l2c_cb(p_cb); 161866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.async = FALSE; 161966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data); 162066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 162166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 162266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 162366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 162466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 162566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 162666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 162766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 162866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_read 162966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 163066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Read data from an L2CAP connection 163166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 163266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 163366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 163466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 163566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_read(tBTA_JV_MSG *p_data) 163666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 163766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 163866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_READ evt_data; 163966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_READ *rc = &(p_data->l2cap_read); 164066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 164166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 164266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = rc->handle; 164366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.req_id = rc->req_id; 164466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_data = rc->p_data; 164566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = 0; 164666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if SDP_FOR_JV_INCLUDED == TRUE 164766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_L2C_FOR_SDP_HDL == rc->handle) 164866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 164966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = rc->len; 165066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(evt_data.len > bta_jv_cb.sdp_data_size) 165166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = bta_jv_cb.sdp_data_size; 165266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 165366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memcpy(rc->p_data, p_bta_jv_cfg->p_sdp_raw_data, evt_data.len); 165466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_cb.sdp_data_size = 0; 165566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 165666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 165766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 165866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 165966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (BT_PASS == GAP_ConnReadData(rc->handle, rc->p_data, rc->len, &evt_data.len)) 166066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 166166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 166266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 166366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 166466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani rc->p_cback(BTA_JV_L2CAP_READ_EVT, (tBTA_JV *)&evt_data); 166566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 166666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 166766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 166866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 166966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 167066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 167166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_l2cap_write 167266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 167366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Write data to an L2CAP connection 167466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 167566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 167666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 167766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 167866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_l2cap_write(tBTA_JV_MSG *p_data) 167966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 168066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if 0 168166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_L2CAP_WRITE evt_data; 168266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_L2CAP_WRITE *ls = &(p_data->l2cap_write); 168366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 168466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 168566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = ls->handle; 168666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.req_id = ls->req_id; 168766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.cong = ls->p_cb->cong; 168866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = 0; 168966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#if SDP_FOR_JV_INCLUDED == TRUE 169066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_L2C_FOR_SDP_HDL == ls->handle) 169166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 169266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 *p; 169366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BT_HDR *p_msg = (BT_HDR *) GKI_getbuf ((UINT16)(ls->len + BT_HDR_SIZE + L2CAP_MIN_OFFSET)); 169466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_msg) 169566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 169666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_msg->offset = L2CAP_MIN_OFFSET; 169766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p = (UINT8 *)(p_msg + 1) + L2CAP_MIN_OFFSET; 169866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_msg->len = ls->len; 169966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani memcpy(p, ls->p_data, p_msg->len); 170066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(SDP_WriteData (bta_jv_cb.sdp_for_jv, p_msg)) 170166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 170266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = ls->len; 170366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 170466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 170566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 170666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 170766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 170866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 170966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (!evt_data.cong && 171066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BT_PASS == GAP_ConnWriteData(ls->handle, ls->p_data, ls->len, &evt_data.len)) 171166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 171266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 171366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 171466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 171566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani ls->p_cb->p_cback(BTA_JV_L2CAP_WRITE_EVT, (tBTA_JV *)&evt_data); 171666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#endif 171766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 171866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 171966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 172066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 172166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_port_data_co_cback 172266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 172366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description port data callback function of rfcomm 172466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** connections 172566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 172666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 172766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 172866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 172966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/* 173066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#define DATA_CO_CALLBACK_TYPE_INCOMING 1 173166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#define DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE 2 173266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani#define DATA_CO_CALLBACK_TYPE_OUTGOING 3 173366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*/ 173466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic int bta_jv_port_data_co_cback(UINT16 port_handle, UINT8 *buf, UINT16 len, int type) 173566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 173666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 173766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 173866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 173966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb != NULL) 174066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 174166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani switch(type) 174266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 174366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case DATA_CO_CALLBACK_TYPE_INCOMING: 174466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return bta_co_rfc_data_incoming(p_pcb->user_data, (BT_HDR*)buf); 174566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE: 174666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return bta_co_rfc_data_outgoing_size(p_pcb->user_data, (int*)buf); 174766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani case DATA_CO_CALLBACK_TYPE_OUTGOING: 174866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return bta_co_rfc_data_outgoing(p_pcb->user_data, buf, len); 174966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani default: 175066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_ERROR1("unknown callout type:%d", type); 175166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 175266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 175366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 175466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return 0; 175566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 175666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 175766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 175866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 175966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_port_mgmt_cl_cback 176066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 176166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description callback for port mamangement function of rfcomm 176266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** client connections 176366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 176466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 176566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 176666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 176766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_port_mgmt_cl_cback(UINT32 code, UINT16 port_handle) 176866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 176966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 177066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 177166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 177266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BD_ADDR rem_bda; 177366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 lcid; 177466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CBACK *p_cback; /* the callback function */ 177566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 177666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "bta_jv_port_mgmt_cl_cback:%d", port_handle); 177766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(NULL == p_cb || NULL == p_cb->p_cback) 177866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 177966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 178066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG3( "bta_jv_port_mgmt_cl_cback code=%d port_handle:%d handle:%d", 178166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani code, port_handle, p_cb->handle); 178266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 178366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_CheckConnection(port_handle, rem_bda, &lcid); 178466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 178566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(code == PORT_SUCCESS) 178666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 178766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_open.handle = p_cb->handle; 178866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_open.status = BTA_JV_SUCCESS; 178966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bdcpy(evt_data.rfc_open.rem_bda, rem_bda); 179066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_CL_OPEN; 179166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_OPEN_EVT, &evt_data, p_pcb->user_data); 179266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 179366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 179466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 179566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.handle = p_cb->handle; 179666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.status = BTA_JV_FAILURE; 179766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.port_status = code; 179866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.async = TRUE; 179966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_pcb->state == BTA_JV_ST_CL_CLOSING) 180066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 180166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.async = FALSE; 180266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 180366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_NONE; 180466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = FALSE; 180566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback = p_cb->p_cback; 180666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani bta_jv_free_rfc_cb(p_cb); 180766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 180866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, p_pcb->user_data); 180966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 181066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 181166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 181266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 181366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 181466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 181566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_port_event_cl_cback 181666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 181766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback for RFCOMM client port events 181866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 181966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 182066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 182166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 182266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_port_event_cl_cback(UINT32 code, UINT16 port_handle) 182366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 182466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 182566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 182666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 182766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 182866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "bta_jv_port_event_cl_cback:%d", port_handle); 182966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(NULL == p_cb || NULL == p_cb->p_cback) 183066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 183166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 183266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG3( "bta_jv_port_event_cl_cback code=x%x port_handle:%d handle:%d", 183366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani code, port_handle, p_cb->handle); 183466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (code & PORT_EV_RXCHAR) 183566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 183666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.data_ind.handle = p_cb->handle; 183766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, p_pcb->user_data); 183866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 183966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 184066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (code & PORT_EV_FC) 184166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 184266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = (code & PORT_EV_FCS) ? FALSE : TRUE; 184366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.cong = p_pcb->cong; 184466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.handle = p_cb->handle; 184566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.status = BTA_JV_SUCCESS; 184666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, p_pcb->user_data); 184766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 184866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 184966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 185066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 185166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 185266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_connect 185366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 185466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Client initiates an RFCOMM connection 185566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 185666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 185766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 185866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 185966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_connect(tBTA_JV_MSG *p_data) 186066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 186166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 handle = 0; 186266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 event_mask = (PORT_EV_RXCHAR | PORT_EV_FC | PORT_EV_FCS); 186366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tPORT_STATE port_state; 186466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 sec_id; 186566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = NULL; 186666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb; 186766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_CONNECT *cc = &(p_data->rfcomm_connect); 186866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CL_INIT evt_data; 186966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 187066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* TODO DM role manager 187166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani L2CA_SetDesireRole(cc->role); 187266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani */ 187366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 187466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani sec_id = bta_jv_alloc_sec_id(); 187566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.sec_id = sec_id; 187666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 187766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (0 == sec_id || 187866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SetSecurityLevel(TRUE, "", sec_id, cc->sec_mask, BT_PSM_RFCOMM, 187966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SEC_PROTO_RFCOMM, cc->remote_scn) == FALSE) 188066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 188166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 188266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani error("sec_id:%d is zero or BTM_SetSecurityLevel failed, remote_scn:%d", sec_id, cc->remote_scn); 188366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 188466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 188566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (evt_data.status == BTA_JV_SUCCESS && 188666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, cc->remote_scn, FALSE, 188766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTA_JV_DEF_RFC_MTU, cc->peer_bd_addr, &handle, bta_jv_port_mgmt_cl_cback) != PORT_SUCCESS) 188866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 188966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 189066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 189166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (evt_data.status == BTA_JV_SUCCESS) 189266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 189366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); 18948df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy if(p_cb) 18958df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy { 18968df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy p_cb->p_cback = cc->p_cback; 18978df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy p_cb->sec_id = sec_id; 18988df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy p_cb->scn = 0; 18998df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy p_pcb->state = BTA_JV_ST_CL_OPENING; 19008df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy p_pcb->user_data = cc->user_data; 19018df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy evt_data.use_co = TRUE; 190266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19038df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy PORT_SetEventCallback(handle, bta_jv_port_event_cl_cback); 19048df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy PORT_SetEventMask(handle, event_mask); 19058df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); 190666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19078df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy PORT_GetState(handle, &port_state); 190866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19098df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 191066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19118df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy /* coverity[uninit_use_in_call] 19128df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy FALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 19138df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy PORT_SetState(handle, &port_state); 191466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 19158df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy evt_data.handle = p_cb->handle; 19168df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy } 19178df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy else 19188df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy { 19198df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy evt_data.status = BTA_JV_FAILURE; 19208df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy APPL_TRACE_ERROR0("run out of rfc control block"); 19218df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy } 192266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 192366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani cc->p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, (tBTA_JV *)&evt_data, cc->user_data); 192466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 192566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 192666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 192766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 192866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_close 192966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 193066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Close an RFCOMM connection 193166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 193266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 193366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 193466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 193566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_close(tBTA_JV_MSG *p_data) 193666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 193766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CLOSE evt_data; 193866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_CLOSE *cc = &(p_data->rfcomm_close); 193966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = cc->p_cb; 194066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = cc->p_pcb; 194166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CBACK *p_cback = p_cb->p_cback; 194266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 194366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 194466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 194566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 194666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani void* user_data = p_pcb->user_data; 194766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = FALSE; 194866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_pcb->state <= BTA_JV_ST_CL_MAX) 194966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 195066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_pcb->state == BTA_JV_ST_CL_OPEN) 195166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 195266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(PORT_SUCCESS == RFCOMM_RemoveConnection(p_pcb->port_handle)) 195366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 195466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_CL_CLOSING; 195566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 195666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 195766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 195866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = bta_jv_free_rfc_cb(p_cb); 195966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 196066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else if(BTA_JV_ST_SR_OPEN == p_pcb->state) 196166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 196266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* server is connected */ 196366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(PORT_SUCCESS == RFCOMM_RemoveConnection(p_pcb->port_handle)) 196466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 196566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_SR_CLOSING; 196666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 196766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 196866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 196966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 197066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.async = FALSE; 197166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 197266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cback) 197366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_RFCOMM_CLOSE_EVT, (tBTA_JV *)&evt_data, user_data); 197466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 197566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani error("### NO CALLBACK SET !!! ###"); 197666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 197766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 197866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 197966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 198066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_get_num_rfc_listen 198166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 198266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description when a RFCOMM connection goes down, make sure that there's only 198366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** one port stays listening on this scn. 198466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 198566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns 198666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 198766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 198866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic UINT8 bta_jv_get_num_rfc_listen(tBTA_JV_RFC_CB *p_cb) 198966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 199066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 i, listen=1; 199166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb; 199266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 199366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->max_sess > 1) 199466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 199566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani listen = 0; 199666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (i=0; i<p_cb->max_sess; i++) 199766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 199866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->rfc_hdl[i] != 0) 199966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 200066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; 200166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (BTA_JV_ST_SR_LISTEN == p_pcb->state) 200266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 200366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani listen++; 200466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 200566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 200666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 200766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 200866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return listen; 200966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 201066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 201166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 201266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 201366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_port_mgmt_sr_cback 201466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 201566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description callback for port mamangement function of rfcomm 201666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** server connections 201766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 201866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 201966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 202066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 202166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_port_mgmt_sr_cback(UINT32 code, UINT16 port_handle) 202266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 202366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 202466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 202566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 202666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BD_ADDR rem_bda; 202766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 lcid; 202866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 num; 202966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CBACK *p_cback; 203066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 si; 203166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 203266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(NULL == p_cb || NULL == p_cb->p_cback) 203366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 203466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani void *user_data = p_pcb->user_data; 203566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG4( "bta_jv_port_mgmt_sr_cback code=%d port_handle:%d handle:%d/0x%x", 203666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani code, port_handle, p_cb->handle, p_pcb->handle); 203766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 203866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_CheckConnection(port_handle, rem_bda, &lcid); 203966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int failed = TRUE; 204066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(code == PORT_SUCCESS) 204166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 204266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_srv_open.handle = p_pcb->handle; 204366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_srv_open.status = BTA_JV_SUCCESS; 2044939342d7dc180797ea0b27d6fd7a30216189c5c4zzy bdcpy(evt_data.rfc_srv_open.rem_bda, rem_bda); 204566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_SR_OPEN; 204666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb_new_listen = bta_jv_add_rfc_port(p_cb); 204766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_pcb_new_listen) 204866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 204966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_srv_open.new_listen_handle = p_pcb_new_listen->handle; 205066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb_new_listen->user_data = p_cb->p_cback(BTA_JV_RFCOMM_SRV_OPEN_EVT, &evt_data, user_data); 205166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani failed = FALSE; 205266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 205366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else error("bta_jv_add_rfc_port failed to create new listen port"); 205466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 205566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(failed) 205666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 205766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.handle = p_cb->handle; 205866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.status = BTA_JV_SUCCESS; 205966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.async = TRUE; 206066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(BTA_JV_ST_SR_CLOSING == p_pcb->state) 206166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 206266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.async = FALSE; 206366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 206466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = FALSE; 206566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback = p_cb->p_cback; 2066c399ab396710f7d32ed77d8309e6f77dcccd8376zzy APPL_TRACE_DEBUG1( "removing rfc handle:0x%x", p_pcb->handle); 2067c399ab396710f7d32ed77d8309e6f77dcccd8376zzy si = BTA_JV_RFC_HDL_TO_SIDX(p_pcb->handle); 2068c399ab396710f7d32ed77d8309e6f77dcccd8376zzy p_cb->rfc_hdl[si] = 0; 2069c399ab396710f7d32ed77d8309e6f77dcccd8376zzy p_pcb->state = BTA_JV_ST_NONE; 2070c399ab396710f7d32ed77d8309e6f77dcccd8376zzy p_pcb->handle = 0; 2071c399ab396710f7d32ed77d8309e6f77dcccd8376zzy RFCOMM_RemoveServer(port_handle); 207266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_close.port_status = code; 207366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, user_data); 207466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 207566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 207666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 207766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 207866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 207966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_port_event_sr_cback 208066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 208166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Callback for RFCOMM server port events 208266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 208366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 208466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 208566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 208666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic void bta_jv_port_event_sr_cback(UINT32 code, UINT16 port_handle) 208766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 208866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 208966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 209066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV evt_data; 209166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 209266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(NULL == p_cb || NULL == p_cb->p_cback) 209366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return; 209466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 209566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG3( "bta_jv_port_event_sr_cback code=x%x port_handle:%d handle:%d", 209666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani code, port_handle, p_cb->handle); 209766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 209866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani void *user_data = p_pcb->user_data; 209966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (code & PORT_EV_RXCHAR) 210066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 210166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.data_ind.handle = p_cb->handle; 210266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, user_data); 210366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 210466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 210566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (code & PORT_EV_FC) 210666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 210766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->cong = (code & PORT_EV_FCS) ? FALSE : TRUE; 210866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.cong = p_pcb->cong; 210966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.handle = p_cb->handle; 211066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.rfc_cong.status = BTA_JV_SUCCESS; 211166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, user_data); 211266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 211366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 211466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 211566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 211666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 211766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_add_rfc_port 211866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 211966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description add a port for server when the existing posts is open 212066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 212166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns return a pointer to tBTA_JV_PCB just added 212266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 212366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 212466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanistatic tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb) 212566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 212666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 used = 0, i, listen=0; 212766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 si = 0; 212866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = NULL; 212966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tPORT_STATE port_state; 213066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 event_mask = (PORT_EV_RXCHAR | PORT_EV_FC | PORT_EV_FCS); 213166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 213266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->max_sess > 1) 213366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 213466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani for (i=0; i<p_cb->max_sess; i++) 213566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 213666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->rfc_hdl[i] != 0) 213766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 213866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; 213966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_pcb->state == BTA_JV_ST_SR_LISTEN) 214066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani listen++; 214166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani used++; 214266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 214366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else if (si==0) 214466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 214566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani si = (UINT32)(i + 1); 214666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 214766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 214866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 214966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("bta_jv_add_rfc_port max_sess=%d used:%d listen:%d si:%d", 215066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->max_sess, used, listen, si); 215166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (used <p_cb->max_sess && listen==0 && si) 215266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 215366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani si--; 215466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (RFCOMM_CreateConnection(p_cb->sec_id, p_cb->scn, TRUE, 215566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTA_JV_DEF_RFC_MTU, (UINT8 *) bd_addr_any, &(p_cb->rfc_hdl[si]), bta_jv_port_mgmt_sr_cback) == PORT_SUCCESS) 215666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 215766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[si] - 1]; 215866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_SR_LISTEN; 215966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->port_handle = p_cb->rfc_hdl[si]; 216066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetEventCallback(p_pcb->port_handle, bta_jv_port_event_sr_cback); 216166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetDataCOCallback (p_pcb->port_handle, bta_jv_port_data_co_cback); 216266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetEventMask(p_pcb->port_handle, event_mask); 216366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_GetState(p_pcb->port_handle, &port_state); 216466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 216566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 216666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 216766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/* coverity[uninit_use_in_call] 216866aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniFALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 216966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetState(p_pcb->port_handle, &port_state); 217066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->handle = BTA_JV_RFC_H_S_TO_HDL(p_cb->handle, si); 217166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_DEBUG1( "new rfc handle:0x%x", p_pcb->handle); 217266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 217366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 217466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 217566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani return p_pcb; 217666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 217766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 217866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 217966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 218066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_start_server 218166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 218266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description waits for an RFCOMM client to connect 218366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 218466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 218566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 218666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 218766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 218866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_start_server(tBTA_JV_MSG *p_data) 218966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 219066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT16 handle = 0; 219166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT32 event_mask = (PORT_EV_RXCHAR | PORT_EV_FC | PORT_EV_FCS); 219266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tPORT_STATE port_state; 219366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani UINT8 sec_id; 219466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = NULL; 219566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb; 219666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_SERVER *rs = &(p_data->rfcomm_server); 219766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_START evt_data; 219866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 219966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* TODO DM role manager 220066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani L2CA_SetDesireRole(rs->role); 220166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani */ 220266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 220366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani do 220466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 220566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani sec_id = bta_jv_alloc_sec_id(); 220666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 220766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (0 == sec_id || 220866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTM_SetSecurityLevel(FALSE, "JV PORT", sec_id, rs->sec_mask, 220966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, rs->local_scn) == FALSE) 221066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 221166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 221266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 221366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 221466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (RFCOMM_CreateConnection(sec_id, rs->local_scn, TRUE, 221566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani BTA_JV_DEF_RFC_MTU, (UINT8 *) bd_addr_any, &handle, bta_jv_port_mgmt_sr_cback) != PORT_SUCCESS) 221666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 221766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani break; 221866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 221966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 222066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); 22218df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy if(!p_cb) 22228df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy { 22238df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy APPL_TRACE_ERROR0("run out of rfc control block"); 22248df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy break; 22258df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy } 22268df5a50e36a63507aa6fa8bbfe23e5c67fe4f8b5zzy 222766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->max_sess = rs->max_session; 222866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback = rs->p_cback; 222966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->sec_id = sec_id; 223066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->scn = rs->local_scn; 223166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->state = BTA_JV_ST_SR_LISTEN; 223266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_pcb->user_data = rs->user_data; 223366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 223466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 223566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.sec_id = sec_id; 223666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.use_co = TRUE; //FALSE; 223766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 223866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetEventCallback(handle, bta_jv_port_event_sr_cback); 223966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetEventMask(handle, event_mask); 224066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_GetState(handle, &port_state); 224166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 224266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 224366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 224466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/* coverity[uninit_use_in_call] 224566aa5171e4e7c9f942971a30419c03134e67a4a4Harish ParyaniFALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 224666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetState(handle, &port_state); 224766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } while (0); 224866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 224966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani rs->p_cback(BTA_JV_RFCOMM_START_EVT, (tBTA_JV *)&evt_data, rs->user_data); 225066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(evt_data.status == BTA_JV_SUCCESS) 225166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 225266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); 225366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 225466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 225566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 225666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 225766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 225866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_stop_server 225966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 226066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description stops an RFCOMM server 226166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 226266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 226366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 226466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 226566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 226666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_stop_server(tBTA_JV_MSG *p_data) 226766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 226866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_CLOSE evt_data; 226966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani int i; 227066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_SERVER *ls = &(p_data->rfcomm_server); 227166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani HDL2CB(ls->rfc_handle); 227266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 227366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if(p_cb && p_pcb) 227466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 227566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 227666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani void* user_data = p_pcb->user_data; 227766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = bta_jv_free_rfc_listen_cb(p_cb); 227866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.async = FALSE; 227966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 228066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani /* occasionally when shutting down stack the callback is already 228166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani freed, hence make sure we check for this condition (pending investigatation 228266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani of rootcause) */ 228366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("send BTA_JV_RFCOMM_CLOSE_EVT"); 228466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if( p_cb->p_cback) 228566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_CLOSE_EVT, (tBTA_JV *)&evt_data, user_data); 228666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 228766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 228866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 228966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani debug("warning, no jv callback set"); 229066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 229166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 229266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 229366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 229466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 229566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_read 229666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 229766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description Read data from an RFCOMM connection 229866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 229966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 230066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 230166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 230266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_read(tBTA_JV_MSG *p_data) 230366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 230466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_READ *rc = &(p_data->rfcomm_read); 230566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = rc->p_cb; 230666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = rc->p_pcb; 230766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_READ evt_data; 230866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 230966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 231066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 231166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.req_id = rc->req_id; 231266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.p_data = rc->p_data; 231366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (PORT_ReadData(rc->p_pcb->port_handle, (char *)rc->p_data, rc->len, &evt_data.len) == 231466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SUCCESS) 231566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 231666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 231766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 231866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 231966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_READ_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); 232066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 232166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 232266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani/******************************************************************************* 232366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 232466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Function bta_jv_rfcomm_write 232566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 232666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Description write data to an RFCOMM connection 232766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 232866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** Returns void 232966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani** 233066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani*******************************************************************************/ 233166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryanivoid bta_jv_rfcomm_write(tBTA_JV_MSG *p_data) 233266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani{ 233366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_API_RFCOMM_WRITE *wc = &(p_data->rfcomm_write); 233466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFC_CB *p_cb = wc->p_cb; 233566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_PCB *p_pcb = wc->p_pcb; 233666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani tBTA_JV_RFCOMM_WRITE evt_data; 233766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 233866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_FAILURE; 233966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.handle = p_cb->handle; 234066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.req_id = wc->req_id; 234166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.cong = p_pcb->cong; 234266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.len = 0; 234366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (!evt_data.cong && 234466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_WriteDataCO(p_pcb->port_handle, &evt_data.len) == 234566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani PORT_SUCCESS) 234666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 234766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.status = BTA_JV_SUCCESS; 234866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 234966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani //update congestion flag 235066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani evt_data.cong = p_pcb->cong; 235166aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani if (p_cb->p_cback) 235266aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 235366aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani p_cb->p_cback(BTA_JV_RFCOMM_WRITE_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); 235466aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 235566aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani else 235666aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani { 235766aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani APPL_TRACE_ERROR0("bta_jv_rfcomm_write :: WARNING ! No JV callback set"); 235866aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani } 235966aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani} 236066aa5171e4e7c9f942971a30419c03134e67a4a4Harish Paryani 2361