Skip to content

Commit 85ef51f

Browse files
egrekovme-no-dev
authored andcommitted
BLE: reception support multiple service data (espressif#3502)
* BLE: reception support multiple service data * fix prev commit, i not inicialized
1 parent 3607525 commit 85ef51f

File tree

2 files changed

+50
-9
lines changed

2 files changed

+50
-9
lines changed

Diff for: libraries/BLE/src/BLEAdvertisedDevice.cpp

+44-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ BLEAdvertisedDevice::BLEAdvertisedDevice() {
2525
m_manufacturerData = "";
2626
m_name = "";
2727
m_rssi = -9999;
28-
m_serviceData = "";
28+
m_serviceData = {};
29+
m_serviceDataUUIDs = {};
2930
m_txPower = 0;
3031
m_pScan = nullptr;
3132

@@ -101,33 +102,66 @@ BLEScan* BLEAdvertisedDevice::getScan() {
101102
return m_pScan;
102103
} // getScan
103104

105+
/**
106+
* @brief Get the number of service data.
107+
* @return Number of service data discovered.
108+
*/
109+
int BLEAdvertisedDevice::getServiceDataCount() {
110+
if (m_haveServiceData)
111+
return m_serviceData.size();
112+
else
113+
return 0;
114+
115+
} //getServiceDataCount
104116

105117
/**
106118
* @brief Get the service data.
107119
* @return The ServiceData of the advertised device.
108120
*/
109121
std::string BLEAdvertisedDevice::getServiceData() {
110-
return m_serviceData;
122+
return m_serviceData[0];
111123
} //getServiceData
112124

125+
/**
126+
* @brief Get the service data.
127+
* @return The ServiceData of the advertised device.
128+
*/
129+
std::string BLEAdvertisedDevice::getServiceData(int i) {
130+
return m_serviceData[i];
131+
} //getServiceData
113132

114133
/**
115134
* @brief Get the service data UUID.
116135
* @return The service data UUID.
117136
*/
118137
BLEUUID BLEAdvertisedDevice::getServiceDataUUID() {
119-
return m_serviceDataUUID;
138+
return m_serviceDataUUIDs[0];
120139
} // getServiceDataUUID
121140

141+
/**
142+
* @brief Get the service data UUID.
143+
* @return The service data UUID.
144+
*/
145+
BLEUUID BLEAdvertisedDevice::getServiceDataUUID(int i) {
146+
return m_serviceDataUUIDs[i];
147+
} // getServiceDataUUID
122148

123149
/**
124150
* @brief Get the Service UUID.
125151
* @return The Service UUID of the advertised device.
126152
*/
127-
BLEUUID BLEAdvertisedDevice::getServiceUUID() { //TODO Remove it eventually, is no longer useful
153+
BLEUUID BLEAdvertisedDevice::getServiceUUID() {
128154
return m_serviceUUIDs[0];
129155
} // getServiceUUID
130156

157+
/**
158+
* @brief Get the Service UUID.
159+
* @return The Service UUID of the advertised device.
160+
*/
161+
BLEUUID BLEAdvertisedDevice::getServiceUUID(int i) {
162+
return m_serviceUUIDs[i];
163+
} // getServiceUUID
164+
131165
/**
132166
* @brief Check advertised serviced for existence required UUID
133167
* @return Return true if service is advertised
@@ -454,7 +488,7 @@ void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) {
454488
*/
455489
void BLEAdvertisedDevice::setServiceData(std::string serviceData) {
456490
m_haveServiceData = true; // Set the flag that indicates we have service data.
457-
m_serviceData = serviceData; // Save the service data that we received.
491+
m_serviceData.push_back(serviceData); // Save the service data that we received.
458492
} //setServiceData
459493

460494

@@ -464,7 +498,8 @@ void BLEAdvertisedDevice::setServiceData(std::string serviceData) {
464498
*/
465499
void BLEAdvertisedDevice::setServiceDataUUID(BLEUUID uuid) {
466500
m_haveServiceData = true; // Set the flag that indicates we have service data.
467-
m_serviceDataUUID = uuid;
501+
m_serviceDataUUIDs.push_back(uuid);
502+
log_d("- addServiceDataUUID(): serviceDataUUID: %s", uuid.toString().c_str());
468503
} // setServiceDataUUID
469504

470505

@@ -498,7 +533,9 @@ std::string BLEAdvertisedDevice::toString() {
498533
free(pHex);
499534
}
500535
if (haveServiceUUID()) {
501-
res += ", serviceUUID: " + getServiceUUID().toString();
536+
for (int i=0; i < m_serviceUUIDs.size(); i++) {
537+
res += ", serviceUUID: " + getServiceUUID(i).toString();
538+
}
502539
}
503540
if (haveTXPower()) {
504541
char val[4];

Diff for: libraries/BLE/src/BLEAdvertisedDevice.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ class BLEAdvertisedDevice {
3636
int getRSSI();
3737
BLEScan* getScan();
3838
std::string getServiceData();
39+
std::string getServiceData(int i);
3940
BLEUUID getServiceDataUUID();
41+
BLEUUID getServiceDataUUID(int i);
4042
BLEUUID getServiceUUID();
43+
BLEUUID getServiceUUID(int i);
44+
int getServiceDataCount();
4145
int8_t getTXPower();
4246
uint8_t* getPayload();
4347
size_t getPayloadLength();
@@ -93,8 +97,8 @@ class BLEAdvertisedDevice {
9397
int m_rssi;
9498
std::vector<BLEUUID> m_serviceUUIDs;
9599
int8_t m_txPower;
96-
std::string m_serviceData;
97-
BLEUUID m_serviceDataUUID;
100+
std::vector<std::string> m_serviceData;
101+
std::vector<BLEUUID> m_serviceDataUUIDs;
98102
uint8_t* m_payload;
99103
size_t m_payloadLength = 0;
100104
esp_ble_addr_type_t m_addressType;

0 commit comments

Comments
 (0)