• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 "bt_def.h"
23 #include "interface_adapter.h"
24 #include "interface_adapter_manager.h"
25 #include "util/context.h"
26 
27 namespace bluetooth {
28 /**
29  * @brief Represents adapter manager.
30  *
31  * @since 6
32  */
33 const static int CLASSIC_ENABLE_STATE_BIT = 0x04;
34 class AdapterManager : public IAdapterManager {
35 public:
36     /**
37      * @brief Get adapter manager singleton instance pointer.
38      *
39      * @return Returns the singleton instance pointer.
40      * @since 6
41      */
42     static AdapterManager *GetInstance();
43 
44     // framework function
45     /**
46      * @brief Get classic adapter or ble adapter.
47      *
48      * @param transport Adapter transport.
49      * @return Returns Basic adapter pointer.
50      * @since 6
51      */
52     IAdapter *GetAdapter(const BTTransport transport) const override;
53 
54     /**
55      * @brief bluetooth adapter start.
56      *
57      * @return Returns <b>true</b> if the operation is successful;
58      *         returns <b>false</b> if the operation fails.
59      * @since 6
60      */
61     bool Start() override;
62 
63     /**
64      * @brief Stop bluetooth service.
65      *
66      * @since 6
67      */
68     void Stop() const override;
69 
70     /**
71      * @brief Reset bluetooth service.
72      *
73      * @since 6
74      */
75     void Reset() const override;
76 
77     /**
78      * @brief Factory reset bluetooth service.
79      *
80      * @return Returns <b>true</b> if the operation is successful;
81      *         returns <b>false</b> if the operation fails.
82      * @since 6
83      */
84     bool FactoryReset() const override;
85 
86     /**
87      * @brief Enable bluetooth service.
88      *
89      * @param transport Adapter transport.
90      * @return Returns <b>true</b> if the operation is accepted;
91      *         returns <b>false</b> if the operation is rejected.
92      * @since 6
93      */
94     bool Enable(const BTTransport transport) const override;
95 
96     /**
97      * @brief Disable 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 Disable(const BTTransport transport) const override;
105 
106     /**
107      * @brief Get adapter enable/disable state.
108      *
109      * @param transport Adapter transport.
110      * @return Returns adapter enable/disable state.
111      * @since 6
112      */
113     BTStateID GetState(const BTTransport transport) const override;
114 
115     /**
116      * @brief Get adapter connects state.
117      *
118      * @return Returns adapter connects state.
119      * @since 6
120      */
121     BTConnectState GetAdapterConnectState() const override;
122 
123     /**
124      * @brief Register adapter state observer.
125      *
126      * @param observer Class IAdapterStateObserver pointer to register observer.
127      * @return Returns <b>true</b> if the operation is successful;
128      *         returns <b>false</b> if the operation fails.
129      * @since 6
130      */
131     bool RegisterStateObserver(IAdapterStateObserver &observer) const override;
132 
133     /**
134      * @brief Deregister adapter state observer.
135      *
136      * @param observer Class IAdapterStateObserver pointer to deregister 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 DeregisterStateObserver(IAdapterStateObserver &observer) const override;
142 
143     /**
144      * @brief Register system state observer.
145      *
146      * @param observer Class ISystemStateObserver pointer to register 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 RegisterSystemStateObserver(ISystemStateObserver &observer) const override;
152 
153     /**
154      * @brief Deregister system state observer.
155      *
156      * @param observer Class ISystemStateObserver pointer to deregister 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 DeregisterSystemStateObserver(ISystemStateObserver &observer) const override;
162 
163     /**
164      * @brief Get max audio connected devices number.
165      *
166      * @return Returns max device number that audio can connect.
167      * @since 6
168      */
169     int GetMaxNumConnectedAudioDevices() const override;
170 
171     /**
172      * @brief Set phonebook permission for device.
173      *
174      * @param address Device address which is setted permission.
175      * @param permission permission grade.
176      * @return Returns <b>true</b> if the operation is successful;
177      *         returns <b>false</b> if the operation fails.
178      * @since 6
179      */
180     bool SetPhonebookPermission(const std::string &address, BTPermissionType permission) const override;
181 
182     /**
183      * @brief Get phonebook permission for device.
184      *
185      * @param address Device address which is setted permission.
186      * @return Returns permission grade.
187      * @since 6
188      */
189     BTPermissionType GetPhonebookPermission(const std::string &address) const override;
190 
191     /**
192      * @brief Set message permission for device.
193      *
194      * @param address Device address which is setted permission.
195      * @param permission permission grade.
196      * @return Returns <b>true</b> if the operation is successful;
197      *         returns <b>false</b> if the operation fails.
198      * @since 6
199      */
200     bool SetMessagePermission(const std::string &address, BTPermissionType permission) const override;
201 
202     /**
203      * @brief Get message permission for device.
204      *
205      * @param address Device address which is setted permission.
206      * @return Returns Permission grade.
207      * @since 6
208      */
209     BTPermissionType GetMessagePermission(const std::string &address) const override;
210 
211     /**
212      * @brief Get power mode.
213      *
214      * @param address Device address.
215      * @return Returns power mode grade.
216      *         BTPowerMode::MODE_INVALID = 0x00,
217      *         BTPowerMode::MODE_ACTIVE = 0x100,
218      *         BTPowerMode::MODE_SNIFF_LEVEL_LOW = 0x201,
219      *         BTPowerMode::MODE_SNIFF_LEVEL_MID = 0x202,
220      *         BTPowerMode::MODE_SNIFF_LEVEL_HIG = 0x203,
221      * @since 6
222      */
223     int GetPowerMode(const std::string &address) const override;
224 
225     /**
226      * @brief Stop bluetooth adapter and profile service.
227      *
228      * @return Returns <b>true</b> if the operation is successful;
229      *         returns <b>false</b> if the operation fails.
230      * @since 6
231      */
232     bool AdapterStop() const;
233 
234     /**
235      * @brief Clear all storage.
236      *
237      * @return Returns <b>true</b> if the operation is successful;
238      *         returns <b>false</b> if the operation fails.
239      * @since 6
240      */
241     bool ClearAllStorage() const;
242 
243     /**
244      * @brief System state change.
245      *
246      * @param state Change to a new state.
247      * @since 6
248      */
249     void OnSysStateChange(const std::string &state) const;
250 
251     /**
252      * @brief System state exit.
253      *
254      * @param state Exit the old state.
255      * @since 6
256      */
257     void OnSysStateExit(const std::string &state) const;
258 
259     /**
260      * @brief Adapter state change.
261      *
262      * @param transport Adapter transport.
263      * @param state Change to a new state.
264      * @since 6
265      */
266     void OnAdapterStateChange(const BTTransport transport, const BTStateID state) const;
267 
268     /**
269      * @brief Profile services enable complete notify.
270      *
271      * @param transport Adapter transport.
272      * @param ret Profile services enable operation result.
273      * @since 6
274      */
275     void OnProfileServicesEnableComplete(const BTTransport transport, const bool ret) const;
276 
277     /**
278      * @brief Profile services disable complete notify.
279      *
280      * @param transport Adapter transport.
281      * @param ret Profile services disable operation result.
282      * @since 6
283      */
284     void OnProfileServicesDisableComplete(const BTTransport transport, const bool ret) const;
285 
286     /**
287      * @brief Pair devices remove notify.
288      *
289      * @param transport Adapter transport.
290      * @param devices The vector of removed devices.
291      * @since 6
292      */
293     void OnPairDevicesRemoved(const BTTransport transport, const std::vector<RawAddress> &devices) const;
294 
295 private:
296     AdapterManager();
297     ~AdapterManager();
298     void CreateAdapters() const;
299     std::string GetSysState() const;
300     bool OutputSetting() const;
301     void RegisterHciResetCallback();
302     void DeregisterHciResetCallback() const;
303     void RemoveDeviceProfileConfig(const BTTransport transport, const std::vector<RawAddress> &devices) const;
304 
305     static void HciFailedReset(void *context);
306 
307     DISALLOW_COPY_AND_ASSIGN(AdapterManager);
308     DECLARE_IMPL();
309 };
310 };  // namespace bluetooth
311 
312 #endif  // ADAPTER_MANAGER_H