• 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 #include "bluetooth_ble_advertiser.h"
16 
17 #include "bluetooth_ble_advertise_callback_stub.h"
18 #include "bluetooth_def.h"
19 #include "bluetooth_errorcode.h"
20 #include "bluetooth_host.h"
21 #include "bluetooth_log.h"
22 #include "bluetooth_observer_map.h"
23 #include "bluetooth_utils.h"
24 #include "i_bluetooth_ble_advertiser.h"
25 #include "iservice_registry.h"
26 #include "system_ability_definition.h"
27 
28 #include <memory>
29 
30 namespace OHOS {
31 namespace Bluetooth {
32 using namespace OHOS::bluetooth;
33 std::mutex g_bleProxyMutex;
34 struct BleAdvertiser::impl {
35     impl();
36     ~impl();
37     void ConvertBleAdvertiserData(const BleAdvertiserData &data, BluetoothBleAdvertiserData &outData);
38     uint32_t GetAdvertiserTotalBytes(const BluetoothBleAdvertiserData &data, bool isFlagsIncluded);
39     int32_t CheckAdvertiserData(const BluetoothBleAdvertiserSettings &setting,
40         const BluetoothBleAdvertiserData &advData, const BluetoothBleAdvertiserData &scanResponse);
41     bool InitBleAdvertiserProxy(void);
42 
43     class BluetoothBleAdvertiserCallbackImp : public BluetoothBleAdvertiseCallbackStub {
44     public:
BluetoothBleAdvertiserCallbackImp(BleAdvertiser::impl & bleAdvertiser)45         explicit BluetoothBleAdvertiserCallbackImp(BleAdvertiser::impl &bleAdvertiser)
46             : bleAdvertiser_(bleAdvertiser){};
~BluetoothBleAdvertiserCallbackImp()47         ~BluetoothBleAdvertiserCallbackImp()
48         {}
49 
OnStartResultEvent(int32_t result,int32_t advHandle,int32_t opcode)50         void OnStartResultEvent(int32_t result, int32_t advHandle, int32_t opcode) override
51         {
52             HILOGD("result: %{public}d, advHandle: %{public}d, opcode: %{public}d", result, advHandle, opcode);
53             BleAdvertiseCallback *observer = nullptr;
54             if (opcode == bluetooth::BLE_ADV_START_FAILED_OP_CODE) {
55                 observer = bleAdvertiser_.callbacks_.PopAdvertiserObserver(advHandle);
56             } else {
57                 observer = bleAdvertiser_.callbacks_.GetAdvertiserObserver(advHandle);
58             }
59 
60             if (observer != nullptr) {
61                 observer->OnStartResultEvent(result);
62             }
63         }
64 
OnAutoStopAdvEvent(int32_t advHandle)65         void OnAutoStopAdvEvent(int32_t advHandle) override
66         {
67             HILOGI("advHandle: %{public}d", advHandle);
68             BleAdvertiseCallback *observer = bleAdvertiser_.callbacks_.GetAdvertiserObserver(advHandle);
69             if (observer != nullptr) {
70                 bleAdvertiser_.callbacks_.Deregister(observer);
71             }
72         }
73 
OnSetAdvDataEvent(int32_t result,int32_t advHandle)74         void OnSetAdvDataEvent(int32_t result, int32_t advHandle) override
75         {
76             HILOGI("result: %{public}d, advHandle: %{public}d", result, advHandle);
77             BleAdvertiseCallback *observer = bleAdvertiser_.callbacks_.GetAdvertiserObserver(advHandle);
78             if (observer) {
79                 observer->OnSetAdvDataEvent(result);
80             }
81         }
82 
83     private:
84         BleAdvertiser::impl &bleAdvertiser_;
85         BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(BluetoothBleAdvertiserCallbackImp);
86     };
87     sptr<BluetoothBleAdvertiserCallbackImp> callbackImp_ = nullptr;
88 
89     BluetoothObserverMap<BleAdvertiseCallback> callbacks_;
90     sptr<IBluetoothBleAdvertiser> proxy_ = nullptr;
91 
92     class BleAdvertiserDeathRecipient;
93     sptr<BleAdvertiserDeathRecipient> deathRecipient_ = nullptr;
94 };
95 
96 class BleAdvertiser::impl::BleAdvertiserDeathRecipient final : public IRemoteObject::DeathRecipient {
97 public:
BleAdvertiserDeathRecipient(BleAdvertiser::impl & impl)98     explicit BleAdvertiserDeathRecipient(BleAdvertiser::impl &impl) : owner_(impl) {};
99     ~BleAdvertiserDeathRecipient() final = default;
100     BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(BleAdvertiserDeathRecipient);
101 
OnRemoteDied(const wptr<IRemoteObject> & remote)102     void OnRemoteDied(const wptr<IRemoteObject> &remote) final
103     {
104         HILOGI("enter");
105         std::lock_guard<std::mutex> lock(g_bleProxyMutex);
106         if (!owner_.proxy_) {
107             return;
108         }
109         owner_.proxy_ = nullptr;
110         owner_.callbacks_.Clear();
111     }
112 
113 private:
114     BleAdvertiser::impl &owner_;
115 };
116 
InitBleAdvertiserProxy(void)117 bool BleAdvertiser::impl::InitBleAdvertiserProxy(void)
118 {
119     std::lock_guard<std::mutex> lock(g_bleProxyMutex);
120     if (proxy_) {
121         return true;
122     }
123     HILOGI("enter");
124     proxy_ = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER);
125     if (!proxy_) {
126         HILOGE("get bleAdvertiser proxy_ failed");
127         return false;
128     }
129     callbackImp_ = new BluetoothBleAdvertiserCallbackImp(*this);
130     if (callbackImp_ != nullptr) {
131         proxy_->RegisterBleAdvertiserCallback(callbackImp_);
132     }
133 
134     deathRecipient_ = new BleAdvertiserDeathRecipient(*this);
135     if (deathRecipient_ != nullptr) {
136         proxy_->AsObject()->AddDeathRecipient(deathRecipient_);
137     }
138     return true;
139 }
140 
impl()141 BleAdvertiser::impl::impl()
142 {}
143 
~impl()144 BleAdvertiser::impl::~impl()
145 {
146     if (proxy_ != nullptr) {
147         proxy_->DeregisterBleAdvertiserCallback(callbackImp_);
148         proxy_->AsObject()->RemoveDeathRecipient(deathRecipient_);
149     }
150 }
151 
BleAdvertiser()152 BleAdvertiser::BleAdvertiser() : pimpl(nullptr)
153 {
154     if (pimpl == nullptr) {
155         pimpl = std::make_unique<impl>();
156         if (!pimpl) {
157             HILOGE("failed, no pimpl");
158         }
159     }
160 
161     HILOGI("successful");
162 }
163 
~BleAdvertiser()164 BleAdvertiser::~BleAdvertiser()
165 {}
166 
ConvertBleAdvertiserData(const BleAdvertiserData & data,BluetoothBleAdvertiserData & outData)167 void BleAdvertiser::impl::ConvertBleAdvertiserData(const BleAdvertiserData &data, BluetoothBleAdvertiserData &outData)
168 {
169     std::map<uint16_t, std::string> manufacturerData = data.GetManufacturerData();
170     for (auto iter = manufacturerData.begin(); iter != manufacturerData.end(); iter++) {
171         outData.AddManufacturerData(iter->first, iter->second);
172     }
173     std::map<ParcelUuid, std::string> serviceData = data.GetServiceData();
174     for (auto it = serviceData.begin(); it != serviceData.end(); it++) {
175         outData.AddServiceData(Uuid::ConvertFromString(it->first.ToString()), it->second);
176     }
177     std::vector<ParcelUuid> serviceUuids = data.GetServiceUuids();
178     for (auto it = serviceUuids.begin(); it != serviceUuids.end(); it++) {
179         outData.AddServiceUuid(Uuid::ConvertFromString(it->ToString()));
180     }
181     outData.SetIncludeDeviceName(data.GetIncludeDeviceName());
182 }
183 
GetAdvertiserTotalBytes(const BluetoothBleAdvertiserData & data,bool isFlagsIncluded)184 uint32_t BleAdvertiser::impl::GetAdvertiserTotalBytes(const BluetoothBleAdvertiserData &data, bool isFlagsIncluded)
185 {
186     // If the flag field is contained, the protocol stack adds the flag field, which consists of three bytes.
187     uint32_t size = (isFlagsIncluded) ? BLE_ADV_FLAGS_FIELD_LENGTH : 0;
188     std::map<uint16_t, std::string> manufacturerData = data.GetManufacturerData();
189     for (auto iter = manufacturerData.begin(); iter != manufacturerData.end(); ++iter) {
190         size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + BLE_ADV_MANUFACTURER_ID_LENGTH + iter->second.length();
191     }
192 
193     std::map<Uuid, std::string> serviceData = data.GetServiceData();
194     for (auto iter = serviceData.begin(); iter != serviceData.end(); ++iter) {
195         size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(iter->first.GetUuidType())
196         + iter->second.length();
197     }
198 
199     std::vector<Uuid> serviceUuids = data.GetServiceUuids();
200     for (auto iter = serviceUuids.begin(); iter != serviceUuids.end(); ++iter) {
201         size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(iter->GetUuidType());
202     }
203 
204     if (data.GetIncludeDeviceName()) {
205         uint32_t deviceNameLen = BluetoothHost::GetDefaultHost().GetLocalName().length();
206         deviceNameLen = (deviceNameLen > DEVICE_NAME_MAX_LEN) ?  DEVICE_NAME_MAX_LEN : deviceNameLen;
207         size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + deviceNameLen;
208     }
209     return size;
210 }
211 
CheckAdvertiserData(const BluetoothBleAdvertiserSettings & setting,const BluetoothBleAdvertiserData & advData,const BluetoothBleAdvertiserData & scanResponse)212 int32_t BleAdvertiser::impl::CheckAdvertiserData(const BluetoothBleAdvertiserSettings &setting,
213     const BluetoothBleAdvertiserData &advData, const BluetoothBleAdvertiserData &scanResponse)
214 {
215     uint32_t maxSize = BLE_ADV_MAX_LEGACY_ADVERTISING_DATA_BYTES;
216     if (!setting.IsLegacyMode()) {
217         maxSize = static_cast<uint32_t>(BluetoothHost::GetDefaultHost().GetBleMaxAdvertisingDataLength());
218     }
219     // If is Connect, flag field is contained in AdvertiserData.
220     uint32_t size = GetAdvertiserTotalBytes(advData, setting.IsConnectable());
221     if (size > maxSize) {
222         HILOGE("bleAdvertiserData size = %{public}d, maxSize = %{public}d", size, maxSize);
223         return BT_ERR_INTERNAL_ERROR;
224     }
225     size = GetAdvertiserTotalBytes(scanResponse, false);
226     if (size > maxSize) {
227         HILOGE("bleScanResponse size = %{public}d, maxSize = %{public}d,", size, maxSize);
228         return BT_ERR_INTERNAL_ERROR;
229     }
230     return BT_NO_ERROR;
231 }
232 
StartAdvertising(const BleAdvertiserSettings & settings,const BleAdvertiserData & advData,const BleAdvertiserData & scanResponse,BleAdvertiseCallback & callback)233 int BleAdvertiser::StartAdvertising(const BleAdvertiserSettings &settings, const BleAdvertiserData &advData,
234     const BleAdvertiserData &scanResponse, BleAdvertiseCallback &callback)
235 {
236     if (!IS_BLE_ENABLED()) {
237         HILOGE("bluetooth is off.");
238         return BT_ERR_INVALID_STATE;
239     }
240 
241     if (pimpl == nullptr || !pimpl->InitBleAdvertiserProxy()) {
242         HILOGE("pimpl or bleAdvertiser proxy is nullptr");
243         return BT_ERR_INTERNAL_ERROR;
244     }
245 
246     BluetoothBleAdvertiserSettings setting;
247     setting.SetConnectable(settings.IsConnectable());
248     setting.SetInterval(settings.GetInterval());
249     setting.SetLegacyMode(settings.IsLegacyMode());
250     setting.SetTxPower(settings.GetTxPower());
251 
252     BluetoothBleAdvertiserData bleAdvertiserData;
253     BluetoothBleAdvertiserData bleScanResponse;
254     bleAdvertiserData.SetAdvFlag(advData.GetAdvFlag());
255     pimpl->ConvertBleAdvertiserData(advData, bleAdvertiserData);
256     pimpl->ConvertBleAdvertiserData(scanResponse, bleScanResponse);
257 
258     int ret = pimpl->CheckAdvertiserData(setting, bleAdvertiserData, bleScanResponse);
259     if (ret != BT_NO_ERROR) {
260         return ret;
261     }
262 
263     int32_t advHandle = BLE_INVALID_ADVERTISING_HANDLE;
264     if (pimpl->callbacks_.IsExistAdvertiserCallback(&callback, advHandle)) {
265         ret = pimpl->proxy_->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, false);
266     } else {
267         ret = pimpl->proxy_->GetAdvertiserHandle(advHandle);
268         if (ret != BT_NO_ERROR || advHandle == BLE_INVALID_ADVERTISING_HANDLE) {
269             HILOGE("Invalid advertising handle");
270             callback.OnStartResultEvent(BLE_INVALID_ADVERTISING_HANDLE);
271             return ret;
272         }
273         pimpl->callbacks_.Register(advHandle, &callback);
274         ret = pimpl->proxy_->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, false);
275     }
276     return ret;
277 }
278 
StartAdvertising(const BleAdvertiserSettings & settings,const std::vector<uint8_t> & advData,const std::vector<uint8_t> & scanResponse,BleAdvertiseCallback & callback)279 int BleAdvertiser::StartAdvertising(const BleAdvertiserSettings &settings, const std::vector<uint8_t> &advData,
280     const std::vector<uint8_t> &scanResponse, BleAdvertiseCallback &callback)
281 {
282     if (!IS_BLE_ENABLED()) {
283         HILOGE("bluetooth is off.");
284         return BT_ERR_INVALID_STATE;
285     }
286 
287     if (pimpl == nullptr || !pimpl->InitBleAdvertiserProxy()) {
288         HILOGE("pimpl or bleAdvertiser proxy is nullptr");
289         return BT_ERR_INTERNAL_ERROR;
290     }
291 
292     BluetoothBleAdvertiserSettings setting;
293     setting.SetConnectable(settings.IsConnectable());
294     setting.SetInterval(settings.GetInterval());
295     setting.SetLegacyMode(settings.IsLegacyMode());
296     setting.SetTxPower(settings.GetTxPower());
297 
298     BluetoothBleAdvertiserData bleAdvertiserData;
299     bleAdvertiserData.SetPayload(std::string(advData.begin(), advData.end()));
300     bleAdvertiserData.SetAdvFlag(0);
301     BluetoothBleAdvertiserData bleScanResponse;
302     bleScanResponse.SetPayload(std::string(scanResponse.begin(), scanResponse.end()));
303 
304     int32_t advHandle = BLE_INVALID_ADVERTISING_HANDLE;
305     int ret = BT_ERR_INTERNAL_ERROR;
306     if (pimpl->callbacks_.IsExistAdvertiserCallback(&callback, advHandle)) {
307         ret = pimpl->proxy_->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, true);
308     } else {
309         ret = pimpl->proxy_->GetAdvertiserHandle(advHandle);
310         if (ret != BT_NO_ERROR || advHandle == BLE_INVALID_ADVERTISING_HANDLE) {
311             HILOGE("Invalid advertising handle");
312             callback.OnStartResultEvent(BLE_INVALID_ADVERTISING_HANDLE);
313             return ret;
314         }
315         pimpl->callbacks_.Register(advHandle, &callback);
316         ret = pimpl->proxy_->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, true);
317     }
318     return ret;
319 }
320 
SetAdvertisingData(const std::vector<uint8_t> & advData,const std::vector<uint8_t> & scanResponse,BleAdvertiseCallback & callback)321 void BleAdvertiser::SetAdvertisingData(const std::vector<uint8_t> &advData, const std::vector<uint8_t> &scanResponse,
322     BleAdvertiseCallback &callback)
323 {
324     if (!IS_BLE_ENABLED()) {
325         HILOGE("bluetooth is off.");
326         return;
327     }
328 
329     if (pimpl == nullptr || !pimpl->InitBleAdvertiserProxy()) {
330         HILOGE("pimpl or bleAdvertiser proxy is nullptr");
331         return;
332     }
333 
334     int advHandle = BLE_INVALID_ADVERTISING_HANDLE;
335     if (!pimpl->callbacks_.IsExistAdvertiserCallback(&callback, advHandle)) {
336         HILOGE("Advertising is not started");
337         return;
338     }
339 
340     BluetoothBleAdvertiserData bleAdvertiserData;
341     bleAdvertiserData.SetPayload(std::string(advData.begin(), advData.end()));
342     BluetoothBleAdvertiserData bleScanResponse;
343     bleScanResponse.SetPayload(std::string(scanResponse.begin(), scanResponse.end()));
344     pimpl->proxy_->SetAdvertisingData(bleAdvertiserData, bleScanResponse, advHandle);
345 }
346 
StopAdvertising(BleAdvertiseCallback & callback)347 int BleAdvertiser::StopAdvertising(BleAdvertiseCallback &callback)
348 {
349     if (!IS_BLE_ENABLED()) {
350         HILOGE("bluetooth is off.");
351         return BT_ERR_INVALID_STATE;
352     }
353 
354     if (pimpl == nullptr || !pimpl->InitBleAdvertiserProxy()) {
355         HILOGE("pimpl or bleAdvertiser proxy is nullptr");
356         return BT_ERR_INTERNAL_ERROR;
357     }
358 
359     HILOGI("enter");
360     uint8_t advHandle = pimpl->callbacks_.GetAdvertiserHandle(&callback);
361     if (advHandle == BLE_INVALID_ADVERTISING_HANDLE) {
362         HILOGE("Invalid advertising handle");
363         return BT_ERR_INTERNAL_ERROR;
364     }
365 
366     BleAdvertiseCallback *observer = pimpl->callbacks_.GetAdvertiserObserver(advHandle);
367     if (observer != nullptr) {
368         pimpl->callbacks_.Deregister(observer);
369     }
370 
371     int ret = pimpl->proxy_->StopAdvertising(advHandle);
372     return ret;
373 }
374 
Close(BleAdvertiseCallback & callback)375 void BleAdvertiser::Close(BleAdvertiseCallback &callback)
376 {
377     if (!IS_BLE_ENABLED()) {
378         HILOGE("BLE is not enabled");
379         return;
380     }
381 
382     if (pimpl == nullptr || !pimpl->InitBleAdvertiserProxy()) {
383         HILOGE("pimpl or bleAdvertiser proxy is nullptr");
384         return;
385     }
386 
387     HILOGI("enter");
388     if (pimpl->proxy_ != nullptr) {
389         uint8_t advHandle = pimpl->callbacks_.GetAdvertiserHandle(&callback);
390         if (advHandle != BLE_INVALID_ADVERTISING_HANDLE) {
391             pimpl->proxy_->Close(advHandle);
392         }
393 
394         BleAdvertiseCallback *observer = pimpl->callbacks_.GetAdvertiserObserver(advHandle);
395         if (observer != nullptr) {
396             pimpl->callbacks_.Deregister(observer);
397         }
398     }
399 }
400 
GetAdvHandle(BleAdvertiseCallback & callback)401 uint8_t BleAdvertiser::GetAdvHandle(BleAdvertiseCallback &callback)
402 {
403     if (!BluetoothHost::GetDefaultHost().IsBleEnabled()) {
404         HILOGE("BLE is not enabled");
405         return BLE_INVALID_ADVERTISING_HANDLE;
406     }
407     return pimpl->callbacks_.GetAdvertiserHandle(&callback);
408 }
409 
BleAdvertiserData()410 BleAdvertiserData::BleAdvertiserData()
411 {}
412 
~BleAdvertiserData()413 BleAdvertiserData::~BleAdvertiserData()
414 {}
415 
AddServiceData(const ParcelUuid & uuid,const std::string & serviceData)416 void BleAdvertiserData::AddServiceData(const ParcelUuid &uuid, const std::string &serviceData)
417 {
418     if (serviceData.empty()) {
419         HILOGE("serviceData is empty");
420         return;
421     }
422 
423     serviceData_.insert(std::make_pair(uuid, serviceData));
424 }
425 
AddManufacturerData(uint16_t manufacturerId,const std::string & data)426 void BleAdvertiserData::AddManufacturerData(uint16_t manufacturerId, const std::string &data)
427 {
428     if (data.empty()) {
429         HILOGE("serviceData is empty");
430         return;
431     }
432 
433     manufacturerSpecificData_.insert(std::make_pair(manufacturerId, data));
434 }
435 
GetManufacturerData() const436 std::map<uint16_t, std::string> BleAdvertiserData::GetManufacturerData() const
437 {
438     return manufacturerSpecificData_;
439 }
440 
AddServiceUuid(const ParcelUuid & serviceUuid)441 void BleAdvertiserData::AddServiceUuid(const ParcelUuid &serviceUuid)
442 {
443     serviceUuids_.push_back(serviceUuid);
444 }
445 
GetServiceUuids() const446 std::vector<ParcelUuid> BleAdvertiserData::GetServiceUuids() const
447 {
448     return serviceUuids_;
449 }
450 
SetAdvFlag(uint8_t flag)451 void BleAdvertiserData::SetAdvFlag(uint8_t flag)
452 {
453     advFlag_ = flag;
454 }
455 
GetAdvFlag() const456 uint8_t BleAdvertiserData::GetAdvFlag() const
457 {
458     return advFlag_;
459 }
460 
GetServiceData() const461 std::map<ParcelUuid, std::string> BleAdvertiserData::GetServiceData() const
462 {
463     return serviceData_;
464 }
465 
GetIncludeDeviceName() const466 bool BleAdvertiserData::GetIncludeDeviceName() const
467 {
468     return includeDeviceName_;
469 }
470 
SetIncludeDeviceName(bool flag)471 void BleAdvertiserData::SetIncludeDeviceName(bool flag)
472 {
473     includeDeviceName_ = flag;
474 }
475 
BleAdvertiserSettings()476 BleAdvertiserSettings::BleAdvertiserSettings()
477 {}
478 
~BleAdvertiserSettings()479 BleAdvertiserSettings::~BleAdvertiserSettings()
480 {}
481 
SetConnectable(bool connectable)482 void BleAdvertiserSettings::SetConnectable(bool connectable)
483 {
484     connectable_ = connectable;
485 }
486 
IsConnectable() const487 bool BleAdvertiserSettings::IsConnectable() const
488 {
489     return connectable_;
490 }
491 
SetLegacyMode(bool legacyMode)492 void BleAdvertiserSettings::SetLegacyMode(bool legacyMode)
493 {
494     legacyMode_ = legacyMode;
495 }
496 
IsLegacyMode() const497 bool BleAdvertiserSettings::IsLegacyMode() const
498 {
499     return legacyMode_;
500 }
501 
SetInterval(uint16_t interval)502 void BleAdvertiserSettings::SetInterval(uint16_t interval)
503 {
504     interval_ = interval;
505 }
506 
GetInterval() const507 uint16_t BleAdvertiserSettings::GetInterval() const
508 {
509     return interval_;
510 }
511 
SetTxPower(uint8_t txPower)512 void BleAdvertiserSettings::SetTxPower(uint8_t txPower)
513 {
514     txPower_ = txPower;
515 }
516 
GetTxPower() const517 uint8_t BleAdvertiserSettings::GetTxPower() const
518 {
519     return txPower_;
520 }
521 
GetPrimaryPhy() const522 int BleAdvertiserSettings::GetPrimaryPhy() const
523 {
524     return primaryPhy_;
525 }
526 
SetPrimaryPhy(int primaryPhy)527 void BleAdvertiserSettings::SetPrimaryPhy(int primaryPhy)
528 {
529     primaryPhy_ = primaryPhy;
530 }
531 
GetSecondaryPhy() const532 int BleAdvertiserSettings::GetSecondaryPhy() const
533 {
534     return secondaryPhy_;
535 }
536 
SetSecondaryPhy(int secondaryPhy)537 void BleAdvertiserSettings::SetSecondaryPhy(int secondaryPhy)
538 {
539     secondaryPhy_ = secondaryPhy;
540 }
541 }  // namespace Bluetooth
542 }  // namespace OHOS
543