Skip to content

Commit 7cdfb8b

Browse files
authored
Refactor BLEAdvertisedDevice (espressif#4739)
fixes espressif#4596 * Prevent possible undefined behaviour by get methods not taking an index as parameter * Add methods to get the count of service data UUIDs and service UUIDs * Various code improvements
1 parent 8134a42 commit 7cdfb8b

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

libraries/BLE/src/BLEAdvertisedDevice.cpp

+25-17
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ BLEAdvertisedDevice::BLEAdvertisedDevice() {
2525
m_manufacturerData = "";
2626
m_name = "";
2727
m_rssi = -9999;
28+
m_serviceUUIDs = {};
2829
m_serviceData = {};
2930
m_serviceDataUUIDs = {};
3031
m_txPower = 0;
@@ -34,8 +35,6 @@ BLEAdvertisedDevice::BLEAdvertisedDevice() {
3435
m_haveManufacturerData = false;
3536
m_haveName = false;
3637
m_haveRSSI = false;
37-
m_haveServiceData = false;
38-
m_haveServiceUUID = false;
3938
m_haveTXPower = false;
4039

4140
} // BLEAdvertisedDevice
@@ -107,19 +106,15 @@ BLEScan* BLEAdvertisedDevice::getScan() {
107106
* @return Number of service data discovered.
108107
*/
109108
int BLEAdvertisedDevice::getServiceDataCount() {
110-
if (m_haveServiceData)
111-
return m_serviceData.size();
112-
else
113-
return 0;
114-
109+
return m_serviceData.size();
115110
} //getServiceDataCount
116111

117112
/**
118113
* @brief Get the service data.
119114
* @return The ServiceData of the advertised device.
120115
*/
121116
std::string BLEAdvertisedDevice::getServiceData() {
122-
return m_serviceData[0];
117+
return m_serviceData.empty() ? std::string() : m_serviceData.front();
123118
} //getServiceData
124119

125120
/**
@@ -130,12 +125,20 @@ std::string BLEAdvertisedDevice::getServiceData(int i) {
130125
return m_serviceData[i];
131126
} //getServiceData
132127

128+
/**
129+
* @brief Get the number of service data UUIDs.
130+
* @return Number of service data UUIDs discovered.
131+
*/
132+
int BLEAdvertisedDevice::getServiceDataUUIDCount() {
133+
return m_serviceDataUUIDs.size();
134+
} //getServiceDataUUIDCount
135+
133136
/**
134137
* @brief Get the service data UUID.
135138
* @return The service data UUID.
136139
*/
137140
BLEUUID BLEAdvertisedDevice::getServiceDataUUID() {
138-
return m_serviceDataUUIDs[0];
141+
return m_serviceDataUUIDs.empty() ? BLEUUID() : m_serviceDataUUIDs.front();
139142
} // getServiceDataUUID
140143

141144
/**
@@ -146,12 +149,20 @@ BLEUUID BLEAdvertisedDevice::getServiceDataUUID(int i) {
146149
return m_serviceDataUUIDs[i];
147150
} // getServiceDataUUID
148151

152+
/**
153+
* @brief Get the number of service UUIDs.
154+
* @return Number of service UUIDs discovered.
155+
*/
156+
int BLEAdvertisedDevice::getServiceUUIDCount() {
157+
return m_serviceUUIDs.size();
158+
} //getServiceUUIDCount
159+
149160
/**
150161
* @brief Get the Service UUID.
151162
* @return The Service UUID of the advertised device.
152163
*/
153164
BLEUUID BLEAdvertisedDevice::getServiceUUID() {
154-
return m_serviceUUIDs[0];
165+
return m_serviceUUIDs.empty() ? BLEUUID() : m_serviceUUIDs.front();
155166
} // getServiceUUID
156167

157168
/**
@@ -167,7 +178,7 @@ BLEUUID BLEAdvertisedDevice::getServiceUUID(int i) {
167178
* @return Return true if service is advertised
168179
*/
169180
bool BLEAdvertisedDevice::isAdvertisingService(BLEUUID uuid){
170-
for (int i = 0; i < m_serviceUUIDs.size(); i++) {
181+
for (int i = 0; i < getServiceUUIDCount(); i++) {
171182
if (m_serviceUUIDs[i].equals(uuid)) return true;
172183
}
173184
return false;
@@ -224,7 +235,7 @@ bool BLEAdvertisedDevice::haveRSSI() {
224235
* @return True if there is a service data value present.
225236
*/
226237
bool BLEAdvertisedDevice::haveServiceData() {
227-
return m_haveServiceData;
238+
return !m_serviceData.empty();
228239
} // haveServiceData
229240

230241

@@ -233,7 +244,7 @@ bool BLEAdvertisedDevice::haveServiceData() {
233244
* @return True if there is a service UUID value present.
234245
*/
235246
bool BLEAdvertisedDevice::haveServiceUUID() {
236-
return m_haveServiceUUID;
247+
return !m_serviceUUIDs.empty();
237248
} // haveServiceUUID
238249

239250

@@ -486,7 +497,6 @@ void BLEAdvertisedDevice::setServiceUUID(const char* serviceUUID) {
486497
*/
487498
void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) {
488499
m_serviceUUIDs.push_back(serviceUUID);
489-
m_haveServiceUUID = true;
490500
log_d("- addServiceUUID(): serviceUUID: %s", serviceUUID.toString().c_str());
491501
} // setServiceUUID
492502

@@ -496,7 +506,6 @@ void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) {
496506
* @param [in] data ServiceData value.
497507
*/
498508
void BLEAdvertisedDevice::setServiceData(std::string serviceData) {
499-
m_haveServiceData = true; // Set the flag that indicates we have service data.
500509
m_serviceData.push_back(serviceData); // Save the service data that we received.
501510
} //setServiceData
502511

@@ -506,7 +515,6 @@ void BLEAdvertisedDevice::setServiceData(std::string serviceData) {
506515
* @param [in] data ServiceDataUUID value.
507516
*/
508517
void BLEAdvertisedDevice::setServiceDataUUID(BLEUUID uuid) {
509-
m_haveServiceData = true; // Set the flag that indicates we have service data.
510518
m_serviceDataUUIDs.push_back(uuid);
511519
log_d("- addServiceDataUUID(): serviceDataUUID: %s", uuid.toString().c_str());
512520
} // setServiceDataUUID
@@ -542,7 +550,7 @@ std::string BLEAdvertisedDevice::toString() {
542550
free(pHex);
543551
}
544552
if (haveServiceUUID()) {
545-
for (int i=0; i < m_serviceUUIDs.size(); i++) {
553+
for (int i=0; i < getServiceUUIDCount(); i++) {
546554
res += ", serviceUUID: " + getServiceUUID(i).toString();
547555
}
548556
}

libraries/BLE/src/BLEAdvertisedDevice.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class BLEAdvertisedDevice {
4242
BLEUUID getServiceUUID();
4343
BLEUUID getServiceUUID(int i);
4444
int getServiceDataCount();
45+
int getServiceDataUUIDCount();
46+
int getServiceUUIDCount();
4547
int8_t getTXPower();
4648
uint8_t* getPayload();
4749
size_t getPayloadLength();
@@ -83,8 +85,6 @@ class BLEAdvertisedDevice {
8385
bool m_haveManufacturerData;
8486
bool m_haveName;
8587
bool m_haveRSSI;
86-
bool m_haveServiceData;
87-
bool m_haveServiceUUID;
8888
bool m_haveTXPower;
8989

9090

0 commit comments

Comments
 (0)