Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
features/FEATURE_BLE/ble/gap/AdvertisingDataBuilder.h@0:5b88d5760320, 2019-12-17 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue Dec 17 23:23:45 2019 +0000
- Revision:
- 0:5b88d5760320
mbed-os5 only for TYBLE16
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kenjiArai | 0:5b88d5760320 | 1 | /* mbed Microcontroller Library |
| kenjiArai | 0:5b88d5760320 | 2 | * Copyright (c) 2006-2013 ARM Limited |
| kenjiArai | 0:5b88d5760320 | 3 | * |
| kenjiArai | 0:5b88d5760320 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| kenjiArai | 0:5b88d5760320 | 5 | * you may not use this file except in compliance with the License. |
| kenjiArai | 0:5b88d5760320 | 6 | * You may obtain a copy of the License at |
| kenjiArai | 0:5b88d5760320 | 7 | * |
| kenjiArai | 0:5b88d5760320 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| kenjiArai | 0:5b88d5760320 | 9 | * |
| kenjiArai | 0:5b88d5760320 | 10 | * Unless required by applicable law or agreed to in writing, software |
| kenjiArai | 0:5b88d5760320 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| kenjiArai | 0:5b88d5760320 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| kenjiArai | 0:5b88d5760320 | 13 | * See the License for the specific language governing permissions and |
| kenjiArai | 0:5b88d5760320 | 14 | * limitations under the License. |
| kenjiArai | 0:5b88d5760320 | 15 | */ |
| kenjiArai | 0:5b88d5760320 | 16 | |
| kenjiArai | 0:5b88d5760320 | 17 | #ifndef MBED_GAP_ADVERTISING_DATA_H__ |
| kenjiArai | 0:5b88d5760320 | 18 | #define MBED_GAP_ADVERTISING_DATA_H__ |
| kenjiArai | 0:5b88d5760320 | 19 | |
| kenjiArai | 0:5b88d5760320 | 20 | #include <stdint.h> |
| kenjiArai | 0:5b88d5760320 | 21 | #include <string.h> |
| kenjiArai | 0:5b88d5760320 | 22 | #include <stdlib.h> |
| kenjiArai | 0:5b88d5760320 | 23 | |
| kenjiArai | 0:5b88d5760320 | 24 | #include "ble/BLETypes.h" |
| kenjiArai | 0:5b88d5760320 | 25 | #include "platform/NonCopyable.h" |
| kenjiArai | 0:5b88d5760320 | 26 | |
| kenjiArai | 0:5b88d5760320 | 27 | #include "ble/blecommon.h" |
| kenjiArai | 0:5b88d5760320 | 28 | #include "UUID.h" |
| kenjiArai | 0:5b88d5760320 | 29 | #include "ble/gap/AdvertisingDataTypes.h" |
| kenjiArai | 0:5b88d5760320 | 30 | #include "ble/gap/Types.h" |
| kenjiArai | 0:5b88d5760320 | 31 | |
| kenjiArai | 0:5b88d5760320 | 32 | namespace ble { |
| kenjiArai | 0:5b88d5760320 | 33 | |
| kenjiArai | 0:5b88d5760320 | 34 | /** |
| kenjiArai | 0:5b88d5760320 | 35 | * @addtogroup ble |
| kenjiArai | 0:5b88d5760320 | 36 | * @{ |
| kenjiArai | 0:5b88d5760320 | 37 | * @addtogroup gap |
| kenjiArai | 0:5b88d5760320 | 38 | * @{ |
| kenjiArai | 0:5b88d5760320 | 39 | */ |
| kenjiArai | 0:5b88d5760320 | 40 | |
| kenjiArai | 0:5b88d5760320 | 41 | /** |
| kenjiArai | 0:5b88d5760320 | 42 | * Build advertising data. |
| kenjiArai | 0:5b88d5760320 | 43 | * |
| kenjiArai | 0:5b88d5760320 | 44 | * The builder accepts an array of bytes in input and returns the result of the |
| kenjiArai | 0:5b88d5760320 | 45 | * construction with getAdvertisingData(). |
| kenjiArai | 0:5b88d5760320 | 46 | */ |
| kenjiArai | 0:5b88d5760320 | 47 | class AdvertisingDataBuilder { |
| kenjiArai | 0:5b88d5760320 | 48 | public: |
| kenjiArai | 0:5b88d5760320 | 49 | /** Advertising data needs a user-provided buffer to store the data. |
| kenjiArai | 0:5b88d5760320 | 50 | * |
| kenjiArai | 0:5b88d5760320 | 51 | * @param buffer Buffer used to store the data. |
| kenjiArai | 0:5b88d5760320 | 52 | * @note Use Gap::getMaxAdvertisingDataLength() to find out how much can be accepted. |
| kenjiArai | 0:5b88d5760320 | 53 | */ |
| kenjiArai | 0:5b88d5760320 | 54 | AdvertisingDataBuilder(mbed::Span<uint8_t> buffer); |
| kenjiArai | 0:5b88d5760320 | 55 | |
| kenjiArai | 0:5b88d5760320 | 56 | /** Advertising data needs a user provided buffer to store the data. |
| kenjiArai | 0:5b88d5760320 | 57 | * |
| kenjiArai | 0:5b88d5760320 | 58 | * @param buffer Pointer to buffer to be used for storing advertising data. |
| kenjiArai | 0:5b88d5760320 | 59 | * @param buffer_size Size of the buffer. |
| kenjiArai | 0:5b88d5760320 | 60 | * @note Use Gap::getMaxAdvertisingDataLength() to find out how much can be accepted. |
| kenjiArai | 0:5b88d5760320 | 61 | */ |
| kenjiArai | 0:5b88d5760320 | 62 | AdvertisingDataBuilder(uint8_t *buffer, size_t buffer_size); |
| kenjiArai | 0:5b88d5760320 | 63 | |
| kenjiArai | 0:5b88d5760320 | 64 | /** |
| kenjiArai | 0:5b88d5760320 | 65 | * Get the subspan of the buffer containing valid data. |
| kenjiArai | 0:5b88d5760320 | 66 | * |
| kenjiArai | 0:5b88d5760320 | 67 | * @return A Span containing the payload. |
| kenjiArai | 0:5b88d5760320 | 68 | */ |
| kenjiArai | 0:5b88d5760320 | 69 | mbed::Span<const uint8_t> getAdvertisingData() const; |
| kenjiArai | 0:5b88d5760320 | 70 | |
| kenjiArai | 0:5b88d5760320 | 71 | /** |
| kenjiArai | 0:5b88d5760320 | 72 | * Add a new field into the payload. Returns an error if type is already present. |
| kenjiArai | 0:5b88d5760320 | 73 | * |
| kenjiArai | 0:5b88d5760320 | 74 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 75 | * |
| kenjiArai | 0:5b88d5760320 | 76 | * @param[in] advDataType The type of the field to add. |
| kenjiArai | 0:5b88d5760320 | 77 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 78 | * |
| kenjiArai | 0:5b88d5760320 | 79 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 80 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 81 | * @retval BLE_ERROR_OPERATION_NOT_PERMITTED if data type already present. |
| kenjiArai | 0:5b88d5760320 | 82 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 83 | */ |
| kenjiArai | 0:5b88d5760320 | 84 | ble_error_t addData( |
| kenjiArai | 0:5b88d5760320 | 85 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 86 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 87 | ); |
| kenjiArai | 0:5b88d5760320 | 88 | |
| kenjiArai | 0:5b88d5760320 | 89 | /** |
| kenjiArai | 0:5b88d5760320 | 90 | * Replace a new field into the payload. Will fail if type is not already present. |
| kenjiArai | 0:5b88d5760320 | 91 | * |
| kenjiArai | 0:5b88d5760320 | 92 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 93 | * |
| kenjiArai | 0:5b88d5760320 | 94 | * @param[in] advDataType The type of the field to add. |
| kenjiArai | 0:5b88d5760320 | 95 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 96 | * |
| kenjiArai | 0:5b88d5760320 | 97 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 98 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 99 | * @retval BLE_ERROR_NOT_FOUND if data type not present. |
| kenjiArai | 0:5b88d5760320 | 100 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 101 | */ |
| kenjiArai | 0:5b88d5760320 | 102 | ble_error_t replaceData( |
| kenjiArai | 0:5b88d5760320 | 103 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 104 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 105 | ); |
| kenjiArai | 0:5b88d5760320 | 106 | |
| kenjiArai | 0:5b88d5760320 | 107 | /** |
| kenjiArai | 0:5b88d5760320 | 108 | * Append data to an existing field in the payload. Will fail if type is not already |
| kenjiArai | 0:5b88d5760320 | 109 | * present. |
| kenjiArai | 0:5b88d5760320 | 110 | * |
| kenjiArai | 0:5b88d5760320 | 111 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 112 | * |
| kenjiArai | 0:5b88d5760320 | 113 | * @param[in] advDataType The type of the field to add. |
| kenjiArai | 0:5b88d5760320 | 114 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 115 | * |
| kenjiArai | 0:5b88d5760320 | 116 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 117 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 118 | * @retval BLE_ERROR_NOT_FOUND if data type not present. |
| kenjiArai | 0:5b88d5760320 | 119 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 120 | */ |
| kenjiArai | 0:5b88d5760320 | 121 | ble_error_t appendData( |
| kenjiArai | 0:5b88d5760320 | 122 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 123 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 124 | ); |
| kenjiArai | 0:5b88d5760320 | 125 | |
| kenjiArai | 0:5b88d5760320 | 126 | /** |
| kenjiArai | 0:5b88d5760320 | 127 | * Remove existing date of given type. Will return an error if type is not present. |
| kenjiArai | 0:5b88d5760320 | 128 | * |
| kenjiArai | 0:5b88d5760320 | 129 | * @param[in] advDataType The type of the field to remove. |
| kenjiArai | 0:5b88d5760320 | 130 | * |
| kenjiArai | 0:5b88d5760320 | 131 | * @return BLE_ERROR_NONE returned on success, BLE_ERROR_INVALID_PARAM if field doesn't exist |
| kenjiArai | 0:5b88d5760320 | 132 | */ |
| kenjiArai | 0:5b88d5760320 | 133 | ble_error_t removeData(adv_data_type_t advDataType); |
| kenjiArai | 0:5b88d5760320 | 134 | |
| kenjiArai | 0:5b88d5760320 | 135 | /** |
| kenjiArai | 0:5b88d5760320 | 136 | * Adds a new field into the payload. If the supplied advertising data type is |
| kenjiArai | 0:5b88d5760320 | 137 | * already present in the advertising payload, then the value is replaced. |
| kenjiArai | 0:5b88d5760320 | 138 | * |
| kenjiArai | 0:5b88d5760320 | 139 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 140 | * |
| kenjiArai | 0:5b88d5760320 | 141 | * @param[in] advDataType The type of the field to add. |
| kenjiArai | 0:5b88d5760320 | 142 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 143 | * |
| kenjiArai | 0:5b88d5760320 | 144 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 145 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 146 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 147 | */ |
| kenjiArai | 0:5b88d5760320 | 148 | ble_error_t addOrReplaceData( |
| kenjiArai | 0:5b88d5760320 | 149 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 150 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 151 | ); |
| kenjiArai | 0:5b88d5760320 | 152 | |
| kenjiArai | 0:5b88d5760320 | 153 | /** |
| kenjiArai | 0:5b88d5760320 | 154 | * Adds a new field into the payload. If the supplied advertising data type is |
| kenjiArai | 0:5b88d5760320 | 155 | * already present in the advertising payload, then the value is replaced. |
| kenjiArai | 0:5b88d5760320 | 156 | * |
| kenjiArai | 0:5b88d5760320 | 157 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 158 | * |
| kenjiArai | 0:5b88d5760320 | 159 | * @param[in] advDataType The type of the field to add. |
| kenjiArai | 0:5b88d5760320 | 160 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 161 | * |
| kenjiArai | 0:5b88d5760320 | 162 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 163 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 164 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 165 | */ |
| kenjiArai | 0:5b88d5760320 | 166 | ble_error_t addOrAppendData( |
| kenjiArai | 0:5b88d5760320 | 167 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 168 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 169 | ); |
| kenjiArai | 0:5b88d5760320 | 170 | |
| kenjiArai | 0:5b88d5760320 | 171 | /** |
| kenjiArai | 0:5b88d5760320 | 172 | * Clears the advertising data payload. |
| kenjiArai | 0:5b88d5760320 | 173 | * |
| kenjiArai | 0:5b88d5760320 | 174 | * @post getPayloadLen() returns 0. |
| kenjiArai | 0:5b88d5760320 | 175 | */ |
| kenjiArai | 0:5b88d5760320 | 176 | void clear(); |
| kenjiArai | 0:5b88d5760320 | 177 | |
| kenjiArai | 0:5b88d5760320 | 178 | /** |
| kenjiArai | 0:5b88d5760320 | 179 | * Add device appearance in the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 180 | * |
| kenjiArai | 0:5b88d5760320 | 181 | * @param[in] appearance The appearance to advertise. |
| kenjiArai | 0:5b88d5760320 | 182 | * |
| kenjiArai | 0:5b88d5760320 | 183 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 184 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 185 | * |
| kenjiArai | 0:5b88d5760320 | 186 | * @note This call is equivalent to calling addOrReplaceData() with |
| kenjiArai | 0:5b88d5760320 | 187 | * adv_data_type_t::APPEARANCE as the field type. |
| kenjiArai | 0:5b88d5760320 | 188 | */ |
| kenjiArai | 0:5b88d5760320 | 189 | ble_error_t setAppearance(adv_data_appearance_t appearance); |
| kenjiArai | 0:5b88d5760320 | 190 | |
| kenjiArai | 0:5b88d5760320 | 191 | /** |
| kenjiArai | 0:5b88d5760320 | 192 | * Add BLE flags in the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 193 | * |
| kenjiArai | 0:5b88d5760320 | 194 | * @param[in] flags Bitfield describing the capability of the device. See |
| kenjiArai | 0:5b88d5760320 | 195 | * allowed flags in Flags_t. |
| kenjiArai | 0:5b88d5760320 | 196 | * |
| kenjiArai | 0:5b88d5760320 | 197 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 198 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 199 | * |
| kenjiArai | 0:5b88d5760320 | 200 | * @note This call is equivalent to calling addOrReplaceData() with |
| kenjiArai | 0:5b88d5760320 | 201 | * adv_data_type_t::FLAGS as the field type. |
| kenjiArai | 0:5b88d5760320 | 202 | */ |
| kenjiArai | 0:5b88d5760320 | 203 | ble_error_t setFlags( |
| kenjiArai | 0:5b88d5760320 | 204 | adv_data_flags_t flags = adv_data_flags_t::default_flags |
| kenjiArai | 0:5b88d5760320 | 205 | ); |
| kenjiArai | 0:5b88d5760320 | 206 | |
| kenjiArai | 0:5b88d5760320 | 207 | /** |
| kenjiArai | 0:5b88d5760320 | 208 | * Add the advertising TX in the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 209 | * |
| kenjiArai | 0:5b88d5760320 | 210 | * @param[in] txPower Transmission power level in dB. |
| kenjiArai | 0:5b88d5760320 | 211 | * |
| kenjiArai | 0:5b88d5760320 | 212 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 213 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 214 | * |
| kenjiArai | 0:5b88d5760320 | 215 | * @note This call is equivalent to calling addOrReplaceData() with |
| kenjiArai | 0:5b88d5760320 | 216 | * adv_data_type_t::TX_POWER_LEVEL as the field type. |
| kenjiArai | 0:5b88d5760320 | 217 | */ |
| kenjiArai | 0:5b88d5760320 | 218 | ble_error_t setTxPowerAdvertised(advertising_power_t txPower); |
| kenjiArai | 0:5b88d5760320 | 219 | |
| kenjiArai | 0:5b88d5760320 | 220 | /** |
| kenjiArai | 0:5b88d5760320 | 221 | * Add device name to the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 222 | * |
| kenjiArai | 0:5b88d5760320 | 223 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 224 | * |
| kenjiArai | 0:5b88d5760320 | 225 | * @param[in] name Null terminated string containing the name. |
| kenjiArai | 0:5b88d5760320 | 226 | * @param[in] complete Complete local name if true, otherwise |
| kenjiArai | 0:5b88d5760320 | 227 | * |
| kenjiArai | 0:5b88d5760320 | 228 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 229 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 230 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 231 | */ |
| kenjiArai | 0:5b88d5760320 | 232 | ble_error_t setName(const char *name, bool complete = true); |
| kenjiArai | 0:5b88d5760320 | 233 | |
| kenjiArai | 0:5b88d5760320 | 234 | /** |
| kenjiArai | 0:5b88d5760320 | 235 | * Add manufacturer-specific data to the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 236 | * |
| kenjiArai | 0:5b88d5760320 | 237 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 238 | * |
| kenjiArai | 0:5b88d5760320 | 239 | * @param[in] data New data to be added. |
| kenjiArai | 0:5b88d5760320 | 240 | * |
| kenjiArai | 0:5b88d5760320 | 241 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 242 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 243 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual |
| kenjiArai | 0:5b88d5760320 | 244 | * data field or the data is too small (must contain |
| kenjiArai | 0:5b88d5760320 | 245 | * 2 bytes of manufacturer ID) |
| kenjiArai | 0:5b88d5760320 | 246 | */ |
| kenjiArai | 0:5b88d5760320 | 247 | ble_error_t setManufacturerSpecificData(mbed::Span<const uint8_t> data); |
| kenjiArai | 0:5b88d5760320 | 248 | |
| kenjiArai | 0:5b88d5760320 | 249 | /** |
| kenjiArai | 0:5b88d5760320 | 250 | * Add advertising interval to the payload. This field can only carry 2 bytes. |
| kenjiArai | 0:5b88d5760320 | 251 | * |
| kenjiArai | 0:5b88d5760320 | 252 | * @param interval Interval to advertise. Cannot be larger than 0xFFFF. |
| kenjiArai | 0:5b88d5760320 | 253 | |
| kenjiArai | 0:5b88d5760320 | 254 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 255 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 256 | * @retval BLE_ERROR_INVALID_PARAM if interval value outside of valid range. |
| kenjiArai | 0:5b88d5760320 | 257 | */ |
| kenjiArai | 0:5b88d5760320 | 258 | ble_error_t setAdvertisingInterval(adv_interval_t interval); |
| kenjiArai | 0:5b88d5760320 | 259 | |
| kenjiArai | 0:5b88d5760320 | 260 | /** |
| kenjiArai | 0:5b88d5760320 | 261 | * Add connection interval preferences to the payload |
| kenjiArai | 0:5b88d5760320 | 262 | * |
| kenjiArai | 0:5b88d5760320 | 263 | * @param min Minimum connection interval to advertise. |
| kenjiArai | 0:5b88d5760320 | 264 | * @param max Maximum connection interval to advertise. |
| kenjiArai | 0:5b88d5760320 | 265 | |
| kenjiArai | 0:5b88d5760320 | 266 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 267 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 268 | */ |
| kenjiArai | 0:5b88d5760320 | 269 | ble_error_t setConnectionIntervalPreference( |
| kenjiArai | 0:5b88d5760320 | 270 | conn_interval_t min, |
| kenjiArai | 0:5b88d5760320 | 271 | conn_interval_t max |
| kenjiArai | 0:5b88d5760320 | 272 | ); |
| kenjiArai | 0:5b88d5760320 | 273 | |
| kenjiArai | 0:5b88d5760320 | 274 | /** |
| kenjiArai | 0:5b88d5760320 | 275 | * Add service data data to the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 276 | * |
| kenjiArai | 0:5b88d5760320 | 277 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 278 | * |
| kenjiArai | 0:5b88d5760320 | 279 | * @param[in] service UUID of the service. |
| kenjiArai | 0:5b88d5760320 | 280 | * @param[in] data New data to be added. |
| kenjiArai | 0:5b88d5760320 | 281 | * |
| kenjiArai | 0:5b88d5760320 | 282 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 283 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 284 | * @retval BLE_ERROR_INVALID_PARAM if size of data is too big too fit in an individual data field. |
| kenjiArai | 0:5b88d5760320 | 285 | */ |
| kenjiArai | 0:5b88d5760320 | 286 | ble_error_t setServiceData(UUID service, mbed::Span<const uint8_t> data); |
| kenjiArai | 0:5b88d5760320 | 287 | |
| kenjiArai | 0:5b88d5760320 | 288 | /** |
| kenjiArai | 0:5b88d5760320 | 289 | * Add local service IDs to the advertising payload. If the data can't fit, |
| kenjiArai | 0:5b88d5760320 | 290 | * no modification will take place. |
| kenjiArai | 0:5b88d5760320 | 291 | * |
| kenjiArai | 0:5b88d5760320 | 292 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 293 | * |
| kenjiArai | 0:5b88d5760320 | 294 | * @param[in] data New data to be added. |
| kenjiArai | 0:5b88d5760320 | 295 | * @param[in] complete True if this is a complete list. |
| kenjiArai | 0:5b88d5760320 | 296 | * |
| kenjiArai | 0:5b88d5760320 | 297 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 298 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 299 | * @retval BLE_ERROR_INVALID_PARAM if number of UUIDs of any one type is too high. |
| kenjiArai | 0:5b88d5760320 | 300 | */ |
| kenjiArai | 0:5b88d5760320 | 301 | ble_error_t setLocalServiceList( |
| kenjiArai | 0:5b88d5760320 | 302 | mbed::Span<const UUID> data, |
| kenjiArai | 0:5b88d5760320 | 303 | bool complete = true |
| kenjiArai | 0:5b88d5760320 | 304 | ); |
| kenjiArai | 0:5b88d5760320 | 305 | |
| kenjiArai | 0:5b88d5760320 | 306 | /** |
| kenjiArai | 0:5b88d5760320 | 307 | * Add a list of UUIDs of solicited services. |
| kenjiArai | 0:5b88d5760320 | 308 | * |
| kenjiArai | 0:5b88d5760320 | 309 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 310 | * |
| kenjiArai | 0:5b88d5760320 | 311 | * @param[in] data List of 128 or 16 bit service UUIDs. |
| kenjiArai | 0:5b88d5760320 | 312 | * |
| kenjiArai | 0:5b88d5760320 | 313 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 314 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 315 | * @retval BLE_ERROR_INVALID_PARAM if number of UUIDs of any one type is too high. |
| kenjiArai | 0:5b88d5760320 | 316 | */ |
| kenjiArai | 0:5b88d5760320 | 317 | ble_error_t setRequestedServiceList(mbed::Span<const UUID> data); |
| kenjiArai | 0:5b88d5760320 | 318 | |
| kenjiArai | 0:5b88d5760320 | 319 | /** |
| kenjiArai | 0:5b88d5760320 | 320 | * Return a span of data containing the the type of data requested. |
| kenjiArai | 0:5b88d5760320 | 321 | * |
| kenjiArai | 0:5b88d5760320 | 322 | * @param[out] data Span used to return the requested data. |
| kenjiArai | 0:5b88d5760320 | 323 | * @param[in] advDataType Data type to return. |
| kenjiArai | 0:5b88d5760320 | 324 | * |
| kenjiArai | 0:5b88d5760320 | 325 | * @return BLE_ERROR_NONE if data was found and BLE_ERROR_NOT_FOUND if not. |
| kenjiArai | 0:5b88d5760320 | 326 | */ |
| kenjiArai | 0:5b88d5760320 | 327 | ble_error_t getData( |
| kenjiArai | 0:5b88d5760320 | 328 | mbed::Span<const uint8_t> &data, |
| kenjiArai | 0:5b88d5760320 | 329 | adv_data_type_t advDataType |
| kenjiArai | 0:5b88d5760320 | 330 | ); |
| kenjiArai | 0:5b88d5760320 | 331 | |
| kenjiArai | 0:5b88d5760320 | 332 | private: |
| kenjiArai | 0:5b88d5760320 | 333 | /** |
| kenjiArai | 0:5b88d5760320 | 334 | * Search advertisement data for a specific field. |
| kenjiArai | 0:5b88d5760320 | 335 | * |
| kenjiArai | 0:5b88d5760320 | 336 | * @param[in] type The type of the field to find. |
| kenjiArai | 0:5b88d5760320 | 337 | * |
| kenjiArai | 0:5b88d5760320 | 338 | * @return A pointer to the first element in the field if found. The first |
| kenjiArai | 0:5b88d5760320 | 339 | * element being the length of the field followed by the value of the field. |
| kenjiArai | 0:5b88d5760320 | 340 | * NULL if the field is not present in the payload. |
| kenjiArai | 0:5b88d5760320 | 341 | */ |
| kenjiArai | 0:5b88d5760320 | 342 | uint8_t *findField(adv_data_type_t type); |
| kenjiArai | 0:5b88d5760320 | 343 | |
| kenjiArai | 0:5b88d5760320 | 344 | /** |
| kenjiArai | 0:5b88d5760320 | 345 | * Get field size (includes type and size bytes) |
| kenjiArai | 0:5b88d5760320 | 346 | * |
| kenjiArai | 0:5b88d5760320 | 347 | * @param type The field type. |
| kenjiArai | 0:5b88d5760320 | 348 | * |
| kenjiArai | 0:5b88d5760320 | 349 | * @return Size of the whole field including type and size bytes. |
| kenjiArai | 0:5b88d5760320 | 350 | */ |
| kenjiArai | 0:5b88d5760320 | 351 | uint8_t getFieldSize(adv_data_type_t type); |
| kenjiArai | 0:5b88d5760320 | 352 | |
| kenjiArai | 0:5b88d5760320 | 353 | /** |
| kenjiArai | 0:5b88d5760320 | 354 | * Append advertising data based on the specified type. |
| kenjiArai | 0:5b88d5760320 | 355 | * |
| kenjiArai | 0:5b88d5760320 | 356 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 357 | * |
| kenjiArai | 0:5b88d5760320 | 358 | * @param[in] advDataType Type of the new data. |
| kenjiArai | 0:5b88d5760320 | 359 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 360 | * |
| kenjiArai | 0:5b88d5760320 | 361 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 362 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 363 | */ |
| kenjiArai | 0:5b88d5760320 | 364 | ble_error_t addField( |
| kenjiArai | 0:5b88d5760320 | 365 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 366 | mbed::Span<const uint8_t> fieldData |
| kenjiArai | 0:5b88d5760320 | 367 | ); |
| kenjiArai | 0:5b88d5760320 | 368 | |
| kenjiArai | 0:5b88d5760320 | 369 | /** |
| kenjiArai | 0:5b88d5760320 | 370 | * Append data to a field in the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 371 | * |
| kenjiArai | 0:5b88d5760320 | 372 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 373 | * |
| kenjiArai | 0:5b88d5760320 | 374 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 375 | * @param[in] field Pointer to the field in the advertising buffer. |
| kenjiArai | 0:5b88d5760320 | 376 | * |
| kenjiArai | 0:5b88d5760320 | 377 | * @return BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 378 | */ |
| kenjiArai | 0:5b88d5760320 | 379 | ble_error_t appendToField( |
| kenjiArai | 0:5b88d5760320 | 380 | mbed::Span<const uint8_t> fieldData, |
| kenjiArai | 0:5b88d5760320 | 381 | uint8_t *field |
| kenjiArai | 0:5b88d5760320 | 382 | ); |
| kenjiArai | 0:5b88d5760320 | 383 | |
| kenjiArai | 0:5b88d5760320 | 384 | /** |
| kenjiArai | 0:5b88d5760320 | 385 | * Update in place the value of a field in the advertising payload. |
| kenjiArai | 0:5b88d5760320 | 386 | * |
| kenjiArai | 0:5b88d5760320 | 387 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 388 | * |
| kenjiArai | 0:5b88d5760320 | 389 | * @param[in] advDataType Type of the new data. |
| kenjiArai | 0:5b88d5760320 | 390 | * @param[in] fieldData Span of data to add. |
| kenjiArai | 0:5b88d5760320 | 391 | * @param[in] field Pointer to the field of type @p advDataType in the |
| kenjiArai | 0:5b88d5760320 | 392 | * advertising buffer. |
| kenjiArai | 0:5b88d5760320 | 393 | * |
| kenjiArai | 0:5b88d5760320 | 394 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 395 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 396 | */ |
| kenjiArai | 0:5b88d5760320 | 397 | ble_error_t replaceField( |
| kenjiArai | 0:5b88d5760320 | 398 | adv_data_type_t advDataType, |
| kenjiArai | 0:5b88d5760320 | 399 | mbed::Span<const uint8_t> fieldData, |
| kenjiArai | 0:5b88d5760320 | 400 | uint8_t *field |
| kenjiArai | 0:5b88d5760320 | 401 | ); |
| kenjiArai | 0:5b88d5760320 | 402 | |
| kenjiArai | 0:5b88d5760320 | 403 | /** |
| kenjiArai | 0:5b88d5760320 | 404 | * Remove the field. |
| kenjiArai | 0:5b88d5760320 | 405 | * |
| kenjiArai | 0:5b88d5760320 | 406 | * @param[in] field Pointer to the field in the advertising buffer. |
| kenjiArai | 0:5b88d5760320 | 407 | * |
| kenjiArai | 0:5b88d5760320 | 408 | * @return BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 409 | */ |
| kenjiArai | 0:5b88d5760320 | 410 | ble_error_t removeField(uint8_t *field); |
| kenjiArai | 0:5b88d5760320 | 411 | |
| kenjiArai | 0:5b88d5760320 | 412 | /** |
| kenjiArai | 0:5b88d5760320 | 413 | * Add a list of UUIDs to given types. |
| kenjiArai | 0:5b88d5760320 | 414 | * |
| kenjiArai | 0:5b88d5760320 | 415 | * @note Data size for individual types cannot exceed 255 bytes. |
| kenjiArai | 0:5b88d5760320 | 416 | * |
| kenjiArai | 0:5b88d5760320 | 417 | * @param[in] data List of 128 or 16 bit service UUIDs. |
| kenjiArai | 0:5b88d5760320 | 418 | * @param[in] shortType Type of field to add the short UUIDs to. |
| kenjiArai | 0:5b88d5760320 | 419 | * @param[in] longType Type of field to add the long UUIDs to. |
| kenjiArai | 0:5b88d5760320 | 420 | * |
| kenjiArai | 0:5b88d5760320 | 421 | * @retval BLE_ERROR_NONE on success. |
| kenjiArai | 0:5b88d5760320 | 422 | * @retval BLE_ERROR_BUFFER_OVERFLOW if buffer is too small to contain the new data. |
| kenjiArai | 0:5b88d5760320 | 423 | * @retval BLE_ERROR_INVALID_PARAM if number of UUIDs of any one type is too high. |
| kenjiArai | 0:5b88d5760320 | 424 | */ |
| kenjiArai | 0:5b88d5760320 | 425 | ble_error_t setUUIDData( |
| kenjiArai | 0:5b88d5760320 | 426 | mbed::Span<const UUID> data, |
| kenjiArai | 0:5b88d5760320 | 427 | adv_data_type_t shortType, |
| kenjiArai | 0:5b88d5760320 | 428 | adv_data_type_t longType |
| kenjiArai | 0:5b88d5760320 | 429 | ); |
| kenjiArai | 0:5b88d5760320 | 430 | |
| kenjiArai | 0:5b88d5760320 | 431 | private: |
| kenjiArai | 0:5b88d5760320 | 432 | /** The memory backing the the data provided by the user. */ |
| kenjiArai | 0:5b88d5760320 | 433 | mbed::Span<uint8_t> _buffer; |
| kenjiArai | 0:5b88d5760320 | 434 | |
| kenjiArai | 0:5b88d5760320 | 435 | /** Length of the data added to the advertising buffer. */ |
| kenjiArai | 0:5b88d5760320 | 436 | uint8_t _payload_length; |
| kenjiArai | 0:5b88d5760320 | 437 | }; |
| kenjiArai | 0:5b88d5760320 | 438 | |
| kenjiArai | 0:5b88d5760320 | 439 | /** |
| kenjiArai | 0:5b88d5760320 | 440 | * @} |
| kenjiArai | 0:5b88d5760320 | 441 | * @} |
| kenjiArai | 0:5b88d5760320 | 442 | */ |
| kenjiArai | 0:5b88d5760320 | 443 | |
| kenjiArai | 0:5b88d5760320 | 444 | } // namespace ble |
| kenjiArai | 0:5b88d5760320 | 445 | |
| kenjiArai | 0:5b88d5760320 | 446 | #endif /* ifndef MBED_GAP_ADVERTISING_DATA_H__ */ |