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