8000 Refactoring BLEAdvertisedDevice + update examples · norfanos/esp32-snippets@8d98d94 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8d98d94

Browse files
committed
Refactoring BLEAdvertisedDevice + update examples
1 parent b76b89f commit 8d98d94

File tree

5 files changed

+31
-24
lines changed

5 files changed

+31
-24
lines changed

cpp_utils/BLEAdvertisedDevice.cpp

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,21 @@ BLEScan* BLEAdvertisedDevice::getScan() {
108108
* @brief Get the Service UUID.
109109
* @return The Service UUID of the advertised device.
110110
*/
111-
BLEUUID BLEAdvertisedDevice::getServiceUUID() {
112-
return m_serviceUUID;
111+
BLEUUID BLEAdvertisedDevice::getServiceUUID() { //TODO Remove it eventually, is no longer useful
112+
return m_serviceUUIDs[0];
113113
} // getServiceUUID
114114

115+
/**
116+
* @brief Check advertised serviced for existence required UUID
117+
* @return Return true if service is advertised
118+
*/
119+
bool BLEAdvertisedDevice::isAdvertisingService(B 10000 LEUUID uuid){
120+
for (int i = 0; i < m_serviceUUIDs.size(); ++i) {
121+
if(m_serviceUUIDs[i].equals(uuid))
122+
return true;
123+
}
124+
return false;
125+
}
115126

116127
/**
117128
* @brief Get the TX Power.
@@ -231,23 +242,19 @@ void BLEAdvertisedDevice::parseAdvertisement(uint8_t* payload) {
231242
break;
232243
} // ESP_BLE_AD_TYPE_FLAG
233244

234-
case ESP_BLE_AD_TYPE_16SRV_CMPL: { // Adv Data Type: 0x03
235-
setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload)));
236-
break;
237-
} // ESP_BLE_AD_TYPE_16SRV_CMPL
238-
245+
case ESP_BLE_AD_TYPE_16SRV_CMPL:
239246
case ESP_BLE_AD_TYPE_16SRV_PART: { // Adv Data Type: 0x02
240-
setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload)));
247+
for (int var = 0; var < length/2; ++var) {
248+
setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload+var*2)));
249+
}
241250
break;
242251
} // ESP_BLE_AD_TYPE_16SRV_PART
243252

244-
case ESP_BLE_AD_TYPE_32SRV_CMPL: { // Adv Data Type: 0x05
245-
setServiceUUID(BLEUUID(*reinterpret_cast<uint32_t*>(payload)));
246-
break;
247-
} // ESP_BLE_AD_TYPE_32SRV_CMPL
248-
253+
case ESP_BLE_AD_TYPE_32SRV_CMPL:
249254
case ESP_BLE_AD_TYPE_32SRV_PART: { // Adv Data Type: 0x04
250-
setServiceUUID(BLEUUID(*reinterpret_cast<uint32_t*>(payload)));
255+
for (int var = 0; var < length/4; ++var) {
256+
setServiceUUID(BLEUUID(*reinterpret_cast<uint16_t*>(payload+var*4)));
257+
}
251258
break;
252259
} // ESP_BLE_AD_TYPE_32SRV_PART
253260

@@ -368,9 +375,9 @@ void BLEAdvertisedDevice::setServiceUUID(const char* serviceUUID) {
368375
* @param [in] serviceUUID The discovered serviceUUID
369376
*/
370377
void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) {
371-
m_serviceUUID = serviceUUID;
378+
m_serviceUUIDs.push_back(serviceUUID);
372379
m_haveServiceUUID = true;
373-
ESP_LOGD(LOG_TAG, "- setServiceUUID(): serviceUUID: %s", serviceUUID.toString().c_str());
380+
ESP_LOGD(LOG_TAG, "- addServiceUUID(): serviceUUID: %s", serviceUUID.toString().c_str());
374381
} // setRSSI
375382

376383

cpp_utils/BLEAdvertisedDevice.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class BLEAdvertisedDevice {
3838
BLEUUID getServiceUUID();
3939
int8_t getTXPower();
4040

41+
bool isAdvertisingService(BLEUUID uuid);
4142
bool haveAppearance();
4243
bool haveManufacturerData();
4344
bool haveName();
@@ -79,7 +80,7 @@ class BLEAdvertisedDevice {
7980
std::string m_name;
8081
BLEScan* m_pScan;
8182
int m_rssi;
82-
BLEUUID m_serviceUUID;
83+
std::vector<BLEUUID> m_serviceUUIDs;
8384
int8_t m_txPower;
8485
};
8586

cpp_utils/tests/BLETests/SampleClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
8888
void onResult(BLEAdvertisedDevice advertisedDevice) {
8989
ESP_LOGD(LOG_TAG, "Advertised Device: %s", advertisedDevice.toString().c_str());
9090

91-
if (advertisedDevice.haveServiceUUID() && advertisedDevice.getServiceUUID().equals(serviceUUID)) {
91+
if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(serviceUUID)) {
9292
advertisedDevice.getScan()->stop();
9393

9494
ESP_LOGD(LOG_TAG, "Found our device! address: %s", advertisedDevice.getAddress().toString().c_str());

cpp_utils/tests/BLETests/SampleClient_Notify.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
8383
void onResult(BLEAdvertisedDevice advertisedDevice) {
8484
ESP_LOGD(LOG_TAG, "Advertised Device: %s", advertisedDevice.toString().c_str());
8585

86-
if (advertisedDevice.haveServiceUUID() && advertisedDevice.getServiceUUID().equals(serviceUUID)) {
86+
if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(serviceUUID)) {
8787
advertisedDevice.getScan()->stop();
8888

8989
ESP_LOGD(LOG_TAG, "Found our device! address: %s", advertisedDevice.getAddress().toString().c_str());

cpp_utils/tests/BLETests/SampleServer.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ class MainBLEServer: public Task {
1818
void run(void *data) {
1919
ESP_LOGD(LOG_TAG, "Starting BLE work!");
2020

21-
BLEDevice::init("MYDEVICE");
21+
BLEDevice::init("ESP32");
2222
BLEServer* pServer = BLEDevice::createServer();
2323

24-
BLEService* pService = pServer->createService(BLEUUID((uint16_t)0x1234));
24+
BLEService* pService = pServer->createService("91bad492-b950-4226-aa2b-4ede9fa42f59");
2525

2626
BLECharacteristic* pCharacteristic = pService->createCharacteristic(
27-
BLEUUID((uint16_t)0x99AA),
27+
BLEUUID("0d563a58-196a-48ce-ace2-dfec78acc814"),
2828
BLECharacteristic::PROPERTY_BROADCAST | BLECharacteristic::PROPERTY_READ |
2929
BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_WRITE |
3030
BLECharacteristic::PROPERTY_INDICATE
@@ -39,8 +39,7 @@ class MainBLEServer: public Task {
3939
pService->start();
4040

4141
BLEAdvertising* pAdvertising = pServer->getAdvertising();
42-
pAdvertising->addServiceUUID(pService->getUUID());
43-
pAdvertising->addServiceUUID(BLEUUID((uint16_t)0x9876));
42+
pAdvertising->addServiceUUID(BLEUUID(pService->getUUID()));
4443
pAdvertising->start();
4544

4645
ESP_LOGD(LOG_TAG, "Advertising started!");

0 commit comments

Comments
 (0)
0