You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.3 KiB
131 lines
4.3 KiB
/* |
|
* Copyright (C) 2017 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
#include <base/logging.h> |
|
|
|
#include "mca_defs.h" |
|
#include "mcap_test_mdl.h" |
|
|
|
namespace SYSTEM_BT_TOOLS_MCAP_TOOL { |
|
|
|
/* Test MCAP Channel Configurations */ |
|
const tMCA_CHNL_CFG MCAP_TEST_CHANNEL_CONFIG = { |
|
.fcr_opt = |
|
{ |
|
L2CAP_FCR_ERTM_MODE, |
|
MCA_FCR_OPT_TX_WINDOW_SIZE, /* Tx window size */ |
|
/* Maximum transmissions before disconnecting */ |
|
MCA_FCR_OPT_MAX_TX_B4_DISCNT, |
|
MCA_FCR_OPT_RETX_TOUT, /* retransmission timeout (2 secs) */ |
|
MCA_FCR_OPT_MONITOR_TOUT, /* Monitor timeout (12 secs) */ |
|
MCA_FCR_OPT_MPS_SIZE, /* MPS segment size */ |
|
}, |
|
.user_rx_buf_size = BT_DEFAULT_BUFFER_SIZE, |
|
.user_tx_buf_size = BT_DEFAULT_BUFFER_SIZE, |
|
.fcr_rx_buf_size = BT_DEFAULT_BUFFER_SIZE, |
|
.fcr_tx_buf_size = BT_DEFAULT_BUFFER_SIZE, |
|
.fcs = MCA_FCS_NONE, |
|
.data_mtu = 572 /* L2CAP MTU of the MCAP data channel */ |
|
}; |
|
|
|
const tMCA_CHNL_CFG* get_test_channel_config() { |
|
return &MCAP_TEST_CHANNEL_CONFIG; |
|
} |
|
|
|
McapMdl::McapMdl(btmcap_test_interface_t* mcap_test_interface, |
|
tMCA_CL mcl_handle, tMCA_DEP mdep_handle, uint16_t mdl_id, |
|
uint8_t dep_id, uint8_t cfg) { |
|
_mcap_test_interface = mcap_test_interface; |
|
_mcl_handle = mcl_handle; |
|
_mdep_handle = mdep_handle; |
|
_mdl_id = mdl_id; |
|
_dep_id = dep_id; |
|
_cfg = cfg; |
|
} |
|
|
|
bool McapMdl::UpdateContext(tMCA_DEP mdep_handle, uint8_t dep_id, uint8_t cfg) { |
|
if (!_mdl_handle) { |
|
LOG(ERROR) << "MDL handle not initialized"; |
|
} |
|
_mdep_handle = mdep_handle; |
|
_dep_id = dep_id; |
|
_cfg = cfg; |
|
tMCA_RESULT ret = _mcap_test_interface->close_mdl_request(_mdl_handle); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
if (ret != MCA_SUCCESS) return false; |
|
SetHandle(0); |
|
SetResponseCode(-1); |
|
SetMtu(0); |
|
return true; |
|
} |
|
|
|
bool McapMdl::Create(uint16_t data_psm, bool should_connect) { |
|
tMCA_RESULT ret = _mcap_test_interface->create_mdl_request( |
|
_mcl_handle, _mdep_handle, data_psm, _mdl_id, _dep_id, _cfg, |
|
should_connect ? &MCAP_TEST_CHANNEL_CONFIG : nullptr); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
return ret == MCA_SUCCESS; |
|
} |
|
|
|
bool McapMdl::Close() { |
|
if (!_mdl_handle) { |
|
LOG(ERROR) << "MDL handle not initialized"; |
|
return false; |
|
} |
|
tMCA_RESULT ret = _mcap_test_interface->close_mdl_request(_mdl_handle); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
return ret == MCA_SUCCESS; |
|
} |
|
|
|
bool McapMdl::Reconnect(uint16_t data_psm) { |
|
tMCA_RESULT ret = _mcap_test_interface->reconnect_mdl_request( |
|
_mcl_handle, _mdep_handle, data_psm, _mdl_id, &MCAP_TEST_CHANNEL_CONFIG); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
return ret == MCA_SUCCESS; |
|
} |
|
|
|
bool McapMdl::ReconnectResponse() { |
|
tMCA_RESULT ret = _mcap_test_interface->reconnect_mdl_response( |
|
_mcl_handle, _mdep_handle, _mdl_id, MCA_RSP_SUCCESS, |
|
&MCAP_TEST_CHANNEL_CONFIG); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
return ret == MCA_SUCCESS; |
|
} |
|
|
|
bool McapMdl::CreateResponse() { |
|
tMCA_RESULT ret = _mcap_test_interface->create_mdl_response( |
|
_mcl_handle, _dep_id, _mdl_id, _cfg, MCA_SUCCESS, |
|
&MCAP_TEST_CHANNEL_CONFIG); |
|
LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; |
|
return ret == MCA_SUCCESS; |
|
} |
|
|
|
bool McapMdl::IsConnected() { return _mdl_handle > 0; } |
|
|
|
uint16_t McapMdl::GetId() { return _mdl_id; } |
|
|
|
int32_t McapMdl::GetResponseCode() { return _mdl_rsp_code; } |
|
|
|
void McapMdl::SetResponseCode(int32_t rsp_code) { _mdl_rsp_code = rsp_code; } |
|
|
|
void McapMdl::SetHandle(tMCA_DL mdl_handle) { _mdl_handle = mdl_handle; } |
|
|
|
tMCA_DL McapMdl::GetHandle() { return _mdl_handle; } |
|
|
|
void McapMdl::SetMtu(uint16_t mtu) { _data_mtu = mtu; } |
|
|
|
uint16_t McapMdl::GetMtu() { return _data_mtu; } |
|
|
|
} // namespace SYSTEM_BT_TOOLS_MCAP_TOOL
|
|
|