Refactor BLEAdvertisedDevice (#4739)
fixes #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
This commit is contained in:
		
							parent
							
								
									8134a42162
								
							
						
					
					
						commit
						7cdfb8bc7c
					
				| @ -25,6 +25,7 @@ BLEAdvertisedDevice::BLEAdvertisedDevice() { | ||||
| 	m_manufacturerData = ""; | ||||
| 	m_name             = ""; | ||||
| 	m_rssi             = -9999; | ||||
| 	m_serviceUUIDs     = {}; | ||||
| 	m_serviceData      = {}; | ||||
| 	m_serviceDataUUIDs = {}; | ||||
| 	m_txPower          = 0; | ||||
| @ -34,8 +35,6 @@ BLEAdvertisedDevice::BLEAdvertisedDevice() { | ||||
| 	m_haveManufacturerData = false; | ||||
| 	m_haveName             = false; | ||||
| 	m_haveRSSI             = false; | ||||
| 	m_haveServiceData      = false; | ||||
| 	m_haveServiceUUID      = false; | ||||
| 	m_haveTXPower          = false; | ||||
| 
 | ||||
| } // BLEAdvertisedDevice
 | ||||
| @ -107,11 +106,7 @@ BLEScan* BLEAdvertisedDevice::getScan() { | ||||
|  * @return Number of service data discovered. | ||||
|  */ | ||||
| int BLEAdvertisedDevice::getServiceDataCount() { | ||||
| 	if (m_haveServiceData) | ||||
| 		return m_serviceData.size(); | ||||
| 	else | ||||
| 		return 0; | ||||
| 
 | ||||
| 	return m_serviceData.size(); | ||||
| } //getServiceDataCount
 | ||||
| 
 | ||||
| /**
 | ||||
| @ -119,7 +114,7 @@ int BLEAdvertisedDevice::getServiceDataCount() { | ||||
|  * @return The ServiceData of the advertised device. | ||||
|  */ | ||||
| std::string BLEAdvertisedDevice::getServiceData() { | ||||
| 	return m_serviceData[0]; | ||||
| 	return m_serviceData.empty() ? std::string() : m_serviceData.front(); | ||||
| } //getServiceData
 | ||||
| 
 | ||||
| /**
 | ||||
| @ -130,12 +125,20 @@ std::string BLEAdvertisedDevice::getServiceData(int i) { | ||||
| 	return m_serviceData[i]; | ||||
| } //getServiceData
 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Get the number of service data UUIDs. | ||||
|  * @return Number of service data UUIDs discovered. | ||||
|  */ | ||||
| int BLEAdvertisedDevice::getServiceDataUUIDCount() { | ||||
| 	return m_serviceDataUUIDs.size(); | ||||
| } //getServiceDataUUIDCount
 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Get the service data UUID. | ||||
|  * @return The service data UUID. | ||||
|  */ | ||||
| BLEUUID BLEAdvertisedDevice::getServiceDataUUID() { | ||||
| 	return m_serviceDataUUIDs[0]; | ||||
| 	return m_serviceDataUUIDs.empty() ? BLEUUID() : m_serviceDataUUIDs.front(); | ||||
| } // getServiceDataUUID
 | ||||
| 
 | ||||
| /**
 | ||||
| @ -146,12 +149,20 @@ BLEUUID BLEAdvertisedDevice::getServiceDataUUID(int i) { | ||||
| 	return m_serviceDataUUIDs[i]; | ||||
| } // getServiceDataUUID
 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Get the number of service UUIDs. | ||||
|  * @return Number of service UUIDs discovered. | ||||
|  */ | ||||
| int BLEAdvertisedDevice::getServiceUUIDCount() { | ||||
| 	return m_serviceUUIDs.size(); | ||||
| } //getServiceUUIDCount
 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Get the Service UUID. | ||||
|  * @return The Service UUID of the advertised device. | ||||
|  */ | ||||
| BLEUUID BLEAdvertisedDevice::getServiceUUID() { | ||||
| 	return m_serviceUUIDs[0]; | ||||
| 	return m_serviceUUIDs.empty() ? BLEUUID() : m_serviceUUIDs.front(); | ||||
| } // getServiceUUID
 | ||||
| 
 | ||||
| /**
 | ||||
| @ -167,7 +178,7 @@ BLEUUID BLEAdvertisedDevice::getServiceUUID(int i) { | ||||
|  * @return Return true if service is advertised | ||||
|  */ | ||||
| bool BLEAdvertisedDevice::isAdvertisingService(BLEUUID uuid){ | ||||
| 	for (int i = 0; i < m_serviceUUIDs.size(); i++) { | ||||
| 	for (int i = 0; i < getServiceUUIDCount(); i++) { | ||||
| 		if (m_serviceUUIDs[i].equals(uuid)) return true; | ||||
| 	} | ||||
| 	return false; | ||||
| @ -224,7 +235,7 @@ bool BLEAdvertisedDevice::haveRSSI() { | ||||
|  * @return True if there is a service data value present. | ||||
|  */ | ||||
| bool BLEAdvertisedDevice::haveServiceData() { | ||||
| 	return m_haveServiceData; | ||||
| 	return !m_serviceData.empty(); | ||||
| } // haveServiceData
 | ||||
| 
 | ||||
| 
 | ||||
| @ -233,7 +244,7 @@ bool BLEAdvertisedDevice::haveServiceData() { | ||||
|  * @return True if there is a service UUID value present. | ||||
|  */ | ||||
| bool BLEAdvertisedDevice::haveServiceUUID() { | ||||
| 	return m_haveServiceUUID; | ||||
| 	return !m_serviceUUIDs.empty(); | ||||
| } // haveServiceUUID
 | ||||
| 
 | ||||
| 
 | ||||
| @ -486,7 +497,6 @@ void BLEAdvertisedDevice::setServiceUUID(const char* serviceUUID) { | ||||
|  */ | ||||
| void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) { | ||||
| 	m_serviceUUIDs.push_back(serviceUUID); | ||||
| 	m_haveServiceUUID = true; | ||||
| 	log_d("- addServiceUUID(): serviceUUID: %s", serviceUUID.toString().c_str()); | ||||
| } // setServiceUUID
 | ||||
| 
 | ||||
| @ -496,7 +506,6 @@ void BLEAdvertisedDevice::setServiceUUID(BLEUUID serviceUUID) { | ||||
|  * @param [in] data ServiceData value. | ||||
|  */ | ||||
| void BLEAdvertisedDevice::setServiceData(std::string serviceData) { | ||||
| 	m_haveServiceData = true;         // Set the flag that indicates we have service data.
 | ||||
| 	m_serviceData.push_back(serviceData); // Save the service data that we received.
 | ||||
| } //setServiceData
 | ||||
| 
 | ||||
| @ -506,7 +515,6 @@ void BLEAdvertisedDevice::setServiceData(std::string serviceData) { | ||||
|  * @param [in] data ServiceDataUUID value. | ||||
|  */ | ||||
| void BLEAdvertisedDevice::setServiceDataUUID(BLEUUID uuid) { | ||||
| 	m_haveServiceData = true;         // Set the flag that indicates we have service data.
 | ||||
| 	m_serviceDataUUIDs.push_back(uuid); | ||||
| 	log_d("- addServiceDataUUID(): serviceDataUUID: %s", uuid.toString().c_str()); | ||||
| } // setServiceDataUUID
 | ||||
| @ -542,7 +550,7 @@ std::string BLEAdvertisedDevice::toString() { | ||||
| 		free(pHex); | ||||
| 	} | ||||
| 	if (haveServiceUUID()) { | ||||
| 		for (int i=0; i < m_serviceUUIDs.size(); i++) { | ||||
| 		for (int i=0; i < getServiceUUIDCount(); i++) { | ||||
| 		    res += ", serviceUUID: " + getServiceUUID(i).toString(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -42,6 +42,8 @@ public: | ||||
| 	BLEUUID     getServiceUUID(); | ||||
| 	BLEUUID     getServiceUUID(int i); | ||||
| 	int         getServiceDataCount(); | ||||
| 	int         getServiceDataUUIDCount(); | ||||
| 	int         getServiceUUIDCount(); | ||||
| 	int8_t      getTXPower(); | ||||
| 	uint8_t* 	getPayload(); | ||||
| 	size_t		getPayloadLength(); | ||||
| @ -83,8 +85,6 @@ private: | ||||
| 	bool m_haveManufacturerData; | ||||
| 	bool m_haveName; | ||||
| 	bool m_haveRSSI; | ||||
| 	bool m_haveServiceData; | ||||
| 	bool m_haveServiceUUID; | ||||
| 	bool m_haveTXPower; | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user