15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2006-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 212f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta * This file contains action functions for BTA JV APIs. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h> 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <arpa/inet.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_jv_api.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_jv_int.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_jv_co.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sdp_api.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_api.h" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "port_api.h" 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "rfcdefs.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avct_api.h" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_api.h" 452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta#include "gap_api.h" 462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define HDL2CB(handle) \ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 __hi = ((handle) & BTA_JV_RFC_HDL_MASK) - 1; \ 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 __si = BTA_JV_RFC_HDL_TO_SIDX(handle); \ 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = &bta_jv_cb.rfc_cb[__hi]; \ 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[__si] - 1] 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void uuid_to_string(bt_uuid_t *p_uuid, char *str); 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline void logu(const char* title, const uint8_t * p_uuid) 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char uuids[128]; 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid_to_string((bt_uuid_t*)p_uuid, uuids); 59e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s: %s", title, uuids); 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 639ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb_open); 642f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(UINT32 jv_handle); 652f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_conn_busy(tBTA_JV_PM_CB *p_cb); 662f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_conn_idle(tBTA_JV_PM_CB *p_cb); 672f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_state_change(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE state); 682f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi BattatBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE 692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta new_st); 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_local_device_addr_cback 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm after local bdaddr is read 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_get_local_device_addr_cback(BD_ADDR bd_addr) 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_LOCAL_ADDR_EVT, (tBTA_JV *)bd_addr, 0); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_remote_device_name_cback 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm after remote name is read 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_get_remote_device_name_cback(tBTM_REMOTE_DEV_NAME *p_name) 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_name = p_name->remote_bd_name; 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_REMOTE_NAME_EVT, &evt_data, 0); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_alloc_sec_id 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description allocate a security id 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_jv_alloc_sec_id(void) 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 ret = 0; 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_NUM_SERVICE_ID; i++) 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(0 == bta_jv_cb.sec_id[i]) 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sec_id[i] = BTA_JV_FIRST_SERVICE_ID + i; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = bta_jv_cb.sec_id[i]; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret; 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1289ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic int get_sec_id_used(void) 1299ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie{ 1309ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int i; 1319ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int used = 0; 1329ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie for(i=0; i<BTA_JV_NUM_SERVICE_ID; i++) 1339ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 1349ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if(bta_jv_cb.sec_id[i]) 1359ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie used++; 1369ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 1372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (used == BTA_JV_NUM_SERVICE_ID) 138e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("get_sec_id_used, sec id exceeds the limit:%d", 1392f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BTA_JV_NUM_SERVICE_ID); 1409ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return used; 1419ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie} 1429ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic int get_rfc_cb_used(void) 1439ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie{ 1449ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int i; 1459ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int used = 0; 1469ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie for(i=0; i<BTA_JV_MAX_RFC_CONN; i++) 1479ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 1489ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if(bta_jv_cb.rfc_cb[i].handle ) 1499ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie used++; 1509ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 1512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (used == BTA_JV_MAX_RFC_CONN) 152e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("get_sec_id_used, rfc ctrl block exceeds the limit:%d", 1532f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BTA_JV_MAX_RFC_CONN); 1549ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return used; 1559ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie} 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_free_sec_id 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free the given security id 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_free_sec_id(UINT8 *p_sec_id) 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 sec_id = *p_sec_id; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_sec_id = 0; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(sec_id >= BTA_JV_FIRST_SERVICE_ID && sec_id <= BTA_JV_LAST_SERVICE_ID) 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecClrService(sec_id); 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sec_id[sec_id - BTA_JV_FIRST_SERVICE_ID] = 0; 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_alloc_rfc_cb 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description allocate a control block for the given port handle 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_JV_RFC_CB * bta_jv_alloc_rfc_cb(UINT16 port_handle, tBTA_JV_PCB **pp_pcb) 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = NULL; 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb; 1902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta int i, j; 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_RFC_CONN; i++) 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (0 == bta_jv_cb.rfc_cb[i].handle ) 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = &bta_jv_cb.rfc_cb[i]; 1962f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta /* mask handle to distinguish it with L2CAP handle */ 1972f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb->handle = (i + 1) | BTA_JV_RFCOMM_MASK; 1982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->max_sess = 1; 2009ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess = 1; 2012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (j = 0; j < BTA_JV_MAX_RFC_SR_SESSION; j++) 2022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb->rfc_hdl[j] = 0; 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->rfc_hdl[0] = port_handle; 204e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_alloc_rfc_cb port_handle:%d handle:0x%2x", 2052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta port_handle, p_cb->handle); 2062f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->handle = p_cb->handle; 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->port_handle = port_handle; 2102f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pcb->p_pm_cb = NULL; 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp_pcb = p_pcb; 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2159ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if(p_cb == NULL) 2169ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 217e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR( "bta_jv_alloc_rfc_cb: port_handle:%d, ctrl block exceeds " 2182f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "limit:%d", port_handle, BTA_JV_MAX_RFC_CONN); 2199ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_cb; 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfc_port_to_pcb 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description find the port control block associated with the given port handle 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_JV_PCB * bta_jv_rfc_port_to_pcb(UINT16 port_handle) 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = NULL; 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) 2372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta && bta_jv_cb.port_cb[port_handle - 1].handle) 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_pcb; 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfc_port_to_cb 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description find the RFCOMM control block associated with the given port handle 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_JV_RFC_CB * bta_jv_rfc_port_to_cb(UINT16 port_handle) 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = NULL; 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 handle; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) 2602f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta && bta_jv_cb.port_cb[port_handle - 1].handle) 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_jv_cb.port_cb[port_handle - 1].handle; 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle &= BTA_JV_RFC_HDL_MASK; 2642f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta handle &= ~BTA_JV_RFCOMM_MASK; 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (handle) 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = &bta_jv_cb.rfc_cb[handle - 1]; 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2682f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 2692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 270e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_rfc_port_to_cb(port_handle:0x%x):jv handle:0x%x not" 2712f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta " FOUND", port_handle, bta_jv_cb.port_cb[port_handle - 1].handle); 2722f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_cb; 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2752f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2769ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic tBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb) 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status = BTA_JV_SUCCESS; 2792f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BOOLEAN remove_server = FALSE; 2802f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta int close_pending = 0; 2812f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2822f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!p_cb || !p_pcb) 2839ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 284e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_free_sr_rfc_cb, p_cb or p_pcb cannot be null"); 2859ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return BTA_JV_FAILURE; 2869ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 287e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: max_sess:%d, curr_sess:%d, p_pcb:%p, user:" 28822c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT "%p, state:%d, jv handle: 0x%x" ,p_cb->max_sess, p_cb->curr_sess, p_pcb, 28922c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT p_pcb->user_data, p_pcb->state, p_pcb->handle); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_cb->curr_sess <= 0) 2929ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return BTA_JV_SUCCESS; 2932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta switch (p_pcb->state) 2959ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 2962f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_ST_CL_CLOSING: 2972f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_ST_SR_CLOSING: 298e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_free_sr_rfc_cb: return on closing, port state:%d, " 29922c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT "scn:%d, p_pcb:%p, user_data:%p", p_pcb->state, p_cb->scn, p_pcb, 30022c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT p_pcb->user_data); 3012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_FAILURE; 3022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return status; 3032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_ST_CL_OPEN: 304511b814ae29e33f7dc9089186f1cbe914767c5b9Matthew Xie case BTA_JV_ST_CL_OPENING: 305e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: %d, scn:%d," 30622c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT " user_data:%p", p_pcb->state, p_cb->scn, p_pcb->user_data); 3072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pcb->state = BTA_JV_ST_CL_CLOSING; 3082f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 3092f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_ST_SR_LISTEN: 3109ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->state = BTA_JV_ST_SR_CLOSING; 3112f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta remove_server = TRUE; 312e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_LISTEN, scn:%d," 31322c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT " user_data:%p", p_cb->scn, p_pcb->user_data); 3142f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 3152f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_ST_SR_OPEN: 3169ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->state = BTA_JV_ST_SR_CLOSING; 317e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_OPEN, scn:%d," 31822c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT " user_data:%p", p_cb->scn, p_pcb->user_data); 3192f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 3202f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta default: 321e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_free_sr_rfc_cb():failed, ignore port state:%d, scn:" 32222c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT "%d, p_pcb:%p, jv handle: 0x%x, port_handle: %d, user_data:%p", 3232f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pcb->state, p_cb->scn, p_pcb, p_pcb->handle, p_pcb->port_handle, 32422c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT p_pcb->user_data); 3252f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_FAILURE; 3262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 3279ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 3282f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (BTA_JV_SUCCESS == status) 3299ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 3302f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta int port_status; 3312f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 3322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!remove_server) 3332f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta port_status = RFCOMM_RemoveConnection(p_pcb->port_handle); 3342f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 3352f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta port_status = RFCOMM_RemoveServer(p_pcb->port_handle); 3362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (port_status != PORT_SUCCESS) 3372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 3382f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_FAILURE; 339e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_free_rfc_cb(jv handle: 0x%x, state %d)::" 3402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "port_status: %d, port_handle: %d, close_pending: %d:Remove", 3412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pcb->handle, p_pcb->state, port_status, p_pcb->port_handle, 3422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta close_pending); 3432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 3449ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 3452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!close_pending) 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->port_handle = 0; 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->state = BTA_JV_ST_NONE; 3492f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_free_set_pm_profile_cb(p_pcb->handle); 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //Initialize congestion flags 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->cong = FALSE; 3539ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->user_data = 0; 3549ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int si = BTA_JV_RFC_HDL_TO_SIDX(p_pcb->handle); 3552f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (0 <= si && si < BTA_JV_MAX_RFC_SR_SESSION) 3569ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->rfc_hdl[si] = 0; 3572f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pcb->handle = 0; 3589ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess--; 3592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_cb->curr_sess == 0) 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3619ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->scn = 0; 3629ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie bta_jv_free_sec_id(&p_cb->sec_id); 3639ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->p_cback = NULL; 3649ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->handle = 0; 3659ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess = -1; 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3702f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_free_l2c_cb 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free the given L2CAP control block 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_JV_STATUS bta_jv_free_l2c_cb(tBTA_JV_L2C_CB *p_cb) 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3825cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_cb); 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status = BTA_JV_SUCCESS; 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_JV_ST_NONE != p_cb->state) 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_FOR_JV_INCLUDED == TRUE 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_JV_L2C_FOR_SDP_HDL == p_cb->handle) 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_data_size = 0; 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(SDP_ConnClose(bta_jv_cb.sdp_for_jv)) 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_for_jv = 0; 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_JV_FAILURE; 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 4022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_free_set_pm_profile_cb((UINT32)p_cb->handle); 4032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (GAP_ConnClose(p_cb->handle) != BT_PASS) 4042f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_FAILURE; 4052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->psm = 0; 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->state = BTA_JV_ST_NONE; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_sec_id(&p_cb->sec_id); 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = NULL; 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4172f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4182f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_clear_pm_cb 4192f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4202f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description clears jv pm control block and optionally calls bta_sys_conn_close() 4212f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** In general close_conn should be set to TRUE to remove registering with 4222f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** dm pm! 4232f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4242f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** WARNING: Make sure to clear pointer form port or l2c to this control block too! 4252f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 4272f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_clear_pm_cb(tBTA_JV_PM_CB *p_pm_cb, BOOLEAN close_conn) 4282f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 4292f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta /* needs to be called if registered with bta pm, otherwise we may run out of dm pm slots! */ 4302f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (close_conn) 4312f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_conn_close(BTA_ID_JV, p_pm_cb->app_id, p_pm_cb->peer_bd_addr); 4322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pm_cb->state = BTA_JV_PM_FREE_ST; 4332f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pm_cb->app_id = BTA_JV_PM_ALL; 4342f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_pm_cb->handle = BTA_JV_PM_HANDLE_CLEAR; 4352f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bdcpy(p_pm_cb->peer_bd_addr, bd_addr_null); 4362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 4372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 4382f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 4392f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_free_set_pm_profile_cb 4412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description free pm profile control block 4432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns BTA_JV_SUCCESS if cb has been freed correctly, 4452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** BTA_JV_FAILURE in case of no profile has been registered or already freed 4462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 4472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 4482f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(UINT32 jv_handle) 4492f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 4502f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_STATUS status = BTA_JV_FAILURE; 4512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_PM_CB **p_cb; 452b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi int i, j, bd_counter = 0, appid_counter = 0; 4532f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 4542f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) 4552f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 4562f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb = NULL; 4572f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((bta_jv_cb.pm_cb[i].state != BTA_JV_PM_FREE_ST) && 4582f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta (jv_handle == bta_jv_cb.pm_cb[i].handle)) 4592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 460b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi for (j = 0; j < BTA_JV_PM_MAX_NUM; j++) 461b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi { 462b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi if (bdcmp(bta_jv_cb.pm_cb[j].peer_bd_addr, bta_jv_cb.pm_cb[i].peer_bd_addr) == 0) 463b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi bd_counter++; 464b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi if (bta_jv_cb.pm_cb[j].app_id == bta_jv_cb.pm_cb[i].app_id) 465b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi appid_counter++; 466b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi } 467b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi 468e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_free_set_pm_profile_cb(jv_handle: 0x%2x), idx: %d, " 4692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "app_id: 0x%x", jv_handle, i, bta_jv_cb.pm_cb[i].app_id); 470e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_free_set_pm_profile_cb, bd_counter = %d, " 471b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi "appid_counter = %d", bd_counter, appid_counter); 472b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi if (bd_counter > 1) 473b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi { 474b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi bta_jv_pm_conn_idle(&bta_jv_cb.pm_cb[i]); 475b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi } 4762f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 477b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi if (bd_counter <= 1 || (appid_counter <= 1)) 478b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi { 479b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], TRUE); 480b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi } 481b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi else 482b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi { 483b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], FALSE); 484b26a902ec2458256150dc85a694efe8f3b15dcf7Pradeep Panigrahi } 4852f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 4862f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (BTA_JV_RFCOMM_MASK & jv_handle) 4872f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 4882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 hi = ((jv_handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; 4892f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 si = BTA_JV_RFC_HDL_TO_SIDX(jv_handle); 4902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && si 4912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) 4922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 4932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(bta_jv_cb.rfc_cb[hi].rfc_hdl[si]); 4942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_pcb) 4952f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 4962f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (NULL == p_pcb->p_pm_cb) 497e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_free_set_pm_profile_cb(jv_handle:" 4982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta " 0x%x):port_handle: 0x%x, p_pm_cb: %d: no link to " 4992f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "pm_cb?", jv_handle, p_pcb->port_handle, i); 5002f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb = &p_pcb->p_pm_cb; 5012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5042f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 5052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5062f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (jv_handle < BTA_JV_MAX_L2C_CONN) 5072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5082f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_L2C_CB *p_l2c_cb = &bta_jv_cb.l2c_cb[jv_handle]; 5092f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (NULL == p_l2c_cb->p_pm_cb) 510e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_free_set_pm_profile_cb(jv_handle: " 5112f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "0x%x): p_pm_cb: %d: no link to pm_cb?", jv_handle, i); 5122f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb = &p_l2c_cb->p_pm_cb; 5132f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5142f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5152f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_cb) 5162f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5172f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *p_cb = NULL; 5182f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_SUCCESS; 5192f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5202f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5212f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5222f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return status; 5232f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 5242f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 5252f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 5262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 5272f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_alloc_set_pm_profile_cb 5282f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 5292f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description set PM profile control block 5302f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 5312f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns pointer to allocated cb or NULL in case of failure 5322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 5332f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 5342f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic tBTA_JV_PM_CB *bta_jv_alloc_set_pm_profile_cb(UINT32 jv_handle, tBTA_JV_PM_ID app_id) 5352f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 5362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BOOLEAN bRfcHandle = (jv_handle & BTA_JV_RFCOMM_MASK) != 0; 5372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BD_ADDR peer_bd_addr; 5382f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta int i, j; 5392f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_PM_CB **pp_cb; 5402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 5412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) 5422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta pp_cb = NULL; 5442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (bta_jv_cb.pm_cb[i].state == BTA_JV_PM_FREE_ST) 5452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta /* rfc handle bd addr retrieval requires core stack handle */ 5472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (bRfcHandle) 5482f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5492f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 hi = ((jv_handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; 5502f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 si = BTA_JV_RFC_HDL_TO_SIDX(jv_handle); 5512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (j = 0; j < BTA_JV_MAX_RFC_CONN; j++) 5522f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5532f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (jv_handle == bta_jv_cb.port_cb[j].handle) 5542f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5552f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta pp_cb = &bta_jv_cb.port_cb[j].p_pm_cb; 5562f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (PORT_SUCCESS != PORT_CheckConnection( 5572f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_cb.port_cb[j].port_handle, peer_bd_addr, NULL)) 5582f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta i = BTA_JV_PM_MAX_NUM; 5592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 5602f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5612f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5622f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5632f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 5642f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5652f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta /* use jv handle for l2cap bd address retrieval */ 5662f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (j = 0; j < BTA_JV_MAX_L2C_CONN; j++) 5672f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5682f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (jv_handle == bta_jv_cb.l2c_cb[j].handle) 5692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5702f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta pp_cb = &bta_jv_cb.l2c_cb[j].p_pm_cb; 5712f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT8 *p_bd_addr = GAP_ConnGetRemoteAddr((UINT16)jv_handle); 5722f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (NULL != p_bd_addr) 5732f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bdcpy(peer_bd_addr, p_bd_addr); 5742f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 5752f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta i = BTA_JV_PM_MAX_NUM; 5762f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 5772f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5782f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5792f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 580e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_alloc_set_pm_profile_cb(handle 0x%2x, app_id %d): " 5812f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "idx: %d, (BTA_JV_PM_MAX_NUM: %d), pp_cb: 0x%x", jv_handle, app_id, 5822f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta i, BTA_JV_PM_MAX_NUM, pp_cb); 5832f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 5842f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5852f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 5862f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 5872f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((i != BTA_JV_PM_MAX_NUM) && (NULL != pp_cb)) 5882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 5892f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *pp_cb = &bta_jv_cb.pm_cb[i]; 5902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_cb.pm_cb[i].handle = jv_handle; 5912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_cb.pm_cb[i].app_id = app_id; 5922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bdcpy(bta_jv_cb.pm_cb[i].peer_bd_addr, peer_bd_addr); 5932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_cb.pm_cb[i].state = BTA_JV_PM_IDLE_ST; 5942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return &bta_jv_cb.pm_cb[i]; 5952f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 596e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_alloc_set_pm_profile_cb(jv_handle: 0x%x, app_id: %d) " 5972f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta "return NULL", jv_handle, app_id); 5982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return (tBTA_JV_PM_CB *)NULL; 5992f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 6002f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 6012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 6022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 6032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_alloc_sdp_id 6042f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 6052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description allocate a SDP id for the given SDP record handle 6062f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 6072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns 6082f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 6092f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bta_jv_alloc_sdp_id(UINT32 sdp_handle) 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int j; 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 id = 0; 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* find a free entry */ 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (j = 0; j < BTA_JV_MAX_SDP_REC; j++) 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_jv_cb.sdp_handle[j] == 0) 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_handle[j] = sdp_handle; 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project id = (UINT32)(j + 1); 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* the SDP record handle reported is the (index + 1) to control block */ 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return id; 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_free_sdp_id 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free the sdp id 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_free_sdp_id(UINT32 sdp_id) 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(sdp_id > 0 && sdp_id <= BTA_JV_MAX_SDP_REC) 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_handle[sdp_id - 1] = 0; 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_sdp_handle 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description find the SDP handle associated with the given sdp id 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bta_jv_get_sdp_handle(UINT32 sdp_id) 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 sdp_handle = 0; 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(sdp_id > 0 && sdp_id <= BTA_JV_MAX_SDP_REC) 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sdp_handle = bta_jv_cb.sdp_handle[sdp_id - 1]; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return sdp_handle; 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_check_psm 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description for now use only the legal PSM per JSR82 spec 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE, if allowed 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_jv_check_psm(UINT16 psm) 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN ret = FALSE; 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(L2C_IS_VALID_PSM(psm) ) 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(psm < 0x1001) 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* see if this is defined by spec */ 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(psm) 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case SDP_PSM: /* 1 */ 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PSM_RFCOMM: /* 3 */ 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do not allow java app to use these 2 PSMs */ 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case TCS_PSM_INTERCOM: /* 5 */ 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case TCS_PSM_CORDLESS: /* 7 */ 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( FALSE == bta_sys_is_register(BTA_ID_CT) && 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FALSE == bta_sys_is_register(BTA_ID_CG) ) 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PSM_BNEP: /* F */ 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(FALSE == bta_sys_is_register(BTA_ID_PAN)) 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case HID_PSM_CONTROL: /* 0x11 */ 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case HID_PSM_INTERRUPT: /* 0x13 */ 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //FIX: allow HID Device and HID Host to coexist 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( FALSE == bta_sys_is_register(BTA_ID_HD) || 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FALSE == bta_sys_is_register(BTA_ID_HH) ) 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVCT_PSM: /* 0x17 */ 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case AVDT_PSM: /* 0x19 */ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((FALSE == bta_sys_is_register(BTA_ID_AV)) && 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (FALSE == bta_sys_is_register(BTA_ID_AVK))) 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret; 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_enable 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Initialises the JAVA I/F 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_enable(tBTA_JV_MSG *p_data) 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status = BTA_JV_SUCCESS; 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback = p_data->enable.p_cback; 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_ENABLE_EVT, (tBTA_JV *)&status, 0); 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_disable 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Disables the BT device manager 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** free the resources used by java 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_disable (tBTA_JV_MSG *p_data) 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7585cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 7595cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 760e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_disable not used"); 7619ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie#if 0 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback = NULL; 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* delete the SDP records created by java apps */ 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_SDP_REC; i++) 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.sdp_handle[i]) 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 770e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "delete SDP record: %d", bta_jv_cb.sdp_handle[i]); 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_DeleteRecord(bta_jv_cb.sdp_handle[i]); 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_handle[i] = 0; 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* free the SCNs allocated by java apps */ 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_SCN; i++) 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.scn[i]) 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 781e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "free scn: %d", (i+1)); 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_FreeSCN((UINT8)(i+1)); 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.scn[i] = FALSE; 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* disconnect L2CAP connections */ 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_L2C_CONN; i++) 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_l2c_cb(&bta_jv_cb.l2c_cb[i]); 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* disconnect RFCOMM connections */ 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_RFC_CONN; i++) 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_rfc_cb(&bta_jv_cb.rfc_cb[i]); 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* free the service records allocated by java apps */ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_NUM_SERVICE_ID; i++) 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.sec_id[i]) 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecClrService(bta_jv_cb.sec_id[i]); 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sec_id[i] = 0; 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8089ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie#endif 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_set_discoverability 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sets discoverability 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_set_discoverability (tBTA_JV_MSG *p_data) 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.set_discover.status = BTA_JV_FAILURE; 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize the default value for the event as the current mode */ 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.set_discover.disc_mode = BTM_ReadDiscoverability(NULL, NULL); 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_SUCCESS == BTM_SetDiscoverability((UINT8)p_data->set_discoverability.disc_mode, 0, 0)) 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.set_discover.status = BTA_JV_SUCCESS; 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update the mode, after BTM_SetDiscoverability() is successful */ 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.set_discover.disc_mode = p_data->set_discoverability.disc_mode; 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_SET_DISCOVER_EVT, &evt_data, 0); 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_local_device_addr 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Reads the local Bluetooth device address 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_get_local_device_addr(tBTA_JV_MSG *p_data) 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8505cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 8515cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadLocalDeviceAddr((tBTM_CMPL_CB *)bta_jv_get_local_device_addr_cback); 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_local_device_name 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Reads the local Bluetooth device name 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_get_local_device_name(tBTA_JV_MSG *p_data) 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *name; 8685cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadLocalDeviceName(&name); 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_name = (UINT8*)name; 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_LOCAL_NAME_EVT, &evt_data, 0); 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_remote_device_name 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Reads the local Bluetooth device name 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_get_remote_device_name(tBTA_JV_MSG *p_data) 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadRemoteDeviceName(p_data->get_rmt_name.bd_addr, 8897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta (tBTM_CMPL_CB *)bta_jv_get_remote_device_name_cback, BT_TRANSPORT_BR_EDR); 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_set_service_class 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description update the service class field of device class 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_set_service_class (tBTA_JV_MSG *p_data) 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_UTL_COD cod; 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set class of device */ 9067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta /* 9077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTA_JvSetServiceClass(UINT32 service) assumes that the service class passed to the 9087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta API function as defined in the assigned number page. 9097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta For example: the object transfer bit is bit 20 of the 24-bit Class of device; 9107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta the value of this bit is 0x00100000 (value 1) 9117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta Our btm_api.h defines this bit as #define BTM_COD_SERVICE_OBJ_TRANSFER 0x1000 (value 2) 9127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta This reflects that the service class defined at btm is UINT16, 9137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta which starts at bit 8 of the 24 bit Class of Device 9147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta The following statement converts from (value 1) into (value 2) 9157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta */ 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cod.service = (p_data->set_service.service >> 8); 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_sec_cback 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description callback function to handle set encryption complete event 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic void bta_jv_sec_cback (BD_ADDR bd_addr, tBTA_TRANSPORT transport, 9307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta void *p_ref_data, tBTM_STATUS result) 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9325cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_ref_data); 9337fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta UNUSED(transport); 9345cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_SET_ENCRYPTION set_enc; 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(set_enc.bd_addr, bd_addr); 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_enc.status = result; 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result > BTA_JV_BUSY) 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_enc.status = BTA_JV_FAILURE; 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_SET_ENCRYPTION_EVT, (tBTA_JV *)&set_enc, 0); 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_set_encryption 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Reads the local Bluetooth device name 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_set_encryption(tBTA_JV_MSG *p_data) 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTM_SetEncryption(p_data->set_encrypt.bd_addr, BTA_TRANSPORT_BR_EDR, bta_jv_sec_cback, NULL); 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_scn 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description obtain a free SCN 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_get_scn(tBTA_JV_MSG *p_data) 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9715cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 scn; 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scn = BTM_AllocateSCN(); 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(scn) 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.scn[scn-1] = TRUE; 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_GET_SCN_EVT, (tBTA_JV *)&scn); 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_free_scn 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free a SCN 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_free_scn(tBTA_JV_MSG *p_data) 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 scn = p_data->free_scn.scn; 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (scn > 0 && scn <= BTA_JV_MAX_SCN && bta_jv_cb.scn[scn-1]) 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* this scn is used by JV */ 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.scn[scn-1] = FALSE; 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_FreeSCN(scn); 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project static uint8_t bt_base_uuid[] = 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }; 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1007016e25eae39ff5249d076e973005a2d21fdb6813Mike J. Chen logu("in, uuid:", u->uu.uuid128); 1008e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("uuid len:%d", u->len); 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(u->len == 16) 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) == 0) 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID su; 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&su, 0, sizeof(su)); 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project su.len = 2; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint16_t u16; 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project su.uu.uuid16 = ntohs(u16); 1021e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("shorten to 16 bits uuid: %x", su.uu.uuid16); 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project su.len = 4; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t u32; 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project su.uu.uuid32 = ntohl(u32); 1029e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("shorten to 32 bits uuid: %x", su.uu.uuid32); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return su; 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1034e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("cannot shorten none-reserved 128 bits uuid"); 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return *u; 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_start_discovery_cback 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for Start Discovery 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_start_discovery_cback(UINT16 result, void * user_data) 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status; 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 old_sdp_act = bta_jv_cb.sdp_active; 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1052e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_start_discovery_cback res: 0x%x", result); 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (old_sdp_act == BTA_JV_SDP_ACT_CANCEL) 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1059e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("BTA_JV_SDP_ACT_CANCEL"); 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_JV_SUCCESS; 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_CANCEL_DISCVRY_EVT, (tBTA_JV *)&status, user_data); 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_DISCOVERY_COMP dcomp; 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dcomp.scn = 0; 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_JV_FAILURE; 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result == SDP_SUCCESS || result == SDP_DB_FULL) 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_REC *p_sdp_rec = NULL; 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_PROTOCOL_ELEM pe; 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project logu("bta_jv_cb.uuid", bta_jv_cb.uuid.uu.uuid128); 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID su = shorten_sdp_uuid(&bta_jv_cb.uuid); 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project logu("shorten uuid:", su.uu.uuid128); 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = SDP_FindServiceUUIDInDb(p_bta_jv_cfg->p_sdp_db, &su, p_sdp_rec); 1076e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("p_sdp_rec:%p", p_sdp_rec); 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dcomp.scn = (UINT8) pe.params[0]; 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_JV_SUCCESS; 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dcomp.status = status; 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&dcomp, user_data); 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //free sdp db 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //utl_freebuf(&(p_bta_jv_cfg->p_sdp_db)); 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_start_discovery 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Discovers services on a remote device 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_start_discovery(tBTA_JV_MSG *p_data) 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status = BTA_JV_FAILURE; 1104e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_start_discovery in, sdp_active:%d", bta_jv_cb.sdp_active); 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_jv_cb.sdp_active != BTA_JV_SDP_ACT_NONE) 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SDP is still in progress */ 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_JV_BUSY; 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->start_discovery.num_uuid == 0) 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->start_discovery.num_uuid = 1; 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->start_discovery.uuid_list[0].len = 2; 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->start_discovery.uuid_list[0].uu.uuid16 = UUID_SERVCLASS_PUBLIC_BROWSE_GROUP; 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init the database/set up the filter */ 1122e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("call SDP_InitDiscoveryDb, p_data->start_discovery.num_uuid:%d", 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->start_discovery.num_uuid); 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_InitDiscoveryDb (p_bta_jv_cfg->p_sdp_db, p_bta_jv_cfg->sdp_db_size, 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->start_discovery.num_uuid, p_data->start_discovery.uuid_list, 0, NULL); 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* tell SDP to keep the raw data */ 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_jv_cfg->p_sdp_db->raw_data = p_bta_jv_cfg->p_sdp_raw_data; 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_jv_cfg->p_sdp_db->raw_size = p_bta_jv_cfg->sdp_raw_size; 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_sel_raw_data = 0; 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.uuid = p_data->start_discovery.uuid_list[0]; 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_YES; 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!SDP_ServiceSearchAttributeRequest2(p_data->start_discovery.bd_addr, 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_jv_cfg->p_sdp_db, 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_start_discovery_cback, p_data->start_discovery.user_data)) 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* failed to start SDP. report the failure right away */ 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else report the result when the cback is called 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_cancel_discovery 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Cancels an active discovery 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_cancel_discovery(tBTA_JV_MSG *p_data) 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_STATUS status = BTA_JV_SUCCESS; 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_jv_cb.sdp_active == BTA_JV_SDP_ACT_YES) 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (SDP_CancelServiceSearch (p_bta_jv_cfg->p_sdp_db)) 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_CANCEL; 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_CANCEL_DISCVRY_EVT, (tBTA_JV *)&status, p_data->cancel_discovery.user_data); 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_get_services_length 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Obtain the length of each record in the SDP DB. 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_get_services_length(tBTA_JV_MSG *p_data) 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11845cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_SERVICES_LEN evt_data; 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p, *np, *op, type; 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 raw_used, raw_cur; 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 len; 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.num_services = -1; 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_services_len = p_data->get_services_length.p_services_len; 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_bta_jv_cfg->p_sdp_db->p_first_rec) 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* the database is valid */ 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.num_services = 0; 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = p_bta_jv_cfg->p_sdp_db->raw_data; 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_used = p_bta_jv_cfg->p_sdp_db->raw_used; 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(raw_used && p) 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op = p; 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project type = *p++; 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project np = sdpu_get_len_from_type(p, type, &len); 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = np + len; 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_cur = p - op; 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(raw_used >= raw_cur) 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_used -= raw_cur; 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* error. can not continue */ 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->get_services_length.inc_hdr) 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_services_len[evt_data.num_services++] = len + np - op; 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_services_len[evt_data.num_services++] = len; 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of while */ 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_SERVICES_LEN_EVT, (tBTA_JV *)&evt_data); 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_service_select 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Obtain the length of given UUID in the SDP DB. 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_service_select(tBTA_JV_MSG *p_data) 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12425cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_SERVICE_SEL serv_sel; 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_REC *p_rec, *p_tmp; 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p, *np, *op, type; 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 raw_used, raw_cur; 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 len; 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project serv_sel.service_len = 0; 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_sel_raw_data = 0; 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_rec = SDP_FindServiceInDb (p_bta_jv_cfg->p_sdp_db, p_data->service_select.uuid, NULL); 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_rec) 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* found the record in the database */ 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* the database must be valid */ 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = p_bta_jv_cfg->p_sdp_db->raw_data; 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_used = p_bta_jv_cfg->p_sdp_db->raw_used; 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tmp = p_bta_jv_cfg->p_sdp_db->p_first_rec; 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(raw_used && p && p_tmp) 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op = p; 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project type = *p++; 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project np = sdpu_get_len_from_type(p, type, &len); 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_tmp == p_rec) 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_sel_raw_data = op; 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sel_len = len; 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project serv_sel.service_len = len; 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(serv_sel.bd_addr, p_rec->remote_bd_addr); 1271e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_service_select found uuid: 0x%x", 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->service_select.uuid); 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = np + len; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_cur = p - op; 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(raw_used >= raw_cur) 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raw_used -= raw_cur; 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* error. can not continue */ 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tmp = p_tmp->p_next_rec; 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of while */ 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1289e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "service_len: %d", serv_sel.service_len); 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_SERVICE_SEL_EVT, (tBTA_JV *)&serv_sel); 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_create_record 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Create an SDP record with the given attributes 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_create_record(tBTA_JV_MSG *p_data) 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_CREATE_RECORD *cr = &(p_data->create_record); 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_CREATE_RECORD evt_data; 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //callback user immediately to create his own sdp record in stack thread context 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_CREATE_RECORD_EVT, (tBTA_JV *)&evt_data, cr->user_data); 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_update_record 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update an SDP record with the given attributes 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_update_record(tBTA_JV_MSG *p_data) 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13255cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_UPDATE_RECORD *ur = &(p_data->update_record); 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_UPDATE_RECORD evt_data; 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 handle; 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT32 i; 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *ptr; 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *next_ptr; 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *end; 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 len; 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 type; 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = ur->handle; 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_jv_get_sdp_handle(ur->handle); 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(handle) 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* this is a record created by JV */ 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < ur->array_len; i++) 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ptr = ur->p_values[i]; 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project end = ptr + ur->p_value_sizes[i]; 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (ptr < end) 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project type = *ptr; 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project next_ptr = sdpu_get_len_from_type(ptr + 1, *ptr, &len); 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(ATTR_ID_SERVICE_RECORD_HDL != ur->p_ids[i]) 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!SDP_AddAttribute(handle, ur->p_ids[i], (UINT8)((type >> 3) & 0x1f), 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len, next_ptr)) 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* failed on updating attributes. */ 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_UPDATE_RECORD_EVT, (tBTA_JV *)&evt_data); 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ptr = next_ptr + len; 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of while */ 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } /* end of for */ 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_UPDATE_RECORD_EVT, (tBTA_JV *)&evt_data); 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_add_attribute 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Add an attribute to an SDP record 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_add_attribute(tBTA_JV_MSG *p_data) 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13895cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_ADD_ATTRIBUTE *aa = &(p_data->add_attr); 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_ADD_ATTR evt_data; 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 handle; 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 type; 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 len; 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *ptr; 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *next_ptr; 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = aa->handle; 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_jv_get_sdp_handle(aa->handle); 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(handle) 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* this is a record created by JV */ 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ptr = aa->p_value; 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project type = *ptr; 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project next_ptr = sdpu_get_len_from_type(ptr + 1, *ptr, &len); 1409e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_add_attribute: ptr chg:%d len:%d, size:%d", 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (next_ptr - ptr), len, aa->value_size); 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(ATTR_ID_SERVICE_RECORD_HDL != aa->attr_id && /* do not allow the SDP record handle to be updated */ 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((INT32)(next_ptr - ptr + len) == aa->value_size) && /* double check data size */ 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_AddAttribute(handle, aa->attr_id, (UINT8)((type >> 3) & 0x1f), 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project len, next_ptr)) 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_ADD_ATTR_EVT, (tBTA_JV *)&evt_data); 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_delete_attribute 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Delete an attribute from the given SDP record 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_delete_attribute(tBTA_JV_MSG *p_data) 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14365cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_ADD_ATTRIBUTE *da = &(p_data->add_attr); 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_DELETE_ATTR evt_data; 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 handle; 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = da->handle; 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_jv_get_sdp_handle(da->handle); 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(handle) 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* this is a record created by JV */ 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(SDP_DeleteAttribute(handle, da->attr_id)) 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.p_dm_cback) 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.p_dm_cback(BTA_JV_DELETE_ATTR_EVT, (tBTA_JV *)&evt_data); 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_delete_record 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Delete an SDP record 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_delete_record(tBTA_JV_MSG *p_data) 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_ADD_ATTRIBUTE *dr = &(p_data->add_attr); 1471689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(dr->handle) 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1473689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project /* this is a record created by btif layer*/ 1474689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project SDP_DeleteRecord(dr->handle); 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_FOR_JV_INCLUDED == TRUE 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_sdp_res_cback 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for Start Discovery 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_sdp_res_cback (UINT16 event, tSDP_DATA *p_data) 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[BTA_JV_L2C_FOR_SDP_HDL]; 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1493e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_sdp_res_cback: %d evt:x%x", 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_for_jv, event); 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!bta_jv_cb.sdp_for_jv) 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.l2c_open.status = BTA_JV_SUCCESS; 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.l2c_open.handle = BTA_JV_L2C_FOR_SDP_HDL; 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(event) 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case SDP_EVT_OPEN: 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(evt_data.l2c_open.rem_bda, p_data->open.peer_addr); 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.l2c_open.tx_mtu = p_data->open.peer_mtu; 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->state = BTA_JV_ST_SR_OPEN; 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data); 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case SDP_EVT_DATA_IND: 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = BTA_JV_L2C_FOR_SDP_HDL; 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_bta_jv_cfg->p_sdp_raw_data, p_data->data.p_data, p_data->data.data_len); 1513e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "data size: %d/%d ", bta_jv_cb.sdp_data_size, p_data->data.data_len); 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_data_size = p_data->data.data_len; 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data); 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_sdp_cback 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for Start Discovery 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_sdp_cback(UINT16 result) 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CLOSE close; 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[BTA_JV_L2C_FOR_SDP_HDL]; 1533e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_sdp_cback: result:x%x", result); 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_cb->p_cback) 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close.handle = BTA_JV_L2C_FOR_SDP_HDL; 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close.async = FALSE; 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close.status = BTA_JV_SUCCESS; 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_sec_id(&p_cb->sec_id); 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&close); 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_for_jv = 0; 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = NULL; 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_connect 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description makes an l2cap client connection 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_connect(tBTA_JV_MSG *p_data) 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15615cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2C_CB *p_cb; 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CL_INIT evt_data; 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle=GAP_INVALID_HANDLE; 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 sec_id; 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tL2CAP_CFG_INFO cfg; 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_CONNECT *cc = &(p_data->l2cap_connect); 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu_present = TRUE; 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu = cc->rx_mtu; 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: DM role manager 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole(cc->role); 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_id = bta_jv_alloc_sec_id(); 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.sec_id = sec_id; 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (sec_id) 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_FOR_JV_INCLUDED == TRUE 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(SDP_PSM == cc->remote_psm && 0 == bta_jv_cb.sdp_for_jv) 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_for_jv = SDP_ConnOpen(cc->peer_bd_addr, 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_sdp_res_cback, 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_sdp_cback); 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.sdp_for_jv) 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_data_size = 0; 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = BTA_JV_L2C_FOR_SDP_HDL; 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_check_psm(cc->remote_psm)) /* allowed */ 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( (handle = GAP_ConnOpen("", sec_id, 0, cc->peer_bd_addr, cc->remote_psm, 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cfg, cc->sec_mask, GAP_FCR_CHAN_OPT_BASIC, 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_l2cap_client_cback)) != GAP_INVALID_HANDLE ) 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_data.status == BTA_JV_SUCCESS) 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = &bta_jv_cb.l2c_cb[handle]; 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->handle = handle; 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = cc->p_cback; 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->psm = 0; /* not a server */ 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->sec_id = sec_id; 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->state = BTA_JV_ST_CL_OPENING; 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_sec_id(&sec_id); 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = handle; 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, (tBTA_JV *)&evt_data); 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_close 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Close an L2CAP client connection 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_close(tBTA_JV_MSG *p_data) 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16375cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CLOSE evt_data; 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_CLOSE *cc = &(p_data->l2cap_close); 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CBACK *p_cback = cc->p_cb->p_cback; 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = cc->handle; 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = bta_jv_free_l2c_cb(cc->p_cb); 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.async = FALSE; 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cback) 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data); 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1650e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("### NO CALLBACK SET !!! ###"); 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_start_server 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description starts an L2CAP server 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_start_server(tBTA_JV_MSG *p_data) 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16655cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2C_CB *p_cb; 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 sec_id; 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle; 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tL2CAP_CFG_INFO cfg; 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_START evt_data; 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //FIX: MTU=0 means not present 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (ls->rx_mtu >0) 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu_present = TRUE; 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu = ls->rx_mtu; 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu_present = FALSE; 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cfg.mtu = 0; 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO DM role manager 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole(ls->role); 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_id = bta_jv_alloc_sec_id(); 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (0 == sec_id || (FALSE == bta_jv_check_psm(ls->local_psm)) || 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, 0, ls->local_psm, &cfg, 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ls->sec_mask, GAP_FCR_CHAN_OPT_BASIC, bta_jv_l2cap_server_cback)) == GAP_INVALID_HANDLE) 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_free_sec_id(&sec_id); 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* default JV implementation requires explicit call 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project to allow incoming connections when ready*/ 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GAP_SetAcceptReady(handle, FALSE); 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = &bta_jv_cb.l2c_cb[handle]; 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = handle; 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.sec_id = sec_id; 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = ls->p_cback; 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->handle = handle; 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->sec_id = sec_id; 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->state = BTA_JV_ST_SR_LISTEN; 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->psm = ls->local_psm; 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ls->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV *)&evt_data); 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_stop_server 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description stops an L2CAP server 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_stop_server(tBTA_JV_MSG *p_data) 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17325cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2C_CB *p_cb; 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CLOSE evt_data; 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_CBACK *p_cback; 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<BTA_JV_MAX_L2C_CONN; i++) 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_jv_cb.l2c_cb[i].psm == ls->local_psm) 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = &bta_jv_cb.l2c_cb[i]; 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback = p_cb->p_cback; 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = p_cb->handle; 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = bta_jv_free_l2c_cb(p_cb); 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.async = FALSE; 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data); 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_read 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Read data from an L2CAP connection 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_read(tBTA_JV_MSG *p_data) 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17675cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_READ evt_data; 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_READ *rc = &(p_data->l2cap_read); 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = rc->handle; 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.req_id = rc->req_id; 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_data = rc->p_data; 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = 0; 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_FOR_JV_INCLUDED == TRUE 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_JV_L2C_FOR_SDP_HDL == rc->handle) 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = rc->len; 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(evt_data.len > bta_jv_cb.sdp_data_size) 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = bta_jv_cb.sdp_data_size; 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(rc->p_data, p_bta_jv_cfg->p_sdp_raw_data, evt_data.len); 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_jv_cb.sdp_data_size = 0; 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BT_PASS == GAP_ConnReadData(rc->handle, rc->p_data, rc->len, &evt_data.len)) 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rc->p_cback(BTA_JV_L2CAP_READ_EVT, (tBTA_JV *)&evt_data); 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_l2cap_write 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Write data to an L2CAP connection 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_l2cap_write(tBTA_JV_MSG *p_data) 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18115cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_L2CAP_WRITE evt_data; 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_L2CAP_WRITE *ls = &(p_data->l2cap_write); 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = ls->handle; 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.req_id = ls->req_id; 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.cong = ls->p_cb->cong; 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = 0; 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SDP_FOR_JV_INCLUDED == TRUE 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_JV_L2C_FOR_SDP_HDL == ls->handle) 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg = (BT_HDR *) GKI_getbuf ((UINT16)(ls->len + BT_HDR_SIZE + L2CAP_MIN_OFFSET)); 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_msg) 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->offset = L2CAP_MIN_OFFSET; 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)(p_msg + 1) + L2CAP_MIN_OFFSET; 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->len = ls->len; 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, ls->p_data, p_msg->len); 18322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_conn_busy(ls->p_cb->p_pm_cb); 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(SDP_WriteData (bta_jv_cb.sdp_for_jv, p_msg)) 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = ls->len; 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_conn_busy(ls->p_cb->p_pm_cb); 18442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!evt_data.cong && 18452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta BT_PASS == GAP_ConnWriteData(ls->handle, ls->p_data, ls->len, &evt_data.len)) 18462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 18472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta evt_data.status = BTA_JV_SUCCESS; 18482f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ls->p_cb->p_cback(BTA_JV_L2CAP_WRITE_EVT, (tBTA_JV *)&evt_data); 18512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_set_pm_conn_state(ls->p_cb->p_pm_cb, BTA_JV_CONN_IDLE); 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_port_data_co_cback 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description port data callback function of rfcomm 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** connections 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define DATA_CO_CALLBACK_TYPE_INCOMING 1 18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE 2 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define DATA_CO_CALLBACK_TYPE_OUTGOING 3 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int bta_jv_port_data_co_cback(UINT16 port_handle, UINT8 *buf, UINT16 len, int type) 18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 1874d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta int ret = 0; 1875d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta APPL_TRACE_DEBUG("bta_jv_port_data_co_cback, p_cb:%p, p_pcb:%p, len:%d, type:%d", 1876d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta p_cb, p_pcb, len, type); 18779ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if (p_pcb != NULL) 18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(type) 18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case DATA_CO_CALLBACK_TYPE_INCOMING: 1882d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta bta_jv_pm_conn_busy(p_pcb->p_pm_cb); 1883d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta ret = bta_co_rfc_data_incoming(p_pcb->user_data, (BT_HDR*)buf); 1884d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta bta_jv_pm_conn_idle(p_pcb->p_pm_cb); 1885d9e2d0f1fa19f737632e82c24ba278990b8a7548Hemant Gupta return ret; 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE: 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return bta_co_rfc_data_outgoing_size(p_pcb->user_data, (int*)buf); 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case DATA_CO_CALLBACK_TYPE_OUTGOING: 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return bta_co_rfc_data_outgoing(p_pcb->user_data, buf, len); 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 1891e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("unknown callout type:%d", type); 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_port_mgmt_cl_cback 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description callback for port mamangement function of rfcomm 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** client connections 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_port_mgmt_cl_cback(UINT32 code, UINT16 port_handle) 19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR rem_bda; 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 lcid; 19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFCOMM_CBACK *p_cback; /* the callback function */ 19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1917e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_mgmt_cl_cback:code:%d, port_handle%d", code, port_handle); 19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(NULL == p_cb || NULL == p_cb->p_cback) 19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1921e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_mgmt_cl_cback code=%d port_handle:%d handle:%d", 19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project code, port_handle, p_cb->handle); 19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_CheckConnection(port_handle, rem_bda, &lcid); 19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(code == PORT_SUCCESS) 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_open.handle = p_cb->handle; 19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_open.status = BTA_JV_SUCCESS; 19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(evt_data.rfc_open.rem_bda, rem_bda); 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->state = BTA_JV_ST_CL_OPEN; 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_OPEN_EVT, &evt_data, p_pcb->user_data); 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.handle = p_cb->handle; 19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.status = BTA_JV_FAILURE; 19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.port_status = code; 19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.async = TRUE; 19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_pcb->state == BTA_JV_ST_CL_CLOSING) 19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.async = FALSE; 19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19449ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie //p_pcb->state = BTA_JV_ST_NONE; 19459ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie //p_pcb->cong = FALSE; 19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback = p_cb->p_cback; 19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, p_pcb->user_data); 19489ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie //bta_jv_free_rfc_cb(p_cb, p_pcb); 19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_port_event_cl_cback 19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for RFCOMM client port events 19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_port_event_cl_cback(UINT32 code, UINT16 port_handle) 19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1968e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_event_cl_cback:%d", port_handle); 19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(NULL == p_cb || NULL == p_cb->p_cback) 19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1972e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_event_cl_cback code=x%x port_handle:%d handle:%d", 19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project code, port_handle, p_cb->handle); 19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (code & PORT_EV_RXCHAR) 19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.data_ind.handle = p_cb->handle; 19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, p_pcb->user_data); 19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (code & PORT_EV_FC) 19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->cong = (code & PORT_EV_FCS) ? FALSE : TRUE; 19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.cong = p_pcb->cong; 19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.handle = p_cb->handle; 19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.status = BTA_JV_SUCCESS; 19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, p_pcb->user_data); 19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 19892f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (code & PORT_EV_TXEMPTY) 19902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 19912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_conn_idle(p_pcb->p_pm_cb); 19922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_connect 19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Client initiates an RFCOMM connection 20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_connect(tBTA_JV_MSG *p_data) 20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle = 0; 20072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 event_mask = BTA_JV_RFC_EV_MASK; 20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tPORT_STATE port_state; 2009689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project UINT8 sec_id = 0; 20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = NULL; 20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb; 20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_CONNECT *cc = &(p_data->rfcomm_connect); 20139ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_RFCOMM_CL_INIT evt_data = {0}; 20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO DM role manager 20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole(cc->role); 20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_id = bta_jv_alloc_sec_id(); 20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.sec_id = sec_id; 20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (0 == sec_id || 20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetSecurityLevel(TRUE, "", sec_id, cc->sec_mask, BT_PSM_RFCOMM, 20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_PROTO_RFCOMM, cc->remote_scn) == FALSE) 20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 2027e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("sec_id:%d is zero or BTM_SetSecurityLevel failed, remote_scn:%d", sec_id, cc->remote_scn); 20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_data.status == BTA_JV_SUCCESS && 20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, cc->remote_scn, FALSE, 20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_JV_DEF_RFC_MTU, cc->peer_bd_addr, &handle, bta_jv_port_mgmt_cl_cback) != PORT_SUCCESS) 20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2034e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_connect, RFCOMM_CreateConnection failed"); 20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (evt_data.status == BTA_JV_SUCCESS) 20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); 20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_cb) 20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = cc->p_cback; 20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->sec_id = sec_id; 20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scn = 0; 20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->state = BTA_JV_ST_CL_OPENING; 20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->user_data = cc->user_data; 20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.use_co = TRUE; 20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventCallback(handle, bta_jv_port_event_cl_cback); 20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventMask(handle, event_mask); 20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); 20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_GetState(handle, &port_state); 20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* coverity[uninit_use_in_call] 20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetState(handle, &port_state); 20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = p_cb->handle; 20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 2066e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("run out of rfc control block"); 20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cc->p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, (tBTA_JV *)&evt_data, cc->user_data); 2070689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(evt_data.status == BTA_JV_FAILURE) 2071689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project { 2072689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(sec_id) 2073689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project bta_jv_free_sec_id(&sec_id); 2074689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(handle) 2075689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project RFCOMM_RemoveConnection(handle); 2076689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project } 20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20782f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 20799ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic int find_rfc_pcb(void* user_data, tBTA_JV_RFC_CB **cb, tBTA_JV_PCB **pcb) 20809ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie{ 20819ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie *cb = NULL; 20829ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie *pcb = NULL; 20839ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie int i; 20842f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (i = 0; i < MAX_RFC_PORTS; i++) 20859ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 20862f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 rfc_handle = bta_jv_cb.port_cb[i].handle & BTA_JV_RFC_HDL_MASK; 20872f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta rfc_handle &= ~BTA_JV_RFCOMM_MASK; 20882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (rfc_handle && bta_jv_cb.port_cb[i].user_data == user_data) 20899ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 20909ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie *pcb = &bta_jv_cb.port_cb[i]; 20919ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie *cb = &bta_jv_cb.rfc_cb[rfc_handle - 1]; 2092e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("find_rfc_pcb(): FOUND rfc_cb_handle 0x%x, port.jv_handle:" 20932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta " 0x%x, state: %d, rfc_cb->handle: 0x%x", rfc_handle, (*pcb)->handle, 20942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta (*pcb)->state, (*cb)->handle); 20959ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return 1; 20969ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 20979ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 2098e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("find_rfc_pcb: cannot find rfc_cb from user data:%d", (UINT32)user_data); 20999ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return 0; 21009ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie} 21012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_close 21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Close an RFCOMM connection 21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_close(tBTA_JV_MSG *p_data) 21125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_CLOSE *cc = &(p_data->rfcomm_close); 21149ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_RFC_CB *p_cb = NULL; 21159ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_PCB *p_pcb = NULL; 2116e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_rfcomm_close, rfc handle:%d", cc->handle); 21172f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!cc->handle) 2118689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project { 2119e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_close, rfc handle is null"); 2120689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project return; 2121689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project } 2122689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project 21239ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie void* user_data = cc->user_data; 21242f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (!find_rfc_pcb(user_data, &p_cb, &p_pcb)) 21259ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return; 21269ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie bta_jv_free_rfc_cb(p_cb, p_pcb); 2127e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_rfcomm_close: sec id in use:%d, rfc_cb in use:%d", 21289ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie get_sec_id_used(), get_rfc_cb_used()); 21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_port_mgmt_sr_cback 21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description callback for port mamangement function of rfcomm 21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** server connections 21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_port_mgmt_sr_cback(UINT32 code, UINT16 port_handle) 21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 21455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR rem_bda; 21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 lcid; 21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num; 21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 si; 2150e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_port_mgmt_sr_cback, code:%d, port_handle:%d", code, port_handle); 21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(NULL == p_cb || NULL == p_cb->p_cback) 21529ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 2153e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_port_mgmt_sr_cback, p_cb:%p, p_cb->p_cback%p", 21549ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb, p_cb ? p_cb->p_cback : NULL); 21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 21569ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void *user_data = p_pcb->user_data; 2158e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_mgmt_sr_cback code=%d port_handle:0x%x handle:0x%x, p_pcb:%p, user:%d", 21599ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie code, port_handle, p_cb->handle, p_pcb, p_pcb->user_data); 21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_CheckConnection(port_handle, rem_bda, &lcid); 21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int failed = TRUE; 21632f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (code == PORT_SUCCESS) 21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_srv_open.handle = p_pcb->handle; 21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_srv_open.status = BTA_JV_SUCCESS; 21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(evt_data.rfc_srv_open.rem_bda, rem_bda); 21689ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_PCB *p_pcb_new_listen = bta_jv_add_rfc_port(p_cb, p_pcb); 21692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_pcb_new_listen) 21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_srv_open.new_listen_handle = p_pcb_new_listen->handle; 21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb_new_listen->user_data = p_cb->p_cback(BTA_JV_RFCOMM_SRV_OPEN_EVT, &evt_data, user_data); 2173e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("PORT_SUCCESS: curr_sess:%d, max_sess:%d", p_cb->curr_sess, p_cb->max_sess); 21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project failed = FALSE; 21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21762f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 2177e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_add_rfc_port failed to create new listen port"); 21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21792f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (failed) 21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.handle = p_cb->handle; 2182689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project evt_data.rfc_close.status = BTA_JV_FAILURE; 21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.async = TRUE; 2184689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project evt_data.rfc_close.port_status = code; 2185689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project p_pcb->cong = FALSE; 2186689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project 2187689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project tBTA_JV_RFCOMM_CBACK *p_cback = p_cb->p_cback; 2188e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("PORT_CLOSED before BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", 21899ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess, p_cb->max_sess); 21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_JV_ST_SR_CLOSING == p_pcb->state) 21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_close.async = FALSE; 2193689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project evt_data.rfc_close.status = BTA_JV_SUCCESS; 21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21959ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie //p_pcb->state = BTA_JV_ST_NONE; 21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, user_data); 21979ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie //bta_jv_free_rfc_cb(p_cb, p_pcb); 21989ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie 2199e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("PORT_CLOSED after BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", 22009ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess, p_cb->max_sess); 2201689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project } 22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_port_event_sr_cback 22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for RFCOMM server port events 22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_jv_port_event_sr_cback(UINT32 code, UINT16 port_handle) 22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); 22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); 22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV evt_data; 22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(NULL == p_cb || NULL == p_cb->p_cback) 22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2222e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG( "bta_jv_port_event_sr_cback code=x%x port_handle:%d handle:%d", 22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project code, port_handle, p_cb->handle); 22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project void *user_data = p_pcb->user_data; 22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (code & PORT_EV_RXCHAR) 22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.data_ind.handle = p_cb->handle; 22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, user_data); 22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (code & PORT_EV_FC) 22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->cong = (code & PORT_EV_FCS) ? FALSE : TRUE; 22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.cong = p_pcb->cong; 22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.handle = p_cb->handle; 22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.rfc_cong.status = BTA_JV_SUCCESS; 22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, user_data); 22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 22412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (code & PORT_EV_TXEMPTY) 22422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 22432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_conn_idle(p_pcb->p_pm_cb); 22442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_add_rfc_port 22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description add a port for server when the existing posts is open 22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns return a pointer to tBTA_JV_PCB just added 22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 22569ac641d0a674333af57b85b367e64cf94dfae291Matthew Xiestatic tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb_open) 22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 used = 0, i, listen=0; 22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 si = 0; 22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tPORT_STATE port_state; 22612f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 event_mask = BTA_JV_RFC_EV_MASK; 22629ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_PCB *p_pcb = NULL; 22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->max_sess > 1) 22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22652f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta for (i=0; i < p_cb->max_sess; i++) 22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->rfc_hdl[i] != 0) 22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; 22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_pcb->state == BTA_JV_ST_SR_LISTEN) 22719ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project listen++; 22739ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if(p_pcb_open == p_pcb) 22749ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 2275e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_add_rfc_port, port_handle:%d, change the listen port to open state", 22769ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->port_handle); 22779ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->state = BTA_JV_ST_SR_OPEN; 22789ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie 22799ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 22809ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie else 22819ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie { 2282e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_add_rfc_port, open pcb not matching listen one," 22839ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie "listen count:%d, listen pcb handle:%d, open pcb:%d", 22849ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie listen, p_pcb->port_handle, p_pcb_open->handle); 22859ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return NULL; 22869ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 22879ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie } 22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project used++; 22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22909ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie else if (si == 0) 22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta si = i + 1; 22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2296e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_add_rfc_port max_sess=%d used:%d curr_sess:%d, listen:%d si:%d", 22979ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->max_sess, used, p_cb->curr_sess, listen, si); 22982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (used < p_cb->max_sess && listen == 1 && si) 22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project si--; 23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (RFCOMM_CreateConnection(p_cb->sec_id, p_cb->scn, TRUE, 23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_JV_DEF_RFC_MTU, (UINT8 *) bd_addr_any, &(p_cb->rfc_hdl[si]), bta_jv_port_mgmt_sr_cback) == PORT_SUCCESS) 23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23049ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_cb->curr_sess++; 23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[si] - 1]; 23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->state = BTA_JV_ST_SR_LISTEN; 23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->port_handle = p_cb->rfc_hdl[si]; 23089ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->user_data = p_pcb_open->user_data; 23099ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie 23109ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie PORT_ClearKeepHandleFlag(p_pcb->port_handle); 23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventCallback(p_pcb->port_handle, bta_jv_port_event_sr_cback); 23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetDataCOCallback (p_pcb->port_handle, bta_jv_port_data_co_cback); 23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventMask(p_pcb->port_handle, event_mask); 23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_GetState(p_pcb->port_handle, &port_state); 23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* coverity[uninit_use_in_call] 23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectFALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetState(p_pcb->port_handle, &port_state); 23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->handle = BTA_JV_RFC_H_S_TO_HDL(p_cb->handle, si); 2322e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_add_rfc_port: p_pcb->handle:0x%x, curr_sess:%d", 23239ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb->handle, p_cb->curr_sess); 23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 2327e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_add_rfc_port, cannot create new rfc listen port"); 23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2329e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_add_rfc_port: sec id in use:%d, rfc_cb in use:%d", 23309ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie get_sec_id_used(), get_rfc_cb_used()); 23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_pcb; 23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_start_server 23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description waits for an RFCOMM client to connect 23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_start_server(tBTA_JV_MSG *p_data) 23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle = 0; 23472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta UINT32 event_mask = BTA_JV_RFC_EV_MASK; 23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tPORT_STATE port_state; 2349689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project UINT8 sec_id = 0; 23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = NULL; 23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb; 23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_SERVER *rs = &(p_data->rfcomm_server); 23539ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_RFCOMM_START evt_data = {0}; 23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO DM role manager 23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole(rs->role); 23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 2358e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_rfcomm_start_server: sec id in use:%d, rfc_cb in use:%d", 23599ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie get_sec_id_used(), get_rfc_cb_used()); 23609ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie 23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_id = bta_jv_alloc_sec_id(); 23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (0 == sec_id || 23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetSecurityLevel(FALSE, "JV PORT", sec_id, rs->sec_mask, 23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, rs->local_scn) == FALSE) 23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2369e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, run out of sec_id"); 23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (RFCOMM_CreateConnection(sec_id, rs->local_scn, TRUE, 23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_JV_DEF_RFC_MTU, (UINT8 *) bd_addr_any, &handle, bta_jv_port_mgmt_sr_cback) != PORT_SUCCESS) 23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2376e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, RFCOMM_CreateConnection failed"); 23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23809ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie 23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); 23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!p_cb) 23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2384e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, run out of rfc control block"); 23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->max_sess = rs->max_session; 23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback = rs->p_cback; 23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->sec_id = sec_id; 23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->scn = rs->local_scn; 23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->state = BTA_JV_ST_SR_LISTEN; 23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_pcb->user_data = rs->user_data; 23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = p_cb->handle; 23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.sec_id = sec_id; 23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.use_co = TRUE; //FALSE; 23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23999ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie PORT_ClearKeepHandleFlag(handle); 24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventCallback(handle, bta_jv_port_event_sr_cback); 24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetEventMask(handle, event_mask); 24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_GetState(handle, &port_state); 24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); 24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* coverity[uninit_use_in_call] 24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectFALSE-POSITIVE: port_state is initialized at PORT_GetState() */ 24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetState(handle, &port_state); 24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (0); 24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rs->p_cback(BTA_JV_RFCOMM_START_EVT, (tBTA_JV *)&evt_data, rs->user_data); 24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(evt_data.status == BTA_JV_SUCCESS) 24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); 24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2415689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project else 2416689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project { 2417689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(sec_id) 2418689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project bta_jv_free_sec_id(&sec_id); 2419689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project if(handle) 2420689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project RFCOMM_RemoveConnection(handle); 2421689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project } 24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_stop_server 24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description stops an RFCOMM server 24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_stop_server(tBTA_JV_MSG *p_data) 24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_SERVER *ls = &(p_data->rfcomm_server); 24379ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_RFC_CB *p_cb = NULL; 24389ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie tBTA_JV_PCB *p_pcb = NULL; 2439afa6e1abbedaad8fe854b0f43999b8aeb801af91Matthew Xie APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server"); 24402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if(!ls->handle) 2441689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project { 2442e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_stop_server, jv handle is null"); 2443689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project return; 2444689d66b6559dcb3a0ad7f6cc33b6129e50910253The Android Open Source Project } 24459ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie void* user_data = ls->user_data; 24469ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie if(!find_rfc_pcb(user_data, &p_cb, &p_pcb)) 24479ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie return; 2448e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server: p_pcb:%p, p_pcb->port_handle:%d", 24499ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie p_pcb, p_pcb->port_handle); 24509ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie bta_jv_free_rfc_cb(p_cb, p_pcb); 2451e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server: sec id in use:%d, rfc_cb in use:%d", 24529ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie get_sec_id_used(), get_rfc_cb_used()); 24539ac641d0a674333af57b85b367e64cf94dfae291Matthew Xie} 24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_read 24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Read data from an RFCOMM connection 24605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_read(tBTA_JV_MSG *p_data) 24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_READ *rc = &(p_data->rfcomm_read); 24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = rc->p_cb; 24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = rc->p_pcb; 24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFCOMM_READ evt_data; 24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = p_cb->handle; 24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.req_id = rc->req_id; 24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.p_data = rc->p_data; 24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (PORT_ReadData(rc->p_pcb->port_handle, (char *)rc->p_data, rc->len, &evt_data.len) == 24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SUCCESS) 24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_READ_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); 24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_jv_rfcomm_write 24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description write data to an RFCOMM connection 24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_jv_rfcomm_write(tBTA_JV_MSG *p_data) 24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_API_RFCOMM_WRITE *wc = &(p_data->rfcomm_write); 24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFC_CB *p_cb = wc->p_cb; 24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_PCB *p_pcb = wc->p_pcb; 24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_JV_RFCOMM_WRITE evt_data; 24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_FAILURE; 25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.handle = p_cb->handle; 25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.req_id = wc->req_id; 25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.cong = p_pcb->cong; 25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.len = 0; 25052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_conn_busy(p_pcb->p_pm_cb); 25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!evt_data.cong && 25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_WriteDataCO(p_pcb->port_handle, &evt_data.len) == 25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PORT_SUCCESS) 25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.status = BTA_JV_SUCCESS; 25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //update congestion flag 25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt_data.cong = p_pcb->cong; 25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->p_cback) 25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->p_cback(BTA_JV_RFCOMM_WRITE_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); 25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2520e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_jv_rfcomm_write :: WARNING ! No JV callback set"); 25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25242f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 25252f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_set_pm_profile 25272f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25282f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description Set or free power mode profile for a JV application 25292f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25302f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns void 25312f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 25332f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battavoid bta_jv_set_pm_profile(tBTA_JV_MSG *p_data) 25342f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 25352f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_STATUS status; 25362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_PM_CB *p_cb; 25372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2538e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_set_pm_profile(handle: 0x%x, app_id: %d, init_st: %d)", 25392f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_data->set_pm.handle, p_data->set_pm.app_id, p_data->set_pm.init_st); 25402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta /* clear PM control block */ 25422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_data->set_pm.app_id == BTA_JV_PM_ID_CLEAR) 25432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 25442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = bta_jv_free_set_pm_profile_cb(p_data->set_pm.handle); 25452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (status != BTA_JV_SUCCESS) 25472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 2548e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_set_pm_profile() free pm cb failed: reason %d", 25492f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status); 25502f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 25512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 25522f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else /* set PM control block */ 25532f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 25542f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb = bta_jv_alloc_set_pm_profile_cb(p_data->set_pm.handle, 25552f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_data->set_pm.app_id); 25562f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25572f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (NULL != p_cb) 25582f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_state_change(p_cb, p_data->set_pm.init_st); 25592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta else 2560e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_alloc_set_pm_profile_cb() failed"); 25612f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 25622f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 25632f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25642f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 25652f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25662f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_change_pm_state 25672f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25682f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description change jv pm connect state, used internally 25692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25702f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns void 25712f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25722f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 25732f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battavoid bta_jv_change_pm_state(tBTA_JV_MSG *p_data) 25742f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 25752f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_API_PM_STATE_CHANGE *p_msg = (tBTA_JV_API_PM_STATE_CHANGE *)p_data; 25762f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25772f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (p_msg->p_cb) 25782f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_state_change(p_msg->p_cb, p_msg->state); 25792f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 25802f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25812f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 25822f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 25832f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25842f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_set_pm_conn_state 25852f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25862f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description Send pm event state change to jv state machine to serialize jv pm changes 25872f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** in relation to other jv messages. internal API use mainly. 25882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25892f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Params: p_cb: jv pm control block, NULL pointer returns failure 25902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** new_state: new PM connections state, setting is forced by action function 25912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns BTA_JV_SUCCESS, BTA_JV_FAILURE (buffer allocation, or NULL ptr!) 25932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 25942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 25952f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi BattatBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE 25962f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta new_st) 25972f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 25982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_STATUS status = BTA_JV_FAILURE; 25992f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta tBTA_JV_API_PM_STATE_CHANGE *p_msg; 26002f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if (NULL == p_cb) 26022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return status; 26032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 2604e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_set_pm_conn_state(handle:0x%x, state: %d)", p_cb->handle, 26052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta new_st); 26062f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((p_msg = (tBTA_JV_API_PM_STATE_CHANGE *)GKI_getbuf( 26072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta sizeof(tBTA_JV_API_PM_STATE_CHANGE))) != NULL) 26082f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 26092f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_msg->hdr.event = BTA_JV_API_PM_STATE_CHANGE_EVT; 26102f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_msg->p_cb = p_cb; 26112f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_msg->state = new_st; 26122f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_sendmsg(p_msg); 26132f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta status = BTA_JV_SUCCESS; 26142f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 26152f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta return (status); 26162f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 26172f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26182f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 26192f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26202f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_pm_conn_busy 26212f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26222f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description set pm connection busy state (input param safe) 26232f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26242f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Params p_cb: pm control block of jv connection 26252f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26262f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns void 26272f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26282f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 26292f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_conn_busy(tBTA_JV_PM_CB *p_cb) 26302f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 26312f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST == p_cb->state)) 26322f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_state_change(p_cb, BTA_JV_CONN_BUSY); 26332f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 26342f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26352f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 26362f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26372f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_pm_conn_busy 26382f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26392f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description set pm connection busy state (input param safe) 26402f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26412f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Params p_cb: pm control block of jv connection 26422f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26432f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns void 26442f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26452f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 26462f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_conn_idle(tBTA_JV_PM_CB *p_cb) 26472f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 26482f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST != p_cb->state)) 26492f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_jv_pm_state_change(p_cb, BTA_JV_CONN_IDLE); 26502f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 26512f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26522f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta/******************************************************************************* 26532f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26542f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Function bta_jv_pm_state_change 26552f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26562f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Description Notify power manager there is state change 26572f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26582f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Params p_cb: must be NONE NULL 26592f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26602f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** Returns void 26612f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ** 26622f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta *******************************************************************************/ 26632f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Battastatic void bta_jv_pm_state_change(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE state) 26642f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta{ 2665e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("bta_jv_pm_state_change(p_cb: 0x%x, handle: 0x%x, busy/idle_state: %d" 26662f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta ", app_id: %d, conn_state: %d)", p_cb, p_cb->handle, p_cb->state, 26672f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb->app_id, state); 26682f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26692f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta switch (state) 26702f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta { 26712f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_CONN_OPEN: 26722f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_conn_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26732f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26742f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26752f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_CONN_CLOSE: 26762f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_conn_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26772f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26782f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26792f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_APP_OPEN: 26802f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_app_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26812f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26822f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26832f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_APP_CLOSE: 26842f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_app_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26852f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26862f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26872f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_SCO_OPEN: 26882f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_sco_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26892f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26902f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26912f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_SCO_CLOSE: 26922f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_sco_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26932f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26942f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 26952f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_CONN_IDLE: 26962f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb->state = BTA_JV_PM_IDLE_ST; 26972f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_idle(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 26982f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 26992f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 27002f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta case BTA_JV_CONN_BUSY: 27012f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta p_cb->state = BTA_JV_PM_BUSY_ST; 27022f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta bta_sys_busy(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); 27032f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 27042f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta 27052f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta default: 2706e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("bta_jv_pm_state_change(state: %d): Invalid state", state); 27072f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta break; 27082f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta } 27092f338f25530d2aaab7acf45701c271d10b81d96dGanesh Ganapathi Batta} 2710