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