Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

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?

UserRevisionLine numberNew 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__ */