Add index parameter for multiple manufacturer data sets.

Adds an index parameter to NimBLEAdvertisedDevice::getManufacturerData to allow for selecting from multiple instances in the advertisements.
Adds NimBLEAdvertisedDevice::getManufacturerDataCount to get the number of manufacturer data sets present in the advertised data.
This commit is contained in:
h2zero 2023-04-06 14:32:50 -06:00 committed by h2zero
parent 4423e5fbb6
commit 559a26b74b
2 changed files with 16 additions and 4 deletions

View file

@ -159,12 +159,14 @@ uint16_t NimBLEAdvertisedDevice::getMaxInterval() {
/** /**
* @brief Get the manufacturer data. * @brief Get the manufacturer data.
* @return The manufacturer data of the advertised device. * @param [in] index The index of the of the manufacturer data set to get.
* @return The manufacturer data.
*/ */
std::string NimBLEAdvertisedDevice::getManufacturerData() { std::string NimBLEAdvertisedDevice::getManufacturerData(uint8_t index) {
size_t data_loc = 0; size_t data_loc = 0;
index++;
if(findAdvField(BLE_HS_ADV_TYPE_MFG_DATA, 0, &data_loc) > 0) { if(findAdvField(BLE_HS_ADV_TYPE_MFG_DATA, index, &data_loc) > 0) {
ble_hs_adv_field *field = (ble_hs_adv_field *)&m_payload[data_loc]; ble_hs_adv_field *field = (ble_hs_adv_field *)&m_payload[data_loc];
if(field->length > 1) { if(field->length > 1) {
return std::string((char*)field->value, field->length - 1); return std::string((char*)field->value, field->length - 1);
@ -175,6 +177,15 @@ std::string NimBLEAdvertisedDevice::getManufacturerData() {
} // getManufacturerData } // getManufacturerData
/**
* @brief Get the count of manufacturer data sets.
* @return The number of manufacturer data sets.
*/
uint8_t NimBLEAdvertisedDevice::getManufacturerDataCount() {
return findAdvField(BLE_HS_ADV_TYPE_MFG_DATA);
} // getManufacturerDataCount
/** /**
* @brief Get the URI from the advertisement. * @brief Get the URI from the advertisement.
* @return The URI data. * @return The URI data.

View file

@ -50,7 +50,8 @@ public:
uint16_t getAdvInterval(); uint16_t getAdvInterval();
uint16_t getMinInterval(); uint16_t getMinInterval();
uint16_t getMaxInterval(); uint16_t getMaxInterval();
std::string getManufacturerData(); uint8_t getManufacturerDataCount();
std::string getManufacturerData(uint8_t index = 0);
std::string getURI(); std::string getURI();
/** /**