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