Add generic advertisement 'type' functions (#575)

This commit is contained in:
Julio Contreras Fuica 2023-11-25 11:23:37 -03:00 committed by h2zero
parent 4e65ce5d32
commit 22fb1ab801
2 changed files with 28 additions and 0 deletions

View file

@ -203,6 +203,24 @@ std::string NimBLEAdvertisedDevice::getURI() {
return ""; return "";
} // getURI } // getURI
/**
* @brief Get the data from any type available in the advertisement
* @param [in] type The advertised data type BLE_HS_ADV_TYPE
* @return The data available under the type `type`
*/
std::string NimBLEAdvertisedDevice::getPayloadByType(uint16_t type) {
size_t data_loc = 0;
if(findAdvField(type, 0, &data_loc) > 0) {
ble_hs_adv_field *field = (ble_hs_adv_field *)&m_payload[data_loc];
if(field->length > 1) {
return std::string((char*)field->value, field->length - 1);
}
}
return "";
} // getPayloadByType
/** /**
* @brief Get the advertised name. * @brief Get the advertised name.
@ -556,6 +574,14 @@ bool NimBLEAdvertisedDevice::haveURI() {
return findAdvField(BLE_HS_ADV_TYPE_URI) > 0; return findAdvField(BLE_HS_ADV_TYPE_URI) > 0;
} // haveURI } // haveURI
/**
* @brief Does this advertisement have a adv type `type`?
* @return True if there is a `type` present.
*/
bool NimBLEAdvertisedDevice::haveType(uint16_t type) {
return findAdvField(type) > 0;
}
/** /**
* @brief Does the advertisement contain a target address? * @brief Does the advertisement contain a target address?

View file

@ -53,6 +53,7 @@ public:
uint8_t getManufacturerDataCount(); uint8_t getManufacturerDataCount();
std::string getManufacturerData(uint8_t index = 0); std::string getManufacturerData(uint8_t index = 0);
std::string getURI(); std::string getURI();
std::string getPayloadByType(uint16_t type);
/** /**
* @brief A template to convert the service data to <type\>. * @brief A template to convert the service data to <type\>.
@ -134,6 +135,7 @@ public:
bool haveAdvInterval(); bool haveAdvInterval();
bool haveTargetAddress(); bool haveTargetAddress();
bool haveURI(); bool haveURI();
bool haveType(uint16_t type);
std::string toString(); std::string toString();
bool isConnectable(); bool isConnectable();
bool isLegacyAdvertisement(); bool isLegacyAdvertisement();