@@ -228,16 +228,16 @@ bool BLEAdvertisedDevice::haveTXPower() {
228
228
*
229
229
* https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
230
230
*/
231
- void BLEAdvertisedDevice::parseAdvertisement (uint8_t * payload) {
231
+ void BLEAdvertisedDevice::parseAdvertisement (uint8_t * payload, size_t total_len ) {
232
232
uint8_t length;
233
233
uint8_t ad_type;
234
234
uint8_t sizeConsumed = 0 ;
235
235
bool finished = false ;
236
236
setPayload (payload);
237
237
238
+ while (!finished) {
238
239
length = *payload; // Retrieve the length of the record.
239
240
payload++; // Skip to type
240
- while (!finished) {
241
241
sizeConsumed += 1 + length; // increase the size consumed.
242
242
243
243
if (length != 0 ) { // A length of 0 indicates that we have reached the end.
@@ -250,7 +250,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
250
250
ad_type, BLEUtils::advTypeToString (ad_type), length, pHex);
251
251
free (pHex);
252
252
253
- switch (ad_type) {
253
+ switch (ad_type) {
254
254
case ESP_BLE_AD_TYPE_NAME_CMPL: { // Adv Data Type: 0x09
255
255
setName (std::string (reinterpret_cast <char *>(payload), length));
256
256
break ;
@@ -273,15 +273,15 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
273
273
274
274
case ESP_BLE_AD_TYPE_16SRV_CMPL:
275
275
case ESP_BLE_AD_TYPE_16SRV_PART: { // Adv Data Type: 0x02
276
- for (int var = 0 ; var < length / 2 ; ++var) {
276
+ for (int var = 0 ; var < length/ 2 ; ++var) {
277
277
setServiceUUID (BLEUUID (*reinterpret_cast <uint16_t *>(payload + var * 2 )));
278
278
}
279
279
break ;
280
280
} // ESP_BLE_AD_TYPE_16SRV_PART
281
281
282
282
case ESP_BLE_AD_TYPE_32SRV_CMPL:
283
283
case ESP_BLE_AD_TYPE_32SRV_PART: { // Adv Data Type: 0x04
284
- for (int var = 0 ; var < length / 4 ; ++var) {
284
+ for (int var = 0 ; var < length/ 4 ; ++var) {
285
285
setServiceUUID (BLEUUID (*reinterpret_cast <uint32_t *>(payload + var * 4 )));
286
286
}
287
287
break ;
@@ -308,7 +308,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
308
308
ESP_LOGE (LOG_TAG, " Length too small for ESP_BLE_AD_TYPE_SERVICE_DATA" );
309
309
break ;
310
310
}
311
- uint16_t uuid = *(uint16_t *) payload;
311
+ uint16_t uuid = *(uint16_t *)payload;
312
312
setServiceDataUUID (BLEUUID (uuid));
313
313
if (length > 2 ) {
314
314
setServiceData (std::string (reinterpret_cast <char *>(payload + 2 ), length - 2 ));
@@ -335,7 +335,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
335
335
break ;
336
336
}
337
337
338
- setServiceDataUUID (BLEUUID (payload, (size_t ) 16 , false ));
338
+ setServiceDataUUID (BLEUUID (payload, (size_t )16 , false ));
339
339
if (length > 16 ) {
340
340
setServiceData (std::string (reinterpret_cast <char *>(payload + 16 ), length - 16 ));
341
341
}
@@ -351,7 +351,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
351
351
} // Length <> 0
352
352
353
353
354
- if (sizeConsumed >= 31 || length == 0 ) {
354
+ if (sizeConsumed >= total_len || length == 0 ) {
355
355
finished = true ;
356
356
}
357
357
} // !finished
@@ -514,5 +514,14 @@ void BLEAdvertisedDevice::setPayload(uint8_t* payload) {
514
514
m_payload = payload;
515
515
}
516
516
517
+ esp_ble_addr_type_t BLEAdvertisedDevice::getAddressType () {
518
+ return m_addressType;
519
+ }
520
+
521
+ void BLEAdvertisedDevice::setAddressType (esp_ble_addr_type_t type) {
522
+ m_addressType = type;
523
+ }
524
+
517
525
518
526
#endif /* CONFIG_BT_ENABLED */
527
+
0 commit comments