@@ -228,16 +228,16 @@ bool BLEAdvertisedDevice::haveTXPower() {
228228 *
229229 * https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
230230 */
231- void BLEAdvertisedDevice::parseAdvertisement (uint8_t * payload) {
231+ void BLEAdvertisedDevice::parseAdvertisement (uint8_t * payload, size_t total_len ) {
232232 uint8_t length;
233233 uint8_t ad_type;
234234 uint8_t sizeConsumed = 0 ;
235235 bool finished = false ;
236236 setPayload (payload);
237237
238+ while (!finished) {
238239 length = *payload; // Retrieve the length of the record.
239240 payload++; // Skip to type
240- while (!finished) {
241241 sizeConsumed += 1 + length; // increase the size consumed.
242242
243243 if (length != 0 ) { // A length of 0 indicates that we have reached the end.
@@ -250,7 +250,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
250250 ad_type, BLEUtils::advTypeToString (ad_type), length, pHex);
251251 free (pHex);
252252
253- switch (ad_type) {
253+ switch (ad_type) {
254254 case ESP_BLE_AD_TYPE_NAME_CMPL: { // Adv Data Type: 0x09
255255 setName (std::string (reinterpret_cast <char *>(payload), length));
256256 break ;
@@ -273,15 +273,15 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
273273
274274 case ESP_BLE_AD_TYPE_16SRV_CMPL:
275275 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) {
277277 setServiceUUID (BLEUUID (*reinterpret_cast <uint16_t *>(payload + var * 2 )));
278278 }
279279 break ;
280280 } // ESP_BLE_AD_TYPE_16SRV_PART
281281
282282 case ESP_BLE_AD_TYPE_32SRV_CMPL:
283283 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) {
285285 setServiceUUID (BLEUUID (*reinterpret_cast <uint32_t *>(payload + var * 4 )));
286286 }
287287 break ;
@@ -308,7 +308,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
308308 ESP_LOGE (LOG_TAG, " Length too small for ESP_BLE_AD_TYPE_SERVICE_DATA" );
309309 break ;
310310 }
311- uint16_t uuid = *(uint16_t *) payload;
311+ uint16_t uuid = *(uint16_t *)payload;
312312 setServiceDataUUID (BLEUUID (uuid));
313313 if (length > 2 ) {
314314 setServiceData (std::string (reinterpret_cast <char *>(payload + 2 ), length - 2 ));
@@ -335,7 +335,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
335335 break ;
336336 }
337337
338- setServiceDataUUID (BLEUUID (payload, (size_t ) 16 , false ));
338+ setServiceDataUUID (BLEUUID (payload, (size_t )16 , false ));
339339 if (length > 16 ) {
340340 setServiceData (std::string (reinterpret_cast <char *>(payload + 16 ), length - 16 ));
341341 }
@@ -351,7 +351,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
351351 } // Length <> 0
352352
353353
354- if (sizeConsumed >= 31 || length == 0 ) {
354+ if (sizeConsumed >= total_len || length == 0 ) {
355355 finished = true ;
356356 }
357357 } // !finished
@@ -514,5 +514,14 @@ void BLEAdvertisedDevice::setPayload(uint8_t* payload) {
514514 m_payload = payload;
515515}
516516
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+
517525
518526#endif /* CONFIG_BT_ENABLED */
527+
0 commit comments