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