1b29fae56cebbc749f14e568db4fd0da6e054f469Jack He/* 2b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Copyright (C) 2017 The Android Open Source Project 3b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * 4b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Licensed under the Apache License, Version 2.0 (the "License"); 5b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * you may not use this file except in compliance with the License. 6b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * You may obtain a copy of the License at 7b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * 8b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * http://www.apache.org/licenses/LICENSE-2.0 9b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * 10b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Unless required by applicable law or agreed to in writing, software 11b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * distributed under the License is distributed on an "AS IS" BASIS, 12b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * See the License for the specific language governing permissions and 14b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * limitations under the License. 15b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 16b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <base/logging.h> 17b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 18b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include "mca_defs.h" 19b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include "mcap_test_mdl.h" 20b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 21b29fae56cebbc749f14e568db4fd0da6e054f469Jack Henamespace SYSTEM_BT_TOOLS_MCAP_TOOL { 22b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 23b29fae56cebbc749f14e568db4fd0da6e054f469Jack He/* Test MCAP Channel Configurations */ 24b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heconst tMCA_CHNL_CFG MCAP_TEST_CHANNEL_CONFIG = { 25b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .fcr_opt = 26b29fae56cebbc749f14e568db4fd0da6e054f469Jack He { 27b29fae56cebbc749f14e568db4fd0da6e054f469Jack He L2CAP_FCR_ERTM_MODE, 28b29fae56cebbc749f14e568db4fd0da6e054f469Jack He MCA_FCR_OPT_TX_WINDOW_SIZE, /* Tx window size */ 29b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /* Maximum transmissions before disconnecting */ 30b29fae56cebbc749f14e568db4fd0da6e054f469Jack He MCA_FCR_OPT_MAX_TX_B4_DISCNT, 31b29fae56cebbc749f14e568db4fd0da6e054f469Jack He MCA_FCR_OPT_RETX_TOUT, /* retransmission timeout (2 secs) */ 32b29fae56cebbc749f14e568db4fd0da6e054f469Jack He MCA_FCR_OPT_MONITOR_TOUT, /* Monitor timeout (12 secs) */ 33b29fae56cebbc749f14e568db4fd0da6e054f469Jack He MCA_FCR_OPT_MPS_SIZE, /* MPS segment size */ 34b29fae56cebbc749f14e568db4fd0da6e054f469Jack He }, 35b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .user_rx_buf_size = BT_DEFAULT_BUFFER_SIZE, 36b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .user_tx_buf_size = BT_DEFAULT_BUFFER_SIZE, 37b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .fcr_rx_buf_size = BT_DEFAULT_BUFFER_SIZE, 38b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .fcr_tx_buf_size = BT_DEFAULT_BUFFER_SIZE, 39b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .fcs = MCA_FCS_NONE, 40b29fae56cebbc749f14e568db4fd0da6e054f469Jack He .data_mtu = 572 /* L2CAP MTU of the MCAP data channel */ 41b29fae56cebbc749f14e568db4fd0da6e054f469Jack He}; 42b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 43b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heconst tMCA_CHNL_CFG* get_test_channel_config() { 44b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return &MCAP_TEST_CHANNEL_CONFIG; 45b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 46b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 47b29fae56cebbc749f14e568db4fd0da6e054f469Jack HeMcapMdl::McapMdl(btmcap_test_interface_t* mcap_test_interface, 48b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_CL mcl_handle, tMCA_DEP mdep_handle, uint16_t mdl_id, 49b29fae56cebbc749f14e568db4fd0da6e054f469Jack He uint8_t dep_id, uint8_t cfg) { 50b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcap_test_interface = mcap_test_interface; 51b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcl_handle = mcl_handle; 52b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mdep_handle = mdep_handle; 53b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mdl_id = mdl_id; 54b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _dep_id = dep_id; 55b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _cfg = cfg; 56b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 57b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 58b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::UpdateContext(tMCA_DEP mdep_handle, uint8_t dep_id, uint8_t cfg) { 59b29fae56cebbc749f14e568db4fd0da6e054f469Jack He if (!_mdl_handle) { 60b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG(ERROR) << "MDL handle not initialized"; 61b29fae56cebbc749f14e568db4fd0da6e054f469Jack He } 62b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mdep_handle = mdep_handle; 63b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _dep_id = dep_id; 64b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _cfg = cfg; 65b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->close_mdl_request(_mdl_handle); 66b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 67b29fae56cebbc749f14e568db4fd0da6e054f469Jack He if (ret != MCA_SUCCESS) return false; 68b29fae56cebbc749f14e568db4fd0da6e054f469Jack He SetHandle(0); 69b29fae56cebbc749f14e568db4fd0da6e054f469Jack He SetResponseCode(-1); 70b29fae56cebbc749f14e568db4fd0da6e054f469Jack He SetMtu(0); 71b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return true; 72b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 73b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 74b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::Create(uint16_t data_psm, bool should_connect) { 75b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->create_mdl_request( 76b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcl_handle, _mdep_handle, data_psm, _mdl_id, _dep_id, _cfg, 77b29fae56cebbc749f14e568db4fd0da6e054f469Jack He should_connect ? &MCAP_TEST_CHANNEL_CONFIG : nullptr); 78b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 79b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return ret == MCA_SUCCESS; 80b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 81b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 82b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::Close() { 83b29fae56cebbc749f14e568db4fd0da6e054f469Jack He if (!_mdl_handle) { 84b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG(ERROR) << "MDL handle not initialized"; 85b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return false; 86b29fae56cebbc749f14e568db4fd0da6e054f469Jack He } 87b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->close_mdl_request(_mdl_handle); 88b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 89b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return ret == MCA_SUCCESS; 90b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 91b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 92b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::Reconnect(uint16_t data_psm) { 93b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->reconnect_mdl_request( 94b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcl_handle, _mdep_handle, data_psm, _mdl_id, &MCAP_TEST_CHANNEL_CONFIG); 95b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 96b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return ret == MCA_SUCCESS; 97b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 98b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 99b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::ReconnectResponse() { 100b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->reconnect_mdl_response( 101b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcl_handle, _mdep_handle, _mdl_id, MCA_RSP_SUCCESS, 102b29fae56cebbc749f14e568db4fd0da6e054f469Jack He &MCAP_TEST_CHANNEL_CONFIG); 103b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 104b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return ret == MCA_SUCCESS; 105b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 106b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 107b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::CreateResponse() { 108b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_RESULT ret = _mcap_test_interface->create_mdl_response( 109b29fae56cebbc749f14e568db4fd0da6e054f469Jack He _mcl_handle, _dep_id, _mdl_id, _cfg, MCA_SUCCESS, 110b29fae56cebbc749f14e568db4fd0da6e054f469Jack He &MCAP_TEST_CHANNEL_CONFIG); 111b29fae56cebbc749f14e568db4fd0da6e054f469Jack He LOG_IF(INFO, ret != MCA_SUCCESS) << "ret=" << (int)ret; 112b29fae56cebbc749f14e568db4fd0da6e054f469Jack He return ret == MCA_SUCCESS; 113b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} 114b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 115b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hebool McapMdl::IsConnected() { return _mdl_handle > 0; } 116b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 117b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heuint16_t McapMdl::GetId() { return _mdl_id; } 118b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 119b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heint32_t McapMdl::GetResponseCode() { return _mdl_rsp_code; } 120b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 121b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hevoid McapMdl::SetResponseCode(int32_t rsp_code) { _mdl_rsp_code = rsp_code; } 122b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 123b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hevoid McapMdl::SetHandle(tMCA_DL mdl_handle) { _mdl_handle = mdl_handle; } 124b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 125b29fae56cebbc749f14e568db4fd0da6e054f469Jack HetMCA_DL McapMdl::GetHandle() { return _mdl_handle; } 126b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 127b29fae56cebbc749f14e568db4fd0da6e054f469Jack Hevoid McapMdl::SetMtu(uint16_t mtu) { _data_mtu = mtu; } 128b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 129b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heuint16_t McapMdl::GetMtu() { return _data_mtu; } 130b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 131b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} // namespace SYSTEM_BT_TOOLS_MCAP_TOOL 132