summaryrefslogtreecommitdiff
path: root/sensor/patchedBLE/src/BLEAdvertisedDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sensor/patchedBLE/src/BLEAdvertisedDevice.cpp')
-rw-r--r--sensor/patchedBLE/src/BLEAdvertisedDevice.cpp49
1 files changed, 29 insertions, 20 deletions
diff --git a/sensor/patchedBLE/src/BLEAdvertisedDevice.cpp b/sensor/patchedBLE/src/BLEAdvertisedDevice.cpp
index 67603df..3f55e8c 100644
--- a/sensor/patchedBLE/src/BLEAdvertisedDevice.cpp
+++ b/sensor/patchedBLE/src/BLEAdvertisedDevice.cpp
@@ -13,14 +13,16 @@
*/
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)
-#include <esp_log.h>
#include <sstream>
#include "BLEAdvertisedDevice.h"
#include "BLEUtils.h"
-#ifdef ARDUINO_ARCH_ESP32
+#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
#include "esp32-hal-log.h"
-#endif
+#define LOG_TAG ""
+#else
+#include "esp_log.h"
static const char* LOG_TAG="BLEAdvertisedDevice";
+#endif
BLEAdvertisedDevice::BLEAdvertisedDevice() {
m_adFlag = 0;
@@ -137,9 +139,8 @@ BLEUUID BLEAdvertisedDevice::getServiceUUID() { //TODO Remove it eventually, is
* @return Return true if service is advertised
*/
bool BLEAdvertisedDevice::isAdvertisingService(BLEUUID uuid){
- for (int i = 0; i < m_serviceUUIDs.size(); ++i) {
- if(m_serviceUUIDs[i].equals(uuid))
- return true;
+ for (int i = 0; i < m_serviceUUIDs.size(); i++) {
+ if (m_serviceUUIDs[i].equals(uuid)) return true;
}
return false;
}
@@ -229,12 +230,13 @@ bool BLEAdvertisedDevice::haveTXPower() {
*
* https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
*/
-void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
+void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload, size_t total_len) {
uint8_t length;
uint8_t ad_type;
uint8_t sizeConsumed = 0;
bool finished = false;
- setPayload(payload);
+ m_payload = payload;
+ m_payloadLength = total_len;
while(!finished) {
length = *payload; // Retrieve the length of the record.
@@ -275,7 +277,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
case ESP_BLE_AD_TYPE_16SRV_CMPL:
case ESP_BLE_AD_TYPE_16SRV_PART: { // Adv Data Type: 0x02
for (int var = 0; var < length/2; ++var) {
- setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload+var*2)));
+ setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload + var * 2)));
}
break;
} // ESP_BLE_AD_TYPE_16SRV_PART
@@ -283,7 +285,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
case ESP_BLE_AD_TYPE_32SRV_CMPL:
case ESP_BLE_AD_TYPE_32SRV_PART: { // Adv Data Type: 0x04
for (int var = 0; var < length/4; ++var) {
- setServiceUUID(BLEUUID(*reinterpret_cast<uint32_t*>(payload+var*4)));
+ setServiceUUID(BLEUUID(*reinterpret_cast<uint32_t*>(payload + var * 4)));
}
break;
} // ESP_BLE_AD_TYPE_32SRV_PART
@@ -309,10 +311,10 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
ESP_LOGE(LOG_TAG, "Length too small for ESP_BLE_AD_TYPE_SERVICE_DATA");
break;
}
- uint16_t uuid = *(uint16_t *)payload;
+ uint16_t uuid = *(uint16_t*)payload;
setServiceDataUUID(BLEUUID(uuid));
if (length > 2) {
- setServiceData(std::string(reinterpret_cast<char*>(payload+2), length-2));
+ setServiceData(std::string(reinterpret_cast<char*>(payload + 2), length - 2));
}
break;
} //ESP_BLE_AD_TYPE_SERVICE_DATA
@@ -322,10 +324,10 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
ESP_LOGE(LOG_TAG, "Length too small for ESP_BLE_AD_TYPE_32SERVICE_DATA");
break;
}
- uint32_t uuid = *(uint32_t *)payload;
+ uint32_t uuid = *(uint32_t*) payload;
setServiceDataUUID(BLEUUID(uuid));
if (length > 4) {
- setServiceData(std::string(reinterpret_cast<char*>(payload+4), length-4));
+ setServiceData(std::string(reinterpret_cast<char*>(payload + 4), length - 4));
}
break;
} //ESP_BLE_AD_TYPE_32SERVICE_DATA
@@ -338,7 +340,7 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
setServiceDataUUID(BLEUUID(payload, (size_t)16, false));
if (length > 16) {
- setServiceData(std::string(reinterpret_cast<char*>(payload+16), length-16));
+ setServiceData(std::string(reinterpret_cast<char*>(payload + 16), length - 16));
}
break;
} //ESP_BLE_AD_TYPE_32SERVICE_DATA
@@ -352,9 +354,9 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
} // Length <> 0
- if (sizeConsumed >=31 || length == 0) {
+ if (sizeConsumed >= total_len)
finished = true;
- }
+
} // !finished
} // parseAdvertisement
@@ -395,7 +397,7 @@ void BLEAdvertisedDevice::setAppearance(uint16_t appearance) {
void BLEAdvertisedDevice::setManufacturerData(std::string manufacturerData) {
m_manufacturerData = manufacturerData;
m_haveManufacturerData = true;
- char* pHex = BLEUtils::buildHexData(nullptr, (uint8_t*)m_manufacturerData.data(), (uint8_t)m_manufacturerData.length());
+ char* pHex = BLEUtils::buildHexData(nullptr, (uint8_t*) m_manufacturerData.data(), (uint8_t) m_manufacturerData.length());
ESP_LOGD(LOG_TAG, "- manufacturer data: %s", pHex);
free(pHex);
} // setManufacturerData
@@ -511,10 +513,17 @@ uint8_t* BLEAdvertisedDevice::getPayload() {
return m_payload;
}
-void BLEAdvertisedDevice::setPayload(uint8_t* payload) {
- m_payload = payload;
+esp_ble_addr_type_t BLEAdvertisedDevice::getAddressType() {
+ return m_addressType;
+}
+
+void BLEAdvertisedDevice::setAddressType(esp_ble_addr_type_t type) {
+ m_addressType = type;
}
+size_t BLEAdvertisedDevice::getPayloadLength() {
+ return m_payloadLength;
+}
#endif /* CONFIG_BT_ENABLED */