btif_hl.c revision bea4131cac3214e0ad26ea8258e270448f23f1f3
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>
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/sockets.h>
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/log.h>
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h>
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hl.h>
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_common.h"
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_util.h"
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_api.h"
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_api.h"
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_hl.h"
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_storage.h"
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera#define MAX_DATATYPE_SUPPORTED 8
62f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_soc_thread_init(void);
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx);
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t btif_hl_cb;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t *p_btif_hl_cb = &btif_hl_cb;
76f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static variables
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t  bt_hl_callbacks_cb;
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t *bt_hl_callbacks=NULL;
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* signal socketpair to wake up select loop */
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_wakeup = 1;
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_exit = 2;
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_close_connected = 3;
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int listen_s = -1;
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int connected_s = -1;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int select_thread_id = -1;
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int signal_fds[2];
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BUFFER_Q soc_queue;
94f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic int reg_counter;
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void);
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_exit(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    {\
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_WARNING1("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    {\
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_EVENT1("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);
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("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    }
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%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    {
238f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG1("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)
245f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTIF_TRACE_DEBUG3("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];
251f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTIF_TRACE_DEBUG1("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                        {
256f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_TRACE_DEBUG1("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
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%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;
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%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            {
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("%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                {
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG3("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                {
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("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);
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%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    {
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("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);
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%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    {
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("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    {
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("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
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%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
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("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    {
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("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    {
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%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
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("%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
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("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{
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%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{
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%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{
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%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;
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%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
574f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG0("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    {
579f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG0("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        {
622f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG1("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
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%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
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%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:
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("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
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("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        {
700f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG4("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;
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("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;
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("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;
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("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;
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG3("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
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("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
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s app_id=%d ",
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id );
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("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
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG0("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;;
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG2("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
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("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){
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("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
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%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
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%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);
9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("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;
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR0("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;
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR0("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;
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("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    {
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("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    {
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("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
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT5("%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    }
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%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        }
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT6("%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
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT5("%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
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%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
11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("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
11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("local_mdep_role=%d", local_mdep_role);
11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("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
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_idx=%d mcl_idx=%d",app_idx, mcl_idx);
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("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;
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("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                {
12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("p_rec->mdep_cfg[%d].mdep_role=%d",i, p_rec->mdep_cfg[i].mdep_role);
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("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
12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("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** Function        btif_hl_find_local_mdep_id
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Find the local MDEP ID from the MDEP configuration
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_local_mdep_id(UINT8 app_id,
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_HL_MDEP_ROLE local_mdep_role,
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT16 mdep_data_type,
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_HL_MDEP_ID *p_local_mdep_id){
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx;
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  i,j;
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx) )
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0; i< p_acb->sup_feature.num_of_mdeps; i++)
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == local_mdep_role )
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (j=0; j< p_acb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++)
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( p_acb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type == mdep_data_type)
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        found = TRUE;
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_local_mdep_id = p_acb->sup_feature.mdep[i].mdep_id;
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        return found;
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("found=%d local mdep id=%d", found, *p_local_mdep_id );
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdep_cfg_idx
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDEP configuration index using local MDEP_ID
12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic  BOOLEAN btif_hl_find_mdep_cfg_idx(UINT8 app_idx,  tBTA_HL_MDEP_ID local_mdep_id,
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_mdep_cfg_idx){
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE     *p_sup_feature= &p_acb->sup_feature;
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found =FALSE;
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< p_sup_feature->num_of_mdeps; i++)
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1303f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG2("btif_hl_find_mdep_cfg_idx: mdep_id=%d app_idx = %d",
1304f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_sup_feature->mdep[i].mdep_id,app_idx);
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( p_sup_feature->mdep[i].mdep_id == local_mdep_id)
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdep_cfg_idx = i;
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1313f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG5("%s found=%d mdep_idx=%d local_mdep_id=%d app_idx=%d ",
1314f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found,i, local_mdep_id,app_idx);
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using BD address
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx(UINT8 app_idx, BD_ADDR p_bd_addr, UINT8 *p_mcl_idx){
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t  *p_mcb;
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1335bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_mcl_idx = 0;
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, i);
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->in_use &&
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (!memcmp (p_mcb->bd_addr, p_bd_addr, BD_ADDR_LEN)))
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mcl_idx = i;
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d idx=%d",__FUNCTION__, found, i);
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_init
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL initialization function.
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init(void){
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_app_id();
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_channel_id();
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_disable
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Disable initialization function.
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_disable(void){
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_btif_hl_cb->state != BTIF_HL_STATE_DISABLING) &&
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_btif_hl_cb->state != BTIF_HL_STATE_DISABLED))
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_DISABLING);
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDisable();
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_no_active_app
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find whether or not  any APP is still in use
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_is_no_active_app(void){
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN no_active_app = TRUE;
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use)
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            no_active_app = FALSE;
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s no_active_app=%d  ", __FUNCTION__, no_active_app );
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return no_active_app;
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_free_app_idx
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free an application control block
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_free_app_idx(UINT8 app_idx){
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((app_idx < BTA_HL_NUM_APPS) && btif_hl_cb.acb[app_idx].in_use )
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_cb.acb[app_idx].in_use = FALSE;
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset (&btif_hl_cb.acb[app_idx], 0, sizeof(btif_hl_app_cb_t));
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set HL state
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_set_state(btif_hl_state_t state){
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("btif_hl_set_state:  %d ---> %d ", p_btif_hl_cb->state, state);
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_btif_hl_cb->state = state;
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get HL state
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      btif_hl_state_t
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_hl_state_t btif_hl_get_state(void){
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_get_state:  %d   ", p_btif_hl_cb->state);
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_btif_hl_cb->state;
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_data_type_idx
14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the index in the data type table
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN  btif_hl_find_data_type_idx(UINT16 data_type, UINT8 *p_idx){
14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< BTIF_HL_DATA_TABLE_SIZE; i++ )
14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_type_table[i].data_type == data_type)
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_idx= i;
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d, data_type=0x%x idx=%d", __FUNCTION__, found, data_type, i);
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
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** Function      btif_hl_get_max_tx_apdu_size
14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum TX APDU size for the specified data type and
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_tx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 idx;
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_tx_apdu_size =0;
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_tx_apdu_size;
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_rx_apdu_size;
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s mdep_role=%d data_type=0x%4x size=%d",
15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_tx_apdu_size);
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_tx_apdu_size;
15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
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_get_max_rx_apdu_size
15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum RX APDU size for the specified data type and
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_rx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  idx;
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_rx_apdu_size =0;
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_rx_apdu_size;
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_tx_apdu_size;
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s mdep_role=%d data_type=0x%4x size=%d",
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_rx_apdu_size);
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_rx_apdu_size;
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_if_channel_setup_pending
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_mdep_role(bthl_mdep_role_t mdep, tBTA_HL_MDEP_ROLE *p){
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (mdep)
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SOURCE:
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SOURCE;
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SINK:
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SINK;
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
1597bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie            *p = BTA_HL_MDEP_ROLE_SOURCE;
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s status=%d bta_mdep_role=%d (%d:btif)",
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p, mdep);
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_bta_channel_type
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description convert bthl channel type to BTA DCH channel type
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_channel_type(bthl_channel_type_t channel_type, tBTA_HL_DCH_CFG *p){
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (channel_type)
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_RELIABLE:
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_RELIABLE;
16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_STREAMING:
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_STREAMING;
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_ANY:
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_NO_PREF;
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s status = %d BTA DCH CFG=%d (1-rel 2-strm",
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p);
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_app_id
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next applcation id
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_next_app_id(){
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 next_app_id = btif_hl_cb.next_app_id;
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id++;
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return next_app_id;
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_channel_id
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next channel id
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_hl_get_next_channel_id(UINT8 app_id){
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 next_channel_id = btif_hl_cb.next_channel_id;
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int channel_id;
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id++;
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    channel_id = (app_id << 16) + next_channel_id;
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s channel_id=0x%08x, app_id=0x%02x next_channel_id=0x%04x", __FUNCTION__,
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      channel_id, app_id,  next_channel_id);
16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return channel_id;
16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_app_id
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get the applicaiton id associated with the channel id
16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_app_id(int channel_id){
16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_id =(UINT8) (channel_id >> 16);
16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s channel_id=0x%08x, app_id=0x%02x ", __FUNCTION__,channel_id, app_id);
16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return app_id;
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_app_id
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the application id
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_app_id(void){
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id = 1;
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_channel_id
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the channel id
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_channel_id(void){
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id = 1;
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1714f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx_using_handle
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1716f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the applicaiton index using handle
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1721f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle,
1722f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                          UINT8 *p_app_idx){
1723f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
1724f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1726f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1728f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
1729f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_handle == app_handle))
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1731f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
1732f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
1733f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1737f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_EVENT4("%s status=%d handle=%d app_idx=%d ",
1738f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found, app_handle , i);
1739f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
1740f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1745f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx_using_app_id
17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1747f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the applicaiton index using app_id
17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1752f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_app_id(UINT8 app_id,
17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_app_idx){
17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1757bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use &&
1761f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_id == app_id))
17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_app_idx = i;
17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1769f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_EVENT4("%s found=%d app_id=%d app_idx=%d ",
1770f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, found, app_id , i);
17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx_using_handle
17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using handle
17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle,
17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT8 *p_app_idx, UINT8 *p_mcl_idx){
17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb;
17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         found=FALSE;
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j;
17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<BTA_HL_NUM_APPS; i++)
17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1795f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
1796f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG3("btif_hl_find_mcl_idx_using_handle:app_idx=%d,"
1797f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                "mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->mcb[j].in_use &&
17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_acb->mcb[j].mcl_handle == mcl_handle))
18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_app_idx = i;
18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_mcl_idx = j;
18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d app_idx=%d mcl_idx=%d",__FUNCTION__,
18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      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_mdl_idx_using_mdl_id
18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1817f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the mdl index using 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_mcl_idx_using_mdl_id( UINT8 mdl_id,UINT8 mcl_handle,
1823f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 *p_app_idx, UINT8 *p_mcl_idx){
1824f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1825f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t  *p_mcb;
1826f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1827f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j,x;
18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1829f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1831f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
1832f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1834f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
1835f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
1836f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1837f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = &p_acb->mcb[j];
1838f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTIF_TRACE_DEBUG1("btif_hl_find_mcl_idx_using_mdl_id: mcl handle found j =%d",j);
1839f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    for (x=0; x < BTA_HL_NUM_MDLS_PER_MCL ; x ++)
1840f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
1841f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        if (p_mcb->mdl[x].in_use && p_mcb->mdl[x].mdl_id == mdl_id)
1842f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
1843f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_TRACE_DEBUG1("btif_hl_find_mcl_idx_using_mdl_id:found x =%d",x);
1844f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            found = TRUE;
1845f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            *p_app_idx = i;
1846f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            *p_mcl_idx = j;
1847f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
1848f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
1849f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
1850f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1853f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG4("%s found=%d app_idx=%d mcl_idx=%d",__FUNCTION__,
1854f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, i, j);
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1860f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_mcl_idx_using_deleted_mdl_id
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1862f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the app index deleted_mdl_id
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1867f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_deleted_mdl_id( UINT8 mdl_id,
1868f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 *p_app_idx){
1869f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1870f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
18715cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UINT8 i;
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1873f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1875f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
18765cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        if (p_acb->delete_mdl.active) {
18775cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            BTIF_TRACE_DEBUG3("btif_hl_find_app_idx_using_deleted_mdl_id: app_idx=%d,"
18785cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen                              "mdl_id=%d mcl_handle=%d",i,mdl_id,p_acb->mcb[i].mcl_handle);
18795cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        }
18805cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        if (p_acb->delete_mdl.active &&
18815cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            (p_acb->delete_mdl.mdl_id == mdl_id))
18825cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        {
18835cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            found = TRUE;
18845cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            *p_app_idx = i;
18855cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen            break;
18865cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen        }
18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1888f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d",__FUNCTION__,
1889f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, i);
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1895f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_stop_timer_using_handle
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1897f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean control channel cb using handle
18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1899f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1902f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_stop_timer_using_handle( tBTA_HL_MCL_HANDLE mcl_handle){
1903f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1904f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1905f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1907f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1909f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
1910f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1912f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
1913f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
1914f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1915f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
1916f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1923f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_mcl_idx_using_app_idx
19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1925f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the MCL index using handle
19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1930f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_mcl_idx_using_app_idx( tBTA_HL_MCL_HANDLE mcl_handle,
1931f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                           UINT8 p_app_idx, UINT8 *p_mcl_idx){
1932f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1933f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN         found=FALSE;
1934f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1936f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    p_acb =BTIF_HL_GET_APP_CB_PTR(p_app_idx);
1937f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (j=0; j < BTA_HL_NUM_MCLS ; j++)
19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1939f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_acb->mcb[j].in_use &&
1940f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (p_acb->mcb[j].mcl_handle == mcl_handle))
19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
1943f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mcl_idx = j;
19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1947f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%dmcl_idx=%d",__FUNCTION__,
1948f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      found, j);
19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1954f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_clean_mdls_using_app_idx
19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1956f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean dch cpntrol bloack using app_idx
19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1958f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1961f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agheravoid btif_hl_clean_mdls_using_app_idx( UINT8 app_idx){
1962f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
1963f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t  *p_mcb;
1964f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t  *p_dcb;
1965f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j,x,y;
1966f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_bdaddr_t     bd_addr;
19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1968f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
1969f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1971f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
1972f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
1973f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = &p_acb->mcb[j];
1974f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTIF_TRACE_DEBUG1("btif_hl_find_mcl_idx_using_mdl_id: mcl handle found j =%d",j);
1975f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    for (x=0; x < BTA_HL_NUM_MDLS_PER_MCL ; x ++)
1976f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
1977f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        if (p_mcb->mdl[x].in_use)
1978f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
1979f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, j,x);
1980f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            btif_hl_release_socket(app_idx,j,x);
1981f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            for (y=0; y<6; y++)
1982f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            {
1983f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                bd_addr.address[y] = p_mcb->bd_addr[y];
1984f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            }
1985f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  p_acb->app_id,
1986f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               &bd_addr, p_dcb->local_mdep_cfg_idx,
1987f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_dcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
1988f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            btif_hl_clean_mdl_cb(p_dcb);
1989f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
1990f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    BTA_HlCchClose(p_mcb->mcl_handle);
1991f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_TRACE_DEBUG1("remote DCH close success mdl_idx=%d", x);
1992f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
1993f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
1994f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2000f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx
20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2002f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the application index using application ID
20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2004f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2007f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx(UINT8 app_id, UINT8 *p_app_idx){
2008f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2009f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2011f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
2012f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2014f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
2015f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].app_id == app_id))
2016f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2017f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2018f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
2019f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
2020f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2021f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
2022f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i );
2023f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2024f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
2025f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2027f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2028f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2029f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_app_idx
2030f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2031f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find the application index using application ID
2032f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2033f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
2034f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2035f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2036f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_app_idx_using_mdepId(UINT8 mdep_id, UINT8 *p_app_idx){
2037f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2038f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
2039f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2040bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    *p_app_idx = 0;
2041f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2043f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG1("btif_hl_find_app_idx_using_mdepId: MDEP-ID = %d",
2044f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_cb.acb[i].sup_feature.mdep[0].mdep_id);
2045f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use &&
2046f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            (btif_hl_cb.acb[i].sup_feature.mdep[0].mdep_id == mdep_id))
20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2048f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2049f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_app_idx = i;
2050f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2053f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i );
20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2057f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2060f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_mdl_idx
20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2062f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use MDL index
20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2064f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2067f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_avail_mdl_idx(UINT8 app_idx, UINT8 mcl_idx,
2068f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                   UINT8 *p_mdl_idx){
2069f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2070f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2071f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2073f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2075f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!p_mcb->mdl[i].in_use)
20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2077f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_clean_mdl_cb(&p_mcb->mdl[i]);
20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
2079f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mdl_idx = i;
20805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2084f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d idx=%d",__FUNCTION__, found, i);
20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2090f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_mcl_idx
20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2092f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use MDL index
20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2094f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2097f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN btif_hl_find_avail_mcl_idx(UINT8 app_idx, UINT8 *p_mcl_idx){
2098f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found=FALSE;
2099f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
2100f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2101f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
2102f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2103f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_cb.acb[app_idx].mcb[i].in_use)
2104f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2105f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2106f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_mcl_idx = i;
2107f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
2108f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2109f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
2110f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d mcl_idx=%d", __FUNCTION__, found, i);
2111f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
2112f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2114f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2115f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2116f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_find_avail_app_idx
2117f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2118f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Find a not in-use APP index
2119f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2120f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
2121f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2122f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2123f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic BOOLEAN btif_hl_find_avail_app_idx(UINT8 *p_idx){
2124f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN found = FALSE;
2125f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i;
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2127f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
21285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2129f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_cb.acb[i].in_use)
2130f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2131f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            found = TRUE;
2132f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            *p_idx = i;
2133f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            break;
2134f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2135f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2137f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i);
2138f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return found;
2139f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2142f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2143f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2144f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_dereg_cfm
2145f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2146f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the de-registration confirmation
2147f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2148f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
2149f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2150f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2151f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_dereg_cfm(tBTA_HL *p_data)
21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2153f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera{
2154f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t        *p_acb;
2155f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx;
2156f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                     app_id = 0;
2157f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bthl_app_reg_state_t    state = BTHL_APP_REG_STATE_DEREG_SUCCESS;
2158f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t             status            = BT_STATUS_SUCCESS;
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2160f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s de-reg status=%d app_handle=%d", __FUNCTION__,
2161f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_data->dereg_cfm.status, p_data->dereg_cfm.app_handle);
21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2163f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_app_idx_using_app_id(p_data->dereg_cfm.app_id, &app_idx))
2164f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2165f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
2166f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        app_id = (int) p_acb->app_id;
2167f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_data->dereg_cfm.status == BTA_HL_STATUS_OK)
2168f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2169f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_clean_mdls_using_app_idx(app_idx);
2170f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memset(p_acb, 0,sizeof(btif_hl_app_cb_t));
21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2172f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        else
2173f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            state = BTHL_APP_REG_STATE_DEREG_FAILED;
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2175f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG2("call reg state callback app_id=%d state=%d", app_id, state);
2176f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, app_id, state );
21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2178f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_is_no_active_app())
2179f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2180f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            btif_hl_disable();
2181f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2182f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_reg_cfm
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the registration confirmation
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_cfm(tBTA_HL *p_data){
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t       *p_acb;
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                  app_idx;
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t   state = BTHL_APP_REG_STATE_REG_SUCCESS;
21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t            bt_status;
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s reg status=%d app_handle=%d", __FUNCTION__, p_data->reg_cfm.status, p_data->reg_cfm.app_handle);
22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(p_data->reg_cfm.app_id, &app_idx))
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->reg_cfm.status == BTA_HL_STATUS_OK)
22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->app_handle = p_data->reg_cfm.app_handle;
22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_app_idx(app_idx);
2212f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            reg_counter--;
22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            state = BTHL_APP_REG_STATE_REG_FAILED;
22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG3("%s call reg state callback app_id=%d reg state=%d", __FUNCTION__,  p_data->reg_cfm.app_id, state);
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, ((int) p_data->reg_cfm.app_id), state );
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_sdp_info_ind
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the SDP info indication
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_sdp_info_ind(tBTA_HL *p_data)
22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx;
22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->sdp_info_ind.app_handle, &app_idx))
22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_acb->sdp_info_ind, &p_data->sdp_info_ind, sizeof(tBTA_HL_SDP_INFO_IND));
22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_chan_cb_state
22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set the channel callback state
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_chan_cb_state(UINT8 app_idx, UINT8 mcl_idx, btif_hl_chan_cb_state_t state){
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_chan_cb_state_t cur_state = p_pcb->cb_state;
22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (cur_state != state)
22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb->cb_state = state;
22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG3("%s state %d--->%d",__FUNCTION__, cur_state, state);
22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_destroyed_cb
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send the channel destroyed callback
22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_destroyed_cb(btif_hl_app_cb_t        *p_acb ){
22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t     bd_addr;
22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int             app_id = (int) btif_hl_get_app_id(p_acb->delete_mdl.channel_id);
22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_acb->delete_mdl.bd_addr);
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("call channel state callback channel_id=0x%08x mdep_cfg_idx=%d, state=%d fd=%d",p_acb->delete_mdl.channel_id,
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_acb->delete_mdl.mdep_cfg_idx, BTHL_CONN_STATE_DESTROYED, 0);
22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_acb->delete_mdl.mdep_cfg_idx,
22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_acb->delete_mdl.channel_id, BTHL_CONN_STATE_DESTROYED, 0 );
22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_disconnecting_cb
22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnecting callback
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_disconnecting_cb(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb = BTIF_HL_GET_MDL_CB_PTR( app_idx,  mcl_idx, mdl_idx);
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t        *p_scb = p_dcb->p_scb;
22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t             bd_addr;
23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                     app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_scb->bd_addr);
23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d, state=%d fd=%d",p_scb->channel_id,
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_scb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0]);
23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_scb->mdep_cfg_idx,
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_scb->channel_id, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0] );
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_connecting_cb
23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel connecting callback
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_connecting_cb(UINT8 app_idx, UINT8 mcl_idx){
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                 bd_addr;
23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         app_id = (int) btif_hl_get_app_id(p_pcb->channel_id);
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use && p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG4("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_display_bt_bda(&bd_addr);
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           &bd_addr, p_pcb->mdep_cfg_idx,
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_chan_cb_state(app_idx, mcl_idx, BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING);
23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_disconnected_cb
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnected callback
23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_disconnected_cb(UINT8 app_idx, UINT8 mcl_idx){
23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                 bd_addr;
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         app_id = (int) btif_hl_get_app_id(p_pcb->channel_id);
23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s p_pcb->in_use=%d",__FUNCTION__, p_pcb->in_use);
23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%p_pcb->cb_state=%d",p_pcb->cb_state);
23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("call channel state callback  channel_id=0x%08x mdep_cfg_idx=%d state=%d fd=%d",p_pcb->channel_id,
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_pcb(p_pcb);
23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_sdp_query_cfm
23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the SDP query confirmation
23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_sdp_query_cfm(tBTA_HL *p_data){
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb;
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP                     *p_sdp;
24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CCH_OPEN_PARAM          open_param;
24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           app_idx, mcl_idx, sdp_idx = 0;
24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           num_recs, i, num_mdeps, j;
24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cch_op_t                old_cch_oper;
24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         status =FALSE;
24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t     *p_pcb;
24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sdp = p_data->sdp_query_cfm.p_sdp;
24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_recs = p_sdp->num_recs;
24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("num of SDP records=%d",num_recs);
24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<num_recs; i++)
24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG3("rec_idx=%d ctrl_psm=0x%x data_psm=0x%x",
24185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          (i+1),p_sdp->sdp_rec[i].ctrl_psm, p_sdp->sdp_rec[i].data_psm);
24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("MCAP supported procedures=0x%x",p_sdp->sdp_rec[i].mcap_sup_proc);
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_mdeps = p_sdp->sdp_rec[i].num_mdeps;
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("num of mdeps =%d",num_mdeps);
24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< num_mdeps; j++)
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("mdep_idx=%d mdep_id=0x%x data_type=0x%x mdep_role=0x%x",
24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (j+1),
24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_id,
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].data_type,
24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_role );
24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2432f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_app_idx_using_app_id(p_data->sdp_query_cfm.app_id, &app_idx))
24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2434f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2436f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
2437f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2438f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2439f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (p_mcb->cch_oper != BTIF_HL_CCH_OP_NONE)
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2441f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memcpy(&p_mcb->sdp, p_sdp, sizeof(tBTA_HL_SDP));
2442f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    old_cch_oper = p_mcb->cch_oper;
2443f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->cch_oper = BTIF_HL_CCH_OP_NONE;
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (old_cch_oper)
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_CCH_OP_MDEP_FILTERING:
2448f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            status = btif_hl_find_sdp_idx_using_mdep_filter(app_idx,
2449f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                                    mcl_idx, &sdp_idx);
2450f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
2451f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        default:
2452f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            break;
2453f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
2454f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2455f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    if (status)
2456f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
2457f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->sdp_idx       = sdp_idx;
2458f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->valid_sdp_idx = TRUE;
2459f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_mcb->ctrl_psm      = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm;
2460f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2461f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        switch (old_cch_oper)
2462f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        {
2463f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            case BTIF_HL_CCH_OP_MDEP_FILTERING:
2464f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
2465f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                if (p_pcb->in_use)
24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                {
2467f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    if (!p_pcb->abort_pending)
24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    {
2469f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        switch (p_pcb->op)
2470f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        {
2471f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            case BTIF_HL_PEND_DCH_OP_OPEN:
2472f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
2473f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                break;
2474f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
2475f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                            default:
2476f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                break;
2477f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        }
2478f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        open_param.ctrl_psm = p_mcb->ctrl_psm;
2479f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        bdcpy(open_param.bd_addr, p_mcb->bd_addr);
2480f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        open_param.sec_mask =
2481f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
2482f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        BTA_HlCchOpen(p_acb->app_id,p_acb->app_handle, &open_param);
2483f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    }
2484f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    else
2485f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    {
2486f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                        BTIF_TRACE_DEBUG0("channel abort pending");
24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    }
24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                }
2489f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2491f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            case BTIF_HL_CCH_OP_DCH_OPEN:
2492f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                status = btif_hl_proc_pending_op(app_idx,mcl_idx);
2493f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2495f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            default:
2496f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                BTIF_TRACE_ERROR1("Invalid CCH oper %d", old_cch_oper);
2497f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                break;
2498f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        }
2499f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    }
2500f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    else
2501f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    {
2502f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        BTIF_TRACE_ERROR0("Can not find SDP idx discard CCH Open request");
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_ind
25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open indication
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_open_ind(tBTA_HL *p_data)
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
2525f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                     i;
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
2528f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for(i=0; i<BTA_HL_NUM_APPS; i++)
25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2530f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_cb.acb[i].in_use)
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2532f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (!btif_hl_find_mcl_idx(i, p_data->cch_open_ind.bd_addr, &mcl_idx))
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2534f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_avail_mcl_idx(i, &mcl_idx))
2535f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
2536f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(i, mcl_idx);
2537f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memset(p_mcb, 0, sizeof(btif_hl_mcl_cb_t));
2538f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->in_use = TRUE;
2539f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->is_connected = TRUE;
2540f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->mcl_handle = p_data->cch_open_ind.mcl_handle;
2541f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    bdcpy(p_mcb->bd_addr, p_data->cch_open_ind.bd_addr);
2542f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    btif_hl_start_cch_timer(i, mcl_idx);
2543f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
2544f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
2545f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            else
2546f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2547f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_ERROR0("The MCL already exist for cch_open_ind");
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_pending_op
25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the pending dch operation.
25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_proc_pending_op(UINT8 app_idx, UINT8 mcl_idx)
25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = FALSE;
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM      dch_open;
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_ID              mdl_id;
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_RECONNECT_PARAM reconnect_param;
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        switch (p_pcb->op)
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_OPEN:
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!p_pcb->abort_pending)
25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("op BTIF_HL_PEND_DCH_OP_OPEN");
25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.ctrl_psm = p_mcb->ctrl_psm;
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_mdep_id = p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_id;
25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role,
25875738f83aeb59361a0a2eda2460113f6dc919427The 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 ))
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = p_acb->channel_type[p_pcb->mdep_cfg_idx];
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            && !btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx))
25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("dch_open.local_cfg=%d  ", dch_open.local_cfg);
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_send_setup_connecting_cb(app_idx,mcl_idx);
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (!btif_hl_is_reconnect_possible(app_idx, mcl_idx, p_pcb->mdep_cfg_idx, &dch_open, &mdl_id ))
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
2601f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                            BTIF_TRACE_DEBUG1("Issue DCH open, mcl_handle=%d",p_mcb->mcl_handle);
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchOpen(p_mcb->mcl_handle, &dch_open);
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.ctrl_psm = p_mcb->ctrl_psm;
26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.mdl_id = mdl_id;;
26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG2("Issue Reconnect ctrl_psm=0x%x mdl_id=0x%x",reconnect_param.ctrl_psm, reconnect_param.mdl_id);
26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchReconnect(p_mcb->mcl_handle, &reconnect_param);
26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = TRUE;
26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = TRUE;
26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            default:
26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_cfm
26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open confirmation
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_cch_open_cfm(tBTA_HL *p_data)
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx;
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM   dch_open;
26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2652f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_app_idx_using_app_id(p_data->cch_open_cfm.app_id, &app_idx))
26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("app_idx=%d", app_idx);
26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2660f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG2("mcl_idx=%d, mcl_handle=%d", mcl_idx,p_data->cch_open_cfm.mcl_handle);
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->mcl_handle = p_data->cch_open_cfm.mcl_handle;
26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->is_connected = TRUE;
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = btif_hl_proc_pending_op(app_idx, mcl_idx);
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (status)
26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_start_cch_timer(app_idx, mcl_idx);
26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2672f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
2673f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2674f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_clean_mcb_using_handle
2675f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2676f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  clean control channel cb using handle
2677f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2678f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      void
2679f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
2680f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
2681f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_clean_mcb_using_handle( tBTA_HL_MCL_HANDLE mcl_handle){
2682f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
2683f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
2684f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2685f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
2686f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
2687f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
2688f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
2689f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
2690f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
2691f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG3("btif_hl_find_mcl_idx_using_handle: app_idx=%d,"
2692f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    "mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
2693f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
2694f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
2695f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
2696f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
2697f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_release_mcl_sockets(i, j);
2698f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
2699f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
2700f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
2701f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
2702f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
2703f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_ind
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close indication
27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_ind(tBTA_HL *p_data)
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2720f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_cfm
27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close confirmation
27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_cfm(tBTA_HL *p_data)
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2738f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_create_ind
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the MDL create indication
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_create_ind(tBTA_HL *p_data){
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP            *p_mdep;
2754f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx, orig_app_idx, mcl_idx, mdep_cfg_idx;
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 first_reliable_exist;
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 success = TRUE;
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CFG         rsp_cfg = BTA_HL_DCH_CFG_UNKNOWN;
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP  rsp_code = BTA_HL_DCH_CREATE_RSP_CFG_REJ;
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP_PARAM create_rsp_param;
27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2763f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera// Find the correct app_idx based on the mdep_id;
2764f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_create_ind.local_mdep_id,&orig_app_idx);
2765f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx(orig_app_idx, p_data->dch_create_ind.bd_addr, &mcl_idx))
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2767f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(orig_app_idx);
2768f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =BTIF_HL_GET_MCL_CB_PTR(orig_app_idx, mcl_idx);
27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2770f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_mdep_cfg_idx(orig_app_idx, p_data->dch_create_ind.local_mdep_id, &mdep_cfg_idx))
27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdep = &(p_acb->sup_feature.mdep[mdep_cfg_idx]);
2773f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            first_reliable_exist = btif_hl_is_the_first_reliable_existed(orig_app_idx, mcl_idx);
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            switch (p_mdep->mdep_cfg.mdep_role)
27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SOURCE:
27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_data->dch_create_ind.cfg == BTA_HL_DCH_CFG_NO_PREF)
27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (first_reliable_exist)
27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = p_acb->channel_type[mdep_cfg_idx];
27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = BTA_HL_DCH_CFG_RELIABLE;
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SINK:
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2793f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTIF_TRACE_DEBUG0("btif_hl_proc_create_ind:BTA_HL_MDEP_ROLE_SINK");
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_RELIABLE) ||
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (first_reliable_exist && (p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_STREAMING)))
27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_cfg = p_data->dch_create_ind.cfg;
2799f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        BTIF_TRACE_DEBUG1("btif_hl_proc_create_ind:BTA_HL_MDEP_ROLE_SINK cfg = %d",rsp_cfg);
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                default:
28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        success = FALSE;
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (success)
28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("create response rsp_code=%d rsp_cfg=%d", rsp_code, rsp_cfg );
28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.local_mdep_id = p_data->dch_create_ind.local_mdep_id;
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.mdl_id = p_data->dch_create_ind.mdl_id;
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.rsp_code = rsp_code;
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.cfg_rsp = rsp_cfg;
28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchCreateRsp(p_mcb->mcl_handle, &create_rsp_param);
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_ind
28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH open indication
28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_open_ind(tBTA_HL *p_data)
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
28385cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UINT8                    orig_app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    dc_cfg;
28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN close_dch = FALSE;
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2844f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
2845f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_open_ind.local_mdep_id,&orig_app_idx);
2846f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2847f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_open_ind.mcl_handle, orig_app_idx, &mcl_idx ))
28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2849f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(orig_app_idx);
2850f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =BTIF_HL_GET_MCL_CB_PTR(orig_app_idx, mcl_idx);
28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2852f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (btif_hl_find_avail_mdl_idx(orig_app_idx, mcl_idx, &mdl_idx))
28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2854f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            p_dcb = BTIF_HL_GET_MDL_CB_PTR(orig_app_idx, mcl_idx, mdl_idx);
28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2856f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mdep_cfg_idx(orig_app_idx, p_data->dch_open_ind.local_mdep_id, &mdep_cfg_idx))
28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           =  p_data->dch_open_ind.mdl_handle;
28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_ind.local_mdep_id;
28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_ind.mdl_id;
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable = p_data->dch_open_ind.first_reliable;
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_ind.mtu;
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2868f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if(btif_hl_find_channel_id_using_mdl_id(orig_app_idx,p_dcb->mdl_id , &p_dcb->channel_id))
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
28715cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen                                        orig_app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
2872f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    if (!btif_hl_create_socket(orig_app_idx, mcl_idx, mdl_idx))
28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_ERROR0("Unable to create socket");
28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        close_dch = TRUE;
28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR1("Unable find channel id for mdl_id=0x%x", p_dcb->mdl_id  );
28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_cfm
29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close confirmation
29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_open_cfm(tBTA_HL *p_data)
29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
2926f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_open_cfm.local_mdep_id,&app_idx);
2927f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
2928f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_open_cfm.mcl_handle, app_idx, &mcl_idx ))
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_open_cfm.local_mdep_id, &mdep_cfg_idx))
29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_open_cfm.mdl_handle;
29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_cfm.local_mdep_id;
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_cfm.mdl_id;
29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_cfm.dch_mode;
29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_open_cfm.first_reliable;
29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_cfm.mtu;
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_cfm
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_reconnect_cfm(tBTA_HL *p_data)
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3002f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_reconnect_cfm.local_mdep_id,&app_idx);
3003f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3004f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_reconnect_cfm.mcl_handle, app_idx, &mcl_idx ))
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
30095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_cfm.local_mdep_id, &mdep_cfg_idx))
30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
30175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_cfm.mdl_handle;
30185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
30195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_cfm.local_mdep_id;
30205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_cfm.mdl_id;
30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_cfm.dch_mode;
30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_cfm.first_reliable;
30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_cfm.mtu;
30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
30385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
30425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
30485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_reconnect_cfm.mdl_handle);
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_ind
30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_reconnect_ind(tBTA_HL *p_data)
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb;
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb;
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb;
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx, mdep_cfg_idx, dc_cfg;
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 close_dch = FALSE;
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3078f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    // Find the correct app_idx based on the mdep_id;
3079f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_find_app_idx_using_mdepId(p_data->dch_reconnect_ind.local_mdep_id,&app_idx);
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3081f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mcl_idx_using_app_idx(p_data->dch_reconnect_ind.mcl_handle, app_idx, &mcl_idx ))
30825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
3084f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG2("btif_hl_proc_dch_reconnect_ind: app_idx = %d, mcl_idx = %d",
3085f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                app_idx, mcl_idx);
30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
30875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
30895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
30915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_ind.local_mdep_id, &mdep_cfg_idx))
30935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
30955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_ind.mdl_handle;
30965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
30975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_ind.local_mdep_id;
30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_ind.mdl_id;
30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_ind.first_reliable;
31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_ind.mtu;
31035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = btif_hl_get_next_channel_id(p_acb->app_id);
31045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
31065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
31105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
31205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
31215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
31235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_reconnect_ind.mdl_handle);
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_ind
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close indication
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_ind(tBTA_HL *p_data)
31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
3146f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t         *p_mcb;
31475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
31485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
31505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_ind.mdl_handle,
31515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &app_idx, &mcl_idx, &mdl_idx ))
31525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
31545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_socket(app_idx,mcl_idx, mdl_idx);
3155f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
3156f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =  BTIF_HL_GET_MCL_CB_PTR(app_idx,mcl_idx);
31575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
3158f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("remote DCH close success mdl_idx=%d", mdl_idx);
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_cfm
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect confirmation
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_cfm(tBTA_HL *p_data)
31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
3177f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mcl_cb_t         *p_mcb;
31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
31815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_cfm.mdl_handle,
31825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &app_idx, &mcl_idx, &mdl_idx ))
31835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
31855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_socket(app_idx,mcl_idx,mdl_idx);
31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
3187f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mcb =  BTIF_HL_GET_MCL_CB_PTR(app_idx,mcl_idx);
3188f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (!btif_hl_num_dchs_in_use(p_mcb->mcl_handle))
31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
3190f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG1(" local DCH close success mdl_idx=%d", mdl_idx);
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_ind
31985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort indicaiton
32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
32025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_ind(tBTA_HL_MCL_HANDLE mcl_handle){
32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
3208f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
3209f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
3210f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3211f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3213f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
3214f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
3215f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
3216f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
3217f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG3("btif_hl_find_mcl_idx_using_handle: app_idx=%d,mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
3218f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
3219f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
3220f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
3221f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
3222f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
3223f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
3224f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
3225f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
32265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_cfm
32325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort confirmation
32345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
32365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_cfm(tBTA_HL_MCL_HANDLE mcl_handle){
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
3242f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t  *p_acb;
3243f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8 i,j;
32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3245f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<BTA_HL_NUM_APPS; i++)
32465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3247f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
3248f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3250f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use)
3251f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG3("btif_hl_find_mcl_idx_using_handle: app_idx=%d,mcl_idx =%d mcl_handle=%d",i,j,p_acb->mcb[j].mcl_handle);
3252f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_acb->mcb[j].in_use &&
3253f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                (p_acb->mcb[j].mcl_handle == mcl_handle))
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3255f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_stop_cch_timer(i, j);
3256f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_send_setup_disconnected_cb(i, j);
3257f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                btif_hl_clean_mcl_cb(i, j);
32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3261f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3262f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
3263f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3264f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
3265f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3266f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_send_data_cfm
3267f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3268f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the send data confirmation
3269f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3270f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
3271f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3272f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
3273f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_send_data_cfm(tBTA_HL_MDL_HANDLE mdl_handle,
3274f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                       tBTA_HL_STATUS status){
3275f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx,mcl_idx, mdl_idx;
3276f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t         *p_dcb;
32775cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(status);
3278f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3279f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
3280f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mdl_idx_using_handle(mdl_handle,
3281f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                          &app_idx, &mcl_idx, &mdl_idx ))
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3283f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3284f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
3285f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG1("send success free p_tx_pkt tx_size=%d", p_dcb->tx_size);
3286f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb->tx_size = 0;
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3288f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3290f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
3291f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3292f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         btif_hl_proc_dch_cong_ind
3293f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3294f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Process the DCH congestion change indication
3295f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3296f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns          Nothing
3297f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
3298f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
3299f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic void btif_hl_proc_dch_cong_ind(tBTA_HL *p_data)
3300f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3301f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera{
3302f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t         *p_dcb;
3303f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8                   app_idx, mcl_idx, mdl_idx;
3304f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
3305f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG0("btif_hl_proc_dch_cong_ind");
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3308f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_cong_ind.mdl_handle, &app_idx, &mcl_idx, &mdl_idx))
3309f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
3310f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3311f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_dcb->cong = p_data->dch_cong_ind.cong;
3312f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33175cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen** Function         btif_hl_proc_reg_request
33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process registration request
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_request(UINT8 app_idx, UINT8  app_id,
33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_REG_PARAM *p_reg_param,
33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_CBACK *p_cback){
33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status= BT_STATUS_SUCCESS;
33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t *p_data;
33305cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_cback);
33315cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
3332f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG3("%s app_idx=%d app_id=%d", __FUNCTION__, app_idx, app_id);
33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3334f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(reg_counter >1)
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3336f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTIF_TRACE_DEBUG0("btif_hl_proc_reg_request: calling uPDATE");
3337f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTA_HlUpdate(app_id, p_reg_param,TRUE, btif_hl_cback);
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3339f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    else
3340f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTA_HlRegister(app_id, p_reg_param, btif_hl_cback);
33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cb_evt
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL callback events
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cb_evt(UINT16 event, char* p_param){
33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                *p_data = (btif_hl_evt_cb_t *)p_param;
33565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                     bd_addr;
33575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_channel_state_t            state=BTHL_CONN_STATE_DISCONNECTED;
33585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         send_chan_cb=TRUE;
33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM               reg_param;
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
33615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t            reg_state = BTHL_APP_REG_STATE_REG_FAILED;
33625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             app_id;
33635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           preg_idx;
33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     bt_status;
33655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
33685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
33705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_CONNECTED_CB:
33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_DISCONNECTED_CB:
33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_CONNECTED;
33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING)
33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_DISCONNECTED;
33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                send_chan_cb = FALSE;
33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (send_chan_cb)
33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_copy_bda(&bd_addr, p_data->chan_cb.bd_addr);
33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4("state callbk: ch_id=0x%08x cb_state=%d state=%d  fd=%d",
33845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.channel_id,
33855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.cb_state,
33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  state,  p_data->chan_cb.fd);
33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_display_bt_bda(&bd_addr);
33885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  p_data->chan_cb.app_id,
33895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   &bd_addr, p_data->chan_cb.mdep_cfg_index,
33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   p_data->chan_cb.channel_id, state, p_data->chan_cb.fd );
33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_REG_APP:
33955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb  = BTIF_HL_GET_APP_CB_PTR(p_data->reg.app_idx);
33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            app_id = (int) p_acb->app_id;
33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("Rcv BTIF_HL_REG_APP app_idx=%d reg_pending=%d", p_data->reg.app_idx, p_acb->reg_pending);
3398f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_get_state() == BTIF_HL_STATE_ENABLED && p_acb->reg_pending)
33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3400f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG1("Rcv BTIF_HL_REG_APP reg_counter=%d",reg_counter);
34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->reg_pending = FALSE;
34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.dev_type = p_acb->dev_type;
34035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
34045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_name = p_acb->srv_name;
34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_desp = p_acb->srv_desp;
34065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_provider_name = p_acb->provider_name;
34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_reg_request (p_data->reg.app_idx, p_acb->app_id, &reg_param, btif_hl_cback);
34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
34105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG2("reg request is processed state=%d reg_pending=%d", btif_hl_get_state(), p_acb->reg_pending);
34125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UNREG_APP:
34175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Rcv BTIF_HL_UNREG_APP app_idx=%d", p_data->unreg.app_idx );
34185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->unreg.app_idx);
3419f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_get_state() == BTIF_HL_STATE_ENABLED)
3420f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
3421f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if(reg_counter >= 1)
3422f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlUpdate(p_acb->app_id,NULL,FALSE,NULL);
3423f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                else
3424f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlDeregister(p_acb->app_id, p_acb->app_handle);
3425f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
34265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UPDATE_MDL:
34285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Rcv BTIF_HL_UPDATE_MDL app_idx=%d", p_data->update_mdl.app_idx );
34295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->update_mdl.app_idx);
34305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
34335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("Unknown event %d", event);
34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
34375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
34395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_evt
34415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL events
34435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
34475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_evt(UINT16 event, char* p_param){
34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL *p_data = (tBTA_HL *)p_param;
34495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 app_idx, mcl_idx;
34505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = NULL;
34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR               bd_addr;
34535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pend_dch_op_t  pending_op;
34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status;
34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
34585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
34595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_REGISTER_CFM_EVT");
34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("app_id=%d app_handle=%d status=%d ",
34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_id,
34645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_handle,
34655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.status );
34665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_reg_cfm(p_data);
34685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
34705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_SDP_INFO_IND_EVT");
34715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG5("app_handle=%d ctrl_psm=0x%04x data_psm=0x%04x x_spec=%d mcap_sup_procs=0x%02x",
34725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.app_handle,
34735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.ctrl_psm,
34745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_psm,
34755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_x_spec,
34765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.mcap_sup_procs);
3477f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            //btif_hl_proc_sdp_info_ind(p_data);
34785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
34815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DEREGISTER_CFM_EVT");
34825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_handle=%d status=%d ",
34835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.app_handle,
34845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.status );
34855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dereg_cfm(p_data);
34865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
34875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
34895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_SDP_QUERY_CFM_EVT");
3490f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG3("app_handle=%d app_id =%d,status =%d",
3491f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              p_data->sdp_query_cfm.app_handle,p_data->sdp_query_cfm.app_id,
34925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.status);
34935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
34955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[0], p_data->sdp_query_cfm.bd_addr[1],
34965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[2], p_data->sdp_query_cfm.bd_addr[3],
34975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[4], p_data->sdp_query_cfm.bd_addr[5]);
34985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->sdp_query_cfm.status == BTA_HL_STATUS_OK)
35005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_sdp_query_cfm(p_data);
35015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
35025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
35035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
35055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3506f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG1("BTA_HL_SDP_QUERY_CFM_EVT Status = %d",
3507f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                        p_data->sdp_query_cfm.status);
3508f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_app_idx_using_app_id(p_data->sdp_query_cfm.app_id, &app_idx))
35095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
35115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
35125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
35135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
35144420e41159663c904fd55fbb7dd4816129467fb5Ajay Dudani                        if ( (p_mcb->cch_oper ==  BTIF_HL_CCH_OP_MDEP_FILTERING) ||
35155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             (p_mcb->cch_oper == BTIF_HL_CCH_OP_DCH_OPEN) )
35165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
35175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            pending_op = p_mcb->pcb.op;
35185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            switch (pending_op)
35195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            {
35205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_OPEN:
35215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
35225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
35235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_RECONNECT:
35245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
35255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                default:
35265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
35275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            }
35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            if (!p_mcb->is_connected)
35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_clean_mcl_cb(app_idx, mcl_idx);
35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_OPEN_CFM_EVT");
3540f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG4("app_id=%d,app_handle=%d mcl_handle=%d status =%d",
3541f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              p_data->cch_open_cfm.app_id,
35425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.app_handle,
35435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.mcl_handle,
35445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.status);
35455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
35465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[0], p_data->cch_open_cfm.bd_addr[1],
35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[2], p_data->cch_open_cfm.bd_addr[3],
35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[4], p_data->cch_open_cfm.bd_addr[5]);
35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3550f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (p_data->cch_open_cfm.status == BTA_HL_STATUS_OK ||
3551f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                        p_data->cch_open_cfm.status == BTA_HL_STATUS_DUPLICATE_CCH_OPEN)
35525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_cch_open_cfm(p_data);
35545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
35565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
35585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
35615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3562f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (btif_hl_find_app_idx_using_app_id(p_data->cch_open_cfm.app_id, &app_idx))
35635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
35655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
35665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
35675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
35685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        pending_op = p_mcb->pcb.op;
35695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        switch (pending_op)
35705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
35715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_OPEN:
35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
35745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_RECONNECT:
35755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
35765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            default:
35775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_clean_mcl_cb(app_idx, mcl_idx);
35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
35865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_OPEN_CFM_EVT");
35875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_handle=0x%x status=%d ",
35885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mcl_handle,
35895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_handle,
35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.status);
35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG5("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.first_reliable,
35935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.dch_mode,
35945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.local_mdep_id,
35955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_id,
35965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mtu);
35975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_open_cfm.status == BTA_HL_STATUS_OK)
35985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_open_cfm(p_data);
36005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
36045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
36075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
36135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
36145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
36155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
36165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
36175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
36185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
36195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
36235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
36285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_OPEN_IND_EVT");
36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_handle=%d mcl_handle=%d",
36305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.app_handle,
36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.mcl_handle);
36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[0], p_data->cch_open_ind.bd_addr[1],
36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[2], p_data->cch_open_ind.bd_addr[3],
36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[4], p_data->cch_open_ind.bd_addr[5]);
36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_open_ind(p_data);
36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CREATE_IND_EVT");
36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mcl_handle=%d",
36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mcl_handle );
36445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("local_mdep_id =%d mdl_id=%d cfg=%d",
36455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.local_mdep_id,
36465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mdl_id,
36475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.cfg);
36485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_create_ind(p_data);
36495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
36525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_OPEN_IND_EVT");
36535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_handle=0x%x",
36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mcl_handle,
36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_handle );
36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG5("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.first_reliable,
36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.dch_mode,
36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.local_mdep_id,
36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_id,
36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mtu);
36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_open_ind(p_data);
36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
36675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DELETE_MDL_IND_EVT");
36685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_id=0x%x",
36695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mcl_handle,
36705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mdl_id);
36715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
36745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DELETE_MDL_CFM_EVT");
36755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_id=0x%x status=%d",
36765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mcl_handle,
36775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mdl_id,
36785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.status);
36795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3680f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_app_idx_using_deleted_mdl_id( p_data->delete_mdl_cfm.mdl_id,
3681f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                    &app_idx))
36825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
36845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_destroyed_cb(p_acb);
36855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
36865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
36905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RECONNECT_CFM_EVT");
36915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_handle=%d status=%d   ",
36925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mcl_handle,
36935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_handle,
36945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.status);
36955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
36965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.first_reliable,
36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.dch_mode,
36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_id,
36995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mtu);
37005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_reconnect_cfm.status == BTA_HL_STATUS_OK)
37035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_reconnect_cfm(p_data);
37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
37075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
37125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
37165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
37185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
37195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
37205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
37215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
37225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
37235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
37245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
37255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
37265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
37275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
37285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
37335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_CLOSE_CFM_EVT");
37345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d status =%d",
37355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.mcl_handle,
37365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.status);
37375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->cch_close_cfm.status == BTA_HL_STATUS_OK)
37385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_cch_close_cfm(p_data);
37405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
37445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_CLOSE_IND_EVT");
37455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle =%d intentional_close=%s",
37465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_ind.mcl_handle,
37475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->cch_close_ind.intentional?"Yes":"No"));
37485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_close_ind(p_data);
37505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
37535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CLOSE_IND_EVT");
37545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d intentional_close=%s",
37555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_ind.mdl_handle,
37565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->dch_close_ind.intentional?"Yes":"No") );
37575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_close_ind(p_data);
37595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
37625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CLOSE_CFM_EVT");
37635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d status=%d ",
37645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.mdl_handle,
37655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.status);
37665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_close_cfm.status == BTA_HL_STATUS_OK)
37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_dch_close_cfm(p_data);
37705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ECHO_TEST_CFM_EVT");
37755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d    status=%d",
37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.mcl_handle,
37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.status );
37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* not supported */
37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
37835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RECONNECT_IND_EVT");
37845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_handle=5d",
37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mcl_handle,
37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_handle );
37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
37895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.first_reliable,
37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.dch_mode,
37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_id,
37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mtu);
37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_reconnect_ind(p_data);
37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CONG_CHG_IND_EVT");
37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d cong =%d",
38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.mdl_handle,
38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.cong);
38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_cong_ind(p_data);
38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ABORT_IND_EVT");
38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mcl_handle=%d",
38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_ind.mcl_handle );
38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_abort_ind(p_data->dch_abort_ind.mcl_handle);
38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ABORT_CFM_EVT");
38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d status =%d",
38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.mcl_handle,
38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.status);
38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_abort_cfm.status == BTA_HL_STATUS_OK)
38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_abort_cfm(p_data->dch_abort_ind.mcl_handle);
38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
38235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_SEND_DATA_CFM_EVT");
38245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=0x%x status =%d",
38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.mdl_handle,
38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.status);
38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_send_data_cfm(p_data->dch_send_data_cfm.mdl_handle,
38285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       p_data->dch_send_data_cfm.status);
38295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
38325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RCV_DATA_IND_EVT");
38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mdl_handle=0x%x ",
38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_rcv_data_ind.mdl_handle);
38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* do nothing here */
38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Unknown Event (0x%02x)...", event);
38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
38455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_cback
38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL events
38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
38515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_cback(tBTA_HL_EVT event, tBTA_HL *p_data){
38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
38585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
38615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_REGISTER_CFM);
38625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
38645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_INFO_IND);
38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DEREGISTER_CFM);
38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_QUERY_CFM);
38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_CFM);
38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
38795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_IND);
38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
38825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CREATE_IND);
38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
38855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
38865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
38885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
38895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
38915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
38925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
38945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
38955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
38975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
38985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
39005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_CLOSE_IND);
39015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
39035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CLOSE_IND);
39045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
39065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
39075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
39095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
39105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
39125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
39135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
39155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CONG_IND);
39165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
39185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_IND);
39195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
39215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
39225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
39245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
39255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
39275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
39285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
39305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* catch any failed context transfers */
39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_ctrl_evt
39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events in the BTIF task context
39445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
39465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_ctrl_evt(UINT16 event, char* p_param){
39495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CTRL *p_data = (tBTA_HL_CTRL *) p_param;
39505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM   reg_param;
39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
39555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
39605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CTRL_ENABLE_CFM_EVT");
39615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("status=%d", p_data->enable_cfm.status);
39625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->enable_cfm.status == BTA_HL_STATUS_OK)
39645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_ENABLED);
39665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i < BTA_HL_NUM_APPS ; i ++)
39695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(i);
39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->in_use && p_acb->reg_pending)
39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->reg_pending = FALSE;
39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.dev_type = p_acb->dev_type;
39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_name = p_acb->srv_name;
39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_desp = p_acb->srv_desp;
39785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_provider_name = p_acb->provider_name;
39795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("Register pending app_id=%d", p_acb->app_id);
39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_proc_reg_request (i, p_acb->app_id, &reg_param, btif_hl_cback);
39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CTRL_DISABLE_CFM_EVT");
39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("status=%d",
39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->disable_cfm.status);
39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->disable_cfm.status == BTA_HL_STATUS_OK)
39935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_DISABLED);
39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_ctrl_cback
40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events
40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_ctrl_cback(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data){
40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CTRL_ENABLE_DISABLE);
40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
40275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_ctrl_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
40315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
40325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         connect_channel
40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     connect a data channel
40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t connect_channel(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int *channel_id){
40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb = NULL;
4045f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_pending_chan_cb_t   *p_pcb = NULL;
40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb=NULL;
40475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t             status = BT_STATUS_SUCCESS;
40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM  dch_open;
40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR                 bda;
40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
40515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<6; i++)
40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bda[i] = (UINT8) bd_addr->address[i];
40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
40645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bda , &mcl_idx))
40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->is_connected)
40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.ctrl_psm = p_mcb->ctrl_psm;
40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.local_mdep_id = p_acb->sup_feature.mdep[mdep_cfg_index].mdep_id;
4071f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG4("connect_channel: app_idx =%d, mdep_cfg_indx =%d, mdep_id =%d app_id= %d", app_idx,
4072f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                mdep_cfg_index, dch_open.local_mdep_id, app_id);
40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role,
40755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.data_cfg[0].data_type, &dch_open.peer_mdep_id ))
40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_cfg = p_acb->channel_type[mdep_cfg_index];
40785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        && !btif_hl_is_the_first_reliable_existed(app_idx,mcl_idx))
40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
40825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if( !btif_hl_dch_open(p_acb->app_id, bda, &dch_open,
40865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              mdep_cfg_index, BTIF_HL_PEND_DCH_OP_OPEN, channel_id ))
40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_EVENT1("%s loc0 status = BT_STATUS_FAIL", __FUNCTION__);
40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4094f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mcb->cch_oper = BTIF_HL_CCH_OP_MDEP_FILTERING;
4095f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4096f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
4097f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->in_use = TRUE;
4098f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->mdep_cfg_idx = mdep_cfg_index;
4099f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    memcpy(p_pcb->bd_addr, bda, sizeof(BD_ADDR));
4100f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_pcb->op = BTIF_HL_PEND_DCH_OP_OPEN;
4101f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    BTA_HlSdpQuery(app_id,p_acb->app_handle, bda);
41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->filter.num_elems =1;
41125738f83aeb59361a0a2eda2460113f6dc919427The 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;
41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
41145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
41155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_cch_open(p_acb->app_id, bda, 0, mdep_cfg_index,
41195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   BTIF_HL_PEND_DCH_OP_OPEN,
41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   channel_id))
41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
41275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BT_STATUS_FAIL;
41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s status=%d channel_id=0x%08x", __FUNCTION__, status, *channel_id);
41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         destroy_channel
41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      destroy a data channel
41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t destroy_channel(int channel_id){
4145bea4131cac3214e0ad26ea8258e270448f23f1f3Matthew Xie    UINT8 app_idx, mcl_idx, mdl_idx, mdl_cfg_idx, app_id, mdep_cfg_idx = 0;
41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
4149f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cb_t     *p_dcb;
41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb;
41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
41535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT2("%s channel_id=0x%08x", __FUNCTION__, channel_id);
41545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_if_channel_setup_pending(channel_id, &app_idx, &mcl_idx))
41585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_dch_abort(app_idx, mcl_idx);
41605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
41625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mdl_cfg_idx_using_channel_id(channel_id, &app_idx, &mdl_cfg_idx))
4164f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera //       if(btif_hl_find_mdl_idx_using_channel_id(channel_id, &app_idx,&mcl_idx, &mdl_idx))
41655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
41675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_acb->delete_mdl.active)
41685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl =BTIF_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx);
41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.active = TRUE;
41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdl_id = p_mdl->base.mdl_id;
41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.channel_id = channel_id;
41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_acb->delete_mdl.bd_addr, p_mdl->base.peer_bd_addr,sizeof(BD_ADDR));
41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr, &mcl_idx))
41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mcb->is_connected)
41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("calling BTA_HlDeleteMdl mdl_id=%d",p_acb->delete_mdl.mdl_id );
41825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
41835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
41875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
41915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("btif_hl_delete_mdl calling btif_hl_cch_open"  );
41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb->filter.num_elems =1;
41945738f83aeb59361a0a2eda2460113f6dc919427The 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;
41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_cch_open(p_acb->app_id, p_acb->delete_mdl.bd_addr, 0,
42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         mdep_cfg_idx,
42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         BTIF_HL_PEND_DCH_OP_DELETE_MDL, NULL))
42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
42065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (  status == BT_STATUS_FAIL)
42085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* fail for now  */
42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
42115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
42145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_BUSY;
42165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
42205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
42215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
42255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
42265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
42275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         unregister_application
42295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     unregister an HDP application
42315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
42335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
42355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t unregister_application(int app_id){
42365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
42375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx;
42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                 len;
42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t         status = BT_STATUS_SUCCESS;
42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t    evt_param;
42415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
42435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT2("%s app_id=%d", __FUNCTION__, app_id);
42445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
42455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
42475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.unreg.app_idx = app_idx;
4249f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4250f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter --;
42515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_unreg_t);
42525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UNREG_APP,
42535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
42545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
42555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
42575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status  = BT_STATUS_FAIL;
42595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("de-reg return status=%d", status);
42625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
42635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
42645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
42655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         register_application
42675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     register an HDP application
42695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
42715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
42735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t register_application(bthl_reg_param_t *p_reg_param, int *app_id){
42745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
42755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE         *p_sup;
42765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_CFG            *p_cfg;
42775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_DATA_TYPE_CFG  *p_data;
42785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx=0, i=0, pending_reg_idx=0;
42795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_mdep_cfg_t             *p_mdep_cfg;
42805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                 status = BT_STATUS_SUCCESS;
42815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t            evt_param;
42825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         len;
42835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
42855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
42865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
42875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_get_state() == BTIF_HL_STATE_DISABLED)
42895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_init();
42915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_ENABLING);
42925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlEnable(btif_hl_ctrl_cback);
42935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!btif_hl_find_avail_app_idx(&app_idx))
42965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR0("Unable to allocate a new application control block");
42985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BT_STATUS_FAIL;
42995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
43025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->in_use = TRUE;
43035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->app_id = btif_hl_get_next_app_id();
43065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->application_name != NULL )
43085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->application_name, p_reg_param->application_name, BTIF_HL_APPLICATION_NAME_LEN);
43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->provider_name != NULL )
43115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->provider_name, p_reg_param->provider_name, BTA_PROVIDER_NAME_LEN);
43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_name != NULL )
43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_name, p_reg_param->srv_name, BTA_SERVICE_NAME_LEN);
43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_desp != NULL )
43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_desp, p_reg_param->srv_desp, BTA_SERVICE_DESP_LEN);
43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup = &p_acb->sup_feature;
43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->advertize_source_sdp = TRUE;
43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_rx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
43225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_tx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
43235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->num_of_mdeps = p_reg_param->number_of_mdeps;
43245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43255738f83aeb59361a0a2eda2460113f6dc919427The 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++  )
43265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg = &p_sup->mdep[i].mdep_cfg;
43285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg->num_of_mdep_data_types = 1;
43295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data  = &p_cfg->data_cfg[0];
43305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( !btif_hl_get_bta_mdep_role(p_mdep_cfg->mdep_role, &(p_cfg->mdep_role)))
43325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("Invalid mdep_role=%d", p_mdep_cfg->mdep_role);
43345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
43355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
43385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK )
43405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK;
43415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
43425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |=  BTA_HL_MDEP_ROLE_MASK_SOURCE;
43435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) &&
43455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) )
43465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_DUAL;
43485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if ( p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK )
43505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SINK;
43515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
43525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SOURCE;
43545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->data_type = (UINT16) p_mdep_cfg->data_type;
43565738f83aeb59361a0a2eda2460113f6dc919427The 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);
43575738f83aeb59361a0a2eda2460113f6dc919427The 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);
43585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mdep_cfg->mdep_description != NULL )
43605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                strncpy(p_data->desp, p_mdep_cfg->mdep_description, BTA_SERVICE_DESP_LEN);
43615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_get_bta_channel_type(p_mdep_cfg->channel_type, &(p_acb->channel_type[i])))
43635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("Invalid channel_type=%d", p_mdep_cfg->channel_type);
43655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
43665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
43675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BT_STATUS_SUCCESS)
43725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *app_id = (int) p_acb->app_id;
43745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.reg.app_idx = app_idx;
43755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_reg_t);
43765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb->reg_pending = TRUE;
4377f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter++;
43785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("calling btif_transfer_context status=%d app_id=%d", status, *app_id);
43795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_REG_APP,
43805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
43815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
43825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
43855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_free_app_idx(app_idx);
43875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("register_application status=%d app_id=%d", status, *app_id);
43905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
43915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4392f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4393f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4394f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4395f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_save_mdl_cfg
4396f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4397f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Save the MDL configuration
4398f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4399f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
4400f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4401f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
4402f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN  btif_hl_save_mdl_cfg(UINT8 mdep_id, UINT8 item_idx,
4403f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                              tBTA_HL_MDL_CFG *p_mdl_cfg){
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    btif_hl_mcl_cb_t    *p_mcb;
4408f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               app_idx, mcl_idx, mdl_idx, len;
4409f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t         bt_status;
4410f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_evt_cb_t    evt_param;
4411f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                 *p_channel_id;
4412f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4413f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG6("%s mdep_id=%d item_idx=%d, local_mdep_id=%d mdl_id=0x%x dch_mode=%d",
4414f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      __FUNCTION__, mdep_id, item_idx, p_mdl_cfg->local_mdep_id,
4415f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                      p_mdl_cfg->mdl_id, p_mdl_cfg->dch_mode );
4416f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4417f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(btif_hl_find_app_idx_using_mdepId(mdep_id,&app_idx))
4418f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4419f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4420f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
4421f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_channel_id = BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx, item_idx);
4422f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_mdl)
4423f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
4424f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memcpy(&p_mdl->base, p_mdl_cfg, sizeof(tBTA_HL_MDL_CFG));
4425f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr , &mcl_idx))
4426f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
4427f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
4428f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (p_mcb->pcb.in_use)
4429f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    *p_channel_id = p_mcb->pcb.channel_id;
4430f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                else
4431f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    *p_channel_id = btif_hl_get_next_channel_id(p_acb->app_id);
4432f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mdl->extra.mdep_cfg_idx = p_mcb->pcb.mdep_cfg_idx;
4433f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_mdl->extra.data_type = p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
4434f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4435f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if (!btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
4436f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.mdep_role,
4437f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type,
4438f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                               &p_mdl->extra.peer_mdep_id))
4439f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
4440f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    p_mdl->extra.peer_mdep_id = BTA_HL_INVALID_MDEP_ID;
4441f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
4442f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG4("%s app_idx=%d item_idx=%d mld_id=0x%x",
4443f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                  __FUNCTION__, app_idx, item_idx, p_mdl->base.mdl_id);
4444f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                evt_param.update_mdl.app_idx = app_idx;
4445f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                len = sizeof(btif_hl_update_mdl_t);
4446f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                BTIF_TRACE_DEBUG1("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
4447f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
4448f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                        (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
4449f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                {
4450f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    success = TRUE;
4451f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                }
4452f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
4453f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
4454f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
4455f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4456f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG2("%s success=%d  ",__FUNCTION__, success );
4457f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4458f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return success;
4459f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
4460f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4461f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4462f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4463f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function      btif_hl_delete_mdl_cfg
4464f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4465f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description  Delete the MDL configuration
4466f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4467f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns      BOOLEAN
4468f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4469f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
4470f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti AgheraBOOLEAN  btif_hl_delete_mdl_cfg(UINT8 mdep_id, UINT8 item_idx){
4471f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_mdl_cfg_t     *p_mdl=NULL;
4472f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BOOLEAN             success = FALSE;
4473f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t      *p_acb;
4474f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               app_idx, len;
4475f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t         bt_status;
4476f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_evt_cb_t    evt_param;
4477f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4478f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if(btif_hl_find_app_idx_using_mdepId(mdep_id,&app_idx))
4479f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4480f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4481f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4482f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4483f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
4484f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        if (p_mdl)
4485f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        {
4486f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            memset(p_mdl, 0, sizeof(btif_hl_mdl_cfg_t));
4487f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            evt_param.update_mdl.app_idx = app_idx;
4488f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            len = sizeof(btif_hl_update_mdl_t);
4489f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            BTIF_TRACE_DEBUG1("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
4490f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
4491f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                                                    (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
4492f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            {
4493f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                success = TRUE;
4494f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            }
4495f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera            ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
4496f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        }
4497f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4498f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4499f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG2("%s success=%d  ",__FUNCTION__, success );
4500f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return success;
4501f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
4502f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4503f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera/*******************************************************************************
4504f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4505f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Function         get_device_datatype
4506f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4507f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Description      Start SDP on remote device and look for Remote HDP Data type and role
4508f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4509f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera** Returns         bt_status_t
4510f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera**
4511f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera*******************************************************************************/
4512f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Agherastatic bt_status_t get_device_datatype(int app_id, bt_bdaddr_t *bd_addr){
4513f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t    *p_acb;
4514f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               app_idx;
4515f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    bt_status_t         status = BT_STATUS_SUCCESS;
4516f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BD_ADDR             bda;
4517f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    UINT8               i;
4518f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4519f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    CHECK_BTHL_INIT();
4520f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_EVENT2("%s app_id=%d", __FUNCTION__, app_id);
4521f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_display_calling_process_name();
4522f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4523f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    for (i=0; i<6; i++)
4524f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4525f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        bda[i] = (UINT8) bd_addr->address[i];
4526f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4527f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4528f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
4529f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4530f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
4531f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        BTA_HlSdpQuery(app_id,p_acb->app_handle,bda);
4532f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4533f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    else
4534f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    {
4535f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        status  = BT_STATUS_FAIL;
4536f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    }
4537f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
4538f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    BTIF_TRACE_DEBUG1("de-reg return status=%d", status);
4539f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    return status;
4540f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera}
4541f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera
45425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         init
45455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     initializes the hl interface
45475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
45495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t init( bthl_callbacks_t* callbacks ){
45525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
45535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
45555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
45565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks_cb = *callbacks;
45575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks = &bt_hl_callbacks_cb;
45585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_thread_init();
4559f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    reg_counter = 0;
45605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
45615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         cleanup
45655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Closes the HL interface
45675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
45695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void  cleanup( void ){
45725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
45735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
45745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hl_callbacks)
45755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_disable_service(BTA_HDP_SERVICE_ID);
45775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hl_callbacks = NULL;
4578f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera        reg_counter = 0;
45795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_disable();
45825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_close_select_thread();
45835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bthl_interface_t bthlInterface = {
4586f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    sizeof(bthl_interface_t),
45875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    init,
45885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    register_application,
45895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    unregister_application,
45905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    connect_channel,
45915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    destroy_channel,
45925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    cleanup,
45935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
45945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_get_interface
45995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Get the hl callback interface
46015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bthf_interface_t
46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst bthl_interface_t *btif_hl_get_interface(){
46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return &bthlInterface;
46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_update_maxfd
46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update the max fd if the input fd is greater than the current max fd
46155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
46175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btif_hl_update_maxfd( int max_org_s){
46205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
46215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int maxfd=0;
46225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_update_maxfd max_org_s= %d", max_org_s);
46245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    maxfd = max_org_s;
46265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
46275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
46295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (maxfd < p_scb->max_s)
46305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            maxfd = p_scb->max_s;
46325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("btif_hl_update_maxfd 1 maxfd=%d", maxfd);
46335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (maxfd < p_scb->max_s)
46375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
46385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                maxfd = p_scb->max_s;
46395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("btif_hl_update_maxfd 2 maxfd=%d", maxfd);
46405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
46415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
46425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_update_maxfd final *p_max_s=%d", maxfd);
46465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return maxfd;
46475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_socket_state
46515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get socket state
46535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns btif_hl_soc_state_t
46555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_soc_state_t btif_hl_get_socket_state(btif_hl_soc_cb_t *p_scb){
46585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_get_socket_state state=%d", p_scb->state);
46595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_scb->state;
46605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_socket_state
46645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set socket state
46665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_socket_state(btif_hl_soc_cb_t *p_scb, btif_hl_soc_state_t new_state){
46715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("btif_hl_set_socket_state %d---->%d", p_scb->state, new_state);
46725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_scb->state = new_state;
46735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_mcl_sockets
46775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Release all sockets on the MCL
46795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx){
46845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t    *p_scb = NULL;
46855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
46865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t    *p_dcb;
46875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             found= FALSE;
46885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
46895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
46905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i);
46925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_dcb && p_dcb->in_use && p_dcb->p_scb)
46935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("found socket for app_idx=%d mcl_id=%d, mdl_idx=%d", app_idx, mcl_idx, i);
46955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state (p_dcb->p_scb, BTIF_HL_SOC_STATE_W4_REL);
46965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = NULL;
46975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
46985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (found)
47015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
47025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_socket
47065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description release a specified socket
47085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
47105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
47135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t       *p_scb = NULL;
47145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
47155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
47175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
47185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && p_dcb->p_scb)
47205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = p_dcb->p_scb;
47225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_REL);
47235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb->p_scb = NULL;
47245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
47255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_create_socket
47305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description create a socket
47325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
47345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
47375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
47385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
47395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
47405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 soc_idx;
47415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN               status = FALSE;
47425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
47445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && ((p_scb = (btif_hl_soc_cb_t *)GKI_getbuf((UINT16)sizeof(btif_hl_soc_cb_t)))!=NULL))
47465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (socketpair(AF_UNIX, SOCK_STREAM, 0, p_scb->socket_id) >= 0)
47485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("socket id[0]=%d id[1]=%d",p_scb->socket_id[0], p_scb->socket_id[1] );
47505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = p_scb;
47515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->app_idx = app_idx;
47525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mcl_idx = mcl_idx;
47535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdl_idx = mdl_idx;
47545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->channel_id = p_dcb->channel_id;
47555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdep_cfg_idx = p_dcb->local_mdep_cfg_idx;
47565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_scb->bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR));
47575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_ADD);
47585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->max_s = p_scb->socket_id[1];
47595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_enqueue(&soc_queue, (void *) p_scb);
47605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_wakeup();
47615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = TRUE;
47625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
47645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_buf((void **)&p_scb);
47675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s status=%d", __FUNCTION__, status);
47715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
47725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_add_socket_to_set
47765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Add a socket
47785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
47805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_add_socket_to_set( fd_set *p_org_set){
47835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
47845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL;
47855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb = NULL;
4786f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t                *p_acb = NULL;
47875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
47885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
47895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
47905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
47925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
47945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
47965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("btif_hl_add_socket_to_set first p_scb=0x%x", p_scb);
47975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
47985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_ADD)
48005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_W4_READ);
48025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                FD_SET(p_scb->socket_id[1], p_org_set);
48035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG2("found and set socket_id=%d is_set=%d", p_scb->socket_id[1], FD_ISSET(p_scb->socket_id[1], p_org_set));
48045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx);
48055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
4806f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                p_acb = BTIF_HL_GET_APP_CB_PTR(p_scb->app_idx);
48075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb && p_dcb)
48085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
4809f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    btif_hl_stop_timer_using_handle(p_mcb->mcl_handle);
4810f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera                    evt_param.chan_cb.app_id = p_acb->app_id;
48115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_mcb->bd_addr, sizeof(BD_ADDR));
48125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_dcb->channel_id;
48135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
48145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_dcb->local_mdep_cfg_idx;
48155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING;
48165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
48175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_CONNECTED_CB,
48185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
48195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
48205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
48215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
48235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("next p_scb=0x%x", p_scb);
48245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
48285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_socket
48325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description close a socket
48345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
48365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_close_socket( fd_set *p_org_set){
48395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
48405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         element_removed = FALSE;
48415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL ;
4842f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    btif_hl_app_cb_t                *p_acb = NULL ;
48435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
48445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
4845f8f30c2cecf221b2c3983b72d5a849d799c39dd7Priti Aghera    int                             app_idx;
48465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
48475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
48495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
48505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
48525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
48535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
48545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_REL)
48555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_id=%d, mdl_idx=%d",
48575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
48585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_IDLE);
48595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_scb->socket_id[1] != -1)
48605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
48615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    FD_CLR(p_scb->socket_id[1] , p_org_set);
48625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    shutdown(p_scb->socket_id[1], SHUT_RDWR);
48635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close(p_scb->socket_id[1]);
48645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
48665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_scb->bd_addr, sizeof(BD_ADDR));
48675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_scb->channel_id;
48685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
48695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_scb->mdep_cfg_idx;
48705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING;
48715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
48725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_DISCONNECTED_CB,
48735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
48745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
48755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
48785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
48805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("while loop next p_scb=0x%x", p_scb);
48815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
48845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
48855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
48865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_IDLE)
48875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
48895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4("idle socket app_idx=%d mcl_id=%d, mdl_idx=%d p_dcb->in_use=%d",
48905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx, p_dcb->in_use);
48915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                GKI_remove_from_queue((void *)&soc_queue, p_scb);
48925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_free_buf((void **)&p_scb);
48935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->p_scb = NULL;
48945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = TRUE;
48955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("element_removed=%d p_scb=0x%x", element_removed, p_scb);
48975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (element_removed)
48985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = FALSE;
49005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
49015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
49025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
49035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
49045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("while loop p_scb=0x%x", p_scb);
49065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
49075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
49095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_callback
49135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select wakup callback to add or close a socket
49155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
49175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_wakeup_callback( fd_set *p_org_set ,  int wakeup_signal){
49215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("entering %s wakeup_signal=0x%04x",__FUNCTION__, wakeup_signal);
49225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (wakeup_signal == btif_hl_signal_select_wakeup )
49245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_add_socket_to_set(p_org_set);
49265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (wakeup_signal == btif_hl_signal_select_close_connected)
49285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_close_socket(p_org_set);
49305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
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_monitor_callback
49375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select monitor callback to check pending socket actions
49395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
49415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_monitor_callback( fd_set *p_cur_set , fd_set *p_org_set){
49445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
49455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = NULL;
49465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r;
49475cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_org_set);
49485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
49505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
49525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
49545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0(" GKI queue is not empty ");
49555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
49565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
49575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_READ)
49585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
49595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (FD_ISSET(p_scb->socket_id[1], p_cur_set))
49605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
49615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("read data");
49625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("state= BTIF_HL_SOC_STATE_W4_READ");
49635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
49645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb->p_tx_pkt)
49655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
49665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_ERROR1("Rcv new pkt but the last pkt is still not been sent tx_size=%d", p_dcb->tx_size);
49675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
49685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
49695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->p_tx_pkt =  btif_hl_get_buf (p_dcb->mtu);
49705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb )
49715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
49725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //do
49735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // {
49745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //     r = recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT));
49755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // } while (r == SOCKET_ERROR && errno == EINTR);
49765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((r = (int)recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT)) > 0)
49785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
49795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback send data r =%d", r);
49805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            p_dcb->tx_size = r;
49815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback send data tx_size=%d", p_dcb->tx_size );
49825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlSendData(p_dcb->mdl_handle, p_dcb->tx_size  );
49835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
49845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (r <= 0 )
49865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
49875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback  receive failed r=%d",r);
49885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchClose(p_dcb->mdl_handle );
49895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
49905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
49915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
49925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
49935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
49945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
49955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
49975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("btif_hl_select_monitor_queue is empty");
49995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
50015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_init
50055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description select loop wakup init
50075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup_init(fd_set* set){
50125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wakeup_init");
50135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (socketpair(AF_UNIX, SOCK_STREAM, 0, signal_fds) < 0)
50145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("socketpair failed: %s", strerror(errno));
50165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
50175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("btif_hl_select_wakeup_init signal_fds[0]=%d signal_fds[1]=%d",signal_fds[0], signal_fds[1] );
50205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_SET(signal_fds[0], set);
50215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return signal_fds[0];
50235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup
50285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to wakupo the select loop
50305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void){
50355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_wakeup;
50365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wakeup");
50375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
50385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_close_connected
50435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to close a socket
50455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_close_connected(void){
50505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_close_connected;
50515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_close_connected");
50525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
50535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_select_thread
50585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send signal to close the thread and then close all signal FDs
50605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_close_select_thread(void)
50655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = 0;
50675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_exit;
50685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_signal_select_exit");
50695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result = send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
5070f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta    if (btif_is_enabled())
5071f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta    {
5072f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        /* Wait for the select_thread_id to exit if BT is still enabled
5073f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        and only this profile getting  cleaned up*/
5074f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        if (select_thread_id != -1) {
5075f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta            pthread_join(select_thread_id, NULL);
5076f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta            select_thread_id = -1;
5077f7083df9c30849fabfb2d03ce95701f110a2df99Ganesh Ganapathi Batta        }
50785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project   /* Cleanup signal sockets */
50805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(signal_fds[0] != -1)
50815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(signal_fds[0]);
50835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        signal_fds[0] = -1;
50845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(signal_fds[1] != -1)
50865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(signal_fds[1]);
50885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        signal_fds[1] = -1;
50895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
50915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_reset
50965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description clear the received signal for the select loop
50985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
51005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_reset(void){
51035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_recv = 0;
51045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wake_reset");
51065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
51075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return(int)sig_recv;
51085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_signaled
51125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description check whether a fd is set or not
51145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
51165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_signaled(fd_set* set){
51195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wake_signaled");
51205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return FD_ISSET(signal_fds[0], set);
51215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_thread_cleanup
51255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  shut down and clean up the select loop
51275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
51295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_thread_cleanup(){
51325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (listen_s != -1)
51335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(listen_s);
51345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (connected_s != -1)
51355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
51365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        shutdown(connected_s, SHUT_RDWR);
51375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(connected_s);
51385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
51395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    listen_s = connected_s = -1;
51405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("hl thread cleanup");
51415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_thread
51455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description the select loop
51475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
51495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void *btif_hl_select_thread(void *arg){
51525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    fd_set org_set, curr_set;
51535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r, max_curr_s, max_org_s;
51545cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(arg);
51555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("entered btif_hl_select_thread");
51575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_ZERO(&org_set);
51585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    max_org_s = btif_hl_select_wakeup_init(&org_set);
51595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("max_s=%d ", max_org_s);
51605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (;;)
51625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
51635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        r = 0;
51645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("set curr_set = org_set ");
51655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        curr_set = org_set;
51665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_curr_s = max_org_s;
51675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        int ret = select((max_curr_s + 1), &curr_set, NULL, NULL, NULL);
51685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("select unblocked ret=%d", ret);
51695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (ret == -1)
51705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
51715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("select() ret -1, exit the thread");
51725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_thread_cleanup();
51735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            select_thread_id = -1;
51745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return 0;
51755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
51765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (ret)
51775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
51785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("btif_hl_select_wake_signaled, signal ret=%d", ret);
51795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_select_wake_signaled(&curr_set))
51805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
51815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                r = btif_hl_select_wake_reset();
51825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("btif_hl_select_wake_signaled, signal:%d", r);
51835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (r == btif_hl_signal_select_wakeup || r == btif_hl_signal_select_close_connected )
51845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
51855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_select_wakeup_callback(&org_set, r);
51865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
51875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if( r == btif_hl_signal_select_exit)
51885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
51895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_thread_cleanup();
51905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("Exit hl_select_thread for btif_hl_signal_select_exit");
51915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return 0;
51925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
51935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
51945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_monitor_callback(&curr_set, &org_set);
51965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_org_s = btif_hl_update_maxfd(max_org_s);
51975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
51985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
51995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("no data, select ret: %d\n", ret);
52005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
52015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("leaving hl_select_thread");
52025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return 0;
52035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
52045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
52065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function create_thread
52085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description creat a select loop
52105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pthread_t
52125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
52145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline pthread_t create_thread(void *(*start_routine)(void *), void * arg){
52155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("create_thread: entered");
52165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_t thread_attr;
52175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_init(&thread_attr);
52195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
52205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_t thread_id = -1;
52215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( pthread_create(&thread_id, &thread_attr, start_routine, arg)!=0 )
52225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
52235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("pthread_create : %s", strerror(errno));
52245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
52255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
52265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("create_thread: thread created successfully");
52275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return thread_id;
52285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
52295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
52315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_soc_thread_init
52335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL select loop init function.
52355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
52375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
52395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_soc_thread_init(void){
52405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
52415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_init_q(&soc_queue);
52425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    select_thread_id = create_thread(btif_hl_select_thread, NULL);
52435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
52445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
52455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_load_mdl_config
52475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description load the MDL configuation from the application control block
52495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
52515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
52535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_load_mdl_config (UINT8 app_id, UINT8 buffer_size,
52545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 tBTA_HL_MDL_CFG *p_mdl_buf ){
52555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx;
52565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN result = FALSE;
52575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb;
52585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_CFG *p;
52595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
52605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
52615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
52635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
52645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
52655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0, p=p_mdl_buf; i<buffer_size; i++, p++)
52665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
52675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p, &p_acb->mdl_cfg[i].base, sizeof(tBTA_HL_MDL_CFG));
52685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
52695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = TRUE;
52705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
52715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("result=%d", result);
52735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
52745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5275