195489c19Sopenharmony_ci/* 295489c19Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 395489c19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 495489c19Sopenharmony_ci * you may not use this file except in compliance with the License. 595489c19Sopenharmony_ci * You may obtain a copy of the License at 695489c19Sopenharmony_ci * 795489c19Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 895489c19Sopenharmony_ci * 995489c19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1095489c19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1195489c19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1295489c19Sopenharmony_ci * See the License for the specific language governing permissions and 1395489c19Sopenharmony_ci * limitations under the License. 1495489c19Sopenharmony_ci */ 1595489c19Sopenharmony_ci#include "bluetooth_ble_advertiser.h" 1695489c19Sopenharmony_ci 1795489c19Sopenharmony_ci#include "bluetooth_ble_advertise_callback_stub.h" 1895489c19Sopenharmony_ci#include "bluetooth_def.h" 1995489c19Sopenharmony_ci#include "bluetooth_host.h" 2095489c19Sopenharmony_ci#include "bluetooth_log.h" 2195489c19Sopenharmony_ci#include "bluetooth_observer_map.h" 2295489c19Sopenharmony_ci#include "bluetooth_utils.h" 2395489c19Sopenharmony_ci#include "i_bluetooth_ble_advertiser.h" 2495489c19Sopenharmony_ci#include "iservice_registry.h" 2595489c19Sopenharmony_ci#include "system_ability_definition.h" 2695489c19Sopenharmony_ci#include "securec.h" 2795489c19Sopenharmony_ci 2895489c19Sopenharmony_ci#include <memory> 2995489c19Sopenharmony_ci#include "bluetooth_profile_manager.h" 3095489c19Sopenharmony_ci 3195489c19Sopenharmony_cinamespace OHOS { 3295489c19Sopenharmony_cinamespace Bluetooth { 3395489c19Sopenharmony_ciusing namespace OHOS::bluetooth; 3495489c19Sopenharmony_cistruct BleAdvertiser::impl { 3595489c19Sopenharmony_ci impl(); 3695489c19Sopenharmony_ci ~impl(); 3795489c19Sopenharmony_ci void Init(std::weak_ptr<BleAdvertiser> advertiser); 3895489c19Sopenharmony_ci void ConvertBleAdvertiserData(const BleAdvertiserData &data, BluetoothBleAdvertiserData &outData); 3995489c19Sopenharmony_ci uint32_t GetAdvertiserTotalBytes(const BluetoothBleAdvertiserData &data, bool isFlagsIncluded); 4095489c19Sopenharmony_ci int32_t CheckAdvertiserSettings(const BleAdvertiserSettings &settings); 4195489c19Sopenharmony_ci int32_t CheckAdvertiserData(const BluetoothBleAdvertiserSettings &setting, 4295489c19Sopenharmony_ci const BluetoothBleAdvertiserData &advData, const BluetoothBleAdvertiserData &scanResponse); 4395489c19Sopenharmony_ci 4495489c19Sopenharmony_ci class BluetoothBleAdvertiserCallbackImp : public BluetoothBleAdvertiseCallbackStub { 4595489c19Sopenharmony_ci public: 4695489c19Sopenharmony_ci explicit BluetoothBleAdvertiserCallbackImp(std::weak_ptr<BleAdvertiser> advertiser) 4795489c19Sopenharmony_ci : advertiser_(advertiser){}; 4895489c19Sopenharmony_ci ~BluetoothBleAdvertiserCallbackImp() 4995489c19Sopenharmony_ci {} 5095489c19Sopenharmony_ci 5195489c19Sopenharmony_ci __attribute__((no_sanitize("cfi"))) 5295489c19Sopenharmony_ci void OnStartResultEvent(int32_t result, int32_t advHandle, int32_t opcode) override 5395489c19Sopenharmony_ci { 5495489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 5595489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 5695489c19Sopenharmony_ci 5795489c19Sopenharmony_ci HILOGD("result: %{public}d, advHandle: %{public}d, opcode: %{public}d", result, advHandle, opcode); 5895489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> observer = nullptr; 5995489c19Sopenharmony_ci if (opcode == bluetooth::BLE_ADV_START_FAILED_OP_CODE) { 6095489c19Sopenharmony_ci observer = advertiserSptr->pimpl->callbacks_.PopAdvertiserObserver(advHandle); 6195489c19Sopenharmony_ci } else { 6295489c19Sopenharmony_ci observer = advertiserSptr->pimpl->callbacks_.GetAdvertiserObserver(advHandle); 6395489c19Sopenharmony_ci } 6495489c19Sopenharmony_ci 6595489c19Sopenharmony_ci if (observer != nullptr) { 6695489c19Sopenharmony_ci observer->OnStartResultEvent(result, advHandle); 6795489c19Sopenharmony_ci } 6895489c19Sopenharmony_ci } 6995489c19Sopenharmony_ci 7095489c19Sopenharmony_ci void OnEnableResultEvent(int32_t result, int32_t advHandle) override 7195489c19Sopenharmony_ci { 7295489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 7395489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 7495489c19Sopenharmony_ci 7595489c19Sopenharmony_ci HILOGI("result: %{public}d, advHandle: %{public}d", result, advHandle); 7695489c19Sopenharmony_ci auto observer = advertiserSptr->pimpl->callbacks_.GetAdvertiserObserver(advHandle); 7795489c19Sopenharmony_ci if (observer != nullptr) { 7895489c19Sopenharmony_ci observer->OnEnableResultEvent(result, advHandle); 7995489c19Sopenharmony_ci } 8095489c19Sopenharmony_ci } 8195489c19Sopenharmony_ci 8295489c19Sopenharmony_ci void OnDisableResultEvent(int32_t result, int32_t advHandle) override 8395489c19Sopenharmony_ci { 8495489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 8595489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 8695489c19Sopenharmony_ci 8795489c19Sopenharmony_ci HILOGI("result: %{public}d, advHandle: %{public}d", result, advHandle); 8895489c19Sopenharmony_ci auto observer = advertiserSptr->pimpl->callbacks_.GetAdvertiserObserver(advHandle); 8995489c19Sopenharmony_ci if (observer != nullptr) { 9095489c19Sopenharmony_ci observer->OnDisableResultEvent(result, advHandle); 9195489c19Sopenharmony_ci } 9295489c19Sopenharmony_ci } 9395489c19Sopenharmony_ci 9495489c19Sopenharmony_ci void OnStopResultEvent(int32_t result, int32_t advHandle) override 9595489c19Sopenharmony_ci { 9695489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 9795489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 9895489c19Sopenharmony_ci 9995489c19Sopenharmony_ci HILOGD("result: %{public}d, advHandle: %{public}d", result, advHandle); 10095489c19Sopenharmony_ci auto observer = advertiserSptr->pimpl->callbacks_.PopAdvertiserObserver(advHandle); 10195489c19Sopenharmony_ci if (observer != nullptr) { 10295489c19Sopenharmony_ci observer->OnStopResultEvent(result, advHandle); 10395489c19Sopenharmony_ci } 10495489c19Sopenharmony_ci } 10595489c19Sopenharmony_ci 10695489c19Sopenharmony_ci void OnAutoStopAdvEvent(int32_t advHandle) override 10795489c19Sopenharmony_ci { 10895489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 10995489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 11095489c19Sopenharmony_ci 11195489c19Sopenharmony_ci HILOGI("advHandle: %{public}d", advHandle); 11295489c19Sopenharmony_ci auto observer = advertiserSptr->pimpl->callbacks_.GetAdvertiserObserver(advHandle); 11395489c19Sopenharmony_ci if (observer != nullptr) { 11495489c19Sopenharmony_ci advertiserSptr->pimpl->callbacks_.Deregister(observer); 11595489c19Sopenharmony_ci } 11695489c19Sopenharmony_ci } 11795489c19Sopenharmony_ci 11895489c19Sopenharmony_ci void OnSetAdvDataEvent(int32_t result, int32_t advHandle) override 11995489c19Sopenharmony_ci { 12095489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 12195489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 12295489c19Sopenharmony_ci 12395489c19Sopenharmony_ci HILOGD("result: %{public}d, advHandle: %{public}d", result, advHandle); 12495489c19Sopenharmony_ci auto observer = advertiserSptr->pimpl->callbacks_.GetAdvertiserObserver(advHandle); 12595489c19Sopenharmony_ci if (observer) { 12695489c19Sopenharmony_ci observer->OnSetAdvDataEvent(result); 12795489c19Sopenharmony_ci } 12895489c19Sopenharmony_ci } 12995489c19Sopenharmony_ci 13095489c19Sopenharmony_ci private: 13195489c19Sopenharmony_ci std::weak_ptr<BleAdvertiser> advertiser_; 13295489c19Sopenharmony_ci BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(BluetoothBleAdvertiserCallbackImp); 13395489c19Sopenharmony_ci }; 13495489c19Sopenharmony_ci sptr<BluetoothBleAdvertiserCallbackImp> callbackImp_ = nullptr; 13595489c19Sopenharmony_ci 13695489c19Sopenharmony_ci BluetoothObserverMap<std::shared_ptr<BleAdvertiseCallback>> callbacks_; 13795489c19Sopenharmony_ci class BleAdvertiserDeathRecipient; 13895489c19Sopenharmony_ci sptr<BleAdvertiserDeathRecipient> deathRecipient_ = nullptr; 13995489c19Sopenharmony_ci int32_t profileRegisterId = 0; 14095489c19Sopenharmony_ci}; 14195489c19Sopenharmony_ci 14295489c19Sopenharmony_ciclass BleAdvertiser::impl::BleAdvertiserDeathRecipient final : public IRemoteObject::DeathRecipient { 14395489c19Sopenharmony_cipublic: 14495489c19Sopenharmony_ci explicit BleAdvertiserDeathRecipient(std::weak_ptr<BleAdvertiser> advertiser) : advertiser_(advertiser) {} 14595489c19Sopenharmony_ci ~BleAdvertiserDeathRecipient() final = default; 14695489c19Sopenharmony_ci BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(BleAdvertiserDeathRecipient); 14795489c19Sopenharmony_ci 14895489c19Sopenharmony_ci void OnRemoteDied(const wptr<IRemoteObject> &remote) final 14995489c19Sopenharmony_ci { 15095489c19Sopenharmony_ci HILOGI("enter"); 15195489c19Sopenharmony_ci 15295489c19Sopenharmony_ci std::shared_ptr<BleAdvertiser> advertiserSptr = advertiser_.lock(); 15395489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(advertiserSptr, "BleAdvertiser is destructed"); 15495489c19Sopenharmony_ci advertiserSptr->pimpl->callbacks_.Clear(); 15595489c19Sopenharmony_ci } 15695489c19Sopenharmony_ci 15795489c19Sopenharmony_ciprivate: 15895489c19Sopenharmony_ci std::weak_ptr<BleAdvertiser> advertiser_; 15995489c19Sopenharmony_ci}; 16095489c19Sopenharmony_ci 16195489c19Sopenharmony_ciBleAdvertiser::impl::impl() 16295489c19Sopenharmony_ci{} 16395489c19Sopenharmony_ci 16495489c19Sopenharmony_ciBleAdvertiser::impl::~impl() 16595489c19Sopenharmony_ci{ 16695489c19Sopenharmony_ci HILOGD("start"); 16795489c19Sopenharmony_ci BluetoothProfileManager::GetInstance().DeregisterFunc(profileRegisterId); 16895489c19Sopenharmony_ci callbacks_.Clear(); 16995489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 17095489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(proxy != nullptr, "failed: no proxy"); 17195489c19Sopenharmony_ci proxy->DeregisterBleAdvertiserCallback(callbackImp_); 17295489c19Sopenharmony_ci proxy->AsObject()->RemoveDeathRecipient(deathRecipient_); 17395489c19Sopenharmony_ci} 17495489c19Sopenharmony_ci 17595489c19Sopenharmony_ciBleAdvertiser::BleAdvertiser() : pimpl(nullptr) 17695489c19Sopenharmony_ci{ 17795489c19Sopenharmony_ci if (pimpl == nullptr) { 17895489c19Sopenharmony_ci pimpl = std::make_unique<impl>(); 17995489c19Sopenharmony_ci if (!pimpl) { 18095489c19Sopenharmony_ci HILOGE("failed, no pimpl"); 18195489c19Sopenharmony_ci } 18295489c19Sopenharmony_ci } 18395489c19Sopenharmony_ci 18495489c19Sopenharmony_ci HILOGI("successful"); 18595489c19Sopenharmony_ci} 18695489c19Sopenharmony_ci 18795489c19Sopenharmony_ciBleAdvertiser::~BleAdvertiser() 18895489c19Sopenharmony_ci{} 18995489c19Sopenharmony_ci 19095489c19Sopenharmony_civoid BleAdvertiser::impl::Init(std::weak_ptr<BleAdvertiser> advertiser) 19195489c19Sopenharmony_ci{ 19295489c19Sopenharmony_ci callbackImp_ = new BluetoothBleAdvertiserCallbackImp(advertiser); 19395489c19Sopenharmony_ci profileRegisterId = BluetoothProfileManager::GetInstance().RegisterFunc(BLE_ADVERTISER_SERVER, 19495489c19Sopenharmony_ci [this, advertiser](sptr<IRemoteObject> remote) { 19595489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = iface_cast<IBluetoothBleAdvertiser>(remote); 19695489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(proxy != nullptr, "failed: no proxy"); 19795489c19Sopenharmony_ci proxy->RegisterBleAdvertiserCallback(callbackImp_); 19895489c19Sopenharmony_ci deathRecipient_ = new BleAdvertiserDeathRecipient(advertiser); 19995489c19Sopenharmony_ci if (deathRecipient_ != nullptr) { 20095489c19Sopenharmony_ci proxy->AsObject()->AddDeathRecipient(deathRecipient_); 20195489c19Sopenharmony_ci } 20295489c19Sopenharmony_ci }); 20395489c19Sopenharmony_ci} 20495489c19Sopenharmony_ci 20595489c19Sopenharmony_cistd::shared_ptr<BleAdvertiser> BleAdvertiser::CreateInstance(void) 20695489c19Sopenharmony_ci{ 20795489c19Sopenharmony_ci auto instance = std::make_shared<BleAdvertiser>(PassKey()); 20895489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(instance, nullptr, "Create BleAdvertiser failed"); 20995489c19Sopenharmony_ci 21095489c19Sopenharmony_ci instance->pimpl->Init(instance); 21195489c19Sopenharmony_ci return instance; 21295489c19Sopenharmony_ci} 21395489c19Sopenharmony_ci 21495489c19Sopenharmony_civoid BleAdvertiser::impl::ConvertBleAdvertiserData(const BleAdvertiserData &data, BluetoothBleAdvertiserData &outData) 21595489c19Sopenharmony_ci{ 21695489c19Sopenharmony_ci std::map<uint16_t, std::string> manufacturerData = data.GetManufacturerData(); 21795489c19Sopenharmony_ci for (auto iter = manufacturerData.begin(); iter != manufacturerData.end(); iter++) { 21895489c19Sopenharmony_ci outData.AddManufacturerData(iter->first, iter->second); 21995489c19Sopenharmony_ci } 22095489c19Sopenharmony_ci std::map<ParcelUuid, std::string> serviceData = data.GetServiceData(); 22195489c19Sopenharmony_ci for (auto it = serviceData.begin(); it != serviceData.end(); it++) { 22295489c19Sopenharmony_ci outData.AddServiceData(Uuid::ConvertFromString(it->first.ToString()), it->second); 22395489c19Sopenharmony_ci } 22495489c19Sopenharmony_ci std::vector<ParcelUuid> serviceUuids = data.GetServiceUuids(); 22595489c19Sopenharmony_ci for (auto it = serviceUuids.begin(); it != serviceUuids.end(); it++) { 22695489c19Sopenharmony_ci outData.AddServiceUuid(Uuid::ConvertFromString(it->ToString())); 22795489c19Sopenharmony_ci } 22895489c19Sopenharmony_ci outData.SetIncludeDeviceName(data.GetIncludeDeviceName()); 22995489c19Sopenharmony_ci outData.SetIncludeTxPower(data.GetIncludeTxPower()); 23095489c19Sopenharmony_ci} 23195489c19Sopenharmony_ci 23295489c19Sopenharmony_ciuint32_t BleAdvertiser::impl::GetAdvertiserTotalBytes(const BluetoothBleAdvertiserData &data, bool isFlagsIncluded) 23395489c19Sopenharmony_ci{ 23495489c19Sopenharmony_ci // If the flag field is contained, the protocol stack adds the flag field, which consists of three bytes. 23595489c19Sopenharmony_ci uint32_t size = (isFlagsIncluded) ? BLE_ADV_FLAGS_FIELD_LENGTH : 0; 23695489c19Sopenharmony_ci std::map<uint16_t, std::string> manufacturerData = data.GetManufacturerData(); 23795489c19Sopenharmony_ci for (auto iter = manufacturerData.begin(); iter != manufacturerData.end(); ++iter) { 23895489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + BLE_ADV_MANUFACTURER_ID_LENGTH + iter->second.length(); 23995489c19Sopenharmony_ci } 24095489c19Sopenharmony_ci 24195489c19Sopenharmony_ci std::map<Uuid, std::string> serviceData = data.GetServiceData(); 24295489c19Sopenharmony_ci for (auto iter = serviceData.begin(); iter != serviceData.end(); ++iter) { 24395489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(iter->first.GetUuidType()) 24495489c19Sopenharmony_ci + iter->second.length(); 24595489c19Sopenharmony_ci } 24695489c19Sopenharmony_ci int num16BitUuids = 0; 24795489c19Sopenharmony_ci int num32BitUuids = 0; 24895489c19Sopenharmony_ci int num128BitUuids = 0; 24995489c19Sopenharmony_ci std::vector<Uuid> serviceUuids = data.GetServiceUuids(); 25095489c19Sopenharmony_ci for (auto iter = serviceUuids.begin(); iter != serviceUuids.end(); ++iter) { 25195489c19Sopenharmony_ci if (iter->GetUuidType() == Uuid::UUID16_BYTES_TYPE) { 25295489c19Sopenharmony_ci ++num16BitUuids; 25395489c19Sopenharmony_ci } else if (iter->GetUuidType() == Uuid::UUID32_BYTES_TYPE) { 25495489c19Sopenharmony_ci ++num32BitUuids; 25595489c19Sopenharmony_ci } else { 25695489c19Sopenharmony_ci ++num128BitUuids; 25795489c19Sopenharmony_ci } 25895489c19Sopenharmony_ci } 25995489c19Sopenharmony_ci if (num16BitUuids != 0) { 26095489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(num16BitUuids * Uuid::UUID16_BYTES_TYPE); 26195489c19Sopenharmony_ci } 26295489c19Sopenharmony_ci if (num32BitUuids != 0) { 26395489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(num32BitUuids * Uuid::UUID32_BYTES_TYPE); 26495489c19Sopenharmony_ci } 26595489c19Sopenharmony_ci if (num128BitUuids != 0) { 26695489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + static_cast<uint32_t>(num128BitUuids * Uuid::UUID128_BYTES_TYPE); 26795489c19Sopenharmony_ci } 26895489c19Sopenharmony_ci if (data.GetIncludeDeviceName()) { 26995489c19Sopenharmony_ci uint32_t deviceNameLen = BluetoothHost::GetDefaultHost().GetLocalName().length(); 27095489c19Sopenharmony_ci deviceNameLen = (deviceNameLen > DEVICE_NAME_MAX_LEN) ? DEVICE_NAME_MAX_LEN : deviceNameLen; 27195489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + deviceNameLen; 27295489c19Sopenharmony_ci } 27395489c19Sopenharmony_ci if (data.GetIncludeTxPower()) { 27495489c19Sopenharmony_ci uint32_t txPowerLen = 3; 27595489c19Sopenharmony_ci size += BLE_ADV_PER_FIELD_OVERHEAD_LENGTH + txPowerLen; 27695489c19Sopenharmony_ci } 27795489c19Sopenharmony_ci return size; 27895489c19Sopenharmony_ci} 27995489c19Sopenharmony_ci 28095489c19Sopenharmony_ciint32_t BleAdvertiser::impl::CheckAdvertiserSettings(const BleAdvertiserSettings &settings) 28195489c19Sopenharmony_ci{ 28295489c19Sopenharmony_ci int8_t txPower = settings.GetTxPower(); 28395489c19Sopenharmony_ci if (txPower < BLE_ADV_TX_POWER_MIN_VALUE || txPower > BLE_ADV_TX_POWER_MAX_VALUE) { 28495489c19Sopenharmony_ci HILOGE("Illegal txPower argument %{public}d", txPower); 28595489c19Sopenharmony_ci return BT_ERR_INVALID_PARAM; 28695489c19Sopenharmony_ci } 28795489c19Sopenharmony_ci 28895489c19Sopenharmony_ci return BT_NO_ERROR; 28995489c19Sopenharmony_ci} 29095489c19Sopenharmony_ci 29195489c19Sopenharmony_ciint32_t BleAdvertiser::impl::CheckAdvertiserData(const BluetoothBleAdvertiserSettings &setting, 29295489c19Sopenharmony_ci const BluetoothBleAdvertiserData &advData, const BluetoothBleAdvertiserData &scanResponse) 29395489c19Sopenharmony_ci{ 29495489c19Sopenharmony_ci uint32_t maxSize = BLE_ADV_MAX_LEGACY_ADVERTISING_DATA_BYTES; 29595489c19Sopenharmony_ci if (!setting.IsLegacyMode()) { 29695489c19Sopenharmony_ci maxSize = static_cast<uint32_t>(BluetoothHost::GetDefaultHost().GetBleMaxAdvertisingDataLength()); 29795489c19Sopenharmony_ci } 29895489c19Sopenharmony_ci // If is Connect, flag field is contained in AdvertiserData. 29995489c19Sopenharmony_ci uint32_t size = GetAdvertiserTotalBytes(advData, setting.IsConnectable()); 30095489c19Sopenharmony_ci if (size > maxSize) { 30195489c19Sopenharmony_ci HILOGE("bleAdvertiserData size = %{public}d, maxSize = %{public}d", size, maxSize); 30295489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 30395489c19Sopenharmony_ci } 30495489c19Sopenharmony_ci size = GetAdvertiserTotalBytes(scanResponse, false); 30595489c19Sopenharmony_ci if (size > maxSize) { 30695489c19Sopenharmony_ci HILOGE("bleScanResponse size = %{public}d, maxSize = %{public}d,", size, maxSize); 30795489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 30895489c19Sopenharmony_ci } 30995489c19Sopenharmony_ci return BT_NO_ERROR; 31095489c19Sopenharmony_ci} 31195489c19Sopenharmony_ci 31295489c19Sopenharmony_ciint BleAdvertiser::StartAdvertising(const BleAdvertiserSettings &settings, const BleAdvertiserData &advData, 31395489c19Sopenharmony_ci const BleAdvertiserData &scanResponse, uint16_t duration, std::shared_ptr<BleAdvertiseCallback> callback) 31495489c19Sopenharmony_ci{ 31595489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 31695489c19Sopenharmony_ci HILOGE("bluetooth is off."); 31795489c19Sopenharmony_ci return BT_ERR_INVALID_STATE; 31895489c19Sopenharmony_ci } 31995489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 32095489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(proxy != nullptr, BT_ERR_INTERNAL_ERROR, "failed: no proxy"); 32195489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BT_ERR_INTERNAL_ERROR, "callback is nullptr"); 32295489c19Sopenharmony_ci 32395489c19Sopenharmony_ci int ret = pimpl->CheckAdvertiserSettings(settings); 32495489c19Sopenharmony_ci if (ret != BT_NO_ERROR) { 32595489c19Sopenharmony_ci return ret; 32695489c19Sopenharmony_ci } 32795489c19Sopenharmony_ci BluetoothBleAdvertiserSettings setting; 32895489c19Sopenharmony_ci setting.SetConnectable(settings.IsConnectable()); 32995489c19Sopenharmony_ci setting.SetInterval(settings.GetInterval()); 33095489c19Sopenharmony_ci setting.SetLegacyMode(settings.IsLegacyMode()); 33195489c19Sopenharmony_ci setting.SetTxPower(settings.GetTxPower()); 33295489c19Sopenharmony_ci setting.SetOwnAddr(settings.GetOwnAddr()); 33395489c19Sopenharmony_ci setting.SetOwnAddrType(settings.GetOwnAddrType()); 33495489c19Sopenharmony_ci 33595489c19Sopenharmony_ci BluetoothBleAdvertiserData bleAdvertiserData; 33695489c19Sopenharmony_ci BluetoothBleAdvertiserData bleScanResponse; 33795489c19Sopenharmony_ci bleAdvertiserData.SetAdvFlag(advData.GetAdvFlag()); 33895489c19Sopenharmony_ci pimpl->ConvertBleAdvertiserData(advData, bleAdvertiserData); 33995489c19Sopenharmony_ci pimpl->ConvertBleAdvertiserData(scanResponse, bleScanResponse); 34095489c19Sopenharmony_ci 34195489c19Sopenharmony_ci ret = pimpl->CheckAdvertiserData(setting, bleAdvertiserData, bleScanResponse); 34295489c19Sopenharmony_ci if (ret != BT_NO_ERROR) { 34395489c19Sopenharmony_ci return ret; 34495489c19Sopenharmony_ci } 34595489c19Sopenharmony_ci 34695489c19Sopenharmony_ci HILOGD("duration=%{public}d", duration); 34795489c19Sopenharmony_ci int32_t advHandle = BLE_INVALID_ADVERTISING_HANDLE; 34895489c19Sopenharmony_ci if (pimpl->callbacks_.IsExistAdvertiserCallback(callback, advHandle)) { 34995489c19Sopenharmony_ci ret = proxy->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, duration, false); 35095489c19Sopenharmony_ci } else { 35195489c19Sopenharmony_ci ret = proxy->GetAdvertiserHandle(advHandle); 35295489c19Sopenharmony_ci if (ret != BT_NO_ERROR || advHandle == BLE_INVALID_ADVERTISING_HANDLE) { 35395489c19Sopenharmony_ci HILOGE("Invalid advertising handle"); 35495489c19Sopenharmony_ci callback->OnStartResultEvent(BT_ERR_INTERNAL_ERROR, static_cast<int>(BLE_INVALID_ADVERTISING_HANDLE)); 35595489c19Sopenharmony_ci return ret; 35695489c19Sopenharmony_ci } 35795489c19Sopenharmony_ci callback->OnGetAdvHandleEvent(0, advHandle); 35895489c19Sopenharmony_ci pimpl->callbacks_.Register(advHandle, callback); 35995489c19Sopenharmony_ci ret = proxy->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, duration, false); 36095489c19Sopenharmony_ci } 36195489c19Sopenharmony_ci return ret; 36295489c19Sopenharmony_ci} 36395489c19Sopenharmony_ci 36495489c19Sopenharmony_ciint BleAdvertiser::StartAdvertising(const BleAdvertiserSettings &settings, const std::vector<uint8_t> &advData, 36595489c19Sopenharmony_ci const std::vector<uint8_t> &scanResponse, uint16_t duration, std::shared_ptr<BleAdvertiseCallback> callback) 36695489c19Sopenharmony_ci{ 36795489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 36895489c19Sopenharmony_ci HILOGE("bluetooth is off."); 36995489c19Sopenharmony_ci return BT_ERR_INVALID_STATE; 37095489c19Sopenharmony_ci } 37195489c19Sopenharmony_ci 37295489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 37395489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(proxy != nullptr, BT_ERR_INTERNAL_ERROR, "failed: no proxy"); 37495489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BT_ERR_INTERNAL_ERROR, "callback is nullptr"); 37595489c19Sopenharmony_ci 37695489c19Sopenharmony_ci int ret = pimpl->CheckAdvertiserSettings(settings); 37795489c19Sopenharmony_ci if (ret != BT_NO_ERROR) { 37895489c19Sopenharmony_ci return ret; 37995489c19Sopenharmony_ci } 38095489c19Sopenharmony_ci BluetoothBleAdvertiserSettings setting; 38195489c19Sopenharmony_ci setting.SetConnectable(settings.IsConnectable()); 38295489c19Sopenharmony_ci setting.SetInterval(settings.GetInterval()); 38395489c19Sopenharmony_ci setting.SetLegacyMode(settings.IsLegacyMode()); 38495489c19Sopenharmony_ci setting.SetTxPower(settings.GetTxPower()); 38595489c19Sopenharmony_ci setting.SetOwnAddr(settings.GetOwnAddr()); 38695489c19Sopenharmony_ci setting.SetOwnAddrType(settings.GetOwnAddrType()); 38795489c19Sopenharmony_ci 38895489c19Sopenharmony_ci BluetoothBleAdvertiserData bleAdvertiserData; 38995489c19Sopenharmony_ci bleAdvertiserData.SetPayload(std::string(advData.begin(), advData.end())); 39095489c19Sopenharmony_ci bleAdvertiserData.SetAdvFlag(0); 39195489c19Sopenharmony_ci BluetoothBleAdvertiserData bleScanResponse; 39295489c19Sopenharmony_ci bleScanResponse.SetPayload(std::string(scanResponse.begin(), scanResponse.end())); 39395489c19Sopenharmony_ci 39495489c19Sopenharmony_ci HILOGI("duration=%{public}d", duration); 39595489c19Sopenharmony_ci int32_t advHandle = BLE_INVALID_ADVERTISING_HANDLE; 39695489c19Sopenharmony_ci if (pimpl->callbacks_.IsExistAdvertiserCallback(callback, advHandle)) { 39795489c19Sopenharmony_ci ret = proxy->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, duration, true); 39895489c19Sopenharmony_ci } else { 39995489c19Sopenharmony_ci ret = proxy->GetAdvertiserHandle(advHandle); 40095489c19Sopenharmony_ci if (ret != BT_NO_ERROR || advHandle == BLE_INVALID_ADVERTISING_HANDLE) { 40195489c19Sopenharmony_ci HILOGE("Invalid advertising handle"); 40295489c19Sopenharmony_ci callback->OnStartResultEvent(BT_ERR_INTERNAL_ERROR, BLE_INVALID_ADVERTISING_HANDLE); 40395489c19Sopenharmony_ci return ret; 40495489c19Sopenharmony_ci } 40595489c19Sopenharmony_ci pimpl->callbacks_.Register(advHandle, callback); 40695489c19Sopenharmony_ci ret = proxy->StartAdvertising(setting, bleAdvertiserData, bleScanResponse, advHandle, duration, true); 40795489c19Sopenharmony_ci } 40895489c19Sopenharmony_ci return ret; 40995489c19Sopenharmony_ci} 41095489c19Sopenharmony_ci 41195489c19Sopenharmony_civoid BleAdvertiser::SetAdvertisingData(const std::vector<uint8_t> &advData, const std::vector<uint8_t> &scanResponse, 41295489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> callback) 41395489c19Sopenharmony_ci{ 41495489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 41595489c19Sopenharmony_ci HILOGE("bluetooth is off."); 41695489c19Sopenharmony_ci return; 41795489c19Sopenharmony_ci } 41895489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 41995489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(proxy != nullptr, "failed: no proxy"); 42095489c19Sopenharmony_ci 42195489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(callback != nullptr, "callback is nullptr"); 42295489c19Sopenharmony_ci 42395489c19Sopenharmony_ci int advHandle = BLE_INVALID_ADVERTISING_HANDLE; 42495489c19Sopenharmony_ci if (!pimpl->callbacks_.IsExistAdvertiserCallback(callback, advHandle)) { 42595489c19Sopenharmony_ci HILOGE("Advertising is not started"); 42695489c19Sopenharmony_ci return; 42795489c19Sopenharmony_ci } 42895489c19Sopenharmony_ci 42995489c19Sopenharmony_ci BluetoothBleAdvertiserData bleAdvertiserData; 43095489c19Sopenharmony_ci bleAdvertiserData.SetPayload(std::string(advData.begin(), advData.end())); 43195489c19Sopenharmony_ci BluetoothBleAdvertiserData bleScanResponse; 43295489c19Sopenharmony_ci bleScanResponse.SetPayload(std::string(scanResponse.begin(), scanResponse.end())); 43395489c19Sopenharmony_ci proxy->SetAdvertisingData(bleAdvertiserData, bleScanResponse, advHandle); 43495489c19Sopenharmony_ci} 43595489c19Sopenharmony_ci 43695489c19Sopenharmony_ciint BleAdvertiser::EnableAdvertising(uint8_t advHandle, uint16_t duration, 43795489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> callback) 43895489c19Sopenharmony_ci{ 43995489c19Sopenharmony_ci HILOGI("enter"); 44095489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 44195489c19Sopenharmony_ci HILOGE("bluetooth is off."); 44295489c19Sopenharmony_ci return BT_ERR_INVALID_STATE; 44395489c19Sopenharmony_ci } 44495489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 44595489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(proxy != nullptr, BT_ERR_INTERNAL_ERROR, "failed: no proxy"); 44695489c19Sopenharmony_ci 44795489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BT_ERR_INTERNAL_ERROR, "callback is nullptr"); 44895489c19Sopenharmony_ci uint8_t tmpAdvHandle = pimpl->callbacks_.GetAdvertiserHandle(callback); 44995489c19Sopenharmony_ci if (tmpAdvHandle == BLE_INVALID_ADVERTISING_HANDLE) { 45095489c19Sopenharmony_ci HILOGE("Invalid advertising callback"); 45195489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 45295489c19Sopenharmony_ci } 45395489c19Sopenharmony_ci 45495489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> observer = pimpl->callbacks_.GetAdvertiserObserver(advHandle); 45595489c19Sopenharmony_ci if (observer == nullptr) { 45695489c19Sopenharmony_ci HILOGE("Invalid advertising handle"); 45795489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 45895489c19Sopenharmony_ci } 45995489c19Sopenharmony_ci 46095489c19Sopenharmony_ci int ret = proxy->EnableAdvertising(advHandle, duration); 46195489c19Sopenharmony_ci return ret; 46295489c19Sopenharmony_ci} 46395489c19Sopenharmony_ci 46495489c19Sopenharmony_ciint BleAdvertiser::DisableAdvertising(uint8_t advHandle, std::shared_ptr<BleAdvertiseCallback> callback) 46595489c19Sopenharmony_ci{ 46695489c19Sopenharmony_ci HILOGI("enter"); 46795489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 46895489c19Sopenharmony_ci HILOGE("bluetooth is off."); 46995489c19Sopenharmony_ci return BT_ERR_INVALID_STATE; 47095489c19Sopenharmony_ci } 47195489c19Sopenharmony_ci 47295489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 47395489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(proxy != nullptr, BT_ERR_INTERNAL_ERROR, "failed: no proxy"); 47495489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BT_ERR_INTERNAL_ERROR, "callback is nullptr"); 47595489c19Sopenharmony_ci uint8_t tmpAdvHandle = pimpl->callbacks_.GetAdvertiserHandle(callback); 47695489c19Sopenharmony_ci if (tmpAdvHandle == BLE_INVALID_ADVERTISING_HANDLE) { 47795489c19Sopenharmony_ci HILOGE("Invalid advertising callback"); 47895489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 47995489c19Sopenharmony_ci } 48095489c19Sopenharmony_ci 48195489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> observer = pimpl->callbacks_.GetAdvertiserObserver(advHandle); 48295489c19Sopenharmony_ci if (observer == nullptr) { 48395489c19Sopenharmony_ci HILOGE("Invalid advertising handle"); 48495489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 48595489c19Sopenharmony_ci } 48695489c19Sopenharmony_ci 48795489c19Sopenharmony_ci int ret = proxy->DisableAdvertising(advHandle); 48895489c19Sopenharmony_ci return ret; 48995489c19Sopenharmony_ci} 49095489c19Sopenharmony_ci 49195489c19Sopenharmony_ciint BleAdvertiser::StopAdvertising(std::shared_ptr<BleAdvertiseCallback> callback) 49295489c19Sopenharmony_ci{ 49395489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 49495489c19Sopenharmony_ci HILOGE("bluetooth is off."); 49595489c19Sopenharmony_ci return BT_ERR_INVALID_STATE; 49695489c19Sopenharmony_ci } 49795489c19Sopenharmony_ci 49895489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 49995489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(proxy != nullptr, BT_ERR_INTERNAL_ERROR, "failed: no proxy"); 50095489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BT_ERR_INTERNAL_ERROR, "callback is nullptr"); 50195489c19Sopenharmony_ci 50295489c19Sopenharmony_ci HILOGD("enter"); 50395489c19Sopenharmony_ci uint8_t advHandle = pimpl->callbacks_.GetAdvertiserHandle(callback); 50495489c19Sopenharmony_ci if (advHandle == BLE_INVALID_ADVERTISING_HANDLE) { 50595489c19Sopenharmony_ci HILOGE("Invalid advertising handle"); 50695489c19Sopenharmony_ci return BT_ERR_INTERNAL_ERROR; 50795489c19Sopenharmony_ci } 50895489c19Sopenharmony_ci 50995489c19Sopenharmony_ci int ret = proxy->StopAdvertising(advHandle); 51095489c19Sopenharmony_ci return ret; 51195489c19Sopenharmony_ci} 51295489c19Sopenharmony_ci 51395489c19Sopenharmony_civoid BleAdvertiser::Close(std::shared_ptr<BleAdvertiseCallback> callback) 51495489c19Sopenharmony_ci{ 51595489c19Sopenharmony_ci if (!IS_BLE_ENABLED()) { 51695489c19Sopenharmony_ci HILOGE("BLE is not enabled"); 51795489c19Sopenharmony_ci return; 51895489c19Sopenharmony_ci } 51995489c19Sopenharmony_ci 52095489c19Sopenharmony_ci sptr<IBluetoothBleAdvertiser> proxy = GetRemoteProxy<IBluetoothBleAdvertiser>(BLE_ADVERTISER_SERVER); 52195489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(proxy != nullptr, "proxy is nullptr"); 52295489c19Sopenharmony_ci CHECK_AND_RETURN_LOG(callback != nullptr, "callback is nullptr"); 52395489c19Sopenharmony_ci 52495489c19Sopenharmony_ci HILOGI("enter"); 52595489c19Sopenharmony_ci if (proxy != nullptr) { 52695489c19Sopenharmony_ci uint8_t advHandle = pimpl->callbacks_.GetAdvertiserHandle(callback); 52795489c19Sopenharmony_ci if (advHandle != BLE_INVALID_ADVERTISING_HANDLE) { 52895489c19Sopenharmony_ci proxy->Close(advHandle); 52995489c19Sopenharmony_ci } 53095489c19Sopenharmony_ci 53195489c19Sopenharmony_ci std::shared_ptr<BleAdvertiseCallback> observer = pimpl->callbacks_.GetAdvertiserObserver(advHandle); 53295489c19Sopenharmony_ci if (observer != nullptr) { 53395489c19Sopenharmony_ci pimpl->callbacks_.Deregister(observer); 53495489c19Sopenharmony_ci } 53595489c19Sopenharmony_ci } 53695489c19Sopenharmony_ci} 53795489c19Sopenharmony_ci 53895489c19Sopenharmony_ciuint8_t BleAdvertiser::GetAdvHandle(std::shared_ptr<BleAdvertiseCallback> callback) 53995489c19Sopenharmony_ci{ 54095489c19Sopenharmony_ci if (!BluetoothHost::GetDefaultHost().IsBleEnabled()) { 54195489c19Sopenharmony_ci HILOGE("BLE is not enabled"); 54295489c19Sopenharmony_ci return BLE_INVALID_ADVERTISING_HANDLE; 54395489c19Sopenharmony_ci } 54495489c19Sopenharmony_ci CHECK_AND_RETURN_LOG_RET(callback != nullptr, BLE_INVALID_ADVERTISING_HANDLE, "callback is nullptr"); 54595489c19Sopenharmony_ci return pimpl->callbacks_.GetAdvertiserHandle(callback); 54695489c19Sopenharmony_ci} 54795489c19Sopenharmony_ci 54895489c19Sopenharmony_ciBleAdvertiserData::BleAdvertiserData() 54995489c19Sopenharmony_ci{} 55095489c19Sopenharmony_ci 55195489c19Sopenharmony_ciBleAdvertiserData::~BleAdvertiserData() 55295489c19Sopenharmony_ci{} 55395489c19Sopenharmony_ci 55495489c19Sopenharmony_civoid BleAdvertiserData::AddServiceData(const ParcelUuid &uuid, const std::string &serviceData) 55595489c19Sopenharmony_ci{ 55695489c19Sopenharmony_ci if (serviceData.empty()) { 55795489c19Sopenharmony_ci HILOGE("serviceData is empty"); 55895489c19Sopenharmony_ci return; 55995489c19Sopenharmony_ci } 56095489c19Sopenharmony_ci 56195489c19Sopenharmony_ci serviceData_.insert(std::make_pair(uuid, serviceData)); 56295489c19Sopenharmony_ci} 56395489c19Sopenharmony_ci 56495489c19Sopenharmony_civoid BleAdvertiserData::AddManufacturerData(uint16_t manufacturerId, const std::string &data) 56595489c19Sopenharmony_ci{ 56695489c19Sopenharmony_ci if (data.empty()) { 56795489c19Sopenharmony_ci HILOGE("serviceData is empty"); 56895489c19Sopenharmony_ci return; 56995489c19Sopenharmony_ci } 57095489c19Sopenharmony_ci 57195489c19Sopenharmony_ci manufacturerSpecificData_.insert(std::make_pair(manufacturerId, data)); 57295489c19Sopenharmony_ci} 57395489c19Sopenharmony_ci 57495489c19Sopenharmony_cistd::map<uint16_t, std::string> BleAdvertiserData::GetManufacturerData() const 57595489c19Sopenharmony_ci{ 57695489c19Sopenharmony_ci return manufacturerSpecificData_; 57795489c19Sopenharmony_ci} 57895489c19Sopenharmony_ci 57995489c19Sopenharmony_civoid BleAdvertiserData::AddServiceUuid(const ParcelUuid &serviceUuid) 58095489c19Sopenharmony_ci{ 58195489c19Sopenharmony_ci serviceUuids_.push_back(serviceUuid); 58295489c19Sopenharmony_ci} 58395489c19Sopenharmony_ci 58495489c19Sopenharmony_cistd::vector<ParcelUuid> BleAdvertiserData::GetServiceUuids() const 58595489c19Sopenharmony_ci{ 58695489c19Sopenharmony_ci return serviceUuids_; 58795489c19Sopenharmony_ci} 58895489c19Sopenharmony_ci 58995489c19Sopenharmony_civoid BleAdvertiserData::SetAdvFlag(uint8_t flag) 59095489c19Sopenharmony_ci{ 59195489c19Sopenharmony_ci advFlag_ = flag; 59295489c19Sopenharmony_ci} 59395489c19Sopenharmony_ci 59495489c19Sopenharmony_ciuint8_t BleAdvertiserData::GetAdvFlag() const 59595489c19Sopenharmony_ci{ 59695489c19Sopenharmony_ci return advFlag_; 59795489c19Sopenharmony_ci} 59895489c19Sopenharmony_ci 59995489c19Sopenharmony_cistd::map<ParcelUuid, std::string> BleAdvertiserData::GetServiceData() const 60095489c19Sopenharmony_ci{ 60195489c19Sopenharmony_ci return serviceData_; 60295489c19Sopenharmony_ci} 60395489c19Sopenharmony_ci 60495489c19Sopenharmony_cibool BleAdvertiserData::GetIncludeDeviceName() const 60595489c19Sopenharmony_ci{ 60695489c19Sopenharmony_ci return includeDeviceName_; 60795489c19Sopenharmony_ci} 60895489c19Sopenharmony_ci 60995489c19Sopenharmony_civoid BleAdvertiserData::SetIncludeDeviceName(bool flag) 61095489c19Sopenharmony_ci{ 61195489c19Sopenharmony_ci includeDeviceName_ = flag; 61295489c19Sopenharmony_ci} 61395489c19Sopenharmony_ci 61495489c19Sopenharmony_cibool BleAdvertiserData::GetIncludeTxPower() const 61595489c19Sopenharmony_ci{ 61695489c19Sopenharmony_ci return includeTxPower_; 61795489c19Sopenharmony_ci} 61895489c19Sopenharmony_ci 61995489c19Sopenharmony_civoid BleAdvertiserData::SetIncludeTxPower(bool flag) 62095489c19Sopenharmony_ci{ 62195489c19Sopenharmony_ci includeTxPower_ = flag; 62295489c19Sopenharmony_ci} 62395489c19Sopenharmony_ci 62495489c19Sopenharmony_ciBleAdvertiserSettings::BleAdvertiserSettings() 62595489c19Sopenharmony_ci{} 62695489c19Sopenharmony_ci 62795489c19Sopenharmony_ciBleAdvertiserSettings::~BleAdvertiserSettings() 62895489c19Sopenharmony_ci{} 62995489c19Sopenharmony_ci 63095489c19Sopenharmony_civoid BleAdvertiserSettings::SetConnectable(bool connectable) 63195489c19Sopenharmony_ci{ 63295489c19Sopenharmony_ci connectable_ = connectable; 63395489c19Sopenharmony_ci} 63495489c19Sopenharmony_ci 63595489c19Sopenharmony_cibool BleAdvertiserSettings::IsConnectable() const 63695489c19Sopenharmony_ci{ 63795489c19Sopenharmony_ci return connectable_; 63895489c19Sopenharmony_ci} 63995489c19Sopenharmony_ci 64095489c19Sopenharmony_civoid BleAdvertiserSettings::SetLegacyMode(bool legacyMode) 64195489c19Sopenharmony_ci{ 64295489c19Sopenharmony_ci legacyMode_ = legacyMode; 64395489c19Sopenharmony_ci} 64495489c19Sopenharmony_ci 64595489c19Sopenharmony_cibool BleAdvertiserSettings::IsLegacyMode() const 64695489c19Sopenharmony_ci{ 64795489c19Sopenharmony_ci return legacyMode_; 64895489c19Sopenharmony_ci} 64995489c19Sopenharmony_ci 65095489c19Sopenharmony_civoid BleAdvertiserSettings::SetInterval(uint16_t interval) 65195489c19Sopenharmony_ci{ 65295489c19Sopenharmony_ci interval_ = interval; 65395489c19Sopenharmony_ci} 65495489c19Sopenharmony_ci 65595489c19Sopenharmony_ciuint16_t BleAdvertiserSettings::GetInterval() const 65695489c19Sopenharmony_ci{ 65795489c19Sopenharmony_ci return interval_; 65895489c19Sopenharmony_ci} 65995489c19Sopenharmony_ci 66095489c19Sopenharmony_civoid BleAdvertiserSettings::SetTxPower(int8_t txPower) 66195489c19Sopenharmony_ci{ 66295489c19Sopenharmony_ci txPower_ = txPower; 66395489c19Sopenharmony_ci} 66495489c19Sopenharmony_ci 66595489c19Sopenharmony_ciint8_t BleAdvertiserSettings::GetTxPower() const 66695489c19Sopenharmony_ci{ 66795489c19Sopenharmony_ci return txPower_; 66895489c19Sopenharmony_ci} 66995489c19Sopenharmony_ci 67095489c19Sopenharmony_ciint BleAdvertiserSettings::GetPrimaryPhy() const 67195489c19Sopenharmony_ci{ 67295489c19Sopenharmony_ci return primaryPhy_; 67395489c19Sopenharmony_ci} 67495489c19Sopenharmony_ci 67595489c19Sopenharmony_civoid BleAdvertiserSettings::SetPrimaryPhy(int primaryPhy) 67695489c19Sopenharmony_ci{ 67795489c19Sopenharmony_ci primaryPhy_ = primaryPhy; 67895489c19Sopenharmony_ci} 67995489c19Sopenharmony_ci 68095489c19Sopenharmony_ciint BleAdvertiserSettings::GetSecondaryPhy() const 68195489c19Sopenharmony_ci{ 68295489c19Sopenharmony_ci return secondaryPhy_; 68395489c19Sopenharmony_ci} 68495489c19Sopenharmony_ci 68595489c19Sopenharmony_civoid BleAdvertiserSettings::SetSecondaryPhy(int secondaryPhy) 68695489c19Sopenharmony_ci{ 68795489c19Sopenharmony_ci secondaryPhy_ = secondaryPhy; 68895489c19Sopenharmony_ci} 68995489c19Sopenharmony_ci 69095489c19Sopenharmony_cistd::array<uint8_t, OHOS_BD_ADDR_LEN> BleAdvertiserSettings::GetOwnAddr() const 69195489c19Sopenharmony_ci{ 69295489c19Sopenharmony_ci return ownAddr_; 69395489c19Sopenharmony_ci} 69495489c19Sopenharmony_ci 69595489c19Sopenharmony_civoid BleAdvertiserSettings::SetOwnAddr(const std::array<uint8_t, OHOS_BD_ADDR_LEN>& addr) 69695489c19Sopenharmony_ci{ 69795489c19Sopenharmony_ci ownAddr_ = addr; 69895489c19Sopenharmony_ci} 69995489c19Sopenharmony_ci 70095489c19Sopenharmony_ciint8_t BleAdvertiserSettings::GetOwnAddrType() const 70195489c19Sopenharmony_ci{ 70295489c19Sopenharmony_ci return ownAddrType_; 70395489c19Sopenharmony_ci} 70495489c19Sopenharmony_ci 70595489c19Sopenharmony_civoid BleAdvertiserSettings::SetOwnAddrType(int8_t addrType) 70695489c19Sopenharmony_ci{ 70795489c19Sopenharmony_ci ownAddrType_ = addrType; 70895489c19Sopenharmony_ci} 70995489c19Sopenharmony_ci} // namespace Bluetooth 71095489c19Sopenharmony_ci} // namespace OHOS 711