1 /*
2  * Copyright 2020 HIMSA II K/S - www.himsa.com. Represented by EHIMA -
3  * 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_eatt.h"
19 
20 #include "types/raw_address.h"
21 
22 namespace {
23 MockEattExtension* mock_pimpl_;
24 }
GetInstance()25 MockEattExtension* MockEattExtension::GetInstance() {
26   bluetooth::eatt::EattExtension::GetInstance();
27   return mock_pimpl_;
28 }
29 
30 namespace bluetooth {
31 namespace eatt {
32 
33 struct EattExtension::impl : public MockEattExtension {
34   impl() = default;
35   ~impl() = default;
IsRunningbluetooth::eatt::EattExtension::impl36   bool IsRunning() { return mock_pimpl_ ? true : false; }
37 };
38 
AddFromStorage(const RawAddress &)39 void EattExtension::AddFromStorage(const RawAddress& /* bd_addr */) {}
40 
EattExtension()41 EattExtension::EattExtension() : pimpl_(std::make_unique<impl>()) {}
42 
IsEattSupportedByPeer(const RawAddress & bd_addr)43 bool EattExtension::IsEattSupportedByPeer(const RawAddress& bd_addr) {
44   return pimpl_->IsEattSupportedByPeer(bd_addr);
45 }
46 
Connect(const RawAddress & bd_addr)47 void EattExtension::Connect(const RawAddress& bd_addr) { pimpl_->Connect(bd_addr); }
48 
Disconnect(const RawAddress & bd_addr,uint16_t cid)49 void EattExtension::Disconnect(const RawAddress& bd_addr, uint16_t cid) {
50   pimpl_->Disconnect(bd_addr, cid);
51 }
52 
Reconfigure(const RawAddress & bd_addr,uint16_t cid,uint16_t mtu)53 void EattExtension::Reconfigure(const RawAddress& bd_addr, uint16_t cid, uint16_t mtu) {
54   pimpl_->Reconfigure(bd_addr, cid, mtu);
55 }
ReconfigureAll(const RawAddress & bd_addr,uint16_t mtu)56 void EattExtension::ReconfigureAll(const RawAddress& bd_addr, uint16_t mtu) {
57   pimpl_->ReconfigureAll(bd_addr, mtu);
58 }
59 
FindEattChannelByCid(const RawAddress & bd_addr,uint16_t cid)60 EattChannel* EattExtension::FindEattChannelByCid(const RawAddress& bd_addr, uint16_t cid) {
61   return pimpl_->FindEattChannelByCid(bd_addr, cid);
62 }
63 
FindEattChannelByTransId(const RawAddress & bd_addr,uint32_t trans_id)64 EattChannel* EattExtension::FindEattChannelByTransId(const RawAddress& bd_addr, uint32_t trans_id) {
65   return pimpl_->FindEattChannelByTransId(bd_addr, trans_id);
66 }
67 
IsIndicationPending(const RawAddress & bd_addr,uint16_t indication_handle)68 bool EattExtension::IsIndicationPending(const RawAddress& bd_addr, uint16_t indication_handle) {
69   return pimpl_->IsIndicationPending(bd_addr, indication_handle);
70 }
71 
GetChannelAvailableForIndication(const RawAddress & bd_addr)72 EattChannel* EattExtension::GetChannelAvailableForIndication(const RawAddress& bd_addr) {
73   return pimpl_->GetChannelAvailableForIndication(bd_addr);
74 }
75 
FreeGattResources(const RawAddress & bd_addr)76 void EattExtension::FreeGattResources(const RawAddress& bd_addr) {
77   pimpl_->FreeGattResources(bd_addr);
78 }
79 
IsOutstandingMsgInSendQueue(const RawAddress & bd_addr)80 bool EattExtension::IsOutstandingMsgInSendQueue(const RawAddress& bd_addr) {
81   return pimpl_->IsOutstandingMsgInSendQueue(bd_addr);
82 }
83 
GetChannelWithQueuedDataToSend(const RawAddress & bd_addr)84 EattChannel* EattExtension::GetChannelWithQueuedDataToSend(const RawAddress& bd_addr) {
85   return pimpl_->GetChannelWithQueuedDataToSend(bd_addr);
86 }
87 
GetChannelAvailableForClientRequest(const RawAddress & bd_addr)88 EattChannel* EattExtension::GetChannelAvailableForClientRequest(const RawAddress& bd_addr) {
89   return pimpl_->GetChannelAvailableForClientRequest(bd_addr);
90 }
91 
92 /* Start stop GATT indication timer per CID */
StartIndicationConfirmationTimer(const RawAddress & bd_addr,uint16_t cid)93 void EattExtension::StartIndicationConfirmationTimer(const RawAddress& bd_addr, uint16_t cid) {
94   pimpl_->StartIndicationConfirmationTimer(bd_addr, cid);
95 }
96 
StopIndicationConfirmationTimer(const RawAddress & bd_addr,uint16_t cid)97 void EattExtension::StopIndicationConfirmationTimer(const RawAddress& bd_addr, uint16_t cid) {
98   pimpl_->StopIndicationConfirmationTimer(bd_addr, cid);
99 }
100 
101 /* Start stop application indication timeout */
StartAppIndicationTimer(const RawAddress & bd_addr,uint16_t cid)102 void EattExtension::StartAppIndicationTimer(const RawAddress& bd_addr, uint16_t cid) {
103   pimpl_->StartAppIndicationTimer(bd_addr, cid);
104 }
105 
StopAppIndicationTimer(const RawAddress & bd_addr,uint16_t cid)106 void EattExtension::StopAppIndicationTimer(const RawAddress& bd_addr, uint16_t cid) {
107   pimpl_->StopAppIndicationTimer(bd_addr, cid);
108 }
109 
Start()110 void EattExtension::Start() {
111   // It is needed here as IsoManager which is a singleton creates it, but in
112   // this mock we want to destroy and recreate the mock on each test case.
113   if (!pimpl_) {
114     pimpl_ = std::make_unique<impl>();
115   }
116 
117   mock_pimpl_ = pimpl_.get();
118   pimpl_->Start();
119 }
120 
Stop()121 void EattExtension::Stop() {
122   // It is needed here as IsoManager which is a singleton creates it, but in
123   // this mock we want to destroy and recreate the mock on each test case.
124   if (pimpl_) {
125     pimpl_->Stop();
126     pimpl_.reset();
127   }
128 
129   mock_pimpl_ = nullptr;
130 }
131 
132 EattExtension::~EattExtension() = default;
133 }  // namespace eatt
134 }  // namespace bluetooth
135