test

Dependents:   BLE_PowerBank_HeyFaradey

Fork of BLE_API by Bluetooth Low Energy

Committer:
rgrover1
Date:
Mon Nov 02 09:09:05 2015 +0000
Revision:
851:802f445cc195
Parent:
850:32ff6e392630
Child:
852:f0de1349300c
Synchronized with git rev 129683bd
Author: Vincent Coubard
Code and command cleanup:
- add a space after if keyword
- Use typedef types instead of direct declarations for
pFunctionPointerWithContext_t and pvoidfcontext_t
- Fix typos and enhance comment about how alignement and size
requirements of the member function pointer are computed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 716:11b41f651697 1 /* mbed Microcontroller Library
rgrover1 716:11b41f651697 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 716:11b41f651697 3 *
rgrover1 716:11b41f651697 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 716:11b41f651697 5 * you may not use this file except in compliance with the License.
rgrover1 716:11b41f651697 6 * You may obtain a copy of the License at
rgrover1 716:11b41f651697 7 *
rgrover1 716:11b41f651697 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 716:11b41f651697 9 *
rgrover1 716:11b41f651697 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 716:11b41f651697 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 716:11b41f651697 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 716:11b41f651697 13 * See the License for the specific language governing permissions and
rgrover1 716:11b41f651697 14 * limitations under the License.
rgrover1 716:11b41f651697 15 */
rgrover1 716:11b41f651697 16
rgrover1 716:11b41f651697 17 #ifndef __BLE_H__
rgrover1 716:11b41f651697 18 #define __BLE_H__
rgrover1 716:11b41f651697 19
rgrover1 716:11b41f651697 20 #include "blecommon.h"
rgrover1 716:11b41f651697 21 #include "Gap.h"
rgrover1 716:11b41f651697 22 #include "GattServer.h"
rgrover1 716:11b41f651697 23 #include "GattClient.h"
rgrover1 716:11b41f651697 24 #include "BLEInstanceBase.h"
rgrover1 716:11b41f651697 25
rgrover1 851:802f445cc195 26 #ifdef YOTTA_CFG_MBED_OS
rgrover1 851:802f445cc195 27 #include "mbed-drivers/mbed_error.h"
rgrover1 851:802f445cc195 28 #else
rgrover1 818:61c62a287194 29 #include "mbed_error.h"
rgrover1 851:802f445cc195 30 #endif
rgrover1 818:61c62a287194 31
rgrover1 716:11b41f651697 32 /**
rgrover1 716:11b41f651697 33 * The base class used to abstract away BLE capable radio transceivers or SOCs,
rgrover1 716:11b41f651697 34 * to enable this BLE API to work with any radio transparently.
rgrover1 716:11b41f651697 35 */
rgrover1 716:11b41f651697 36 class BLE
rgrover1 716:11b41f651697 37 {
rgrover1 716:11b41f651697 38 public:
rgrover1 716:11b41f651697 39 /**
rgrover1 716:11b41f651697 40 * Initialize the BLE controller. This should be called before using
rgrover1 716:11b41f651697 41 * anything else in the BLE_API.
rgrover1 716:11b41f651697 42 *
rgrover1 716:11b41f651697 43 * init() hands control to the underlying BLE module to accomplish
rgrover1 716:11b41f651697 44 * initialization. This initialization may tacitly depend on other hardware
rgrover1 716:11b41f651697 45 * setup (such as clocks or power-modes) which happens early on during
rgrover1 716:11b41f651697 46 * system startup. It may not be safe to call init() from global static
rgrover1 716:11b41f651697 47 * context where ordering is compiler specific and can't be guaranteed--it
rgrover1 716:11b41f651697 48 * is safe to call BLE::init() from within main().
rgrover1 716:11b41f651697 49 */
rgrover1 716:11b41f651697 50 ble_error_t init();
rgrover1 716:11b41f651697 51
rgrover1 716:11b41f651697 52 /**
rgrover1 716:11b41f651697 53 * Purge the BLE stack of GATT and GAP state. init() must be called
rgrover1 716:11b41f651697 54 * afterwards to re-instate services and GAP state. This API offers a way to
rgrover1 716:11b41f651697 55 * repopulate the GATT database with new services and characteristics.
rgrover1 716:11b41f651697 56 */
rgrover1 716:11b41f651697 57 ble_error_t shutdown(void) {
rgrover1 716:11b41f651697 58 clearAdvertisingPayload();
rgrover1 818:61c62a287194 59 if (!transport) {
rgrover1 818:61c62a287194 60 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 61 }
rgrover1 716:11b41f651697 62 return transport->shutdown();
rgrover1 716:11b41f651697 63 }
rgrover1 716:11b41f651697 64
rgrover1 716:11b41f651697 65 /**
rgrover1 716:11b41f651697 66 * This call allows the application to get the BLE stack version information.
rgrover1 716:11b41f651697 67 *
rgrover1 716:11b41f651697 68 * @return A pointer to a const string representing the version.
rgrover1 716:11b41f651697 69 * Note: The string is owned by the BLE_API.
rgrover1 716:11b41f651697 70 */
rgrover1 716:11b41f651697 71 const char *getVersion(void) {
rgrover1 818:61c62a287194 72 if (!transport) {
rgrover1 818:61c62a287194 73 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 74 }
rgrover1 716:11b41f651697 75 return transport->getVersion();
rgrover1 716:11b41f651697 76 }
rgrover1 716:11b41f651697 77
rgrover1 716:11b41f651697 78 /*
rgrover1 716:11b41f651697 79 * Accessors to GAP. Please refer to Gap.h. All GAP related functionality requires
rgrover1 716:11b41f651697 80 * going through this accessor.
rgrover1 716:11b41f651697 81 */
rgrover1 716:11b41f651697 82 const Gap &gap() const {
rgrover1 818:61c62a287194 83 if (!transport) {
rgrover1 818:61c62a287194 84 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 85 }
rgrover1 716:11b41f651697 86 return transport->getGap();
rgrover1 716:11b41f651697 87 }
rgrover1 716:11b41f651697 88 Gap &gap() {
rgrover1 818:61c62a287194 89 if (!transport) {
rgrover1 818:61c62a287194 90 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 91 }
rgrover1 716:11b41f651697 92 return transport->getGap();
rgrover1 716:11b41f651697 93 }
rgrover1 716:11b41f651697 94
rgrover1 716:11b41f651697 95 /*
rgrover1 716:11b41f651697 96 * Accessors to GATT Server. Please refer to GattServer.h. All GATTServer related
rgrover1 716:11b41f651697 97 * functionality requires going through this accessor.
rgrover1 716:11b41f651697 98 */
rgrover1 716:11b41f651697 99 const GattServer& gattServer() const {
rgrover1 818:61c62a287194 100 if (!transport) {
rgrover1 818:61c62a287194 101 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 102 }
rgrover1 716:11b41f651697 103 return transport->getGattServer();
rgrover1 716:11b41f651697 104 }
rgrover1 716:11b41f651697 105 GattServer& gattServer() {
rgrover1 818:61c62a287194 106 if (!transport) {
rgrover1 818:61c62a287194 107 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 108 }
rgrover1 716:11b41f651697 109 return transport->getGattServer();
rgrover1 716:11b41f651697 110 }
rgrover1 716:11b41f651697 111
rgrover1 716:11b41f651697 112 /*
rgrover1 716:11b41f651697 113 * Accessors to GATT Client. Please refer to GattClient.h. All GATTClient related
rgrover1 716:11b41f651697 114 * functionality requires going through this accessor.
rgrover1 716:11b41f651697 115 */
rgrover1 716:11b41f651697 116 const GattClient& gattClient() const {
rgrover1 818:61c62a287194 117 if (!transport) {
rgrover1 818:61c62a287194 118 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 119 }
rgrover1 716:11b41f651697 120 return transport->getGattClient();
rgrover1 716:11b41f651697 121 }
rgrover1 716:11b41f651697 122 GattClient& gattClient() {
rgrover1 818:61c62a287194 123 if (!transport) {
rgrover1 818:61c62a287194 124 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 125 }
rgrover1 716:11b41f651697 126 return transport->getGattClient();
rgrover1 716:11b41f651697 127 }
rgrover1 716:11b41f651697 128
rgrover1 716:11b41f651697 129 /*
rgrover1 716:11b41f651697 130 * Accessors to Security Manager. Please refer to SecurityManager.h. All
rgrover1 716:11b41f651697 131 * SecurityManager related functionality requires going through this
rgrover1 716:11b41f651697 132 * accessor.
rgrover1 716:11b41f651697 133 */
rgrover1 716:11b41f651697 134 const SecurityManager& securityManager() const {
rgrover1 818:61c62a287194 135 if (!transport) {
rgrover1 818:61c62a287194 136 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 137 }
rgrover1 716:11b41f651697 138 return transport->getSecurityManager();
rgrover1 716:11b41f651697 139 }
rgrover1 716:11b41f651697 140 SecurityManager& securityManager() {
rgrover1 818:61c62a287194 141 if (!transport) {
rgrover1 818:61c62a287194 142 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 143 }
rgrover1 716:11b41f651697 144 return transport->getSecurityManager();
rgrover1 716:11b41f651697 145 }
rgrover1 716:11b41f651697 146
rgrover1 716:11b41f651697 147 /**
rgrover1 716:11b41f651697 148 * Yield control to the BLE stack or to other tasks waiting for events. This
rgrover1 716:11b41f651697 149 * is a sleep function which will return when there is an application
rgrover1 716:11b41f651697 150 * specific interrupt, but the MCU might wake up several times before
rgrover1 716:11b41f651697 151 * returning (to service the stack). This is not always interchangeable with
rgrover1 716:11b41f651697 152 * WFE().
rgrover1 716:11b41f651697 153 */
rgrover1 716:11b41f651697 154 void waitForEvent(void) {
rgrover1 818:61c62a287194 155 if (!transport) {
rgrover1 818:61c62a287194 156 error("bad handle to underlying transport");
rgrover1 818:61c62a287194 157 }
rgrover1 716:11b41f651697 158 transport->waitForEvent();
rgrover1 716:11b41f651697 159 }
rgrover1 716:11b41f651697 160
rgrover1 822:a0f080d1e836 161 public:
rgrover1 822:a0f080d1e836 162 typedef unsigned InstanceID_t;
rgrover1 822:a0f080d1e836 163 static const InstanceID_t DEFAULT_INSTANCE = 0;
rgrover1 822:a0f080d1e836 164 #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT
rgrover1 822:a0f080d1e836 165 static const InstanceID_t NUM_INSTANCES = 1;
rgrover1 822:a0f080d1e836 166 #else
rgrover1 822:a0f080d1e836 167 static const InstanceID_t NUM_INSTANCES = YOTTA_CFG_BLE_INSTANCES_COUNT;
rgrover1 822:a0f080d1e836 168 #endif
rgrover1 822:a0f080d1e836 169
rgrover1 822:a0f080d1e836 170 /**
rgrover1 822:a0f080d1e836 171 * Get a reference to the BLE singleton corresponding to a given interface.
rgrover1 822:a0f080d1e836 172 * There is a static array of BLE singletons.
rgrover1 822:a0f080d1e836 173 *
rgrover1 822:a0f080d1e836 174 * @Note: Calling Instance() is preferred over constructing a BLE object
rgrover1 822:a0f080d1e836 175 * directly, as it returns references to singletons.
rgrover1 822:a0f080d1e836 176 *
rgrover1 822:a0f080d1e836 177 * @param[in] id
rgrover1 822:a0f080d1e836 178 * Instance-ID. This should be less than NUM_INSTANCES in order
rgrover1 822:a0f080d1e836 179 * for the returned BLE singleton to be useful.
rgrover1 822:a0f080d1e836 180 *
rgrover1 822:a0f080d1e836 181 * @return a reference to a single object
rgrover1 822:a0f080d1e836 182 */
rgrover1 822:a0f080d1e836 183 static BLE &Instance(InstanceID_t id = DEFAULT_INSTANCE);
rgrover1 822:a0f080d1e836 184
rgrover1 822:a0f080d1e836 185 /**
rgrover1 822:a0f080d1e836 186 * Constructor for a handle to a BLE instance (i.e. BLE stack). BLE handles
rgrover1 822:a0f080d1e836 187 * are thin wrappers around a transport object (i.e. ptr. to
rgrover1 822:a0f080d1e836 188 * BLEInstanceBase).
rgrover1 822:a0f080d1e836 189 *
rgrover1 822:a0f080d1e836 190 * BLE objects are are better created as singletons accessed through the
rgrover1 822:a0f080d1e836 191 * Instance() method. If multiple BLE handles are constructed for the same
rgrover1 822:a0f080d1e836 192 * interface (using this constructor), they will share the same underlying
rgrover1 822:a0f080d1e836 193 * transport object.
rgrover1 822:a0f080d1e836 194 */
rgrover1 822:a0f080d1e836 195 BLE(InstanceID_t instanceID = DEFAULT_INSTANCE);
rgrover1 822:a0f080d1e836 196
rgrover1 822:a0f080d1e836 197
rgrover1 716:11b41f651697 198 /*
rgrover1 716:11b41f651697 199 * Deprecation alert!
rgrover1 716:11b41f651697 200 * All of the following are deprecated and may be dropped in a future
rgrover1 716:11b41f651697 201 * release. Documentation should refer to alternative APIs.
rgrover1 716:11b41f651697 202 */
rgrover1 716:11b41f651697 203
rgrover1 716:11b41f651697 204 /* GAP specific APIs. */
rgrover1 716:11b41f651697 205 public:
rgrover1 716:11b41f651697 206 /**
rgrover1 716:11b41f651697 207 * Set the BTLE MAC address and type.
rgrover1 716:11b41f651697 208 * @return BLE_ERROR_NONE on success.
rgrover1 716:11b41f651697 209 *
rgrover1 716:11b41f651697 210 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 211 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 212 * ble.setAddress(...) should be replaced with
rgrover1 716:11b41f651697 213 * ble.gap().setAddress(...).
rgrover1 716:11b41f651697 214 */
rgrover1 716:11b41f651697 215 ble_error_t setAddress(Gap::AddressType_t type, const Gap::Address_t address) {
rgrover1 716:11b41f651697 216 return gap().setAddress(type, address);
rgrover1 716:11b41f651697 217 }
rgrover1 716:11b41f651697 218
rgrover1 716:11b41f651697 219 /**
rgrover1 716:11b41f651697 220 * Fetch the BTLE MAC address and type.
rgrover1 716:11b41f651697 221 * @return BLE_ERROR_NONE on success.
rgrover1 716:11b41f651697 222 *
rgrover1 716:11b41f651697 223 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 224 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 225 * ble.getAddress(...) should be replaced with
rgrover1 716:11b41f651697 226 * ble.gap().getAddress(...).
rgrover1 716:11b41f651697 227 */
rgrover1 716:11b41f651697 228 ble_error_t getAddress(Gap::AddressType_t *typeP, Gap::Address_t address) {
rgrover1 716:11b41f651697 229 return gap().getAddress(typeP, address);
rgrover1 716:11b41f651697 230 }
rgrover1 716:11b41f651697 231
rgrover1 716:11b41f651697 232 /**
rgrover1 716:11b41f651697 233 * Set the GAP advertising mode to use for this device.
rgrover1 716:11b41f651697 234 *
rgrover1 716:11b41f651697 235 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 236 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 237 * ble.setAdvertisingType(...) should be replaced with
rgrover1 716:11b41f651697 238 * ble.gap().setAdvertisingType(...).
rgrover1 716:11b41f651697 239 */
rgrover1 716:11b41f651697 240 void setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) {
rgrover1 716:11b41f651697 241 gap().setAdvertisingType(advType);
rgrover1 716:11b41f651697 242 }
rgrover1 716:11b41f651697 243
rgrover1 716:11b41f651697 244 /**
rgrover1 716:11b41f651697 245 * @param[in] interval
rgrover1 716:11b41f651697 246 * Advertising interval in units of milliseconds. Advertising
rgrover1 716:11b41f651697 247 * is disabled if interval is 0. If interval is smaller than
rgrover1 716:11b41f651697 248 * the minimum supported value, then the minimum supported
rgrover1 716:11b41f651697 249 * value is used instead. This minimum value can be discovered
rgrover1 716:11b41f651697 250 * using getMinAdvertisingInterval().
rgrover1 716:11b41f651697 251 *
rgrover1 716:11b41f651697 252 * This field must be set to 0 if connectionMode is equal
rgrover1 716:11b41f651697 253 * to ADV_CONNECTABLE_DIRECTED.
rgrover1 716:11b41f651697 254 *
rgrover1 716:11b41f651697 255 * @note: Decreasing this value will allow central devices to detect a
rgrover1 716:11b41f651697 256 * peripheral faster at the expense of more power being used by the radio
rgrover1 716:11b41f651697 257 * due to the higher data transmit rate.
rgrover1 716:11b41f651697 258 *
rgrover1 716:11b41f651697 259 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 260 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 261 * ble.setAdvertisingInterval(...) should be replaced with
rgrover1 716:11b41f651697 262 * ble.gap().setAdvertisingInterval(...).
rgrover1 716:11b41f651697 263 *
rgrover1 716:11b41f651697 264 * @note: [WARNING] This API previously used 0.625ms as the unit for its
rgrover1 716:11b41f651697 265 * 'interval' argument. That required an explicit conversion from
rgrover1 716:11b41f651697 266 * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is
rgrover1 716:11b41f651697 267 * no longer required as the new units are milliseconds. Any application
rgrover1 716:11b41f651697 268 * code depending on the old semantics would need to be updated accordingly.
rgrover1 716:11b41f651697 269 */
rgrover1 716:11b41f651697 270 void setAdvertisingInterval(uint16_t interval) {
rgrover1 716:11b41f651697 271 gap().setAdvertisingInterval(interval);
rgrover1 716:11b41f651697 272 }
rgrover1 716:11b41f651697 273
rgrover1 716:11b41f651697 274 /**
rgrover1 716:11b41f651697 275 * @return Minimum Advertising interval in milliseconds.
rgrover1 716:11b41f651697 276 *
rgrover1 716:11b41f651697 277 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 278 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 279 * ble.getMinAdvertisingInterval(...) should be replaced with
rgrover1 716:11b41f651697 280 * ble.gap().getMinAdvertisingInterval(...).
rgrover1 716:11b41f651697 281 */
rgrover1 716:11b41f651697 282 uint16_t getMinAdvertisingInterval(void) const {
rgrover1 716:11b41f651697 283 return gap().getMinAdvertisingInterval();
rgrover1 716:11b41f651697 284 }
rgrover1 716:11b41f651697 285
rgrover1 716:11b41f651697 286 /**
rgrover1 716:11b41f651697 287 * @return Minimum Advertising interval in milliseconds for non-connectible mode.
rgrover1 716:11b41f651697 288 *
rgrover1 716:11b41f651697 289 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 290 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 291 * ble.getMinNonConnectableAdvertisingInterval(...) should be replaced with
rgrover1 716:11b41f651697 292 * ble.gap().getMinNonConnectableAdvertisingInterval(...).
rgrover1 716:11b41f651697 293 */
rgrover1 716:11b41f651697 294 uint16_t getMinNonConnectableAdvertisingInterval(void) const {
rgrover1 716:11b41f651697 295 return gap().getMinNonConnectableAdvertisingInterval();
rgrover1 716:11b41f651697 296 }
rgrover1 716:11b41f651697 297
rgrover1 716:11b41f651697 298 /**
rgrover1 716:11b41f651697 299 * @return Maximum Advertising interval in milliseconds.
rgrover1 716:11b41f651697 300 *
rgrover1 716:11b41f651697 301 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 302 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 303 * ble.getMaxAdvertisingInterval(...) should be replaced with
rgrover1 716:11b41f651697 304 * ble.gap().getMaxAdvertisingInterval(...).
rgrover1 716:11b41f651697 305 */
rgrover1 716:11b41f651697 306 uint16_t getMaxAdvertisingInterval(void) const {
rgrover1 716:11b41f651697 307 return gap().getMaxAdvertisingInterval();
rgrover1 716:11b41f651697 308 }
rgrover1 716:11b41f651697 309
rgrover1 716:11b41f651697 310 /**
rgrover1 716:11b41f651697 311 * @param[in] timeout
rgrover1 716:11b41f651697 312 * Advertising timeout (in seconds) between 0x1 and 0x3FFF (1
rgrover1 716:11b41f651697 313 * and 16383). Use 0 to disable the advertising timeout.
rgrover1 716:11b41f651697 314 *
rgrover1 716:11b41f651697 315 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 316 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 317 * ble.setAdvertisingTimeout(...) should be replaced with
rgrover1 716:11b41f651697 318 * ble.gap().setAdvertisingTimeout(...).
rgrover1 716:11b41f651697 319 */
rgrover1 716:11b41f651697 320 void setAdvertisingTimeout(uint16_t timeout) {
rgrover1 716:11b41f651697 321 gap().setAdvertisingTimeout(timeout);
rgrover1 716:11b41f651697 322 }
rgrover1 716:11b41f651697 323
rgrover1 716:11b41f651697 324 /**
rgrover1 716:11b41f651697 325 * Setup a particular, user-constructed set of advertisement parameters for
rgrover1 716:11b41f651697 326 * the underlying stack. It would be uncommon for this API to be used
rgrover1 716:11b41f651697 327 * directly; there are other APIs to tweak advertisement parameters
rgrover1 716:11b41f651697 328 * individually (see above).
rgrover1 716:11b41f651697 329 *
rgrover1 716:11b41f651697 330 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 331 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 332 * ble.setAdvertisingParams(...) should be replaced with
rgrover1 716:11b41f651697 333 * ble.gap().setAdvertisingParams(...).
rgrover1 716:11b41f651697 334 */
rgrover1 716:11b41f651697 335 void setAdvertisingParams(const GapAdvertisingParams &advParams) {
rgrover1 716:11b41f651697 336 gap().setAdvertisingParams(advParams);
rgrover1 716:11b41f651697 337 }
rgrover1 716:11b41f651697 338
rgrover1 716:11b41f651697 339 /**
rgrover1 716:11b41f651697 340 * @return Read back advertising parameters. Useful for storing and
rgrover1 716:11b41f651697 341 * restoring parameters rapidly.
rgrover1 716:11b41f651697 342 *
rgrover1 716:11b41f651697 343 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 344 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 345 * ble.getAdvertisingParams(...) should be replaced with
rgrover1 716:11b41f651697 346 * ble.gap().getAdvertisingParams(...).
rgrover1 716:11b41f651697 347 */
rgrover1 716:11b41f651697 348 const GapAdvertisingParams &getAdvertisingParams(void) const {
rgrover1 716:11b41f651697 349 return gap().getAdvertisingParams();
rgrover1 716:11b41f651697 350 }
rgrover1 716:11b41f651697 351
rgrover1 716:11b41f651697 352 /**
rgrover1 716:11b41f651697 353 * Accumulate an AD structure in the advertising payload. Please note that
rgrover1 716:11b41f651697 354 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
rgrover1 716:11b41f651697 355 * as an additional 31 bytes if the advertising payload proves to be too
rgrover1 716:11b41f651697 356 * small.
rgrover1 716:11b41f651697 357 *
rgrover1 716:11b41f651697 358 * @param[in] flags
rgrover1 716:11b41f651697 359 * The flags to be added. Please refer to
rgrover1 716:11b41f651697 360 * GapAdvertisingData::Flags for valid flags. Multiple
rgrover1 716:11b41f651697 361 * flags may be specified in combination.
rgrover1 716:11b41f651697 362 *
rgrover1 716:11b41f651697 363 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 364 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 365 * ble.accumulateAdvertisingPayload(flags) should be replaced with
rgrover1 716:11b41f651697 366 * ble.gap().accumulateAdvertisingPayload(flags).
rgrover1 716:11b41f651697 367 */
rgrover1 716:11b41f651697 368 ble_error_t accumulateAdvertisingPayload(uint8_t flags) {
rgrover1 716:11b41f651697 369 return gap().accumulateAdvertisingPayload(flags);
rgrover1 716:11b41f651697 370 }
rgrover1 716:11b41f651697 371
rgrover1 716:11b41f651697 372 /**
rgrover1 716:11b41f651697 373 * Accumulate an AD structure in the advertising payload. Please note that
rgrover1 716:11b41f651697 374 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
rgrover1 716:11b41f651697 375 * as an additional 31 bytes if the advertising payload proves to be too
rgrover1 716:11b41f651697 376 * small.
rgrover1 716:11b41f651697 377 *
rgrover1 716:11b41f651697 378 * @param[in] app
rgrover1 716:11b41f651697 379 * The appearance of the peripheral.
rgrover1 716:11b41f651697 380 *
rgrover1 716:11b41f651697 381 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 382 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 383 * ble.accumulateAdvertisingPayload(appearance) should be replaced with
rgrover1 716:11b41f651697 384 * ble.gap().accumulateAdvertisingPayload(appearance).
rgrover1 716:11b41f651697 385 */
rgrover1 716:11b41f651697 386 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) {
rgrover1 716:11b41f651697 387 return gap().accumulateAdvertisingPayload(app);
rgrover1 716:11b41f651697 388 }
rgrover1 716:11b41f651697 389
rgrover1 716:11b41f651697 390 /**
rgrover1 716:11b41f651697 391 * Accumulate an AD structure in the advertising payload. Please note that
rgrover1 716:11b41f651697 392 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
rgrover1 716:11b41f651697 393 * as an additional 31 bytes if the advertising payload proves to be too
rgrover1 716:11b41f651697 394 * small.
rgrover1 716:11b41f651697 395 *
rgrover1 716:11b41f651697 396 * @param[in] app
rgrover1 716:11b41f651697 397 * The max transmit power to be used by the controller. This
rgrover1 716:11b41f651697 398 * is only a hint.
rgrover1 716:11b41f651697 399 *
rgrover1 716:11b41f651697 400 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 401 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 402 * ble.accumulateAdvertisingPayloadTxPower(txPower) should be replaced with
rgrover1 716:11b41f651697 403 * ble.gap().accumulateAdvertisingPayloadTxPower(txPower).
rgrover1 716:11b41f651697 404 */
rgrover1 716:11b41f651697 405 ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) {
rgrover1 716:11b41f651697 406 return gap().accumulateAdvertisingPayloadTxPower(power);
rgrover1 716:11b41f651697 407 }
rgrover1 716:11b41f651697 408
rgrover1 716:11b41f651697 409 /**
rgrover1 716:11b41f651697 410 * Accumulate a variable length byte-stream as an AD structure in the
rgrover1 716:11b41f651697 411 * advertising payload. Please note that the payload is limited to 31 bytes.
rgrover1 716:11b41f651697 412 * The SCAN_RESPONSE message may be used as an additional 31 bytes if the
rgrover1 716:11b41f651697 413 * advertising payload proves to be too small.
rgrover1 716:11b41f651697 414 *
rgrover1 716:11b41f651697 415 * @param type The type which describes the variable length data.
rgrover1 716:11b41f651697 416 * @param data data bytes.
rgrover1 716:11b41f651697 417 * @param len length of data.
rgrover1 716:11b41f651697 418 *
rgrover1 716:11b41f651697 419 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 420 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 421 * ble.accumulateAdvertisingPayload(...) should be replaced with
rgrover1 716:11b41f651697 422 * ble.gap().accumulateAdvertisingPayload(...).
rgrover1 716:11b41f651697 423 */
rgrover1 716:11b41f651697 424 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
rgrover1 716:11b41f651697 425 return gap().accumulateAdvertisingPayload(type, data, len);
rgrover1 716:11b41f651697 426 }
rgrover1 716:11b41f651697 427
rgrover1 716:11b41f651697 428 /**
rgrover1 716:11b41f651697 429 * Setup a particular, user-constructed advertisement payload for the
rgrover1 716:11b41f651697 430 * underlying stack. It would be uncommon for this API to be used directly;
rgrover1 716:11b41f651697 431 * there are other APIs to build an advertisement payload (see above).
rgrover1 716:11b41f651697 432 *
rgrover1 716:11b41f651697 433 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 434 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 435 * ble.setAdvertisingData(...) should be replaced with
rgrover1 716:11b41f651697 436 * ble.gap().setAdvertisingPayload(...).
rgrover1 716:11b41f651697 437 */
rgrover1 716:11b41f651697 438 ble_error_t setAdvertisingData(const GapAdvertisingData &advData) {
rgrover1 716:11b41f651697 439 return gap().setAdvertisingPayload(advData);
rgrover1 716:11b41f651697 440 }
rgrover1 716:11b41f651697 441
rgrover1 716:11b41f651697 442 /**
rgrover1 716:11b41f651697 443 * @return Read back advertising data. Useful for storing and
rgrover1 716:11b41f651697 444 * restoring payload.
rgrover1 716:11b41f651697 445 *
rgrover1 716:11b41f651697 446 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 447 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 448 * ble.getAdvertisingData(...) should be replaced with
rgrover1 716:11b41f651697 449 * ble.gap().getAdvertisingPayload()(...).
rgrover1 716:11b41f651697 450 */
rgrover1 716:11b41f651697 451 const GapAdvertisingData &getAdvertisingData(void) const {
rgrover1 716:11b41f651697 452 return gap().getAdvertisingPayload();
rgrover1 716:11b41f651697 453 }
rgrover1 716:11b41f651697 454
rgrover1 716:11b41f651697 455 /**
rgrover1 716:11b41f651697 456 * Reset any advertising payload prepared from prior calls to
rgrover1 716:11b41f651697 457 * accumulateAdvertisingPayload(). This automatically propagates the re-
rgrover1 716:11b41f651697 458 * initialized adv payload to the underlying stack.
rgrover1 716:11b41f651697 459 *
rgrover1 716:11b41f651697 460 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 461 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 462 * ble.clearAdvertisingPayload(...) should be replaced with
rgrover1 716:11b41f651697 463 * ble.gap().clearAdvertisingPayload(...).
rgrover1 716:11b41f651697 464 */
rgrover1 716:11b41f651697 465 void clearAdvertisingPayload(void) {
rgrover1 716:11b41f651697 466 gap().clearAdvertisingPayload();
rgrover1 716:11b41f651697 467 }
rgrover1 716:11b41f651697 468
rgrover1 716:11b41f651697 469 /**
rgrover1 716:11b41f651697 470 * This API is *deprecated* and resolves to a no-operation. It is left here
rgrover1 716:11b41f651697 471 * to allow older code to compile. Please avoid using this API in new code.
rgrover1 716:11b41f651697 472 * This API will be dropped in a future release.
rgrover1 716:11b41f651697 473 *
rgrover1 716:11b41f651697 474 * Formerly, it would be used to dynamically reset the accumulated advertising
rgrover1 716:11b41f651697 475 * payload and scanResponse; to do this, the application would clear and re-
rgrover1 716:11b41f651697 476 * accumulate a new advertising payload (and scanResponse) before using this
rgrover1 716:11b41f651697 477 * API. Updates to the underlying advertisement payload now happen
rgrover1 716:11b41f651697 478 * implicitly.
rgrover1 716:11b41f651697 479 */
rgrover1 716:11b41f651697 480 ble_error_t setAdvertisingPayload(void) {
rgrover1 716:11b41f651697 481 return BLE_ERROR_NONE;
rgrover1 716:11b41f651697 482 }
rgrover1 716:11b41f651697 483
rgrover1 716:11b41f651697 484 /**
rgrover1 716:11b41f651697 485 * Accumulate a variable length byte-stream as an AD structure in the
rgrover1 716:11b41f651697 486 * scanResponse payload.
rgrover1 716:11b41f651697 487 *
rgrover1 716:11b41f651697 488 * @param[in] type The type which describes the variable length data.
rgrover1 716:11b41f651697 489 * @param[in] data data bytes.
rgrover1 716:11b41f651697 490 * @param[in] len length of data.
rgrover1 716:11b41f651697 491 *
rgrover1 716:11b41f651697 492 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 493 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 494 * ble.accumulateScanResponse(...) should be replaced with
rgrover1 716:11b41f651697 495 * ble.gap().accumulateScanResponse(...).
rgrover1 716:11b41f651697 496 */
rgrover1 716:11b41f651697 497 ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
rgrover1 716:11b41f651697 498 return gap().accumulateScanResponse(type, data, len);
rgrover1 716:11b41f651697 499 }
rgrover1 716:11b41f651697 500
rgrover1 716:11b41f651697 501 /**
rgrover1 716:11b41f651697 502 * Reset any scan response prepared from prior calls to
rgrover1 716:11b41f651697 503 * accumulateScanResponse().
rgrover1 716:11b41f651697 504 *
rgrover1 716:11b41f651697 505 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 506 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 507 * ble.clearScanResponse(...) should be replaced with
rgrover1 716:11b41f651697 508 * ble.gap().clearScanResponse(...).
rgrover1 716:11b41f651697 509 */
rgrover1 716:11b41f651697 510 void clearScanResponse(void) {
rgrover1 716:11b41f651697 511 gap().clearScanResponse();
rgrover1 716:11b41f651697 512 }
rgrover1 716:11b41f651697 513
rgrover1 716:11b41f651697 514 /**
rgrover1 716:11b41f651697 515 * Start advertising.
rgrover1 716:11b41f651697 516 *
rgrover1 716:11b41f651697 517 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 518 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 519 * ble.startAdvertising(...) should be replaced with
rgrover1 716:11b41f651697 520 * ble.gap().startAdvertising(...).
rgrover1 716:11b41f651697 521 */
rgrover1 716:11b41f651697 522 ble_error_t startAdvertising(void) {
rgrover1 716:11b41f651697 523 return gap().startAdvertising();
rgrover1 716:11b41f651697 524 }
rgrover1 716:11b41f651697 525
rgrover1 716:11b41f651697 526 /**
rgrover1 716:11b41f651697 527 * Stop advertising.
rgrover1 716:11b41f651697 528 *
rgrover1 716:11b41f651697 529 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 530 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 531 * ble.stopAdvertising(...) should be replaced with
rgrover1 716:11b41f651697 532 * ble.gap().stopAdvertising(...).
rgrover1 716:11b41f651697 533 */
rgrover1 716:11b41f651697 534 ble_error_t stopAdvertising(void) {
rgrover1 716:11b41f651697 535 return gap().stopAdvertising();
rgrover1 716:11b41f651697 536 }
rgrover1 716:11b41f651697 537
rgrover1 716:11b41f651697 538 /**
rgrover1 716:11b41f651697 539 * Setup parameters for GAP scanning--i.e. observer mode.
rgrover1 716:11b41f651697 540 * @param[in] interval
rgrover1 716:11b41f651697 541 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
rgrover1 716:11b41f651697 542 * @param[in] window
rgrover1 716:11b41f651697 543 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s].
rgrover1 716:11b41f651697 544 * @param[in] timeout
rgrover1 716:11b41f651697 545 * Scan timeout (in seconds) between 0x0001 and 0xFFFF, 0x0000 disables timeout.
rgrover1 716:11b41f651697 546 * @param[in] activeScanning
rgrover1 716:11b41f651697 547 * Set to True if active-scanning is required. This is used to fetch the
rgrover1 716:11b41f651697 548 * scan response from a peer if possible.
rgrover1 716:11b41f651697 549 *
rgrover1 716:11b41f651697 550 * The scanning window divided by the interval determines the duty cycle for
rgrover1 716:11b41f651697 551 * scanning. For example, if the interval is 100ms and the window is 10ms,
rgrover1 716:11b41f651697 552 * then the controller will scan for 10 percent of the time. It is possible
rgrover1 716:11b41f651697 553 * to have the interval and window set to the same value. In this case,
rgrover1 716:11b41f651697 554 * scanning is continuous, with a change of scanning frequency once every
rgrover1 716:11b41f651697 555 * interval.
rgrover1 716:11b41f651697 556 *
rgrover1 716:11b41f651697 557 * Once the scanning parameters have been configured, scanning can be
rgrover1 716:11b41f651697 558 * enabled by using startScan().
rgrover1 716:11b41f651697 559 *
rgrover1 716:11b41f651697 560 * @Note: The scan interval and window are recommendations to the BLE stack.
rgrover1 716:11b41f651697 561 *
rgrover1 716:11b41f651697 562 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 563 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 564 * ble.setScanParams(...) should be replaced with
rgrover1 716:11b41f651697 565 * ble.gap().setScanParams(...).
rgrover1 716:11b41f651697 566 */
rgrover1 716:11b41f651697 567 ble_error_t setScanParams(uint16_t interval = GapScanningParams::SCAN_INTERVAL_MAX,
rgrover1 716:11b41f651697 568 uint16_t window = GapScanningParams::SCAN_WINDOW_MAX,
rgrover1 716:11b41f651697 569 uint16_t timeout = 0,
rgrover1 716:11b41f651697 570 bool activeScanning = false) {
rgrover1 716:11b41f651697 571 return gap().setScanParams(interval, window, timeout, activeScanning);
rgrover1 716:11b41f651697 572 }
rgrover1 716:11b41f651697 573
rgrover1 716:11b41f651697 574 /**
rgrover1 716:11b41f651697 575 * Setup the scanInterval parameter for GAP scanning--i.e. observer mode.
rgrover1 716:11b41f651697 576 * @param[in] interval
rgrover1 716:11b41f651697 577 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
rgrover1 716:11b41f651697 578 *
rgrover1 716:11b41f651697 579 * The scanning window divided by the interval determines the duty cycle for
rgrover1 716:11b41f651697 580 * scanning. For example, if the interval is 100ms and the window is 10ms,
rgrover1 716:11b41f651697 581 * then the controller will scan for 10 percent of the time. It is possible
rgrover1 716:11b41f651697 582 * to have the interval and window set to the same value. In this case,
rgrover1 716:11b41f651697 583 * scanning is continuous, with a change of scanning frequency once every
rgrover1 716:11b41f651697 584 * interval.
rgrover1 716:11b41f651697 585 *
rgrover1 716:11b41f651697 586 * Once the scanning parameters have been configured, scanning can be
rgrover1 716:11b41f651697 587 * enabled by using startScan().
rgrover1 716:11b41f651697 588 *
rgrover1 716:11b41f651697 589 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 590 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 591 * ble.setScanInterval(interval) should be replaced with
rgrover1 716:11b41f651697 592 * ble.gap().setScanInterval(interval).
rgrover1 716:11b41f651697 593 */
rgrover1 716:11b41f651697 594 ble_error_t setScanInterval(uint16_t interval) {
rgrover1 716:11b41f651697 595 return gap().setScanInterval(interval);
rgrover1 716:11b41f651697 596 }
rgrover1 716:11b41f651697 597
rgrover1 716:11b41f651697 598 /**
rgrover1 716:11b41f651697 599 * Setup the scanWindow parameter for GAP scanning--i.e. observer mode.
rgrover1 716:11b41f651697 600 * @param[in] window
rgrover1 716:11b41f651697 601 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s].
rgrover1 716:11b41f651697 602 *
rgrover1 716:11b41f651697 603 * The scanning window divided by the interval determines the duty cycle for
rgrover1 716:11b41f651697 604 * scanning. For example, if the interval is 100ms and the window is 10ms,
rgrover1 716:11b41f651697 605 * then the controller will scan for 10 percent of the time. It is possible
rgrover1 716:11b41f651697 606 * to have the interval and window set to the same value. In this case,
rgrover1 716:11b41f651697 607 * scanning is continuous, with a change of scanning frequency once every
rgrover1 716:11b41f651697 608 * interval.
rgrover1 716:11b41f651697 609 *
rgrover1 716:11b41f651697 610 * Once the scanning parameters have been configured, scanning can be
rgrover1 716:11b41f651697 611 * enabled by using startScan().
rgrover1 716:11b41f651697 612 *
rgrover1 716:11b41f651697 613 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 614 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 615 * ble.setScanWindow(window) should be replaced with
rgrover1 716:11b41f651697 616 * ble.gap().setScanWindow(window).
rgrover1 716:11b41f651697 617 */
rgrover1 716:11b41f651697 618 ble_error_t setScanWindow(uint16_t window) {
rgrover1 716:11b41f651697 619 return gap().setScanWindow(window);
rgrover1 716:11b41f651697 620 }
rgrover1 716:11b41f651697 621
rgrover1 716:11b41f651697 622 /**
rgrover1 716:11b41f651697 623 * Setup parameters for GAP scanning--i.e. observer mode.
rgrover1 716:11b41f651697 624 * @param[in] timeout
rgrover1 716:11b41f651697 625 * Scan timeout (in seconds) between 0x0001 and 0xFFFF, 0x0000 disables timeout.
rgrover1 716:11b41f651697 626 *
rgrover1 716:11b41f651697 627 * The scanning window divided by the interval determines the duty cycle for
rgrover1 716:11b41f651697 628 * scanning. For example, if the interval is 100ms and the window is 10ms,
rgrover1 716:11b41f651697 629 * then the controller will scan for 10 percent of the time. It is possible
rgrover1 716:11b41f651697 630 * to have the interval and window set to the same value. In this case,
rgrover1 716:11b41f651697 631 * scanning is continuous, with a change of scanning frequency once every
rgrover1 716:11b41f651697 632 * interval.
rgrover1 716:11b41f651697 633 *
rgrover1 716:11b41f651697 634 * Once the scanning parameters have been configured, scanning can be
rgrover1 716:11b41f651697 635 * enabled by using startScan().
rgrover1 716:11b41f651697 636 *
rgrover1 716:11b41f651697 637 * @Note: The scan interval and window are recommendations to the BLE stack.
rgrover1 716:11b41f651697 638 *
rgrover1 716:11b41f651697 639 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 640 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 641 * ble.setScanTimeout(...) should be replaced with
rgrover1 716:11b41f651697 642 * ble.gap().setScanTimeout(...).
rgrover1 716:11b41f651697 643 */
rgrover1 716:11b41f651697 644 ble_error_t setScanTimeout(uint16_t timeout) {
rgrover1 716:11b41f651697 645 return gap().setScanTimeout(timeout);
rgrover1 716:11b41f651697 646 }
rgrover1 716:11b41f651697 647
rgrover1 716:11b41f651697 648 /**
rgrover1 716:11b41f651697 649 * Setup parameters for GAP scanning--i.e. observer mode.
rgrover1 716:11b41f651697 650 * @param[in] activeScanning
rgrover1 716:11b41f651697 651 * Set to True if active-scanning is required. This is used to fetch the
rgrover1 716:11b41f651697 652 * scan response from a peer if possible.
rgrover1 716:11b41f651697 653 *
rgrover1 716:11b41f651697 654 * Once the scanning parameters have been configured, scanning can be
rgrover1 716:11b41f651697 655 * enabled by using startScan().
rgrover1 716:11b41f651697 656 *
rgrover1 716:11b41f651697 657 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 658 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 659 * ble.setActiveScan(...) should be replaced with
rgrover1 716:11b41f651697 660 * ble.gap().setActiveScanning(...).
rgrover1 716:11b41f651697 661 */
rgrover1 716:11b41f651697 662 void setActiveScan(bool activeScanning) {
rgrover1 716:11b41f651697 663 gap().setActiveScanning(activeScanning);
rgrover1 716:11b41f651697 664 }
rgrover1 716:11b41f651697 665
rgrover1 716:11b41f651697 666 /**
rgrover1 716:11b41f651697 667 * Start scanning (Observer Procedure) based on the parameters currently in
rgrover1 716:11b41f651697 668 * effect.
rgrover1 716:11b41f651697 669 *
rgrover1 716:11b41f651697 670 * @param[in] callback
rgrover1 716:11b41f651697 671 * The application specific callback to be invoked upon
rgrover1 716:11b41f651697 672 * receiving every advertisement report. This can be passed in
rgrover1 716:11b41f651697 673 * as NULL, in which case scanning may not be enabled at all.
rgrover1 716:11b41f651697 674 *
rgrover1 716:11b41f651697 675 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 676 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 677 * ble.startScan(callback) should be replaced with
rgrover1 716:11b41f651697 678 * ble.gap().startScan(callback).
rgrover1 716:11b41f651697 679 */
rgrover1 716:11b41f651697 680 ble_error_t startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params)) {
rgrover1 716:11b41f651697 681 return gap().startScan(callback);
rgrover1 716:11b41f651697 682 }
rgrover1 716:11b41f651697 683
rgrover1 716:11b41f651697 684 /**
rgrover1 716:11b41f651697 685 * Same as above, but this takes an (object, method) pair for a callback.
rgrover1 716:11b41f651697 686 *
rgrover1 716:11b41f651697 687 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 688 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 689 * ble.startScan(callback) should be replaced with
rgrover1 716:11b41f651697 690 * ble.gap().startScan(object, callback).
rgrover1 716:11b41f651697 691 */
rgrover1 716:11b41f651697 692 template<typename T>
rgrover1 716:11b41f651697 693 ble_error_t startScan(T *object, void (T::*memberCallback)(const Gap::AdvertisementCallbackParams_t *params));
rgrover1 716:11b41f651697 694
rgrover1 716:11b41f651697 695 /**
rgrover1 716:11b41f651697 696 * Stop scanning. The current scanning parameters remain in effect.
rgrover1 716:11b41f651697 697 *
rgrover1 716:11b41f651697 698 * @retval BLE_ERROR_NONE if successfully stopped scanning procedure.
rgrover1 716:11b41f651697 699 *
rgrover1 716:11b41f651697 700 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 701 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 702 * ble.stopScan() should be replaced with
rgrover1 716:11b41f651697 703 * ble.gap().stopScan().
rgrover1 716:11b41f651697 704 */
rgrover1 716:11b41f651697 705 ble_error_t stopScan(void) {
rgrover1 716:11b41f651697 706 return gap().stopScan();
rgrover1 716:11b41f651697 707 }
rgrover1 716:11b41f651697 708
rgrover1 716:11b41f651697 709 /**
rgrover1 716:11b41f651697 710 * Create a connection (GAP Link Establishment).
rgrover1 716:11b41f651697 711 * @param peerAddr
rgrover1 716:11b41f651697 712 * 48-bit address, LSB format.
rgrover1 716:11b41f651697 713 * @param peerAddrType
rgrover1 716:11b41f651697 714 * Address type of the peer.
rgrover1 716:11b41f651697 715 * @param connectionParams
rgrover1 716:11b41f651697 716 * Connection parameters.
rgrover1 716:11b41f651697 717 * @param scanParams
rgrover1 716:11b41f651697 718 * Paramters to be used while scanning for the peer.
rgrover1 716:11b41f651697 719 * @return BLE_ERROR_NONE if connection establishment procedure is started
rgrover1 716:11b41f651697 720 * successfully. The onConnection callback (if set) will be invoked upon
rgrover1 716:11b41f651697 721 * a connection event.
rgrover1 716:11b41f651697 722 *
rgrover1 716:11b41f651697 723 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 724 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 725 * ble.connect(...) should be replaced with
rgrover1 716:11b41f651697 726 * ble.gap().connect(...).
rgrover1 716:11b41f651697 727 */
rgrover1 716:11b41f651697 728 ble_error_t connect(const Gap::Address_t peerAddr,
rgrover1 716:11b41f651697 729 Gap::AddressType_t peerAddrType = Gap::ADDR_TYPE_RANDOM_STATIC,
rgrover1 716:11b41f651697 730 const Gap::ConnectionParams_t *connectionParams = NULL,
rgrover1 716:11b41f651697 731 const GapScanningParams *scanParams = NULL) {
rgrover1 716:11b41f651697 732 return gap().connect(peerAddr, peerAddrType, connectionParams, scanParams);
rgrover1 716:11b41f651697 733 }
rgrover1 716:11b41f651697 734
rgrover1 716:11b41f651697 735 /**
rgrover1 716:11b41f651697 736 * This call initiates the disconnection procedure, and its completion will
rgrover1 716:11b41f651697 737 * be communicated to the application with an invocation of the
rgrover1 716:11b41f651697 738 * onDisconnection callback.
rgrover1 716:11b41f651697 739 *
rgrover1 716:11b41f651697 740 * @param[in] connectionHandle
rgrover1 716:11b41f651697 741 * @param[in] reason
rgrover1 716:11b41f651697 742 * The reason for disconnection to be sent back to the peer.
rgrover1 716:11b41f651697 743 */
rgrover1 716:11b41f651697 744 ble_error_t disconnect(Gap::Handle_t connectionHandle, Gap::DisconnectionReason_t reason) {
rgrover1 716:11b41f651697 745 return gap().disconnect(connectionHandle, reason);
rgrover1 716:11b41f651697 746 }
rgrover1 716:11b41f651697 747
rgrover1 716:11b41f651697 748 /**
rgrover1 716:11b41f651697 749 * This call initiates the disconnection procedure, and its completion will
rgrover1 716:11b41f651697 750 * be communicated to the application with an invocation of the
rgrover1 716:11b41f651697 751 * onDisconnection callback.
rgrover1 716:11b41f651697 752 *
rgrover1 716:11b41f651697 753 * @param reason
rgrover1 716:11b41f651697 754 * The reason for disconnection to be sent back to the peer.
rgrover1 716:11b41f651697 755 *
rgrover1 716:11b41f651697 756 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 757 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 758 * ble.disconnect(reason) should be replaced with
rgrover1 716:11b41f651697 759 * ble.gap().disconnect(reason).
rgrover1 716:11b41f651697 760 *
rgrover1 716:11b41f651697 761 * @note: this version of disconnect() doesn't take a connection handle. It
rgrover1 716:11b41f651697 762 * will work reliably only for stacks which are limited to a single
rgrover1 716:11b41f651697 763 * connection. This API should be considered *deprecated* in favour of the
rgrover1 716:11b41f651697 764 * alternative which takes a connection handle. It will be dropped in the future.
rgrover1 716:11b41f651697 765 */
rgrover1 716:11b41f651697 766 ble_error_t disconnect(Gap::DisconnectionReason_t reason) {
rgrover1 716:11b41f651697 767 return gap().disconnect(reason);
rgrover1 716:11b41f651697 768 }
rgrover1 716:11b41f651697 769
rgrover1 716:11b41f651697 770 /**
rgrover1 716:11b41f651697 771 * Returns the current GAP state of the device using a bitmask which
rgrover1 716:11b41f651697 772 * describes whether the device is advertising and/or connected.
rgrover1 716:11b41f651697 773 *
rgrover1 716:11b41f651697 774 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 775 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 776 * ble.getGapState() should be replaced with
rgrover1 716:11b41f651697 777 * ble.gap().getState().
rgrover1 716:11b41f651697 778 */
rgrover1 716:11b41f651697 779 Gap::GapState_t getGapState(void) const {
rgrover1 716:11b41f651697 780 return gap().getState();
rgrover1 716:11b41f651697 781 }
rgrover1 716:11b41f651697 782
rgrover1 716:11b41f651697 783 /**
rgrover1 716:11b41f651697 784 * Get the GAP peripheral preferred connection parameters. These are the
rgrover1 716:11b41f651697 785 * defaults that the peripheral would like to have in a connection. The
rgrover1 716:11b41f651697 786 * choice of the connection parameters is eventually up to the central.
rgrover1 716:11b41f651697 787 *
rgrover1 716:11b41f651697 788 * @param[out] params
rgrover1 716:11b41f651697 789 * The structure where the parameters will be stored. Memory
rgrover1 716:11b41f651697 790 * for this is owned by the caller.
rgrover1 716:11b41f651697 791 *
rgrover1 716:11b41f651697 792 * @return BLE_ERROR_NONE if the parameters were successfully filled into
rgrover1 716:11b41f651697 793 * the given structure pointed to by params.
rgrover1 716:11b41f651697 794 *
rgrover1 716:11b41f651697 795 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 796 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 797 * ble.getPreferredConnectionParams() should be replaced with
rgrover1 716:11b41f651697 798 * ble.gap().getPreferredConnectionParams().
rgrover1 716:11b41f651697 799 */
rgrover1 716:11b41f651697 800 ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params) {
rgrover1 716:11b41f651697 801 return gap().getPreferredConnectionParams(params);
rgrover1 716:11b41f651697 802 }
rgrover1 716:11b41f651697 803
rgrover1 716:11b41f651697 804 /**
rgrover1 716:11b41f651697 805 * Set the GAP peripheral preferred connection parameters. These are the
rgrover1 716:11b41f651697 806 * defaults that the peripheral would like to have in a connection. The
rgrover1 716:11b41f651697 807 * choice of the connection parameters is eventually up to the central.
rgrover1 716:11b41f651697 808 *
rgrover1 716:11b41f651697 809 * @param[in] params
rgrover1 716:11b41f651697 810 * The structure containing the desired parameters.
rgrover1 716:11b41f651697 811 *
rgrover1 716:11b41f651697 812 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 813 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 814 * ble.setPreferredConnectionParams() should be replaced with
rgrover1 716:11b41f651697 815 * ble.gap().setPreferredConnectionParams().
rgrover1 716:11b41f651697 816 */
rgrover1 716:11b41f651697 817 ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params) {
rgrover1 716:11b41f651697 818 return gap().setPreferredConnectionParams(params);
rgrover1 716:11b41f651697 819 }
rgrover1 716:11b41f651697 820
rgrover1 716:11b41f651697 821 /**
rgrover1 716:11b41f651697 822 * Update connection parameters while in the peripheral role.
rgrover1 716:11b41f651697 823 * @details In the peripheral role, this will send the corresponding L2CAP request to the connected peer and wait for
rgrover1 716:11b41f651697 824 * the central to perform the procedure.
rgrover1 716:11b41f651697 825 * @param[in] handle
rgrover1 716:11b41f651697 826 * Connection Handle
rgrover1 716:11b41f651697 827 * @param[in] params
rgrover1 716:11b41f651697 828 * Pointer to desired connection parameters. If NULL is provided on a peripheral role,
rgrover1 716:11b41f651697 829 * the parameters in the PPCP characteristic of the GAP service will be used instead.
rgrover1 716:11b41f651697 830 *
rgrover1 716:11b41f651697 831 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 832 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 833 * ble.updateConnectionParams() should be replaced with
rgrover1 716:11b41f651697 834 * ble.gap().updateConnectionParams().
rgrover1 716:11b41f651697 835 */
rgrover1 716:11b41f651697 836 ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) {
rgrover1 716:11b41f651697 837 return gap().updateConnectionParams(handle, params);
rgrover1 716:11b41f651697 838 }
rgrover1 716:11b41f651697 839
rgrover1 716:11b41f651697 840 /**
rgrover1 716:11b41f651697 841 * Set the device name characteristic in the GAP service.
rgrover1 716:11b41f651697 842 * @param[in] deviceName
rgrover1 716:11b41f651697 843 * The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string.
rgrover1 716:11b41f651697 844 *
rgrover1 716:11b41f651697 845 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 846 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 847 * ble.setDeviceName() should be replaced with
rgrover1 716:11b41f651697 848 * ble.gap().setDeviceName().
rgrover1 716:11b41f651697 849 */
rgrover1 716:11b41f651697 850 ble_error_t setDeviceName(const uint8_t *deviceName) {
rgrover1 716:11b41f651697 851 return gap().setDeviceName(deviceName);
rgrover1 716:11b41f651697 852 }
rgrover1 716:11b41f651697 853
rgrover1 716:11b41f651697 854 /**
rgrover1 716:11b41f651697 855 * Get the value of the device name characteristic in the GAP service.
rgrover1 716:11b41f651697 856 * @param[out] deviceName
rgrover1 716:11b41f651697 857 * Pointer to an empty buffer where the UTF-8 *non NULL-
rgrover1 716:11b41f651697 858 * terminated* string will be placed. Set this
rgrover1 716:11b41f651697 859 * value to NULL in order to obtain the deviceName-length
rgrover1 716:11b41f651697 860 * from the 'length' parameter.
rgrover1 716:11b41f651697 861 *
rgrover1 716:11b41f651697 862 * @param[in/out] lengthP
rgrover1 716:11b41f651697 863 * (on input) Length of the buffer pointed to by deviceName;
rgrover1 716:11b41f651697 864 * (on output) the complete device name length (without the
rgrover1 716:11b41f651697 865 * null terminator).
rgrover1 716:11b41f651697 866 *
rgrover1 716:11b41f651697 867 * @note If the device name is longer than the size of the supplied buffer,
rgrover1 716:11b41f651697 868 * length will return the complete device name length, and not the
rgrover1 716:11b41f651697 869 * number of bytes actually returned in deviceName. The application may
rgrover1 716:11b41f651697 870 * use this information to retry with a suitable buffer size.
rgrover1 716:11b41f651697 871 *
rgrover1 716:11b41f651697 872 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 873 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 874 * ble.getDeviceName() should be replaced with
rgrover1 716:11b41f651697 875 * ble.gap().getDeviceName().
rgrover1 716:11b41f651697 876 */
rgrover1 716:11b41f651697 877 ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) {
rgrover1 716:11b41f651697 878 return gap().getDeviceName(deviceName, lengthP);
rgrover1 716:11b41f651697 879 }
rgrover1 716:11b41f651697 880
rgrover1 716:11b41f651697 881 /**
rgrover1 716:11b41f651697 882 * Set the appearance characteristic in the GAP service.
rgrover1 716:11b41f651697 883 * @param[in] appearance
rgrover1 716:11b41f651697 884 * The new value for the device-appearance.
rgrover1 716:11b41f651697 885 *
rgrover1 716:11b41f651697 886 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 887 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 888 * ble.setAppearance() should be replaced with
rgrover1 716:11b41f651697 889 * ble.gap().setAppearance().
rgrover1 716:11b41f651697 890 */
rgrover1 716:11b41f651697 891 ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) {
rgrover1 716:11b41f651697 892 return gap().setAppearance(appearance);
rgrover1 716:11b41f651697 893 }
rgrover1 716:11b41f651697 894
rgrover1 716:11b41f651697 895 /**
rgrover1 716:11b41f651697 896 * Get the appearance characteristic in the GAP service.
rgrover1 716:11b41f651697 897 * @param[out] appearance
rgrover1 716:11b41f651697 898 * The new value for the device-appearance.
rgrover1 716:11b41f651697 899 *
rgrover1 716:11b41f651697 900 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 901 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 902 * ble.getAppearance() should be replaced with
rgrover1 716:11b41f651697 903 * ble.gap().getAppearance().
rgrover1 716:11b41f651697 904 */
rgrover1 716:11b41f651697 905 ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) {
rgrover1 716:11b41f651697 906 return gap().getAppearance(appearanceP);
rgrover1 716:11b41f651697 907 }
rgrover1 716:11b41f651697 908
rgrover1 716:11b41f651697 909 /**
rgrover1 716:11b41f651697 910 * Set the radio's transmit power.
rgrover1 716:11b41f651697 911 * @param[in] txPower Radio transmit power in dBm.
rgrover1 716:11b41f651697 912 *
rgrover1 716:11b41f651697 913 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 914 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 915 * ble.setTxPower() should be replaced with
rgrover1 716:11b41f651697 916 * ble.gap().setTxPower().
rgrover1 716:11b41f651697 917 */
rgrover1 716:11b41f651697 918 ble_error_t setTxPower(int8_t txPower) {
rgrover1 716:11b41f651697 919 return gap().setTxPower(txPower);
rgrover1 716:11b41f651697 920 }
rgrover1 716:11b41f651697 921
rgrover1 716:11b41f651697 922 /**
rgrover1 716:11b41f651697 923 * Query the underlying stack for permitted arguments for setTxPower().
rgrover1 716:11b41f651697 924 *
rgrover1 716:11b41f651697 925 * @param[out] valueArrayPP
rgrover1 716:11b41f651697 926 * Out parameter to receive the immutable array of Tx values.
rgrover1 716:11b41f651697 927 * @param[out] countP
rgrover1 716:11b41f651697 928 * Out parameter to receive the array's size.
rgrover1 716:11b41f651697 929 *
rgrover1 716:11b41f651697 930 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 931 * You should use the parallel API from Gap directly. A former call to
rgrover1 716:11b41f651697 932 * ble.getPermittedTxPowerValues() should be replaced with
rgrover1 716:11b41f651697 933 * ble.gap().getPermittedTxPowerValues().
rgrover1 716:11b41f651697 934 */
rgrover1 716:11b41f651697 935 void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) {
rgrover1 716:11b41f651697 936 gap().getPermittedTxPowerValues(valueArrayPP, countP);
rgrover1 716:11b41f651697 937 }
rgrover1 716:11b41f651697 938
rgrover1 716:11b41f651697 939 /**
rgrover1 716:11b41f651697 940 * Add a service declaration to the local server ATT table. Also add the
rgrover1 716:11b41f651697 941 * characteristics contained within.
rgrover1 716:11b41f651697 942 *
rgrover1 716:11b41f651697 943 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 944 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 945 * to ble.addService() should be replaced with
rgrover1 716:11b41f651697 946 * ble.gattServer().addService().
rgrover1 716:11b41f651697 947 */
rgrover1 716:11b41f651697 948 ble_error_t addService(GattService &service) {
rgrover1 716:11b41f651697 949 return gattServer().addService(service);
rgrover1 716:11b41f651697 950 }
rgrover1 716:11b41f651697 951
rgrover1 716:11b41f651697 952 /**
rgrover1 716:11b41f651697 953 * Read the value of a characteristic from the local GattServer
rgrover1 716:11b41f651697 954 * @param[in] attributeHandle
rgrover1 716:11b41f651697 955 * Attribute handle for the value attribute of the characteristic.
rgrover1 716:11b41f651697 956 * @param[out] buffer
rgrover1 716:11b41f651697 957 * A buffer to hold the value being read.
rgrover1 716:11b41f651697 958 * @param[in/out] lengthP
rgrover1 716:11b41f651697 959 * Length of the buffer being supplied. If the attribute
rgrover1 716:11b41f651697 960 * value is longer than the size of the supplied buffer,
rgrover1 716:11b41f651697 961 * this variable will hold upon return the total attribute value length
rgrover1 716:11b41f651697 962 * (excluding offset). The application may use this
rgrover1 716:11b41f651697 963 * information to allocate a suitable buffer size.
rgrover1 716:11b41f651697 964 *
rgrover1 716:11b41f651697 965 * @return BLE_ERROR_NONE if a value was read successfully into the buffer.
rgrover1 716:11b41f651697 966 *
rgrover1 716:11b41f651697 967 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 968 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 969 * to ble.readCharacteristicValue() should be replaced with
rgrover1 716:11b41f651697 970 * ble.gattServer().read().
rgrover1 716:11b41f651697 971 */
rgrover1 716:11b41f651697 972 ble_error_t readCharacteristicValue(GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) {
rgrover1 716:11b41f651697 973 return gattServer().read(attributeHandle, buffer, lengthP);
rgrover1 716:11b41f651697 974 }
rgrover1 716:11b41f651697 975
rgrover1 716:11b41f651697 976 /**
rgrover1 716:11b41f651697 977 * Read the value of a characteristic from the local GattServer
rgrover1 716:11b41f651697 978 * @param[in] connectionHandle
rgrover1 716:11b41f651697 979 * Connection Handle.
rgrover1 716:11b41f651697 980 * @param[in] attributeHandle
rgrover1 716:11b41f651697 981 * Attribute handle for the value attribute of the characteristic.
rgrover1 716:11b41f651697 982 * @param[out] buffer
rgrover1 716:11b41f651697 983 * A buffer to hold the value being read.
rgrover1 716:11b41f651697 984 * @param[in/out] lengthP
rgrover1 716:11b41f651697 985 * Length of the buffer being supplied. If the attribute
rgrover1 716:11b41f651697 986 * value is longer than the size of the supplied buffer,
rgrover1 716:11b41f651697 987 * this variable will hold upon return the total attribute value length
rgrover1 716:11b41f651697 988 * (excluding offset). The application may use this
rgrover1 716:11b41f651697 989 * information to allocate a suitable buffer size.
rgrover1 716:11b41f651697 990 *
rgrover1 716:11b41f651697 991 * @return BLE_ERROR_NONE if a value was read successfully into the buffer.
rgrover1 716:11b41f651697 992 *
rgrover1 716:11b41f651697 993 * @note This API is a version of above with an additional connection handle
rgrover1 716:11b41f651697 994 * parameter to allow fetches for connection-specific multivalued
rgrover1 733:718a3566b4ce 995 * attributes (such as the CCCDs).
rgrover1 716:11b41f651697 996 *
rgrover1 716:11b41f651697 997 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 998 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 999 * to ble.readCharacteristicValue() should be replaced with
rgrover1 716:11b41f651697 1000 * ble.gattServer().read().
rgrover1 716:11b41f651697 1001 */
rgrover1 716:11b41f651697 1002 ble_error_t readCharacteristicValue(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) {
rgrover1 716:11b41f651697 1003 return gattServer().read(connectionHandle, attributeHandle, buffer, lengthP);
rgrover1 716:11b41f651697 1004 }
rgrover1 716:11b41f651697 1005
rgrover1 716:11b41f651697 1006 /**
rgrover1 716:11b41f651697 1007 * Update the value of a characteristic on the local GattServer.
rgrover1 716:11b41f651697 1008 *
rgrover1 716:11b41f651697 1009 * @param[in] attributeHandle
rgrover1 716:11b41f651697 1010 * Handle for the value attribute of the Characteristic.
rgrover1 716:11b41f651697 1011 * @param[in] value
rgrover1 716:11b41f651697 1012 * A pointer to a buffer holding the new value
rgrover1 716:11b41f651697 1013 * @param[in] size
rgrover1 716:11b41f651697 1014 * Size of the new value (in bytes).
rgrover1 716:11b41f651697 1015 * @param[in] localOnly
rgrover1 716:11b41f651697 1016 * Should this update be kept on the local
rgrover1 716:11b41f651697 1017 * GattServer regardless of the state of the
rgrover1 716:11b41f651697 1018 * notify/indicate flag in the CCCD for this
rgrover1 716:11b41f651697 1019 * Characteristic? If set to true, no notification
rgrover1 716:11b41f651697 1020 * or indication is generated.
rgrover1 716:11b41f651697 1021 *
rgrover1 716:11b41f651697 1022 * @return BLE_ERROR_NONE if we have successfully set the value of the attribute.
rgrover1 716:11b41f651697 1023 *
rgrover1 716:11b41f651697 1024 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1025 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1026 * to ble.updateCharacteristicValue() should be replaced with
rgrover1 716:11b41f651697 1027 * ble.gattServer().write().
rgrover1 716:11b41f651697 1028 */
rgrover1 716:11b41f651697 1029 ble_error_t updateCharacteristicValue(GattAttribute::Handle_t attributeHandle,
rgrover1 716:11b41f651697 1030 const uint8_t *value,
rgrover1 716:11b41f651697 1031 uint16_t size,
rgrover1 716:11b41f651697 1032 bool localOnly = false) {
rgrover1 716:11b41f651697 1033 return gattServer().write(attributeHandle, value, size, localOnly);
rgrover1 716:11b41f651697 1034 }
rgrover1 716:11b41f651697 1035
rgrover1 716:11b41f651697 1036 /**
rgrover1 716:11b41f651697 1037 * Update the value of a characteristic on the local GattServer. A version
rgrover1 716:11b41f651697 1038 * of the same as above with connection handle parameter to allow updates
rgrover1 733:718a3566b4ce 1039 * for connection-specific multivalued attributes (such as the CCCDs).
rgrover1 716:11b41f651697 1040 *
rgrover1 716:11b41f651697 1041 * @param[in] connectionHandle
rgrover1 716:11b41f651697 1042 * Connection Handle.
rgrover1 716:11b41f651697 1043 * @param[in] attributeHandle
rgrover1 716:11b41f651697 1044 * Handle for the value attribute of the Characteristic.
rgrover1 716:11b41f651697 1045 * @param[in] value
rgrover1 716:11b41f651697 1046 * A pointer to a buffer holding the new value
rgrover1 716:11b41f651697 1047 * @param[in] size
rgrover1 716:11b41f651697 1048 * Size of the new value (in bytes).
rgrover1 716:11b41f651697 1049 * @param[in] localOnly
rgrover1 716:11b41f651697 1050 * Should this update be kept on the local
rgrover1 716:11b41f651697 1051 * GattServer regardless of the state of the
rgrover1 716:11b41f651697 1052 * notify/indicate flag in the CCCD for this
rgrover1 716:11b41f651697 1053 * Characteristic? If set to true, no notification
rgrover1 716:11b41f651697 1054 * or indication is generated.
rgrover1 716:11b41f651697 1055 *
rgrover1 716:11b41f651697 1056 * @return BLE_ERROR_NONE if we have successfully set the value of the attribute.
rgrover1 716:11b41f651697 1057 *
rgrover1 716:11b41f651697 1058 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1059 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1060 * to ble.updateCharacteristicValue() should be replaced with
rgrover1 716:11b41f651697 1061 * ble.gattServer().write().
rgrover1 716:11b41f651697 1062 */
rgrover1 716:11b41f651697 1063 ble_error_t updateCharacteristicValue(Gap::Handle_t connectionHandle,
rgrover1 716:11b41f651697 1064 GattAttribute::Handle_t attributeHandle,
rgrover1 716:11b41f651697 1065 const uint8_t *value,
rgrover1 716:11b41f651697 1066 uint16_t size,
rgrover1 716:11b41f651697 1067 bool localOnly = false) {
rgrover1 716:11b41f651697 1068 return gattServer().write(connectionHandle, attributeHandle, value, size, localOnly);
rgrover1 716:11b41f651697 1069 }
rgrover1 716:11b41f651697 1070
rgrover1 716:11b41f651697 1071 /**
rgrover1 716:11b41f651697 1072 * Enable the BLE stack's Security Manager. The Security Manager implements
rgrover1 716:11b41f651697 1073 * the actual cryptographic algorithms and protocol exchanges that allow two
rgrover1 716:11b41f651697 1074 * devices to securely exchange data and privately detect each other.
rgrover1 716:11b41f651697 1075 * Calling this API is a prerequisite for encryption and pairing (bonding).
rgrover1 716:11b41f651697 1076 *
rgrover1 716:11b41f651697 1077 * @param[in] enableBonding Allow for bonding.
rgrover1 716:11b41f651697 1078 * @param[in] requireMITM Require protection for man-in-the-middle attacks.
rgrover1 716:11b41f651697 1079 * @param[in] iocaps To specify IO capabilities of this peripheral,
rgrover1 716:11b41f651697 1080 * such as availability of a display or keyboard to
rgrover1 716:11b41f651697 1081 * support out-of-band exchanges of security data.
rgrover1 716:11b41f651697 1082 * @param[in] passkey To specify a static passkey.
rgrover1 716:11b41f651697 1083 *
rgrover1 716:11b41f651697 1084 * @return BLE_ERROR_NONE on success.
rgrover1 716:11b41f651697 1085 *
rgrover1 716:11b41f651697 1086 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1087 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1088 * call to ble.initializeSecurity(...) should be replaced with
rgrover1 716:11b41f651697 1089 * ble.securityManager().init(...).
rgrover1 716:11b41f651697 1090 */
rgrover1 716:11b41f651697 1091 ble_error_t initializeSecurity(bool enableBonding = true,
rgrover1 716:11b41f651697 1092 bool requireMITM = true,
rgrover1 716:11b41f651697 1093 SecurityManager::SecurityIOCapabilities_t iocaps = SecurityManager::IO_CAPS_NONE,
rgrover1 716:11b41f651697 1094 const SecurityManager::Passkey_t passkey = NULL) {
rgrover1 716:11b41f651697 1095 return securityManager().init(enableBonding, requireMITM, iocaps, passkey);
rgrover1 716:11b41f651697 1096 }
rgrover1 716:11b41f651697 1097
rgrover1 716:11b41f651697 1098 /**
rgrover1 716:11b41f651697 1099 * Get the security status of a connection.
rgrover1 716:11b41f651697 1100 *
rgrover1 716:11b41f651697 1101 * @param[in] connectionHandle Handle to identify the connection.
rgrover1 716:11b41f651697 1102 * @param[out] securityStatusP security status.
rgrover1 716:11b41f651697 1103 *
rgrover1 716:11b41f651697 1104 * @return BLE_SUCCESS Or appropriate error code indicating reason for failure.
rgrover1 716:11b41f651697 1105 *
rgrover1 716:11b41f651697 1106 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1107 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1108 * call to ble.getLinkSecurity(...) should be replaced with
rgrover1 716:11b41f651697 1109 * ble.securityManager().getLinkSecurity(...).
rgrover1 716:11b41f651697 1110 */
rgrover1 716:11b41f651697 1111 ble_error_t getLinkSecurity(Gap::Handle_t connectionHandle, SecurityManager::LinkSecurityStatus_t *securityStatusP) {
rgrover1 716:11b41f651697 1112 return securityManager().getLinkSecurity(connectionHandle, securityStatusP);
rgrover1 716:11b41f651697 1113 }
rgrover1 716:11b41f651697 1114
rgrover1 716:11b41f651697 1115 /**
rgrover1 716:11b41f651697 1116 * Delete all peer device context and all related bonding information from
rgrover1 716:11b41f651697 1117 * the database within the security manager.
rgrover1 716:11b41f651697 1118 *
rgrover1 716:11b41f651697 1119 * @retval BLE_ERROR_NONE On success, else an error code indicating reason for failure.
rgrover1 716:11b41f651697 1120 * @retval BLE_ERROR_INVALID_STATE If the API is called without module initialization and/or
rgrover1 716:11b41f651697 1121 * application registration.
rgrover1 716:11b41f651697 1122 *
rgrover1 716:11b41f651697 1123 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1124 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1125 * call to ble.purgeAllBondingState() should be replaced with
rgrover1 716:11b41f651697 1126 * ble.securityManager().purgeAllBondingState().
rgrover1 716:11b41f651697 1127 */
rgrover1 716:11b41f651697 1128 ble_error_t purgeAllBondingState(void) {
rgrover1 716:11b41f651697 1129 return securityManager().purgeAllBondingState();
rgrover1 716:11b41f651697 1130 }
rgrover1 716:11b41f651697 1131
rgrover1 716:11b41f651697 1132 /**
rgrover1 716:11b41f651697 1133 * Setup a callback for timeout events. Refer to Gap::TimeoutSource_t for
rgrover1 716:11b41f651697 1134 * possible event types.
rgrover1 716:11b41f651697 1135 *
rgrover1 716:11b41f651697 1136 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 751:868b6dd7a6bf 1137 * You should use the parallel API from Gap directly. A former call
rgrover1 716:11b41f651697 1138 * to ble.onTimeout(callback) should be replaced with
rgrover1 716:11b41f651697 1139 * ble.gap().onTimeout(callback).
rgrover1 716:11b41f651697 1140 */
rgrover1 716:11b41f651697 1141 void onTimeout(Gap::TimeoutEventCallback_t timeoutCallback) {
rgrover1 716:11b41f651697 1142 gap().onTimeout(timeoutCallback);
rgrover1 716:11b41f651697 1143 }
rgrover1 716:11b41f651697 1144
rgrover1 716:11b41f651697 1145 /**
rgrover1 716:11b41f651697 1146 * Setup a callback for connection events. Refer to Gap::ConnectionEventCallback_t.
rgrover1 716:11b41f651697 1147 *
rgrover1 716:11b41f651697 1148 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 751:868b6dd7a6bf 1149 * You should use the parallel API from Gap directly. A former call
rgrover1 716:11b41f651697 1150 * to ble.onConnection(callback) should be replaced with
rgrover1 716:11b41f651697 1151 * ble.gap().onConnection(callback).
rgrover1 716:11b41f651697 1152 */
rgrover1 716:11b41f651697 1153 void onConnection(Gap::ConnectionEventCallback_t connectionCallback) {
rgrover1 716:11b41f651697 1154 gap().onConnection(connectionCallback);
rgrover1 716:11b41f651697 1155 }
rgrover1 716:11b41f651697 1156
rgrover1 716:11b41f651697 1157 /**
rgrover1 829:9072de50087b 1158 * Append to a chain of callbacks to be invoked upon GAP disconnection.
rgrover1 716:11b41f651697 1159 *
rgrover1 716:11b41f651697 1160 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 751:868b6dd7a6bf 1161 * You should use the parallel API from Gap directly. A former call
rgrover1 716:11b41f651697 1162 * to ble.onDisconnection(callback) should be replaced with
rgrover1 716:11b41f651697 1163 * ble.gap().onDisconnection(callback).
rgrover1 716:11b41f651697 1164 */
rgrover1 716:11b41f651697 1165 void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback) {
rgrover1 716:11b41f651697 1166 gap().onDisconnection(disconnectionCallback);
rgrover1 716:11b41f651697 1167 }
rgrover1 716:11b41f651697 1168
rgrover1 716:11b41f651697 1169 template<typename T>
rgrover1 829:9072de50087b 1170 void onDisconnection(T *tptr, void (T::*mptr)(const Gap::DisconnectionCallbackParams_t*)) {
rgrover1 829:9072de50087b 1171 gap().onDisconnection(tptr, mptr);
rgrover1 716:11b41f651697 1172 }
rgrover1 716:11b41f651697 1173
rgrover1 716:11b41f651697 1174 /**
rgrover1 716:11b41f651697 1175 * Radio Notification is a feature that enables ACTIVE and INACTIVE
rgrover1 716:11b41f651697 1176 * (nACTIVE) signals from the stack that notify the application when the
rgrover1 716:11b41f651697 1177 * radio is in use. The signal is sent using software interrupt.
rgrover1 716:11b41f651697 1178 *
rgrover1 716:11b41f651697 1179 * The ACTIVE signal is sent before the Radio Event starts. The nACTIVE
rgrover1 716:11b41f651697 1180 * signal is sent at the end of the Radio Event. These signals can be used
rgrover1 716:11b41f651697 1181 * by the application programmer to synchronize application logic with radio
rgrover1 716:11b41f651697 1182 * activity. For example, the ACTIVE signal can be used to shut off external
rgrover1 716:11b41f651697 1183 * devices to manage peak current drawn during periods when the radio is on,
rgrover1 716:11b41f651697 1184 * or to trigger sensor data collection for transmission in the Radio Event.
rgrover1 716:11b41f651697 1185 *
rgrover1 716:11b41f651697 1186 * @param callback
rgrover1 716:11b41f651697 1187 * The application handler to be invoked in response to a radio
rgrover1 716:11b41f651697 1188 * ACTIVE/INACTIVE event.
rgrover1 716:11b41f651697 1189 *
rgrover1 716:11b41f651697 1190 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 751:868b6dd7a6bf 1191 * You should use the parallel API from Gap directly. A former call
rgrover1 716:11b41f651697 1192 * to ble.onRadioNotification(...) should be replaced with
rgrover1 716:11b41f651697 1193 * ble.gap().onRadioNotification(...).
rgrover1 716:11b41f651697 1194 */
rgrover1 752:424c2ae44553 1195 void onRadioNotification(void (*callback)(bool)) {
rgrover1 716:11b41f651697 1196 gap().onRadioNotification(callback);
rgrover1 716:11b41f651697 1197 }
rgrover1 716:11b41f651697 1198
rgrover1 716:11b41f651697 1199 /**
rgrover1 716:11b41f651697 1200 * Add a callback for the GATT event DATA_SENT (which is triggered when
rgrover1 716:11b41f651697 1201 * updates are sent out by GATT in the form of notifications).
rgrover1 716:11b41f651697 1202 *
rgrover1 716:11b41f651697 1203 * @Note: it is possible to chain together multiple onDataSent callbacks
rgrover1 716:11b41f651697 1204 * (potentially from different modules of an application) to receive updates
rgrover1 716:11b41f651697 1205 * to characteristics.
rgrover1 716:11b41f651697 1206 *
rgrover1 716:11b41f651697 1207 * @Note: it is also possible to setup a callback into a member function of
rgrover1 716:11b41f651697 1208 * some object.
rgrover1 716:11b41f651697 1209 *
rgrover1 716:11b41f651697 1210 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1211 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1212 * to ble.onDataSent(...) should be replaced with
rgrover1 716:11b41f651697 1213 * ble.gattServer().onDataSent(...).
rgrover1 716:11b41f651697 1214 */
rgrover1 716:11b41f651697 1215 void onDataSent(void (*callback)(unsigned count)) {
rgrover1 716:11b41f651697 1216 gattServer().onDataSent(callback);
rgrover1 716:11b41f651697 1217 }
rgrover1 716:11b41f651697 1218 template <typename T> void onDataSent(T * objPtr, void (T::*memberPtr)(unsigned count)) {
rgrover1 716:11b41f651697 1219 gattServer().onDataSent(objPtr, memberPtr);
rgrover1 716:11b41f651697 1220 }
rgrover1 716:11b41f651697 1221
rgrover1 716:11b41f651697 1222 /**
rgrover1 716:11b41f651697 1223 * Setup a callback for when an attribute has its value updated by or at the
rgrover1 716:11b41f651697 1224 * connected peer. For a peripheral, this callback triggered when the local
rgrover1 716:11b41f651697 1225 * GATT server has an attribute updated by a write command from the peer.
rgrover1 716:11b41f651697 1226 * For a Central, this callback is triggered when a response is received for
rgrover1 716:11b41f651697 1227 * a write request.
rgrover1 716:11b41f651697 1228 *
rgrover1 716:11b41f651697 1229 * @Note: it is possible to chain together multiple onDataWritten callbacks
rgrover1 716:11b41f651697 1230 * (potentially from different modules of an application) to receive updates
rgrover1 716:11b41f651697 1231 * to characteristics. Many services, such as DFU and UART add their own
rgrover1 716:11b41f651697 1232 * onDataWritten callbacks behind the scenes to trap interesting events.
rgrover1 716:11b41f651697 1233 *
rgrover1 716:11b41f651697 1234 * @Note: it is also possible to setup a callback into a member function of
rgrover1 716:11b41f651697 1235 * some object.
rgrover1 716:11b41f651697 1236 *
rgrover1 716:11b41f651697 1237 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1238 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1239 * to ble.onDataWritten(...) should be replaced with
rgrover1 716:11b41f651697 1240 * ble.gattServer().onDataWritten(...).
rgrover1 716:11b41f651697 1241 */
rgrover1 716:11b41f651697 1242 void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {
rgrover1 716:11b41f651697 1243 gattServer().onDataWritten(callback);
rgrover1 716:11b41f651697 1244 }
rgrover1 716:11b41f651697 1245 template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
rgrover1 716:11b41f651697 1246 gattServer().onDataWritten(objPtr, memberPtr);
rgrover1 716:11b41f651697 1247 }
rgrover1 716:11b41f651697 1248
rgrover1 716:11b41f651697 1249 /**
rgrover1 716:11b41f651697 1250 * Setup a callback to be invoked on the peripheral when an attribute is
rgrover1 716:11b41f651697 1251 * being read by a remote client.
rgrover1 716:11b41f651697 1252 *
rgrover1 716:11b41f651697 1253 * @Note: this functionality may not be available on all underlying stacks.
rgrover1 716:11b41f651697 1254 * You could use GattCharacteristic::setReadAuthorizationCallback() as an
rgrover1 716:11b41f651697 1255 * alternative.
rgrover1 716:11b41f651697 1256 *
rgrover1 716:11b41f651697 1257 * @Note: it is possible to chain together multiple onDataRead callbacks
rgrover1 716:11b41f651697 1258 * (potentially from different modules of an application) to receive updates
rgrover1 716:11b41f651697 1259 * to characteristics. Services may add their own onDataRead callbacks
rgrover1 716:11b41f651697 1260 * behind the scenes to trap interesting events.
rgrover1 716:11b41f651697 1261 *
rgrover1 716:11b41f651697 1262 * @Note: it is also possible to setup a callback into a member function of
rgrover1 716:11b41f651697 1263 * some object.
rgrover1 716:11b41f651697 1264 *
rgrover1 716:11b41f651697 1265 * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available;
rgrover1 716:11b41f651697 1266 * else BLE_ERROR_NONE.
rgrover1 716:11b41f651697 1267 *
rgrover1 716:11b41f651697 1268 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1269 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1270 * to ble.onDataRead(...) should be replaced with
rgrover1 716:11b41f651697 1271 * ble.gattServer().onDataRead(...).
rgrover1 716:11b41f651697 1272 */
rgrover1 716:11b41f651697 1273 ble_error_t onDataRead(void (*callback)(const GattReadCallbackParams *eventDataP)) {
rgrover1 716:11b41f651697 1274 return gattServer().onDataRead(callback);
rgrover1 716:11b41f651697 1275 }
rgrover1 716:11b41f651697 1276 template <typename T> ble_error_t onDataRead(T * objPtr, void (T::*memberPtr)(const GattReadCallbackParams *context)) {
rgrover1 716:11b41f651697 1277 return gattServer().onDataRead(objPtr, memberPtr);
rgrover1 716:11b41f651697 1278 }
rgrover1 716:11b41f651697 1279
rgrover1 716:11b41f651697 1280 /**
rgrover1 716:11b41f651697 1281 * Setup a callback for when notifications/indications are enabled for a
rgrover1 716:11b41f651697 1282 * characteristic on the local GattServer.
rgrover1 716:11b41f651697 1283 *
rgrover1 716:11b41f651697 1284 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1285 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1286 * to ble.onUpdatesEnabled(callback) should be replaced with
rgrover1 716:11b41f651697 1287 * ble.gattServer().onUpdatesEnabled(callback).
rgrover1 716:11b41f651697 1288 */
rgrover1 716:11b41f651697 1289 void onUpdatesEnabled(GattServer::EventCallback_t callback) {
rgrover1 716:11b41f651697 1290 gattServer().onUpdatesEnabled(callback);
rgrover1 716:11b41f651697 1291 }
rgrover1 716:11b41f651697 1292
rgrover1 716:11b41f651697 1293 /**
rgrover1 716:11b41f651697 1294 * Setup a callback for when notifications/indications are disabled for a
rgrover1 716:11b41f651697 1295 * characteristic on the local GattServer.
rgrover1 716:11b41f651697 1296 *
rgrover1 716:11b41f651697 1297 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1298 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1299 * to ble.onUpdatesEnabled(callback) should be replaced with
rgrover1 716:11b41f651697 1300 * ble.gattServer().onUpdatesEnabled(callback).
rgrover1 716:11b41f651697 1301 */
rgrover1 716:11b41f651697 1302 void onUpdatesDisabled(GattServer::EventCallback_t callback) {
rgrover1 716:11b41f651697 1303 gattServer().onUpdatesDisabled(callback);
rgrover1 716:11b41f651697 1304 }
rgrover1 716:11b41f651697 1305
rgrover1 716:11b41f651697 1306 /**
rgrover1 716:11b41f651697 1307 * Setup a callback for when the GATT server receives a response for an
rgrover1 716:11b41f651697 1308 * indication event sent previously.
rgrover1 716:11b41f651697 1309 *
rgrover1 716:11b41f651697 1310 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1311 * You should use the parallel API from GattServer directly. A former call
rgrover1 716:11b41f651697 1312 * to ble.onConfirmationReceived(callback) should be replaced with
rgrover1 716:11b41f651697 1313 * ble.gattServer().onConfirmationReceived(callback).
rgrover1 716:11b41f651697 1314 */
rgrover1 716:11b41f651697 1315 void onConfirmationReceived(GattServer::EventCallback_t callback) {
rgrover1 716:11b41f651697 1316 gattServer().onConfirmationReceived(callback);
rgrover1 716:11b41f651697 1317 }
rgrover1 716:11b41f651697 1318
rgrover1 716:11b41f651697 1319 /**
rgrover1 716:11b41f651697 1320 * Setup a callback for when the security setup procedure (key generation
rgrover1 716:11b41f651697 1321 * and exchange) for a link has started. This will be skipped for bonded
rgrover1 716:11b41f651697 1322 * devices. The callback is passed in parameters received from the peer's
rgrover1 716:11b41f651697 1323 * security request: bool allowBonding, bool requireMITM, and
rgrover1 716:11b41f651697 1324 * SecurityIOCapabilities_t.
rgrover1 716:11b41f651697 1325 *
rgrover1 716:11b41f651697 1326 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1327 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1328 * call to ble.onSecuritySetupInitiated(callback) should be replaced with
rgrover1 716:11b41f651697 1329 * ble.securityManager().onSecuritySetupInitiated(callback).
rgrover1 716:11b41f651697 1330 */
rgrover1 716:11b41f651697 1331 void onSecuritySetupInitiated(SecurityManager::SecuritySetupInitiatedCallback_t callback) {
rgrover1 716:11b41f651697 1332 securityManager().onSecuritySetupInitiated(callback);
rgrover1 716:11b41f651697 1333 }
rgrover1 716:11b41f651697 1334
rgrover1 716:11b41f651697 1335 /**
rgrover1 716:11b41f651697 1336 * Setup a callback for when the security setup procedure (key generation
rgrover1 716:11b41f651697 1337 * and exchange) for a link has completed. This will be skipped for bonded
rgrover1 716:11b41f651697 1338 * devices. The callback is passed in the success/failure status of the
rgrover1 716:11b41f651697 1339 * security setup procedure.
rgrover1 716:11b41f651697 1340 *
rgrover1 716:11b41f651697 1341 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1342 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1343 * call to ble.onSecuritySetupCompleted(callback) should be replaced with
rgrover1 716:11b41f651697 1344 * ble.securityManager().onSecuritySetupCompleted(callback).
rgrover1 716:11b41f651697 1345 */
rgrover1 716:11b41f651697 1346 void onSecuritySetupCompleted(SecurityManager::SecuritySetupCompletedCallback_t callback) {
rgrover1 716:11b41f651697 1347 securityManager().onSecuritySetupCompleted(callback);
rgrover1 716:11b41f651697 1348 }
rgrover1 716:11b41f651697 1349
rgrover1 716:11b41f651697 1350 /**
rgrover1 716:11b41f651697 1351 * Setup a callback for when a link with the peer is secured. For bonded
rgrover1 716:11b41f651697 1352 * devices, subsequent reconnections with bonded peer will result only in
rgrover1 716:11b41f651697 1353 * this callback when the link is secured and setup procedures will not
rgrover1 716:11b41f651697 1354 * occur unless the bonding information is either lost or deleted on either
rgrover1 716:11b41f651697 1355 * or both sides. The callback is passed in a SecurityManager::SecurityMode_t according
rgrover1 716:11b41f651697 1356 * to the level of security in effect for the secured link.
rgrover1 716:11b41f651697 1357 *
rgrover1 716:11b41f651697 1358 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1359 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1360 * call to ble.onLinkSecured(callback) should be replaced with
rgrover1 716:11b41f651697 1361 * ble.securityManager().onLinkSecured(callback).
rgrover1 716:11b41f651697 1362 */
rgrover1 716:11b41f651697 1363 void onLinkSecured(SecurityManager::LinkSecuredCallback_t callback) {
rgrover1 716:11b41f651697 1364 securityManager().onLinkSecured(callback);
rgrover1 716:11b41f651697 1365 }
rgrover1 716:11b41f651697 1366
rgrover1 716:11b41f651697 1367 /**
rgrover1 716:11b41f651697 1368 * Setup a callback for successful bonding; i.e. that link-specific security
rgrover1 716:11b41f651697 1369 * context is stored persistently for a peer device.
rgrover1 716:11b41f651697 1370 *
rgrover1 716:11b41f651697 1371 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1372 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1373 * call to ble.onSecurityContextStored(callback) should be replaced with
rgrover1 716:11b41f651697 1374 * ble.securityManager().onSecurityContextStored(callback).
rgrover1 716:11b41f651697 1375 */
rgrover1 716:11b41f651697 1376 void onSecurityContextStored(SecurityManager::HandleSpecificEvent_t callback) {
rgrover1 716:11b41f651697 1377 securityManager().onSecurityContextStored(callback);
rgrover1 716:11b41f651697 1378 }
rgrover1 716:11b41f651697 1379
rgrover1 716:11b41f651697 1380 /**
rgrover1 716:11b41f651697 1381 * Setup a callback for when the passkey needs to be displayed on a
rgrover1 716:11b41f651697 1382 * peripheral with DISPLAY capability. This happens when security is
rgrover1 716:11b41f651697 1383 * configured to prevent Man-In-The-Middle attacks, and a PIN (or passkey)
rgrover1 716:11b41f651697 1384 * needs to be exchanged between the peers to authenticate the connection
rgrover1 716:11b41f651697 1385 * attempt.
rgrover1 716:11b41f651697 1386 *
rgrover1 716:11b41f651697 1387 * @note: This API is now *deprecated* and will be dropped in the future.
rgrover1 716:11b41f651697 1388 * You should use the parallel API from SecurityManager directly. A former
rgrover1 716:11b41f651697 1389 * call to ble.onPasskeyDisplay(callback) should be replaced with
rgrover1 716:11b41f651697 1390 * ble.securityManager().onPasskeyDisplay(callback).
rgrover1 716:11b41f651697 1391 */
rgrover1 716:11b41f651697 1392 void onPasskeyDisplay(SecurityManager::PasskeyDisplayCallback_t callback) {
rgrover1 716:11b41f651697 1393 return securityManager().onPasskeyDisplay(callback);
rgrover1 716:11b41f651697 1394 }
rgrover1 716:11b41f651697 1395
rgrover1 716:11b41f651697 1396 private:
rgrover1 806:50c121156a71 1397 BLE(const BLE&);
rgrover1 806:50c121156a71 1398 BLE &operator=(const BLE &);
rgrover1 806:50c121156a71 1399
rgrover1 806:50c121156a71 1400 private:
rgrover1 822:a0f080d1e836 1401 BLEInstanceBase *transport; /* the device specific backend */
rgrover1 716:11b41f651697 1402 };
rgrover1 716:11b41f651697 1403
rgrover1 716:11b41f651697 1404 typedef BLE BLEDevice; /* DEPRECATED. This type alias is retained for the sake of compatibility with older
rgrover1 716:11b41f651697 1405 * code. Will be dropped at some point soon.*/
rgrover1 716:11b41f651697 1406
rgrover1 716:11b41f651697 1407 #endif // ifndef __BLE_H__