• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "ble_service_data.h"
17 
18 #include <algorithm>
19 
20 #include "array"
21 #include "map"
22 #include "vector"
23 #include "securec.h"
24 #include "bluetooth_log.h"
25 
26 namespace OHOS {
27 namespace bluetooth {
28 /**
29  * @brief Represents scan settings.
30  *
31  * @since 6
32  */
33 
SetReportDelay(long reportDelayMillis)34 void BleScanSettingsImpl::SetReportDelay(long reportDelayMillis)
35 {
36     reportDelayMillis_ = reportDelayMillis;
37 }
38 
39 /**
40  * @brief Get the report delay time.
41  *
42  * @return Returns Report delay time.
43  * @since 6
44  */
GetReportDelayMillisValue() const45 long BleScanSettingsImpl::GetReportDelayMillisValue() const
46 {
47     return reportDelayMillis_;
48 }
49 
SetScanMode(int scanMode)50 void BleScanSettingsImpl::SetScanMode(int scanMode)
51 {
52     scanMode_ = scanMode;
53 }
54 
GetScanMode() const55 int BleScanSettingsImpl::GetScanMode() const
56 {
57     return scanMode_;
58 }
59 
SetLegacy(bool legacy)60 void BleScanSettingsImpl::SetLegacy(bool legacy)
61 {
62     legacy_ = legacy;
63 }
64 
GetLegacy() const65 bool BleScanSettingsImpl::GetLegacy() const
66 {
67     return legacy_;
68 }
69 
SetPhy(int phy)70 void BleScanSettingsImpl::SetPhy(int phy)
71 {
72     phy_ = phy;
73 }
74 
GetPhy() const75 int BleScanSettingsImpl::GetPhy() const
76 {
77     return phy_;
78 }
79 
SetCallbackType(uint8_t callbackType)80 void BleScanSettingsImpl::SetCallbackType(uint8_t callbackType)
81 {
82     callbackType_ = callbackType;
83 }
84 
GetCallbackType() const85 uint8_t BleScanSettingsImpl::GetCallbackType() const
86 {
87     return callbackType_;
88 }
89 
SetMatchTrackAdvType(uint8_t matchTrackAdvType)90 void BleScanSettingsImpl::SetMatchTrackAdvType(uint8_t matchTrackAdvType)
91 {
92     matchTrackAdvType_ = matchTrackAdvType;
93 }
94 
GetMatchTrackAdvType() const95 uint8_t BleScanSettingsImpl::GetMatchTrackAdvType() const
96 {
97     return matchTrackAdvType_;
98 }
99 
SetSensitivityMode(uint8_t sensitivityMode)100 void BleScanSettingsImpl::SetSensitivityMode(uint8_t sensitivityMode)
101 {
102     sensitivityMode_ = sensitivityMode;
103 }
104 
GetSensitivityMode() const105 uint8_t BleScanSettingsImpl::GetSensitivityMode() const
106 {
107     return sensitivityMode_;
108 }
109 
SetMatchMode(uint8_t matchMode)110 void BleScanSettingsImpl::SetMatchMode(uint8_t matchMode)
111 {
112     matchMode_ = matchMode;
113 }
114 
GetMatchMode() const115 uint8_t BleScanSettingsImpl::GetMatchMode() const
116 {
117     return matchMode_;
118 }
119 
GetScanInterval() const120 uint16_t BleScanSettingsImpl::GetScanInterval() const
121 {
122     return scanInterval_;
123 }
124 
GetScanWindow() const125 uint16_t BleScanSettingsImpl::GetScanWindow() const
126 {
127     return scanWindow_;
128 }
129 
SetScanInterval(uint16_t scanInterval)130 void BleScanSettingsImpl::SetScanInterval(uint16_t scanInterval)
131 {
132     scanInterval_ = scanInterval;
133 }
134 
SetScanWindow(uint16_t scanWindow)135 void BleScanSettingsImpl::SetScanWindow(uint16_t scanWindow)
136 {
137     scanWindow_ = scanWindow;
138 }
139 
SetDeviceId(const std::string & deviceId)140 void BleScanFilterImpl::SetDeviceId(const std::string &deviceId)
141 {
142     deviceId_ = deviceId;
143 }
144 
GetDeviceId() const145 std::string BleScanFilterImpl::GetDeviceId() const
146 {
147     return deviceId_;
148 }
149 
SetName(const std::string & name)150 void BleScanFilterImpl::SetName(const std::string &name)
151 {
152     name_ = name;
153 }
154 
GetName() const155 std::string BleScanFilterImpl::GetName() const
156 {
157     return name_;
158 }
159 
SetServiceUuid(const Uuid & serviceUuid)160 void BleScanFilterImpl::SetServiceUuid(const Uuid &serviceUuid)
161 {
162     serviceUuid_ = serviceUuid;
163     hasServiceUuid_ = true;
164 }
165 
HasServiceUuid() const166 bool BleScanFilterImpl::HasServiceUuid() const
167 {
168     return hasServiceUuid_;
169 }
170 
GetServiceUuid() const171 Uuid BleScanFilterImpl::GetServiceUuid() const
172 {
173     return serviceUuid_;
174 }
175 
SetServiceUuidMask(const Uuid & serviceUuidMask)176 void BleScanFilterImpl::SetServiceUuidMask(const Uuid &serviceUuidMask)
177 {
178     serviceUuidMask_ = serviceUuidMask;
179     hasServiceUuidMask_ = true;
180 }
181 
HasServiceUuidMask() const182 bool BleScanFilterImpl::HasServiceUuidMask() const
183 {
184     return hasServiceUuidMask_;
185 }
186 
GetServiceUuidMask() const187 Uuid BleScanFilterImpl::GetServiceUuidMask() const
188 {
189     return serviceUuidMask_;
190 }
191 
SetServiceSolicitationUuid(const Uuid & serviceSolicitationUuid)192 void BleScanFilterImpl::SetServiceSolicitationUuid(const Uuid &serviceSolicitationUuid)
193 {
194     serviceSolicitationUuid_ = serviceSolicitationUuid;
195     hasSolicitationUuid_ = true;
196 }
197 
HasSolicitationUuid() const198 bool BleScanFilterImpl::HasSolicitationUuid() const
199 {
200     return hasSolicitationUuid_;
201 }
202 
GetServiceSolicitationUuid() const203 Uuid BleScanFilterImpl::GetServiceSolicitationUuid() const
204 {
205     return serviceSolicitationUuid_;
206 }
207 
SetServiceSolicitationUuidMask(const Uuid & serviceSolicitationUuidMask)208 void BleScanFilterImpl::SetServiceSolicitationUuidMask(const Uuid &serviceSolicitationUuidMask)
209 {
210     serviceSolicitationUuidMask_ = serviceSolicitationUuidMask;
211     hasSolicitationUuidMask_ = true;
212 }
213 
HasSolicitationUuidMask() const214 bool BleScanFilterImpl::HasSolicitationUuidMask() const
215 {
216     return hasSolicitationUuidMask_;
217 }
218 
GetServiceSolicitationUuidMask() const219 Uuid BleScanFilterImpl::GetServiceSolicitationUuidMask() const
220 {
221     return serviceSolicitationUuidMask_;
222 }
223 
SetServiceData(const std::vector<uint8_t> & serviceData)224 void BleScanFilterImpl::SetServiceData(const std::vector<uint8_t> &serviceData)
225 {
226     serviceData_ = serviceData;
227 }
228 
GetServiceData() const229 std::vector<uint8_t> BleScanFilterImpl::GetServiceData() const
230 {
231     return serviceData_;
232 }
233 
SetServiceDataMask(const std::vector<uint8_t> & serviceDataMask)234 void BleScanFilterImpl::SetServiceDataMask(const std::vector<uint8_t> &serviceDataMask)
235 {
236     serviceDataMask_ = serviceDataMask;
237 }
238 
GetServiceDataMask() const239 std::vector<uint8_t> BleScanFilterImpl::GetServiceDataMask() const
240 {
241     return serviceDataMask_;
242 }
243 
SetManufacturerId(uint16_t manufacturerId)244 void BleScanFilterImpl::SetManufacturerId(uint16_t manufacturerId)
245 {
246     manufacturerId_ = manufacturerId;
247 }
248 
GetManufacturerId() const249 uint16_t BleScanFilterImpl::GetManufacturerId() const
250 {
251     return manufacturerId_;
252 }
253 
SetManufactureData(const std::vector<uint8_t> & manufactureData)254 void BleScanFilterImpl::SetManufactureData(const std::vector<uint8_t> &manufactureData)
255 {
256     manufactureData_ = manufactureData;
257 }
258 
GetManufactureData() const259 std::vector<uint8_t> BleScanFilterImpl::GetManufactureData() const
260 {
261     return manufactureData_;
262 }
263 
SetManufactureDataMask(const std::vector<uint8_t> & manufactureDataMask)264 void BleScanFilterImpl::SetManufactureDataMask(const std::vector<uint8_t> &manufactureDataMask)
265 {
266     manufactureDataMask_ = manufactureDataMask;
267 }
268 
GetManufactureDataMask() const269 std::vector<uint8_t> BleScanFilterImpl::GetManufactureDataMask() const
270 {
271     return manufactureDataMask_;
272 }
273 
SetAdvIndReportFlag(bool advIndReport)274 void BleScanFilterImpl::SetAdvIndReportFlag(bool advIndReport)
275 {
276     advIndReport_ = advIndReport;
277 }
278 
GetAdvIndReportFlag() const279 bool BleScanFilterImpl::GetAdvIndReportFlag() const
280 {
281     return advIndReport_;
282 }
283 
SetClientId(int clientId)284 void BleScanFilterImpl::SetClientId(int clientId)
285 {
286     clientId_ = clientId;
287 }
288 
GetClientId() const289 int BleScanFilterImpl::GetClientId() const
290 {
291     return clientId_;
292 }
293 
SetFiltIndex(uint8_t filtIndex)294 void BleScanFilterImpl::SetFiltIndex(uint8_t filtIndex)
295 {
296     filtIndex_ = filtIndex;
297 }
298 
GetFiltIndex() const299 uint8_t BleScanFilterImpl::GetFiltIndex() const
300 {
301     return filtIndex_;
302 }
303 
SetFilterAction(uint8_t action)304 void BleScanFilterImpl::SetFilterAction(uint8_t action)
305 {
306     action_ = action;
307 }
308 
GetFilterAction() const309 uint8_t BleScanFilterImpl::GetFilterAction() const
310 {
311     return action_;
312 }
313 
314 /**
315  * @brief Check if the device service is connectable.
316  *
317  * @return Returns <b>true</b> if device service is connectable;
318  *         Returns <b>false</b> otherwise.
319  * @since 6
320  */
IsConnectable() const321 bool BleAdvertiserSettingsImpl::IsConnectable() const
322 {
323     return connectable_;
324 }
325 
326 /**
327  * @brief Set whether the device service is connectable.
328  *
329  * @param connectable Whether the device service is connectable.
330  * @since 6
331  */
SetConnectable(bool connectable)332 void BleAdvertiserSettingsImpl::SetConnectable(bool connectable)
333 {
334     connectable_ = connectable;
335 }
336 
337 /**
338  * @brief Check if the advertiser is in legacy mode.
339  *
340  * @return Returns <b>true</b> if the advertiser is in legacy mode;
341  *         Returns <b>false</b> otherwisee.
342  * @since 6
343  */
IsLegacyMode() const344 bool BleAdvertiserSettingsImpl::IsLegacyMode() const
345 {
346     return legacyMode_;
347 }
348 
349 /**
350  * @brief Set whether to enable the legacy mode.
351  *
352  * @param connectable Whether to enable the legacy mode
353  * @since 6
354  */
SetLegacyMode(bool legacyMode)355 void BleAdvertiserSettingsImpl::SetLegacyMode(bool legacyMode)
356 {
357     legacyMode_ = legacyMode;
358 }
359 
360 /**
361  * @brief Get advertise interval.
362  *
363  * @return Returns the advertising interval.
364  * @since 6
365  */
GetInterval() const366 int BleAdvertiserSettingsImpl::GetInterval() const
367 {
368     return interval_;
369 }
370 
371 /**
372  * @brief Set advertise interval.
373  *
374  * @param interval Advertise interval.
375  * @since 6
376  */
SetInterval(int interval)377 void BleAdvertiserSettingsImpl::SetInterval(int interval)
378 {
379     interval_ = interval;
380 }
381 
382 /**
383  * @brief Get the advertiser Tx power.
384  *
385  * @return Returns advertiser Tx power.
386  * @since 6
387  */
GetTxPower() const388 int8_t BleAdvertiserSettingsImpl::GetTxPower() const
389 {
390     return txPower_;
391 }
392 
393 /**
394  * @brief Set the advertiser Tx power.
395  *
396  * @param txPower the advertiser Tx power.
397  * @since 6
398  */
SetTxPower(int8_t txPower)399 void BleAdvertiserSettingsImpl::SetTxPower(int8_t txPower)
400 {
401     txPower_ = txPower;
402 }
403 
404 /**
405  * @brief Get the primary phy.
406  *
407  * @return Returns the primary phy.
408  * @since 6
409  */
GetPrimaryPhy() const410 int BleAdvertiserSettingsImpl::GetPrimaryPhy() const
411 {
412     return primaryPhy_;
413 }
414 
415 /**
416  * @brief Set the primary phy.
417  *
418  * @param primaryPhy Primary phy.
419  * @since 6
420  */
SetPrimaryPhy(int primaryPhy)421 void BleAdvertiserSettingsImpl::SetPrimaryPhy(int primaryPhy)
422 {
423     primaryPhy_ = primaryPhy;
424 }
425 
426 /**
427  * @brief Get the secondary Phy.
428  *
429  * @return Returns primary phy.
430  * @since 6
431  */
GetSecondaryPhy() const432 int BleAdvertiserSettingsImpl::GetSecondaryPhy() const
433 {
434     return secondaryPhy_;
435 }
436 
437 /**
438  * @brief Set the secondary phy.
439  *
440  * @param secondaryPhy Secondary Phy.
441  * @since 6
442  */
SetSecondaryPhy(int secondaryPhy)443 void BleAdvertiserSettingsImpl::SetSecondaryPhy(int secondaryPhy)
444 {
445     secondaryPhy_ = secondaryPhy;
446 }
447 
448 /**
449  * @brief Get own address.
450  *
451  * @param addr Own address.
452  * @since 6
453  */
GetOwnAddr() const454 std::array<uint8_t, RawAddress::BT_ADDRESS_BYTE_LEN> BleAdvertiserSettingsImpl::GetOwnAddr() const
455 {
456     return ownAddr_;
457 }
458 
459 /**
460  * @brief Set own address.
461  *
462  * @param addr Own address.
463  * @since 6
464  */
SetOwnAddr(const std::array<uint8_t,RawAddress::BT_ADDRESS_BYTE_LEN> & addr)465 void BleAdvertiserSettingsImpl::SetOwnAddr(const std::array<uint8_t, RawAddress::BT_ADDRESS_BYTE_LEN>& addr)
466 {
467     ownAddr_ = addr;
468 }
469 
470 /**
471  * @brief Get own address type.
472  *
473  * @return Returns own address type.
474  * @since 6
475  */
GetOwnAddrType() const476 int8_t BleAdvertiserSettingsImpl::GetOwnAddrType() const
477 {
478     return ownAddrType_;
479 }
480 
481 /**
482  * @brief Set own address type.
483  *
484  * @param addrType Own address type.
485  * @since 6
486  */
SetOwnAddrType(int8_t addrType)487 void BleAdvertiserSettingsImpl::SetOwnAddrType(int8_t addrType)
488 {
489     ownAddrType_ = addrType;
490 }
491 
492 /**
493  * @brief A constructor used to create a <b>BleAdvertiseDataInternal</b> instance.
494  *
495  * @since 6
496  */
BleAdvertiserDataImpl()497 BleAdvertiserDataImpl::BleAdvertiserDataImpl() : payload_()
498 {}
499 
500 /**
501  * @brief Add manufacturer data.
502  *
503  * @param manufacturerId manufacturer Id which addad data.
504  * @param data manufacturer data
505  * @since 6
506  */
AddManufacturerData(uint16_t manufacturerId,const std::string & data)507 int BleAdvertiserDataImpl::AddManufacturerData(uint16_t manufacturerId, const std::string &data)
508 {
509     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
510     cdata[0] = static_cast<char>(manufacturerId & 0xFF);
511     cdata[1] = static_cast<char>((manufacturerId >> BLE_ONE_BYTE_LEN) & 0xFF);
512     SetManufacturerData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + data);
513 
514     return RET_NO_ERROR;
515 }
516 
517 /**
518  * @brief Add service data.
519  *
520  * @param uuid Uuid of service data.
521  * @param data Service data.
522  * @since 6
523  */
AddServiceData(const Uuid & uuid,const std::string & data)524 void BleAdvertiserDataImpl::AddServiceData(const Uuid &uuid, const std::string &data)
525 {
526     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
527     switch (uuid.GetUuidType()) {
528         case Uuid::UUID16_BYTES_TYPE: {
529             /// [Len] [0x16] [UUID16] data
530             cdata[0] = data.length() + BLE_UUID_LEN_16 + 1;
531             cdata[1] = BLE_AD_TYPE_SERVICE_DATA;  /// 0x16
532             uint16_t uuid16 = uuid.ConvertTo16Bits();
533             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
534                     std::string(reinterpret_cast<char *>(&uuid16), BLE_UUID_LEN_16) + data);
535             break;
536         }
537 
538         case Uuid::UUID32_BYTES_TYPE: {
539             /// [Len] [0x20] [UUID32] data
540             cdata[0] = data.length() + BLE_UUID_LEN_32 + 1;
541             cdata[1] = BLE_AD_TYPE_32SERVICE_DATA;  /// 0x20
542             uint32_t uuid32 = uuid.ConvertTo32Bits();
543             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
544                     std::string(reinterpret_cast<char *>(&uuid32), BLE_UUID_LEN_32) + data);
545             break;
546         }
547 
548         case Uuid::UUID128_BYTES_TYPE: {
549             /// [Len] [0x21] [UUID128] data
550             cdata[0] = data.length() + BLE_UUID_LEN_128 + 1;
551             cdata[1] = BLE_AD_TYPE_128SERVICE_DATA;  /// 0x21
552             uint8_t uuidData[BLE_UUID_LEN_128];
553             uuid.ConvertToBytesLE(uuidData);
554             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
555                     std::string(reinterpret_cast<char *>(uuidData), BLE_UUID_LEN_128) + data);
556             break;
557         }
558 
559         default:
560             return;
561     }
562 }
563 
564 /**
565  * @brief Add characteristic value.
566  *
567  * @param advertiser type of the field.
568  * @param advertiser data.
569  * @since 6
570  */
AddCharacteristicValue(uint8_t adtype,const std::string & data)571 void BleAdvertiserDataImpl::AddCharacteristicValue(uint8_t adtype, const std::string &data)
572 {
573     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
574     cdata[0] = data.length() + 1;
575     cdata[1] = adtype;
576     AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + data);
577 }
578 
579 /**
580  * @brief Add service uuid.
581  *
582  * @param uuid Service uuid.
583  * @since 6
584  */
AddServiceUuid(const Uuid & uuid)585 void BleAdvertiserDataImpl::AddServiceUuid(const Uuid &uuid)
586 {
587     SetCompleteServices(uuid);
588 }
589 
590 /**
591  * @brief Add service uuids.
592  *
593  * @param uuid Service uuids.
594  * @since 12
595  */
AddServiceUuids(const std::vector<Uuid> & uuidVec)596 void BleAdvertiserDataImpl::AddServiceUuids(const std::vector<Uuid> &uuidVec)
597 {
598     if (uuidVec.empty()) {
599         return;
600     }
601     std::string serviceUuid16 = "";
602     std::string serviceUuid32 = "";
603     std::string serviceUuid128 = "";
604 
605     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
606     for (auto &uuid : uuidVec) {
607         if (uuid.GetUuidType() == Uuid::UUID16_BYTES_TYPE) {
608             uint16_t uuid16 = uuid.ConvertTo16Bits();
609             serviceUuid16.append(std::string(reinterpret_cast<char *>(&uuid16), BLE_UUID_LEN_16));
610         } else if (uuid.GetUuidType() == Uuid::UUID32_BYTES_TYPE) {
611             uint32_t uuid32 = uuid.ConvertTo32Bits();
612             serviceUuid32.append(std::string(reinterpret_cast<char *>(&uuid32), BLE_UUID_LEN_32));
613         } else {
614             uint8_t uuidData[BLE_UUID_LEN_128];
615             uuid.ConvertToBytesLE(uuidData);
616             serviceUuid128.append(std::string(reinterpret_cast<char *>(uuidData), BLE_UUID_LEN_128));
617         }
618     }
619 
620     if (!serviceUuid16.empty()) {
621         cdata[0] = serviceUuid16.size() + 1; // 1指BLE_AD_TYPE_16SRV_CMPL标识
622         cdata[1] = BLE_AD_TYPE_16SRV_CMPL; // 0x03
623         AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + serviceUuid16);
624     }
625     if (!serviceUuid32.empty()) {
626         cdata[0] = serviceUuid32.size() + 1; // 1 指 BLE_AD_TYPE_32SRV_CMPL 标识
627         cdata[1] = BLE_AD_TYPE_32SRV_CMPL; // 0x05
628         AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + serviceUuid32);
629     }
630     if (!serviceUuid128.empty()) {
631         cdata[0] = serviceUuid128.size() + 1; // 1 指 BLE_AD_TYPE_128SRV_CMPL 标识
632         cdata[1] = BLE_AD_TYPE_128SRV_CMPL; // 0x07
633         AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + serviceUuid128);
634     }
635 }
636 
637 /**
638  * @brief Set device appearance.
639  *
640  * @param appearance Device appearance.
641  * @since 6
642  */
SetAppearance(uint16_t appearance)643 void BleAdvertiserDataImpl::SetAppearance(uint16_t appearance)
644 {
645     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
646     cdata[0] = BLE_ADV_DATA_BYTE_FIELD_LEN;
647     cdata[1] = BLE_AD_TYPE_APPEARANCE;  /// 0x19
648     AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
649             std::string(reinterpret_cast<char *>(&appearance), BLE_ADV_DATA_FIELD_TYPE_AND_LEN));
650 }
651 
652 /**
653  * @brief Set complete services.
654  *
655  * @param uuid Service uuid.
656  * @since 6
657  */
SetCompleteServices(const Uuid & uuid)658 void BleAdvertiserDataImpl::SetCompleteServices(const Uuid &uuid)
659 {
660     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
661     switch (uuid.GetUuidType()) {
662         case Uuid::UUID16_BYTES_TYPE: {
663             /// [Len] [0x02] [LL] [HH]
664             cdata[0] = BLE_UUID_LEN_16 + 1;
665             cdata[1] = BLE_AD_TYPE_16SRV_CMPL;  /// 0x03
666             uint16_t uuid16 = uuid.ConvertTo16Bits();
667             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
668                     std::string(reinterpret_cast<char *>(&uuid16), BLE_UUID_LEN_16));
669             break;
670         }
671 
672         case Uuid::UUID32_BYTES_TYPE: {
673             /// [Len] [0x04] [LL] [LL] [HH] [HH]
674             cdata[0] = BLE_UUID_LEN_32 + 1;
675             cdata[1] = BLE_AD_TYPE_32SRV_CMPL;  /// 0x05
676             uint32_t uuid32 = uuid.ConvertTo32Bits();
677             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
678                     std::string(reinterpret_cast<char *>(&uuid32), BLE_UUID_LEN_32));
679             break;
680         }
681 
682         case Uuid::UUID128_BYTES_TYPE: {
683             /// [Len] [0x04] [0] [1] ... [15]
684             cdata[0] = BLE_UUID_LEN_128 + 1;
685             cdata[1] = BLE_AD_TYPE_128SRV_CMPL;  /// 0x07
686             uint8_t uuidData[BLE_UUID_LEN_128];
687             uuid.ConvertToBytesLE(uuidData);
688             AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) +
689                     std::string(reinterpret_cast<char *>(uuidData), BLE_UUID_LEN_128));
690             break;
691         }
692 
693         default:
694             return;
695     }
696 }
697 
698 /**
699  * @brief Set advertiser flag.
700  *
701  * @param flag Advertiser flag.
702  * @since 6
703  */
SetFlags(uint8_t flag)704 void BleAdvertiserDataImpl::SetFlags(uint8_t flag)
705 {
706     char cdata[BLE_ADV_DATA_BYTE_FIELD_LEN];
707     cdata[0] = BLE_ADV_DATA_FIELD_TYPE_AND_LEN;
708     cdata[1] = BLE_AD_TYPE_FLAG;  /// 0x01
709     cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN] = flag;
710     advFlag_ = flag;
711     AddData(std::string(cdata, BLE_ADV_DATA_BYTE_FIELD_LEN));
712 }
713 
GetFlags() const714 uint8_t BleAdvertiserDataImpl::GetFlags() const
715 {
716     return advFlag_;
717 }
718 
719 /**
720  * @brief Set manufacturer data.
721  *
722  * @param data manufacturer data.
723  * @since 6
724  */
SetManufacturerData(const std::string & data)725 void BleAdvertiserDataImpl::SetManufacturerData(const std::string &data)
726 {
727     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
728     cdata[0] = data.length() + 1;
729     cdata[1] = BLE_AD_MANUFACTURER_SPECIFIC_TYPE;  /// 0xff
730     AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + data);
731 }
732 
733 /**
734  * @brief Set device name.
735  *
736  * @param name Device name.
737  * @since 6
738  */
SetDeviceName(const std::string & name)739 void BleAdvertiserDataImpl::SetDeviceName(const std::string &name)
740 {
741     if (name.length() > DEVICE_NAME_MAX_LEN) {
742         SetLongName(name);
743     } else {
744         SetShortName(name);
745     }
746 }
747 
748 /**
749  * @brief Set Tx power level.
750  *
751  * @param txPowerLevel Tx power level.
752  * @since 6
753  */
SetTxPowerLevel(uint8_t txPowerLevel)754 void BleAdvertiserDataImpl::SetTxPowerLevel(uint8_t txPowerLevel)
755 {
756     char cdata[BLE_ADV_DATA_BYTE_FIELD_LEN];
757     cdata[0] = BLE_ADV_DATA_FIELD_TYPE_AND_LEN;
758     cdata[1] = BLE_AD_TYPE_TX_PWR;  /// 0x09
759     cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN] = txPowerLevel;
760     AddData(std::string(cdata, BLE_ADV_DATA_BYTE_FIELD_LEN));
761 }
762 
763 /**
764  * @brief Add service data.
765  *
766  * @param data Service data.
767  * @since 6
768  */
AddData(std::string data)769 void BleAdvertiserDataImpl::AddData(std::string data)
770 {
771     payload_.append(data);
772 }
773 
774 /**
775  * @brief Get advertiser data packet.
776  *
777  * @return Returns advertiser data packet.
778  * @since 6
779  */
SetPayload(const std::string & payload)780 void BleAdvertiserDataImpl::SetPayload(const std::string &payload)
781 {
782     payload_ = payload;
783 }
784 
785 /**
786  * @brief Get advertiser data packet.
787  *
788  * @return Returns advertiser data packet.
789  * @since 6
790  */
GetPayload() const791 std::string BleAdvertiserDataImpl::GetPayload() const
792 {
793     return payload_;
794 }
795 
796 /**
797  * @brief Set advertiser data long name.
798  *
799  * @param name Bluetooth device name.
800  * @since 6
801  */
SetLongName(const std::string & name)802 void BleAdvertiserDataImpl::SetLongName(const std::string &name)
803 {
804     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
805     // A shortened name only contain 26 contiguous characters from the beginning of the full name.
806     cdata[0] = DEVICE_NAME_MAX_LEN + 1;
807     cdata[1] = BLE_AD_TYPE_NAME_SHORT;  /// 0x08
808     AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + name.substr(0, DEVICE_NAME_MAX_LEN));
809 }
810 
811 /**
812  * @brief Set advertiser data short name.
813  *
814  * @param name Bluetooth device name.
815  * @since 6
816  */
SetShortName(const std::string & name)817 void BleAdvertiserDataImpl::SetShortName(const std::string &name)
818 {
819     char cdata[BLE_ADV_DATA_FIELD_TYPE_AND_LEN];
820     cdata[0] = name.length() + 1;
821     cdata[1] = BLE_AD_TYPE_NAME_CMPL;  /// 0x09
822     AddData(std::string(cdata, BLE_ADV_DATA_FIELD_TYPE_AND_LEN) + name);
823 }
824 
BlePeripheralDevice()825 BlePeripheralDevice::BlePeripheralDevice()
826     : manufacturerData_(),
827       name_(),
828       serviceUUIDs_(),
829       txPower_(BLE_ADDR_TYPE_RANDOM),
830       serviceData_(),
831       serviceDataUUIDs_(),
832       pairState_(BLE_PAIR_NONE),
833       ioCapability_(BLE_IO_CAP_NONE),
834       aliasName_()
835 {
836     manufacturerData_.clear();
837     serviceDataUUIDs_.clear();
838     serviceData_.clear();
839     serviceUUIDs_.clear();
840 }
841 
~BlePeripheralDevice()842 BlePeripheralDevice::~BlePeripheralDevice()
843 {
844     manufacturerData_.clear();
845     serviceUUIDs_.clear();
846     serviceData_.clear();
847     serviceDataUUIDs_.clear();
848 }
849 
850 /**
851  * @brief Get device address.
852  *
853  * @return Returns device address.
854  * @since 6
855  */
GetRawAddress() const856 RawAddress BlePeripheralDevice::GetRawAddress() const
857 {
858     return address_;
859 }
860 
861 /**
862  * @brief Get device appearance.
863  *
864  * @return Returns the device appearance.
865  * @since 6
866  */
GetAppearance() const867 uint16_t BlePeripheralDevice::GetAppearance() const
868 {
869     return appearance_;
870 }
871 
872 /**
873  * @brief Get the manufacturer data.
874  *
875  * @return Returns the manufacturer data.
876  * @since 6
877  */
GetManufacturerData() const878 std::map<uint16_t, std::string> BlePeripheralDevice::GetManufacturerData() const
879 {
880     return manufacturerData_;
881 }
882 
883 /**
884  * @brief the device name.
885  *
886  * @return Returns device Name.
887  * @since 6
888  */
GetName() const889 std::string BlePeripheralDevice::GetName() const
890 {
891     return name_;
892 }
893 
894 /**
895  * @brief Get device RSSI.
896  *
897  * @return Returns device RSSI.
898  * @since 6
899  */
GetRSSI() const900 int8_t BlePeripheralDevice::GetRSSI() const
901 {
902     return rssi_;
903 }
904 
905 /**
906  * @brief Get service data.
907  *
908  * @return Returns service data.
909  * @since 6
910  */
GetServiceData() const911 std::vector<std::string> BlePeripheralDevice::GetServiceData() const
912 {
913     return serviceData_;
914 }
915 
916 /**
917  * @brief Get Service Data.
918  *
919  * @param index Service data index.
920  * @return Returns service data.
921  * @since 6
922  */
GetServiceData(int index) const923 std::string BlePeripheralDevice::GetServiceData(int index) const
924 {
925     return serviceData_.empty() ? "" :
926         (static_cast<size_t>(index) < serviceData_.size() ? serviceData_[index] : "");
927 }
928 
929 /**
930  * @brief Get service data UUID.
931  *
932  * @return Returns service data UUID.
933  * @since 6
934  */
GetServiceDataUUID() const935 std::vector<Uuid> BlePeripheralDevice::GetServiceDataUUID() const
936 {
937     return serviceDataUUIDs_;
938 }
939 
940 /**
941  * @brief Get service data UUID.
942  *
943  * @param index Service data index.
944  * @return Returns service data UUID.
945  * @since 6
946  */
GetServiceDataUUID(int index) const947 Uuid BlePeripheralDevice::GetServiceDataUUID(int index) const
948 {
949     Uuid uuid {};
950     return serviceDataUUIDs_.empty() ? uuid : serviceDataUUIDs_[index];
951 }
952 
953 /**
954  * @brief Get the service UUID.
955  *
956  * @return Returns service UUID.
957  * @since 6
958  */
GetServiceUUID() const959 std::vector<Uuid> BlePeripheralDevice::GetServiceUUID() const
960 {
961     return serviceUUIDs_;
962 }
963 
964 /**
965  * @brief Get service UUID.
966  *
967  * @param index Service UUID index.
968  * @return Return service UUID.
969  * @since 6
970  */
GetServiceUUID(int index) const971 Uuid BlePeripheralDevice::GetServiceUUID(int index) const
972 {
973     Uuid uuid {};
974     return serviceUUIDs_.empty() ? uuid : serviceUUIDs_[index];
975 }
976 
977 /**
978  * @brief Get address type.
979  *
980  * @return Returns address type.
981  * @since 6
982  */
GetAddressType() const983 int BlePeripheralDevice::GetAddressType() const
984 {
985     return addressType_;
986 }
987 
988 /**
989  * @brief Set address type.
990  *
991  * @param type Address type.
992  * @since 6
993  */
SetAddressType(int type)994 void BlePeripheralDevice::SetAddressType(int type)
995 {
996     addressType_ = type;
997 }
998 
999 /**
1000  * @brief Check if manufacturer data is included.
1001  *
1002  * @return Returns <b>true</b> if manufacturer data is included;
1003  *         Returns <b>false</b> otherwise.
1004  * @since 6
1005  */
IsManufacturerData() const1006 bool BlePeripheralDevice::IsManufacturerData() const
1007 {
1008     return isManufacturerData_;
1009 }
1010 
1011 /**
1012  * @brief Check if the device RSSI is included.
1013  *
1014  * @return Returns <b>true</b> if include device rssi;
1015  *         Returns <b>false</b> otherwise.
1016  * @since 6
1017  */
IsRSSI() const1018 bool BlePeripheralDevice::IsRSSI() const
1019 {
1020     return isRSSI_;
1021 }
1022 
1023 /**
1024  * @brief Check if service data is included.
1025  *
1026  * @return Returns <b>true</b> if include service data;
1027  *         Returns <b>false</b> otherwise.
1028  * @since 6
1029  */
IsServiceData() const1030 bool BlePeripheralDevice::IsServiceData() const
1031 {
1032     return isServiceData_;
1033 }
1034 
1035 /**
1036  * @brief Check if the service UUID is included.
1037  *
1038  * @return Returns <b>true</b> if the service UUID is included;
1039  *         Returns <b>false</b> otherwise.
1040  * @since 6
1041  */
IsServiceUUID() const1042 bool BlePeripheralDevice::IsServiceUUID() const
1043 {
1044     return isServiceUUID_;
1045 }
1046 
IsName(void) const1047 bool BlePeripheralDevice::IsName(void) const
1048 {
1049     return isName_;
1050 }
1051 
1052 /**
1053  * @brief Set device address.
1054  *
1055  * @param address device address.
1056  * @since 6
1057  */
SetAddress(const RawAddress & address)1058 void BlePeripheralDevice::SetAddress(const RawAddress &address)
1059 {
1060     address_ = address;
1061 }
1062 
1063 /**
1064  * @brief Set RSSI value.
1065  *
1066  * @param RSSI value.
1067  * @since 6
1068  */
SetRSSI(int8_t rssi)1069 void BlePeripheralDevice::SetRSSI(int8_t rssi)
1070 {
1071     rssi_ = rssi;
1072     isRSSI_ = true;
1073 }
1074 /**
1075  * @brief Check whether device is connectable.
1076  *
1077  * @param [in] rssi value.
1078  * return Returns <b>true</b> if device is connectable.
1079  *        Returns <b>false</b> otherwisee.
1080  */
IsConnectable() const1081 bool BlePeripheralDevice::IsConnectable() const
1082 {
1083     return connectable_;
1084 }
1085 
1086 /**
1087  * @brief Sets whether the peer device is connectable.
1088  *
1089  * @param peer device's connectable.
1090  */
SetConnectable(bool connectable)1091 void BlePeripheralDevice::SetConnectable(bool connectable)
1092 {
1093     connectable_ = connectable;
1094 }
1095 
1096 /**
1097  * @brief Sets adv event type.
1098  *
1099  * @param peer adv event type.
1100  */
SetEventType(uint16_t eventType)1101 void BlePeripheralDevice::SetEventType(uint16_t eventType)
1102 {
1103     eventType_ = eventType;
1104     isEventType_ = true;
1105 }
1106 
1107 /**
1108  * @brief Check whether adv event type is included.
1109  *
1110  * return Returns <b>true</b> if event type is included.
1111  *        Returns <b>false</b> otherwisee.
1112  */
IsEventType() const1113 bool BlePeripheralDevice::IsEventType() const
1114 {
1115     return isEventType_;
1116 }
1117 
1118 /**
1119  * @brief Get adv event type.
1120  *
1121  * @return adv event type
1122  */
GetEventType() const1123 uint16_t BlePeripheralDevice::GetEventType() const
1124 {
1125     return eventType_;
1126 }
1127 
1128 /**
1129  * @brief Parse advertisement packets.
1130  *
1131  * @param payload Advertisement packet.
1132  * @param total_len Advertisement packet length.
1133  * @since 6
1134  */
ParseAdvertiserment(BlePeripheralDeviceParseAdvData & parseAdvData)1135 void BlePeripheralDevice::ParseAdvertiserment(BlePeripheralDeviceParseAdvData &parseAdvData)
1136 {
1137     size_t sizeConsumed = 0;
1138     bool finished = false;
1139     size_t totalLength = parseAdvData.length;
1140     payload_ = parseAdvData.payload;
1141     payloadLen_ = parseAdvData.length;
1142 
1143     while (!finished) {
1144         size_t length = *parseAdvData.payload;
1145         sizeConsumed += 1 + length;
1146         if (sizeConsumed > totalLength) {
1147             break;
1148         }
1149         parseAdvData.payload++;
1150 
1151         if (length != 0) {
1152             uint8_t advType = *parseAdvData.payload;
1153             parseAdvData.payload++;
1154             length--;
1155             parseAdvData.length = length;
1156             BuildAdvertiserData(advType, parseAdvData);
1157             parseAdvData.payload += length;
1158         }
1159         if (sizeConsumed >= totalLength) {
1160             finished = true;
1161         }
1162     }
1163 }
1164 
BuildAdvertiserData(uint8_t advType,BlePeripheralDeviceParseAdvData & parseAdvData)1165 void BlePeripheralDevice::BuildAdvertiserData(uint8_t advType, BlePeripheralDeviceParseAdvData &parseAdvData)
1166 {
1167     switch (advType) {
1168         case BLE_AD_TYPE_NAME_CMPL:   /// Data Type: 0x09
1169         case BLE_AD_TYPE_NAME_SHORT:  /// Data Type: 0x08
1170             SetName(std::string(reinterpret_cast<char *>(parseAdvData.payload), parseAdvData.length));
1171             break;
1172         case BLE_AD_TYPE_TX_PWR:  /// Data Type: 0x0A
1173             SetTXPower(*parseAdvData.payload);
1174             break;
1175         case BLE_AD_TYPE_APPEARANCE:  /// Data Type: 0x19
1176             SetAppearance(*reinterpret_cast<uint16_t *>(parseAdvData.payload));
1177             break;
1178         case BLE_AD_TYPE_FLAG:  /// Data Type: 0x01
1179             SetAdFlag(*parseAdvData.payload);
1180             break;
1181         case BLE_AD_TYPE_16SRV_CMPL:
1182         case BLE_AD_TYPE_16SRV_PART:  /// Data Type: 0x02
1183             SetServiceUUID16Bits(parseAdvData);
1184             break;
1185         case BLE_AD_TYPE_32SRV_CMPL:
1186         case BLE_AD_TYPE_32SRV_PART:  /// Data Type: 0x04
1187             SetServiceUUID32Bits(parseAdvData);
1188             break;
1189         case BLE_AD_TYPE_128SRV_CMPL:  /// Data Type: 0x07
1190         case BLE_AD_TYPE_128SRV_PART:  /// Data Type: 0x06
1191             SetServiceUUID128Bits(parseAdvData);
1192             break;
1193         case BLE_AD_MANUFACTURER_SPECIFIC_TYPE:
1194             SetManufacturerData(std::string(reinterpret_cast<char *>(parseAdvData.payload), parseAdvData.length));
1195             break;
1196         case BLE_AD_TYPE_SERVICE_DATA:  /// Data Type: 0x16
1197             SetServiceDataUUID16Bits(parseAdvData);
1198             break;
1199         case BLE_AD_TYPE_32SERVICE_DATA:  /// Data Type: 0x20
1200             SetServiceDataUUID32Bits(parseAdvData);
1201             break;
1202         case BLE_AD_TYPE_128SERVICE_DATA:  /// Data Type: 0x21
1203             SetServiceDataUUID128Bits(parseAdvData);
1204             break;
1205         default:
1206             break;
1207     }
1208 }
1209 
SetServiceUUID16Bits(BlePeripheralDeviceParseAdvData & parseAdvData)1210 void BlePeripheralDevice::SetServiceUUID16Bits(BlePeripheralDeviceParseAdvData &parseAdvData)
1211 {
1212     for (size_t var = 0; var < parseAdvData.length / BLE_UUID_LEN_16; ++var) {
1213         SetServiceUUID(
1214             Uuid::ConvertFrom16Bits(*reinterpret_cast<uint16_t *>(parseAdvData.payload + var * BLE_UUID_LEN_16)));
1215     }
1216 }
1217 
SetServiceUUID32Bits(BlePeripheralDeviceParseAdvData & parseAdvData)1218 void BlePeripheralDevice::SetServiceUUID32Bits(BlePeripheralDeviceParseAdvData &parseAdvData)
1219 {
1220     for (size_t var = 0; var < parseAdvData.length / BLE_UUID_LEN_32; ++var) {
1221         SetServiceUUID(
1222             Uuid::ConvertFrom32Bits(*reinterpret_cast<uint32_t *>(parseAdvData.payload + var * BLE_UUID_LEN_32)));
1223     }
1224 }
1225 
SetServiceUUID128Bits(const BlePeripheralDeviceParseAdvData & parseAdvData)1226 void BlePeripheralDevice::SetServiceUUID128Bits(const BlePeripheralDeviceParseAdvData &parseAdvData)
1227 {
1228     for (size_t var = 0; var < parseAdvData.length / BLE_UUID_LEN_128; ++var) {
1229         std::array<uint8_t, BLE_UUID_LEN_128> data = {};
1230         for (int i = 0; i < BLE_UUID_LEN_128; i++) {
1231             data[i] = *(parseAdvData.payload + var * BLE_UUID_LEN_128 + i);
1232         }
1233         SetServiceUUID(Uuid::ConvertFromBytesLE(data.data()));
1234     }
1235 }
1236 
SetServiceDataUUID16Bits(BlePeripheralDeviceParseAdvData & parseAdvData)1237 void BlePeripheralDevice::SetServiceDataUUID16Bits(BlePeripheralDeviceParseAdvData &parseAdvData)
1238 {
1239     if (parseAdvData.length < BLE_UUID_LEN_16) {
1240         return;
1241     }
1242     uint16_t uuid = *(reinterpret_cast<uint16_t *>(parseAdvData.payload));
1243     std::string data = "";
1244     if (parseAdvData.length > BLE_UUID_LEN_16) {
1245         data = std::string(
1246             reinterpret_cast<char *>(parseAdvData.payload + BLE_UUID_LEN_16), parseAdvData.length - BLE_UUID_LEN_16);
1247     }
1248     SetServiceDataUUID(Uuid::ConvertFrom16Bits(uuid), data);
1249 }
1250 
SetServiceDataUUID32Bits(BlePeripheralDeviceParseAdvData & parseAdvData)1251 void BlePeripheralDevice::SetServiceDataUUID32Bits(BlePeripheralDeviceParseAdvData &parseAdvData)
1252 {
1253     if (parseAdvData.length < BLE_UUID_LEN_32) {
1254         return;
1255     }
1256     uint32_t uuid = *(reinterpret_cast<uint32_t *>(parseAdvData.payload));
1257     std::string data = "";
1258     if (parseAdvData.length > BLE_UUID_LEN_32) {
1259         data = std::string(
1260             reinterpret_cast<char *>(parseAdvData.payload + BLE_UUID_LEN_32), parseAdvData.length - BLE_UUID_LEN_32);
1261     }
1262     SetServiceDataUUID(Uuid::ConvertFrom32Bits(uuid), data);
1263 }
1264 
SetServiceDataUUID128Bits(BlePeripheralDeviceParseAdvData & parseAdvData)1265 void BlePeripheralDevice::SetServiceDataUUID128Bits(BlePeripheralDeviceParseAdvData &parseAdvData)
1266 {
1267     if (parseAdvData.length < BLE_UUID_LEN_128) {
1268         return;
1269     }
1270     std::string data = "";
1271     if (parseAdvData.length > BLE_UUID_LEN_128) {
1272         data = std::string(
1273             reinterpret_cast<char *>(parseAdvData.payload + BLE_UUID_LEN_128), parseAdvData.length - BLE_UUID_LEN_128);
1274     }
1275     SetServiceDataUUID(Uuid::ConvertFromBytesLE(parseAdvData.payload), data);
1276 }
1277 
1278 /**
1279  * @brief Set device name.
1280  *
1281  * @param name Device name.
1282  * @since 6
1283  */
SetName(const std::string & name)1284 void BlePeripheralDevice::SetName(const std::string &name)
1285 {
1286     name_ = name;
1287     isName_ = true;
1288 }
1289 
1290 /**
1291  * @brief Set device roles.
1292  *
1293  * @param roles Device roles.
1294  * @since 6
1295  */
SetRoles(uint8_t roles)1296 void BlePeripheralDevice::SetRoles(uint8_t roles)
1297 {
1298     roles_ = roles;
1299 }
1300 
1301 /**
1302  * @brief Set bonded from local.
1303  *
1304  * @param flag Advertiser flag.
1305  * @since 6
1306  */
SetBondedFromLocal(bool flag)1307 void BlePeripheralDevice::SetBondedFromLocal(bool flag)
1308 {
1309     bondFlag_ = flag;
1310 }
1311 
1312 /**
1313  * @brief Set acl connection state.
1314  *
1315  * @param connectState Acl connection state.
1316  * @since 6
1317  */
SetAclConnectState(int connectState)1318 void BlePeripheralDevice::SetAclConnectState(int connectState)
1319 {
1320     aclConnected_ = connectState;
1321 }
1322 
1323 /**
1324  * @brief Set acl connection handle.
1325  *
1326  * @param handle Acl connection handle.
1327  * @since 6
1328  */
SetConnectionHandle(int handle)1329 void BlePeripheralDevice::SetConnectionHandle(int handle)
1330 {
1331     connectionHandle_ = handle;
1332 }
1333 
1334 /**
1335  * @brief Check if device acl is connected.
1336  *
1337  * @return Returns <b>true</b> if device acl is connected;
1338  *         Returns <b>false</b> otherwise.
1339  * @since 6
1340  */
IsAclConnected() const1341 bool BlePeripheralDevice::IsAclConnected() const
1342 {
1343     if (aclConnected_ != BLE_CONNECTION_STATE_DISCONNECTED) {
1344         return true;
1345     } else {
1346         return false;
1347     }
1348 }
1349 
1350 /**
1351  * @brief Check if device acl Encrypted.
1352  *
1353  * @return Returns <b>true</b> if device acl is Encrypted;
1354  *         Returns <b>false</b> otherwise.
1355  * @since 6
1356  */
IsAclEncrypted() const1357 bool BlePeripheralDevice::IsAclEncrypted() const
1358 {
1359     if (aclConnected_ > BLE_CONNECTION_STATE_CONNECTED) {
1360         return true;
1361     } else {
1362         return false;
1363     }
1364 }
1365 
1366 /**
1367  * @brief Check if device was bonded from local.
1368  *
1369  * @return Returns <b>true</b> if device was bonded from local;
1370  *         Returns <b>false</b> otherwise.
1371  * @since 6
1372  */
IsBondedFromLocal() const1373 bool BlePeripheralDevice::IsBondedFromLocal() const
1374 {
1375     return bondFlag_;
1376 }
1377 
1378 /**
1379  * @brief Get acl connection handle.
1380  *
1381  * @return Returns acl connection handle;
1382  * @since 6
1383  */
GetConnectionHandle() const1384 int BlePeripheralDevice::GetConnectionHandle() const
1385 {
1386     return connectionHandle_;
1387 }
1388 
1389 /**
1390  * @brief Get device type.
1391  *
1392  * @return Returns device type.
1393  * @since 6
1394  */
GetDeviceType() const1395 uint8_t BlePeripheralDevice::GetDeviceType() const
1396 {
1397     if ((adFlag_ & BLE_ADV_FLAG_BREDR_NOT_SPT) > 0) {
1398         return BLE_BT_DEVICE_TYPE_DUMO;
1399     }
1400     return BLE_BT_DEVICE_TYPE_BLE;
1401 }
1402 
1403 /**
1404  * @brief Get advertising flag.
1405  *
1406  * @return Returns advertising flag.
1407  * @since 6
1408  */
GetAdFlag() const1409 uint8_t BlePeripheralDevice::GetAdFlag() const
1410 {
1411     return adFlag_;
1412 }
1413 
1414 /**
1415  * @brief Get paired status.
1416  *
1417  * @return Returns paired status.
1418  * @since 6
1419  */
GetPairedStatus() const1420 uint8_t BlePeripheralDevice::GetPairedStatus() const
1421 {
1422     return pairState_;
1423 }
1424 
1425 /**
1426  * @brief Set paired status.
1427  *
1428  * @param status Paired status.
1429  * @return Returns <b>true</b> if the operation is successful;
1430  *         Returns <b>false</b> otherwise.
1431  * @since 6
1432  */
SetPairedStatus(uint8_t status)1433 bool BlePeripheralDevice::SetPairedStatus(uint8_t status)
1434 {
1435     if (status < BLE_PAIR_NONE || status > BLE_PAIR_CANCELING) {
1436         return false;
1437     }
1438     if (pairState_ == status) {
1439         return true;
1440     }
1441     pairState_ = status;
1442     return true;
1443 }
1444 
1445 /**
1446  * @brief Set alias name.
1447  *
1448  * @param name Device alias name.
1449  * @since 6
1450  */
SetAliasName(const std::string & name)1451 void BlePeripheralDevice::SetAliasName(const std::string &name)
1452 {
1453     aliasName_ = name;
1454 }
1455 
1456 /**
1457  * @brief Get alias name.
1458  *
1459  * @return Returns alias name.
1460  * @since 6
1461  */
GetAliasName() const1462 std::string BlePeripheralDevice::GetAliasName() const
1463 {
1464     return aliasName_;
1465 }
1466 
1467 /**
1468  * @brief Set IO capability.
1469  *
1470  * @param io IO capability
1471  * @since 6
1472  */
SetIoCapability(uint8_t io)1473 void BlePeripheralDevice::SetIoCapability(uint8_t io)
1474 {
1475     ioCapability_ = io;
1476 }
1477 
1478 /**
1479  * @brief Get IO capability.
1480  *
1481  * @return Returns IO capability.
1482  * @since 6
1483  */
GetIoCapability() const1484 uint8_t BlePeripheralDevice::GetIoCapability() const
1485 {
1486     return ioCapability_;
1487 }
1488 
1489 /**
1490  * @brief Set advertising flag.
1491  *
1492  * @param adFlag Advertising flag.
1493  * @since 6
1494  */
SetAdFlag(uint8_t adFlag)1495 void BlePeripheralDevice::SetAdFlag(uint8_t adFlag)
1496 {
1497     adFlag_ = adFlag;
1498 }
1499 
1500 /**
1501  * @brief Set device appearance.
1502  *
1503  * @param device Appearance.
1504  * @since 6
1505  */
SetAppearance(uint16_t appearance)1506 void BlePeripheralDevice::SetAppearance(uint16_t appearance)
1507 {
1508     appearance_ = appearance;
1509     isAppearance_ = true;
1510 }
1511 
1512 /**
1513  * @brief Set manufacturer data.
1514  *
1515  * @param manufacturerData Manufacturer data.
1516  * @since 6
1517  */
SetManufacturerData(std::string manufacturerData)1518 void BlePeripheralDevice::SetManufacturerData(std::string manufacturerData)
1519 {
1520     if (manufacturerData.size() > BLE_UUID_LEN_16) {
1521         uint16_t manufacturerId = uint8_t(manufacturerData[0]) | (uint16_t(manufacturerData[1]) << BLE_ONE_BYTE_LEN);
1522         std::map<uint16_t, std::string>::const_iterator iter = manufacturerData_.find(manufacturerId);
1523         if (iter == manufacturerData_.cend()) {
1524             manufacturerData_.insert(std::make_pair(manufacturerId, manufacturerData.substr(BLE_UUID_LEN_16)));
1525         }
1526         isManufacturerData_ = true;
1527     } else {
1528         manufacturerData_.clear();
1529         isManufacturerData_ = false;
1530     }
1531 }
1532 
1533 /**
1534  * @brief Set service data UUID.
1535  *
1536  * @param uuid Service data UUID.
1537  * @since 6
1538  */
SetServiceDataUUID(Uuid uuid,std::string data)1539 void BlePeripheralDevice::SetServiceDataUUID(Uuid uuid, std::string data)
1540 {
1541     isServiceData_ = true;
1542     auto iter = std::find(serviceDataUUIDs_.begin(), serviceDataUUIDs_.end(), uuid);
1543     if (iter == serviceDataUUIDs_.end()) {
1544         serviceDataUUIDs_.push_back(uuid);
1545         serviceData_.push_back(data);
1546     }
1547 }
1548 
1549 /**
1550  * @brief Set service UUID.
1551  *
1552  * @param serviceUUID Service UUID.
1553  * @since 6
1554  */
SetServiceUUID(Uuid serviceUUID)1555 void BlePeripheralDevice::SetServiceUUID(Uuid serviceUUID)
1556 {
1557     isServiceUUID_ = true;
1558     auto iter = std::find(serviceUUIDs_.begin(), serviceUUIDs_.end(), serviceUUID);
1559     if (iter == serviceUUIDs_.end()) {
1560         serviceUUIDs_.push_back(serviceUUID);
1561     }
1562 }
1563 /**
1564  * @brief Set TX power.
1565  *
1566  * @param txPower TX power.
1567  * @since 6
1568  */
SetTXPower(int8_t txPower)1569 void BlePeripheralDevice::SetTXPower(int8_t txPower)
1570 {
1571     isTXPower_ = true;
1572     txPower_ = txPower;
1573 }
1574 /**
1575  * @brief Get peripheral device.
1576  *
1577  * @return Returns peripheral device pointer.
1578  * @since 6
1579  */
GetPeripheralDevice() const1580 BlePeripheralDevice BleScanResultImpl::GetPeripheralDevice() const
1581 {
1582     return peripheralDevice_;
1583 }
1584 
1585 /**
1586  * @brief Set peripheral device.
1587  *
1588  * @param dev Peripheral device.
1589  * @since 6
1590  */
SetPeripheralDevice(const BlePeripheralDevice & dev)1591 void BleScanResultImpl::SetPeripheralDevice(const BlePeripheralDevice &dev)
1592 {
1593     peripheralDevice_ = dev;
1594 }
1595 
1596 /**
1597  * @brief Get advertiser data packet.
1598  *
1599  * @return Returns advertiser data packet.
1600  * @since 6
1601  */
GetPayload() const1602 uint8_t *BlePeripheralDevice::GetPayload() const
1603 {
1604     return payload_;
1605 }
1606 
1607 /**
1608  * @brief Get advertising packet length.
1609  *
1610  * @return Returns advertising packet length.
1611  * @since 6
1612  */
GetPayloadLen() const1613 size_t BlePeripheralDevice::GetPayloadLen() const
1614 {
1615     return payloadLen_;
1616 }
1617 }  // namespace bluetooth
1618 }  // namespace OHOS
1619