15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-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 * This file contains the HeaLth device profile (HL) action functions for 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the state machine. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 29e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (HL_INCLUDED == TRUE) 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_api.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_int.h" 34cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_api.h" 36cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "mca_defs.h" 37d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 38cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "port_api.h" 39cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "sdp_api.h" 40cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "utl.h" 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Local Function prototypes 448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 45a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen#if (BTA_HL_DEBUG == TRUE) 46a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_mcap_evt_code(uint8_t evt_code); 47a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code); 48a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_cback_evt_code(uint8_t evt_code); 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 50e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback(uint8_t sdp_op, uint8_t app_idx, uint8_t mcl_idx, 51e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen uint8_t mdl_idx, uint16_t status); 52e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback0(uint16_t status); 53e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback1(uint16_t status); 54e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback2(uint16_t status); 55e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback3(uint16_t status); 56e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback4(uint16_t status); 57e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback5(uint16_t status); 58e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback6(uint16_t status); 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic tSDP_DISC_CMPL_CB* const bta_hl_sdp_cback_arr[] = { 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback0, bta_hl_sdp_cback1, bta_hl_sdp_cback2, bta_hl_sdp_cback3, 62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback4, bta_hl_sdp_cback5, bta_hl_sdp_cback6}; 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_cong_change 678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing congestion change notification 698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 73cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, 74cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 75cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 76cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 77cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 78cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_CONG_CHG* p_cong_chg = &p_data->mca_evt.mca_data.cong_chg; 79cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 82cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_cong_change mdl_id=%d cong=%d", 83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cong_chg->mdl_id, p_cong_chg->cong); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_cong_ind.cong = p_dcb->cong = p_cong_chg->cong; 86cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_cong_ind.mdl_handle = p_dcb->mdl_handle; 87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_cong_ind.mcl_handle = p_mcb->mcl_handle; 88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_cong_ind.app_handle = p_acb->app_handle; 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 90cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_CONG_CHG_IND_EVT, (tBTA_HL*)&evt_data); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_echo_test 968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing echo test request 988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 102e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_HL_DATA* p_data) { 104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 105cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 109cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_echo_test"); 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_GET_ECHO_DATA; 113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper |= BTA_HL_CO_GET_ECHO_DATA_MASK; 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_co_get_echo_data( 116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->app_id, p_mcb->mcl_handle, p_dcb->p_echo_tx_pkt->len, 117cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_GET_BUF_PTR(p_dcb->p_echo_tx_pkt), BTA_HL_CI_GET_ECHO_DATA_EVT); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_sdp_init 1228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing DCH SDP initiation 1248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 128e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 131cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_sdp_init"); 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_mcb->sdp_oper == BTA_HL_SDP_OP_NONE) { 137cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->sdp_mdl_idx = mdl_idx; 138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) { 139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_OPEN_INIT; 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_RECONNECT_INIT; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_init_sdp(p_mcb->sdp_oper, app_idx, mcl_idx, mdl_idx) != 146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK) { 147cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("SDP INIT failed"); 148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->sdp_oper = BTA_HL_SDP_OP_NONE; 149cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, 150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 152cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("SDP in use"); 154cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, 155cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 156cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_close_echo_test 1628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the closing of echo test 1648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_close_echo_test"); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_dcb->echo_oper) { 177cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_DCH_CLOSE_CFM: 178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_OPEN_IND: 179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_ECHO_PKT: 180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST; 181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_MDL_CREATE_CFM: 183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_DCH_OPEN_CFM: 184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_LOOP_BACK: 185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 186cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 187cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 188cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) != MCA_SUCCESS) { 190cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 191cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 192cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_rcv_data 1988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the received data 2008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 204e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 206cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 207cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 208cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 211cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_rcv_data"); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 214cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 215cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_dcb->echo_oper) { 216cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_ECHO_PKT: 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 218cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, 219cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data->mca_rcv_data_evt.p_pkt) != MCA_SUCCESS) { 220cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson osi_free_and_reset((void**)&p_data->mca_rcv_data_evt.p_pkt); 221cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 222cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); 223cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 224cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 225cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_LOOP_BACK: 226cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 227cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->p_echo_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; 228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA; 229cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper |= BTA_HL_CO_PUT_ECHO_DATA_MASK; 230cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->ci_put_echo_data_status = BTA_HL_STATUS_FAIL; 231cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 232cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_co_put_echo_data(p_acb->app_id, p_mcb->mcl_handle, 233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->p_echo_rx_pkt->len, 234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_GET_BUF_PTR(p_dcb->p_echo_rx_pkt), 235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_CI_PUT_ECHO_DATA_EVT); 236cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Unknonw echo_oper=%d", p_dcb->echo_oper); 239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 240cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 241cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper |= BTA_HL_CO_PUT_RX_DATA_MASK; 244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->p_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; 245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_co_put_rx_data( 247cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->app_id, p_dcb->mdl_handle, p_dcb->p_rx_pkt->len, 248cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_GET_BUF_PTR(p_dcb->p_rx_pkt), BTA_HL_CI_PUT_RX_DATA_EVT); 249cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_ci_put_echo_data 2558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the call-in of the 2578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * put echo data event 2588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, 263cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 264cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 267cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_ci_put_echo_data"); 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 270cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper &= ~BTA_HL_CO_PUT_ECHO_DATA_MASK; 271cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson osi_free_and_reset((void**)&p_dcb->p_echo_rx_pkt); 272cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->ci_put_echo_data_status = p_data->ci_get_put_echo_data.status; 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 274cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_CLOSE_CFM; 275cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 276cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_ci_get_echo_data 2828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the call-in of the 2848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * get echo data event 2858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 289cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, 290cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 291cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 292cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_STATUS status; 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 295cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_ci_get_echo_data"); 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper &= ~BTA_HL_CO_GET_ECHO_DATA_MASK; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 300cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_dcb->abort_oper) { 301cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = p_data->ci_get_put_echo_data.status; 302cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status == BTA_HL_STATUS_OK) { 303cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_MDL_CREATE_CFM; 304cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_OPEN_EVT, 305cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 308cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 310cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 311cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 312cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 313cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_ci_put_rx_data 3198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the call-in of the 3218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * put rx data event 3228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 3248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 326cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, 327cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 328cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 329cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 330cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 331cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 334cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_ci_put_rx_data"); 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 337cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper &= ~BTA_HL_CO_PUT_RX_DATA_MASK; 338cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson osi_free_and_reset((void**)&p_dcb->p_rx_pkt); 339cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_rcv_data_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_handle); 341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_RCV_DATA_IND_EVT, (tBTA_HL*)&evt_data); 342cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->close_pending) { 343cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_dcb->cout_oper) { 344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, 345cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 346cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 347cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_ci_get_tx_data 3538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the call-in of the 3558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * get tx data event 3568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 3588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, 361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_RESULT result; 366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_STATUS status = BTA_HL_STATUS_OK; 367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool free_buf = false; 368cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool close_dch = false; 369cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 372cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_ci_get_tx_data"); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3754db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella if (p_data != NULL) { 3764db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella status = p_data->ci_get_put_data.status; 3774db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella APPL_TRACE_WARNING("%s: status=%d", __func__, status); 3784db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella } 3794db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella 380cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper &= ~BTA_HL_CO_GET_TX_DATA_MASK; 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 382cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->close_pending) { 383cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_FAIL; 384cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson free_buf = true; 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 386cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_dcb->cout_oper) { 387cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson close_dch = true; 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3894db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella } else if (status == BTA_HL_STATUS_FAIL) { 3904db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella free_buf = TRUE; 391cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 392f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen result = MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, p_dcb->p_tx_pkt); 393f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (result != MCA_SUCCESS) { 394cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (result == MCA_BUSY) { 395cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_DCH_BUSY; 396cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 397cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_FAIL; 398cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 399cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson free_buf = true; 400cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 401cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->p_tx_pkt = NULL; 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (free_buf) osi_free_and_reset((void**)&p_dcb->p_tx_pkt); 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 407cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_send_data_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 408cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_handle, status); 409cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT, (tBTA_HL*)&evt_data); 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 411cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (close_dch) { 412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, 413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_send_data 4208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing api send data request 4228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 4248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 426e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 427cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 428cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 429cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 430cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 431cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 432cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool success = true; 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 435cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_send_data"); 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 438cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!(p_dcb->cout_oper & BTA_HL_CO_GET_TX_DATA_MASK)) { 439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson // p_dcb->chnl_cfg.fcs may be BTA_HL_MCA_USE_FCS (0x11) or BTA_HL_MCA_NO_FCS 440cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson // (0x10) or BTA_HL_DEFAULT_SOURCE_FCS (1) 441cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool fcs_use = (bool)(p_dcb->chnl_cfg.fcs & BTA_HL_MCA_FCS_USE_MASK); 442f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_dcb->p_tx_pkt = bta_hl_get_buf(p_data->api_send_data.pkt_size, fcs_use); 443f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_dcb->p_tx_pkt != NULL) { 444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_co_get_tx_data( 445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->app_id, p_dcb->mdl_handle, p_data->api_send_data.pkt_size, 446cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_GET_BUF_PTR(p_dcb->p_tx_pkt), BTA_HL_CI_GET_TX_DATA_EVT); 447cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->cout_oper |= BTA_HL_CO_GET_TX_DATA_MASK; 448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson success = false; 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 451cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 452cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson success = false; 453cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 455cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!success) { 456cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_send_data_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 457cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_handle, BTA_HL_STATUS_FAIL); 458cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT, (tBTA_HL*)&evt_data); 459cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_close_cmpl 4658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the close complete event 4678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 4698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 471e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 473cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 474cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 475cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 476cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 477cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_EVT event = 0; 478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_evt = true; 479cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_STATUS status; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 482cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_close_cmpl dch oper=%s", 483cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_oper_code(p_dcb->dch_oper)); 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 486cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_dcb->dch_oper) { 487cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_OPEN: 488cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_RECONNECT: 489cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 490cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { 491cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 492cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK); 493cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_ABORT_CFM_EVT; 494cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK) { 495cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle); 496cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_ABORT_IND_EVT; 497cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 498cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_open_cfm(&evt_data, p_acb->app_handle, 499cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, BTA_HL_INVALID_MDL_HANDLE, 500cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 0, 0, 0, 0, 0, BTA_HL_STATUS_FAIL); 501cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_OPEN_CFM_EVT; 502cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) { 503cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_RECONNECT_CFM_EVT; 504cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 505cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 506cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 507cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 508cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE: 509cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_DELETE: 510cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: 511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_NONE: 512cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 513cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_close_cfm(&evt_data, p_acb->app_handle, 514cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_dcb->mdl_handle, 515cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK); 516cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_CLOSE_CFM_EVT; 517cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 519cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_CLOSE: 520cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_close_ind(&evt_data, p_acb->app_handle, 521cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_dcb->mdl_handle, 522cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->intentional_close); 523cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_CLOSE_IND_EVT; 524cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 525cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 526cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_OPEN: 527cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 528cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { 529cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 530cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK); 531cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_ABORT_CFM_EVT; 532cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK) { 533cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle); 534cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_ABORT_IND_EVT; 535cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 536cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_close_ind(&evt_data, p_acb->app_handle, 537cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_dcb->mdl_handle, 538cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->intentional_close); 539cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_CLOSE_IND_EVT; 540cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 541cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 542cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 543cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: 544cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* this is normal echo test close */ 545cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_CREATE: 546cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_RECONNECT: 547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = false; 548cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 549cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 550cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 552cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("DCH operation not found oper=%s", 553cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_oper_code(p_dcb->dch_oper)); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 555cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = false; 556cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 557cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 558cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 560cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->echo_test = false; 561cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = false; 562cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 563cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->dch_oper != BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST) { 564cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_dcb->echo_oper) { 565cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_CI_GET_ECHO_DATA: 566cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_SDP_INIT: 567cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_MDL_CREATE_CFM: 568cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_DCH_OPEN_CFM: 569cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_LOOP_BACK: 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 571cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_FAIL; 572cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = true; 573cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 574cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_OPEN_IND: 575cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_ECHO_OP_ECHO_PKT: 576cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 577cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 578cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Invalid echo_oper=%d", p_dcb->echo_oper); 579cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 580cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 581cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 582cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = p_dcb->ci_put_echo_data_status; 583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = true; 584cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 586cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_evt) { 587cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_echo_test_cfm(&evt_data, p_acb->app_handle, 588cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, status); 589cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_ECHO_TEST_CFM_EVT; 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 591cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 593cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_clean_mdl_cb(app_idx, mcl_idx, mdl_idx); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_evt) { 596cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_acb->p_cback) { 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 598cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("Send Event: %s", bta_hl_cback_evt_code(event)); 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 600cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(event, (tBTA_HL*)&evt_data); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 602cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 603cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* check cch close is in progress or not */ 604cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_close_ind 6098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the close indication 6118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 6138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 615e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 616cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 617cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 620cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_close_ind dch oper=%s", 621cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_oper_code(p_dcb->dch_oper)); 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 624cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->intentional_close = false; 625cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_data->mca_evt.mca_data.close_ind.reason == L2CAP_DISC_OK) { 626cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->intentional_close = true; 627cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 628cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 629cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_dcb->cout_oper) { 630cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if ((p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_OPEN) && 631cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_RECONNECT)) { 632cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CLOSE; 633cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 634cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 635cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 636cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 637cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->close_pending = true; 638cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_close_cfm 6448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the close confirmation 6468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 6488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 650e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 651cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 652cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 655cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_close_cfm dch_oper=%s", 656cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_oper_code(p_dcb->dch_oper)); 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 659cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_dcb->dch_oper) { 660cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE: 661cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_OPEN: 662cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_RECONNECT: 663cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: 664cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_DELETE: 665cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: 666cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_NONE: 667cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 668cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 669cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 670cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 672cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Invalid dch_oper=%s for close cfm", 673cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_oper_code(p_dcb->dch_oper)); 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 675cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 676cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_close 6828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the DCH close request 6848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 6868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 688e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 689cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 690cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 691cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 692cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 693cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_STATUS status = BTA_HL_STATUS_OK; 694cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 697cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_close"); 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 699cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_dcb->cout_oper) { 700cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->close_pending = false; 701cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { 702cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE; 703cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 704cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_FAIL; 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 706cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 707cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if ((status != BTA_HL_STATUS_OK) && 708cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_mcb->cch_close_dch_oper != BTA_HL_CCH_CLOSE_OP_DCH_CLOSE)) { 709cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_close_cfm(&evt_data, p_acb->app_handle, 710cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, 711cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data->api_dch_close.mdl_handle, status); 712cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_CLOSE_CFM_EVT, (tBTA_HL*)&evt_data); 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 714cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 715cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->close_pending = true; 716cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_open_ind 7228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the open indication 7248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 7268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 728e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 729cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 730cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 731cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 732cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 733cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_DL_OPEN* p_open_ind = &p_data->mca_evt.mca_data.open_ind; 734cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 735cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_EVT event; 736cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; 737cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_event = false; 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 740cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_open_ind"); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 742cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if ((p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_OPEN) || 743cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_RECONNECT)) { 744cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE)p_open_ind->mdl; 745cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mtu = p_open_ind->mtu; 746cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 747cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.mdl_handle = p_dcb->mdl_handle; 748cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.mcl_handle = p_mcb->mcl_handle; 749cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.app_handle = p_acb->app_handle; 750cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 751cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.local_mdep_id = p_dcb->local_mdep_id; 752cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.mdl_id = p_dcb->mdl_id; 753cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.mtu = p_dcb->mtu; 754cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 755cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE) { 756cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_RELIABLE; 757cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) { 758cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->is_the_first_reliable = true; 759cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 760cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 761cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_STREAMING; 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 763cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_open_ind.first_reliable = p_dcb->is_the_first_reliable; 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 765cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson old_dch_oper = p_dcb->dch_oper; 766cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; 767cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 769cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (old_dch_oper) { 770cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_OPEN: 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 772cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_mode = evt_data.dch_open_ind.dch_mode; 773cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { 774cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); 775cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_OPEN_IND_EVT; 776cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = true; 777cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 778cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_ECHO_PKT; 779cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 781cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 783cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_REMOTE_RECONNECT: 784cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 785cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) { 786cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); 787cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_RECONNECT_IND_EVT; 788cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = true; 789cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 790cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { 791cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; 792cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 793cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); 794cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 795cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 796cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 797cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 798cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 799cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 800cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 801cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_event) { 802cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(event, (tBTA_HL*)&evt_data); 803cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 8088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_open_cfm 8098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 8108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the open confirmation 8118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 8128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 8138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 8148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 815e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 816cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 817cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 818cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 819cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 820cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_DL_OPEN* p_open_cfm = &p_data->mca_evt.mca_data.open_cfm; 821cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 822cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_EVT event; 823cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; 824cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DCH_MODE dch_mode = BTA_HL_DCH_MODE_STREAMING; 825cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_event = false; 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 828cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_open_cfm"); 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 830cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if ((p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) || 831cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT)) { 832cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE)p_open_cfm->mdl; 833cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mtu = p_open_cfm->mtu; 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 835cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /*todo verify dch_mode, mtu and fcs for reconnect */ 836cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE) { 837cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson dch_mode = BTA_HL_DCH_MODE_RELIABLE; 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 840cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { 841cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (dch_mode == BTA_HL_DCH_MODE_RELIABLE) { 842cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) { 843cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->is_the_first_reliable = true; 844cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 845cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 846cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 847cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 848cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_dch_open_cfm( 849cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &evt_data, p_acb->app_handle, p_mcb->mcl_handle, p_dcb->mdl_handle, 850cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_id, p_dcb->mdl_id, dch_mode, 851cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->is_the_first_reliable, p_dcb->mtu, BTA_HL_STATUS_OK); 852cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 853cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson old_dch_oper = p_dcb->dch_oper; 854cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; 855cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 856cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Error dch oper =%d", p_dcb->dch_oper); 857cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 858cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 859cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 860cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (old_dch_oper) { 861cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_OPEN: 862cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 863cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_mode = dch_mode; 864cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { 865cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); 866cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_OPEN_CFM_EVT; 867cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = true; 868cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 869cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_LOOP_BACK; 870cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, p_dcb->p_echo_tx_pkt) != 871cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_SUCCESS) { 872cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 873cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); 874cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 875cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->p_echo_tx_pkt = NULL; 876cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 877cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 878cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 879cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 880cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_DCH_OP_LOCAL_RECONNECT: 881cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 882cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) { 883cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); 884cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_DCH_RECONNECT_CFM_EVT; 885cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = true; 886cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 887cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { 888cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; 889cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 890cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); 891cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 892cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 893cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 894cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 895cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 896cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 898cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_event) p_acb->p_cback(event, (tBTA_HL*)&evt_data); 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_abort_ind 9048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the abort indication 9068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 9088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 910e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 911cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 912cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 915cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_ind"); 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 918cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper |= BTA_HL_ABORT_REMOTE_MASK; 919cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 920cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_abort_cfm 9268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the abort confirmation 9288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 9308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 932e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 933cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 934cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 935cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 936cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 937cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 940cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_cfm"); 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 943cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper) { 944cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_data->mca_evt.mca_data.abort_cfm.rsp_code != MCA_RSP_SUCCESS) { 945cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { 946cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 947cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_FAIL); 948cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT, (tBTA_HL*)&evt_data); 949cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 950cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 951cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 952cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 954cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 955cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Not expecting Abort CFM "); 956cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_abort 9628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the abort request 9648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 9668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 9678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 968e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 969cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 970cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 971cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 972cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 973cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_RESULT mca_result; 974cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 975cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 976cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (((p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) || 977cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_RECONNECT_INIT)) && 978cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_mcb->sdp_mdl_idx == mdl_idx)) { 979cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; 980cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 981cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else if (p_dcb->echo_oper == BTA_HL_ECHO_OP_CI_GET_ECHO_DATA) { 982cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; 983cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 984cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 985cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 986cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; 987cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 988f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen mca_result = MCA_Abort((tMCA_CL)p_mcb->mcl_handle); 989f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (mca_result != MCA_SUCCESS) { 990cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (mca_result == MCA_NO_RESOURCES) { 991cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; 992cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 993cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { 994cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 995cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_FAIL); 996cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT, (tBTA_HL*)&evt_data); 997cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 998cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1000cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1003cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_abort abort_oper=0x%x", p_dcb->abort_oper); 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_reconnect_ind 10108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the reconnect indication 10128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 10148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1016cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, 1017cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 1018cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1019cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1020cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CFG* p_mdl_cfg; 1021cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_EVT_HDR* p_reconnect_ind = &p_data->mca_evt.mca_data.reconnect_ind; 1022cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_cfg_idx, in_use_mdl_idx, mdep_cfg_idx; 1023cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t rsp_code = MCA_RSP_SUCCESS; 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1026cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_ind mdl_id=%d", 1027cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_reconnect_ind->mdl_id); 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1030cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_reconnect_ind->mdl_id, 1031cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &mdl_cfg_idx)) { 1032cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!bta_hl_find_mdl_idx(app_idx, mcl_idx, p_reconnect_ind->mdl_id, 1033cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &in_use_mdl_idx)) { 1034cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mdl_cfg = BTA_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx); 1035cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1036cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_mdep_cfg_idx(app_idx, p_mdl_cfg->local_mdep_id, 1037cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &mdep_cfg_idx)) { 1038cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->in_use = true; 1039cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_RECONNECT; 1040cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); 1041cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->peer_mdep_id = 0xFF; 1042cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_id = p_mdl_cfg->local_mdep_id; 1043cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; 1044cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; 1045cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id = p_reconnect_ind->mdl_id; 1046cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_cfg_idx_included = true; 1047cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_cfg_idx = mdl_cfg_idx; 1048cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_mode = p_mdl_cfg->dch_mode; 1049cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, 1050cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->max_rx_apdu_size, 1051cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->max_tx_apdu_size); 1052cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); 1053cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rsp_code = MCA_RSP_BAD_MDL; 1055cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1056cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1057cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rsp_code = MCA_RSP_BAD_MDL; 1058cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1059cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1060cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rsp_code = MCA_RSP_BAD_MDL; 1061cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1062cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1063cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_ReconnectMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, 1064cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id, rsp_code, 1065cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->chnl_cfg) != MCA_SUCCESS) { 1066cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_Abort((tMCA_CL)p_mcb->mcl_handle); 1067cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 1068cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1069cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_reconnect_cfm 10758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the reconenct confirmation 10778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 10798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 10808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1081cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, 1082cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 1083cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1084cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1085cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_RSP_EVT* p_reconnect_cfm = &p_data->mca_evt.mca_data.reconnect_cfm; 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1088cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_cfm"); 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1090cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { 1091cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; 1092cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, 1093cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1094cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 1095cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1096cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1097cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) { 1098cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_reconnect_cfm->rsp_code == MCA_RSP_SUCCESS) { 1099cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); 1100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1101cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_DataChnlCfg((tMCA_CL)p_mcb->mcl_handle, &p_dcb->chnl_cfg) != 1102cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_SUCCESS) { 1103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* should be able to abort so no checking of the return code */ 1104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_Abort((tMCA_CL)p_mcb->mcl_handle); 1105cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1109cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1110cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_reconnect 11188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the reconnect request 11208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 11228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1124e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 1125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_CHNL_CFG* p_chnl_cfg = NULL; 1129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t sdp_idx; 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1132cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect"); 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, 1135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &sdp_idx)) { 1136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; 1137cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_ReconnectMdl((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, 1138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->data_psm, p_dcb->mdl_id, 1139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_chnl_cfg) != MCA_SUCCESS) { 1140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 1145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_create_rsp 11528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing BTA_HL_API_DCH_CREATE_RSP_EVT 11548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 11568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1158e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 1159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_API_DCH_CREATE_RSP* p_create_rsp = &p_data->api_dch_create_rsp; 1163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mca_rsp_code = MCA_RSP_SUCCESS; 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_create_rsp"); 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_create_rsp->rsp_code == BTA_HL_DCH_CREATE_RSP_SUCCESS) { 1169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; 1170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_cfg = p_create_rsp->cfg_rsp; 1171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); 1173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_rsp_code = MCA_RSP_CFG_REJ; 1175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1177cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CreateMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, 1178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id, p_dcb->local_cfg, mca_rsp_code, 1179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->chnl_cfg) != MCA_SUCCESS) { 1180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 1181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_create_ind 11888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing 11908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 11928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 11938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1194cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, 1195cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 1196cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 1197cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1199cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_CREATE_IND* p_create_ind = &p_data->mca_evt.mca_data.create_ind; 1200cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdep_cfg_idx; 1201cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t cfg_rsp; 1202cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t rsp_code = MCA_RSP_SUCCESS; 1203cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_create_ind_evt = false; 1204cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 1205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_ECHO_CFG* p_echo_cfg; 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1208cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_create_ind"); 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1211cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_mdep_cfg_idx(app_idx, p_create_ind->dep_id, &mdep_cfg_idx)) { 1212cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_create_ind->dep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 1213cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_echo_cfg_rsp(app_idx, mcl_idx, mdep_cfg_idx, 1214cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_create_ind->cfg, &cfg_rsp)) { 1215cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->in_use = true; 1216cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; 1217cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_id = p_create_ind->dep_id; 1218cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; 1219cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_cfg = cfg_rsp; 1220cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->remote_cfg = p_create_ind->cfg; 1221cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id = p_create_ind->mdl_id; 1222cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_cfg_idx_included = false; 1223cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_echo_cfg = BTA_HL_GET_ECHO_CFG_PTR(app_idx); 1224cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->max_rx_apdu_size = p_echo_cfg->max_rx_apdu_size; 1225cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->max_tx_apdu_size = p_echo_cfg->max_tx_apdu_size; 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1227cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); 1228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1229cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rsp_code = MCA_RSP_CFG_REJ; 1230cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1231cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else 1232cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson { 1234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->in_use = true; 1235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CREATE; 1236cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_id = p_create_ind->dep_id; 1237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; 1238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; 1239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->remote_cfg = p_create_ind->cfg; 1240cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id = p_create_ind->mdl_id; 1241cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_cfg_idx_included = false; 1242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, 1243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->max_rx_apdu_size, 1244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->max_tx_apdu_size); 1245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_create_ind_evt = true; 1246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1247cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1248cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rsp_code = MCA_RSP_BAD_MDEP; 1249cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1250cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1251cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_create_ind_evt) { 1252cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_create_ind.mcl_handle = p_mcb->mcl_handle; 1253cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_create_ind.app_handle = p_acb->app_handle; 1254cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_create_ind.local_mdep_id = p_dcb->local_mdep_id; 1255cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_create_ind.mdl_id = p_dcb->mdl_id; 1256cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson evt_data.dch_create_ind.cfg = p_dcb->remote_cfg; 125750cf52cf6b097ecb57922d69c22d559097a205b0Jakub Pawlowski evt_data.dch_create_ind.bd_addr = p_mcb->bd_addr; 1258cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_acb->p_cback(BTA_HL_DCH_CREATE_IND_EVT, (tBTA_HL*)&evt_data); 1259cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1260cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_CreateMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, 1261cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->mdl_id, p_dcb->local_cfg, rsp_code, 1262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &p_dcb->chnl_cfg) != MCA_SUCCESS) { 1263cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1264cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1265cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1266cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 1267cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->echo_test = true; 1268cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_OPEN_IND; 1269cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1271cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 12768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_create_cfm 12778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 12788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing 12798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 12808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 12818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 12828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1283cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, 1284cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, tBTA_HL_DATA* p_data) { 1285cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1286cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1287cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_CREATE_CFM* p_create_cfm = &p_data->mca_evt.mca_data.create_cfm; 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1290cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_create_cfm"); 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1293cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { 1294cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; 1295cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, 1296cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1297cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 1298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1299cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1300cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) { 1301cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_create_cfm->rsp_code == MCA_RSP_SUCCESS) { 1302cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_validate_cfg(app_idx, mcl_idx, mdl_idx, p_create_cfm->cfg)) { 1303cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1305cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_DataChnlCfg((tMCA_CL)p_mcb->mcl_handle, &p_dcb->chnl_cfg) != 1306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_SUCCESS) { 1307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* this should not happen */ 1308cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Unable to create data channel"); 1309cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_Abort((tMCA_CL)p_mcb->mcl_handle); 1310cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1311cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1312cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1313cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 1314cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_OPEN_CFM; 1315cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1317cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1318cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson MCA_Abort((tMCA_CL)p_mcb->mcl_handle); 1319cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1320cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1321cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1322cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1323cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("MCA Create- failed"); 1324cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1325cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1327cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_mca_create 13338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the MDL create request 13358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 13378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1339e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 1340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1342cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1343cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_RESULT result; 1344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t sdp_idx; 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1346e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1347cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_mca_create"); 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1350cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, 1351cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &sdp_idx) && 1352cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_validate_peer_cfg(app_idx, mcl_idx, mdl_idx, p_dcb->peer_mdep_id, 1353cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->peer_mdep_role, sdp_idx)) { 1354cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; 1355f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen result = MCA_CreateMdl((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, 1356cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->data_psm, p_dcb->mdl_id, p_dcb->peer_mdep_id, 1357f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_dcb->local_cfg, NULL); 1358f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (result != MCA_SUCCESS) { 1359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("MCA_CreateMdl FAIL mca_result=%d", result); 1360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, 1361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); 1362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("MCA Create- SDP idx or peer MDEP cfg not found"); 1365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 1366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_sdp_fail 13738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the SDP failed event 13758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 13778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1379e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenvoid bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, 1380cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 1382cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_dch_sdp_fail"); 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1384cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, 1385cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 13898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback 13918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by HL. 13938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * This function will be executed by SDP when the service 13948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * search is completed. If the search is successful, it 13958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * finds the first record in the database that matches the 13968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * UUID of the search. Then retrieves the scn from the 13978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * record. 13988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 13998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 14008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 14018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1402e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenstatic void bta_hl_sdp_cback(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl_idx, 1403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mdl_idx, uint16_t status) { 1404cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_SDP_REC* p_hdp_rec; 1406cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_CCH_SDP* p_cch_buf; 1407cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DCH_SDP* p_dch_buf; 1408cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tSDP_DISC_REC* p_rec = NULL; 1409cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tSDP_PROTOCOL_ELEM pe; 1410cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tSDP_DISC_ATTR* p_attr; 1411cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i, rec_cnt; 1412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature; 1413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool sdp_parsing_ok = false, result = false; 1414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t event; 1415cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb; 1416cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t service_uuid; 1417cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t name_len; 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1419e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1420cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "bta_hl_sdp_cback status:%d sdp_oper=%d app_idx=%d, mcl_idx=%d, " 1422cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "mdl_idx=%d", 1423cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status, sdp_oper, app_idx, mcl_idx, mdl_idx); 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1426cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rec_cnt = 0; 1427cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson service_uuid = bta_hl_get_service_uuids(sdp_oper, app_idx, mcl_idx, mdl_idx); 1428cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1429cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status == SDP_SUCCESS || status == SDP_DB_FULL) { 1430cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(&p_cb->sdp, 0, sizeof(tBTA_HL_SDP)); 1431cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson do { 1432cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_service_in_db(app_idx, mcl_idx, service_uuid, &p_rec)) { 1433cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec = &p_cb->sdp.sdp_rec[rec_cnt]; 1434cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp.num_recs = rec_cnt + 1; 1435cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1436cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1437cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1438cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) { 1440cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->ctrl_psm = (uint16_t)pe.params[0]; 1441cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1442cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("Control PSM not found"); 1443cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (SDP_FindAddProtoListsElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) { 1446cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->data_psm = (uint16_t)pe.params[0]; 1447cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("Data PSM not found"); 1449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1450cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1451cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1452cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->srv_name[0] = '\0'; 1453f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME); 1454f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_attr != NULL) { 1455cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) 1456cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); 1457cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson else 1458cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = BT_MAX_SERVICE_NAME_LEN; 1459cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_hdp_rec->srv_name, p_attr->attr_value.v.array, name_len); 1460cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1461cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1462cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->srv_desp[0] = '\0'; 1463f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_DESCRIPTION); 1464f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_attr != NULL) { 1465cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) 1466cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); 1467cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson else 1468cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = BT_MAX_SERVICE_NAME_LEN; 1469cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_hdp_rec->srv_desp, p_attr->attr_value.v.array, name_len); 1470cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1471cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->provider_name[0] = '\0'; 1473f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_PROVIDER_NAME); 1474f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_attr != NULL) { 1475cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) 1476cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); 1477cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson else 1478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson name_len = BT_MAX_SERVICE_NAME_LEN; 1479cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_hdp_rec->provider_name, p_attr->attr_value.v.array, name_len); 1480cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1481cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1482f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_MCAP_SUP_PROC); 1483f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_attr != NULL) { 1484cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mcap_sup_proc = p_attr->attr_value.v.u8; 1485cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1486cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("MCAP SUP PROC not found"); 1487cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1488cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1489cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1490f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_SUP_FEAT_LIST); 1491f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_attr != NULL) { 1492cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_fill_sup_feature_list(p_attr, &sup_feature)) { 1493cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->num_mdeps = (uint8_t)sup_feature.num_elems; 1494cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("bta_hl_sdp_cback num_mdeps %d", 1495cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sup_feature.num_elems); 1496cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < sup_feature.num_elems; i++) { 1497cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mdep_cfg[i].data_type = 1498cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sup_feature.list_elem[i].data_type; 1499cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mdep_cfg[i].mdep_id = sup_feature.list_elem[i].mdep_id; 1500cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mdep_cfg[i].mdep_role = 1501cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sup_feature.list_elem[i].mdep_role; 1502cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* Check MDEP Description pointer to prevent crash due to null 1503cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * pointer */ 1504cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (sup_feature.list_elem[i].p_mdep_desp != NULL) { 1505cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson strlcpy(p_hdp_rec->mdep_cfg[i].mdep_desp, 1506cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sup_feature.list_elem[i].p_mdep_desp, 1507cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_MDEP_DESP_LEN); 1508cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1509cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR( 1510cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "bta_hl_sdp_cback Incorrect Mdep[%d] Description (Null ptr)", 1511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson i); 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1513cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1515cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sdp_parsing_ok = true; 1516cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1517cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("HDP supported feature list fill failed"); 1518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1519cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1520cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1521cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("HDP supported feature list not found"); 1522cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1523cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1524e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1525cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("record=%d ctrl_psm=%0x data_psm=%x", rec_cnt + 1, 1526cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->ctrl_psm, p_hdp_rec->data_psm); 1527cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("srv_name=[%s]", (p_hdp_rec->srv_name[0] != '\0') 1528cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson ? p_hdp_rec->srv_name 1529cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson : "NULL"); 1530cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("srv_desp=[%s]", (p_hdp_rec->srv_desp[0] != '\0') 1531cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson ? p_hdp_rec->srv_desp 1532cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson : "NULL"); 1533cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < sup_feature.num_elems; i++) { 1534cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1535cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "index=0x%02x mdep_id=0x%04x data type=0x%04x mdep role=%s(0x%02x)", 1536cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (i + 1), p_hdp_rec->mdep_cfg[i].mdep_id, 1537cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mdep_cfg[i].data_type, 1538cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_hdp_rec->mdep_cfg[i].mdep_role == BTA_HL_MDEP_ROLE_SOURCE) 1539cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson ? "Src" 1540cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson : "Snk", 1541cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_hdp_rec->mdep_cfg[i].mdep_role); 1542cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1543cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("provider_name=[%s]", 1544cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_hdp_rec->provider_name[0] != '\0') 1545cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson ? p_hdp_rec->provider_name 1546cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson : "NULL"); 1547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("found MCAP sup procedure=%d", 1548cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp.sdp_rec[rec_cnt].mcap_sup_proc); 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1550cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson rec_cnt++; 1551cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (rec_cnt >= BTA_HL_NUM_SDP_RECS) { 1552cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("No more spaces for SDP recs max_rec_cnt=%d", 1553cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_NUM_SDP_RECS); 1554cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1555cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1556cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1557cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } while (true); 1558cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1560cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson osi_free_and_reset((void**)&p_cb->p_db); 1561cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1562cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if ((status == SDP_SUCCESS || status == SDP_DB_FULL) && p_cb->sdp.num_recs && 1563cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sdp_parsing_ok) { 1564cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson result = true; 1565cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1566cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING( 1567cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "SDP Failed sdp_status=%d num_recs=%d sdp_parsing_ok=%d ", status, 1568cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp.num_recs, sdp_parsing_ok); 1569cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1570cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1571cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; 1572cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1573cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (sdp_oper) { 1574cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_SDP_OP_CCH_INIT: 1575cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_SDP_OP_SDP_QUERY_NEW: 1576cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_SDP_OP_SDP_QUERY_CURRENT: 1577cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1578cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* send result in event back to BTA */ 1579cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf = (tBTA_HL_CCH_SDP*)osi_malloc(sizeof(tBTA_HL_CCH_SDP)); 1580cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (result) { 1581cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) { 1582cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_SDP_OK_EVT; 1583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_cb->close_pending) event = BTA_HL_CCH_SDP_FAIL_EVT; 1584cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1585cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_SDP_QUERY_OK_EVT; 1586cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1587cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1588cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) 1589cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_SDP_FAIL_EVT; 1590cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson else 1591cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_SDP_QUERY_FAIL_EVT; 1592cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1593cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf->hdr.event = event; 1594cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1595cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf->app_idx = app_idx; 1596cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf->mcl_idx = mcl_idx; 1597cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf->release_mcl_cb = false; 1598cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (sdp_oper == BTA_HL_SDP_OP_SDP_QUERY_NEW) 1599cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cch_buf->release_mcl_cb = true; 1600cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1601cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_cch_buf); 1602cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1603cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_SDP_OP_DCH_OPEN_INIT: 1604cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_SDP_OP_DCH_RECONNECT_INIT: 1605cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf = (tBTA_HL_DCH_SDP*)osi_malloc(sizeof(tBTA_HL_DCH_SDP)); 1606cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->hdr.event = BTA_HL_DCH_SDP_FAIL_EVT; 1607cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->app_idx = app_idx; 1608cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->mcl_idx = mcl_idx; 1609cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->mdl_idx = mdl_idx; 1610cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); 1611cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { 1612cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; 1613cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson result = false; 1614cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1615cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (result) { 1616cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) { 1617cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { 1618cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->hdr.event = BTA_HL_DCH_ECHO_TEST_EVT; 1619cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1620cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->hdr.event = BTA_HL_DCH_OPEN_EVT; 1621cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1622cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1623cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dch_buf->hdr.event = BTA_HL_DCH_RECONNECT_EVT; 1624cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1625cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1626cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_dch_buf); 1627cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1628cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 1629cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1630cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 16348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback0 16368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 0 16388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 16408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1642cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback0(uint16_t status) { 1643cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[0].sdp_oper, bta_hl_cb.scb[0].app_idx, 1644cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[0].mcl_idx, bta_hl_cb.scb[0].mdl_idx, status); 1645cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(0); 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 16498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback1 16518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 1 16538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters status - status of the SDP callabck 16558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 16578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1659cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback1(uint16_t status) { 1660cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[1].sdp_oper, bta_hl_cb.scb[1].app_idx, 1661cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[1].mcl_idx, bta_hl_cb.scb[1].mdl_idx, status); 1662cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(1); 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 16668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback2 16688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 2 16708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 16728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1674cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback2(uint16_t status) { 1675cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[2].sdp_oper, bta_hl_cb.scb[2].app_idx, 1676cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[2].mcl_idx, bta_hl_cb.scb[2].mdl_idx, status); 1677cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(2); 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 16818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback3 16838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 3 16858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 16878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1689cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback3(uint16_t status) { 1690cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[3].sdp_oper, bta_hl_cb.scb[3].app_idx, 1691cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[3].mcl_idx, bta_hl_cb.scb[3].mdl_idx, status); 1692cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(3); 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 16968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback4 16988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 16998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 4 17008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters status - status of the SDP callabck 17028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 17048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1706cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback4(uint16_t status) { 1707cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[4].sdp_oper, bta_hl_cb.scb[4].app_idx, 1708cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[4].mcl_idx, bta_hl_cb.scb[4].mdl_idx, status); 1709cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(4); 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 17138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback5 17158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 5 17178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters status - status of the SDP callabck 17198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 17218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1723cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback5(uint16_t status) { 1724cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[5].sdp_oper, bta_hl_cb.scb[5].app_idx, 1725cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[5].mcl_idx, bta_hl_cb.scb[5].mdl_idx, status); 1726cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(5); 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 17308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_sdp_cback6 17328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This is the SDP callback function used by index = 6 17348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void. 17368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *****************************************************************************/ 1738cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hl_sdp_cback6(uint16_t status) { 1739cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_sdp_cback(bta_hl_cb.scb[6].sdp_oper, bta_hl_cb.scb[6].app_idx, 1740cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[6].mcl_idx, bta_hl_cb.scb[6].mdl_idx, status); 1741cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(6); 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_deallocate_spd_cback 17478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Deallocate a SDP control block 17498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns bool - true found 17518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * false not found 17528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1754cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx) { 1755cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_SDP_CB* p_spd_cb = &bta_hl_cb.scb[sdp_cback_idx]; 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1757cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(p_spd_cb, 0, sizeof(tBTA_HL_SDP_CB)); 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1759e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1760cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_deallocate_spd_cback index=%d", sdp_cback_idx); 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_allocate_spd_cback 17678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Finds a not in used SDP control block index 17698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns bool - true found 17728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * false not found 17738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 17748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1775cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontSDP_DISC_CMPL_CB* bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, 1776cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t app_idx, uint8_t mcl_idx, 1777e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen uint8_t mdl_idx, 1778cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t* p_sdp_cback_idx) { 1779cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i; 1780cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tSDP_DISC_CMPL_CB* p_cbcak = NULL; 1781cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1782cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_HL_NUM_SDP_CBACKS; i++) { 1783cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!bta_hl_cb.scb[i].in_use) { 1784cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cbcak = bta_hl_sdp_cback_arr[i]; 1785cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].in_use = true; 1786cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].sdp_oper = sdp_oper; 1787cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].app_idx = app_idx; 1788cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].mcl_idx = mcl_idx; 1789cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].mdl_idx = mdl_idx; 1790cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson *p_sdp_cback_idx = i; 1791cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 1792cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1793cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1794cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1795cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (i == BTA_HL_NUM_SDP_CBACKS) { 1796cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("No scb is available to allocate") 1797cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1798e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1799cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_allocate_spd_cback cback_idx=%d ", i); 1800e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("sdp_oper=%d, app_idx=%d, mcl_idx=%d, mdl_idx=%d", 1801cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].sdp_oper, bta_hl_cb.scb[i].app_idx, 1802cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cb.scb[i].mcl_idx, bta_hl_cb.scb[i].mdl_idx); 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1804cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1805cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return p_cbcak; 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_init_sdp 18118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the SDP initiattion request 18138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 18158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1817cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, 1818cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t mcl_idx, uint8_t mdl_idx) { 1819cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1820cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tSDP_UUID uuid_list; 1821cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t attr_list[BTA_HL_NUM_SRCH_ATTR]; 1822cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t num_attrs = BTA_HL_NUM_SRCH_ATTR; 1823cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_STATUS status; 1824cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t sdp_cback_idx; 1825e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1826cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1827cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "bta_hl_init_sdp sdp_oper=%d app_idx=%d mcl_idx=%d, mdl_idx=%d", sdp_oper, 1828cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson app_idx, mcl_idx, mdl_idx); 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1830f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_cb->sdp_cback = bta_hl_allocate_spd_cback(sdp_oper, app_idx, mcl_idx, 1831f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen mdl_idx, &sdp_cback_idx); 1832f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_cb->sdp_cback != NULL) { 1833cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_cb->p_db == NULL) 1834cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (p_cb->p_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_HL_DISC_SIZE)); 1835cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; 1836cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; 1837cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; 1838cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[3] = ATTR_ID_ADDITION_PROTO_DESC_LISTS; 1839cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[4] = ATTR_ID_SERVICE_NAME; 1840cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[5] = ATTR_ID_SERVICE_DESCRIPTION; 1841cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[6] = ATTR_ID_PROVIDER_NAME; 1842cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[7] = ATTR_ID_HDP_SUP_FEAT_LIST; 1843cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[8] = ATTR_ID_HDP_DATA_EXCH_SPEC; 1844cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list[9] = ATTR_ID_HDP_MCAP_SUP_PROC; 1845cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1846cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uuid_list.len = LEN_UUID_16; 1847cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uuid_list.uu.uuid16 = UUID_SERVCLASS_HDP_PROFILE; 1848cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson SDP_InitDiscoveryDb(p_cb->p_db, BTA_HL_DISC_SIZE, 1, &uuid_list, num_attrs, 1849cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson attr_list); 1850cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1851135b7f68e4404872b9c5541146702c079e987877Jakub Pawlowski if (!SDP_ServiceSearchAttributeRequest(p_cb->bd_addr, p_cb->p_db, 1852135b7f68e4404872b9c5541146702c079e987877Jakub Pawlowski p_cb->sdp_cback)) { 1853cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_FAIL; 1854717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov } else { 1855cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_OK; 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1857cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1858cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_HL_STATUS_SDP_NO_RESOURCE; 1859cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1861cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status != BTA_HL_STATUS_OK) { 1862cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson osi_free_and_reset((void**)&p_cb->p_db); 1863cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status != BTA_HL_STATUS_SDP_NO_RESOURCE) 1864cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_deallocate_spd_cback(sdp_cback_idx); 1865cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1867cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_sdp_init 18738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH SDP init event 18758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 18778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 18788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1879cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, 1880cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1881cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1882e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1883cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_init_sdp"); 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1885cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_cb->sdp_oper == BTA_HL_SDP_OP_NONE) { 1886cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->app_id = p_data->api_cch_open.app_id; 1887cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp_oper = BTA_HL_SDP_OP_CCH_INIT; 1888cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1889cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_init_sdp(p_cb->sdp_oper, app_idx, mcl_idx, 0xFF) != 1890cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK) { 1891cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; 1892cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); 1893cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1894cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1895cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("SDP in use"); 1896cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); 1897cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_open 19038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH open request 19058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 19078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1909cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, 1910cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1911cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 1912cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1913cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t sdp_idx; 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1916cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_open"); 19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1919cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->req_ctrl_psm, 1920cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &sdp_idx)) { 1921cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->ctrl_psm = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm; 1922cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; 192378b81c6db0aed32eb595ce4de7eb22fc24800058Jakub Pawlowski if (MCA_ConnectReq((tMCA_HANDLE)p_acb->app_handle, p_mcb->bd_addr, 192478b81c6db0aed32eb595ce4de7eb22fc24800058Jakub Pawlowski p_mcb->ctrl_psm, p_mcb->sec_mask) != MCA_SUCCESS) { 1925cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, 1926cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1928cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1929cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); 1930cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_close 19368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH close request 19388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 19408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1942cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, 1943cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1944cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1946e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1947cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_close mcl_handle=%d", p_mcb->mcl_handle); 19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1949cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_mcb->sdp_oper != BTA_HL_SDP_OP_CCH_INIT) { 1950cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_mcb->mcl_handle) { 1951cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (MCA_DisconnectReq((tMCA_HANDLE)p_mcb->mcl_handle) != MCA_SUCCESS) { 1952cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, 1953cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 1954cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1955cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1956cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->close_pending = true; 1957cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1958cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "No valid mcl_handle to stop the CCH setup now so wait until CCH is " 1959cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "up then close it"); 1960cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1961cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1962cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->close_pending = true; 1963cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1964cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "can not stop the CCH setup becasue SDP is in progress so wait until " 1965cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "it is done"); 1966cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_close_cmpl 19728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH close complete event 19748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 19768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 19778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 1978cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, 1979cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 1980cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 1981cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 1982cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1983cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 1984cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_EVT event; 1985cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_evt = true; 1986e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 1987cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_close_cmpl"); 19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1989c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_conn_close(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); 1990cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1991cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE && 1992cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->force_close_local_cch_opening) { 1993cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_OPEN; 1994cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG( 1995cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "change cch_oper from BTA_HL_CCH_OP_LOCAL_CLOSE to " 1996cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "BTA_HL_CCH_OP_LOCAL_OPEN"); 1997cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1998cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 1999cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_mcb->cch_oper) { 2000cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_CCH_OP_LOCAL_OPEN: 2001cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_cch_open_cfm(&evt_data, p_mcb->app_id, p_acb->app_handle, 2002cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_mcb->bd_addr, 2003cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_FAIL); 2004cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_OPEN_CFM_EVT; 2005cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2006cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_CCH_OP_LOCAL_CLOSE: 2007cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_cch_close_cfm(&evt_data, p_acb->app_handle, 2008cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, BTA_HL_STATUS_OK); 2009cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_CLOSE_CFM_EVT; 2010cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2011cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_CCH_OP_REMOTE_CLOSE: 2012cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_cch_close_ind(&evt_data, p_acb->app_handle, 2013cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_mcb->intentional_close); 2014cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_CLOSE_IND_EVT; 2015cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2016cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2017cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_evt = false; 2018cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2019cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2020cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2021cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(p_mcb, 0, sizeof(tBTA_HL_MCL_CB)); 2022cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2023cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_evt) p_acb->p_cback(event, (tBTA_HL*)&evt_data); 2024cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2025cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_check_deregistration(app_idx, p_data); 20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_disconnect 20318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH disconnect indication 20338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 20358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2037cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx, 2038cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 2039cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 2040cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MDL_CB* p_dcb; 2041cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i; 2042e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 2043cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_disconnect"); 20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2046cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->intentional_close = false; 2047cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_data->mca_evt.mca_data.disconnect_ind.reason == L2CAP_DISC_OK) { 2048cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->intentional_close = true; 2049cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2050cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2051cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { 2052cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i); 2053cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_dcb->in_use && (p_dcb->dch_state != BTA_HL_DCH_IDLE_ST)) { 2054cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE) { 2055cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_DCH_CLOSE_CMPL_EVT, 2056cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 2057cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 2058cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_MCA_CLOSE_IND_EVT, 2059cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data); 2060cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2061cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2062cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2063cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); 20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_disc_open 20698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2070cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description Action routine for disconnect the just opened Control 20711baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * channel 20728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 20748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2076cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, 2077cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 2078cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 2079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2080e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 2081cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_disc_open mcl_handle=0x%x close_pending=%d", 2082cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data->mca_evt.mcl_handle, p_mcb->close_pending); 2083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 2084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2085cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->close_pending = false; 2086cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; 2087cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_cch_mca_close(app_idx, mcl_idx, p_data); 2088ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2089ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 20918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_rsp_tout 20938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the MCAP response timeout 20958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 20978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 20988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2099cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, 2100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 2101cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 2102e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 2103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_rsp_tout"); 21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->rsp_tout = true; 21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); 21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cch_mca_connect 21148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Action routine for processing the CCH connect indication 21168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 21188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, 2121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_DATA* p_data) { 2122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); 2123cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); 2124cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL evt_data; 2125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_EVT event; 2126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_event = true; 21275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2128e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_HL_DEBUG == TRUE) 2129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("bta_hl_cch_mca_connect mcl_handle=%d ", 2130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_data->mca_evt.mcl_handle); 21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; 213478b81c6db0aed32eb595ce4de7eb22fc24800058Jakub Pawlowski p_mcb->bd_addr = p_data->mca_evt.mca_data.connect_ind.bd_addr; 2135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->cch_mtu = p_data->mca_evt.mca_data.connect_ind.mtu; 2136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2137c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_conn_open(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); 2138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (p_mcb->cch_oper) { 2139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_CCH_OP_LOCAL_OPEN: 2140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_cch_open_cfm(&evt_data, p_mcb->app_id, p_acb->app_handle, 2141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->mcl_handle, p_mcb->bd_addr, 2142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HL_STATUS_OK); 2143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_OPEN_CFM_EVT; 2144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HL_CCH_OP_REMOTE_OPEN: 2146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_build_cch_open_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, 2147cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->bd_addr); 2148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event = BTA_HL_CCH_OPEN_IND_EVT; 2149cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2151cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = false; 2152cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2154cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2155cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_mcb->cch_oper = BTA_HL_CCH_OP_NONE; 2156cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_event) p_acb->p_cback(event, (tBTA_HL*)&evt_data); 21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_mcap_ctrl_cback 21628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description MCAP control callback function for HL. 21648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 21668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 21678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, 2169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tMCA_CTRL* p_data) { 2170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool send_event = true; 2171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t mca_event; 21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_HL_DEBUG == TRUE) 2174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_EVENT("bta_hl_mcap_ctrl_cback event[%s]", 2175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hl_mcap_evt_code(event)); 21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 2179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CREATE_IND_EVT: 2180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CREATE_IND_EVT; 2181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CREATE_CFM_EVT: 2183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CREATE_CFM_EVT; 2184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_RECONNECT_IND_EVT: 2186cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_RECONNECT_IND_EVT; 2187cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2188cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_RECONNECT_CFM_EVT: 2189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_RECONNECT_CFM_EVT; 2190cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2191cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_ABORT_IND_EVT: 2192cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_ABORT_IND_EVT; 2193cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2194cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_ABORT_CFM_EVT: 2195cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_ABORT_CFM_EVT; 2196cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2197cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_DELETE_IND_EVT: 2198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_DELETE_IND_EVT; 2199cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2200cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_DELETE_CFM_EVT: 2201cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_DELETE_CFM_EVT; 2202cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2203cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CONNECT_IND_EVT: 2204cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CONNECT_IND_EVT; 2205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2206cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_DISCONNECT_IND_EVT: 2207cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_DISCONNECT_IND_EVT; 2208cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2209cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_OPEN_IND_EVT: 2210cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_OPEN_IND_EVT; 2211cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2212cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_OPEN_CFM_EVT: 2213cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_OPEN_CFM_EVT; 2214cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2215cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CLOSE_IND_EVT: 2216cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CLOSE_IND_EVT; 2217cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2218cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CLOSE_CFM_EVT: 2219cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CLOSE_CFM_EVT; 2220cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2221cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_CONG_CHG_EVT: 2222cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_CONG_CHG_EVT; 2223cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2224cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_RSP_TOUT_IND_EVT: 2225cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson mca_event = (uint16_t)BTA_HL_MCA_RSP_TOUT_IND_EVT; 2226cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2227cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case MCA_ERROR_RSP_EVT: 2228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2229cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2230cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson send_event = false; 2231cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2232cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 2233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (send_event) { 2235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCA_EVT* p_msg = 2236cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_HL_MCA_EVT*)osi_malloc(sizeof(tBTA_HL_MCA_EVT)); 2237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->hdr.event = mca_event; 2238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->app_handle = (tBTA_HL_APP_HANDLE)handle; 2239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->mcl_handle = (tBTA_HL_MCL_HANDLE)mcl; 2240cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(&p_msg->mca_data, p_data, sizeof(tMCA_CTRL)); 2241cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_msg); 2242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_mcap_data_cback 22488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description MCAP data callback function for HL. 22508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 22528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2254cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR* p_pkt) { 2255cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t app_idx, mcl_idx, mdl_idx; 2256cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_hl_find_mdl_idx_using_handle((tBTA_HL_MDL_HANDLE)mdl, &app_idx, 2257cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson &mcl_idx, &mdl_idx)) { 2258cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HL_MCA_RCV_DATA_EVT* p_msg = 2259cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_HL_MCA_RCV_DATA_EVT*)osi_malloc(sizeof(tBTA_HL_MCA_RCV_DATA_EVT)); 2260cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->hdr.event = BTA_HL_MCA_RCV_DATA_EVT; 2261cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->app_idx = app_idx; 2262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->mcl_idx = mcl_idx; 2263cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->mdl_idx = mdl_idx; 2264cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_msg->p_pkt = p_pkt; 2265cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_msg); 2266cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2268717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 22708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Debug Functions 22718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 2272a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen#if (BTA_HL_DEBUG == TRUE) 2273a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen 2274a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen#define CASE_RETURN_STR(const) \ 2275a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen case const: \ 2276a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen return #const; 22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_mcap_evt_code 22818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description get the MCAP event string pointer 22838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns char * - event string pointer 22858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 22868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2287a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_mcap_evt_code(uint8_t evt_code) { 2288cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (evt_code) { 2289a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_ERROR_RSP_EVT) 2290a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CREATE_IND_EVT) 2291a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CREATE_CFM_EVT) 2292a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_RECONNECT_IND_EVT) 2293a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_RECONNECT_CFM_EVT) 2294a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_ABORT_IND_EVT) 2295a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_ABORT_CFM_EVT) 2296a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_DELETE_IND_EVT) 2297a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_DELETE_CFM_EVT) 2298a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CONNECT_IND_EVT) 2299a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_DISCONNECT_IND_EVT) 2300a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_OPEN_IND_EVT) 2301a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_OPEN_CFM_EVT) 2302a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CLOSE_IND_EVT) 2303a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CLOSE_CFM_EVT) 2304a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_CONG_CHG_EVT) 2305a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(MCA_RSP_TOUT_IND_EVT) 2306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return "Unknown MCAP event code"; 2308cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_cback_evt_code 23148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description get the HDP event string pointer 23168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns char * - event string pointer 23188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2320a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_cback_evt_code(uint8_t evt_code) { 2321cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (evt_code) { 2322a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_CCH_OPEN_IND_EVT) 2323a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_CCH_OPEN_CFM_EVT) 2324a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_CCH_CLOSE_IND_EVT) 2325a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_CCH_CLOSE_CFM_EVT) 2326a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OPEN_IND_EVT) 2327a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OPEN_CFM_EVT) 2328a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_CLOSE_IND_EVT) 2329a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_CLOSE_CFM_EVT) 2330a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_RCV_DATA_IND_EVT) 2331a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_REGISTER_CFM_EVT) 2332a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DEREGISTER_CFM_EVT) 2333a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_RECONNECT_CFM_EVT) 2334a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_RECONNECT_IND_EVT) 2335a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_ECHO_TEST_CFM_EVT) 2336a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_SDP_QUERY_CFM_EVT) 2337a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_CONG_CHG_IND_EVT) 2338a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_CREATE_IND_EVT) 2339a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DELETE_MDL_IND_EVT) 2340a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DELETE_MDL_CFM_EVT) 2341a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_ABORT_IND_EVT) 2342a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_ABORT_CFM_EVT) 2343cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return "Unknown HDP event code"; 2345cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hl_dch_oper_code 23518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Get the DCH operation string 23538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns char * - DCH operation string pointer 23558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 23568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 2357a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssenstatic const char* bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code) { 2358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (oper_code) { 2359a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_NONE) 2360a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_REMOTE_CREATE) 2361a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_OPEN) 2362a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_REMOTE_OPEN) 2363a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_CLOSE) 2364a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_REMOTE_CLOSE) 2365a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_DELETE) 2366a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_REMOTE_DELETE) 2367a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_RECONNECT) 2368a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_REMOTE_RECONNECT) 2369a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST) 2370a1e7e5561026e32c5f4d51bf6102fd275061b80fMarie Janssen CASE_RETURN_STR(BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT) 2371cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 2372cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return "Unknown DCH oper code"; 2373cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2376cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#endif /* Debug Functions */ 23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* HL_INCLUDED */ 2378