High level Bluetooth Low Energy API and radio abstraction layer

Fork of BLE_API by Bluetooth Low Energy

Committer:
rgrover1
Date:
Thu Jul 02 09:06:11 2015 +0100
Revision:
716:11b41f651697
Child:
728:997ba5e7b3b6
Synchronized with git rev d80fec88
Author: Rohit Grover
Release 0.4.0
=============

This is a major release which introduces the GATT Client functionality. It
also aligns BLE_API with builds using our new package manager: yotta
(https://github.com/armmbed/yotta).

Many APIs have seen some redesign. We encourage our users to pay attention to
the changes and migrate appropriately over time. We've also taken care to
ensure that existing code continues to work the same way. There's more
documentation in the form of comment headers for APIs to explain proper usage;
in many cases comment headers suggest alternative use of APIs.

Enhancements
~~~~~~~~~~~~

* Introduce GattClient. This includes functionality for service-discovery,
connections, and attribute-reads and writes. You'll find a demo program for
LEDBlinker on the mbed.org Bluetooth team page to use the new APIs. Some of
the GATT client functionality hasn't been implemented yet, but the APIs have
been added.

* Most APIs in the abstract base classes like Gap and GattServer return
BLE_ERROR_NOT_IMPLEMENTED. Previously many APIs were pure-virtual, which did
not permit partial ports to compile.

* We've added a new abstract base class for SecurityManager. All security
related APIs have been moved into that.

* BLEDevice has been renamed as BLE. A deprecated alias for BLEDevice is
available to support existing code.

* There has been a major cleanup of APIs under BLE. APIs have now been
categorized as belonging to Gap, GattServer, GattClient, or SecurityManager.
There are accessors to get references for Gap, GattServer, GattClient, and
SecurityManager. A former call to ble.setAddress(...) is now expected to be
achieved with ble.gap().setAddress(...).

* We've cleaned up our APIs, and this has resulted in dropping some APIs like
BLE::reset().

* We've also dropped GattServer::initializeGattDatabase(). THis was added at
some point to support controllers where a commit point was needed to
indicate when the application had finished constructing the GATT database.
This API would get called internally before Gap::startAdvertising(). We now
expect the underlying port to do the equivalent of initializeGattDatabase()
implicitly upon Gap::startAdvertising().

* The callback for BLE.onTimeout() now receives a TimeoutSource_t to indicate
the cause of the timeout. This is perhaps the only breaking API change. We
expect it to have very little disruptive effect.

* We've added a version of Gap::disconnect() which takes a connection handle.
The previous API (which did not take a connection handle) has been
deprecated; it will still work for situations where there's only a single
active connection. We hold on to that API to allow existing code to migrate
to the new API.

Bugfixes
~~~~~~~~

* None.

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