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