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