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 /** 17 * @addtogroup Bluetooth 18 * @{ 19 * 20 * @brief Defines adapter classic properties. 21 * 22 */ 23 24 /** 25 * @file classic_adapter_properties.h 26 * 27 * @brief Adapter classic properties. 28 * 29 */ 30 31 #ifndef CLASSIC_ADAPTER_PROPERTIES_H 32 #define CLASSIC_ADAPTER_PROPERTIES_H 33 34 #include <mutex> 35 #include <string> 36 #include <vector> 37 38 #include "base_observer_list.h" 39 #include "bt_uuid.h" 40 #include "btstack.h" 41 #include "classic_bluetooth_data.h" 42 #include "classic_config.h" 43 #include "classic_remote_device.h" 44 #include "dispatcher.h" 45 #include "interface_adapter_classic.h" 46 #include "log.h" 47 #include "log_util.h" 48 #include "raw_address.h" 49 #include "timer.h" 50 51 namespace OHOS { 52 namespace bluetooth { 53 /** 54 * @brief AdapterProperties to save and get classic properties. 55 * 56 */ 57 class ClassicAdapterProperties { 58 public: 59 /** 60 * @brief Get classic adapter properties singleton instance pointer. 61 * 62 * @return Returns the singleton instance pointer. 63 */ 64 static ClassicAdapterProperties &GetInstance(); 65 66 /** 67 * @brief Load config info. 68 * 69 * @return Returns <b>true</b> if the operation is successful; 70 * returns <b>false</b> if the operation fails. 71 */ 72 bool LoadConfigInfo(); 73 74 /** 75 * @brief Initialize scan, bondable, security mode. 76 * 77 * @return Returns <b>true</b> if the operation is successful; 78 * returns <b>false</b> if the operation fails. 79 */ 80 bool InitMode(); 81 82 /** 83 * @brief Set local class and name. 84 * 85 * @return Returns <b>true</b> if the operation is successful; 86 * returns <b>false</b> if the operation fails. 87 */ 88 bool ConfigProperties(); 89 90 /** 91 * @brief Set bondable mode. 92 * 93 * @param mode Bondable mode. 94 * @return Returns <b>true</b> if the operation is successful; 95 * returns <b>false</b> if the operation fails. 96 */ 97 bool SetBondableMode(int mode); 98 99 /** 100 * @brief Set discoverable timeout. 101 * 102 * @param time Discoverable timeout. 103 * @return Returns <b>true</b> if the operation is successful; 104 * returns <b>false</b> if the operation fails. 105 */ 106 bool SetDiscoverableTimeout(int time); 107 108 /** 109 * @brief Set Io capability. 110 * 111 * @param ioCapability Device Io capability. 112 * @return Returns <b>true</b> if the operation is successful; 113 * returns <b>false</b> if the operation fails. 114 */ 115 bool SetIoCapability(int ioCapability); 116 117 /** 118 * @brief Set local address. 119 * 120 * @param addr Device address. 121 * @return Returns <b>true</b> if the operation is successful; 122 * returns <b>false</b> if the operation fails. 123 */ 124 bool SetLocalAddress(const std::string &addr); 125 126 /** 127 * @brief Set local name. 128 * 129 * @param name Device name. 130 * @return Returns <b>true</b> if the operation is successful; 131 * returns <b>false</b> if the operation fails. 132 */ 133 bool SetLocalName(const std::string &name); 134 135 /** 136 * @brief Set local device class. 137 * 138 * @param deviceClass Device class. 139 * @return Returns <b>true</b> if the operation is successful; 140 * returns <b>false</b> if the operation fails. 141 */ 142 bool SetLocalDeviceClass(int deviceClass); 143 144 /** 145 * @brief Set security mode. 146 * 147 * @return Returns <b>true</b> if the operation is successful; 148 * returns <b>false</b> if the operation fails. 149 */ 150 bool SetSecurityMode(); 151 152 /** 153 * @brief Get passkey. 154 * 155 * @return Returns passkey. 156 */ 157 std::string GetPasskey() const; 158 159 /** 160 * @brief Get bondable mode. 161 * 162 * @return Returns bondable mode. 163 */ 164 int GetBondableMode() const; 165 166 /** 167 * @brief Get discoverable timeout. 168 * 169 * @return Returns discoverable timeout. 170 */ 171 int GetDiscoverableTimeout() const; 172 173 /** 174 * @brief Get device Io capability. 175 * 176 * @return Returns device Io capability. 177 */ 178 int GetIoCapability() const; 179 180 /** 181 * @brief Get local address. 182 * 183 * @return Returns local address. 184 */ 185 std::string GetLocalAddress() const; 186 187 /** 188 * @brief Get local name. 189 * 190 * @return Returns local name. 191 */ 192 std::string GetLocalName() const; 193 194 /** 195 * @brief Get local device class. 196 * 197 * @return Returns local device class. 198 */ 199 int GetLocalDeviceClass() const; 200 201 /** 202 * @brief Get paired address list. 203 * 204 * @return Returns address list. 205 */ 206 std::vector<std::string> GetPairedAddrList() const; 207 208 /** 209 * @brief Set local name scallback. 210 * 211 * @param result Set result. 212 */ 213 void SetLocalNameCallback(int result); 214 215 /** 216 * @brief Register classic adapter observer. 217 * 218 * @param observer Class ClassicAdapterObserver pointer to register observer. 219 */ 220 void RegisterClassicAdapterObserver(IAdapterClassicObserver &observer); 221 222 /** 223 * @brief Deregister classic adapter observer. 224 * 225 */ 226 void DeregisterClassicAdapterObserver(IAdapterClassicObserver &observer); 227 228 /** 229 * @brief Get paired device. 230 * 231 * @param addr Device address. 232 * @return Returns paired device. 233 */ 234 std::shared_ptr<ClassicRemoteDevice> GetPairedDevice(std::string addr); 235 236 /** 237 * @brief Save paired device info. 238 * 239 * @param remote Remote device. 240 */ 241 void SavePairedDeviceInfo(std::shared_ptr<ClassicRemoteDevice> remote); 242 243 /** 244 * @brief Remove paired device info. 245 * 246 * @param addr Remote device address. 247 */ 248 void RemovePairedDeviceInfo(std::string addr) const; 249 250 /** 251 * @brief Save config file. 252 * 253 */ 254 void SaveConfigFile() const; 255 256 /** 257 * @brief Save local support uuids. 258 * 259 * @param uuids Device uuids. 260 * @return Returns <b>true</b> if the operation is successful; 261 * returns <b>false</b> if the operation fails. 262 */ 263 bool SaveSupportUuids(const std::vector<Uuid> &uuids); 264 265 private: 266 /** 267 * @brief A constructor used to create a <b>ClassicAdapterProperties</b> instance. 268 * 269 */ 270 ClassicAdapterProperties(); 271 272 /** 273 * @brief A destructor used to delete the <b>ClassicAdapterProperties</b> instance. 274 * 275 */ 276 ~ClassicAdapterProperties(); 277 278 /** 279 * @brief Load host info from config file. 280 * 281 */ 282 void LoadHostInfo(); 283 284 /** 285 * @brief Read mac address from controller. 286 * 287 * @return Returns <b>true</b> if the operation is successful; 288 * returns <b>false</b> if the operation fails. 289 */ 290 bool ReadAddrFromController(); 291 292 /** 293 * @brief Update config. 294 * 295 * @param type Properties type. 296 * @return Returns <b>true</b> if the operation is successful; 297 * returns <b>false</b> if the operation fails. 298 */ 299 bool UpdateConfig(int type); 300 301 /** 302 * @brief Set eir data. 303 * 304 * @return Returns <b>true</b> if the operation is successful; 305 * returns <b>false</b> if the operation fails. 306 */ 307 bool SetEirData(); 308 309 void SendDeviceNameChanged(const std::string &deviceName); 310 void SendDeviceAddrChanged(const std::string &address); 311 312 ClassicConfig &config_; 313 314 int cod_ {DEFAULT_CLASS_OF_DEVICE}; 315 std::string passkey_ {DEFAULT_PASSKEY}; 316 int bondableMode_ {INVALID_VALUE}; 317 int securityMode_ {SEC_MODE_2}; 318 int ioCapability_ {GAP_IO_DISPLAYYESNO}; 319 int discoverableTimeout_ {DEFAULT_SCANMODE_DURATION_MILLIS}; 320 std::string macAddr_ {INVALID_MAC_ADDRESS}; 321 std::string deviceName_ {DEFAULT_DEVICE_NAME}; 322 std::vector<Uuid> uuids_ {}; 323 BaseObserverList<IAdapterClassicObserver> adapterObservers_ {}; 324 std::recursive_mutex propertiesMutex_ {}; 325 }; 326 } // namespace bluetooth 327 } // namespace OHOS 328 #endif // CLASSIC_ADAPTER_PROPERTIES_H