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
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern int btif_hl_update_maxfd( int max_org_s);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_monitor_callback( fd_set *p_cur_set, fd_set *p_org_set );
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_select_wakeup_callback( fd_set *p_org_set , int wakeup_signal );
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_soc_thread_init(void);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx);
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx);
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t btif_hl_cb;
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_cb_t *p_btif_hl_cb = &btif_hl_cb;
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_nv_cb_t *p_ncb = &btif_hl_cb.ncb;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static variables
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t  bt_hl_callbacks_cb;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bthl_callbacks_t *bt_hl_callbacks=NULL;
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* signal socketpair to wake up select loop */
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_wakeup = 1;
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_exit = 2;
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst int btif_hl_signal_select_close_connected = 3;
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int listen_s = -1;
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int connected_s = -1;
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int select_thread_id = -1;
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int signal_fds[2];
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BUFFER_Q soc_queue;
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void);
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_exit(void);
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_close_connected(void);
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_close_select_thread(void);
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_next_app_id(void);
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_hl_get_next_channel_id(UINT8 app_id);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_app_id(void);
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_channel_id(void);
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_ctrl_cback(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_set_state(btif_hl_state_t state);
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_hl_state_t btif_hl_get_state(void);
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_cback(tBTA_HL_EVT event, tBTA_HL *p_data);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cb_evt(UINT16 event, char* p_param);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define CHECK_CALL_CBACK(P_CB, P_CBACK, ...)\
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (P_CB && P_CB->P_CBACK) {            \
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        P_CB->P_CBACK(__VA_ARGS__);         \
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }                                       \
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else {                                  \
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(0, "Callback is NULL", 0);  \
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_CALL_CBACK(P_CB, P_CBACK, ...)\
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     if((p_btif_hl_cb->state != BTIF_HL_STATE_DISABLING) &&\
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         (p_btif_hl_cb->state != BTIF_HL_STATE_DISABLED))  \
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     {                                                     \
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (P_CB && P_CB->P_CBACK) {                       \
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            P_CB->P_CBACK(__VA_ARGS__);                    \
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }                                                  \
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else {                                             \
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ASSERTC(0, "Callback is NULL", 0);             \
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }                                                  \
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define CHECK_BTHL_INIT() if (bt_hl_callbacks == NULL)\
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {\
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_WARNING1("BTHL: %s: BTHL not initialized", __FUNCTION__);\
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BT_STATUS_NOT_READY;\
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }\
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else\
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {\
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_EVENT1("BTHL: %s", __FUNCTION__);\
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const btif_hl_data_type_cfg_t data_type_table[] = {
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Data Specilization                   Ntx     Nrx (from Bluetooth SIG's HDP whitepaper)*/
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_PULSE_OXIMETER,      9216,   256},
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BLOOD_PRESSURE_MON,  896,    224},
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BODY_THERMOMETER,    896,    224},
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_BODY_WEIGHT_SCALE,   896,    224},
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_GLUCOSE_METER,       896,    224},
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {BTIF_HL_DATA_TYPE_STEP_COUNTER,        6624,   224}
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DATA_TABLE_SIZE  (sizeof(data_type_table) / sizeof(btif_hl_data_type_cfg_t))
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE   10240 /* use this size if the data type is not
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    defined in the table; for future proof */
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE   512  /* use this size if the data type is not
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   defined in the table; for future proof */
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE 1024
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static utility functions
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_IF_GET_NAME 16
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_display_calling_process_name(void)
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char name[16];
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    prctl(BTIF_IF_GET_NAME, name, 0, 0, 0);
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("Process name (%s)", name);
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_TIMEOUT_CCH_NO_DCH_SECS   10
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_if_channel_setup_pending
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   check whether channel id is in setup pending state or not
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_if_channel_setup_pending(int channel_id, UINT8 *p_app_idx, UINT8 *p_mcl_idx)
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i, j;
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  =BTIF_HL_GET_APP_CB_PTR(i);
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_acb->in_use)
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (j=0; j< BTA_HL_NUM_MCLS; j++)
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(i, j);
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->in_use &&
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->is_connected && p_mcb->pcb.channel_id == channel_id )
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx = j;
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (found)
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%s found=%d channel_id=0x%08x",
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, found, channel_id, *p_app_idx, *p_mcl_idx);
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_num_dchs_in_use
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description find number of DCHs in use
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT8
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 btif_hl_num_dchs_in_use(UINT8 app_idx,UINT8  mcl_idx){
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               cnt=0;
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->mdl[i].in_use)
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            cnt++;
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s dch in use count=%d", __FUNCTION__, cnt);
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return cnt;
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_tmr_hdlr
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process timer timeout
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_tmr_hdlr(TIMER_LIST_ENT *tle)
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb;
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i,j;
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s timer_in_use=%d",  __FUNCTION__, tle->in_use );
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MCLS; j++)
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->cch_timer_active)
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("%app_idx=%d, mcl_idx=%d mcl-connected=%d",
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  i, j,  p_mcb->is_connected);
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->cch_timer_active = FALSE;
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->is_connected)
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG3("Idle timeout Close CCH app_idx=%d mcl_idx=%d mcl_handle=%d",
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      i ,j, p_mcb->mcl_handle);
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTA_HlCchClose(p_mcb->mcl_handle);
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("CCH idle timeout But CCH not connected app_idx=%d mcl_idx=%d ",i,j);
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_stop_cch_timer
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  stop CCH timer
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_stop_cch_timer(UINT8 app_idx, UINT8 mcl_idx)
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s app_idx=%d, mcl_idx=%d timer_in_use=%d",
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,app_idx, mcl_idx, p_mcb->cch_timer.in_use);
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb->cch_timer_active = FALSE;
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_mcb->cch_timer.in_use)
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("stop CCH timer ");
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_stop_timer(&p_mcb->cch_timer);
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_start_cch_timer
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  start CCH timer
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_start_cch_timer(UINT8 app_idx, UINT8 mcl_idx)
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%s app_idx=%d, mcl_idx=%d  timer_active=%d timer_in_use=%d",
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,app_idx, mcl_idx,
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_mcb->cch_timer_active, p_mcb->cch_timer.in_use);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb->cch_timer_active = TRUE;
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_mcb->cch_timer.in_use)
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("Start CCH timer ");
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&p_mcb->cch_timer, 0, sizeof(TIMER_LIST_ENT));
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb->cch_timer.param = (UINT32)btif_hl_tmr_hdlr;
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_start_timer(&p_mcb->cch_timer, BTU_TTYPE_USER_FUNC,
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TIMEOUT_CCH_NO_DCH_SECS);
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("Restart CCH timer ");
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_stop_timer(&p_mcb->cch_timer);
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_start_timer(&p_mcb->cch_timer, BTU_TTYPE_USER_FUNC,
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TIMEOUT_CCH_NO_DCH_SECS);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using MDL ID
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_mdl_idx(UINT8 app_idx, UINT8 mcl_idx, UINT16 mdl_id,
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT8 *p_mdl_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    BOOLEAN found=FALSE;
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->mdl[i].in_use  &&
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (mdl_id !=0) &&
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (p_mcb->mdl[i].mdl_id== mdl_id))
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdl_idx = i;
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d mdl_id=%d mdl_idx=%d ",
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found, mdl_id, i);
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
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** Function      btif_hl_get_buf
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   get buffer
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     void
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid * btif_hl_get_buf(UINT16 size)
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    void *p_new;
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("ret size=%d GKI_MAX_BUF_SIZE=%d",size, 6000);
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (size < 6000)
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_new = GKI_getbuf(size);
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("btif_hl_get_buf use HL large data pool");
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_new = GKI_getpoolbuf(4);
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_new;
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_free_buf
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free buffer
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Return void
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_free_buf(void **p)
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p != NULL)
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%s OK", __FUNCTION__ );
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(*p);
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p = NULL;
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("%s NULL pointer",__FUNCTION__ );
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_the_first_reliable_existed
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function checks whether the first reliable DCH channel
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              has been setup on the MCL or not
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN - TRUE exist
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                        FALSE does not exist
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_is_the_first_reliable_existed(UINT8 app_idx, UINT8 mcl_idx )
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t          *p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN is_existed =FALSE;
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i ;
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< BTA_HL_NUM_MDLS_PER_MCL; i++)
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->mdl[i].in_use && p_mcb->mdl[i].is_the_first_reliable)
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            is_existed = TRUE;
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("bta_hl_is_the_first_reliable_existed is_existed=%d  ",is_existed );
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return is_existed;
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_delete_mdl
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the delete mdl control block
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_delete_mdl(btif_hl_delete_mdl_t *p_cb)
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_cb, 0 , sizeof(btif_hl_delete_mdl_t));
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_pcb
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the pending chan control block
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_pcb(btif_hl_pending_chan_cb_t *p_pcb)
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_pcb, 0 , sizeof(btif_hl_pending_chan_cb_t));
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_clean_mdl_cb
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Cleanup the MDL control block
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_mdl_cb(btif_hl_mdl_cb_t *p_dcb)
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_free_buf((void **) &p_dcb->p_rx_pkt);
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_dcb, 0 , sizeof(btif_hl_mdl_cb_t));
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_reset_mcb
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Reset MCL control block
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_clean_mcl_cb(UINT8 app_idx, UINT8 mcl_idx)
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s app_idx=%d, mcl_idx=%d", __FUNCTION__,app_idx, mcl_idx);
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_mcb, 0, sizeof(btif_hl_mcl_cb_t));
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**
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_sdp_idx_using_mdep_filter
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function finds the SDP record index using MDEP filter parameters
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_reset_mdep_filter(UINT8 app_idx)
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->filter.num_elems = 0;
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_sdp_idx_using_mdep_filter
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  This function finds the SDP record index using MDEP filter parameters
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_sdp_idx_using_mdep_filter(UINT8 app_idx, UINT8 mcl_idx, UINT8 *p_sdp_idx)
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t          *p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   i, j, num_recs,num_elems, num_mdeps, mdep_cnt, mdep_idx;
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ROLE       peer_mdep_role;
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16                  data_type;
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP_MDEP_CFG    *p_mdep;
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 found = FALSE;
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 elem_found;
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_recs = p_mcb->sdp.num_recs;
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_elems = p_acb->filter.num_elems;
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!num_elems)
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p_sdp_idx = 0;
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        found = TRUE;
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return found;
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<num_recs; i++)
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_mdeps = p_mcb->sdp.sdp_rec[i].num_mdeps;
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j<num_elems; j++ )
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = p_acb->filter.elem[j].data_type;
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            peer_mdep_role = p_acb->filter.elem[j].peer_mdep_role;
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            elem_found = FALSE;
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdep_cnt =0;
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdep_idx=0;
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            while (!elem_found && mdep_idx < num_mdeps )
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdep = &(p_mcb->sdp.sdp_rec[i].mdep_cfg[mdep_idx]);
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( (p_mdep->data_type == data_type) &&
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     (p_mdep->mdep_role == peer_mdep_role) )
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    elem_found = TRUE;
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdep_idx++;
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!elem_found)
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = FALSE;
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (found)
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_sdp_idx = i;
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d sdp_idx=%d",__FUNCTION__ , found, *p_sdp_idx);
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_reset_mdep_filter(app_idx);
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_reconnect_possible
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  check reconnect is possible or not
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_is_reconnect_possible(UINT8 app_idx, UINT8 mcl_idx,  int mdep_cfg_idx,
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      tBTA_HL_DCH_OPEN_PARAM *p_dch_open_api, tBTA_HL_MDL_ID *p_mdl_id)
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CFG      local_cfg = p_dch_open_api->local_cfg;
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_MODE     dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              use_mdl_dch_mode=FALSE;
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t    *p_mdl;
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t    *p_mdl1;
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                i, j;
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              is_reconnect_ok=FALSE;
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN              stream_mode_avail=FALSE;
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16               data_type = p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ID      peer_mdep_id = p_dch_open_api->peer_mdep_id;
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                mdl_idx;
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s app_idx=%d mcl_idx=%d mdep_cfg_idx=%d",
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_idx, mcl_idx, mdep_cfg_idx  );
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (local_cfg)
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_NO_PREF:
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx))
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                use_mdl_dch_mode = TRUE;
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_RELIABLE:
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            dch_mode = BTA_HL_DCH_MODE_RELIABLE;
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CFG_STREAMING:
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            dch_mode = BTA_HL_DCH_MODE_STREAMING;
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("Invalid local_cfg=%d",local_cfg );
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return is_reconnect_ok;
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("local_cfg=%d use_mdl_dch_mode=%d dch_mode=%d ",
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      local_cfg, use_mdl_dch_mode, dch_mode  );
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0, p_mdl=&p_acb->mdl_cfg[0] ; i< BTA_HL_NUM_MDL_CFGS; i++, p_mdl++ )
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mdl->base.active &&
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl->extra.data_type ==data_type &&
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (p_mdl->extra.peer_mdep_id != BTA_HL_INVALID_MDEP_ID && p_mdl->extra.peer_mdep_id == peer_mdep_id) &&
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_mdl->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR) ) &&
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl->base.mdl_id &&
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            !btif_hl_find_mdl_idx(app_idx, mcl_idx,p_mdl->base.mdl_id, &mdl_idx))
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("i=%d Matched active=%d   mdl_id =%d",
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              i, p_mdl->base.active, p_mdl->base.mdl_id);
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!use_mdl_dch_mode)
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mdl->base.dch_mode == dch_mode)
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    is_reconnect_ok = TRUE;
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl->base.mdl_id;
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("reconnect is possible dch_mode=%d mdl_id=%d", dch_mode, p_mdl->base.mdl_id );
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                is_reconnect_ok = TRUE;
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (j=i, p_mdl1=&p_acb->mdl_cfg[i]; j< BTA_HL_NUM_MDL_CFGS; j++, p_mdl1++)
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mdl1->base.active &&
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mdl1->extra.data_type == data_type &&
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (p_mdl1->extra.peer_mdep_id != BTA_HL_INVALID_MDEP_ID && p_mdl1->extra.peer_mdep_id == peer_mdep_id) &&
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(p_mdl1->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR)) &&
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mdl1->base.dch_mode == BTA_HL_DCH_MODE_STREAMING)
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        stream_mode_avail = TRUE;
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("found streaming mode mdl index=%d", j);
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (stream_mode_avail)
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_mode = BTA_HL_DCH_MODE_STREAMING;
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl1->base.mdl_id;
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("reconnect is ok index=%d dch_mode=streaming  mdl_id=%d", j, *p_mdl_id);
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_mode= p_mdl->base.dch_mode;
7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_id = p_mdl->base.mdl_id;
7025738f83aeb59361a0a2eda2460113f6dc919427The 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);
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("is_reconnect_ok  dch_mode=%d mdl_id=%d",is_reconnect_ok, dch_mode, *p_mdl_id);
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return is_reconnect_ok;
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_dch_open
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process DCH open request using the DCH Open API parameters
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_dch_open(UINT8 app_id, BD_ADDR bd_addr,
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         tBTA_HL_DCH_OPEN_PARAM *p_dch_open_api,
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         int mdep_cfg_idx,
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         btif_hl_pend_dch_op_t op, int *channel_id){
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx, mcl_idx;
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = FALSE;
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_ID              mdl_id;
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_RECONNECT_PARAM reconnect_param;
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s app_id=%d ",
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id );
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],bd_addr[2],  bd_addr[3], bd_addr[4],  bd_addr[5]);
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bd_addr , &mcl_idx))
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_pcb->in_use)
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->req_ctrl_psm = p_dch_open_api->ctrl_psm;
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->in_use = TRUE;
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *channel_id       =
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->channel_id =  (int) btif_hl_get_next_channel_id(app_id);
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING;
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->mdep_cfg_idx = mdep_cfg_idx;
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->op = op;
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->sdp.num_recs)
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mcb->valid_sdp_idx)
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_dch_open_api->ctrl_psm  = p_mcb->ctrl_psm;
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (!btif_hl_is_reconnect_possible(app_idx, mcl_idx, mdep_cfg_idx, p_dch_open_api, &mdl_id ))
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG0("Issue DCH open" );
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDchOpen(p_mcb->mcl_handle, p_dch_open_api);
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reconnect_param.ctrl_psm = p_mcb->ctrl_psm;
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reconnect_param.mdl_id = mdl_id;;
7775738f83aeb59361a0a2eda2460113f6dc919427The 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   );
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDchReconnect(p_mcb->mcl_handle, &reconnect_param);
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper = BTIF_HL_CCH_OP_DCH_OPEN;
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTA_HlSdpQuery(p_acb->app_handle, bd_addr);
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("status=%d ", status);
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_copy_bda
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  copy bt_bdaddr_t to BD_ADDR format
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_copy_bda(bt_bdaddr_t *bd_addr, BD_ADDR  bda){
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<6; i++)
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bd_addr->address[i] = bda[i] ;
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_copy_bda
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  display bt_bdaddr_t
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_display_bt_bda(bt_bdaddr_t *bd_addr){
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr->address[0],   bd_addr->address[1], bd_addr->address[2],
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr->address[3],  bd_addr->address[4],   bd_addr->address[5]);
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_dch_abort
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process DCH abort request
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid  btif_hl_dch_abort(UINT8 app_idx, UINT8 mcl_idx){
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s app_idx=%d mcl_idx=%d",__FUNCTION__, app_idx, mcl_idx );
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_mcb->is_connected)
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchAbort(p_mcb->mcl_handle);
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb->pcb.abort_pending = TRUE;
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
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_cch_open
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description   Process CCH open request
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns     Nothing
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_cch_open(UINT8 app_id, BD_ADDR bd_addr, UINT16 ctrl_psm,
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         int mdep_cfg_idx,
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         btif_hl_pend_dch_op_t op, int *channel_id){
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx, mcl_idx, chan_idx;
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = TRUE;
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%s app_id=%d ctrl_psm=%d mdep_cfg_idx=%d op=%d",
8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id, ctrl_psm, mdep_cfg_idx, op);
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],bd_addr[2],  bd_addr[3], bd_addr[4],  bd_addr[5]);
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx))
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_avail_mcl_idx(app_idx, &mcl_idx))
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_mcb,0, sizeof(btif_hl_mcl_cb_t));
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->in_use = TRUE;
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy(p_mcb->bd_addr, bd_addr);
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!ctrl_psm)
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper = BTIF_HL_CCH_OP_MDEP_FILTERING;
8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->cch_oper        = BTIF_HL_CCH_OP_MATCHED_CTRL_PSM;
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->req_ctrl_psm    = ctrl_psm;
8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->in_use = TRUE;
9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->mdep_cfg_idx = mdep_cfg_idx;
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_pcb->bd_addr, bd_addr, sizeof(BD_ADDR));
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_pcb->op = op;
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                switch (op)
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    case BTIF_HL_PEND_DCH_OP_OPEN:
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *channel_id       =
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->channel_id =  (int) btif_hl_get_next_channel_id(app_id);
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING;
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->channel_id =  p_acb->delete_mdl.channel_id;
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_pcb->cb_state = BTIF_HL_CHAN_CB_STATE_DESTROYED_PENDING;
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    default:
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlSdpQuery(p_acb->app_handle, bd_addr);
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR0("Open CCH request discarded- No mcl cb");
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR0("Open CCH request discarded- already in USE");
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = FALSE;
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("Invalid app_id=%d", app_id);
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (channel_id)
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("status=%d channel_id=0x%08x", status, *channel_id);
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("status=%d ", status);
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using channel id
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_cfg_idx_using_channel_id(int channel_id,
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  UINT8 *p_app_idx,
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  UINT8 *p_mdl_cfg_idx){
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j;
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int mdl_cfg_channel_id;
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MDL_CFGS; j++)
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdl =BTIF_HL_GET_MDL_CFG_PTR(i,j);
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            mdl_cfg_channel_id = *(BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(i,j));
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->in_use &&
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl->base.active &&
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (mdl_cfg_channel_id == channel_id))
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_app_idx = i;
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_mdl_cfg_idx =j;
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT5("%s found=%d channel_id=0x%08x, app_idx=%d mdl_cfg_idx=%d  ",
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,channel_id, i,j );
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using channel id
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_idx_using_channel_id(int channel_id,
10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              UINT8 *p_app_idx,UINT8 *p_mcl_idx,
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              UINT8 *p_mdl_idx){
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb;
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j,k;
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
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_MCLS; j++)
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (k=0; k< BTA_HL_NUM_MDLS_PER_MCL; k++)
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb =BTIF_HL_GET_MDL_CB_PTR(i,j,k);
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_acb->in_use &&
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->in_use &&
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->in_use &&
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (p_dcb->channel_id == channel_id))
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx =j;
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_idx = k;
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG5("%s found=%d app_idx=%d mcl_idx=%d mdl_idx=%d  ",
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,i,j,k );
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_channel_id_using_mdl_id
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find channel id using mdl_id'
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*********************************************************************************/
10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_channel_id_using_mdl_id(UINT8 app_idx, tBTA_HL_MDL_ID mdl_id,
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                            int *p_channel_id){
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 j=0;
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int mdl_cfg_channel_id;
10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_acb && p_acb->in_use)
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (j=0; j< BTA_HL_NUM_MDL_CFGS; j++)
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mdl =BTIF_HL_GET_MDL_CFG_PTR(app_idx,j);
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdl_cfg_channel_id = *(BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx,j));
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( p_mdl->base.active && (p_mdl->base.mdl_id == mdl_id))
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            found = TRUE;
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            *p_channel_id = mdl_cfg_channel_id;
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10685738f83aeb59361a0a2eda2460113f6dc919427The 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  ",
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    __FUNCTION__,found,*p_channel_id,mdl_id, app_idx,j );
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdl_idx_using_handle
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDL index using handle
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_app_idx,UINT8 *p_mcl_idx,
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_mdl_idx){
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb;
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb;
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j,k;
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< BTA_HL_NUM_MCLS; j++)
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb =BTIF_HL_GET_MCL_CB_PTR(i,j);
10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (k=0; k< BTA_HL_NUM_MDLS_PER_MCL; k++)
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb =BTIF_HL_GET_MDL_CB_PTR(i,j,k);
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_acb->in_use &&
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->in_use &&
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->in_use &&
11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (p_dcb->mdl_handle == mdl_handle))
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    found = TRUE;
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_app_idx = i;
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mcl_idx =j;
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_mdl_idx = k;
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
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    BTIF_TRACE_EVENT5("%s found=%d app_idx=%d mcl_idx=%d mdl_idx=%d  ",
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__,found,i,j,k );
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function        btif_hl_find_peer_mdep_id
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Find the peer MDEP ID from the received SPD records
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_peer_mdep_id(UINT8 app_id, BD_ADDR bd_addr,
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_HL_MDEP_ROLE local_mdep_role,
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         UINT16 data_type,
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_HL_MDEP_ID *p_peer_mdep_id){
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx, mcl_idx;
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb;
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP_REC     *p_rec;
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i, num_mdeps;
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             found = FALSE;
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_ROLE   peer_mdep_role;
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s app_id=%d local_mdep_role=%d, data_type=%d",
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id, local_mdep_role, data_type);
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("DB [%02x:%02x:%02x:%02x:%02x:%02x]",
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[0],  bd_addr[1],
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[2],  bd_addr[3],
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bd_addr[4],  bd_addr[5]);
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("local_mdep_role=%d", local_mdep_role);
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("data_type=%d", data_type);
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (local_mdep_role == BTA_HL_MDEP_ROLE_SINK)
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx) )
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx))
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb  =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_idx=%d mcl_idx=%d",app_idx, mcl_idx);
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("valid_spd_idx=%d sdp_idx=%d",p_mcb->valid_sdp_idx, p_mcb->sdp_idx);
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->valid_sdp_idx)
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_rec = &p_mcb->sdp.sdp_rec[p_mcb->sdp_idx];
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_mdeps = p_rec->num_mdeps;
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("num_mdeps=%d", num_mdeps);
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i< num_mdeps; i++)
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("p_rec->mdep_cfg[%d].mdep_role=%d",i, p_rec->mdep_cfg[i].mdep_role);
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("p_rec->mdep_cfg[%d].data_type =%d",i, p_rec->mdep_cfg[i].data_type );
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_rec->mdep_cfg[i].mdep_role == peer_mdep_role) &&
11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (p_rec->mdep_cfg[i].data_type == data_type))
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        found = TRUE;
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_peer_mdep_id = p_rec->mdep_cfg[i].mdep_id;
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("found =%d  *p_peer_mdep_id=%d", found,  *p_peer_mdep_id);
11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function        btif_hl_find_local_mdep_id
11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Find the local MDEP ID from the MDEP configuration
12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN
12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_local_mdep_id(UINT8 app_id,
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_HL_MDEP_ROLE local_mdep_role,
12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT16 mdep_data_type,
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_HL_MDEP_ID *p_local_mdep_id){
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx;
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  i,j;
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx) )
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  =BTIF_HL_GET_APP_CB_PTR(app_idx);
12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0; i< p_acb->sup_feature.num_of_mdeps; i++)
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == local_mdep_role )
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (j=0; j< p_acb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++)
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( p_acb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type == mdep_data_type)
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        found = TRUE;
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_local_mdep_id = p_acb->sup_feature.mdep[i].mdep_id;
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        return found;
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
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("found=%d local mdep id=%d", found, *p_local_mdep_id );
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mdep_cfg_idx
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MDEP configuration index using local MDEP_ID
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic  BOOLEAN btif_hl_find_mdep_cfg_idx(UINT8 app_idx,  tBTA_HL_MDEP_ID local_mdep_id,
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_mdep_cfg_idx){
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE     *p_sup_feature= &p_acb->sup_feature;
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found =FALSE;
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< p_sup_feature->num_of_mdeps; i++)
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( p_sup_feature->mdep[i].mdep_id == local_mdep_id)
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdep_cfg_idx = i;
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d mdep_idx=%d local_mdep_id=%d ",
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, found,i, local_mdep_id );
12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using BD address
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx(UINT8 app_idx, BD_ADDR p_bd_addr, UINT8 *p_mcl_idx){
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t  *p_mcb;
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, i);
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mcb->in_use &&
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (!memcmp (p_mcb->bd_addr, p_bd_addr, BD_ADDR_LEN)))
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mcl_idx = i;
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d idx=%d",__FUNCTION__, found, i);
13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_init
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL initialization function.
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init(void){
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_app_id();
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_init_next_channel_id();
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_disable
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Disable initialization function.
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_disable(void){
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_btif_hl_cb->state != BTIF_HL_STATE_DISABLING) &&
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_btif_hl_cb->state != BTIF_HL_STATE_DISABLED))
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_DISABLING);
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDisable();
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_is_no_active_app
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find whether or not  any APP is still in use
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_is_no_active_app(void){
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN no_active_app = TRUE;
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use)
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            no_active_app = FALSE;
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s no_active_app=%d  ", __FUNCTION__, no_active_app );
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return no_active_app;
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_free_app_idx
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description free an application control block
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_free_app_idx(UINT8 app_idx){
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((app_idx < BTA_HL_NUM_APPS) && btif_hl_cb.acb[app_idx].in_use )
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_cb.acb[app_idx].in_use = FALSE;
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset (&btif_hl_cb.acb[app_idx], 0, sizeof(btif_hl_app_cb_t));
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set HL state
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      void
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_set_state(btif_hl_state_t state){
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("btif_hl_set_state:  %d ---> %d ", p_btif_hl_cb->state, state);
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_btif_hl_cb->state = state;
13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_set_state
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get HL state
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      btif_hl_state_t
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_hl_state_t btif_hl_get_state(void){
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_get_state:  %d   ", p_btif_hl_cb->state);
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_btif_hl_cb->state;
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_data_type_idx
14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the index in the data type table
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN  btif_hl_find_data_type_idx(UINT16 data_type, UINT8 *p_idx){
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i< BTIF_HL_DATA_TABLE_SIZE; i++ )
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_type_table[i].data_type == data_type)
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_idx= i;
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d, data_type=0x%x idx=%d", __FUNCTION__, found, data_type, i);
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_get_max_tx_apdu_size
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum TX APDU size for the specified data type and
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_tx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 idx;
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_tx_apdu_size =0;
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_tx_apdu_size;
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = data_type_table[idx].max_rx_apdu_size;
14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_tx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s mdep_role=%d data_type=0x%4x size=%d",
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_tx_apdu_size);
14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_tx_apdu_size;
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_get_max_rx_apdu_size
14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the maximum RX APDU size for the specified data type and
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**              MDEP role
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      UINT16
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16  btif_hl_get_max_rx_apdu_size(tBTA_HL_MDEP_ROLE mdep_role,
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 data_type ){
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  idx;
14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 max_rx_apdu_size =0;
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_data_type_idx(data_type, &idx))
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_rx_apdu_size;
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = data_type_table[idx].max_tx_apdu_size;
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_RX_APDU_SIZE;
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_rx_apdu_size = BTIF_HL_DEFAULT_SRC_TX_APDU_SIZE;
15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s mdep_role=%d data_type=0x%4x size=%d",
15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, mdep_role, data_type, max_rx_apdu_size);
15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return max_rx_apdu_size;
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_if_channel_setup_pending
15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_mdep_role(bthl_mdep_role_t mdep, tBTA_HL_MDEP_ROLE *p){
15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (mdep)
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SOURCE:
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SOURCE;
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_MDEP_ROLE_SINK:
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_MDEP_ROLE_SINK;
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s status=%d bta_mdep_role=%d (%d:btif)",
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p, mdep);
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_bta_channel_type
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description convert bthl channel type to BTA DCH channel type
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_get_bta_channel_type(bthl_channel_type_t channel_type, tBTA_HL_DCH_CFG *p){
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (channel_type)
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_RELIABLE:
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_RELIABLE;
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_STREAMING:
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_STREAMING;
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTHL_CHANNEL_TYPE_ANY:
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p = BTA_HL_DCH_CFG_NO_PREF;
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = FALSE;
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s status = %d BTA DCH CFG=%d (1-rel 2-strm",
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, status, *p);
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_app_id
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next applcation id
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_next_app_id(){
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 next_app_id = btif_hl_cb.next_app_id;
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id++;
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return next_app_id;
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_next_channel_id
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get next channel id
16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_hl_get_next_channel_id(UINT8 app_id){
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 next_channel_id = btif_hl_cb.next_channel_id;
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int channel_id;
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id++;
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    channel_id = (app_id << 16) + next_channel_id;
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s channel_id=0x%08x, app_id=0x%02x next_channel_id=0x%04x", __FUNCTION__,
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      channel_id, app_id,  next_channel_id);
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return channel_id;
16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_app_id
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get the applicaiton id associated with the channel id
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns UINT8
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_hl_get_app_id(int channel_id){
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_id =(UINT8) (channel_id >> 16);
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s channel_id=0x%08x, app_id=0x%02x ", __FUNCTION__,channel_id, app_id);
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return app_id;
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_app_id
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the application id
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_app_id(void){
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_app_id = 1;
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_init_next_channel_id
16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the channel id
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_init_next_channel_id(void){
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cb.next_channel_id = 1;
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_save_mdl_cfg
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Save the MDL configuration
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN  btif_hl_save_mdl_cfg(UINT8 app_id, UINT8 item_idx,
16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_HL_MDL_CFG *p_mdl_cfg){
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t   *p_mdl=NULL;
16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             success = FALSE;
16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t    *p_mcb;
16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx, mcl_idx, mdl_idx, len;
16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t         bt_status;
16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t    evt_param;
16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                 *p_channel_id;
16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG6("%s app_ids=%d item_idx=%d, local_mdep_id=%d mdl_id=0x%x dch_mode=%d",
16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, app_id, item_idx, p_mdl_cfg->local_mdep_id,
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_mdl_cfg->mdl_id, p_mdl_cfg->dch_mode );
16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_channel_id = BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx, item_idx);
16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mdl)
16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_mdl->base, p_mdl_cfg, sizeof(tBTA_HL_MDL_CFG));
16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr , &mcl_idx))
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb->pcb.in_use)
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_channel_id = p_mcb->pcb.channel_id;
17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_channel_id = btif_hl_get_next_channel_id(p_acb->app_id);
17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl->extra.mdep_cfg_idx = p_mcb->pcb.mdep_cfg_idx;
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl->extra.data_type = p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.mdep_role,
17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                               p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type,
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                               &p_mdl->extra.peer_mdep_id))
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mdl->extra.peer_mdep_id = BTA_HL_INVALID_MDEP_ID;
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4("%s app_idx=%d item_idx=%d mld_id=0x%x",
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  __FUNCTION__, app_idx, item_idx, p_mdl->base.mdl_id);
17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                evt_param.update_mdl.app_idx = app_idx;
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                len = sizeof(btif_hl_update_mdl_t);
17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                        (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    success = TRUE;
17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s success=%d  ",__FUNCTION__, success );
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return success;
17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_delete_mdl_cfg
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Delete the MDL configuration
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN  btif_hl_delete_mdl_cfg(UINT8 app_id, UINT8 item_idx){
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl=NULL;
17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             success = FALSE;
17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx, len;
17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t         bt_status;
17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t    evt_param;
17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mdl = BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx);
17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_mdl)
17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memset(p_mdl, 0, sizeof(btif_hl_mdl_cfg_t));
17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            evt_param.update_mdl.app_idx = app_idx;
17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            len = sizeof(btif_hl_update_mdl_t);
17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("send BTIF_HL_UPDATE_MDL event app_idx=%d  ",app_idx);
17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((bt_status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UPDATE_MDL,
17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL)) == BT_STATUS_SUCCESS)
17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                success = TRUE;
17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ASSERTC(bt_status == BT_STATUS_SUCCESS, "context transfer failed", bt_status);
17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s success=%d  ",__FUNCTION__, success );
17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return success;
17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_app_idx_using_handle
17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the applicaiton index using handle
17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle,
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 *p_app_idx){
17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use &&
17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (btif_hl_cb.acb[i].app_handle == app_handle))
17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_app_idx = i;
17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT4("%s status=%d handle=%d app_idx=%d ",
17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      __FUNCTION__, found, app_handle , i);
18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_mcl_idx_using_handle
18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the MCL index using handle
18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle,
18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT8 *p_app_idx, UINT8 *p_mcl_idx){
18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t  *p_acb;
18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         found=FALSE;
18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i,j;
18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<BTA_HL_NUM_APPS; i++)
18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(i);
18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j < BTA_HL_NUM_MCLS ; j++)
18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->mcb[j].in_use &&
18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_acb->mcb[j].mcl_handle == mcl_handle))
18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_app_idx = i;
18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_mcl_idx = j;
18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s found=%d app_idx=%d mcl_idx=%d",__FUNCTION__,
18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      found, i, j);
18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_app_idx
18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find the application index using application ID
18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_app_idx(UINT8 app_id, UINT8 *p_app_idx){
18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_cb.acb[i].in_use &&
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (btif_hl_cb.acb[i].app_id == app_id))
18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_app_idx = i;
18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i );
18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_avail_mdl_idx
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find a not in-use MDL index
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_avail_mdl_idx(UINT8 app_idx, UINT8 mcl_idx,
18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   UINT8 *p_mdl_idx){
18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!p_mcb->mdl[i].in_use)
18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_clean_mdl_cb(&p_mcb->mdl[i]);
18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mdl_idx = i;
18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d idx=%d",__FUNCTION__, found, i);
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_avail_mcl_idx
19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find a not in-use MDL index
19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_avail_mcl_idx(UINT8 app_idx, UINT8 *p_mcl_idx){
19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found=FALSE;
19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MCLS ; i ++)
19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_cb.acb[app_idx].mcb[i].in_use)
19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_mcl_idx = i;
19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i);
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function      btif_hl_find_avail_app_idx
19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Find a not in-use APP index
19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns      BOOLEAN
19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_find_avail_app_idx(UINT8 *p_idx){
19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN found = FALSE;
19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_APPS ; i ++)
19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_cb.acb[i].in_use)
19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_idx = i;
19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s found=%d app_idx=%d", __FUNCTION__, found, i);
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/*******************************************************************************
19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dereg_cfm
19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the de-registration confirmation
19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dereg_cfm(tBTA_HL *p_data)
19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb;
19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx;
19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                     app_id = 0;
19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t    state = BTHL_APP_REG_STATE_DEREG_SUCCESS;
19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s de-reg status=%d app_handle=%d", __FUNCTION__, p_data->dereg_cfm.status, p_data->dereg_cfm.app_handle);
19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->dereg_cfm.app_handle, &app_idx))
19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        app_id = (int) p_acb->app_id;
19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->dereg_cfm.status == BTA_HL_STATUS_OK)
19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memset(p_acb, 0,sizeof(btif_hl_app_cb_t));
19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            state = BTHL_APP_REG_STATE_DEREG_FAILED;
19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("call reg state callback app_id=%d state=%d", app_id, state);
19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, app_id, state );
19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_is_no_active_app())
19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_disable();
19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_find_non_ative_app_nv_idx
19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      find a non-active applicaiton NV index
19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN TRUE-found
19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_non_ative_app_nv_idx(UINT8 *p_idx){
20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN   found = FALSE;
20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i, cur_nv_idx=0;
20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 cur_use_freq =0xFFFF;
20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t *p_data;
20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&p_ncb->app_queue))
20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data = (btif_hl_app_data_t *)GKI_getfirst((void *)&p_ncb->app_queue);
20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_data != NULL)
20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_data->active)
20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                found = TRUE;
20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* find least used app_nv_idx */
20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (cur_use_freq >= p_ncb->app_cb.app[p_data->app_nv_idx].use_freq)
20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    cur_use_freq =  p_ncb->app_cb.app[p_data->app_nv_idx].use_freq;
20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_idx = p_data->app_nv_idx;
20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data = (btif_hl_app_data_t *)GKI_getnext((void *)p_data);
20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2(" found=%d idx=%d", found , *p_idx);
20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_find_avail_app_nv_idx
20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  find a not in use applicaiton NV index
20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_find_avail_app_nv_idx(UINT8 *p_idx){
20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN   found = FALSE;
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i, first_idx;
20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0;i<BTIF_HL_NV_MAX_APPS; i++)
20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!p_ncb->app_cb.app[i].in_use)
20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *p_idx = i;
20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!found )
20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_find_non_ative_app_nv_idx (p_idx);
20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2(" found=%d idx=%d", found , *p_idx);
20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return found;
20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_save_app_data
20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  Save an applicaiton registration data into NV
20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_save_app_data(UINT8 app_idx){
20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 status = FALSE;
20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t      *p_data = GKI_getbuf((UINT16)sizeof( btif_hl_app_data_t));
20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_nv_app_data_t   *p_app;
20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_nv_idx;
20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t             bt_status;
20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s app_idx=%d p_acb=0x%x p_data=0x%x", __FUNCTION__, app_idx, p_acb, p_data);
20805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_acb && p_data && btif_hl_find_avail_app_nv_idx(&app_nv_idx))
20825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("app_nv_idx=%d  ",app_nv_idx );
20845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_app = &p_data->app_data;
20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_app->application_name, p_acb->application_name, (BTIF_HL_APPLICATION_NAME_LEN +1) );
20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_app->provider_name, p_acb->provider_name, (BTA_PROVIDER_NAME_LEN +1) );
20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_app->srv_name, p_acb->srv_name, (BTA_SERVICE_NAME_LEN +1) );
20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_app->srv_desp, p_acb->srv_desp, (BTA_SERVICE_DESP_LEN +1) );
20905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_app->channel_type, p_acb->channel_type, (sizeof(tBTA_HL_DCH_CFG)*BTA_HL_NUM_MDEPS));
20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy((void *) &p_app->sup_feature, (void *) &p_acb->sup_feature, sizeof(tBTA_HL_SUP_FEATURE));
20925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bt_status = btif_storage_write_hl_app_data(app_nv_idx,(char *) p_app,
20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                        sizeof(btif_hl_nv_app_data_t)))== BT_STATUS_SUCCESS)
20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
20975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((bt_status = btif_storage_write_hl_mdl_data(app_nv_idx,(char *) &p_acb->mdl_cfg[0],
20985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                            sizeof(btif_hl_nv_mdl_data_t)))== BT_STATUS_SUCCESS)
20995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
21005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_ncb->app_cb.app[app_nv_idx].in_use = TRUE;
21015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_ncb->app_cb.app[app_nv_idx].use_freq = 1;
21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ((bt_status = btif_storage_write_hl_apps_cb((char *) &p_ncb->app_cb,
21035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                               sizeof(btif_hl_nv_app_cb_t)))== BT_STATUS_SUCCESS)
21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->active = TRUE;
21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb->app_nv_idx  =
21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->app_nv_idx = app_nv_idx;
21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->app_idx = app_idx;
21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("p_data active=TRUE app_nv_idx =%d app_idx=%d ",app_nv_idx, app_idx );
21125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    GKI_enqueue(&p_ncb->app_queue,p_data);
21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
21175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
21185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_ncb->app_cb.app[app_nv_idx].in_use = FALSE;
21195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
21215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!status)
21255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_free_buf((void **) &p_data);
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
21285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_reg_cfm
21335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the registration confirmation
21355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_cfm(tBTA_HL *p_data){
21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t       *p_acb;
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                  app_idx;
21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t   state = BTHL_APP_REG_STATE_REG_SUCCESS;
21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t            bt_status;
21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21455738f83aeb59361a0a2eda2460113f6dc919427The 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);
21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(p_data->reg_cfm.app_id, &app_idx))
21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->reg_cfm.status == BTA_HL_STATUS_OK)
21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
21535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->app_handle = p_data->reg_cfm.app_handle;
21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("is_new_app=%d", p_acb->is_new_app);
21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->is_new_app)
21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->is_new_app = FALSE;
21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!btif_hl_save_app_data(app_idx))
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(FALSE, "Unable to save app data app_idx=%d", app_idx);
21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    state = BTHL_APP_REG_STATE_REG_FAILED;
21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("Increase the use freq app_idx=%d app_nv_idx=%d cur_use_freq=%d",
21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  app_idx, p_acb->app_nv_idx, p_ncb->app_cb.app[p_acb->app_nv_idx].use_freq);
21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_ncb->app_cb.app[p_acb->app_nv_idx].use_freq != 0xFFFF )
21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_ncb->app_cb.app[p_acb->app_nv_idx].use_freq ++;
21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_ncb->app_cb.app[p_acb->app_nv_idx].in_use = TRUE;
21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ((bt_status = btif_storage_write_hl_apps_cb((char *) &p_ncb->app_cb,
21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                               sizeof(btif_hl_nv_app_cb_t)))!= BT_STATUS_SUCCESS)
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(bt_status == BT_STATUS_SUCCESS, "Unable to save app_cb into NV app_nv_idx=%d ", p_acb->app_nv_idx);
21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    state = BTHL_APP_REG_STATE_REG_FAILED;
21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
21795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (state == BTHL_APP_REG_STATE_REG_FAILED)
21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDeregister(p_acb->app_handle);
21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_free_app_idx(app_idx);
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_app_idx(app_idx);
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            state = BTHL_APP_REG_STATE_REG_FAILED;
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21925738f83aeb59361a0a2eda2460113f6dc919427The 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);
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, ((int) p_data->reg_cfm.app_id), state );
21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_sdp_info_ind
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the SDP info indication
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_sdp_info_ind(tBTA_HL *p_data)
22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx;
22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->sdp_info_ind.app_handle, &app_idx))
22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_acb->sdp_info_ind, &p_data->sdp_info_ind, sizeof(tBTA_HL_SDP_INFO_IND));
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_chan_cb_state
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set the channel callback state
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_chan_cb_state(UINT8 app_idx, UINT8 mcl_idx, btif_hl_chan_cb_state_t state){
22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_chan_cb_state_t cur_state = p_pcb->cb_state;
22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (cur_state != state)
22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb->cb_state = state;
22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG3("%s state %d--->%d",__FUNCTION__, cur_state, state);
22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_destroyed_cb
22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send the channel destroyed callback
22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_destroyed_cb(btif_hl_app_cb_t        *p_acb ){
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t     bd_addr;
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int             app_id = (int) btif_hl_get_app_id(p_acb->delete_mdl.channel_id);
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_acb->delete_mdl.bd_addr);
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
22555738f83aeb59361a0a2eda2460113f6dc919427The 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,
22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_acb->delete_mdl.mdep_cfg_idx, BTHL_CONN_STATE_DESTROYED, 0);
22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_acb->delete_mdl.mdep_cfg_idx,
22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_acb->delete_mdl.channel_id, BTHL_CONN_STATE_DESTROYED, 0 );
22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_disconnecting_cb
22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnecting callback
22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_disconnecting_cb(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb = BTIF_HL_GET_MDL_CB_PTR( app_idx,  mcl_idx, mdl_idx);
22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t        *p_scb = p_dcb->p_scb;
22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t             bd_addr;
22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                     app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_scb->bd_addr);
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
22815738f83aeb59361a0a2eda2460113f6dc919427The 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,
22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_scb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0]);
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_bt_bda(&bd_addr);
22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       &bd_addr, p_scb->mdep_cfg_idx,
22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_scb->channel_id, BTHL_CONN_STATE_DISCONNECTING, p_scb->socket_id[0] );
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_connecting_cb
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel connecting callback
22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_connecting_cb(UINT8 app_idx, UINT8 mcl_idx){
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
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_pcb->channel_id);
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use && p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%s",__FUNCTION__);
23075738f83aeb59361a0a2eda2460113f6dc919427The 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,
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_display_bt_bda(&bd_addr);
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           &bd_addr, p_pcb->mdep_cfg_idx,
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_chan_cb_state(app_idx, mcl_idx, BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING);
23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_send_setup_disconnected_cb
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a channel disconnected callback
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_send_setup_disconnected_cb(UINT8 app_idx, UINT8 mcl_idx){
23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                 bd_addr;
23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         app_id = (int) btif_hl_get_app_id(p_pcb->channel_id);
23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_copy_bda(&bd_addr, p_pcb->bd_addr);
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s p_pcb->in_use=%d",__FUNCTION__, p_pcb->in_use);
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("%p_pcb->cb_state=%d",p_pcb->cb_state);
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING)
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23395738f83aeb59361a0a2eda2460113f6dc919427The 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,
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_CONNECTING, 0);
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_CONNECTING, 0 );
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23465738f83aeb59361a0a2eda2460113f6dc919427The 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,
23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, app_id,
23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (p_pcb->cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23555738f83aeb59361a0a2eda2460113f6dc919427The 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,
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_pcb->mdep_cfg_idx, BTHL_CONN_STATE_DISCONNECTED, 0);
23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_display_bt_bda(&bd_addr);
23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  app_id,
23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bd_addr, p_pcb->mdep_cfg_idx,
23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_pcb->channel_id, BTHL_CONN_STATE_DISCONNECTED, 0 );
23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_pcb(p_pcb);
23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_sdp_query_cfm
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the SDP query confirmation
23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_sdp_query_cfm(tBTA_HL *p_data){
23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb;
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SDP                     *p_sdp;
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CCH_OPEN_PARAM          open_param;
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           app_idx, mcl_idx, sdp_idx = 0;
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           num_recs, i, num_mdeps, j;
23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_cch_op_t                old_cch_oper;
23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         status =FALSE;
23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t     *p_pcb;
23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sdp = p_data->sdp_query_cfm.p_sdp;
23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_recs = p_sdp->num_recs;
23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("num of SDP records=%d",num_recs);
23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<num_recs; i++)
23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG3("rec_idx=%d ctrl_psm=0x%x data_psm=0x%x",
23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          (i+1),p_sdp->sdp_rec[i].ctrl_psm, p_sdp->sdp_rec[i].data_psm);
23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("MCAP supported procedures=0x%x",p_sdp->sdp_rec[i].mcap_sup_proc);
23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_mdeps = p_sdp->sdp_rec[i].num_mdeps;
23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("num of mdeps =%d",num_mdeps);
23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (j=0; j< num_mdeps; j++)
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("mdep_idx=%d mdep_id=0x%x data_type=0x%x mdep_role=0x%x",
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (j+1),
24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_id,
24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].data_type,
24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_sdp->sdp_rec[i].mdep_cfg[j].mdep_role );
24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->sdp_query_cfm.app_handle, &app_idx))
24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->cch_oper != BTIF_HL_CCH_OP_NONE)
24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(&p_mcb->sdp, p_sdp, sizeof(tBTA_HL_SDP));
24185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                old_cch_oper = p_mcb->cch_oper;
24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->cch_oper = BTIF_HL_CCH_OP_NONE;
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                switch (old_cch_oper)
24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    case BTIF_HL_CCH_OP_MDEP_FILTERING:
24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = btif_hl_find_sdp_idx_using_mdep_filter(app_idx, mcl_idx, &sdp_idx);
24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    default:
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (status)
24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->sdp_idx       = sdp_idx;
24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->valid_sdp_idx = TRUE;
24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb->ctrl_psm      = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm;
24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (old_cch_oper)
24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_CCH_OP_MDEP_FILTERING:
24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            if (p_pcb->in_use)
24415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            {
24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                if (!p_pcb->abort_pending)
24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                {
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    switch (p_pcb->op)
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    {
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        case BTIF_HL_PEND_DCH_OP_OPEN:
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                            btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                            break;
24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        default:
24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                            break;
24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    }
24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    open_param.ctrl_psm = p_mcb->ctrl_psm;
24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bdcpy(open_param.bd_addr, p_mcb->bd_addr);
24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    open_param.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    BTA_HlCchOpen(p_acb->app_handle, &open_param);
24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                }
24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                else
24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                {
24605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    BTIF_TRACE_DEBUG0("channel abort pending");
24615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                }
24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            }
24635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_CCH_OP_DCH_OPEN:
24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            status = btif_hl_proc_pending_op(app_idx,mcl_idx);
24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_ERROR1("Invalid CCH oper %d", old_cch_oper);
24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Can not find SDP idx discard CCH Open request");
24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_ind
24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open indication
24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_open_ind(tBTA_HL *p_data)
24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->cch_open_ind.app_handle, &app_idx))
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_find_mcl_idx(app_idx, p_data->cch_open_ind.bd_addr, &mcl_idx))
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_avail_mcl_idx(app_idx, &mcl_idx))
25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_mcb, 0, sizeof(btif_hl_mcl_cb_t));
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->in_use = TRUE;
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->is_connected = TRUE;
25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb->mcl_handle = p_data->cch_open_ind.mcl_handle;
25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy(p_mcb->bd_addr, p_data->cch_open_ind.bd_addr);
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_start_cch_timer(app_idx, mcl_idx);
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR0("The MCL already exist for cch_open_ind");
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_pending_op
25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the pending dch operation.
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_proc_pending_op(UINT8 app_idx, UINT8 mcl_idx)
25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
25415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                     status = FALSE;
25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM      dch_open;
25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_ID              mdl_id;
25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_RECONNECT_PARAM reconnect_param;
25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_pcb->in_use)
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        switch (p_pcb->op)
25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_OPEN:
25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!p_pcb->abort_pending)
25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("op BTIF_HL_PEND_DCH_OP_OPEN");
25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.ctrl_psm = p_mcb->ctrl_psm;
25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_mdep_id = p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_id;
25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role,
25605738f83aeb59361a0a2eda2460113f6dc919427The 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 ))
25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = p_acb->channel_type[p_pcb->mdep_cfg_idx];
25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((p_acb->sup_feature.mdep[p_pcb->mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            && !btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx))
25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("dch_open.local_cfg=%d  ", dch_open.local_cfg);
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_send_setup_connecting_cb(app_idx,mcl_idx);
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (!btif_hl_is_reconnect_possible(app_idx, mcl_idx, p_pcb->mdep_cfg_idx, &dch_open, &mdl_id ))
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG0("Issue DCH open" );
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchOpen(p_mcb->mcl_handle, &dch_open);
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.ctrl_psm = p_mcb->ctrl_psm;
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            reconnect_param.mdl_id = mdl_id;;
25815738f83aeb59361a0a2eda2460113f6dc919427The 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);
25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchReconnect(p_mcb->mcl_handle, &reconnect_param);
25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = TRUE;
25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = TRUE;
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            default:
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_open_cfm
26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH open confirmation
26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_cch_open_cfm(tBTA_HL *p_data)
26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx;
26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM   dch_open;
26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx_using_handle(p_data->cch_open_cfm.app_handle, &app_idx))
26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("app_idx=%d", app_idx);
26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mcl_idx=%d", mcl_idx);
26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->mcl_handle = p_data->cch_open_cfm.mcl_handle;
26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb->is_connected = TRUE;
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = btif_hl_proc_pending_op(app_idx, mcl_idx);
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (status)
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_start_cch_timer(app_idx, mcl_idx);
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_ind
26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close indication
26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_ind(tBTA_HL *p_data)
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->cch_close_ind.mcl_handle, &app_idx, &mcl_idx))
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_stop_cch_timer(app_idx, mcl_idx);
26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_mcl_sockets(app_idx, mcl_idx);
26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mcl_cb(app_idx, mcl_idx);
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cch_close_cfm
26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the CCH close confirmation
26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cch_close_cfm(tBTA_HL *p_data)
26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->cch_close_cfm.mcl_handle, &app_idx, &mcl_idx))
26875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_stop_cch_timer(app_idx, mcl_idx);
26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_mcl_sockets(app_idx, mcl_idx);
26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mcl_cb(app_idx, mcl_idx);
26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_create_ind
26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the MDL create indication
27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_create_ind(tBTA_HL *p_data){
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP            *p_mdep;
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdep_cfg_idx;
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 first_reliable_exist;
27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 success = TRUE;
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CFG         rsp_cfg = BTA_HL_DCH_CFG_UNKNOWN;
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP  rsp_code = BTA_HL_DCH_CREATE_RSP_CFG_REJ;
27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_CREATE_RSP_PARAM create_rsp_param;
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->dch_create_ind.mcl_handle, &app_idx, &mcl_idx))
27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_create_ind.local_mdep_id, &mdep_cfg_idx))
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mdep = &(p_acb->sup_feature.mdep[mdep_cfg_idx]);
27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            first_reliable_exist = btif_hl_is_the_first_reliable_existed(app_idx, mcl_idx);
27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            switch (p_mdep->mdep_cfg.mdep_role)
27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SOURCE:
27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_data->dch_create_ind.cfg == BTA_HL_DCH_CFG_NO_PREF)
27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (first_reliable_exist)
27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = p_acb->channel_type[mdep_cfg_idx];
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            rsp_cfg = BTA_HL_DCH_CFG_RELIABLE;
27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                case BTA_HL_MDEP_ROLE_SINK:
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_RELIABLE) ||
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (first_reliable_exist && (p_data->dch_create_ind.cfg  == BTA_HL_DCH_CFG_STREAMING)))
27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_code = BTA_HL_DCH_CREATE_RSP_SUCCESS;
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        rsp_cfg = p_data->dch_create_ind.cfg;
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                default:
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        success = FALSE;
27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (success)
27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("create response rsp_code=%d rsp_cfg=%d", rsp_code, rsp_cfg );
27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.local_mdep_id = p_data->dch_create_ind.local_mdep_id;
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.mdl_id = p_data->dch_create_ind.mdl_id;
27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.rsp_code = rsp_code;
27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        create_rsp_param.cfg_rsp = rsp_cfg;
27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchCreateRsp(p_mcb->mcl_handle, &create_rsp_param);
27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_ind
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH open indication
27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_open_ind(tBTA_HL *p_data)
27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t         *p_acb;
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t         *p_mcb;
27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    dc_cfg;
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN close_dch = FALSE;
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_ind.mcl_handle, &app_idx, &mcl_idx ))
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb =BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_open_ind.local_mdep_id, &mdep_cfg_idx))
28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           =  p_data->dch_open_ind.mdl_handle;
28075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_ind.local_mdep_id;
28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_ind.mdl_id;
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_ind.dch_mode;
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable = p_data->dch_open_ind.first_reliable;
28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_ind.mtu;
28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(btif_hl_find_channel_id_using_mdl_id(app_idx,p_dcb->mdl_id , &p_dcb->channel_id))
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (!btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_ERROR0("Unable to create socket");
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        close_dch = TRUE;
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR1("Unable find channel id for mdl_id=0x%x", p_dcb->mdl_id  );
28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_open_cfm
28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close confirmation
28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_open_cfm(tBTA_HL *p_data)
28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle, &app_idx, &mcl_idx ))
28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_open_cfm.local_mdep_id, &mdep_cfg_idx))
28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_open_cfm.mdl_handle;
28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_open_cfm.local_mdep_id;
28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_open_cfm.mdl_id;
28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_open_cfm.dch_mode;
28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_open_cfm.first_reliable;
28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_open_cfm.mtu;
28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_open_cfm.mdl_handle);
29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_cfm
29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_dch_reconnect_cfm(tBTA_HL *p_data)
29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t            *p_mcb;
29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t            *p_dcb;
29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pending_chan_cb_t   *p_pcb;
29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                    app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  status = FALSE;
29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                  close_dch = FALSE;
29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle, &app_idx, &mcl_idx ))
29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_pcb = BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx);
29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_cfm.local_mdep_id, &mdep_cfg_idx))
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_cfm.mdl_handle;
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_cfm.local_mdep_id;
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_cfm.mdl_id;
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_cfm.dch_mode;
29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_cfm.first_reliable;
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_cfm.mtu;
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = p_pcb->channel_id;
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_setup_connecting_cb(app_idx, mcl_idx);
29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = TRUE;
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_pcb(p_pcb);
29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTA_HlDchClose(p_data->dch_reconnect_cfm.mdl_handle);
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_reconnect_ind
30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect indication
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_reconnect_ind(tBTA_HL *p_data)
30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb;
30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb;
30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t        *p_dcb;
30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx, mdep_cfg_idx, dc_cfg;
30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                 close_dch = FALSE;
30175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
30195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(p_data->dch_reconnect_ind.mcl_handle, &app_idx, &mcl_idx))
30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx))
30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mdep_cfg_idx(app_idx, p_data->dch_reconnect_ind.local_mdep_id, &mdep_cfg_idx))
30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->in_use               = TRUE;
30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_handle           = p_data->dch_reconnect_ind.mdl_handle;
30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_cfg_idx   = mdep_cfg_idx;
30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->local_mdep_id        = p_data->dch_reconnect_ind.local_mdep_id;
30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mdl_id               = p_data->dch_reconnect_ind.mdl_id;
30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
30385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->dch_mode             = p_data->dch_reconnect_ind.dch_mode;
30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->is_the_first_reliable= p_data->dch_reconnect_ind.first_reliable;
30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->mtu                  = p_data->dch_reconnect_ind.mtu;
30415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->channel_id           = btif_hl_get_next_channel_id(p_acb->app_id);
30425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4(" app_idx=%d mcl_idx=%d mdl_idx=%d channel_id=%d",
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  app_idx, mcl_idx, mdl_idx, p_dcb->channel_id  );
30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_ERROR0("Unable to create socket");
30485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close_dch = TRUE;
30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("INVALID_LOCAL_MDEP_ID mdep_id=%d",p_data->dch_open_cfm.local_mdep_id);
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                close_dch = TRUE;
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (close_dch)
30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_mdl_cb(p_dcb);
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            close_dch = TRUE;
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close_dch = TRUE;
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (close_dch)
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlDchClose(p_data->dch_reconnect_ind.mdl_handle);
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_ind
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH close indication
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_ind(tBTA_HL *p_data)
30815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
30845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
30855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
30875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_ind.mdl_handle,
30885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &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        btif_hl_release_socket(app_idx,mcl_idx, mdl_idx);
30925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
30935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_num_dchs_in_use(app_idx, mcl_idx))
30945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
30955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("remote DCH close success mdl_idx=%d", mdl_idx);
30965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_close_cfm
31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH reconnect confirmation
31045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_close_cfm(tBTA_HL *p_data)
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
31135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_close_cfm.mdl_handle,
31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          &app_idx, &mcl_idx, &mdl_idx ))
31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_release_socket(app_idx,mcl_idx,mdl_idx);
31205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_clean_mdl_cb(p_dcb);
31215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_num_dchs_in_use(app_idx, mcl_idx))
31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_start_cch_timer(app_idx, mcl_idx);
31235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("BTAPP local DCH close success mdl_idx=%d", mdl_idx);
31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_ind
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort indicaiton
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_ind(tBTA_HL_MCL_HANDLE mcl_handle){
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(mcl_handle, &app_idx, &mcl_idx))
31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_abort_cfm
31505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the abort confirmation
31525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_abort_cfm(tBTA_HL_MCL_HANDLE mcl_handle){
31575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx;
31585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__ );
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mcl_idx_using_handle(mcl_handle, &app_idx, &mcl_idx))
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_send_setup_disconnected_cb(app_idx,mcl_idx);
31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_send_data_cfm
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the send data confirmation
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_send_data_cfm(tBTA_HL_MDL_HANDLE mdl_handle,
31765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       tBTA_HL_STATUS status){
31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx,mcl_idx, mdl_idx;
31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
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(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_free_buf((void **) &p_dcb->p_tx_pkt);
31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("send success free p_tx_pkt tx_size=%d", p_dcb->tx_size);
31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb->tx_size = 0;
31885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_dch_cong_ind
31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the DCH congestion change indication
31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing
31985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_dch_cong_ind(tBTA_HL *p_data)
32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t         *p_dcb;
32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx, mdl_idx;
32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_proc_dch_cong_ind");
32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_mdl_idx_using_handle(p_data->dch_cong_ind.mdl_handle, &app_idx, &mcl_idx, &mdl_idx))
32105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb =BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb->cong = p_data->dch_cong_ind.cong;
32135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_app_data
32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process registration request
32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN btif_hl_proc_app_data(UINT8 app_idx){
32275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t *p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
32285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t *p_data;
32295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_nv_app_data_t *p_nv;
32305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN is_match;
32315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 num_mdeps, i;
32325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_CFG *p_cfg;
32335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_CFG *p_nv_cfg;
32345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status = TRUE;
32355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t bt_status;
32365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s app_idx=%d  ", __FUNCTION__, app_idx  );
32385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&p_ncb->app_queue))
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data = (btif_hl_app_data_t *)GKI_getfirst((void *)&p_ncb->app_queue);
32425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_data != NULL)
32435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            is_match = FALSE;
32455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_nv = &p_data->app_data;
32465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("compare with nv idx=%d", p_data->app_nv_idx);
32475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_nv->application_name != NULL &&
32485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcmp((void *)p_acb->application_name, p_nv->application_name,(BTIF_HL_APPLICATION_NAME_LEN +1)) != 0 )
32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("application_name mismatch NV(%s)",p_nv->application_name);
32515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_nv->provider_name != NULL &&
32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     memcmp((void *)p_acb->provider_name, p_nv->provider_name,(BTA_PROVIDER_NAME_LEN +1)) != 0)
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("provider_name mismatch NV(%s)",p_nv->provider_name);
32565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_nv->srv_name != NULL &&
32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     memcmp((void *)p_acb->srv_name, p_nv->srv_name,(BTA_SERVICE_NAME_LEN +1)) != 0)
32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("srv_name mismatch NV(%s)",p_nv->srv_name);
32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_nv->srv_desp != NULL &&
32635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     memcmp((void *)p_acb->srv_desp, p_nv->srv_desp,(BTA_SERVICE_DESP_LEN +1)) != 0)
32645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("srv_desp mismatch NV(%s)",p_nv->srv_desp);
32665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_acb->sup_feature.app_role_mask != p_nv->sup_feature.app_role_mask)
32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("app_role_mask mismatch app_role_mask=0x%x", p_nv->sup_feature.app_role_mask);
32705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_acb->sup_feature.advertize_source_sdp != p_nv->sup_feature.advertize_source_sdp)
32725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("advertize_source_sdp mismatch advertize_source_sdp=0x%x",
32745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_nv->sup_feature.advertize_source_sdp);
32755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_acb->sup_feature.num_of_mdeps != p_nv->sup_feature.num_of_mdeps)
32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("num_of_mdeps mismatch num_of_mdeps=0x%x", p_nv->sup_feature.num_of_mdeps);
32795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 //TODO remove debug after testing completed
32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("Step1 match for app_idx=%d now check mdep cfg", app_idx);
32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                is_match = TRUE;
32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_mdeps = p_acb->sup_feature.num_of_mdeps;
32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("num of medeps num_mdeps=%d  ", num_mdeps);
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i< num_mdeps; i++)
32885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_cfg = &p_acb->sup_feature.mdep[i].mdep_cfg;
32905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_nv_cfg = &p_nv->sup_feature.mdep[i].mdep_cfg;
32915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("mdep-role=%d data_type=%d ",
32935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_cfg->mdep_role,p_cfg->data_cfg[0].data_type );
32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG2("from NV mdep-role=%d data_type=%d ",
32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_nv_cfg->mdep_role,p_nv_cfg->data_cfg[0].data_type );
32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_cfg->mdep_role != p_nv_cfg->mdep_role ||
32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_cfg->data_cfg[0].data_type !=  p_nv_cfg->data_cfg[0].data_type )
32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
32995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        is_match = FALSE;
33005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG0("Not Match" );
33015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
33025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
33035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!is_match)
33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_data = (btif_hl_app_data_t *)GKI_getnext((void *)p_data);
33095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("Match is found app_nv_idx=%d",p_data->app_nv_idx );
33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
33145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (is_match)
33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bt_status = btif_storage_read_hl_mdl_data(p_data->app_nv_idx,
33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (char *) &p_acb->mdl_cfg[0], sizeof(btif_hl_nv_mdl_data_t)))
33225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            == BT_STATUS_SUCCESS)
33235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->app_idx = app_idx;
33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->is_new_app = FALSE;
33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->app_nv_idx = p_data->app_nv_idx;
33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("btif_storage_read_hl_mdl_data OK  app_idx=%d app_nv_idx=%d",
33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              app_idx, p_data->app_nv_idx );
33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (i=0; i<BTA_HL_NUM_MDL_CFGS; i++)
33315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //TODO remove debug after testing completed
33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_acb->mdl_cfg[i].base.active)
33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG5("i=%d mdl_id=0x%x dch_mode=%d local_mdep_id=%d peer_mdep_id=%d",
33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      i,
33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_acb->mdl_cfg[i].base.mdl_id,
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_acb->mdl_cfg[i].base.dch_mode,
33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_acb->mdl_cfg[i].base.local_mdep_id,
33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      p_acb->mdl_cfg[i].extra.peer_mdep_id );
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        else
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status= FALSE;
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&p_acb->mdl_cfg, 0, sizeof(btif_hl_nv_mdl_data_t));
33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb->is_new_app = TRUE;
33555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("No Match this is a new app set is_new_app=TRUE");
33565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("status=%d  ",status  );
33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cb_evt
33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process registration request
33695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_reg_request(UINT8 app_idx, UINT8  app_id,
33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_REG_PARAM *p_reg_param,
33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     tBTA_HL_CBACK *p_cback){
33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status= BT_STATUS_SUCCESS;
33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_data_t *p_data;
33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_nv_app_cb_t *p_app_cb;
33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG4("%s app_idx=%d app_id=%d is_app_read=%d", __FUNCTION__, app_idx, app_id,p_ncb->is_app_read );
33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_ncb->is_app_read)
33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((status = btif_storage_read_hl_apps_cb((char *)&p_ncb->app_cb, sizeof(btif_hl_nv_app_cb_t))) == BT_STATUS_SUCCESS)
33855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_app_cb = &p_ncb->app_cb;
33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (i=0; i< BTIF_HL_NV_MAX_APPS; i++)
33885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
33895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_app_cb->app[i].in_use )
33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG1("app_nv_idx=%d in_use=TRUE",i);
33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (  (p_data = (btif_hl_app_data_t *)GKI_getbuf((UINT16)sizeof(btif_hl_app_data_t)))!=NULL)
33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
33945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("load app_nv_idx=%d ", i );
33955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_data->active = FALSE;
33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_data->app_idx = 0;
33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_data->app_nv_idx = i;
33985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((status = btif_storage_read_hl_app_data(i, (char *)&p_data->app_data, sizeof(btif_hl_nv_app_data_t)))
33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            == BT_STATUS_SUCCESS)
34005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG0("enuque app_data");
34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            GKI_enqueue(&p_ncb->app_queue, (void *) p_data);
34035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
34045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
34065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG0("btif_storage_read_hl_app_data failed");
34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            status = BT_STATUS_FAIL;
34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_free_buf((void **)&p_data);
34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
34105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
34115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
34125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
34135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
34145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG0("GKI_getbuf failed");
34155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
34165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_free_buf((void **)&p_data);
34175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
34185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
34195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
34205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("app data load status=%d (0-BT_STATUS_SUCCESS) ", status );
34235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( status == BT_STATUS_SUCCESS)
34245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_ncb->is_app_read = TRUE;
34265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
34285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG0("status=failed remove all elements in app_queue");
34305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!GKI_queue_is_empty(&p_ncb->app_queue))
34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data = (btif_hl_app_data_t *)GKI_getfirst((void *)&p_ncb->app_queue);
34335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    while (p_data != NULL)
34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
34355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        GKI_remove_from_queue((void *)&p_ncb->app_queue, p_data);
34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_data = (btif_hl_app_data_t *)GKI_getfirst((void *)&p_ncb->app_queue);
34375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
34395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
34425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("btif_storage_read_hl_apps_cb failed");
34445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BT_STATUS_SUCCESS)
34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!btif_hl_proc_app_data(app_idx))
34505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_app_idx(app_idx);
34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("call reg state callback app_id=%d state=%d", app_id, BTHL_APP_REG_STATE_REG_FAILED);
34535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_HL_CALL_CBACK(bt_hl_callbacks, app_reg_state_cb, (int) app_id,
34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               BTHL_APP_REG_STATE_REG_FAILED );
34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTA_HlRegister(app_id, p_reg_param, btif_hl_cback);
34595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
34655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_proc_cb_evt
34675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL callback events
34695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
34715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
34735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_proc_cb_evt(UINT16 event, char* p_param){
34745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                *p_data = (btif_hl_evt_cb_t *)p_param;
34765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_bdaddr_t                     bd_addr;
34775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_channel_state_t            state=BTHL_CONN_STATE_DISCONNECTED;
34785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         send_chan_cb=TRUE;
34795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM               reg_param;
34805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t                *p_acb;
34815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_app_reg_state_t            reg_state = BTHL_APP_REG_STATE_REG_FAILED;
34825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             app_id;
34835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                           preg_idx;
34845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     bt_status;
34855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
34875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
34885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
34905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_CONNECTED_CB:
34925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_SEND_DISCONNECTED_CB:
34935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING)
34945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_CONNECTED;
34955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if (p_data->chan_cb.cb_state == BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING)
34965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                state = BTHL_CONN_STATE_DISCONNECTED;
34975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
34985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                send_chan_cb = FALSE;
34995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (send_chan_cb)
35015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_copy_bda(&bd_addr, p_data->chan_cb.bd_addr);
35035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4("state callbk: ch_id=0x%08x cb_state=%d state=%d  fd=%d",
35045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.channel_id,
35055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_data->chan_cb.cb_state,
35065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  state,  p_data->chan_cb.fd);
35075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_display_bt_bda(&bd_addr);
35085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb,  p_data->chan_cb.app_id,
35095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   &bd_addr, p_data->chan_cb.mdep_cfg_index,
35105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   p_data->chan_cb.channel_id, state, p_data->chan_cb.fd );
35115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_REG_APP:
35155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb  = BTIF_HL_GET_APP_CB_PTR(p_data->reg.app_idx);
35165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            app_id = (int) p_acb->app_id;
35175738f83aeb59361a0a2eda2460113f6dc919427The 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);
35185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_state() == BTIF_HL_STATE_ENABLED && p_acb->reg_pending )
35195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->reg_pending = FALSE;
35215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.dev_type = p_acb->dev_type;
35235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
35245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_name = p_acb->srv_name;
35255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_srv_desp = p_acb->srv_desp;
35265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                reg_param.p_provider_name = p_acb->provider_name;
35275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_reg_request (p_data->reg.app_idx, p_acb->app_id, &reg_param, btif_hl_cback);
35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG2("reg request is processed state=%d reg_pending=%d", btif_hl_get_state(), p_acb->reg_pending);
35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UNREG_APP:
35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Rcv BTIF_HL_UNREG_APP app_idx=%d", p_data->unreg.app_idx );
35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->unreg.app_idx);
35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTA_HlDeregister(p_acb->app_handle);
35405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTIF_HL_UPDATE_MDL:
35425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Rcv BTIF_HL_UPDATE_MDL app_idx=%d", p_data->update_mdl.app_idx );
35435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(p_data->update_mdl.app_idx);
35445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("app_nv_idx=%d", p_acb->app_nv_idx );
35455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bt_status = btif_storage_write_hl_mdl_data(p_acb->app_nv_idx,(char *) &p_acb->mdl_cfg[0],
35465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       sizeof(btif_hl_nv_mdl_data_t));
35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("bt_status=%d",  bt_status);
35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
35515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("Unknown event %d", event);
35525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
35545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
35555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
35575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_evt
35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process HL events
35615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
35635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
35655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_evt(UINT16 event, char* p_param){
35665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL *p_data = (tBTA_HL *)p_param;
35675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 app_idx, mcl_idx;
35685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t      *p_acb;
35695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = NULL;
35705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR               bd_addr;
35715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_pend_dch_op_t  pending_op;
35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN status;
35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
35755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
35765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
35775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_REGISTER_CFM_EVT");
35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("app_id=%d app_handle=%d status=%d ",
35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_id,
35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.app_handle,
35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->reg_cfm.status );
35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_reg_cfm(p_data);
35865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
35885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_SDP_INFO_IND_EVT");
35895738f83aeb59361a0a2eda2460113f6dc919427The 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",
35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.app_handle,
35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.ctrl_psm,
35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_psm,
35935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.data_x_spec,
35945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_info_ind.mcap_sup_procs);
35955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_sdp_info_ind(p_data);
35965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
35975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
35995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DEREGISTER_CFM_EVT");
36005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_handle=%d status=%d ",
36015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.app_handle,
36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dereg_cfm.status );
36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dereg_cfm(p_data);
36045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
36075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_SDP_QUERY_CFM_EVT");
36085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_handle=%d status =%d",
36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.app_handle,
36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.status);
36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
36135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[0], p_data->sdp_query_cfm.bd_addr[1],
36145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[2], p_data->sdp_query_cfm.bd_addr[3],
36155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->sdp_query_cfm.bd_addr[4], p_data->sdp_query_cfm.bd_addr[5]);
36165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->sdp_query_cfm.status == BTA_HL_STATUS_OK)
36185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_sdp_query_cfm(p_data);
36195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
36235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_app_idx_using_handle(p_data->sdp_query_cfm.app_handle, &app_idx))
36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
36275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->sdp_query_cfm.bd_addr, &mcl_idx))
36285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
36305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ( (p_mcb->cch_oper =  BTIF_HL_CCH_OP_MDEP_FILTERING) ||
36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             (p_mcb->cch_oper == BTIF_HL_CCH_OP_DCH_OPEN) )
36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            pending_op = p_mcb->pcb.op;
36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            switch (pending_op)
36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            {
36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_OPEN:
36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_RECONNECT:
36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                default:
36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    break;
36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            }
36445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            if (!p_mcb->is_connected)
36455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_clean_mcl_cb(app_idx, mcl_idx);
36465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
36475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
36485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
36495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_OPEN_CFM_EVT");
36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("app_handle=%d mcl_handle=%d status =%d",
36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.app_handle,
36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.mcl_handle,
36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.status);
36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[0], p_data->cch_open_cfm.bd_addr[1],
36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[2], p_data->cch_open_cfm.bd_addr[3],
36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_cfm.bd_addr[4], p_data->cch_open_cfm.bd_addr[5]);
36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->cch_open_cfm.status == BTA_HL_STATUS_OK)
36665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_cch_open_cfm(p_data);
36685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
36705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
36725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
36755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_app_idx_using_handle(p_data->cch_open_cfm.app_handle, &app_idx))
36775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
36785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
36795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_find_mcl_idx(app_idx, p_data->cch_open_cfm.bd_addr, &mcl_idx))
36805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
36815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
36825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        pending_op = p_mcb->pcb.op;
36835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        switch (pending_op)
36845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
36855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_OPEN:
36865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
36875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
36885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_RECONNECT:
36895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
36905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            default:
36915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                break;
36925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
36935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_clean_mcl_cb(app_idx, mcl_idx);
36945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
36955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
36965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
37005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_OPEN_CFM_EVT");
37015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_handle=0x%x status=%d ",
37025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mcl_handle,
37035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_handle,
37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.status);
37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG5("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.first_reliable,
37075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.dch_mode,
37085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.local_mdep_id,
37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mdl_id,
37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_cfm.mtu);
37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_open_cfm.status == BTA_HL_STATUS_OK)
37125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_open_cfm(p_data);
37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
37165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
37185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
37215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
37235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
37245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
37255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
37265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
37275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
37285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
37295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
37305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
37315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
37325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
37335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
37345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
37355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
37365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
37375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
37425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_OPEN_IND_EVT");
37435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("app_handle=%d mcl_handle=%d",
37445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.app_handle,
37455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.mcl_handle);
37465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG6("DB [%02x] [%02x] [%02x] [%02x] [%02x] [%02x]",
37475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[0], p_data->cch_open_ind.bd_addr[1],
37485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[2], p_data->cch_open_ind.bd_addr[3],
37495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_open_ind.bd_addr[4], p_data->cch_open_ind.bd_addr[5]);
37505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_open_ind(p_data);
37525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
37555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CREATE_IND_EVT");
37565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mcl_handle=%d",
37575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mcl_handle );
37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("local_mdep_id =%d mdl_id=%d cfg=%d",
37595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.local_mdep_id,
37605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.mdl_id,
37615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_create_ind.cfg);
37625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_create_ind(p_data);
37635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
37665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_OPEN_IND_EVT");
37675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_handle=0x%x",
37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mcl_handle,
37695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_handle );
37705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG5("first_reliable =%d dch_mode=%d local_mdep_id=%d mdl_id=%d mtu=%d",
37715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.first_reliable,
37725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.dch_mode,
37735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.local_mdep_id,
37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mdl_id,
37755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_open_ind.mtu);
37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_open_ind(p_data);
37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
37815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DELETE_MDL_IND_EVT");
37825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_id=0x%x",
37835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mcl_handle,
37845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_ind.mdl_id);
37855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mcl_idx_using_handle( p_data->delete_mdl_ind.mcl_handle, &app_idx, &mcl_idx))
37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
37895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* todo send callback find channel id from NV? */
37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DELETE_MDL_CFM_EVT");
37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_id=0x%x status=%d",
37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mcl_handle,
37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.mdl_id,
37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->delete_mdl_cfm.status);
37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_find_mcl_idx_using_handle( p_data->delete_mdl_cfm.mcl_handle, &app_idx,&mcl_idx))
38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
38045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_send_destroyed_cb(p_acb);
38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* todo if delete mdl failed we still report mdl delete ok and remove the mld_id from NV*/
38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RECONNECT_CFM_EVT");
38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("mcl_handle=%d mdl_handle=%d status=%d   ",
38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mcl_handle,
38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_handle,
38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.status);
38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
38185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.first_reliable,
38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.dch_mode,
38205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mdl_id,
38215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_cfm.mtu);
38225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_reconnect_cfm.status == BTA_HL_STATUS_OK)
38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = btif_hl_proc_dch_reconnect_cfm(p_data);
38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
38295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = FALSE;
38315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!status)
38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx_using_handle(p_data->dch_open_cfm.mcl_handle,&app_idx, &mcl_idx))
38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    pending_op = p_mcb->pcb.op;
38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switch (pending_op)
38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_OPEN:
38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            btif_hl_send_setup_disconnected_cb(app_idx, mcl_idx);
38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_RECONNECT:
38455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        case BTIF_HL_PEND_DCH_OP_DELETE_MDL:
38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        default:
38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            break;
38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_CLOSE_CFM_EVT");
38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d status =%d",
38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.mcl_handle,
38585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_cfm.status);
38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->cch_close_cfm.status == BTA_HL_STATUS_OK)
38605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_cch_close_cfm(p_data);
38625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CCH_CLOSE_IND_EVT");
38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle =%d intentional_close=%s",
38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->cch_close_ind.mcl_handle,
38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->cch_close_ind.intentional?"Yes":"No"));
38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_cch_close_ind(p_data);
38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CLOSE_IND_EVT");
38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d intentional_close=%s",
38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_ind.mdl_handle,
38785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              (p_data->dch_close_ind.intentional?"Yes":"No") );
38795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_close_ind(p_data);
38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_CLOSE_CFM_EVT");
38855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d status=%d ",
38865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.mdl_handle,
38875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_close_cfm.status);
38885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_close_cfm.status == BTA_HL_STATUS_OK)
38905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_dch_close_cfm(p_data);
38925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
38945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
38965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ECHO_TEST_CFM_EVT");
38975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d    status=%d",
38985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.mcl_handle,
38995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->echo_test_cfm.status );
39005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* not supported */
39015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
39055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RECONNECT_IND_EVT");
39065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d mdl_handle=5d",
39085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mcl_handle,
39095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_handle );
39105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG4("first_reliable =%d dch_mode=%d mdl_id=%d mtu=%d",
39115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.first_reliable,
39125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.dch_mode,
39135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mdl_id,
39145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_reconnect_ind.mtu);
39155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_reconnect_ind(p_data);
39175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
39205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CONG_CHG_IND_EVT");
39215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=%d cong =%d",
39225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.mdl_handle,
39235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_cong_ind.cong);
39245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_dch_cong_ind(p_data);
39255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
39285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ABORT_IND_EVT");
39295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mcl_handle=%d",
39305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_ind.mcl_handle );
39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_abort_ind(p_data->dch_abort_ind.mcl_handle);
39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_ABORT_CFM_EVT");
39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mcl_handle=%d status =%d",
39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.mcl_handle,
39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_abort_cfm.status);
39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->dch_abort_cfm.status == BTA_HL_STATUS_OK)
39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_proc_abort_cfm(p_data->dch_abort_ind.mcl_handle);
39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
39455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_SEND_DATA_CFM_EVT");
39465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("mdl_handle=0x%x status =%d",
39475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.mdl_handle,
39485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_send_data_cfm.status);
39495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_proc_send_data_cfm(p_data->dch_send_data_cfm.mdl_handle,
39505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       p_data->dch_send_data_cfm.status);
39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
39545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_DCH_RCV_DATA_IND_EVT");
39555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("mdl_handle=0x%x ",
39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->dch_rcv_data_ind.mdl_handle);
39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* do nothing here */
39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
39615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("Unknown Event (0x%02x)...", event);
39625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
39655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
39675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_cback
39695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL events
39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_cback(tBTA_HL_EVT event, tBTA_HL *p_data){
39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
39785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
39795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_REGISTER_CFM_EVT:
39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_REGISTER_CFM);
39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_INFO_IND_EVT:
39865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_INFO_IND);
39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DEREGISTER_CFM_EVT:
39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DEREGISTER_CFM);
39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_SDP_QUERY_CFM_EVT:
39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_SDP_QUERY_CFM);
39935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_CFM_EVT:
39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_CFM);
39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_CFM_EVT:
39985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_OPEN_IND_EVT:
40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_OPEN_IND);
40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CREATE_IND_EVT:
40045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CREATE_IND);
40055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_OPEN_IND_EVT:
40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_IND_EVT:
40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DELETE_MDL_CFM_EVT:
40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_CFM_EVT:
40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_CFM);
40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_CFM_EVT:
40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CCH_CLOSE_IND_EVT:
40225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CCH_CLOSE_IND);
40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_IND_EVT:
40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CLOSE_IND);
40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_CLOSE_CFM_EVT:
40285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
40295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ECHO_TEST_CFM_EVT:
40315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
40325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RECONNECT_IND_EVT:
40345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_OPEN_IND);
40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CONG_CHG_IND_EVT:
40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_DCH_CONG_IND);
40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_IND_EVT:
40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_IND);
40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_ABORT_CFM_EVT:
40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MCL_CFM);
40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_SEND_DATA_CFM_EVT:
40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_CFM);
40475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_DCH_RCV_DATA_IND_EVT:
40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_MDL_IND);
40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* catch any failed context transfers */
40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_upstreams_ctrl_evt
40645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events in the BTIF task context
40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_upstreams_ctrl_evt(UINT16 event, char* p_param){
40715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_CTRL *p_data = (tBTA_HL_CTRL *) p_param;
40725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_REG_PARAM   reg_param;
40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
40755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
40785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
40825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CTRL_ENABLE_CFM_EVT");
40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("status=%d", p_data->enable_cfm.status);
40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->enable_cfm.status == BTA_HL_STATUS_OK)
40865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_ENABLED);
40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                for (i=0; i < BTA_HL_NUM_APPS ; i ++)
40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb = BTIF_HL_GET_APP_CB_PTR(i);
40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->in_use && p_acb->reg_pending)
40945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
40955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->reg_pending = FALSE;
40965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.dev_type = p_acb->dev_type;
40975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.sec_mask = BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT;
40985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_name = p_acb->srv_name;
40995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_srv_desp = p_acb->srv_desp;
41005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        reg_param.p_provider_name = p_acb->provider_name;
41015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("Register pending app_id=%d", p_acb->app_id);
41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_proc_reg_request (i, p_acb->app_id, &reg_param, btif_hl_cback);
41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("Rcv BTA_HL_CTRL_DISABLE_CFM_EVT");
41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("status=%d",
41125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->disable_cfm.status);
41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->disable_cfm.status == BTA_HL_STATUS_OK)
41155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(p_btif_hl_cb, 0, sizeof(btif_hl_cb_t));
41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_state(BTIF_HL_STATE_DISABLED);
41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_ctrl_cback
41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback function for HL control events
41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_ctrl_cback(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data){
41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status;
41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int param_len = 0;
41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s event %d", __FUNCTION__, event);
41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch ( event )
41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_ENABLE_CFM_EVT:
41455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_HL_CTRL_DISABLE_CFM_EVT:
41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            param_len = sizeof(tBTA_HL_CTRL_ENABLE_DISABLE);
41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
41495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = btif_transfer_context(btif_hl_upstreams_ctrl_evt, (uint16_t)event, (void*)p_data, param_len, NULL);
41535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
41545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         connect_channel
41585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     connect a data channel
41605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
41625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t connect_channel(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int *channel_id){
41655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   app_idx, mcl_idx;
41665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t        *p_acb = NULL;
41675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t        *p_mcb=NULL;
41685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t             status = BT_STATUS_SUCCESS;
41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_DCH_OPEN_PARAM  dch_open;
41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR                 bda;
41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
41765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i<6; i++)
41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bda[i] = (UINT8) bd_addr->address[i];
41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
41835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mcl_idx(app_idx, bda , &mcl_idx))
41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mcb->is_connected)
41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.ctrl_psm = p_mcb->ctrl_psm;
41915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                dch_open.local_mdep_id = p_acb->sup_feature.mdep[mdep_cfg_index].mdep_id;
41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role,
41945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.data_cfg[0].data_type, &dch_open.peer_mdep_id ))
41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.local_cfg = p_acb->channel_type[mdep_cfg_index];
41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE)
41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        && !btif_hl_is_the_first_reliable_existed(app_idx,mcl_idx))
41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        dch_open.local_cfg = BTA_HL_DCH_CFG_RELIABLE;
42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    dch_open.sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if( !btif_hl_dch_open(p_acb->app_id, bda, &dch_open,
42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                              mdep_cfg_index, BTIF_HL_PEND_DCH_OP_OPEN, channel_id ))
42065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
42085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_EVENT1("%s loc0 status = BT_STATUS_FAIL", __FUNCTION__);
42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
42115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = BT_STATUS_FAIL;
42145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
42175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
42225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
42235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb->filter.num_elems =1;
42245738f83aeb59361a0a2eda2460113f6dc919427The 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;
42255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_acb->sup_feature.mdep[mdep_cfg_index].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
42265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
42275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
42285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
42295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_cch_open(p_acb->app_id, bda, 0, mdep_cfg_index,
42315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   BTIF_HL_PEND_DCH_OP_OPEN,
42325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   channel_id))
42335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
42355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BT_STATUS_FAIL;
42415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("%s status=%d channel_id=0x%08x", __FUNCTION__, status, *channel_id);
42445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
42465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
42475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
42485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         destroy_channel
42505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      destroy a data channel
42525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
42545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
42565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t destroy_channel(int channel_id){
42575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx, mcl_idx, mdl_idx, mdl_cfg_idx, app_id, mdep_cfg_idx;
42585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
42595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cfg_t     *p_mdl;
42605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t     *p_mcb;
42615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t     *p_acb;
42625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
42645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT2("%s channel_id=0x%08x", __FUNCTION__, channel_id);
42655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
42665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_if_channel_setup_pending(channel_id, &app_idx, &mcl_idx))
42695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_dch_abort(app_idx, mcl_idx);
42715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
42735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (btif_hl_find_mdl_cfg_idx_using_channel_id(channel_id, &app_idx, &mdl_cfg_idx))
42755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
42765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
42775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!p_acb->delete_mdl.active)
42785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mdl =BTIF_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx);
42805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.active = TRUE;
42815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdl_id = p_mdl->base.mdl_id;
42825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.channel_id = channel_id;
42835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->delete_mdl.mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
42845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_acb->delete_mdl.bd_addr, p_mdl->base.peer_bd_addr,sizeof(BD_ADDR));
42855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (btif_hl_find_mcl_idx(app_idx, p_mdl->base.peer_bd_addr, &mcl_idx))
42875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
42885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
42895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_mcb->is_connected)
42905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
42915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTIF_TRACE_DEBUG1("calling BTA_HlDeleteMdl mdl_id=%d",p_acb->delete_mdl.mdl_id );
42925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTA_HlDeleteMdl(p_mcb->mcl_handle, p_acb->delete_mdl.mdl_id);
42935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
42945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
42955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
42965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
42975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
42985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
42995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
43005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("btif_hl_delete_mdl calling btif_hl_cch_open"  );
43025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    mdep_cfg_idx = p_mdl->extra.mdep_cfg_idx;
43035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_acb->filter.num_elems =1;
43045738f83aeb59361a0a2eda2460113f6dc919427The 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;
43055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)
43065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE;
43075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
43085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_acb->filter.elem[0].peer_mdep_role = BTA_HL_MDEP_ROLE_SINK;
43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (btif_hl_cch_open(p_acb->app_id, p_acb->delete_mdl.bd_addr, 0,
43105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         mdep_cfg_idx,
43115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         BTIF_HL_PEND_DCH_OP_DELETE_MDL, NULL))
43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        status = BT_STATUS_FAIL;
43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (  status == BT_STATUS_FAIL)
43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* fail for now  */
43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_clean_delete_mdl(&p_acb->delete_mdl);
43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
43245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_BUSY;
43265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
43295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
43315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
43355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
43365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
43375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         unregister_application
43395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     unregister an HDP application
43415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
43435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
43455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t unregister_application(int app_id){
43465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t    *p_acb;
43475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               app_idx;
43485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                 len;
43495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t         status = BT_STATUS_SUCCESS;
43505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t    evt_param;
43515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
43535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT2("%s app_id=%d", __FUNCTION__, app_id);
43545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
43555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(((UINT8)app_id), &app_idx))
43575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.unreg.app_idx = app_idx;
43595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_unreg_t);
43605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_UNREG_APP,
43615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
43625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
43635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
43685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status  = BT_STATUS_FAIL;
43705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("de-reg return status=%d", status);
43735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
43745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
43755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
43765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         register_application
43785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     register an HDP application
43805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
43825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
43845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t register_application(bthl_reg_param_t *p_reg_param, int *app_id){
43855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t            *p_acb;
43865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_SUP_FEATURE         *p_sup;
43875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_CFG            *p_cfg;
43885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDEP_DATA_TYPE_CFG  *p_data;
43895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                       app_idx=0, i=0, pending_reg_idx=0;
43905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bthl_mdep_cfg_t             *p_mdep_cfg;
43915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                 status = BT_STATUS_SUCCESS;
43925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t            evt_param;
43935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                         len;
43945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    CHECK_BTHL_INIT();
43965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
43975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
43985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_get_state() == BTIF_HL_STATE_DISABLED)
44005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_init();
44025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_state(BTIF_HL_STATE_ENABLING);
44035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_HlEnable(btif_hl_ctrl_cback);
44045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!btif_hl_find_avail_app_idx(&app_idx))
44075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR0("Unable to allocate a new application control block");
44095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BT_STATUS_FAIL;
44105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
44135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->in_use = TRUE;
44145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_acb->app_id = btif_hl_get_next_app_id();
44175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->application_name != NULL )
44195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->application_name, p_reg_param->application_name, BTIF_HL_APPLICATION_NAME_LEN);
44205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->provider_name != NULL )
44225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->provider_name, p_reg_param->provider_name, BTA_PROVIDER_NAME_LEN);
44235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_name != NULL )
44255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_name, p_reg_param->srv_name, BTA_SERVICE_NAME_LEN);
44265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_reg_param->srv_desp != NULL )
44285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        strncpy(p_acb->srv_desp, p_reg_param->srv_desp, BTA_SERVICE_DESP_LEN);
44295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup = &p_acb->sup_feature;
44315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->advertize_source_sdp = TRUE;
44325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_rx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
44335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->echo_cfg.max_tx_apdu_size = BTIF_HL_ECHO_MAX_TX_RX_APDU_SIZE;
44345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_sup->num_of_mdeps = p_reg_param->number_of_mdeps;
44355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44365738f83aeb59361a0a2eda2460113f6dc919427The 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++  )
44375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg = &p_sup->mdep[i].mdep_cfg;
44395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_cfg->num_of_mdep_data_types = 1;
44405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data  = &p_cfg->data_cfg[0];
44415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( !btif_hl_get_bta_mdep_role(p_mdep_cfg->mdep_role, &(p_cfg->mdep_role)))
44435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
44445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_ERROR1("Invalid mdep_role=%d", p_mdep_cfg->mdep_role);
44455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BT_STATUS_FAIL;
44465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
44475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
44485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
44495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
44505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK )
44515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK;
44525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
44535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sup->app_role_mask |=  BTA_HL_MDEP_ROLE_MASK_SOURCE;
44545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) &&
44565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 (p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK) )
44575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
44585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_DUAL;
44595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
44605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if ( p_sup->app_role_mask & BTA_HL_MDEP_ROLE_MASK_SINK )
44615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SINK;
44625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
44635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_acb->dev_type = BTA_HL_DEVICE_TYPE_SOURCE;
44655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->data_type = (UINT16) p_mdep_cfg->data_type;
44675738f83aeb59361a0a2eda2460113f6dc919427The 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);
44685738f83aeb59361a0a2eda2460113f6dc919427The 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);
44695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_mdep_cfg->mdep_description != NULL )
44715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                strncpy(p_data->desp, p_mdep_cfg->mdep_description, BTA_SERVICE_DESP_LEN);
44725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( !btif_hl_get_bta_channel_type(p_mdep_cfg->channel_type, &(p_acb->channel_type[i])))
44745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
44755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_ERROR1("Invalid channel_type=%d", p_mdep_cfg->channel_type);
44765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BT_STATUS_FAIL;
44775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
44785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
44795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
44805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BT_STATUS_SUCCESS)
44835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *app_id = (int) p_acb->app_id;
44855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        evt_param.reg.app_idx = app_idx;
44865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = sizeof(btif_hl_reg_t);
44875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb->reg_pending = TRUE;
44885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG2("calling btif_transfer_context status=%d app_id=%d", status, *app_id);
44895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_REG_APP,
44905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (char*) &evt_param, len, NULL);
44915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
44925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
44955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_free_app_idx(app_idx);
44975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("register_application status=%d app_id=%d", status, *app_id);
45005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
45015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         init
45055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     initializes the hl interface
45075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         bt_status_t
45095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t init( bthl_callbacks_t* callbacks ){
45125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t status = BT_STATUS_SUCCESS;
45135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
45155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
45165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks_cb = *callbacks;
45175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_hl_callbacks = &bt_hl_callbacks_cb;
45185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_thread_init();
45195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
45215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         cleanup
45255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Closes the HL interface
45275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
45295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void  cleanup( void ){
45325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
45335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_display_calling_process_name();
45345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hl_callbacks)
45355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_disable_service(BTA_HDP_SERVICE_ID);
45375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hl_callbacks = NULL;
45385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_disable();
45415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_close_select_thread();
45425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bthl_interface_t bthlInterface = {
45455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sizeof(bthl_interface_t),
45465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    init,
45475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    register_application,
45485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    unregister_application,
45495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    connect_channel,
45505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    destroy_channel,
45515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    cleanup,
45525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
45535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_get_interface
45585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Get the hl callback interface
45605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bthf_interface_t
45625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst bthl_interface_t *btif_hl_get_interface(){
45655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_EVENT1("%s", __FUNCTION__);
45665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return &bthlInterface;
45675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_update_maxfd
45725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Update the max fd if the input fd is greater than the current max fd
45745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
45765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btif_hl_update_maxfd( int max_org_s){
45795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
45805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int maxfd=0;
45815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_update_maxfd max_org_s= %d", max_org_s);
45835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    maxfd = max_org_s;
45855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
45865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
45885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (maxfd < p_scb->max_s)
45895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
45905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            maxfd = p_scb->max_s;
45915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("btif_hl_update_maxfd 1 maxfd=%d", maxfd);
45925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
45935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
45945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
45955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (maxfd < p_scb->max_s)
45965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
45975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                maxfd = p_scb->max_s;
45985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("btif_hl_update_maxfd 2 maxfd=%d", maxfd);
45995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
46005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
46015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_update_maxfd final *p_max_s=%d", maxfd);
46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return maxfd;
46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_get_socket_state
46105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description get socket state
46125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns btif_hl_soc_state_t
46145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtif_hl_soc_state_t btif_hl_get_socket_state(btif_hl_soc_cb_t *p_scb){
46175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("btif_hl_get_socket_state state=%d", p_scb->state);
46185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_scb->state;
46195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_set_socket_state
46235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set socket state
46255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_set_socket_state(btif_hl_soc_cb_t *p_scb, btif_hl_soc_state_t new_state){
46305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("btif_hl_set_socket_state %d---->%d", p_scb->state, new_state);
46315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_scb->state = new_state;
46325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_mcl_sockets
46365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Release all sockets on the MCL
46385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx){
46435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t    *p_scb = NULL;
46445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
46455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t    *p_dcb;
46465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             found= FALSE;
46475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
46485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++)
46495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i);
46515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_dcb && p_dcb->in_use && p_dcb->p_scb)
46525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
46535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG3("found socket for app_idx=%d mcl_id=%d, mdl_idx=%d", app_idx, mcl_idx, i);
46545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state (p_dcb->p_scb, BTIF_HL_SOC_STATE_W4_REL);
46555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = NULL;
46565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            found = TRUE;
46575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
46585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (found)
46605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
46615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_release_socket
46655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description release a specified socket
46675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
46695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_release_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
46725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t       *p_scb = NULL;
46735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
46745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
46765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG3("app_idx=%d mcl_idx=%d mdl_idx=%d",  app_idx, mcl_idx, mdl_idx  );
46775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && p_dcb->p_scb)
46795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = p_dcb->p_scb;
46815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_REL);
46825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dcb->p_scb = NULL;
46835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_select_close_connected();
46845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_create_socket
46895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description create a socket
46915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
46935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_create_socket(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx){
46965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
46975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
46985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
46995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                 soc_idx;
47005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN               status = FALSE;
47015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
47035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dcb && ((p_scb = (btif_hl_soc_cb_t *)GKI_getbuf((UINT16)sizeof(btif_hl_soc_cb_t)))!=NULL))
47055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (socketpair(AF_UNIX, SOCK_STREAM, 0, p_scb->socket_id) >= 0)
47075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("socket id[0]=%d id[1]=%d",p_scb->socket_id[0], p_scb->socket_id[1] );
47095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dcb->p_scb = p_scb;
47105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->app_idx = app_idx;
47115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mcl_idx = mcl_idx;
47125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdl_idx = mdl_idx;
47135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->channel_id = p_dcb->channel_id;
47145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->mdep_cfg_idx = p_dcb->local_mdep_cfg_idx;
47155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_scb->bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR));
47165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_set_socket_state(p_scb,  BTIF_HL_SOC_STATE_W4_ADD);
47175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb->max_s = p_scb->socket_id[1];
47185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_enqueue(&soc_queue, (void *) p_scb);
47195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_wakeup();
47205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = TRUE;
47215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
47235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_free_buf((void **)&p_scb);
47265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("%s status=%d", __FUNCTION__, status);
47305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
47315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_add_socket_to_set
47355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Add a socket
47375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
47395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_add_socket_to_set( fd_set *p_org_set){
47425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
47435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL;
47445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mcl_cb_t                *p_mcb = NULL;
47455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
47465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
47475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
47485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
47505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
47525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
47535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
47545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("btif_hl_add_socket_to_set first p_scb=0x%x", p_scb);
47555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
47565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
47575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_ADD)
47585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
47595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_W4_READ);
47605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                FD_SET(p_scb->socket_id[1], p_org_set);
47615738f83aeb59361a0a2eda2460113f6dc919427The 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));
47625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_mcb = BTIF_HL_GET_MCL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx);
47635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
47645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_mcb && p_dcb)
47655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
47665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_stop_cch_timer(p_scb->app_idx, p_scb->mcl_idx);
47675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.app_id = (int) btif_hl_get_app_id(p_dcb->channel_id);
47685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_mcb->bd_addr, sizeof(BD_ADDR));
47695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_dcb->channel_id;
47705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
47715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_dcb->local_mdep_cfg_idx;
47725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING;
47735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
47745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_CONNECTED_CB,
47755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
47765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
47775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
47785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
47795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
47805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("next p_scb=0x%x", p_scb);
47815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
47825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
47855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_socket
47895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description close a socket
47915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
47935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_close_socket( fd_set *p_org_set){
47965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t                *p_scb = NULL;
47975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN                         element_removed = FALSE;
47985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t                *p_dcb = NULL ;
47995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_evt_cb_t                evt_param;
48005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                             len;
48015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bt_status_t                     status;
48025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
48045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
48055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
48075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
48085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
48095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_REL)
48105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG3("app_idx=%d mcl_id=%d, mdl_idx=%d",
48125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
48135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_set_socket_state(p_scb,   BTIF_HL_SOC_STATE_IDLE);
48145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_scb->socket_id[1] != -1)
48155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
48165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    FD_CLR(p_scb->socket_id[1] , p_org_set);
48175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    shutdown(p_scb->socket_id[1], SHUT_RDWR);
48185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    close(p_scb->socket_id[1]);
48195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.app_id = (int) btif_hl_get_app_id(p_scb->channel_id);
48215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(evt_param.chan_cb.bd_addr, p_scb->bd_addr, sizeof(BD_ADDR));
48225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.channel_id = p_scb->channel_id;
48235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.fd = p_scb->socket_id[0];
48245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.mdep_cfg_index = (int ) p_scb->mdep_cfg_idx;
48255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    evt_param.chan_cb.cb_state = BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING;
48265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len = sizeof(btif_hl_send_chan_state_cb_t);
48275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    status = btif_transfer_context (btif_hl_proc_cb_evt, BTIF_HL_SEND_DISCONNECTED_CB,
48285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    (char*) &evt_param, len, NULL);
48295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ASSERTC(status == BT_STATUS_SUCCESS, "context transfer failed", status);
48305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
48345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
48365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("while loop next p_scb=0x%x", p_scb);
48375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
48405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
48415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
48425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_IDLE)
48435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
48455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG4("idle socket app_idx=%d mcl_id=%d, mdl_idx=%d p_dcb->in_use=%d",
48465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx, p_dcb->in_use);
48475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                GKI_remove_from_queue((void *)&soc_queue, p_scb);
48485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btif_hl_free_buf((void **)&p_scb);
48495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dcb->p_scb = NULL;
48505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = TRUE;
48515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG2("element_removed=%d p_scb=0x%x", element_removed, p_scb);
48535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (element_removed)
48545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
48555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                element_removed = FALSE;
48565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
48575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
48585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
48595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
48605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("while loop p_scb=0x%x", p_scb);
48625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
48635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
48655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_callback
48695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select wakup callback to add or close a socket
48715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
48735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_wakeup_callback( fd_set *p_org_set ,  int wakeup_signal){
48775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG2("entering %s wakeup_signal=0x%04x",__FUNCTION__, wakeup_signal);
48785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (wakeup_signal == btif_hl_signal_select_wakeup )
48805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_add_socket_to_set(p_org_set);
48825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (wakeup_signal == btif_hl_signal_select_close_connected)
48845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btif_hl_close_socket(p_org_set);
48865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
48875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
48885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
48895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_monitor_callback
48935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Select monitor callback to check pending socket actions
48955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
48975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_select_monitor_callback( fd_set *p_cur_set , fd_set *p_org_set){
49005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_soc_cb_t      *p_scb = NULL;
49015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_mdl_cb_t      *p_dcb = NULL;
49025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r;
49035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("entering %s",__FUNCTION__);
49055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!GKI_queue_is_empty(&soc_queue))
49075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_scb = (btif_hl_soc_cb_t *)GKI_getfirst((void *)&soc_queue);
49095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0(" GKI queue is not empty ");
49105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_scb != NULL)
49115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
49125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_get_socket_state(p_scb) == BTIF_HL_SOC_STATE_W4_READ)
49135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
49145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (FD_ISSET(p_scb->socket_id[1], p_cur_set))
49155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
49165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("read data");
49175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("state= BTIF_HL_SOC_STATE_W4_READ");
49185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb = BTIF_HL_GET_MDL_CB_PTR(p_scb->app_idx, p_scb->mcl_idx, p_scb->mdl_idx);
49195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb->p_tx_pkt)
49205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
49215738f83aeb59361a0a2eda2460113f6dc919427The 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);
49225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        btif_hl_free_buf((void **) &p_dcb->p_tx_pkt);
49235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
49245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_dcb->p_tx_pkt =  btif_hl_get_buf (p_dcb->mtu);
49255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_dcb )
49265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
49275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //do
49285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // {
49295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        //     r = recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT));
49305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        // } while (r == SOCKET_ERROR && errno == EINTR);
49315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if ((r = (int)recv(p_scb->socket_id[1], p_dcb->p_tx_pkt, p_dcb->mtu , MSG_DONTWAIT)) > 0)
49335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
49345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback send data r =%d", r);
49355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            p_dcb->tx_size = r;
49365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback send data tx_size=%d", p_dcb->tx_size );
49375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlSendData(p_dcb->mdl_handle, p_dcb->tx_size  );
49385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
49395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (r <= 0 )
49415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
49425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTIF_TRACE_DEBUG1("btif_hl_select_monitor_callback  receive failed r=%d",r);
49435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            BTA_HlDchClose(p_dcb->mdl_handle );
49445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
49455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
49465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
49475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
49485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_scb = (btif_hl_soc_cb_t *)GKI_getnext((void *)p_scb );
49495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
49505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
49525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("btif_hl_select_monitor_queue is empty");
49545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("leaving %s",__FUNCTION__);
49565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup_init
49605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description select loop wakup init
49625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup_init(fd_set* set){
49675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wakeup_init");
49685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (socketpair(AF_UNIX, SOCK_STREAM, 0, signal_fds) < 0)
49695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("socketpair failed: %s", strerror(errno));
49715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
49725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49745738f83aeb59361a0a2eda2460113f6dc919427The 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] );
49755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_SET(signal_fds[0], set);
49765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return signal_fds[0];
49785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wakeup
49835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to wakupo the select loop
49855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
49875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wakeup(void){
49905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_wakeup;
49915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wakeup");
49925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
49935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_close_connected
49985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send a signal to close a socket
50005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_close_connected(void){
50055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_close_connected;
50065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_close_connected");
50075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
50085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_close_select_thread
50135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send signal to close the thread and then close all signal FDs
50155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_close_select_thread(void)
50205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = 0;
50225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_on = btif_hl_signal_select_exit;
50235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_signal_select_exit");
50245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result = send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
50255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Wait for the select_thread_id to exit */
50265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (select_thread_id != -1) {
50275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pthread_join(select_thread_id, NULL);
50285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        select_thread_id = -1;
50295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project   /* Cleanup signal sockets */
50315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(signal_fds[0] != -1)
50325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(signal_fds[0]);
50345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        signal_fds[0] = -1;
50355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(signal_fds[1] != -1)
50375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(signal_fds[1]);
50395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        signal_fds[1] = -1;
50405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
50425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_reset
50475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description clear the received signal for the select loop
50495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_reset(void){
50545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char sig_recv = 0;
50555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wake_reset");
50575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
50585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return(int)sig_recv;
50595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_wake_signaled
50635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description check whether a fd is set or not
50655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns int
50675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int btif_hl_select_wake_signaled(fd_set* set){
50705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("btif_hl_select_wake_signaled");
50715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return FD_ISSET(signal_fds[0], set);
50725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_thread_cleanup
50765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description  shut down and clean up the select loop
50785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
50805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_hl_thread_cleanup(){
50835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (listen_s != -1)
50845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(listen_s);
50855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (connected_s != -1)
50865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        shutdown(connected_s, SHUT_RDWR);
50885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        close(connected_s);
50895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    listen_s = connected_s = -1;
50915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("hl thread cleanup");
50925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_select_thread
50965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description the select loop
50985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void
51005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void *btif_hl_select_thread(void *arg){
51035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    fd_set org_set, curr_set;
51045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int r, max_curr_s, max_org_s;
51055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("entered btif_hl_select_thread");
51075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FD_ZERO(&org_set);
51085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    max_org_s = btif_hl_select_wakeup_init(&org_set);
51095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("max_s=%d ", max_org_s);
51105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (;;)
51125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
51135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        r = 0;
51145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG0("set curr_set = org_set ");
51155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        curr_set = org_set;
51165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_curr_s = max_org_s;
51175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        int ret = select((max_curr_s + 1), &curr_set, NULL, NULL, NULL);
51185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_DEBUG1("select unblocked ret=%d", ret);
51195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (ret == -1)
51205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
51215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG0("select() ret -1, exit the thread");
51225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_thread_cleanup();
51235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            select_thread_id = -1;
51245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return 0;
51255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
51265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (ret)
51275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
51285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("btif_hl_select_wake_signaled, signal ret=%d", ret);
51295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (btif_hl_select_wake_signaled(&curr_set))
51305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
51315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                r = btif_hl_select_wake_reset();
51325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BTIF_TRACE_DEBUG1("btif_hl_select_wake_signaled, signal:%d", r);
51335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (r == btif_hl_signal_select_wakeup || r == btif_hl_signal_select_close_connected )
51345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
51355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_select_wakeup_callback(&org_set, r);
51365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
51375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if( r == btif_hl_signal_select_exit)
51385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
51395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btif_hl_thread_cleanup();
51405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTIF_TRACE_DEBUG0("Exit hl_select_thread for btif_hl_signal_select_exit");
51415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return 0;
51425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
51435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
51445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btif_hl_select_monitor_callback(&curr_set, &org_set);
51465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            max_org_s = btif_hl_update_maxfd(max_org_s);
51475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
51485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
51495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTIF_TRACE_DEBUG1("no data, select ret: %d\n", ret);
51505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
51515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("leaving hl_select_thread");
51525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return 0;
51535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function create_thread
51585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description creat a select loop
51605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pthread_t
51625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline pthread_t create_thread(void *(*start_routine)(void *), void * arg){
51655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("create_thread: entered");
51665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_t thread_attr;
51675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_init(&thread_attr);
51695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
51705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pthread_t thread_id = -1;
51715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( pthread_create(&thread_id, &thread_attr, start_routine, arg)!=0 )
51725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
51735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTIF_TRACE_ERROR1("pthread_create : %s", strerror(errno));
51745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return -1;
51755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
51765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG0("create_thread: thread created successfully");
51775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return thread_id;
51785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btif_hl_soc_thread_init
51835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HL select loop init function.
51855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
51875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_hl_soc_thread_init(void){
51905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
51915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_init_q(&soc_queue);
51925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    select_thread_id = create_thread(btif_hl_select_thread, NULL);
51935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_hl_load_mdl_config
51975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description load the MDL configuation from the application control block
51995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN
52015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
52025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
52035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btif_hl_load_mdl_config (UINT8 app_id, UINT8 buffer_size,
52045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 tBTA_HL_MDL_CFG *p_mdl_buf ){
52055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 app_idx;
52065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN result = FALSE;
52075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btif_hl_app_cb_t          *p_acb;
52085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_HL_MDL_CFG *p;
52095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
52105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
52115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (btif_hl_find_app_idx(app_id, &app_idx))
52135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
52145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_acb  = BTIF_HL_GET_APP_CB_PTR(app_idx);
52155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0, p=p_mdl_buf; i<buffer_size; i++, p++)
52165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
52175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p, &p_acb->mdl_cfg[i].base, sizeof(tBTA_HL_MDL_CFG));
52185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
52195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = TRUE;
52205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
52215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
52225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTIF_TRACE_DEBUG1("result=%d", result);
52235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
52245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5225