15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2009-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Filename:      btif_hl.c
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Description:   Health Device Profile Bluetooth Interface
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ***********************************************************************************/
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define LOG_TAG "BTIF_HL"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h>
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h>
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <errno.h>
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/types.h>
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/socket.h>
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/un.h>
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <time.h>
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <fcntl.h>
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <unistd.h>
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <pthread.h>
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <signal.h>
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <ctype.h>
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/select.h>
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/poll.h>
445e17049abe2158303a9423439f324d1a24d68b87Elliott Hughes#include <sys/prctl.h>
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/sockets.h>
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/log.h>
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h>
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hl.h>
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_common.h"
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_util.h"
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_api.h"
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_api.h"
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_hl.h"
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_storage.h"
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
62f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera#define MAX_DATATYPE_SUPPORTED 8
63f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_soc_thread_init(void);
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx);
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t btif_hl_cb;
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t *p_btif_hl_cb = &btif_hl_cb;
77f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static variables
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t  bt_hl_callbacks_cb;
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t *bt_hl_callbacks=NULL;
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* signal socketpair to wake up select loop */
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_wakeup = 1;
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_exit = 2;
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_close_connected = 3;
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int listen_s = -1;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int connected_s = -1;
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int select_thread_id = -1;
93bf0ce82611b5133d61a0e544ec5bf53b567edfe7git-zhenye.broadcom.comstatic int signal_fds[2] = { -1, -1 };
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BUFFER_Q soc_queue;
95f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic int reg_counter;
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void);
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_close_connected(void);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_close_select_thread(void);
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_next_app_id(void);
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_hl_get_next_channel_id(UINT8 app_id);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_app_id(void);
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_channel_id(void);
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_ctrl_cback(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_set_state(btif_hl_state_t state);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_hl_state_t btif_hl_get_state(void);
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_cback(tBTA_HL_EVT event, tBTA_HL *p_data);
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cb_evt(UINT16 event, char* p_param);
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define CHECK_CALL_CBACK(P_CB, P_CBACK, ...)\
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (P_CB && P_CB->P_CBACK) {            \
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        P_CB->P_CBACK(__VA_ARGS__);         \
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }                                       \
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else {                                  \
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(0, "Callback is NULL", 0);  \
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_CALL_CBACK(P_CB, P_CBACK, ...)\
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     if((p_btif_hl_cb->state != BTIF_HL_STATE_DISABLING) &&\
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         (p_btif_hl_cb->state != BTIF_HL_STATE_DISABLED))  \
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     {                                                     \
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (P_CB && P_CB->P_CBACK) {                       \
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            P_CB->P_CBACK(__VA_ARGS__);                    \
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }                                                  \
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else {                                             \
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ASSERTC(0, "Callback is NULL", 0);             \
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }                                                  \
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define CHECK_BTHL_INIT() if (bt_hl_callbacks == NULL)\
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {\
134e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("BTHL: %s: BTHL not initialized", __FUNCTION__);\
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BT_STATUS_NOT_READY;\
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }\
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else\
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {\
139e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_EVENT("BTHL: %s", __FUNCTION__);\
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const btif_hl_data_type_cfg_t data_type_table[] = {
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Data Specilization                   Ntx     Nrx (from Bluetooth SIG's HDP whitepaper)*/
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_PULSE_OXIMETER,      9216,   256},
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BLOOD_PRESSURE_MON,  896,    224},
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BODY_THERMOMETER,    896,    224},
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BODY_WEIGHT_SCALE,   896,    224},
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_GLUCOSE_METER,       896,    224},
150c8a9f438cd994a7e69aa7fa957e0b9139bfdb912Priti Aghera    {BTIF_HL_DATA_TYPE_STEP_COUNTER,        6624,   224},
151c8a9f438cd994a7e69aa7fa957e0b9139bfdb912Priti Aghera    {BTIF_HL_DATA_TYPE_BCA,                 7730,   1230},
152c8a9f438cd994a7e69aa7fa957e0b9139bfdb912Priti Aghera    {BTIF_HL_DATA_TYPE_PEAK_FLOW    ,       2030,   224},
153c8a9f438cd994a7e69aa7fa957e0b9139bfdb912Priti Aghera    {BTIF_HL_DATA_TYPE_ACTIVITY_HUB,        5120,   224},
154c8a9f438cd994a7e69aa7fa957e0b9139bfdb912Priti Aghera    {BTIF_HL_DATA_TYPE_AMM,                 1024,   64}
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DATA_TABLE_SIZE  (sizeof(data_type_table) / sizeof(btif_hl_data_type_cfg_t))
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE   10240 /* use this size if the data type is not
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    defined in the table; for future proof */
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE   512  /* use this size if the data type is not
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   defined in the table; for future proof */
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE 1024
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static utility functions
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_IF_GET_NAME 16
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_display_calling_process_name(void)
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char name[16];
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    prctl(BTIF_IF_GET_NAME, name, 0, 0, 0);
174e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("Process name (%s)", name);
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
176f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera#define BTIF_TIMEOUT_CCH_NO_DCH_SECS   30
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_if_channel_setup_pending
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   check whether channel id is in setup pending state or not
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_if_channel_setup_pending(int channel_id, UINT8 *p_app_idx, UINT8 *p_mcl_idx)
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb;
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i, j;
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
192bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie
193bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
194bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mcl_idx = 0;
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  =BTIF_HL_GET_APP_CB_PTR(i);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_acb->in_use)
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (j=0; j< BTA_HL_NUM_MCLS; j++)
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(i, j);
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->in_use &&
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->is_connected && p_mcb->pcb.channel_id == channel_id )
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx = j;
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (found)
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
216e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d channel_id=0x%08x",
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, found, channel_id, *p_app_idx, *p_mcl_idx);
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_num_dchs_in_use
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description find number of DCHs in use
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT8
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
229f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraUINT8 btif_hl_num_dchs_in_use(UINT8 mcl_handle){
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
231f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t    * p_acb;
232f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t    *p_mcb;
233f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               i,j,x;
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               cnt=0;
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
236f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
238e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_num_dchs:i = %d",i);
239f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
240f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_acb && p_acb->in_use)
241f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
242f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            for (j=0; j < BTA_HL_NUM_MCLS ; j++)
243f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
244f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if(p_acb->mcb[j].in_use)
245e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_num_dchs:mcb in use j=%d, mcl_handle=%d,mcb handle=%d",
246f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        j,mcl_handle, p_acb->mcb[j].mcl_handle);
247f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (p_acb->mcb[j].in_use &&
248f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    (p_acb->mcb[j].mcl_handle == mcl_handle))
249f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
250f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = &p_acb->mcb[j];
251e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_num_dchs: mcl handle found j =%d",j);
252f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    for (x=0; x < BTA_HL_NUM_MDLS_PER_MCL ; x ++)
253f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
254f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        if (p_mcb->mdl[x].in_use)
255f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
256e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("btif_hl_num_dchs_in_use:found x =%d",x);
257f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            cnt++;
258f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
259f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
260f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
261f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
262f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
264f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
265e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s dch in use count=%d", __FUNCTION__, cnt);
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return cnt;
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_tmr_hdlr
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process timer timeout
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_tmr_hdlr(TIMER_LIST_ENT *tle)
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb;
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i,j;
280e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s timer_in_use=%d",  __FUNCTION__, tle->in_use );
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MCLS; j++)
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->cch_timer_active)
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
290e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("%app_idx=%d, mcl_idx=%d mcl-connected=%d",
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  i, j,  p_mcb->is_connected);
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->cch_timer_active = FALSE;
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->is_connected)
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
295e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("Idle timeout Close CCH app_idx=%d mcl_idx=%d mcl_handle=%d",
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      i ,j, p_mcb->mcl_handle);
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTA_HlCchClose(p_mcb->mcl_handle);
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
301e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("CCH idle timeout But CCH not connected app_idx=%d mcl_idx=%d ",i,j);
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_stop_cch_timer
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  stop CCH timer
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_stop_cch_timer(UINT8 app_idx, UINT8 mcl_idx)
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
318e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d, mcl_idx=%d timer_in_use=%d",
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,app_idx, mcl_idx, p_mcb->cch_timer.in_use);
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb->cch_timer_active = FALSE;
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_mcb->cch_timer.in_use)
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
324e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("stop CCH timer ");
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_stop_timer(&p_mcb->cch_timer);
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_start_cch_timer
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  start CCH timer
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_start_cch_timer(UINT8 app_idx, UINT8 mcl_idx)
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
339e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d, mcl_idx=%d  timer_active=%d timer_in_use=%d",
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,app_idx, mcl_idx,
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_mcb->cch_timer_active, p_mcb->cch_timer.in_use);
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb->cch_timer_active = TRUE;
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_mcb->cch_timer.in_use)
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
346e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("Start CCH timer ");
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&p_mcb->cch_timer, 0, sizeof(TIMER_LIST_ENT));
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb->cch_timer.param = (UINT32)btif_hl_tmr_hdlr;
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_start_timer(&p_mcb->cch_timer, BTU_TTYPE_USER_FUNC,
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TIMEOUT_CCH_NO_DCH_SECS);
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
354e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("Restart CCH timer ");
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_stop_timer(&p_mcb->cch_timer);
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_start_timer(&p_mcb->cch_timer, BTU_TTYPE_USER_FUNC,
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TIMEOUT_CCH_NO_DCH_SECS);
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using MDL ID
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_mdl_idx(UINT8 app_idx, UINT8 mcl_idx, UINT16 mdl_id,
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT8 *p_mdl_idx)
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb  = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->mdl[i].in_use  &&
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (mdl_id !=0) &&
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (p_mcb->mdl[i].mdl_id== mdl_id))
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdl_idx = i;
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
389e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d mdl_id=%d mdl_idx=%d ",
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found, mdl_id, i);
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_get_buf
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   get buffer
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     void
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid * btif_hl_get_buf(UINT16 size)
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    void *p_new;
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
408e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
409e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("ret size=%d GKI_MAX_BUF_SIZE=%d",size, 6000);
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (size < 6000)
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_new = GKI_getbuf(size);
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
417e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_get_buf use HL large data pool");
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_new = GKI_getpoolbuf(4);
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_new;
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_free_buf
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free buffer
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Return void
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_free_buf(void **p)
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p != NULL)
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
436e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("%s OK", __FUNCTION__ );
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(*p);
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p = NULL;
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
441e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_ERROR("%s NULL pointer",__FUNCTION__ );
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_the_first_reliable_existed
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function checks whether the first reliable DCH channel
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              has been setup on the MCL or not
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN - TRUE exist
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                        FALSE does not exist
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_is_the_first_reliable_existed(UINT8 app_idx, UINT8 mcl_idx )
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t          *p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN is_existed =FALSE;
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i ;
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< BTA_HL_NUM_MDLS_PER_MCL; i++)
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->mdl[i].in_use && p_mcb->mdl[i].is_the_first_reliable)
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            is_existed = TRUE;
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
469e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("bta_hl_is_the_first_reliable_existed is_existed=%d  ",is_existed );
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return is_existed;
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_delete_mdl
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the delete mdl control block
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_delete_mdl(btif_hl_delete_mdl_t *p_cb)
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
483e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_cb, 0 , sizeof(btif_hl_delete_mdl_t));
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_pcb
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the pending chan control block
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_pcb(btif_hl_pending_chan_cb_t *p_pcb)
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
498e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_pcb, 0 , sizeof(btif_hl_pending_chan_cb_t));
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_mdl_cb
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the MDL control block
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_mdl_cb(btif_hl_mdl_cb_t *p_dcb)
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
514e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_free_buf((void **) &p_dcb->p_rx_pkt);
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_dcb, 0 , sizeof(btif_hl_mdl_cb_t));
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_reset_mcb
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Reset MCL control block
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_mcl_cb(UINT8 app_idx, UINT8 mcl_idx)
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
533e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d, mcl_idx=%d", __FUNCTION__,app_idx, mcl_idx);
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_mcb, 0, sizeof(btif_hl_mcl_cb_t));
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_sdp_idx_using_mdep_filter
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function finds the SDP record index using MDEP filter parameters
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_reset_mdep_filter(UINT8 app_idx)
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->filter.num_elems = 0;
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_sdp_idx_using_mdep_filter
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function finds the SDP record index using MDEP filter parameters
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_sdp_idx_using_mdep_filter(UINT8 app_idx, UINT8 mcl_idx, UINT8 *p_sdp_idx)
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t          *p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   i, j, num_recs,num_elems, num_mdeps, mdep_cnt, mdep_idx;
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ROLE       peer_mdep_role;
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16                  data_type;
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP_MDEP_CFG    *p_mdep;
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 found = FALSE;
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 elem_found;
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
574e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_find_sdp_idx_using_mdep_filter");
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_recs = p_mcb->sdp.num_recs;
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_elems = p_acb->filter.num_elems;
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!num_elems)
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
579e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_find_sdp_idx_using_mdep_filter num_elem=0");
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p_sdp_idx = 0;
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        found = TRUE;
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return found;
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<num_recs; i++)
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_mdeps = p_mcb->sdp.sdp_rec[i].num_mdeps;
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j<num_elems; j++ )
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = p_acb->filter.elem[j].data_type;
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            peer_mdep_role = p_acb->filter.elem[j].peer_mdep_role;
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            elem_found = FALSE;
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdep_cnt =0;
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdep_idx=0;
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            while (!elem_found && mdep_idx < num_mdeps )
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdep = &(p_mcb->sdp.sdp_rec[i].mdep_cfg[mdep_idx]);
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( (p_mdep->data_type == data_type) &&
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     (p_mdep->mdep_role == peer_mdep_role) )
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    elem_found = TRUE;
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdep_idx++;
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!elem_found)
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = FALSE;
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (found)
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
622e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("btif_hl_find_sdp_idx_using_mdep_filter found idx=%d",i);
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_sdp_idx = i;
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
628e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d sdp_idx=%d",__FUNCTION__ , found, *p_sdp_idx);
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_reset_mdep_filter(app_idx);
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_reconnect_possible
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  check reconnect is possible or not
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_is_reconnect_possible(UINT8 app_idx, UINT8 mcl_idx,  int mdep_cfg_idx,
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      tBTA_HL_DCH_OPEN_PARAM *p_dch_open_api, tBTA_HL_MDL_ID *p_mdl_id)
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CFG      local_cfg = p_dch_open_api->local_cfg;
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_MODE     dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              use_mdl_dch_mode=FALSE;
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t    *p_mdl;
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t    *p_mdl1;
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                i, j;
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              is_reconnect_ok=FALSE;
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              stream_mode_avail=FALSE;
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16               data_type = p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ID      peer_mdep_id = p_dch_open_api->peer_mdep_id;
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                mdl_idx;
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
661e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d mcl_idx=%d mdep_cfg_idx=%d",
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_idx, mcl_idx, mdep_cfg_idx  );
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (local_cfg)
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_NO_PREF:
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx))
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                use_mdl_dch_mode = TRUE;
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_RELIABLE:
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_STREAMING:
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            dch_mode = BTA_HL_DCH_MODE_STREAMING;
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
682e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_ERROR("Invalid local_cfg=%d",local_cfg );
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return is_reconnect_ok;
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
688e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("local_cfg=%d use_mdl_dch_mode=%d dch_mode=%d ",
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      local_cfg, use_mdl_dch_mode, dch_mode  );
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0, p_mdl=&p_acb->mdl_cfg[0] ; i< BTA_HL_NUM_MDL_CFGS; i++, p_mdl++ )
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mdl->base.active &&
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl->extra.data_type ==data_type &&
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (p_mdl->extra.peer_mdep_id != BTA_HL_INVALID_MDEP_ID && p_mdl->extra.peer_mdep_id == peer_mdep_id) &&
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_mdl->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR) ) &&
6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl->base.mdl_id &&
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            !btif_hl_find_mdl_idx(app_idx, mcl_idx,p_mdl->base.mdl_id, &mdl_idx))
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
700e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("i=%d Matched active=%d   mdl_id =%d, mdl_dch_mode=%d",
701f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              i, p_mdl->base.active, p_mdl->base.mdl_id,p_mdl->base.dch_mode);
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!use_mdl_dch_mode)
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mdl->base.dch_mode == dch_mode)
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    is_reconnect_ok = TRUE;
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl->base.mdl_id;
708e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("reconnect is possible dch_mode=%d mdl_id=%d", dch_mode, p_mdl->base.mdl_id );
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                is_reconnect_ok = TRUE;
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (j=i, p_mdl1=&p_acb->mdl_cfg[i]; j< BTA_HL_NUM_MDL_CFGS; j++, p_mdl1++)
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mdl1->base.active &&
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mdl1->extra.data_type == data_type &&
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (p_mdl1->extra.peer_mdep_id != BTA_HL_INVALID_MDEP_ID && p_mdl1->extra.peer_mdep_id == peer_mdep_id) &&
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(p_mdl1->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR)) &&
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mdl1->base.dch_mode == BTA_HL_DCH_MODE_STREAMING)
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        stream_mode_avail = TRUE;
724e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("found streaming mode mdl index=%d", j);
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (stream_mode_avail)
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_mode = BTA_HL_DCH_MODE_STREAMING;
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl1->base.mdl_id;
733e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("reconnect is ok index=%d dch_mode=streaming  mdl_id=%d", j, *p_mdl_id);
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_mode= p_mdl->base.dch_mode;
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl->base.mdl_id;
740e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("reconnect is ok index=%d  dch_mode=%d mdl_id=%d", i,  p_mdl->base.dch_mode, *p_mdl_id);
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
750e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("is_reconnect_ok  dch_mode=%d mdl_id=%d",is_reconnect_ok, dch_mode, *p_mdl_id);
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return is_reconnect_ok;
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_dch_open
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process DCH open request using the DCH Open API parameters
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_dch_open(UINT8 app_id, BD_ADDR bd_addr,
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         tBTA_HL_DCH_OPEN_PARAM *p_dch_open_api,
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         int mdep_cfg_idx,
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         btif_hl_pend_dch_op_t op, int *channel_id){
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx, mcl_idx;
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = FALSE;
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_ID              mdl_id;
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_RECONNECT_PARAM reconnect_param;
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
775e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_id=%d ",
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id );
777e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],bd_addr[2],  bd_addr[3], bd_addr[4],  bd_addr[5]);
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bd_addr , &mcl_idx))
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_pcb->in_use)
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->req_ctrl_psm = p_dch_open_api->ctrl_psm;
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->in_use = TRUE;
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *channel_id       =
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->channel_id =  (int) btif_hl_get_next_channel_id(app_id);
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING;
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->mdep_cfg_idx = mdep_cfg_idx;
796f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                memcpy(p_pcb->bd_addr, bd_addr, sizeof(BD_ADDR));
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->op = op;
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->sdp.num_recs)
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mcb->valid_sdp_idx)
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_dch_open_api->ctrl_psm  = p_mcb->ctrl_psm;
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (!btif_hl_is_reconnect_possible(app_idx, mcl_idx, mdep_cfg_idx, p_dch_open_api, &mdl_id ))
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
809e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("Issue DCH open" );
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDchOpen(p_mcb->mcl_handle, p_dch_open_api);
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reconnect_param.ctrl_psm = p_mcb->ctrl_psm;
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reconnect_param.mdl_id = mdl_id;;
816e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("Issue Reconnect ctrl_psm=0x%x mdl_id=0x%x",reconnect_param.ctrl_psm, reconnect_param.mdl_id   );
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDchReconnect(p_mcb->mcl_handle, &reconnect_param);
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper = BTIF_HL_CCH_OP_DCH_OPEN;
826f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlSdpQuery(app_id,p_acb->app_handle, bd_addr);
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
833e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("status=%d ", status);
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_copy_bda
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  copy bt_bdaddr_t to BD_ADDR format
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_copy_bda(bt_bdaddr_t *bd_addr, BD_ADDR  bda){
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<6; i++)
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bd_addr->address[i] = bda[i] ;
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_copy_bda
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  display bt_bdaddr_t
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_display_bt_bda(bt_bdaddr_t *bd_addr){
862e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr->address[0],   bd_addr->address[1], bd_addr->address[2],
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr->address[3],  bd_addr->address[4],   bd_addr->address[5]);
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_dch_abort
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process DCH abort request
8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid  btif_hl_dch_abort(UINT8 app_idx, UINT8 mcl_idx){
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
879e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d mcl_idx=%d",__FUNCTION__, app_idx, mcl_idx );
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_mcb->is_connected)
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchAbort(p_mcb->mcl_handle);
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb->pcb.abort_pending = TRUE;
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_cch_open
8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process CCH open request
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_cch_open(UINT8 app_id, BD_ADDR bd_addr, UINT16 ctrl_psm,
9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         int mdep_cfg_idx,
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         btif_hl_pend_dch_op_t op, int *channel_id){
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx, mcl_idx, chan_idx;
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = TRUE;
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
910e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_id=%d ctrl_psm=%d mdep_cfg_idx=%d op=%d",
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id, ctrl_psm, mdep_cfg_idx, op);
912e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],bd_addr[2],  bd_addr[3], bd_addr[4],  bd_addr[5]);
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx))
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_avail_mcl_idx(app_idx, &mcl_idx))
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_mcb,0, sizeof(btif_hl_mcl_cb_t));
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->in_use = TRUE;
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy(p_mcb->bd_addr, bd_addr);
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!ctrl_psm)
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper = BTIF_HL_CCH_OP_MDEP_FILTERING;
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper        = BTIF_HL_CCH_OP_MATCHED_CTRL_PSM;
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->req_ctrl_psm    = ctrl_psm;
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->in_use = TRUE;
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->mdep_cfg_idx = mdep_cfg_idx;
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_pcb->bd_addr, bd_addr, sizeof(BD_ADDR));
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->op = op;
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                switch (op)
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    case BTIF_HL_PEND_DCH_OP_OPEN:
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *channel_id       =
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->channel_id =  (int) btif_hl_get_next_channel_id(app_id);
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING;
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->channel_id =  p_acb->delete_mdl.channel_id;
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_DESTROYED_PENDING;
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    default:
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
958f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTA_HlSdpQuery(app_id,p_acb->app_handle, bd_addr);
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
963e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("Open CCH request discarded- No mcl cb");
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
969e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_ERROR("Open CCH request discarded- already in USE");
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = FALSE;
975e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_ERROR("Invalid app_id=%d", app_id);
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (channel_id)
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
980e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("status=%d channel_id=0x%08x", status, *channel_id);
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
984e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("status=%d ", status);
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using channel id
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_cfg_idx_using_channel_id(int channel_id,
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  UINT8 *p_app_idx,
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  UINT8 *p_mdl_cfg_idx){
10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j;
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int mdl_cfg_channel_id;
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1008bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
1009bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mdl_cfg_idx =0;
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MDL_CFGS; j++)
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl =BTIF_HL_GET_MDL_CFG_PTR(i,j);
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdl_cfg_channel_id = *(BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(i,j));
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->in_use &&
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl->base.active &&
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (mdl_cfg_channel_id == channel_id))
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_app_idx = i;
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_mdl_cfg_idx =j;
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1029e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s found=%d channel_id=0x%08x, app_idx=%d mdl_cfg_idx=%d  ",
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,channel_id, i,j );
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using channel id
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_idx_using_channel_id(int channel_id,
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              UINT8 *p_app_idx,UINT8 *p_mcl_idx,
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              UINT8 *p_mdl_idx){
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb;
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j,k;
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MCLS; j++)
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (k=0; k< BTA_HL_NUM_MDLS_PER_MCL; k++)
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb =BTIF_HL_GET_MDL_CB_PTR(i,j,k);
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_acb->in_use &&
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->in_use &&
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->in_use &&
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (p_dcb->channel_id == channel_id))
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx =j;
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_idx = k;
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1074e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d mcl_idx=%d mdl_idx=%d  ",
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,i,j,k );
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_channel_id_using_mdl_id
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find channel id using mdl_id'
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*********************************************************************************/
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_channel_id_using_mdl_id(UINT8 app_idx, tBTA_HL_MDL_ID mdl_id,
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                            int *p_channel_id){
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 j=0;
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int mdl_cfg_channel_id;
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_acb && p_acb->in_use)
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (j=0; j< BTA_HL_NUM_MDL_CFGS; j++)
10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mdl =BTIF_HL_GET_MDL_CFG_PTR(app_idx,j);
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdl_cfg_channel_id = *(BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx,j));
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( p_mdl->base.active && (p_mdl->base.mdl_id == mdl_id))
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            found = TRUE;
11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            *p_channel_id = mdl_cfg_channel_id;
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1109e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s found=%d channel_id=0x%08x, mdl_id=0x%x app_idx=%d mdl_cfg_idx=%d  ",
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    __FUNCTION__,found,*p_channel_id,mdl_id, app_idx,j );
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using handle
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_app_idx,UINT8 *p_mcl_idx,
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_mdl_idx){
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb;
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j,k;
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1133bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
1134bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mcl_idx =0;
1135bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mdl_idx = 0;
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MCLS; j++)
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (k=0; k< BTA_HL_NUM_MDLS_PER_MCL; k++)
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb =BTIF_HL_GET_MDL_CB_PTR(i,j,k);
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_acb->in_use &&
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->in_use &&
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->in_use &&
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (p_dcb->mdl_handle == mdl_handle))
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx =j;
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_idx = k;
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1161e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s found=%d app_idx=%d mcl_idx=%d mdl_idx=%d  ",
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,i,j,k );
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function        btif_hl_find_peer_mdep_id
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Find the peer MDEP ID from the received SPD records
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_peer_mdep_id(UINT8 app_id, BD_ADDR bd_addr,
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_HL_MDEP_ROLE local_mdep_role,
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         UINT16 data_type,
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_HL_MDEP_ID *p_peer_mdep_id){
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx, mcl_idx;
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb;
11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP_REC     *p_rec;
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i, num_mdeps;
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             found = FALSE;
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ROLE   peer_mdep_role;
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1187e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_id=%d local_mdep_role=%d, data_type=%d",
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id, local_mdep_role, data_type);
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1190e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],
11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[2],  bd_addr[3],
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[4],  bd_addr[5]);
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1196e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("local_mdep_role=%d", local_mdep_role);
1197e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("data_type=%d", data_type);
11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (local_mdep_role == BTA_HL_MDEP_ROLE_SINK)
12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx) )
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx))
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1211e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d",app_idx, mcl_idx);
1212e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("valid_spd_idx=%d sdp_idx=%d",p_mcb->valid_sdp_idx, p_mcb->sdp_idx);
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->valid_sdp_idx)
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_rec = &p_mcb->sdp.sdp_rec[p_mcb->sdp_idx];
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_mdeps = p_rec->num_mdeps;
1217e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("num_mdeps=%d", num_mdeps);
12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i< num_mdeps; i++)
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
1221e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("p_rec->mdep_cfg[%d].mdep_role=%d",i, p_rec->mdep_cfg[i].mdep_role);
1222e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("p_rec->mdep_cfg[%d].data_type =%d",i, p_rec->mdep_cfg[i].data_type );
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_rec->mdep_cfg[i].mdep_role == peer_mdep_role) &&
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (p_rec->mdep_cfg[i].data_type == data_type))
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        found = TRUE;
12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_peer_mdep_id = p_rec->mdep_cfg[i].mdep_id;
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1235e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("found =%d  *p_peer_mdep_id=%d", found,  *p_peer_mdep_id);
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdep_cfg_idx
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDEP configuration index using local MDEP_ID
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic  BOOLEAN btif_hl_find_mdep_cfg_idx(UINT8 app_idx,  tBTA_HL_MDEP_ID local_mdep_id,
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_mdep_cfg_idx){
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE     *p_sup_feature= &p_acb->sup_feature;
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found =FALSE;
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< p_sup_feature->num_of_mdeps; i++)
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1258e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_find_mdep_cfg_idx: mdep_id=%d app_idx = %d",
1259f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_sup_feature->mdep[i].mdep_id,app_idx);
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( p_sup_feature->mdep[i].mdep_id == local_mdep_id)
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdep_cfg_idx = i;
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1268e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d mdep_idx=%d local_mdep_id=%d app_idx=%d ",
1269f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found,i, local_mdep_id,app_idx);
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using BD address
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx(UINT8 app_idx, BD_ADDR p_bd_addr, UINT8 *p_mcl_idx){
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t  *p_mcb;
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1290bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mcl_idx = 0;
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, i);
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->in_use &&
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (!memcmp (p_mcb->bd_addr, p_bd_addr, BD_ADDR_LEN)))
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mcl_idx = i;
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1304e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d idx=%d",__FUNCTION__, found, i);
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_init
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL initialization function.
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init(void){
1317e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_app_id();
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_channel_id();
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_disable
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Disable initialization function.
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_disable(void){
1332e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_btif_hl_cb->state != BTIF_HL_STATE_DISABLING) &&
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_btif_hl_cb->state != BTIF_HL_STATE_DISABLED))
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_DISABLING);
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDisable();
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_no_active_app
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find whether or not  any APP is still in use
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_is_no_active_app(void){
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN no_active_app = TRUE;
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use)
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            no_active_app = FALSE;
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1363e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s no_active_app=%d  ", __FUNCTION__, no_active_app );
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return no_active_app;
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_free_app_idx
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free an application control block
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_free_app_idx(UINT8 app_idx){
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((app_idx < BTA_HL_NUM_APPS) && btif_hl_cb.acb[app_idx].in_use )
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_cb.acb[app_idx].in_use = FALSE;
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset (&btif_hl_cb.acb[app_idx], 0, sizeof(btif_hl_app_cb_t));
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set HL state
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_set_state(btif_hl_state_t state){
1394e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_set_state:  %d ---> %d ", p_btif_hl_cb->state, state);
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_btif_hl_cb->state = state;
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get HL state
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      btif_hl_state_t
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_hl_state_t btif_hl_get_state(void){
1409e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_get_state:  %d   ", p_btif_hl_cb->state);
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_btif_hl_cb->state;
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_data_type_idx
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the index in the data type table
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN  btif_hl_find_data_type_idx(UINT16 data_type, UINT8 *p_idx){
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< BTIF_HL_DATA_TABLE_SIZE; i++ )
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_type_table[i].data_type == data_type)
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_idx= i;
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1436e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d, data_type=0x%x idx=%d", __FUNCTION__, found, data_type, i);
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_get_max_tx_apdu_size
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum TX APDU size for the specified data type and
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_tx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 idx;
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_tx_apdu_size =0;
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_tx_apdu_size;
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_rx_apdu_size;
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1480e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s mdep_role=%d data_type=0x%4x size=%d",
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_tx_apdu_size);
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_tx_apdu_size;
14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_get_max_rx_apdu_size
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum RX APDU size for the specified data type and
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_rx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  idx;
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_rx_apdu_size =0;
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_rx_apdu_size;
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_tx_apdu_size;
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s mdep_role=%d data_type=0x%4x size=%d",
15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_rx_apdu_size);
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_rx_apdu_size;
15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_if_channel_setup_pending
15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_mdep_role(bthl_mdep_role_t mdep, tBTA_HL_MDEP_ROLE *p){
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (mdep)
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SOURCE:
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SOURCE;
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SINK:
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SINK;
15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
1552bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie            *p = BTA_HL_MDEP_ROLE_SOURCE;
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1557e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s status=%d bta_mdep_role=%d (%d:btif)",
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p, mdep);
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_bta_channel_type
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description convert bthl channel type to BTA DCH channel type
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_channel_type(bthl_channel_type_t channel_type, tBTA_HL_DCH_CFG *p){
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (channel_type)
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_RELIABLE:
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_RELIABLE;
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_STREAMING:
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_STREAMING;
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_ANY:
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_NO_PREF;
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1588e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s status = %d BTA DCH CFG=%d (1-rel 2-strm",
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p);
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_app_id
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next applcation id
15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_next_app_id(){
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 next_app_id = btif_hl_cb.next_app_id;
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id++;
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return next_app_id;
16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_channel_id
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next channel id
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_hl_get_next_channel_id(UINT8 app_id){
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 next_channel_id = btif_hl_cb.next_channel_id;
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int channel_id;
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id++;
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    channel_id = (app_id << 16) + next_channel_id;
1622e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s channel_id=0x%08x, app_id=0x%02x next_channel_id=0x%04x", __FUNCTION__,
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      channel_id, app_id,  next_channel_id);
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return channel_id;
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_app_id
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get the applicaiton id associated with the channel id
16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_app_id(int channel_id){
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_id =(UINT8) (channel_id >> 16);
1638e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s channel_id=0x%08x, app_id=0x%02x ", __FUNCTION__,channel_id, app_id);
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return app_id;
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_app_id
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the application id
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_app_id(void){
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id = 1;
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_channel_id
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the channel id
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_channel_id(void){
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id = 1;
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1669f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx_using_handle
16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1671f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the applicaiton index using handle
16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1676f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle,
1677f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                          UINT8 *p_app_idx){
1678f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
1679f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1681f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1683f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
1684f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_handle == app_handle))
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1686f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
1687f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
1688f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1692e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s status=%d handle=%d app_idx=%d ",
1693f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found, app_handle , i);
1694f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
1695f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1700f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx_using_app_id
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1702f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the applicaiton index using app_id
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1707f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_app_id(UINT8 app_id,
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_app_idx){
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1712bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use &&
1716f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_id == app_id))
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_app_idx = i;
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1724e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s found=%d app_id=%d app_idx=%d ",
1725f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found, app_id , i);
17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx_using_handle
17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using handle
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle,
17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT8 *p_app_idx, UINT8 *p_mcl_idx){
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb;
17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         found=FALSE;
17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j;
17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<BTA_HL_NUM_APPS; i++)
17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1750f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
1751e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_handle:app_idx=%d,"
1752f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                "mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->mcb[j].in_use &&
17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_acb->mcb[j].mcl_handle == mcl_handle))
17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_app_idx = i;
17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_mcl_idx = j;
17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1763e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d mcl_idx=%d",__FUNCTION__,
17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      found, i, j);
17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1770f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_mdl_idx_using_mdl_id
17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1772f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the mdl index using mdl_id
17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1777f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_mcl_idx_using_mdl_id( UINT8 mdl_id,UINT8 mcl_handle,
1778f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 *p_app_idx, UINT8 *p_mcl_idx){
1779f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1780f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t  *p_mcb;
1781f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1782f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j,x;
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1784f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1786f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
1787f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1789f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
1790f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
1791f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1792f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = &p_acb->mcb[j];
1793e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_mdl_id: mcl handle found j =%d",j);
1794f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    for (x=0; x < BTA_HL_NUM_MDLS_PER_MCL ; x ++)
1795f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
1796f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        if (p_mcb->mdl[x].in_use && p_mcb->mdl[x].mdl_id == mdl_id)
1797f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
1798e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_mdl_id:found x =%d",x);
1799f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            found = TRUE;
1800f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            *p_app_idx = i;
1801f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            *p_mcl_idx = j;
1802f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
1803f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
1804f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
1805f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1808e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d mcl_idx=%d",__FUNCTION__,
1809f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, i, j);
18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1815f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_mcl_idx_using_deleted_mdl_id
18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1817f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the app index deleted_mdl_id
18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1822f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_deleted_mdl_id( UINT8 mdl_id,
1823f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 *p_app_idx){
1824f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1825f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
18265cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UINT8 i;
18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1828f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1830f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
18315cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        if (p_acb->delete_mdl.active) {
1832e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("btif_hl_find_app_idx_using_deleted_mdl_id: app_idx=%d,"
18335cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen                              "mdl_id=%d mcl_handle=%d",i,mdl_id,p_acb->mcb[i].mcl_handle);
18345cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        }
18355cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        if (p_acb->delete_mdl.active &&
18365cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            (p_acb->delete_mdl.mdl_id == mdl_id))
18375cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        {
18385cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            found = TRUE;
18395cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            *p_app_idx = i;
18405cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            break;
18415cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        }
18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1843e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d",__FUNCTION__,
1844f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, i);
18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1850f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_stop_timer_using_handle
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1852f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean control channel cb using handle
18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1854f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1857f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_stop_timer_using_handle( tBTA_HL_MCL_HANDLE mcl_handle){
1858f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1859f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1860f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1862f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1864f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
1865f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1867f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
1868f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
1869f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1870f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
1871f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1878f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_mcl_idx_using_app_idx
18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1880f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the MCL index using handle
18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1885f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_mcl_idx_using_app_idx( tBTA_HL_MCL_HANDLE mcl_handle,
1886f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 p_app_idx, UINT8 *p_mcl_idx){
1887f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1888f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1889f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1891f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    p_acb =BTIF_HL_GET_APP_CB_PTR(p_app_idx);
1892f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (j=0; j < BTA_HL_NUM_MCLS ; j++)
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1894f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_acb->mcb[j].in_use &&
1895f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (p_acb->mcb[j].mcl_handle == mcl_handle))
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
1898f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mcl_idx = j;
18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1902e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%dmcl_idx=%d",__FUNCTION__,
1903f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, j);
19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1909f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_clean_mdls_using_app_idx
19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1911f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean dch cpntrol bloack using app_idx
19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1913f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1916f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agheravoid btif_hl_clean_mdls_using_app_idx( UINT8 app_idx){
1917f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1918f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t  *p_mcb;
1919f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t  *p_dcb;
1920f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j,x,y;
1921f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_bdaddr_t     bd_addr;
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1923f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
1924f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1926f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
1927f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1928f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = &p_acb->mcb[j];
1929e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_mdl_id: mcl handle found j =%d",j);
1930f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    for (x=0; x < BTA_HL_NUM_MDLS_PER_MCL ; x ++)
1931f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
1932f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        if (p_mcb->mdl[x].in_use)
1933f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
1934f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, j,x);
1935f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            btif_hl_release_socket(app_idx,j,x);
1936f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            for (y=0; y<6; y++)
1937f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            {
1938f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                bd_addr.address[y] = p_mcb->bd_addr[y];
1939f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            }
1940f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  p_acb->app_id,
1941f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               &bd_addr, p_dcb->local_mdep_cfg_idx,
1942f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_dcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
1943f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            btif_hl_clean_mdl_cb(p_dcb);
1944f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
1945f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    BTA_HlCchClose(p_mcb->mcl_handle);
1946e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("remote DCH close success mdl_idx=%d", x);
1947f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
1948f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
1949f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1955f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx
19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1957f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the application index using application ID
19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1959f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1962f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx(UINT8 app_id, UINT8 *p_app_idx){
1963f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
1964f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1966f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
1967f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1969f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
1970f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_id == app_id))
1971f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
1972f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
1973f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
1974f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
1975f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
1976f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
1977e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d", __FUNCTION__, found, i );
1978f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
1979f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
1980f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1982f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
1983f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
1984f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx
1985f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
1986f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the application index using application ID
1987f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
1988f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
1989f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
1990f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
1991f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_mdepId(UINT8 mdep_id, UINT8 *p_app_idx){
1992f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
1993f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
1994f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
1995bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
1996f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1998e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_find_app_idx_using_mdepId: MDEP-ID = %d",
1999f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_cb.acb[i].sup_feature.mdep[0].mdep_id);
2000f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
2001f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].sup_feature.mdep[0].mdep_id == mdep_id))
20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2003f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2004f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
2005f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2008e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d", __FUNCTION__, found, i );
20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2012f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2015f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_mdl_idx
20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2017f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use MDL index
20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2019f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2022f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_avail_mdl_idx(UINT8 app_idx, UINT8 mcl_idx,
2023f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                   UINT8 *p_mdl_idx){
2024f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2025f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2026f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2028f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2030f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!p_mcb->mdl[i].in_use)
20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2032f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_clean_mdl_cb(&p_mcb->mdl[i]);
20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
2034f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mdl_idx = i;
20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2039e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d idx=%d",__FUNCTION__, found, i);
20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2045f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_mcl_idx
20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2047f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use MDL index
20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2049f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2052f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_avail_mcl_idx(UINT8 app_idx, UINT8 *p_mcl_idx){
2053f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2054f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
2055f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2056f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
2057f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2058f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_cb.acb[app_idx].mcb[i].in_use)
2059f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2060f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2061f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mcl_idx = i;
2062f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
2063f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2064f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
2065e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d mcl_idx=%d", __FUNCTION__, found, i);
2066f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
2067f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2069f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2070f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2071f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_app_idx
2072f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2073f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use APP index
2074f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2075f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
2076f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2077f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2078f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic BOOLEAN btif_hl_find_avail_app_idx(UINT8 *p_idx){
2079f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found = FALSE;
2080f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2082f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2084f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_cb.acb[i].in_use)
2085f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2086f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2087f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_idx = i;
2088f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
2089f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2090f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2092e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s found=%d app_idx=%d", __FUNCTION__, found, i);
2093f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
2094f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2097f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2098f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2099f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_dereg_cfm
2100f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2101f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the de-registration confirmation
2102f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2103f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
2104f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2105f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2106f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_dereg_cfm(tBTA_HL *p_data)
21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2108f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera{
2109f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t        *p_acb;
2110f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx;
2111f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                     app_id = 0;
2112f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bthl_app_reg_state_t    state = BTHL_APP_REG_STATE_DEREG_SUCCESS;
2113f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t             status            = BT_STATUS_SUCCESS;
21145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2115e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s de-reg status=%d app_handle=%d", __FUNCTION__,
2116f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_data->dereg_cfm.status, p_data->dereg_cfm.app_handle);
21175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2118f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_app_idx_using_app_id(p_data->dereg_cfm.app_id, &app_idx))
2119f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2120f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
2121f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        app_id = (int) p_acb->app_id;
2122f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_data->dereg_cfm.status == BTA_HL_STATUS_OK)
2123f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2124f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_clean_mdls_using_app_idx(app_idx);
2125f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memset(p_acb, 0,sizeof(btif_hl_app_cb_t));
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2127f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        else
2128f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            state = BTHL_APP_REG_STATE_DEREG_FAILED;
21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2130e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("call reg state callback app_id=%d state=%d", app_id, state);
2131f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, app_id, state );
21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2133f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_is_no_active_app())
2134f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2135f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_disable();
2136f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2137f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_reg_cfm
21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the registration confirmation
21455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_cfm(tBTA_HL *p_data){
21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t       *p_acb;
21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                  app_idx;
21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t   state = BTHL_APP_REG_STATE_REG_SUCCESS;
21535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t            bt_status;
21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2155e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s reg status=%d app_handle=%d", __FUNCTION__, p_data->reg_cfm.status, p_data->reg_cfm.app_handle);
21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(p_data->reg_cfm.app_id, &app_idx))
21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->reg_cfm.status == BTA_HL_STATUS_OK)
21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->app_handle = p_data->reg_cfm.app_handle;
21635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_app_idx(app_idx);
2167f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            reg_counter--;
21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            state = BTHL_APP_REG_STATE_REG_FAILED;
21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2171e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("%s call reg state callback app_id=%d reg state=%d", __FUNCTION__,  p_data->reg_cfm.app_id, state);
21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, ((int) p_data->reg_cfm.app_id), state );
21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_chan_cb_state
21795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set the channel callback state
21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_chan_cb_state(UINT8 app_idx, UINT8 mcl_idx, btif_hl_chan_cb_state_t state){
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_chan_cb_state_t cur_state = p_pcb->cb_state;
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (cur_state != state)
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb->cb_state = state;
2192e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("%s state %d--->%d",__FUNCTION__, cur_state, state);
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_destroyed_cb
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send the channel destroyed callback
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_destroyed_cb(btif_hl_app_cb_t        *p_acb ){
22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t     bd_addr;
22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int             app_id = (int) btif_hl_get_app_id(p_acb->delete_mdl.channel_id);
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_acb->delete_mdl.bd_addr);
2211e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
2212e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("call channel state callback channel_id=0x%08x mdep_cfg_idx=%d, state=%d fd=%d",p_acb->delete_mdl.channel_id,
22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_acb->delete_mdl.mdep_cfg_idx, BTHL_CONN_STATE_DESTROYED, 0);
22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_acb->delete_mdl.mdep_cfg_idx,
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_acb->delete_mdl.channel_id, BTHL_CONN_STATE_DESTROYED, 0 );
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_disconnecting_cb
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnecting callback
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_disconnecting_cb(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb = BTIF_HL_GET_MDL_CB_PTR( app_idx,  mcl_idx, mdl_idx);
22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t        *p_scb = p_dcb->p_scb;
22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t             bd_addr;
22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                     app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_scb->bd_addr);
22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2237e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
2238e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d, state=%d fd=%d",p_scb->channel_id,
22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_scb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0]);
22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_scb->mdep_cfg_idx,
22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_scb->channel_id, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0] );
22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_connecting_cb
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel connecting callback
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_connecting_cb(UINT8 app_idx, UINT8 mcl_idx){
22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                 bd_addr;
22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         app_id = (int) btif_hl_get_app_id(p_pcb->channel_id);
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use && p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2263e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("%s",__FUNCTION__);
2264e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_display_bt_bda(&bd_addr);
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           &bd_addr, p_pcb->mdep_cfg_idx,
22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_chan_cb_state(app_idx, mcl_idx, BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING);
22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_disconnected_cb
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnected callback
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_disconnected_cb(UINT8 app_idx, UINT8 mcl_idx){
22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                 bd_addr;
22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         app_id = (int) btif_hl_get_app_id(p_pcb->channel_id);
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2290e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s p_pcb->in_use=%d",__FUNCTION__, p_pcb->in_use);
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2293e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("%p_pcb->cb_state=%d",p_pcb->cb_state);
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2296e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2303e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2312e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_pcb(p_pcb);
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_sdp_query_cfm
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the SDP query confirmation
23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_sdp_query_cfm(tBTA_HL *p_data){
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb;
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP                     *p_sdp;
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CCH_OPEN_PARAM          open_param;
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           app_idx, mcl_idx, sdp_idx = 0;
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           num_recs, i, num_mdeps, j;
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cch_op_t                old_cch_oper;
23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         status =FALSE;
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t     *p_pcb;
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2342e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sdp = p_data->sdp_query_cfm.p_sdp;
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_recs = p_sdp->num_recs;
23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2347e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("num of SDP records=%d",num_recs);
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<num_recs; i++)
23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2350e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("rec_idx=%d ctrl_psm=0x%x data_psm=0x%x",
23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          (i+1),p_sdp->sdp_rec[i].ctrl_psm, p_sdp->sdp_rec[i].data_psm);
2352e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("MCAP supported procedures=0x%x",p_sdp->sdp_rec[i].mcap_sup_proc);
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_mdeps = p_sdp->sdp_rec[i].num_mdeps;
2354e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("num of mdeps =%d",num_mdeps);
23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< num_mdeps; j++)
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2357e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdep_idx=%d mdep_id=0x%x data_type=0x%x mdep_role=0x%x",
23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (j+1),
23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_id,
23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].data_type,
23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_role );
23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2365f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_app_idx_using_app_id(p_data->sdp_query_cfm.app_id, &app_idx))
23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2367f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2369f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
2370f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2371f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2372f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (p_mcb->cch_oper != BTIF_HL_CCH_OP_NONE)
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2374f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memcpy(&p_mcb->sdp, p_sdp, sizeof(tBTA_HL_SDP));
2375f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    old_cch_oper = p_mcb->cch_oper;
2376f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->cch_oper = BTIF_HL_CCH_OP_NONE;
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (old_cch_oper)
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_CCH_OP_MDEP_FILTERING:
2381f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            status = btif_hl_find_sdp_idx_using_mdep_filter(app_idx,
2382f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                                    mcl_idx, &sdp_idx);
2383f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
2384f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        default:
2385f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
2386f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
2387f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2388f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    if (status)
2389f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
2390f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->sdp_idx       = sdp_idx;
2391f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->valid_sdp_idx = TRUE;
2392f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->ctrl_psm      = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm;
2393f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2394f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        switch (old_cch_oper)
2395f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
2396f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            case BTIF_HL_CCH_OP_MDEP_FILTERING:
2397f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
2398f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                if (p_pcb->in_use)
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                {
2400f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    if (!p_pcb->abort_pending)
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    {
2402f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        switch (p_pcb->op)
2403f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        {
2404f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            case BTIF_HL_PEND_DCH_OP_OPEN:
2405f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
2406f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                break;
2407f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
2408f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            default:
2409f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                break;
2410f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        }
2411f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        open_param.ctrl_psm = p_mcb->ctrl_psm;
2412f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        bdcpy(open_param.bd_addr, p_mcb->bd_addr);
2413f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        open_param.sec_mask =
2414f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
2415f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        BTA_HlCchOpen(p_acb->app_id,p_acb->app_handle, &open_param);
2416f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    }
2417f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    else
2418f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    {
2419e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                                        BTIF_TRACE_DEBUG("channel abort pending");
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    }
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                }
2422f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2424f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            case BTIF_HL_CCH_OP_DCH_OPEN:
2425f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                status = btif_hl_proc_pending_op(app_idx,mcl_idx);
2426f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2428f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            default:
2429e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                                BTIF_TRACE_ERROR("Invalid CCH oper %d", old_cch_oper);
2430f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
2431f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
2432f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
2433f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    else
2434f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
2435e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_ERROR("Can not find SDP idx discard CCH Open request");
24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
24415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_ind
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open indication
24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_open_ind(tBTA_HL *p_data)
24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
2458f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                     i;
24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2460e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
2461f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for(i=0; i<BTA_HL_NUM_APPS; i++)
24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2463f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use)
24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2465f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (!btif_hl_find_mcl_idx(i, p_data->cch_open_ind.bd_addr, &mcl_idx))
24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2467f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_avail_mcl_idx(i, &mcl_idx))
2468f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
2469f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(i, mcl_idx);
2470f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memset(p_mcb, 0, sizeof(btif_hl_mcl_cb_t));
2471f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->in_use = TRUE;
2472f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->is_connected = TRUE;
2473f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->mcl_handle = p_data->cch_open_ind.mcl_handle;
2474f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    bdcpy(p_mcb->bd_addr, p_data->cch_open_ind.bd_addr);
2475f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    btif_hl_start_cch_timer(i, mcl_idx);
2476f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
2477f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
2478f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            else
2479f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2480e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("The MCL already exist for cch_open_ind");
24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_pending_op
24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the pending dch operation.
24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_proc_pending_op(UINT8 app_idx, UINT8 mcl_idx)
24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = FALSE;
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM      dch_open;
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_ID              mdl_id;
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_RECONNECT_PARAM reconnect_param;
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        switch (p_pcb->op)
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_OPEN:
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!p_pcb->abort_pending)
25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2515e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("op BTIF_HL_PEND_DCH_OP_OPEN");
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.ctrl_psm = p_mcb->ctrl_psm;
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_mdep_id = p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_id;
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role,
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type, &dch_open.peer_mdep_id ))
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = p_acb->channel_type[p_pcb->mdep_cfg_idx];
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            && !btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx))
25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
2529e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("dch_open.local_cfg=%d  ", dch_open.local_cfg);
25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_send_setup_connecting_cb(app_idx,mcl_idx);
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (!btif_hl_is_reconnect_possible(app_idx, mcl_idx, p_pcb->mdep_cfg_idx, &dch_open, &mdl_id ))
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
2534e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("Issue DCH open, mcl_handle=%d",p_mcb->mcl_handle);
25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchOpen(p_mcb->mcl_handle, &dch_open);
25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.ctrl_psm = p_mcb->ctrl_psm;
25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.mdl_id = mdl_id;;
2541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("Issue Reconnect ctrl_psm=0x%x mdl_id=0x%x",reconnect_param.ctrl_psm, reconnect_param.mdl_id);
25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchReconnect(p_mcb->mcl_handle, &reconnect_param);
25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = TRUE;
25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = TRUE;
25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            default:
25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_cfm
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open confirmation
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_cch_open_cfm(tBTA_HL *p_data)
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx;
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM   dch_open;
25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2583e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2585f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_app_idx_using_app_id(p_data->cch_open_cfm.app_id, &app_idx))
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2587e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("app_idx=%d", app_idx);
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2593e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_idx=%d, mcl_handle=%d", mcl_idx,p_data->cch_open_cfm.mcl_handle);
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->mcl_handle = p_data->cch_open_cfm.mcl_handle;
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->is_connected = TRUE;
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = btif_hl_proc_pending_op(app_idx, mcl_idx);
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (status)
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_start_cch_timer(app_idx, mcl_idx);
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2606f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2607f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_clean_mcb_using_handle
2608f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2609f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean control channel cb using handle
2610f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2611f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
2612f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2613f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2614f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_clean_mcb_using_handle( tBTA_HL_MCL_HANDLE mcl_handle){
2615f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
2616f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
2617f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2618f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
2619f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2620f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
2621f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
2622f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2623f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
2624e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_handle: app_idx=%d,"
2625f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    "mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
2626f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
2627f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
2628f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2629f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
2630f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_release_mcl_sockets(i, j);
2631f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
2632f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
2633f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
2634f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2635f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
2636f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_ind
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close indication
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_ind(tBTA_HL *p_data)
26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
2651e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2653f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_cfm
26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close confirmation
26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_cfm(tBTA_HL *p_data)
26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
2669e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2671f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_create_ind
26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the MDL create indication
26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_create_ind(tBTA_HL *p_data){
26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP            *p_mdep;
2687f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx, orig_app_idx, mcl_idx, mdep_cfg_idx;
26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 first_reliable_exist;
26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 success = TRUE;
26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CFG         rsp_cfg = BTA_HL_DCH_CFG_UNKNOWN;
26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP  rsp_code = BTA_HL_DCH_CREATE_RSP_CFG_REJ;
26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP_PARAM create_rsp_param;
26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2694e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2696f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera// Find the correct app_idx based on the mdep_id;
2697f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_create_ind.local_mdep_id,&orig_app_idx);
2698f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx(orig_app_idx, p_data->dch_create_ind.bd_addr, &mcl_idx))
26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2700f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(orig_app_idx);
2701f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =BTIF_HL_GET_MCL_CB_PTR(orig_app_idx, mcl_idx);
27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2703f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_mdep_cfg_idx(orig_app_idx, p_data->dch_create_ind.local_mdep_id, &mdep_cfg_idx))
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdep = &(p_acb->sup_feature.mdep[mdep_cfg_idx]);
2706f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            first_reliable_exist = btif_hl_is_the_first_reliable_existed(orig_app_idx, mcl_idx);
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            switch (p_mdep->mdep_cfg.mdep_role)
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SOURCE:
27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_data->dch_create_ind.cfg == BTA_HL_DCH_CFG_NO_PREF)
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (first_reliable_exist)
27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = p_acb->channel_type[mdep_cfg_idx];
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = BTA_HL_DCH_CFG_RELIABLE;
27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SINK:
27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2726e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_proc_create_ind:BTA_HL_MDEP_ROLE_SINK");
27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_RELIABLE) ||
27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (first_reliable_exist && (p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_STREAMING)))
27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_cfg = p_data->dch_create_ind.cfg;
2732e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("btif_hl_proc_create_ind:BTA_HL_MDEP_ROLE_SINK cfg = %d",rsp_cfg);
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                default:
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        success = FALSE;
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (success)
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2747e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("create response rsp_code=%d rsp_cfg=%d", rsp_code, rsp_cfg );
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.local_mdep_id = p_data->dch_create_ind.local_mdep_id;
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.mdl_id = p_data->dch_create_ind.mdl_id;
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.rsp_code = rsp_code;
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.cfg_rsp = rsp_cfg;
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchCreateRsp(p_mcb->mcl_handle, &create_rsp_param);
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_ind
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH open indication
27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_open_ind(tBTA_HL *p_data)
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
27715cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UINT8                    orig_app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    dc_cfg;
27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN close_dch = FALSE;
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2775e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2777f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
2778f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_open_ind.local_mdep_id,&orig_app_idx);
2779f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2780f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_open_ind.mcl_handle, orig_app_idx, &mcl_idx ))
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2782f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(orig_app_idx);
2783f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =BTIF_HL_GET_MCL_CB_PTR(orig_app_idx, mcl_idx);
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2785f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_avail_mdl_idx(orig_app_idx, mcl_idx, &mdl_idx))
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2787f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            p_dcb = BTIF_HL_GET_MDL_CB_PTR(orig_app_idx, mcl_idx, mdl_idx);
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2789f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mdep_cfg_idx(orig_app_idx, p_data->dch_open_ind.local_mdep_id, &mdep_cfg_idx))
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           =  p_data->dch_open_ind.mdl_handle;
27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_ind.local_mdep_id;
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_ind.mdl_id;
27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable = p_data->dch_open_ind.first_reliable;
27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_ind.mtu;
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2801f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if(btif_hl_find_channel_id_using_mdl_id(orig_app_idx,p_dcb->mdl_id , &p_dcb->channel_id))
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2803e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
28045cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen                                        orig_app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
2805f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    if (!btif_hl_create_socket(orig_app_idx, mcl_idx, mdl_idx))
28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
2807e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_ERROR("Unable to create socket");
28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        close_dch = TRUE;
28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2813e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_ERROR("Unable find channel id for mdl_id=0x%x", p_dcb->mdl_id  );
28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2819e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_cfm
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close confirmation
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_open_cfm(tBTA_HL *p_data)
28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
28495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2856e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2858f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
2859f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_open_cfm.local_mdep_id,&app_idx);
2860f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2861f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_open_cfm.mcl_handle, app_idx, &mcl_idx ))
28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_open_cfm.local_mdep_id, &mdep_cfg_idx))
28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_open_cfm.mdl_handle;
28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_cfm.local_mdep_id;
28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_cfm.mdl_id;
28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_cfm.dch_mode;
28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_open_cfm.first_reliable;
28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_cfm.mtu;
28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2883e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
2888e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2894e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_ERROR("Unable to create socket");
28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2900e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_cfm
29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_reconnect_cfm(tBTA_HL *p_data)
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2933e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2935f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_reconnect_cfm.local_mdep_id,&app_idx);
2936f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2937f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_reconnect_cfm.mcl_handle, app_idx, &mcl_idx ))
29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_cfm.local_mdep_id, &mdep_cfg_idx))
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_cfm.mdl_handle;
29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_cfm.local_mdep_id;
29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_cfm.mdl_id;
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_cfm.dch_mode;
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_cfm.first_reliable;
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_cfm.mtu;
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2959e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
2964e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2970e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_ERROR("Unable to create socket");
29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2976e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_reconnect_cfm.mdl_handle);
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_ind
29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_reconnect_ind(tBTA_HL *p_data)
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb;
30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb;
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb;
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx, mdep_cfg_idx, dc_cfg;
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 close_dch = FALSE;
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3009e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3011f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
3012f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_reconnect_ind.local_mdep_id,&app_idx);
30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3014f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_reconnect_ind.mcl_handle, app_idx, &mcl_idx ))
30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
3017e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_proc_dch_reconnect_ind: app_idx = %d, mcl_idx = %d",
3018f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                app_idx, mcl_idx);
30195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
30205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_ind.local_mdep_id, &mdep_cfg_idx))
30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_ind.mdl_handle;
30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_ind.local_mdep_id;
30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_ind.mdl_id;
30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_ind.first_reliable;
30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_ind.mtu;
30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = btif_hl_get_next_channel_id(p_acb->app_id);
30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3038e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
30415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3042e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_ERROR("Unable to create socket");
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3048e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_reconnect_ind.mdl_handle);
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_ind
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close indication
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_ind(tBTA_HL *p_data)
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
3079f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t         *p_mcb;
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
30815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3082e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_ind.mdl_handle,
30845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &app_idx, &mcl_idx, &mdl_idx ))
30855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
30875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_socket(app_idx,mcl_idx, mdl_idx);
3088f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
3089f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =  BTIF_HL_GET_MCL_CB_PTR(app_idx,mcl_idx);
30905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
3091f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
30925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
3093e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("remote DCH close success mdl_idx=%d", mdl_idx);
30945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_cfm
31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect confirmation
31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_cfm(tBTA_HL *p_data)
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
3110f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t         *p_mcb;
31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3113e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_cfm.mdl_handle,
31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &app_idx, &mcl_idx, &mdl_idx ))
31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_socket(app_idx,mcl_idx,mdl_idx);
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
3120f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =  BTIF_HL_GET_MCL_CB_PTR(app_idx,mcl_idx);
3121f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
3123e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG(" local DCH close success mdl_idx=%d", mdl_idx);
31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_ind
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort indicaiton
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_ind(tBTA_HL_MCL_HANDLE mcl_handle){
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
3140e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
3141f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
3142f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
3143f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3144f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3146f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
3147f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
3148f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
3149f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
3150e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_handle: app_idx=%d,mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
3151f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
3152f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
3153f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
3154f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
3155f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
3156f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
3157f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
3158f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_cfm
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort confirmation
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_cfm(tBTA_HL_MCL_HANDLE mcl_handle){
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3174e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
3175f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
3176f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3178f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3180f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
3181f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
31825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3183f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
3184e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_find_mcl_idx_using_handle: app_idx=%d,mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
3185f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
3186f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3188f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
3189f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
3190f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3194f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3195f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
3196f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3197f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
3198f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3199f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_send_data_cfm
3200f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3201f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the send data confirmation
3202f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3203f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
3204f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3205f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
3206f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_send_data_cfm(tBTA_HL_MDL_HANDLE mdl_handle,
3207f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                       tBTA_HL_STATUS status){
3208f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx,mcl_idx, mdl_idx;
3209f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t         *p_dcb;
32105cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(status);
3211f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3212e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
3213f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mdl_idx_using_handle(mdl_handle,
3214f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                          &app_idx, &mcl_idx, &mdl_idx ))
32155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3216f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3217f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
3218e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("send success free p_tx_pkt tx_size=%d", p_dcb->tx_size);
3219f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb->tx_size = 0;
32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3221f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3223f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
3224f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3225f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_dch_cong_ind
3226f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3227f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the DCH congestion change indication
3228f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3229f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
3230f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3231f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
3232f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_dch_cong_ind(tBTA_HL *p_data)
3233f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3234f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera{
3235f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t         *p_dcb;
3236f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx, mcl_idx, mdl_idx;
3237f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3238e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_proc_dch_cong_ind");
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3241f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_cong_ind.mdl_handle, &app_idx, &mcl_idx, &mdl_idx))
3242f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
3243f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3244f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb->cong = p_data->dch_cong_ind.cong;
3245f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
32465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32505cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen** Function         btif_hl_proc_reg_request
32515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process registration request
32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_request(UINT8 app_idx, UINT8  app_id,
32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_REG_PARAM *p_reg_param,
32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_CBACK *p_cback){
32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status= BT_STATUS_SUCCESS;
32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t *p_data;
32635cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_cback);
32645cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
3265e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s app_idx=%d app_id=%d", __FUNCTION__, app_idx, app_id);
32665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3267f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(reg_counter >1)
32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3269e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_proc_reg_request: calling uPDATE");
3270f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTA_HlUpdate(app_id, p_reg_param,TRUE, btif_hl_cback);
32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3272f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    else
3273f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTA_HlRegister(app_id, p_reg_param, btif_hl_cback);
32745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cb_evt
32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL callback events
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cb_evt(UINT16 event, char* p_param){
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                *p_data = (btif_hl_evt_cb_t *)p_param;
32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                     bd_addr;
32905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_channel_state_t            state=BTHL_CONN_STATE_DISCONNECTED;
32915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         send_chan_cb=TRUE;
32925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM               reg_param;
32935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t            reg_state = BTHL_APP_REG_STATE_REG_FAILED;
32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             app_id;
32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           preg_idx;
32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     bt_status;
32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3299e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
33005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
33015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
33035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_CONNECTED_CB:
33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_DISCONNECTED_CB:
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_CONNECTED;
33085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING)
33095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_DISCONNECTED;
33105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                send_chan_cb = FALSE;
33125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (send_chan_cb)
33145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_copy_bda(&bd_addr, p_data->chan_cb.bd_addr);
3316e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("state callbk: ch_id=0x%08x cb_state=%d state=%d  fd=%d",
33175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.channel_id,
33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.cb_state,
33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  state,  p_data->chan_cb.fd);
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_display_bt_bda(&bd_addr);
33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  p_data->chan_cb.app_id,
33225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   &bd_addr, p_data->chan_cb.mdep_cfg_index,
33235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   p_data->chan_cb.channel_id, state, p_data->chan_cb.fd );
33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_REG_APP:
33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb  = BTIF_HL_GET_APP_CB_PTR(p_data->reg.app_idx);
33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            app_id = (int) p_acb->app_id;
3330e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTIF_HL_REG_APP app_idx=%d reg_pending=%d", p_data->reg.app_idx, p_acb->reg_pending);
3331f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_get_state() == BTIF_HL_STATE_ENABLED && p_acb->reg_pending)
33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3333e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("Rcv BTIF_HL_REG_APP reg_counter=%d",reg_counter);
33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->reg_pending = FALSE;
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.dev_type = p_acb->dev_type;
33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_name = p_acb->srv_name;
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_desp = p_acb->srv_desp;
33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_provider_name = p_acb->provider_name;
33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_reg_request (p_data->reg.app_idx, p_acb->app_id, &reg_param, btif_hl_cback);
33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3344e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("reg request is processed state=%d reg_pending=%d", btif_hl_get_state(), p_acb->reg_pending);
33455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UNREG_APP:
3350e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTIF_HL_UNREG_APP app_idx=%d", p_data->unreg.app_idx );
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->unreg.app_idx);
3352f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_get_state() == BTIF_HL_STATE_ENABLED)
3353f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
3354f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if(reg_counter >= 1)
3355f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlUpdate(p_acb->app_id,NULL,FALSE,NULL);
3356f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                else
3357f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlDeregister(p_acb->app_id, p_acb->app_handle);
3358f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UPDATE_MDL:
3361e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTIF_HL_UPDATE_MDL app_idx=%d", p_data->update_mdl.app_idx );
33625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->update_mdl.app_idx);
33635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
3366e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_ERROR("Unknown event %d", event);
33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_evt
33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL events
33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_evt(UINT16 event, char* p_param){
33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL *p_data = (tBTA_HL *)p_param;
33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 app_idx, mcl_idx;
33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
33845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = NULL;
33855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR               bd_addr;
33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pend_dch_op_t  pending_op;
33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status;
33885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3389e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
3394e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_REGISTER_CFM_EVT");
3395e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_id=%d app_handle=%d status=%d ",
33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_id,
33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_handle,
33985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.status );
33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_reg_cfm(p_data);
34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
3403e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_SDP_INFO_IND_EVT");
3404e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_handle=%d ctrl_psm=0x%04x data_psm=0x%04x x_spec=%d mcap_sup_procs=0x%02x",
34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.app_handle,
34065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.ctrl_psm,
34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_psm,
34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_x_spec,
34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.mcap_sup_procs);
3410f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            //btif_hl_proc_sdp_info_ind(p_data);
34115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
3414e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DEREGISTER_CFM_EVT");
3415e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_handle=%d status=%d ",
34165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.app_handle,
34175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.status );
34185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dereg_cfm(p_data);
34195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
3422e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_SDP_QUERY_CFM_EVT");
3423e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_handle=%d app_id =%d,status =%d",
3424f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              p_data->sdp_query_cfm.app_handle,p_data->sdp_query_cfm.app_id,
34255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.status);
34265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3427e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
34285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[0], p_data->sdp_query_cfm.bd_addr[1],
34295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[2], p_data->sdp_query_cfm.bd_addr[3],
34305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[4], p_data->sdp_query_cfm.bd_addr[5]);
34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->sdp_query_cfm.status == BTA_HL_STATUS_OK)
34335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_sdp_query_cfm(p_data);
34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
34355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3439e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("BTA_HL_SDP_QUERY_CFM_EVT Status = %d",
3440f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                        p_data->sdp_query_cfm.status);
3441f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_app_idx_using_app_id(p_data->sdp_query_cfm.app_id, &app_idx))
34425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
34445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
34474420e41159663c904fd55fbb7dd4816129467fb5Ajay Dudani                        if ( (p_mcb->cch_oper ==  BTIF_HL_CCH_OP_MDEP_FILTERING) ||
34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             (p_mcb->cch_oper == BTIF_HL_CCH_OP_DCH_OPEN) )
34495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
34505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            pending_op = p_mcb->pcb.op;
34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            switch (pending_op)
34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            {
34535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_OPEN:
34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
34565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_RECONNECT:
34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
34585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                default:
34595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            }
34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            if (!p_mcb->is_connected)
34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_clean_mcl_cb(app_idx, mcl_idx);
34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
34645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
34655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
34665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
3472e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CCH_OPEN_CFM_EVT");
3473e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_id=%d,app_handle=%d mcl_handle=%d status =%d",
3474f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              p_data->cch_open_cfm.app_id,
34755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.app_handle,
34765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.mcl_handle,
34775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.status);
3478e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
34795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[0], p_data->cch_open_cfm.bd_addr[1],
34805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[2], p_data->cch_open_cfm.bd_addr[3],
34815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[4], p_data->cch_open_cfm.bd_addr[5]);
34825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3483f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_data->cch_open_cfm.status == BTA_HL_STATUS_OK ||
3484f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_data->cch_open_cfm.status == BTA_HL_STATUS_DUPLICATE_CCH_OPEN)
34855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_cch_open_cfm(p_data);
34875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
34895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
34915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
34945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3495f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_app_idx_using_app_id(p_data->cch_open_cfm.app_id, &app_idx))
34965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
34985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
34995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
35005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
35015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        pending_op = p_mcb->pcb.op;
35025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        switch (pending_op)
35035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
35045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_OPEN:
35055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
35065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
35075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_RECONNECT:
35085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
35095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            default:
35105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
35115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
35125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_clean_mcl_cb(app_idx, mcl_idx);
35135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
3519e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_OPEN_CFM_EVT");
3520e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_handle=0x%x status=%d ",
35215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mcl_handle,
35225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_handle,
35235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.status);
3524e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
35255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.first_reliable,
35265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.dch_mode,
35275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.local_mdep_id,
35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_id,
35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mtu);
35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_open_cfm.status == BTA_HL_STATUS_OK)
35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_open_cfm(p_data);
35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
35405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
35425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
35445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
35455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
35465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
35505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
35515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
35525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
35545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
3561e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CCH_OPEN_IND_EVT");
3562e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("app_handle=%d mcl_handle=%d",
35635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.app_handle,
35645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.mcl_handle);
3565e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
35665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[0], p_data->cch_open_ind.bd_addr[1],
35675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[2], p_data->cch_open_ind.bd_addr[3],
35685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[4], p_data->cch_open_ind.bd_addr[5]);
35695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_open_ind(p_data);
35715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
3574e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_CREATE_IND_EVT");
3575e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d",
35765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mcl_handle );
3577e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("local_mdep_id =%d mdl_id=%d cfg=%d",
35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.local_mdep_id,
35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mdl_id,
35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.cfg);
35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_create_ind(p_data);
35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
3585e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_OPEN_IND_EVT");
3586e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_handle=0x%x",
35875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mcl_handle,
35885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_handle );
3589e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.first_reliable,
35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.dch_mode,
35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.local_mdep_id,
35935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_id,
35945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mtu);
35955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_open_ind(p_data);
35975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
3600e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DELETE_MDL_IND_EVT");
3601e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_id=0x%x",
36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mcl_handle,
36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mdl_id);
36045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
3607e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DELETE_MDL_CFM_EVT");
3608e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_id=0x%x status=%d",
36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mcl_handle,
36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mdl_id,
36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.status);
36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3613f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_app_idx_using_deleted_mdl_id( p_data->delete_mdl_cfm.mdl_id,
3614f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    &app_idx))
36155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
36175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_destroyed_cb(p_acb);
36185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
36195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
3623e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_RECONNECT_CFM_EVT");
3624e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_handle=%d status=%d   ",
36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mcl_handle,
36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_handle,
36275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.status);
3628e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.first_reliable,
36305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.dch_mode,
36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_id,
36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mtu);
36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_reconnect_cfm.status == BTA_HL_STATUS_OK)
36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_reconnect_cfm(p_data);
36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
36455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
36475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
36485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
36495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
36505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
36515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
36525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
36535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
3666e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CCH_CLOSE_CFM_EVT");
3667e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d status =%d",
36685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.mcl_handle,
36695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.status);
36705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->cch_close_cfm.status == BTA_HL_STATUS_OK)
36715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_cch_close_cfm(p_data);
36735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
3677e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CCH_CLOSE_IND_EVT");
3678e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle =%d intentional_close=%s",
36795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_ind.mcl_handle,
36805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->cch_close_ind.intentional?"Yes":"No"));
36815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_close_ind(p_data);
36835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
3686e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_CLOSE_IND_EVT");
3687e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdl_handle=%d intentional_close=%s",
36885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_ind.mdl_handle,
36895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->dch_close_ind.intentional?"Yes":"No") );
36905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_close_ind(p_data);
36925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
3695e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_CLOSE_CFM_EVT");
3696e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdl_handle=%d status=%d ",
36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.mdl_handle,
36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.status);
36995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_close_cfm.status == BTA_HL_STATUS_OK)
37015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_dch_close_cfm(p_data);
37035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
3707e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_ECHO_TEST_CFM_EVT");
3708e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d    status=%d",
37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.mcl_handle,
37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.status );
37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* not supported */
37125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
3716e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_RECONNECT_IND_EVT");
37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3718e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d mdl_handle=5d",
37195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mcl_handle,
37205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_handle );
3721e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
37225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.first_reliable,
37235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.dch_mode,
37245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_id,
37255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mtu);
37265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_reconnect_ind(p_data);
37285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
3731e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CONG_CHG_IND_EVT");
3732e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdl_handle=%d cong =%d",
37335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.mdl_handle,
37345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.cong);
37355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_cong_ind(p_data);
37365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
3739e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_ABORT_IND_EVT");
3740e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d",
37415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_ind.mcl_handle );
37425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_abort_ind(p_data->dch_abort_ind.mcl_handle);
37435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
3745e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_ABORT_CFM_EVT");
3746e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mcl_handle=%d status =%d",
37475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.mcl_handle,
37485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.status);
37495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_abort_cfm.status == BTA_HL_STATUS_OK)
37505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_abort_cfm(p_data->dch_abort_ind.mcl_handle);
37525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
3756e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_SEND_DATA_CFM_EVT");
3757e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdl_handle=0x%x status =%d",
37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.mdl_handle,
37595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.status);
37605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_send_data_cfm(p_data->dch_send_data_cfm.mdl_handle,
37615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       p_data->dch_send_data_cfm.status);
37625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
3765e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_DCH_RCV_DATA_IND_EVT");
3766e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("mdl_handle=0x%x ",
37675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_rcv_data_ind.mdl_handle);
37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* do nothing here */
37695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
3772e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Unknown Event (0x%02x)...", event);
37735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_cback
37805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL events
37825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
37845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_cback(tBTA_HL_EVT event, tBTA_HL *p_data){
37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
3789e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_REGISTER_CFM);
37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_INFO_IND);
37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DEREGISTER_CFM);
38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_QUERY_CFM);
38045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_CFM);
38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_IND);
38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CREATE_IND);
38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
38185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
38215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
38225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
38245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
38285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
38305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
38315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_CLOSE_IND);
38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CLOSE_IND);
38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
38455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CONG_IND);
38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
38515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_IND);
38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
38585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
38605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
38615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
38635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
38645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* catch any failed context transfers */
38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_ctrl_evt
38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events in the BTIF task context
38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
38795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_ctrl_evt(UINT16 event, char* p_param){
38825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CTRL *p_data = (tBTA_HL_CTRL *) p_param;
38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM   reg_param;
38855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
38865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3887e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
38885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
38895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
38915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
3893e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CTRL_ENABLE_CFM_EVT");
3894e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("status=%d", p_data->enable_cfm.status);
38955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->enable_cfm.status == BTA_HL_STATUS_OK)
38975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_ENABLED);
38995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i < BTA_HL_NUM_APPS ; i ++)
39025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(i);
39045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->in_use && p_acb->reg_pending)
39055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
39065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->reg_pending = FALSE;
39075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.dev_type = p_acb->dev_type;
39085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
39095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_name = p_acb->srv_name;
39105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_desp = p_acb->srv_desp;
39115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_provider_name = p_acb->provider_name;
39125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3913e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("Register pending app_id=%d", p_acb->app_id);
39145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_proc_reg_request (i, p_acb->app_id, &reg_param, btif_hl_cback);
39155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
39165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
39175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
3921e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("Rcv BTA_HL_CTRL_DISABLE_CFM_EVT");
3922e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("status=%d",
39235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->disable_cfm.status);
39245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->disable_cfm.status == BTA_HL_STATUS_OK)
39265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
39285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_DISABLED);
39295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_ctrl_cback
39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events
39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
39445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_ctrl_cback(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data){
39475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
39485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
39495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3950e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
39545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CTRL_ENABLE_DISABLE);
39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
39605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_ctrl_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
39645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
39655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
39665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
39675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         connect_channel
39695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     connect a data channel
39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t connect_channel(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int *channel_id){
39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb = NULL;
3978f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_pending_chan_cb_t   *p_pcb = NULL;
39795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb=NULL;
39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t             status = BT_STATUS_SUCCESS;
39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM  dch_open;
39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR                 bda;
39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
3986e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s", __FUNCTION__);
39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<6; i++)
39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bda[i] = (UINT8) bd_addr->address[i];
39935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bda , &mcl_idx))
39985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->is_connected)
40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.ctrl_psm = p_mcb->ctrl_psm;
40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.local_mdep_id = p_acb->sup_feature.mdep[mdep_cfg_index].mdep_id;
4004e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("connect_channel: app_idx =%d, mdep_cfg_indx =%d, mdep_id =%d app_id= %d", app_idx,
4005f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                mdep_cfg_index, dch_open.local_mdep_id, app_id);
40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role,
40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.data_cfg[0].data_type, &dch_open.peer_mdep_id ))
40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_cfg = p_acb->channel_type[mdep_cfg_index];
40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        && !btif_hl_is_the_first_reliable_existed(app_idx,mcl_idx))
40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if( !btif_hl_dch_open(p_acb->app_id, bda, &dch_open,
40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              mdep_cfg_index, BTIF_HL_PEND_DCH_OP_OPEN, channel_id ))
40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
4022e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_EVENT("%s loc0 status = BT_STATUS_FAIL", __FUNCTION__);
40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4027f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->cch_oper = BTIF_HL_CCH_OP_MDEP_FILTERING;
4028f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4029f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
4030f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->in_use = TRUE;
4031f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->mdep_cfg_idx = mdep_cfg_index;
4032f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memcpy(p_pcb->bd_addr, bda, sizeof(BD_ADDR));
4033f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->op = BTIF_HL_PEND_DCH_OP_OPEN;
4034f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlSdpQuery(app_id,p_acb->app_handle, bda);
40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->filter.num_elems =1;
40455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->filter.elem[0].data_type = p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.data_cfg[mdep_cfg_index].data_type;
40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
40475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_cch_open(p_acb->app_id, bda, 0, mdep_cfg_index,
40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   BTIF_HL_PEND_DCH_OP_OPEN,
40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   channel_id))
40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BT_STATUS_FAIL;
40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4064e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s status=%d channel_id=0x%08x", __FUNCTION__, status, *channel_id);
40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         destroy_channel
40715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      destroy a data channel
40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
40755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t destroy_channel(int channel_id){
4078bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    UINT8 app_idx, mcl_idx, mdl_idx, mdl_cfg_idx, app_id, mdep_cfg_idx = 0;
40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
4082f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t     *p_dcb;
40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb;
40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
4086e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s channel_id=0x%08x", __FUNCTION__, channel_id);
40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_if_channel_setup_pending(channel_id, &app_idx, &mcl_idx))
40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_dch_abort(app_idx, mcl_idx);
40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
40955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mdl_cfg_idx_using_channel_id(channel_id, &app_idx, &mdl_cfg_idx))
4097f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera //       if(btif_hl_find_mdl_idx_using_channel_id(channel_id, &app_idx,&mcl_idx, &mdl_idx))
40985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
41005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_acb->delete_mdl.active)
41015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl =BTIF_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx);
41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.active = TRUE;
41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdl_id = p_mdl->base.mdl_id;
41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.channel_id = channel_id;
41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_acb->delete_mdl.bd_addr, p_mdl->base.peer_bd_addr,sizeof(BD_ADDR));
41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr, &mcl_idx))
41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
41125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mcb->is_connected)
41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
4114e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_DEBUG("calling BTA_HlDeleteMdl mdl_id=%d",p_acb->delete_mdl.mdl_id );
41155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
41195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4124e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("btif_hl_delete_mdl calling btif_hl_cch_open"  );
41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb->filter.num_elems =1;
41275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb->filter.elem[0].data_type = p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.data_cfg[mdep_cfg_idx].data_type;
41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_cch_open(p_acb->app_id, p_acb->delete_mdl.bd_addr, 0,
41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         mdep_cfg_idx,
41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         BTIF_HL_PEND_DCH_OP_DELETE_MDL, NULL))
41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (  status == BT_STATUS_FAIL)
41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* fail for now  */
41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_BUSY;
41495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
41525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
41545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
41585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         unregister_application
41625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     unregister an HDP application
41645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
41665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t unregister_application(int app_id){
41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx;
41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                 len;
41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t         status = BT_STATUS_SUCCESS;
41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t    evt_param;
41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
4176e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s app_id=%d", __FUNCTION__, app_id);
41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.unreg.app_idx = app_idx;
4182f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4183f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter --;
41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_unreg_t);
41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UNREG_APP,
41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
41875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status  = BT_STATUS_FAIL;
41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4194e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("de-reg return status=%d", status);
41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         register_application
42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     register an HDP application
42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
42065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t register_application(bthl_reg_param_t *p_reg_param, int *app_id){
42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
42085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE         *p_sup;
42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_CFG            *p_cfg;
42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_DATA_TYPE_CFG  *p_data;
42115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx=0, i=0, pending_reg_idx=0;
42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_mdep_cfg_t             *p_mdep_cfg;
42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                 status = BT_STATUS_SUCCESS;
42145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t            evt_param;
42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         len;
42165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
4218e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s", __FUNCTION__);
42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
42205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_get_state() == BTIF_HL_STATE_DISABLED)
42225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_init();
42245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_ENABLING);
42255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlEnable(btif_hl_ctrl_cback);
42265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!btif_hl_find_avail_app_idx(&app_idx))
42295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4230e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_ERROR("Unable to allocate a new application control block");
42315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BT_STATUS_FAIL;
42325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
42355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->in_use = TRUE;
42365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->app_id = btif_hl_get_next_app_id();
42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->application_name != NULL )
42415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->application_name, p_reg_param->application_name, BTIF_HL_APPLICATION_NAME_LEN);
42425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->provider_name != NULL )
42445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->provider_name, p_reg_param->provider_name, BTA_PROVIDER_NAME_LEN);
42455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_name != NULL )
42475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_name, p_reg_param->srv_name, BTA_SERVICE_NAME_LEN);
42485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_desp != NULL )
42505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_desp, p_reg_param->srv_desp, BTA_SERVICE_DESP_LEN);
42515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup = &p_acb->sup_feature;
42535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->advertize_source_sdp = TRUE;
42545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_rx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
42555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_tx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
42565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->num_of_mdeps = p_reg_param->number_of_mdeps;
42575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0, p_mdep_cfg = p_reg_param->mdep_cfg ; i<  p_sup->num_of_mdeps; i++, p_mdep_cfg++  )
42595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg = &p_sup->mdep[i].mdep_cfg;
42615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg->num_of_mdep_data_types = 1;
42625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data  = &p_cfg->data_cfg[0];
42635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( !btif_hl_get_bta_mdep_role(p_mdep_cfg->mdep_role, &(p_cfg->mdep_role)))
42655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4266e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_ERROR("Invalid mdep_role=%d", p_mdep_cfg->mdep_role);
42675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
42685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
42695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
42715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
42725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK )
42735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK;
42745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
42755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |=  BTA_HL_MDEP_ROLE_MASK_SOURCE;
42765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) &&
42785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) )
42795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_DUAL;
42815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if ( p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK )
42835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SINK;
42845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
42855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SOURCE;
42875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->data_type = (UINT16) p_mdep_cfg->data_type;
42895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->max_rx_apdu_size = btif_hl_get_max_rx_apdu_size(p_cfg->mdep_role, p_data->data_type);
42905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->max_tx_apdu_size = btif_hl_get_max_tx_apdu_size(p_cfg->mdep_role, p_data->data_type);
42915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mdep_cfg->mdep_description != NULL )
42935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                strncpy(p_data->desp, p_mdep_cfg->mdep_description, BTA_SERVICE_DESP_LEN);
42945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_get_bta_channel_type(p_mdep_cfg->channel_type, &(p_acb->channel_type[i])))
42965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4297e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("Invalid channel_type=%d", p_mdep_cfg->channel_type);
42985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
42995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
43005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BT_STATUS_SUCCESS)
43055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *app_id = (int) p_acb->app_id;
43075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.reg.app_idx = app_idx;
43085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_reg_t);
43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb->reg_pending = TRUE;
4310f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter++;
4311e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("calling btif_transfer_context status=%d app_id=%d", status, *app_id);
43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_REG_APP,
43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_free_app_idx(app_idx);
43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4322e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("register_application status=%d app_id=%d", status, *app_id);
43235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
43245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4325f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4326f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4327f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4328f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_save_mdl_cfg
4329f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4330f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Save the MDL configuration
4331f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4332f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
4333f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4334f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
4335f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN  btif_hl_save_mdl_cfg(UINT8 mdep_id, UINT8 item_idx,
4336f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              tBTA_HL_MDL_CFG *p_mdl_cfg){
4337f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cfg_t   *p_mdl=NULL;
4338f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN             success = FALSE;
4339f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t    *p_acb;
4340f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t    *p_mcb;
4341f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               app_idx, mcl_idx, mdl_idx, len;
4342f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t         bt_status;
4343f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_evt_cb_t    evt_param;
4344f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                 *p_channel_id;
4345f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4346e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s mdep_id=%d item_idx=%d, local_mdep_id=%d mdl_id=0x%x dch_mode=%d",
4347f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, mdep_id, item_idx, p_mdl_cfg->local_mdep_id,
4348f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      p_mdl_cfg->mdl_id, p_mdl_cfg->dch_mode );
4349f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4350f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(btif_hl_find_app_idx_using_mdepId(mdep_id,&app_idx))
4351f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4352f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4353f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
4354f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_channel_id = BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx, item_idx);
4355f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_mdl)
4356f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
4357f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memcpy(&p_mdl->base, p_mdl_cfg, sizeof(tBTA_HL_MDL_CFG));
4358f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr , &mcl_idx))
4359f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
4360f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
4361f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (p_mcb->pcb.in_use)
4362f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    *p_channel_id = p_mcb->pcb.channel_id;
4363f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                else
4364f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    *p_channel_id = btif_hl_get_next_channel_id(p_acb->app_id);
4365f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mdl->extra.mdep_cfg_idx = p_mcb->pcb.mdep_cfg_idx;
4366f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mdl->extra.data_type = p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
4367f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4368f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (!btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
4369f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.mdep_role,
4370f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type,
4371f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               &p_mdl->extra.peer_mdep_id))
4372f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
4373f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mdl->extra.peer_mdep_id = BTA_HL_INVALID_MDEP_ID;
4374f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
4375e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("%s app_idx=%d item_idx=%d mld_id=0x%x",
4376f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                  __FUNCTION__, app_idx, item_idx, p_mdl->base.mdl_id);
4377f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                evt_param.update_mdl.app_idx = app_idx;
4378f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                len = sizeof(btif_hl_update_mdl_t);
4379e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
4380f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
4381f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                        (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
4382f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
4383f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    success = TRUE;
4384f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
4385f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
4386f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
4387f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
4388f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4389e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s success=%d  ",__FUNCTION__, success );
4390f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4391f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return success;
4392f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
4393f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4394f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4395f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4396f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_delete_mdl_cfg
4397f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4398f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Delete the MDL configuration
4399f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4400f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
4401f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4402f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
4403f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN  btif_hl_delete_mdl_cfg(UINT8 mdep_id, UINT8 item_idx){
4404f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cfg_t     *p_mdl=NULL;
4405f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN             success = FALSE;
4406f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t      *p_acb;
4407f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               app_idx, len;
4408f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t         bt_status;
4409f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_evt_cb_t    evt_param;
4410f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4411f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(btif_hl_find_app_idx_using_mdepId(mdep_id,&app_idx))
4412f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4413f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4414f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4415f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4416f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
4417f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_mdl)
4418f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
4419f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memset(p_mdl, 0, sizeof(btif_hl_mdl_cfg_t));
4420f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            evt_param.update_mdl.app_idx = app_idx;
4421f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            len = sizeof(btif_hl_update_mdl_t);
4422e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
4423f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
4424f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                    (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
4425f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
4426f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                success = TRUE;
4427f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
4428f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
4429f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
4430f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4431f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4432e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s success=%d  ",__FUNCTION__, success );
4433f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return success;
4434f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
4435f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4436f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4437f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
44385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         init
44395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     initializes the hl interface
44415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
44435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t init( bthl_callbacks_t* callbacks ){
44465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
44475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4448e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s", __FUNCTION__);
44495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
44505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks_cb = *callbacks;
44515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks = &bt_hl_callbacks_cb;
44525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_thread_init();
4453f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    reg_counter = 0;
44545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
44555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         cleanup
44595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Closes the HL interface
44615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
44635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void  cleanup( void ){
4466e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s", __FUNCTION__);
44675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
44685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hl_callbacks)
44695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_disable_service(BTA_HDP_SERVICE_ID);
44715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hl_callbacks = NULL;
4472f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter = 0;
44735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_disable();
44765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_close_select_thread();
44775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bthl_interface_t bthlInterface = {
4480f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    sizeof(bthl_interface_t),
44815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    init,
44825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    register_application,
44835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    unregister_application,
44845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    connect_channel,
44855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    destroy_channel,
44865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    cleanup,
44875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
44885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_get_interface
44935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Get the hl callback interface
44955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bthf_interface_t
44975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst bthl_interface_t *btif_hl_get_interface(){
4500e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_EVENT("%s", __FUNCTION__);
45015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return &bthlInterface;
45025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_update_maxfd
45075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update the max fd if the input fd is greater than the current max fd
45095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
45115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btif_hl_update_maxfd( int max_org_s){
45145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
45155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int maxfd=0;
45165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4517e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_update_maxfd max_org_s= %d", max_org_s);
45185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    maxfd = max_org_s;
45205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
45215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
45235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (maxfd < p_scb->max_s)
45245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
45255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            maxfd = p_scb->max_s;
4526e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("btif_hl_update_maxfd 1 maxfd=%d", maxfd);
45275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
45285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
45295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
45305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (maxfd < p_scb->max_s)
45315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
45325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                maxfd = p_scb->max_s;
4533e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_update_maxfd 2 maxfd=%d", maxfd);
45345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
45355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
45365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
45375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4539e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_update_maxfd final *p_max_s=%d", maxfd);
45405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return maxfd;
45415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_socket_state
45455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get socket state
45475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns btif_hl_soc_state_t
45495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_soc_state_t btif_hl_get_socket_state(btif_hl_soc_cb_t *p_scb){
4552e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_get_socket_state state=%d", p_scb->state);
45535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_scb->state;
45545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_socket_state
45585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set socket state
45605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
45625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_socket_state(btif_hl_soc_cb_t *p_scb, btif_hl_soc_state_t new_state){
4565e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_set_socket_state %d---->%d", p_scb->state, new_state);
45665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_scb->state = new_state;
45675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_mcl_sockets
45715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Release all sockets on the MCL
45735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
45755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx){
45785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t    *p_scb = NULL;
45795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
45805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t    *p_dcb;
45815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             found= FALSE;
4582e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
45835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
45845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i);
45865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_dcb && p_dcb->in_use && p_dcb->p_scb)
45875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4588e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("found socket for app_idx=%d mcl_id=%d, mdl_idx=%d", app_idx, mcl_idx, i);
45895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state (p_dcb->p_scb, BTIF_HL_SOC_STATE_W4_REL);
45905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = NULL;
45915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
45925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
45935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (found)
45955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
45965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_socket
46005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description release a specified socket
46025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t       *p_scb = NULL;
46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4610e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
4611e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
46125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && p_dcb->p_scb)
46145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = p_dcb->p_scb;
46165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_REL);
46175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb->p_scb = NULL;
46185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
46195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_create_socket
46245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description create a socket
46265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
46285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
46315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
46325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
46335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
46345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 soc_idx;
46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN               status = FALSE;
46365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4637e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
46385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && ((p_scb = (btif_hl_soc_cb_t *)GKI_getbuf((UINT16)sizeof(btif_hl_soc_cb_t)))!=NULL))
46405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (socketpair(AF_UNIX, SOCK_STREAM, 0, p_scb->socket_id) >= 0)
46425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4643e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("socket id[0]=%d id[1]=%d",p_scb->socket_id[0], p_scb->socket_id[1] );
46445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = p_scb;
46455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->app_idx = app_idx;
46465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mcl_idx = mcl_idx;
46475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdl_idx = mdl_idx;
46485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->channel_id = p_dcb->channel_id;
46495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdep_cfg_idx = p_dcb->local_mdep_cfg_idx;
46505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_scb->bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR));
46515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_ADD);
46525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->max_s = p_scb->socket_id[1];
46535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_enqueue(&soc_queue, (void *) p_scb);
46545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_wakeup();
46555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = TRUE;
46565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
46585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_buf((void **)&p_scb);
46615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4664e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s status=%d", __FUNCTION__, status);
46655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
46665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_add_socket_to_set
46705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Add a socket
46725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_add_socket_to_set( fd_set *p_org_set){
46775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
46785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL;
46795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb = NULL;
4680f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t                *p_acb = NULL;
46815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
46825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
46835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
46845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4685e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("entering %s",__FUNCTION__);
46865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
46885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
4690e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_add_socket_to_set first p_scb=0x%x", p_scb);
46915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
46925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_ADD)
46945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
46955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_W4_READ);
46965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                FD_SET(p_scb->socket_id[1], p_org_set);
4697e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("found and set socket_id=%d is_set=%d", p_scb->socket_id[1], FD_ISSET(p_scb->socket_id[1], p_org_set));
46985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx);
46995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
4700f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_acb = BTIF_HL_GET_APP_CB_PTR(p_scb->app_idx);
47015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb && p_dcb)
47025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4703f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    btif_hl_stop_timer_using_handle(p_mcb->mcl_handle);
4704f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    evt_param.chan_cb.app_id = p_acb->app_id;
47055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_mcb->bd_addr, sizeof(BD_ADDR));
47065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_dcb->channel_id;
47075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
47085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_dcb->local_mdep_cfg_idx;
47095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING;
47105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
47115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_CONNECTED_CB,
47125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
47135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
47145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
47155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
47165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
4717e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("next p_scb=0x%x", p_scb);
47185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4721e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("leaving %s",__FUNCTION__);
47225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_socket
47265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description close a socket
47285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
47305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_close_socket( fd_set *p_org_set){
47335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
47345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         element_removed = FALSE;
47355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL ;
4736f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t                *p_acb = NULL ;
47375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
47385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
4739f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                             app_idx;
47405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
47415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4742e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("entering %s",__FUNCTION__);
47435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
47445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
47465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
47475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_REL)
47495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4750e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("app_idx=%d mcl_id=%d, mdl_idx=%d",
47515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
47525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_IDLE);
47535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_scb->socket_id[1] != -1)
47545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
47555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    FD_CLR(p_scb->socket_id[1] , p_org_set);
47565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    shutdown(p_scb->socket_id[1], SHUT_RDWR);
47575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close(p_scb->socket_id[1]);
47585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
47605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_scb->bd_addr, sizeof(BD_ADDR));
47615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_scb->channel_id;
47625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
47635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_scb->mdep_cfg_idx;
47645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING;
47655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
47665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_DISCONNECTED_CB,
47675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
47685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
47695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
47725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
47735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
4774e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("while loop next p_scb=0x%x", p_scb);
47755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
47785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
47795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_IDLE)
47815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
47825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
4783e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("idle socket app_idx=%d mcl_id=%d, mdl_idx=%d p_dcb->in_use=%d",
47845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx, p_dcb->in_use);
47855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                GKI_remove_from_queue((void *)&soc_queue, p_scb);
47865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_free_buf((void **)&p_scb);
47875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->p_scb = NULL;
47885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = TRUE;
47895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
4790e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("element_removed=%d p_scb=0x%x", element_removed, p_scb);
47915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (element_removed)
47925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
47935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = FALSE;
47945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
47955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
47965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
47975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
47985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4799e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("while loop p_scb=0x%x", p_scb);
48005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4802e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("leaving %s",__FUNCTION__);
48035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_callback
48075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select wakup callback to add or close a socket
48095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
48115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_wakeup_callback( fd_set *p_org_set ,  int wakeup_signal){
4815e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("entering %s wakeup_signal=0x%04x",__FUNCTION__, wakeup_signal);
48165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (wakeup_signal == btif_hl_signal_select_wakeup )
48185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_add_socket_to_set(p_org_set);
48205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (wakeup_signal == btif_hl_signal_select_close_connected)
48225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_close_socket(p_org_set);
48245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4825e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("leaving %s",__FUNCTION__);
48265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_monitor_callback
48315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select monitor callback to check pending socket actions
48335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
48355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_monitor_callback( fd_set *p_cur_set , fd_set *p_org_set){
48385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
48395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = NULL;
48405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r;
48415cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_org_set);
48425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4843e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("entering %s",__FUNCTION__);
48445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
48465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
4848e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG(" GKI queue is not empty ");
48495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
48505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
48515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_READ)
48525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (FD_ISSET(p_scb->socket_id[1], p_cur_set))
48545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4855e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("read data");
4856e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("state= BTIF_HL_SOC_STATE_W4_READ");
48575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
48585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb->p_tx_pkt)
48595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
4860e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        BTIF_TRACE_ERROR("Rcv new pkt but the last pkt is still not been sent tx_size=%d", p_dcb->tx_size);
48615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
48625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
48635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->p_tx_pkt =  btif_hl_get_buf (p_dcb->mtu);
48645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb )
48655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
48665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //do
48675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // {
48685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //     r = recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT));
48695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // } while (r == SOCKET_ERROR && errno == EINTR);
48705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((r = (int)recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT)) > 0)
48725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
4873e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("btif_hl_select_monitor_callback send data r =%d", r);
48745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            p_dcb->tx_size = r;
4875e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("btif_hl_select_monitor_callback send data tx_size=%d", p_dcb->tx_size );
48765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlSendData(p_dcb->mdl_handle, p_dcb->tx_size  );
48775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
48785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (r <= 0 )
48805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
4881e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                            BTIF_TRACE_DEBUG("btif_hl_select_monitor_callback  receive failed r=%d",r);
48825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchClose(p_dcb->mdl_handle );
48835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
48845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
48855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
48865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
48885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
48915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4892e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("btif_hl_select_monitor_queue is empty");
48935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4894e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("leaving %s",__FUNCTION__);
48955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_init
48995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description select loop wakup init
49015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup_init(fd_set* set){
4906e3eecc1515a278520665bbf87a91837a5bebec46Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __func__);
4907bf0ce82611b5133d61a0e544ec5bf53b567edfe7git-zhenye.broadcom.com    if (signal_fds[0] == -1 && socketpair(AF_UNIX, SOCK_STREAM, 0, signal_fds) < 0)
49085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4909e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_ERROR("socketpair failed: %s", strerror(errno));
49105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
49115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4913e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_select_wakeup_init signal_fds[0]=%d signal_fds[1]=%d",signal_fds[0], signal_fds[1] );
49145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_SET(signal_fds[0], set);
49155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return signal_fds[0];
49175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup
49225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to wakupo the select loop
49245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void){
49295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_wakeup;
4930e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_select_wakeup");
49315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
49325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_close_connected
49375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to close a socket
49395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_close_connected(void){
49445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_close_connected;
4945e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_select_close_connected");
49465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
49475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_select_thread
49525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send signal to close the thread and then close all signal FDs
49545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_close_select_thread(void)
49595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
49605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = 0;
49615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_exit;
4962e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_signal_select_exit");
49635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result = send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
4964f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta    if (btif_is_enabled())
4965f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta    {
4966f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        /* Wait for the select_thread_id to exit if BT is still enabled
4967f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        and only this profile getting  cleaned up*/
4968f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        if (select_thread_id != -1) {
4969f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta            pthread_join(select_thread_id, NULL);
4970f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta            select_thread_id = -1;
4971f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        }
49725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
49745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_reset
49795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description clear the received signal for the select loop
49815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_reset(void){
49865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_recv = 0;
49875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4988e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_select_wake_reset");
49895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
49905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return(int)sig_recv;
49915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_signaled
49955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description check whether a fd is set or not
49975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_signaled(fd_set* set){
5002e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("btif_hl_select_wake_signaled");
50035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return FD_ISSET(signal_fds[0], set);
50045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_thread_cleanup
50085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  shut down and clean up the select loop
50105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
50125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_thread_cleanup(){
50155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (listen_s != -1)
50165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(listen_s);
50175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (connected_s != -1)
50185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        shutdown(connected_s, SHUT_RDWR);
50205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(connected_s);
50215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    listen_s = connected_s = -1;
5023e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("hl thread cleanup");
50245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_thread
50285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description the select loop
50305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
50325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void *btif_hl_select_thread(void *arg){
50355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    fd_set org_set, curr_set;
50365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r, max_curr_s, max_org_s;
50375cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(arg);
50385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5039e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("entered btif_hl_select_thread");
50405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_ZERO(&org_set);
50415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    max_org_s = btif_hl_select_wakeup_init(&org_set);
5042e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("max_s=%d ", max_org_s);
50435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (;;)
50455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        r = 0;
5047e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("set curr_set = org_set ");
50485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        curr_set = org_set;
50495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_curr_s = max_org_s;
50505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        int ret = select((max_curr_s + 1), &curr_set, NULL, NULL, NULL);
5051e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_DEBUG("select unblocked ret=%d", ret);
50525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (ret == -1)
50535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5054e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("select() ret -1, exit the thread");
50555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_thread_cleanup();
50565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            select_thread_id = -1;
50575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return 0;
50585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
50595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (ret)
50605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5061e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("btif_hl_select_wake_signaled, signal ret=%d", ret);
50625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_select_wake_signaled(&curr_set))
50635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
50645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                r = btif_hl_select_wake_reset();
5065e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_DEBUG("btif_hl_select_wake_signaled, signal:%d", r);
50665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (r == btif_hl_signal_select_wakeup || r == btif_hl_signal_select_close_connected )
50675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
50685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_select_wakeup_callback(&org_set, r);
50695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
50705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if( r == btif_hl_signal_select_exit)
50715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
50725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_thread_cleanup();
5073e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    BTIF_TRACE_DEBUG("Exit hl_select_thread for btif_hl_signal_select_exit");
50745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return 0;
50755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
50765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
50775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_monitor_callback(&curr_set, &org_set);
50795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_org_s = btif_hl_update_maxfd(max_org_s);
50805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
50815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
5082e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("no data, select ret: %d\n", ret);
50835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5084e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("leaving hl_select_thread");
50855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return 0;
50865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function create_thread
50915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description creat a select loop
50935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pthread_t
50955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline pthread_t create_thread(void *(*start_routine)(void *), void * arg){
5098e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("create_thread: entered");
50995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_t thread_attr;
51005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_init(&thread_attr);
51025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
51035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_t thread_id = -1;
51045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( pthread_create(&thread_id, &thread_attr, start_routine, arg)!=0 )
51055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5106e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_ERROR("pthread_create : %s", strerror(errno));
51075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
51085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5109e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("create_thread: thread created successfully");
51105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return thread_id;
51115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_soc_thread_init
51165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL select loop init function.
51185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
51205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_soc_thread_init(void){
5123e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
51245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_init_q(&soc_queue);
51255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    select_thread_id = create_thread(btif_hl_select_thread, NULL);
51265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_load_mdl_config
51305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description load the MDL configuation from the application control block
51325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
51345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_load_mdl_config (UINT8 app_id, UINT8 buffer_size,
51375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 tBTA_HL_MDL_CFG *p_mdl_buf ){
51385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx;
51395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN result = FALSE;
51405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb;
51415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_CFG *p;
51425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
5143e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
51445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
51465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
51475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
51485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0, p=p_mdl_buf; i<buffer_size; i++, p++)
51495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
51505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p, &p_acb->mdl_cfg[i].base, sizeof(tBTA_HL_MDL_CFG));
51515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
51525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = TRUE;
51535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
51545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5155e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("result=%d", result);
51565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
51575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5158