Lightly modified version of the BLE stack, that doesn't bring up a DFUService by default... as we have our own.

Fork of BLE_API by Bluetooth Low Energy

Committer:
Rohit Grover
Date:
Mon Sep 22 10:59:09 2014 +0100
Revision:
118:620d28e7a1ba
Parent:
116:ca826083980e
Child:
121:035516234a33
Release 0.2.0
=============

Highlights:
Introducing standard services to simplify applications.
Add support for over-the-air firmware updates.

Features
~~~~~~~~

- This release introduces 'templates' for common services such as heart-rate,
battery-level, device-info, UART, device-firmware-update etc. These services
take the shape of class declarations within header files aggregated under a
new folder called 'services/'. These service-classes provide a high-level
API hopefully easing the burden of developing BLE applications. The
underlying APIs to work with characteristics and services are still
available to allow greater control if needed. We expect to grow the
supported services to include all SIG defined BLE profiles.

- WriteCallbackParams now includes the characteristic's value-attribute
handle; this changes the signature of onDataWritten().

- BLEDevice::onDataWritten() now allows chaining of callbacks--this means that
it is possible to chain together multiple onDataWritten callbacks
(potentially from different modules of an application) to receive updates to
characteristics. Many services, such as DFU and UART add their own
onDataWritten callbacks behind the scenes to trap interesting events. It is
also possible to chain callbacks to functions within objects.

- Added the following expectation for GattCharacteristic: If valuePtr ==
NULL, initialLength == 0, and properties == READ for the value attribute of
a characteristic, then that particular characteristic may be considered
optional and dropped while instantiating the service with the underlying BLE
stack.

- Introducing the typedef GattAttribute::Handle_t to capture Attribute handles.

Bugfixes
~~~~~~~~

None.

Compatibility
~~~~~~~~~~~~~

The signature of onDataWritten() has seen a change; so application programs
using this new version of the BLE API will need minor modifications. Please
refer to sample programs under BLE team page.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rohit Grover 106:a20be740075d 1 /* mbed Microcontroller Library
Rohit Grover 106:a20be740075d 2 * Copyright (c) 2006-2013 ARM Limited
Rohit Grover 106:a20be740075d 3 *
Rohit Grover 106:a20be740075d 4 * Licensed under the Apache License, Version 2.0 (the "License");
Rohit Grover 106:a20be740075d 5 * you may not use this file except in compliance with the License.
Rohit Grover 106:a20be740075d 6 * You may obtain a copy of the License at
Rohit Grover 106:a20be740075d 7 *
Rohit Grover 106:a20be740075d 8 * http://www.apache.org/licenses/LICENSE-2.0
Rohit Grover 106:a20be740075d 9 *
Rohit Grover 106:a20be740075d 10 * Unless required by applicable law or agreed to in writing, software
Rohit Grover 106:a20be740075d 11 * distributed under the License is distributed on an "AS IS" BASIS,
Rohit Grover 106:a20be740075d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Rohit Grover 106:a20be740075d 13 * See the License for the specific language governing permissions and
Rohit Grover 106:a20be740075d 14 * limitations under the License.
Rohit Grover 106:a20be740075d 15 */
Rohit Grover 106:a20be740075d 16
Rohit Grover 110:d5a824cee1d3 17 #ifndef __BLE_DEVICE__
Rohit Grover 110:d5a824cee1d3 18 #define __BLE_DEVICE__
Rohit Grover 110:d5a824cee1d3 19
Rohit Grover 106:a20be740075d 20 #include "mbed.h"
Rohit Grover 106:a20be740075d 21 #include "blecommon.h"
Rohit Grover 106:a20be740075d 22 #include "Gap.h"
Rohit Grover 106:a20be740075d 23 #include "GattServer.h"
Rohit Grover 111:189ff241dae1 24 #include "BLEDeviceInstanceBase.h"
Rohit Grover 106:a20be740075d 25
Rohit Grover 106:a20be740075d 26 /**
Rohit Grover 106:a20be740075d 27 * The base class used to abstract away BLE capable radio transceivers or SOCs,
Rohit Grover 106:a20be740075d 28 * to enable this BLE API to work with any radio transparently.
Rohit Grover 106:a20be740075d 29 */
Rohit Grover 106:a20be740075d 30 class BLEDevice
Rohit Grover 106:a20be740075d 31 {
Rohit Grover 106:a20be740075d 32 public:
Rohit Grover 106:a20be740075d 33 /**
Rohit Grover 106:a20be740075d 34 * Initialize the BLE controller. This should be called before using
Rohit Grover 106:a20be740075d 35 * anything else in the BLE_API.
Rohit Grover 106:a20be740075d 36 */
Rohit Grover 106:a20be740075d 37 ble_error_t init();
Rohit Grover 106:a20be740075d 38 ble_error_t reset(void);
Rohit Grover 106:a20be740075d 39
Rohit Grover 106:a20be740075d 40 /* GAP specific APIs */
Rohit Grover 106:a20be740075d 41 public:
Rohit Grover 106:a20be740075d 42 /**
Rohit Grover 106:a20be740075d 43 * Set the BTLE MAC address and type.
Rohit Grover 106:a20be740075d 44 * @return
Rohit Grover 106:a20be740075d 45 */
Rohit Grover 106:a20be740075d 46 ble_error_t setAddress(Gap::addr_type_t type, const uint8_t address[6]);
Rohit Grover 106:a20be740075d 47
Rohit Grover 106:a20be740075d 48 /**
Rohit Grover 106:a20be740075d 49 * @param[in] advType
Rohit Grover 106:a20be740075d 50 * The GAP advertising mode to use for this device. Valid
Rohit Grover 106:a20be740075d 51 * values are defined in AdvertisingType:
Rohit Grover 106:a20be740075d 52 *
Rohit Grover 106:a20be740075d 53 * \par ADV_NON_CONNECTABLE_UNDIRECTED
Rohit Grover 106:a20be740075d 54 * All connections to the peripheral device will be refused.
Rohit Grover 106:a20be740075d 55 *
Rohit Grover 106:a20be740075d 56 * \par ADV_CONNECTABLE_DIRECTED
Rohit Grover 106:a20be740075d 57 * Only connections from a pre-defined central device will be
Rohit Grover 106:a20be740075d 58 * accepted.
Rohit Grover 106:a20be740075d 59 *
Rohit Grover 106:a20be740075d 60 * \par ADV_CONNECTABLE_UNDIRECTED
Rohit Grover 106:a20be740075d 61 * Any central device can connect to this peripheral.
Rohit Grover 106:a20be740075d 62 *
Rohit Grover 106:a20be740075d 63 * \par ADV_SCANNABLE_UNDIRECTED
Rohit Grover 106:a20be740075d 64 * Any central device can connect to this peripheral, and
Rohit Grover 106:a20be740075d 65 * the secondary Scan Response payload will be included or
Rohit Grover 106:a20be740075d 66 * available to central devices.
Rohit Grover 106:a20be740075d 67 *
Rohit Grover 106:a20be740075d 68 * \par
Rohit Grover 106:a20be740075d 69 * See Bluetooth Core Specification 4.0 (Vol. 3), Part C,
Rohit Grover 106:a20be740075d 70 * Section 9.3 and Core Specification 4.0 (Vol. 6), Part B,
Rohit Grover 106:a20be740075d 71 * Section 2.3.1 for further information on GAP connection
Rohit Grover 106:a20be740075d 72 * modes
Rohit Grover 106:a20be740075d 73 */
Rohit Grover 106:a20be740075d 74 void setAdvertisingType(GapAdvertisingParams::AdvertisingType);
Rohit Grover 106:a20be740075d 75
Rohit Grover 106:a20be740075d 76 /**
Rohit Grover 106:a20be740075d 77 * @param[in] interval
Rohit Grover 106:a20be740075d 78 * Advertising interval between 0x0020 and 0x4000 in 0.625ms
Rohit Grover 106:a20be740075d 79 * units (20ms to 10.24s). If using non-connectable mode
Rohit Grover 106:a20be740075d 80 * (ADV_NON_CONNECTABLE_UNDIRECTED) this min value is
Rohit Grover 106:a20be740075d 81 * 0x00A0 (100ms). To reduce the likelihood of collisions, the
Rohit Grover 106:a20be740075d 82 * link layer perturbs this interval by a pseudo-random delay
Rohit Grover 106:a20be740075d 83 * with a range of 0 ms to 10 ms for each advertising event.
Rohit Grover 106:a20be740075d 84 *
Rohit Grover 106:a20be740075d 85 * \par
Rohit Grover 106:a20be740075d 86 * Decreasing this value will allow central devices to detect
Rohit Grover 106:a20be740075d 87 * your peripheral faster at the expense of more power being
Rohit Grover 106:a20be740075d 88 * used by the radio due to the higher data transmit rate.
Rohit Grover 106:a20be740075d 89 *
Rohit Grover 106:a20be740075d 90 * \par
Rohit Grover 106:a20be740075d 91 * This field must be set to 0 if connectionMode is equal
Rohit Grover 106:a20be740075d 92 * to ADV_CONNECTABLE_DIRECTED
Rohit Grover 106:a20be740075d 93 *
Rohit Grover 106:a20be740075d 94 * \par
Rohit Grover 106:a20be740075d 95 * See Bluetooth Core Specification, Vol 3., Part C,
Rohit Grover 106:a20be740075d 96 * Appendix A for suggested advertising intervals.
Rohit Grover 106:a20be740075d 97 */
Rohit Grover 106:a20be740075d 98 void setAdvertisingInterval(uint16_t interval);
Rohit Grover 106:a20be740075d 99
Rohit Grover 106:a20be740075d 100 /**
Rohit Grover 106:a20be740075d 101 * @param[in] timeout
Rohit Grover 106:a20be740075d 102 * Advertising timeout between 0x1 and 0x3FFF (1 and 16383)
Rohit Grover 106:a20be740075d 103 * in seconds. Enter 0 to disable the advertising timeout.
Rohit Grover 106:a20be740075d 104 */
Rohit Grover 106:a20be740075d 105 void setAdvertisingTimeout(uint16_t timeout);
Rohit Grover 106:a20be740075d 106
Rohit Grover 106:a20be740075d 107 /**
Rohit Grover 106:a20be740075d 108 * Please refer to the APIs above.
Rohit Grover 106:a20be740075d 109 */
Rohit Grover 106:a20be740075d 110 void setAdvertisingParams(const GapAdvertisingParams &advParams);
Rohit Grover 106:a20be740075d 111
Rohit Grover 106:a20be740075d 112 /**
Rohit Grover 106:a20be740075d 113 * This API is typically used as an internal helper to udpate the transport
Rohit Grover 106:a20be740075d 114 * backend with advertising data before starting to advertise. It may also
Rohit Grover 106:a20be740075d 115 * be explicity used to dynamically reset the accumulated advertising
Rohit Grover 106:a20be740075d 116 * payload and scanResponse; to do this, the application can clear and re-
Rohit Grover 106:a20be740075d 117 * accumulate a new advertising payload (and scanResponse) before using this
Rohit Grover 106:a20be740075d 118 * API.
Rohit Grover 106:a20be740075d 119 */
Rohit Grover 106:a20be740075d 120 ble_error_t setAdvertisingPayload(void);
Rohit Grover 106:a20be740075d 121
Rohit Grover 106:a20be740075d 122 /**
Rohit Grover 106:a20be740075d 123 * Reset any advertising payload prepared from prior calls to
Rohit Grover 106:a20be740075d 124 * accumulateAdvertisingPayload().
Rohit Grover 106:a20be740075d 125 */
Rohit Grover 106:a20be740075d 126 void clearAdvertisingPayload(void);
Rohit Grover 106:a20be740075d 127
Rohit Grover 106:a20be740075d 128 /**
Rohit Grover 106:a20be740075d 129 * Accumulate an AD structure in the advertising payload. Please note that
Rohit Grover 106:a20be740075d 130 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
Rohit Grover 106:a20be740075d 131 * as an additional 31 bytes if the advertising payload proves to be too
Rohit Grover 106:a20be740075d 132 * small.
Rohit Grover 106:a20be740075d 133 *
Rohit Grover 106:a20be740075d 134 * @param flags
Rohit Grover 106:a20be740075d 135 * The flags to be added. Multiple flags may be specified in
Rohit Grover 106:a20be740075d 136 * combination.
Rohit Grover 106:a20be740075d 137 */
Rohit Grover 106:a20be740075d 138 ble_error_t accumulateAdvertisingPayload(uint8_t flags);
Rohit Grover 106:a20be740075d 139
Rohit Grover 106:a20be740075d 140 /**
Rohit Grover 106:a20be740075d 141 * Accumulate an AD structure in the advertising payload. Please note that
Rohit Grover 106:a20be740075d 142 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
Rohit Grover 106:a20be740075d 143 * as an additional 31 bytes if the advertising payload proves to be too
Rohit Grover 106:a20be740075d 144 * small.
Rohit Grover 106:a20be740075d 145 *
Rohit Grover 106:a20be740075d 146 * @param app
Rohit Grover 106:a20be740075d 147 * The appearance of the peripheral.
Rohit Grover 106:a20be740075d 148 */
Rohit Grover 106:a20be740075d 149 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app);
Rohit Grover 106:a20be740075d 150
Rohit Grover 106:a20be740075d 151 /**
Rohit Grover 106:a20be740075d 152 * Accumulate an AD structure in the advertising payload. Please note that
Rohit Grover 106:a20be740075d 153 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
Rohit Grover 106:a20be740075d 154 * as an additional 31 bytes if the advertising payload proves to be too
Rohit Grover 106:a20be740075d 155 * small.
Rohit Grover 106:a20be740075d 156 *
Rohit Grover 106:a20be740075d 157 * @param app
Rohit Grover 106:a20be740075d 158 * The max transmit power to be used by the controller. This is
Rohit Grover 106:a20be740075d 159 * only a hint.
Rohit Grover 106:a20be740075d 160 */
Rohit Grover 106:a20be740075d 161 ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power);
Rohit Grover 106:a20be740075d 162
Rohit Grover 106:a20be740075d 163 /**
Rohit Grover 106:a20be740075d 164 * Accumulate a variable length byte-stream as an AD structure in the
Rohit Grover 106:a20be740075d 165 * advertising payload. Please note that the payload is limited to 31 bytes.
Rohit Grover 106:a20be740075d 166 * The SCAN_RESPONSE message may be used as an additional 31 bytes if the
Rohit Grover 106:a20be740075d 167 * advertising payload proves to be too small.
Rohit Grover 106:a20be740075d 168 *
Rohit Grover 106:a20be740075d 169 * @param type The type which describes the variable length data.
Rohit Grover 106:a20be740075d 170 * @param data data bytes.
Rohit Grover 106:a20be740075d 171 * @param len length of data.
Rohit Grover 106:a20be740075d 172 */
Rohit Grover 106:a20be740075d 173 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len);
Rohit Grover 106:a20be740075d 174
Rohit Grover 106:a20be740075d 175 /**
Rohit Grover 106:a20be740075d 176 * Accumulate a variable length byte-stream as an AD structure in the
Rohit Grover 106:a20be740075d 177 * scanResponse payload.
Rohit Grover 106:a20be740075d 178 *
Rohit Grover 106:a20be740075d 179 * @param type The type which describes the variable length data.
Rohit Grover 106:a20be740075d 180 * @param data data bytes.
Rohit Grover 106:a20be740075d 181 * @param len length of data.
Rohit Grover 106:a20be740075d 182 */
Rohit Grover 106:a20be740075d 183 ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len);
Rohit Grover 106:a20be740075d 184
Rohit Grover 106:a20be740075d 185 /**
Rohit Grover 106:a20be740075d 186 * Start advertising (GAP Discoverable, Connectable modes, Broadcast
Rohit Grover 106:a20be740075d 187 * Procedure).
Rohit Grover 106:a20be740075d 188 */
Rohit Grover 106:a20be740075d 189 ble_error_t startAdvertising(void);
Rohit Grover 106:a20be740075d 190
Rohit Grover 106:a20be740075d 191 /**
Rohit Grover 106:a20be740075d 192 * Stop advertising (GAP Discoverable, Connectable modes, Broadcast
Rohit Grover 106:a20be740075d 193 * Procedure).
Rohit Grover 106:a20be740075d 194 */
Rohit Grover 106:a20be740075d 195 ble_error_t stopAdvertising(void);
Rohit Grover 106:a20be740075d 196
Rohit Grover 116:ca826083980e 197 ble_error_t disconnect(Gap::DisconnectionReason_t reason);
Rohit Grover 106:a20be740075d 198
Rohit Grover 106:a20be740075d 199 /* APIs to set GAP callbacks. */
Rohit Grover 106:a20be740075d 200 void onTimeout(Gap::EventCallback_t timeoutCallback);
Rohit Grover 106:a20be740075d 201
Rohit Grover 116:ca826083980e 202 void onConnection(Gap::ConnectionEventCallback_t connectionCallback);
Rohit Grover 106:a20be740075d 203 /**
Rohit Grover 106:a20be740075d 204 * Used to setup a callback for GAP disconnection.
Rohit Grover 106:a20be740075d 205 */
Rohit Grover 116:ca826083980e 206 void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback);
Rohit Grover 106:a20be740075d 207
Rohit Grover 106:a20be740075d 208 /**
Rohit Grover 106:a20be740075d 209 * Setup a callback for the GATT event DATA_SENT.
Rohit Grover 106:a20be740075d 210 */
Rohit Grover 116:ca826083980e 211 void onDataSent(GattServer::ServerEventCallbackWithCount_t callback);
Rohit Grover 106:a20be740075d 212
Rohit Grover 106:a20be740075d 213 /**
Rohit Grover 106:a20be740075d 214 * Setup a callback for when a characteristic has its value updated by a
Rohit Grover 106:a20be740075d 215 * client.
Rohit Grover 118:620d28e7a1ba 216 *
Rohit Grover 118:620d28e7a1ba 217 * @Note: it is possible to chain together multiple onDataWritten callbacks
Rohit Grover 118:620d28e7a1ba 218 * (potentially from different modules of an application) to receive updates
Rohit Grover 118:620d28e7a1ba 219 * to characteristics. Many services, such as DFU and UART add their own
Rohit Grover 118:620d28e7a1ba 220 * onDataWritten callbacks behind the scenes to trap interesting events.
Rohit Grover 118:620d28e7a1ba 221 *
Rohit Grover 118:620d28e7a1ba 222 * @Note: it is also possible to setup a callback into a member function of
Rohit Grover 118:620d28e7a1ba 223 * some object.
Rohit Grover 106:a20be740075d 224 */
Rohit Grover 118:620d28e7a1ba 225 void onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP));
Rohit Grover 118:620d28e7a1ba 226 template <typename T> void onDataWritten(T *objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context));
Rohit Grover 118:620d28e7a1ba 227
Rohit Grover 106:a20be740075d 228 void onUpdatesEnabled(GattServer::EventCallback_t callback);
Rohit Grover 106:a20be740075d 229 void onUpdatesDisabled(GattServer::EventCallback_t callback);
Rohit Grover 106:a20be740075d 230 void onConfirmationReceived(GattServer::EventCallback_t callback);
Rohit Grover 106:a20be740075d 231
Rohit Grover 106:a20be740075d 232 /**
Rohit Grover 106:a20be740075d 233 * Add a service declaration to the local server ATT table. Also add the
Rohit Grover 106:a20be740075d 234 * characteristics contained within.
Rohit Grover 106:a20be740075d 235 */
Rohit Grover 106:a20be740075d 236 ble_error_t addService(GattService &service);
Rohit Grover 106:a20be740075d 237
Rohit Grover 106:a20be740075d 238 Gap::GapState_t getGapState(void) const;
Rohit Grover 106:a20be740075d 239
Rohit Grover 118:620d28e7a1ba 240 /**
Rohit Grover 118:620d28e7a1ba 241 * @param[in/out] lengthP
Rohit Grover 118:620d28e7a1ba 242 * input: Length in bytes to be read,
Rohit Grover 118:620d28e7a1ba 243 * output: Total length of attribute value upon successful return.
Rohit Grover 118:620d28e7a1ba 244 */
Rohit Grover 106:a20be740075d 245 ble_error_t readCharacteristicValue(uint16_t handle, uint8_t *const buffer, uint16_t *const lengthP);
Rohit Grover 118:620d28e7a1ba 246
Rohit Grover 118:620d28e7a1ba 247 /**
Rohit Grover 118:620d28e7a1ba 248 * @param localOnly
Rohit Grover 118:620d28e7a1ba 249 * Only update the characteristic locally regardless of notify/indicate flags in the CCCD.
Rohit Grover 118:620d28e7a1ba 250 */
Rohit Grover 106:a20be740075d 251 ble_error_t updateCharacteristicValue(uint16_t handle, const uint8_t* value, uint16_t size, bool localOnly = false);
Rohit Grover 106:a20be740075d 252
Rohit Grover 106:a20be740075d 253 /**
Rohit Grover 106:a20be740075d 254 * Yield control to the BLE stack or to other tasks waiting for events. This
Rohit Grover 106:a20be740075d 255 * is a sleep function which will return when there is an application
Rohit Grover 106:a20be740075d 256 * specific interrupt, but the MCU might wake up several times before
Rohit Grover 106:a20be740075d 257 * returning (to service the stack). This is not always interchangeable with
Rohit Grover 106:a20be740075d 258 * WFE().
Rohit Grover 106:a20be740075d 259 */
Rohit Grover 106:a20be740075d 260 void waitForEvent(void);
Rohit Grover 106:a20be740075d 261
Rohit Grover 106:a20be740075d 262 ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params);
Rohit Grover 106:a20be740075d 263 ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params);
Rohit Grover 106:a20be740075d 264 ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params);
Rohit Grover 108:c85ab5f1eca0 265
Rohit Grover 108:c85ab5f1eca0 266 /**
Rohit Grover 108:c85ab5f1eca0 267 * This call allows the application to get the BLE stack version information.
Rohit Grover 108:c85ab5f1eca0 268 *
Rohit Grover 108:c85ab5f1eca0 269 * @return A pointer to a const string representing the version.
Rohit Grover 108:c85ab5f1eca0 270 * Note: The string is owned by the BLE_API.
Rohit Grover 108:c85ab5f1eca0 271 */
Rohit Grover 108:c85ab5f1eca0 272 const char *getVersion(void);
Rohit Grover 108:c85ab5f1eca0 273
Rohit Grover 108:c85ab5f1eca0 274 /**
Rohit Grover 108:c85ab5f1eca0 275 * Set the device name characteristic in the GAP service.
Rohit Grover 108:c85ab5f1eca0 276 * @param deviceName The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string.
Rohit Grover 108:c85ab5f1eca0 277 */
Rohit Grover 108:c85ab5f1eca0 278 ble_error_t setDeviceName(const uint8_t *deviceName);
Rohit Grover 108:c85ab5f1eca0 279
Rohit Grover 108:c85ab5f1eca0 280 /**
Rohit Grover 108:c85ab5f1eca0 281 * Get the value of the device name characteristic in the GAP service.
Rohit Grover 108:c85ab5f1eca0 282 * @param[out] deviceName Pointer to an empty buffer where the UTF-8 *non NULL-
Rohit Grover 108:c85ab5f1eca0 283 * terminated* string will be placed. Set this
Rohit Grover 108:c85ab5f1eca0 284 * value to NULL in order to obtain the deviceName-length
Rohit Grover 108:c85ab5f1eca0 285 * from the 'length' parameter.
Rohit Grover 108:c85ab5f1eca0 286 *
Rohit Grover 108:c85ab5f1eca0 287 * @param[in/out] lengthP (on input) Length of the buffer pointed to by deviceName;
Rohit Grover 108:c85ab5f1eca0 288 * (on output) the complete device name length (without the
Rohit Grover 108:c85ab5f1eca0 289 * null terminator).
Rohit Grover 108:c85ab5f1eca0 290 *
Rohit Grover 108:c85ab5f1eca0 291 * @note If the device name is longer than the size of the supplied buffer,
Rohit Grover 108:c85ab5f1eca0 292 * length will return the complete device name length,
Rohit Grover 108:c85ab5f1eca0 293 * and not the number of bytes actually returned in deviceName.
Rohit Grover 108:c85ab5f1eca0 294 * The application may use this information to retry with a suitable buffer size.
Rohit Grover 108:c85ab5f1eca0 295 *
Rohit Grover 108:c85ab5f1eca0 296 * Sample use:
Rohit Grover 108:c85ab5f1eca0 297 * uint8_t deviceName[20];
Rohit Grover 108:c85ab5f1eca0 298 * unsigned length = sizeof(deviceName);
Rohit Grover 108:c85ab5f1eca0 299 * ble.getDeviceName(deviceName, &length);
Rohit Grover 108:c85ab5f1eca0 300 * if (length < sizeof(deviceName)) {
Rohit Grover 108:c85ab5f1eca0 301 * deviceName[length] = 0;
Rohit Grover 108:c85ab5f1eca0 302 * }
Rohit Grover 108:c85ab5f1eca0 303 * DEBUG("length: %u, deviceName: %s\r\n", length, deviceName);
Rohit Grover 108:c85ab5f1eca0 304 */
Rohit Grover 108:c85ab5f1eca0 305 ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP);
Rohit Grover 108:c85ab5f1eca0 306
Rohit Grover 108:c85ab5f1eca0 307 /**
Rohit Grover 108:c85ab5f1eca0 308 * Set the appearance characteristic in the GAP service.
Rohit Grover 108:c85ab5f1eca0 309 * @param[in] appearance The new value for the device-appearance.
Rohit Grover 108:c85ab5f1eca0 310 */
Rohit Grover 108:c85ab5f1eca0 311 ble_error_t setAppearance(uint16_t appearance);
Rohit Grover 108:c85ab5f1eca0 312
Rohit Grover 108:c85ab5f1eca0 313 /**
Rohit Grover 108:c85ab5f1eca0 314 * Set the appearance characteristic in the GAP service.
Rohit Grover 108:c85ab5f1eca0 315 * @param[out] appearance The new value for the device-appearance.
Rohit Grover 108:c85ab5f1eca0 316 */
Rohit Grover 108:c85ab5f1eca0 317 ble_error_t getAppearance(uint16_t *appearanceP);
Rohit Grover 108:c85ab5f1eca0 318
Rohit Grover 108:c85ab5f1eca0 319 /**
Rohit Grover 108:c85ab5f1eca0 320 * Set the radio's transmit power.
Rohit Grover 108:c85ab5f1eca0 321 * @param[in] txPower Radio transmit power in dBm.
Rohit Grover 108:c85ab5f1eca0 322 */
Rohit Grover 108:c85ab5f1eca0 323 ble_error_t setTxPower(int8_t txPower);
Rohit Grover 106:a20be740075d 324
Rohit Grover 106:a20be740075d 325 public:
Rohit Grover 106:a20be740075d 326 BLEDevice() : transport(createBLEDeviceInstance()), advParams(), advPayload(), scanResponse(), needToSetAdvPayload(true) {
Rohit Grover 106:a20be740075d 327 advPayload.clear();
Rohit Grover 106:a20be740075d 328 scanResponse.clear();
Rohit Grover 106:a20be740075d 329 }
Rohit Grover 106:a20be740075d 330
Rohit Grover 106:a20be740075d 331 private:
Rohit Grover 106:a20be740075d 332 BLEDeviceInstanceBase *const transport; /* the device specific backend */
Rohit Grover 106:a20be740075d 333
Rohit Grover 106:a20be740075d 334 GapAdvertisingParams advParams;
Rohit Grover 106:a20be740075d 335 GapAdvertisingData advPayload;
Rohit Grover 106:a20be740075d 336 GapAdvertisingData scanResponse;
Rohit Grover 106:a20be740075d 337
Rohit Grover 106:a20be740075d 338 /* Accumulation of AD structures in the advertisement payload should
Rohit Grover 106:a20be740075d 339 * eventually result in a call to the target's setAdvertisingData() before
Rohit Grover 106:a20be740075d 340 * the server begins advertising. This flag marks the status of the pending update.*/
Rohit Grover 106:a20be740075d 341 bool needToSetAdvPayload;
Rohit Grover 106:a20be740075d 342
Rohit Grover 106:a20be740075d 343 /**
Rohit Grover 106:a20be740075d 344 * DEPRECATED
Rohit Grover 106:a20be740075d 345 */
Rohit Grover 106:a20be740075d 346 public:
Rohit Grover 106:a20be740075d 347 ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures, const GapAdvertisingData &scanResponse);
Rohit Grover 106:a20be740075d 348 ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures);
Rohit Grover 106:a20be740075d 349
Rohit Grover 106:a20be740075d 350 ble_error_t startAdvertising(const GapAdvertisingParams &advParams);
Rohit Grover 106:a20be740075d 351 };
Rohit Grover 106:a20be740075d 352
Rohit Grover 106:a20be740075d 353 /* BLEDevice methods. Most of these simply forward the calls to the underlying
Rohit Grover 106:a20be740075d 354 * transport.*/
Rohit Grover 106:a20be740075d 355
Rohit Grover 106:a20be740075d 356 inline ble_error_t
Rohit Grover 106:a20be740075d 357 BLEDevice::init()
Rohit Grover 106:a20be740075d 358 {
Rohit Grover 106:a20be740075d 359 return transport->init();
Rohit Grover 106:a20be740075d 360 }
Rohit Grover 106:a20be740075d 361
Rohit Grover 106:a20be740075d 362 inline ble_error_t
Rohit Grover 106:a20be740075d 363 BLEDevice::reset(void)
Rohit Grover 106:a20be740075d 364 {
Rohit Grover 106:a20be740075d 365 return transport->reset();
Rohit Grover 106:a20be740075d 366 }
Rohit Grover 106:a20be740075d 367
Rohit Grover 106:a20be740075d 368 inline ble_error_t
Rohit Grover 106:a20be740075d 369 BLEDevice::setAddress(Gap::addr_type_t type, const uint8_t address[6])
Rohit Grover 106:a20be740075d 370 {
Rohit Grover 106:a20be740075d 371 return transport->getGap().setAddress(type, address);
Rohit Grover 106:a20be740075d 372 }
Rohit Grover 106:a20be740075d 373
Rohit Grover 106:a20be740075d 374 inline void
Rohit Grover 106:a20be740075d 375 BLEDevice::setAdvertisingType(GapAdvertisingParams::AdvertisingType advType)
Rohit Grover 106:a20be740075d 376 {
Rohit Grover 106:a20be740075d 377 advParams.setAdvertisingType(advType);
Rohit Grover 106:a20be740075d 378 }
Rohit Grover 106:a20be740075d 379
Rohit Grover 106:a20be740075d 380 inline void
Rohit Grover 106:a20be740075d 381 BLEDevice::setAdvertisingInterval(uint16_t interval)
Rohit Grover 106:a20be740075d 382 {
Rohit Grover 106:a20be740075d 383 advParams.setInterval(interval);
Rohit Grover 106:a20be740075d 384 }
Rohit Grover 106:a20be740075d 385
Rohit Grover 106:a20be740075d 386 inline void
Rohit Grover 106:a20be740075d 387 BLEDevice::setAdvertisingTimeout(uint16_t timeout)
Rohit Grover 106:a20be740075d 388 {
Rohit Grover 106:a20be740075d 389 advParams.setTimeout(timeout);
Rohit Grover 106:a20be740075d 390 }
Rohit Grover 106:a20be740075d 391
Rohit Grover 106:a20be740075d 392 inline void
Rohit Grover 106:a20be740075d 393 BLEDevice::setAdvertisingParams(const GapAdvertisingParams &newAdvParams)
Rohit Grover 106:a20be740075d 394 {
Rohit Grover 106:a20be740075d 395 advParams = newAdvParams;
Rohit Grover 106:a20be740075d 396 }
Rohit Grover 106:a20be740075d 397
Rohit Grover 106:a20be740075d 398 inline void
Rohit Grover 106:a20be740075d 399 BLEDevice::clearAdvertisingPayload(void)
Rohit Grover 106:a20be740075d 400 {
Rohit Grover 106:a20be740075d 401 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 402 advPayload.clear();
Rohit Grover 106:a20be740075d 403 }
Rohit Grover 106:a20be740075d 404
Rohit Grover 106:a20be740075d 405 inline ble_error_t
Rohit Grover 106:a20be740075d 406 BLEDevice::accumulateAdvertisingPayload(uint8_t flags)
Rohit Grover 106:a20be740075d 407 {
Rohit Grover 106:a20be740075d 408 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 409 return advPayload.addFlags(flags);
Rohit Grover 106:a20be740075d 410 }
Rohit Grover 106:a20be740075d 411
Rohit Grover 106:a20be740075d 412 inline ble_error_t
Rohit Grover 106:a20be740075d 413 BLEDevice::accumulateAdvertisingPayload(GapAdvertisingData::Appearance app)
Rohit Grover 106:a20be740075d 414 {
Rohit Grover 106:a20be740075d 415 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 416 return advPayload.addAppearance(app);
Rohit Grover 106:a20be740075d 417 }
Rohit Grover 106:a20be740075d 418
Rohit Grover 106:a20be740075d 419 inline ble_error_t
Rohit Grover 106:a20be740075d 420 BLEDevice::accumulateAdvertisingPayloadTxPower(int8_t txPower)
Rohit Grover 106:a20be740075d 421 {
Rohit Grover 106:a20be740075d 422 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 423 return advPayload.addTxPower(txPower);
Rohit Grover 106:a20be740075d 424 }
Rohit Grover 106:a20be740075d 425
Rohit Grover 106:a20be740075d 426 inline ble_error_t
Rohit Grover 106:a20be740075d 427 BLEDevice::accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len)
Rohit Grover 106:a20be740075d 428 {
Rohit Grover 106:a20be740075d 429 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 430 return advPayload.addData(type, data, len);
Rohit Grover 106:a20be740075d 431 }
Rohit Grover 106:a20be740075d 432
Rohit Grover 106:a20be740075d 433 inline ble_error_t
Rohit Grover 106:a20be740075d 434 BLEDevice::accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len)
Rohit Grover 106:a20be740075d 435 {
Rohit Grover 106:a20be740075d 436 needToSetAdvPayload = true;
Rohit Grover 106:a20be740075d 437 return scanResponse.addData(type, data, len);
Rohit Grover 106:a20be740075d 438 }
Rohit Grover 106:a20be740075d 439
Rohit Grover 106:a20be740075d 440 inline ble_error_t
Rohit Grover 106:a20be740075d 441 BLEDevice::setAdvertisingPayload(void) {
Rohit Grover 106:a20be740075d 442 needToSetAdvPayload = false;
Rohit Grover 106:a20be740075d 443 return transport->getGap().setAdvertisingData(advPayload, scanResponse);
Rohit Grover 106:a20be740075d 444 }
Rohit Grover 106:a20be740075d 445
Rohit Grover 106:a20be740075d 446 inline ble_error_t
Rohit Grover 106:a20be740075d 447 BLEDevice::startAdvertising(void)
Rohit Grover 106:a20be740075d 448 {
Rohit Grover 106:a20be740075d 449 if (needToSetAdvPayload) {
Rohit Grover 106:a20be740075d 450 ble_error_t rc;
Rohit Grover 106:a20be740075d 451 if ((rc = setAdvertisingPayload()) != BLE_ERROR_NONE) {
Rohit Grover 106:a20be740075d 452 return rc;
Rohit Grover 106:a20be740075d 453 }
Rohit Grover 106:a20be740075d 454 }
Rohit Grover 106:a20be740075d 455
Rohit Grover 106:a20be740075d 456 return transport->getGap().startAdvertising(advParams);
Rohit Grover 106:a20be740075d 457 }
Rohit Grover 106:a20be740075d 458
Rohit Grover 106:a20be740075d 459 inline ble_error_t
Rohit Grover 106:a20be740075d 460 BLEDevice::stopAdvertising(void)
Rohit Grover 106:a20be740075d 461 {
Rohit Grover 106:a20be740075d 462 return transport->getGap().stopAdvertising();
Rohit Grover 106:a20be740075d 463 }
Rohit Grover 106:a20be740075d 464
Rohit Grover 106:a20be740075d 465 inline ble_error_t
Rohit Grover 116:ca826083980e 466 BLEDevice::disconnect(Gap::DisconnectionReason_t reason)
Rohit Grover 106:a20be740075d 467 {
Rohit Grover 116:ca826083980e 468 return transport->getGap().disconnect(reason);
Rohit Grover 106:a20be740075d 469 }
Rohit Grover 106:a20be740075d 470
Rohit Grover 106:a20be740075d 471 inline void
Rohit Grover 106:a20be740075d 472 BLEDevice::onTimeout(Gap::EventCallback_t timeoutCallback)
Rohit Grover 106:a20be740075d 473 {
Rohit Grover 106:a20be740075d 474 transport->getGap().setOnTimeout(timeoutCallback);
Rohit Grover 106:a20be740075d 475 }
Rohit Grover 106:a20be740075d 476
Rohit Grover 106:a20be740075d 477 inline void
Rohit Grover 116:ca826083980e 478 BLEDevice::onConnection(Gap::ConnectionEventCallback_t connectionCallback)
Rohit Grover 106:a20be740075d 479 {
Rohit Grover 106:a20be740075d 480 transport->getGap().setOnConnection(connectionCallback);
Rohit Grover 106:a20be740075d 481 }
Rohit Grover 106:a20be740075d 482
Rohit Grover 106:a20be740075d 483 inline void
Rohit Grover 116:ca826083980e 484 BLEDevice::onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback)
Rohit Grover 106:a20be740075d 485 {
Rohit Grover 106:a20be740075d 486 transport->getGap().setOnDisconnection(disconnectionCallback);
Rohit Grover 106:a20be740075d 487 }
Rohit Grover 106:a20be740075d 488
Rohit Grover 106:a20be740075d 489 inline void
Rohit Grover 116:ca826083980e 490 BLEDevice::onDataSent(GattServer::ServerEventCallbackWithCount_t callback)
Rohit Grover 106:a20be740075d 491 {
Rohit Grover 106:a20be740075d 492 transport->getGattServer().setOnDataSent(callback);
Rohit Grover 106:a20be740075d 493 }
Rohit Grover 106:a20be740075d 494
Rohit Grover 106:a20be740075d 495 inline void
Rohit Grover 118:620d28e7a1ba 496 BLEDevice::onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)) {
Rohit Grover 106:a20be740075d 497 transport->getGattServer().setOnDataWritten(callback);
Rohit Grover 106:a20be740075d 498 }
Rohit Grover 106:a20be740075d 499
Rohit Grover 118:620d28e7a1ba 500 template <typename T> inline void
Rohit Grover 118:620d28e7a1ba 501 BLEDevice::onDataWritten(T *objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)) {
Rohit Grover 118:620d28e7a1ba 502 transport->getGattServer().setOnDataWritten(objPtr, memberPtr);
Rohit Grover 118:620d28e7a1ba 503 }
Rohit Grover 118:620d28e7a1ba 504
Rohit Grover 118:620d28e7a1ba 505
Rohit Grover 106:a20be740075d 506 inline void
Rohit Grover 106:a20be740075d 507 BLEDevice::onUpdatesEnabled(GattServer::EventCallback_t callback)
Rohit Grover 106:a20be740075d 508 {
Rohit Grover 106:a20be740075d 509 transport->getGattServer().setOnUpdatesEnabled(callback);
Rohit Grover 106:a20be740075d 510 }
Rohit Grover 106:a20be740075d 511
Rohit Grover 106:a20be740075d 512 inline void
Rohit Grover 106:a20be740075d 513 BLEDevice::onUpdatesDisabled(GattServer::EventCallback_t callback)
Rohit Grover 106:a20be740075d 514 {
Rohit Grover 106:a20be740075d 515 transport->getGattServer().setOnUpdatesDisabled(callback);
Rohit Grover 106:a20be740075d 516 }
Rohit Grover 106:a20be740075d 517
Rohit Grover 106:a20be740075d 518 inline void
Rohit Grover 106:a20be740075d 519 BLEDevice::onConfirmationReceived(GattServer::EventCallback_t callback)
Rohit Grover 106:a20be740075d 520 {
Rohit Grover 106:a20be740075d 521 transport->getGattServer().setOnConfirmationReceived(callback);
Rohit Grover 106:a20be740075d 522 }
Rohit Grover 106:a20be740075d 523
Rohit Grover 106:a20be740075d 524 inline ble_error_t
Rohit Grover 106:a20be740075d 525 BLEDevice::addService(GattService &service)
Rohit Grover 106:a20be740075d 526 {
Rohit Grover 106:a20be740075d 527 return transport->getGattServer().addService(service);
Rohit Grover 106:a20be740075d 528 }
Rohit Grover 106:a20be740075d 529
Rohit Grover 106:a20be740075d 530 inline Gap::GapState_t
Rohit Grover 106:a20be740075d 531 BLEDevice::getGapState(void) const
Rohit Grover 106:a20be740075d 532 {
Rohit Grover 106:a20be740075d 533 return transport->getGap().getState();
Rohit Grover 106:a20be740075d 534 }
Rohit Grover 106:a20be740075d 535
Rohit Grover 106:a20be740075d 536 inline ble_error_t BLEDevice::readCharacteristicValue(uint16_t handle, uint8_t *const buffer, uint16_t *const lengthP)
Rohit Grover 106:a20be740075d 537 {
Rohit Grover 106:a20be740075d 538 return transport->getGattServer().readValue(handle, buffer, lengthP);
Rohit Grover 106:a20be740075d 539 }
Rohit Grover 106:a20be740075d 540
Rohit Grover 106:a20be740075d 541 inline ble_error_t
Rohit Grover 106:a20be740075d 542 BLEDevice::updateCharacteristicValue(uint16_t handle, const uint8_t* value, uint16_t size, bool localOnly)
Rohit Grover 106:a20be740075d 543 {
Rohit Grover 106:a20be740075d 544 return transport->getGattServer().updateValue(handle, const_cast<uint8_t *>(value), size, localOnly);
Rohit Grover 106:a20be740075d 545 }
Rohit Grover 106:a20be740075d 546
Rohit Grover 106:a20be740075d 547 inline void
Rohit Grover 106:a20be740075d 548 BLEDevice::waitForEvent(void)
Rohit Grover 106:a20be740075d 549 {
Rohit Grover 106:a20be740075d 550 transport->waitForEvent();
Rohit Grover 106:a20be740075d 551 }
Rohit Grover 106:a20be740075d 552
Rohit Grover 106:a20be740075d 553 inline ble_error_t
Rohit Grover 106:a20be740075d 554 BLEDevice::getPreferredConnectionParams(Gap::ConnectionParams_t *params)
Rohit Grover 106:a20be740075d 555 {
Rohit Grover 106:a20be740075d 556 return transport->getGap().getPreferredConnectionParams(params);
Rohit Grover 106:a20be740075d 557 }
Rohit Grover 106:a20be740075d 558
Rohit Grover 106:a20be740075d 559 inline ble_error_t
Rohit Grover 106:a20be740075d 560 BLEDevice::setPreferredConnectionParams(const Gap::ConnectionParams_t *params)
Rohit Grover 106:a20be740075d 561 {
Rohit Grover 106:a20be740075d 562 return transport->getGap().setPreferredConnectionParams(params);
Rohit Grover 106:a20be740075d 563 }
Rohit Grover 106:a20be740075d 564
Rohit Grover 106:a20be740075d 565 inline ble_error_t
Rohit Grover 106:a20be740075d 566 BLEDevice::updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) {
Rohit Grover 106:a20be740075d 567 return transport->getGap().updateConnectionParams(handle, params);
Rohit Grover 106:a20be740075d 568 }
Rohit Grover 106:a20be740075d 569
Rohit Grover 108:c85ab5f1eca0 570 inline const char *
Rohit Grover 108:c85ab5f1eca0 571 BLEDevice::getVersion(void)
Rohit Grover 108:c85ab5f1eca0 572 {
Rohit Grover 108:c85ab5f1eca0 573 return transport->getVersion();
Rohit Grover 108:c85ab5f1eca0 574 }
Rohit Grover 108:c85ab5f1eca0 575
Rohit Grover 108:c85ab5f1eca0 576 inline ble_error_t
Rohit Grover 108:c85ab5f1eca0 577 BLEDevice::setDeviceName(const uint8_t *deviceName)
Rohit Grover 108:c85ab5f1eca0 578 {
Rohit Grover 116:ca826083980e 579 return transport->getGap().setDeviceName(deviceName);
Rohit Grover 108:c85ab5f1eca0 580 }
Rohit Grover 108:c85ab5f1eca0 581
Rohit Grover 108:c85ab5f1eca0 582 inline ble_error_t
Rohit Grover 108:c85ab5f1eca0 583 BLEDevice::getDeviceName(uint8_t *deviceName, unsigned *lengthP)
Rohit Grover 108:c85ab5f1eca0 584 {
Rohit Grover 116:ca826083980e 585 return transport->getGap().getDeviceName(deviceName, lengthP);
Rohit Grover 108:c85ab5f1eca0 586 }
Rohit Grover 108:c85ab5f1eca0 587
Rohit Grover 108:c85ab5f1eca0 588 inline ble_error_t
Rohit Grover 108:c85ab5f1eca0 589 BLEDevice::setAppearance(uint16_t appearance)
Rohit Grover 108:c85ab5f1eca0 590 {
Rohit Grover 116:ca826083980e 591 return transport->getGap().setAppearance(appearance);
Rohit Grover 108:c85ab5f1eca0 592 }
Rohit Grover 108:c85ab5f1eca0 593
Rohit Grover 108:c85ab5f1eca0 594 inline ble_error_t
Rohit Grover 108:c85ab5f1eca0 595 BLEDevice::getAppearance(uint16_t *appearanceP)
Rohit Grover 108:c85ab5f1eca0 596 {
Rohit Grover 116:ca826083980e 597 return transport->getGap().getAppearance(appearanceP);
Rohit Grover 108:c85ab5f1eca0 598 }
Rohit Grover 108:c85ab5f1eca0 599
Rohit Grover 108:c85ab5f1eca0 600 inline ble_error_t
Rohit Grover 108:c85ab5f1eca0 601 BLEDevice::setTxPower(int8_t txPower)
Rohit Grover 108:c85ab5f1eca0 602 {
Rohit Grover 108:c85ab5f1eca0 603 return transport->setTxPower(txPower);
Rohit Grover 108:c85ab5f1eca0 604 }
Rohit Grover 108:c85ab5f1eca0 605
Rohit Grover 106:a20be740075d 606 /*
Rohit Grover 106:a20be740075d 607 * ALL OF THE FOLLOWING METHODS ARE DEPRECATED
Rohit Grover 106:a20be740075d 608 */
Rohit Grover 106:a20be740075d 609
Rohit Grover 106:a20be740075d 610 inline ble_error_t
Rohit Grover 106:a20be740075d 611 BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures, const GapAdvertisingData &scanResponse)
Rohit Grover 106:a20be740075d 612 {
Rohit Grover 106:a20be740075d 613 needToSetAdvPayload = false;
Rohit Grover 106:a20be740075d 614 return transport->getGap().setAdvertisingData(ADStructures, scanResponse);
Rohit Grover 106:a20be740075d 615 }
Rohit Grover 106:a20be740075d 616
Rohit Grover 106:a20be740075d 617 inline ble_error_t
Rohit Grover 106:a20be740075d 618 BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures)
Rohit Grover 106:a20be740075d 619 {
Rohit Grover 106:a20be740075d 620 GapAdvertisingData scanResponse;
Rohit Grover 106:a20be740075d 621
Rohit Grover 106:a20be740075d 622 needToSetAdvPayload = false;
Rohit Grover 106:a20be740075d 623 return transport->getGap().setAdvertisingData(ADStructures, scanResponse);
Rohit Grover 106:a20be740075d 624 }
Rohit Grover 106:a20be740075d 625
Rohit Grover 106:a20be740075d 626 inline ble_error_t
Rohit Grover 106:a20be740075d 627 BLEDevice::startAdvertising(const GapAdvertisingParams &_advParams)
Rohit Grover 106:a20be740075d 628 {
Rohit Grover 106:a20be740075d 629 return transport->getGap().startAdvertising(_advParams);
Rohit Grover 106:a20be740075d 630 }
Rohit Grover 106:a20be740075d 631
Rohit Grover 106:a20be740075d 632 #endif // ifndef __BLE_DEVICE__