Merge branch 'develop' of https://github.com/sunsmilearm/BLE_API into sunsmilearm-develop

This commit is contained in:
Rohit Grover 2015-08-03 07:23:21 +01:00
commit ea37b64307
2 changed files with 48 additions and 0 deletions

View file

@ -585,6 +585,27 @@ public:
return setAdvertisingData();
}
/**
* Update the advertising payload filed which has the same adv type as the input
* parameter. Total length of the new data must be the same as the old one.
*
* @param type The type which describes the variable length data.
* @param data data bytes.
* @param len length of data.
*/
ble_error_t updateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
if (type == GapAdvertisingData::COMPLETE_LOCAL_NAME) {
setDeviceName(data);
}
ble_error_t rc;
if ((rc = _advPayload.updateData(type, data, len)) != BLE_ERROR_NONE) {
return rc;
}
return setAdvertisingData();
}
/**
* Setup a particular, user-constructed advertisement payload for the
* underlying stack. It would be uncommon for this API to be used directly;

View file

@ -233,6 +233,33 @@ public:
return BLE_ERROR_NONE;
}
/**
* update one advertising data field with the same AD type (see DataType)
*
* @param advDataType The Advertising 'DataType' to add
* @param payload Pointer to the payload contents
* @param len Size of the payload in bytes
*
* @return BLE_ERROR_UNSPECIFIED if the specified field is not found, else
* BLE_ERROR_NONE.
*/
ble_error_t updateData(DataType advDataType, const uint8_t *payload, uint8_t len)
{
uint8_t byteIndex = 0;
while (byteIndex < _payloadLen) {
if (_payload[byteIndex + 1] == advDataType) { /* Check adv type */
if (_payload[byteIndex] == (len + 1)) { /* Check adv field length */
memcpy(&_payload[byteIndex + 2], payload, len);
}
return BLE_ERROR_NONE;
}
byteIndex += (_payload[byteIndex] + 1);
}
return BLE_ERROR_UNSPECIFIED;
}
/**
* Helper function to add APPEARANCE data to the advertising payload
*