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