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#pragma once 17b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 18b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <functional> 19b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <iterator> 20b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <memory> 21b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <string> 22b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <unordered_map> 23b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <vector> 24b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 25b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include <base/logging.h> 26b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 27b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include "mca_api.h" 28b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 29b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include "mcap_test_mcl.h" 30b29fae56cebbc749f14e568db4fd0da6e054f469Jack He#include "mcap_test_mdep.h" 31b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 32b29fae56cebbc749f14e568db4fd0da6e054f469Jack Henamespace SYSTEM_BT_TOOLS_MCAP_TOOL { 33b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 34b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heextern const tMCA_CHNL_CFG MCAP_TEST_CHANNEL_CONFIG; 35b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 36b29fae56cebbc749f14e568db4fd0da6e054f469Jack Heclass McapTestApp { 37b29fae56cebbc749f14e568db4fd0da6e054f469Jack He public: 38b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 39b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * McapTestApp is the root node for an MCAP application 40b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * 41b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param mcap_test_interface interface to MCAP APIs on Bluetooth stack 42b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * from get_test_interface() 43b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 44b29fae56cebbc749f14e568db4fd0da6e054f469Jack He McapTestApp(btmcap_test_interface_t* mcap_test_interface); 45b29fae56cebbc749f14e568db4fd0da6e054f469Jack He btmcap_test_interface_t* GetInterface(); 46b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 47b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Register an application with the Bluetooth stack 48b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param ctrl_psm Control channel L2CAP PSM 49b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param data_psm Data channel L2CAP PSM 50b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param sec_mask Security Mask 51b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param callback Control channel callback 52b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @return 53b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 54b29fae56cebbc749f14e568db4fd0da6e054f469Jack He bool Register(uint16_t ctrl_psm, uint16_t data_psm, uint16_t sec_mask, 55b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_CTRL_CBACK* callback); 56b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 57b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * De-register the current application 58b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 59b29fae56cebbc749f14e568db4fd0da6e054f469Jack He void Deregister(); 60b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 61b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Check if current application is registered 62b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @return True if registered 63b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 64b29fae56cebbc749f14e568db4fd0da6e054f469Jack He bool Registered(); 65b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 66b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Create MCAP Communication Link 67b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param bd_addr Peer Bluetooth Address 68b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param ctrl_psm Control channel L2CAP PSM, should be the same as registered 69b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * value for most cases 70b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param sec_mask Security mask 71b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @return True on success 72b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 739e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski bool ConnectMcl(const RawAddress& bd_addr, uint16_t ctrl_psm, 74b29fae56cebbc749f14e568db4fd0da6e054f469Jack He uint16_t sec_mask); 75b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 76b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Create MCAP Data End Point 77b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param type 0 - MCA_TDEP_ECHO, 1 - MCA_TDEP_DATA 78b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param max_mdl Maximum number of data channels for this end point 79b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param data_callback Data callback 80b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @return True on success 81b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 82b29fae56cebbc749f14e568db4fd0da6e054f469Jack He bool CreateMdep(uint8_t type, uint8_t max_mdl, 83b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_DATA_CBACK* data_callback); 84b29fae56cebbc749f14e568db4fd0da6e054f469Jack He // Simple methods that are self-explanatory 85b29fae56cebbc749f14e568db4fd0da6e054f469Jack He uint8_t GetHandle(); 869e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski McapMcl* FindMclByPeerAddress(const RawAddress& bd_addr); 87b29fae56cebbc749f14e568db4fd0da6e054f469Jack He McapMcl* FindMclByHandle(tMCA_CL mcl_handle); 88b29fae56cebbc749f14e568db4fd0da6e054f469Jack He McapMdep* FindMdepByHandle(tMCA_DEP mdep_handle); 89b29fae56cebbc749f14e568db4fd0da6e054f469Jack He void RemoveMclByHandle(tMCA_CL mcl_handle); 90b29fae56cebbc749f14e568db4fd0da6e054f469Jack He bool IsRegistered(); 91b29fae56cebbc749f14e568db4fd0da6e054f469Jack He /** 92b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * Callback function for control channel, need to be called by an external 93b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * function registered during McapTestApp::Register() 94b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param handle MCAP application handle, should be the same as GetHandle() 95b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param mcl MCL handle, FindMclByHandle(mcl) should return non-null value 96b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param event Control event 97b29fae56cebbc749f14e568db4fd0da6e054f469Jack He * @param p_data Control data 98b29fae56cebbc749f14e568db4fd0da6e054f469Jack He */ 99b29fae56cebbc749f14e568db4fd0da6e054f469Jack He void ControlCallback(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, 100b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_CTRL* p_data); 101b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 102b29fae56cebbc749f14e568db4fd0da6e054f469Jack He private: 103b29fae56cebbc749f14e568db4fd0da6e054f469Jack He // Initialized during start up 104b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_REG _mca_reg; 105b29fae56cebbc749f14e568db4fd0da6e054f469Jack He btmcap_test_interface_t* _mcap_test_interface = nullptr; 106b29fae56cebbc749f14e568db4fd0da6e054f469Jack He std::vector<McapMcl> _mcl_list; 107b29fae56cebbc749f14e568db4fd0da6e054f469Jack He std::vector<McapMdep> _mdep_list; 108b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 109b29fae56cebbc749f14e568db4fd0da6e054f469Jack He // Initialized later 110b29fae56cebbc749f14e568db4fd0da6e054f469Jack He tMCA_HANDLE _mcap_handle = 0; 111b29fae56cebbc749f14e568db4fd0da6e054f469Jack He}; 112b29fae56cebbc749f14e568db4fd0da6e054f469Jack He 113b29fae56cebbc749f14e568db4fd0da6e054f469Jack He} // namespace SYSTEM_BT_TOOLS_MCAP_TOOL 114