37template <
typename Callback>
39 if (advData ==
nullptr || len == 0) {
44 while (offset < len) {
45 const uint8_t adLength = advData[offset];
54 if (offset + 1 + adLength > len) {
58 const uint8_t adType = advData[offset + 1];
59 const uint8_t* adPayload = &advData[offset + 2];
60 const uint8_t adPayloadLen = adLength - 1;
62 if (callback(adType, adPayload, adPayloadLen)) {
66 offset += 1 + adLength;
82 uint16_t* companyId,
const uint8_t** data, uint8_t* dataLen) {
83 if (companyId ==
nullptr || data ==
nullptr || dataLen ==
nullptr) {
88 [&](uint8_t adType,
const uint8_t* payload, uint8_t payloadLen) ->
bool {
99 *companyId =
static_cast<uint16_t
>(payload[0]) |
100 (
static_cast<uint16_t
>(payload[1]) << 8);
116 const uint8_t uuid128[16]) {
117 if (uuid128 ==
nullptr) {
122 [&](uint8_t adType,
const uint8_t* payload, uint8_t payloadLen) ->
bool {
128 uint8_t remaining = payloadLen;
129 const uint8_t* ptr = payload;
151 char*
name, uint8_t nameMaxLen) {
152 if (
name ==
nullptr || nameMaxLen == 0) {
160 [&](uint8_t adType,
const uint8_t* payload, uint8_t payloadLen) ->
bool {
166 const uint8_t copyLen = (payloadLen < static_cast<uint8_t>(nameMaxLen - 1))
168 :
static_cast<uint8_t
>(nameMaxLen - 1);
170 std::memcpy(
name, payload, copyLen);
171 name[copyLen] =
'\0';
char name[cdc::hal::ISecureElement::RMEM_NAME_LEN]
static constexpr uint8_t AD_TYPE_INCOMPLETE_UUID128
static constexpr uint8_t UUID128_SIZE
bool findServiceUuid128(const uint8_t *advData, uint8_t len, const uint8_t uuid128[16])
Checks whether a specific 128-bit service UUID is present in AD structures.
static constexpr uint8_t AD_TYPE_MANUFACTURER_SPECIFIC
static constexpr uint8_t AD_TYPE_COMPLETE_UUID128
static constexpr uint8_t AD_TYPE_SHORTENED_NAME
AD type constants from BLE Core Spec Supplement, Part A.
bool findManufacturerData(const uint8_t *advData, uint8_t len, uint16_t *companyId, const uint8_t **data, uint8_t *dataLen)
Extracts manufacturer-specific AD payload and company identifier.
static bool walkAdStructures(const uint8_t *advData, uint8_t len, Callback callback)
Iterates over AD structures and invokes a callback for each structure.
static constexpr uint8_t AD_TYPE_COMPLETE_NAME
static constexpr uint8_t COMPANY_ID_SIZE
bool findName(const uint8_t *advData, uint8_t len, char *name, uint8_t nameMaxLen)
Extracts local device name from advertising data.