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