1 /*
2  * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ADAPTER_MANAGER_H
17 #define ADAPTER_MANAGER_H
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 #include "ble/ble_adapter.h"
23 #include "bt_def.h"
24 #include "classic/classic_adapter.h"
25 #include "interface_adapter.h"
26 #include "interface_adapter_manager.h"
27 #include "util/context.h"
28 
29 namespace OHOS {
30 namespace bluetooth {
31 /**
32  * @brief Represents adapter manager.
33  *
34  * @since 6
35  */
36 const static int CLASSIC_ENABLE_STATE_BIT = 0x04;
37 class AdapterManager : public IAdapterManager {
38 public:
39     /**
40      * @brief Get adapter manager singleton instance pointer.
41      *
42      * @return Returns the singleton instance pointer.
43      * @since 6
44      */
45     static AdapterManager *GetInstance();
46 
47     // framework function
48     /**
49      * @brief Get classic adapter interface, called in bluetooth_server.
50      *
51      * @return Returns IAdapterClassic pointer.
52      * @since 6
53      */
54     std::shared_ptr<IAdapterClassic> GetClassicAdapterInterface(void) const override;
55 
56     /**
57      * @brief Get ble adapter interface, called in bluetooth_server.
58      *
59      * @return Returns IAdapterBle pointer.
60      * @since 6
61      */
62     std::shared_ptr<IAdapterBle> GetBleAdapterInterface(void) const override;
63 
64     /**
65      * @brief bluetooth adapter start.
66      *
67      * @return Returns <b>true</b> if the operation is successful;
68      *         returns <b>false</b> if the operation fails.
69      * @since 6
70      */
71     bool Start() override;
72 
73     /**
74      * @brief Stop bluetooth service.
75      *
76      * @since 6
77      */
78     void Stop() const override;
79 
80     /**
81      * @brief Reset bluetooth service.
82      *
83      * @since 6
84      */
85     void Reset() const override;
86 
87     /**
88      * @brief Factory reset bluetooth service.
89      *
90      * @return Returns <b>true</b> if the operation is successful;
91      *         returns <b>false</b> if the operation fails.
92      * @since 6
93      */
94     bool FactoryReset() const override;
95 
96     /**
97      * @brief Enable bluetooth service.
98      *
99      * @param transport Adapter transport.
100      * @return Returns <b>true</b> if the operation is accepted;
101      *         returns <b>false</b> if the operation is rejected.
102      * @since 6
103      */
104     bool Enable(const BTTransport transport) const override;
105 
106     /**
107      * @brief Disable bluetooth service.
108      *
109      * @param transport Adapter transport.
110      * @return Returns <b>true</b> if the operation is accepted;
111      *         returns <b>false</b> if the operation is rejected.
112      * @since 6
113      */
114     bool Disable(const BTTransport transport) const override;
115 
116     /**
117      * @brief Get adapter enable/disable state.
118      *
119      * @param transport Adapter transport.
120      * @return Returns adapter enable/disable state.
121      * @since 6
122      */
123     BTStateID GetState(const BTTransport transport) const override;
124 
125     /**
126      * @brief Get adapter connects state.
127      *
128      * @return Returns adapter connects state.
129      * @since 6
130      */
131     BTConnectState GetAdapterConnectState() const override;
132 
133     /**
134      * @brief Register adapter state observer.
135      *
136      * @param observer Class IAdapterStateObserver pointer to register observer.
137      * @return Returns <b>true</b> if the operation is successful;
138      *         returns <b>false</b> if the operation fails.
139      * @since 6
140      */
141     bool RegisterStateObserver(IAdapterStateObserver &observer) const override;
142 
143     /**
144      * @brief Deregister adapter state observer.
145      *
146      * @param observer Class IAdapterStateObserver pointer to deregister observer.
147      * @return Returns <b>true</b> if the operation is successful;
148      *         returns <b>false</b> if the operation fails.
149      * @since 6
150      */
151     bool DeregisterStateObserver(IAdapterStateObserver &observer) const override;
152 
153     /**
154      * @brief Register system state observer.
155      *
156      * @param observer Class ISystemStateObserver pointer to register observer.
157      * @return Returns <b>true</b> if the operation is successful;
158      *         returns <b>false</b> if the operation fails.
159      * @since 6
160      */
161     bool RegisterSystemStateObserver(ISystemStateObserver &observer) const override;
162 
163     /**
164      * @brief Deregister system state observer.
165      *
166      * @param observer Class ISystemStateObserver pointer to deregister observer.
167      * @return Returns <b>true</b> if the operation is successful;
168      *         returns <b>false</b> if the operation fails.
169      * @since 6
170      */
171     bool DeregisterSystemStateObserver(ISystemStateObserver &observer) const override;
172 
173     /**
174      * @brief Get max audio connected devices number.
175      *
176      * @return Returns max device number that audio can connect.
177      * @since 6
178      */
179     int GetMaxNumConnectedAudioDevices() const override;
180 
181     /**
182      * @brief Set phonebook permission for device.
183      *
184      * @param address Device address which is setted permission.
185      * @param permission permission grade.
186      * @return Returns <b>true</b> if the operation is successful;
187      *         returns <b>false</b> if the operation fails.
188      * @since 6
189      */
190     bool SetPhonebookPermission(const std::string &address, BTPermissionType permission) const override;
191 
192     /**
193      * @brief Get phonebook permission for device.
194      *
195      * @param address Device address which is setted permission.
196      * @return Returns permission grade.
197      * @since 6
198      */
199     BTPermissionType GetPhonebookPermission(const std::string &address) const override;
200 
201     /**
202      * @brief Set message permission for device.
203      *
204      * @param address Device address which is setted permission.
205      * @param permission permission grade.
206      * @return Returns <b>true</b> if the operation is successful;
207      *         returns <b>false</b> if the operation fails.
208      * @since 6
209      */
210     bool SetMessagePermission(const std::string &address, BTPermissionType permission) const override;
211 
212     /**
213      * @brief Get message permission for device.
214      *
215      * @param address Device address which is setted permission.
216      * @return Returns Permission grade.
217      * @since 6
218      */
219     BTPermissionType GetMessagePermission(const std::string &address) const override;
220 
221     /**
222      * @brief Get power mode.
223      *
224      * @param address Device address.
225      * @return Returns power mode grade.
226      *         BTPowerMode::MODE_INVALID = 0x00,
227      *         BTPowerMode::MODE_ACTIVE = 0x100,
228      *         BTPowerMode::MODE_SNIFF_LEVEL_LOW = 0x201,
229      *         BTPowerMode::MODE_SNIFF_LEVEL_MID = 0x202,
230      *         BTPowerMode::MODE_SNIFF_LEVEL_HIG = 0x203,
231      * @since 6
232      */
233     int GetPowerMode(const std::string &address) const override;
234 
235     /**
236      * @brief Stop bluetooth adapter and profile service.
237      *
238      * @return Returns <b>true</b> if the operation is successful;
239      *         returns <b>false</b> if the operation fails.
240      * @since 6
241      */
242     bool AdapterStop() const;
243 
244     /**
245      * @brief Clear all storage.
246      *
247      * @return Returns <b>true</b> if the operation is successful;
248      *         returns <b>false</b> if the operation fails.
249      * @since 6
250      */
251     bool ClearAllStorage() const;
252 
253     /**
254      * @brief System state change.
255      *
256      * @param state Change to a new state.
257      * @since 6
258      */
259     void OnSysStateChange(const std::string &state) const;
260 
261     /**
262      * @brief System state exit.
263      *
264      * @param state Exit the old state.
265      * @since 6
266      */
267     void OnSysStateExit(const std::string &state) const;
268 
269     /**
270      * @brief Adapter state change.
271      *
272      * @param transport Adapter transport.
273      * @param state Change to a new state.
274      * @since 6
275      */
276     void OnAdapterStateChange(const BTTransport transport, const BTStateID state) const;
277 
278     /**
279      * @brief Profile services enable complete notify.
280      *
281      * @param transport Adapter transport.
282      * @param ret Profile services enable operation result.
283      * @since 6
284      */
285     void OnProfileServicesEnableComplete(const BTTransport transport, const bool ret) const;
286 
287     /**
288      * @brief Profile services disable complete notify.
289      *
290      * @param transport Adapter transport.
291      * @param ret Profile services disable operation result.
292      * @since 6
293      */
294     void OnProfileServicesDisableComplete(const BTTransport transport, const bool ret) const;
295 
296     /**
297      * @brief Pair devices remove notify.
298      *
299      * @param transport Adapter transport.
300      * @param devices The vector of removed devices.
301      * @since 6
302      */
303     void OnPairDevicesRemoved(const BTTransport transport, const std::vector<RawAddress> &devices) const;
304 
305     void RestoreTurnOnState();
306 private:
307     AdapterManager();
308     ~AdapterManager();
309     void CreateAdapters() const;
310     std::string GetSysState() const;
311     bool OutputSetting() const;
312     void RegisterHciResetCallback();
313     void DeregisterHciResetCallback() const;
314     void RemoveDeviceProfileConfig(const BTTransport transport, const std::vector<RawAddress> &devices) const;
315     void PublishBluetoothStateChangeEvent(const BTTransport transport, const BTStateID state) const;
316 
317     static void HciFailedReset(void *context);
318 
319     BT_DISALLOW_COPY_AND_ASSIGN(AdapterManager);
320     DECLARE_IMPL();
321 };
322 }  // namespace bluetooth
323 }  // namespace OHOS
324 
325 #endif  // ADAPTER_MANAGER_H