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 #pragma once
18 
19 #include <base/functional/callback.h>
20 #include <gmock/gmock.h>
21 
22 #include <vector>
23 
24 #include "btm_iso_api_types.h"
25 
26 namespace hcic {
27 class HcicInterface {
28 public:
29   // iso_manager::cig_create_params is a workaround for the 10 params function
30   // limitation that gmock sets
31   virtual void SetCigParams(uint8_t cig_id,
32                             struct bluetooth::hci::iso_manager::cig_create_params cig_params,
33                             base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
34 
35   virtual void RemoveCig(uint8_t cig_id, base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
36 
37   virtual void CreateCis(uint8_t num_cis, const EXT_CIS_CREATE_CFG* cis_create_cfg,
38                          base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
39 
40   virtual void Disconnect(uint16_t handle, uint8_t reason) = 0;
41 
42   virtual void SetupIsoDataPath(uint16_t iso_handle, uint8_t data_path_dir, uint8_t data_path_id,
43                                 uint8_t codec_id_format, uint16_t codec_id_company,
44                                 uint16_t codec_id_vendor, uint32_t controller_delay,
45                                 std::vector<uint8_t> codec_conf,
46                                 base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
47 
48   virtual void RemoveIsoDataPath(uint16_t iso_handle, uint8_t data_path_dir,
49                                  base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
50 
51   virtual void ReadIsoLinkQuality(uint16_t iso_handle,
52                                   base::OnceCallback<void(uint8_t*, uint16_t)> cb) = 0;
53 
54   // iso_manager::big_create_params is a workaround for the 10 params function
55   // limitation that gmock sets
56   virtual void CreateBig(uint8_t big_handle,
57                          struct bluetooth::hci::iso_manager::big_create_params big_params) = 0;
58 
59   virtual void TerminateBig(uint8_t big_handle, uint8_t reason) = 0;
60 
61   virtual ~HcicInterface() = default;
62 };
63 
64 class MockHcicInterface : public HcicInterface {
65 public:
66   MOCK_METHOD((void), SetCigParams,
67               (uint8_t cig_id, struct bluetooth::hci::iso_manager::cig_create_params cig_params,
68                base::OnceCallback<void(uint8_t*, uint16_t)> cb),
69               (override));
70 
71   MOCK_METHOD((void), RemoveCig, (uint8_t cig_id, base::OnceCallback<void(uint8_t*, uint16_t)> cb),
72               (override));
73 
74   MOCK_METHOD((void), CreateCis,
75               (uint8_t num_cis, const EXT_CIS_CREATE_CFG* cis_create_cfg,
76                base::OnceCallback<void(uint8_t*, uint16_t)> cb),
77               (override));
78 
79   MOCK_METHOD((void), Disconnect, (uint16_t handle, uint8_t reason), (override));
80 
81   MOCK_METHOD((void), SetupIsoDataPath,
82               (uint16_t iso_handle, uint8_t data_path_dir, uint8_t data_path_id,
83                uint8_t codec_id_format, uint16_t codec_id_company, uint16_t codec_id_vendor,
84                uint32_t controller_delay, std::vector<uint8_t> codec_conf,
85                base::OnceCallback<void(uint8_t*, uint16_t)> cb),
86               (override));
87 
88   MOCK_METHOD((void), RemoveIsoDataPath,
89               (uint16_t iso_handle, uint8_t data_path_dir,
90                base::OnceCallback<void(uint8_t*, uint16_t)> cb),
91               (override));
92 
93   MOCK_METHOD((void), ReadIsoLinkQuality,
94               (uint16_t iso_handle, base::OnceCallback<void(uint8_t*, uint16_t)> cb), (override));
95 
96   MOCK_METHOD((void), CreateBig,
97               (uint8_t big_handle,
98                struct bluetooth::hci::iso_manager::big_create_params big_params),
99               (override));
100 
101   MOCK_METHOD((void), TerminateBig, (uint8_t big_handle, uint8_t reason), (override));
102 };
103 
104 void SetMockHcicInterface(MockHcicInterface* mock_hcic_interface);
105 
106 }  // namespace hcic
107