1 /*
2 * Copyright 2020 HIMSA II K/S - www.himsa.com.
3 * Represented by EHIMA - www.ehima.com
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 #include "mock_stack_btm_iso.h"
19
20 namespace {
21 MockIsoManager* mock_pimpl_;
22 }
23
GetInstance()24 MockIsoManager* MockIsoManager::GetInstance() {
25 bluetooth::hci::IsoManager::GetInstance();
26 return mock_pimpl_;
27 }
28
29 namespace bluetooth {
30 namespace hci {
31
32 struct IsoManager::impl : public MockIsoManager {
33 public:
34 impl() = default;
35 ~impl() = default;
36 };
37
IsoManager()38 IsoManager::IsoManager() {}
39
RegisterCigCallbacks(iso_manager::CigCallbacks * callbacks) const40 void IsoManager::RegisterCigCallbacks(
41 iso_manager::CigCallbacks* callbacks) const {
42 if (!pimpl_) return;
43 pimpl_->RegisterCigCallbacks(callbacks);
44 }
45
RegisterBigCallbacks(iso_manager::BigCallbacks * callbacks) const46 void IsoManager::RegisterBigCallbacks(
47 iso_manager::BigCallbacks* callbacks) const {
48 if (!pimpl_) return;
49 pimpl_->RegisterBigCallbacks(callbacks);
50 }
51
RegisterOnIsoTrafficActiveCallback(void callback (bool)) const52 void IsoManager::RegisterOnIsoTrafficActiveCallback(void callback(bool)) const {
53 if (!pimpl_) return;
54 pimpl_->RegisterOnIsoTrafficActiveCallbacks(callback);
55 }
56
CreateCig(uint8_t cig_id,struct iso_manager::cig_create_params cig_params)57 void IsoManager::CreateCig(uint8_t cig_id,
58 struct iso_manager::cig_create_params cig_params) {
59 if (!pimpl_) return;
60 pimpl_->CreateCig(cig_id, std::move(cig_params));
61 }
62
ReconfigureCig(uint8_t cig_id,struct iso_manager::cig_create_params cig_params)63 void IsoManager::ReconfigureCig(
64 uint8_t cig_id, struct iso_manager::cig_create_params cig_params) {
65 if (!pimpl_) return;
66 pimpl_->ReconfigureCig(cig_id, std::move(cig_params));
67 }
68
RemoveCig(uint8_t cig_id,bool force)69 void IsoManager::RemoveCig(uint8_t cig_id, bool force) {
70 pimpl_->RemoveCig(cig_id, force);
71 }
72
EstablishCis(struct iso_manager::cis_establish_params conn_params)73 void IsoManager::EstablishCis(
74 struct iso_manager::cis_establish_params conn_params) {
75 if (!pimpl_) return;
76 pimpl_->EstablishCis(std::move(conn_params));
77 }
78
DisconnectCis(uint16_t cis_handle,uint8_t reason)79 void IsoManager::DisconnectCis(uint16_t cis_handle, uint8_t reason) {
80 if (!pimpl_) return;
81 pimpl_->DisconnectCis(cis_handle, reason);
82 }
83
SetupIsoDataPath(uint16_t iso_handle,struct iso_manager::iso_data_path_params path_params)84 void IsoManager::SetupIsoDataPath(
85 uint16_t iso_handle, struct iso_manager::iso_data_path_params path_params) {
86 if (!pimpl_) return;
87 pimpl_->SetupIsoDataPath(iso_handle, std::move(path_params));
88 }
89
RemoveIsoDataPath(uint16_t iso_handle,uint8_t data_path_dir)90 void IsoManager::RemoveIsoDataPath(uint16_t iso_handle, uint8_t data_path_dir) {
91 if (!pimpl_) return;
92 pimpl_->RemoveIsoDataPath(iso_handle, data_path_dir);
93 }
94
ReadIsoLinkQuality(uint16_t iso_handle)95 void IsoManager::ReadIsoLinkQuality(uint16_t iso_handle) {
96 if (!pimpl_) return;
97 pimpl_->ReadIsoLinkQuality(iso_handle);
98 }
99
SendIsoData(uint16_t iso_handle,const uint8_t * data,uint16_t data_len)100 void IsoManager::SendIsoData(uint16_t iso_handle, const uint8_t* data,
101 uint16_t data_len) {
102 if (!pimpl_) return;
103 pimpl_->SendIsoData(iso_handle, data, data_len);
104 }
105
CreateBig(uint8_t big_id,struct iso_manager::big_create_params big_params)106 void IsoManager::CreateBig(uint8_t big_id,
107 struct iso_manager::big_create_params big_params) {
108 if (!pimpl_) return;
109 pimpl_->CreateBig(big_id, std::move(big_params));
110 }
111
TerminateBig(uint8_t big_id,uint8_t reason)112 void IsoManager::TerminateBig(uint8_t big_id, uint8_t reason) {
113 if (!pimpl_) return;
114 pimpl_->TerminateBig(big_id, reason);
115 }
116
HandleIsoData(void * p_msg)117 void IsoManager::HandleIsoData(void* p_msg) {
118 if (!pimpl_) return;
119 pimpl_->HandleIsoData(static_cast<BT_HDR*>(p_msg));
120 }
121
HandleDisconnect(uint16_t handle,uint8_t reason)122 void IsoManager::HandleDisconnect(uint16_t handle, uint8_t reason) {
123 if (!pimpl_) return;
124 pimpl_->HandleDisconnect(handle, reason);
125 }
126
HandleNumComplDataPkts(uint16_t handle,uint16_t credits)127 void IsoManager::HandleNumComplDataPkts(uint16_t handle, uint16_t credits) {
128 if (!pimpl_) return;
129 pimpl_->HandleNumComplDataPkts(handle, credits);
130 }
131
HandleHciEvent(uint8_t sub_code,uint8_t * params,uint16_t length)132 void IsoManager::HandleHciEvent(uint8_t sub_code, uint8_t* params,
133 uint16_t length) {
134 if (!pimpl_) return;
135 pimpl_->HandleHciEvent(sub_code, params, length);
136 }
137
Start()138 void IsoManager::Start() {
139 // It is needed here as IsoManager which is a singleton creates it, but in
140 // this mock we want to destroy and recreate the mock on each test case.
141 if (!pimpl_) {
142 pimpl_ = std::make_unique<testing::NiceMock<impl>>();
143 }
144
145 mock_pimpl_ = pimpl_.get();
146 pimpl_->Start();
147 }
148
Stop()149 void IsoManager::Stop() {
150 // It is needed here as IsoManager which is a singleton creates it, but in
151 // this mock we want to destroy and recreate the mock on each test case.
152 if (pimpl_) {
153 pimpl_->Stop();
154 pimpl_.reset();
155 }
156
157 mock_pimpl_ = nullptr;
158 }
159
Dump(int)160 void IsoManager::Dump(int /* fd */) {}
161
162 IsoManager::~IsoManager() = default;
163
GetInstance()164 IsoManager* IsoManager::GetInstance() {
165 static IsoManager* instance = new IsoManager();
166 return instance;
167 }
168
169 } // namespace hci
170 } // namespace bluetooth
171