BLE_API

Committer:
vcoubard
Date:
Wed Apr 06 19:15:42 2016 +0100
Revision:
1188:039621a96054
Parent:
1187:231e4007429a
Child:
1189:740911150041
Synchronized with git rev bdfcd49c
Author: Andres Amaya Garcia
Gap doesnt commit adv payload changes on failure

Gap function members that modify the advertising and scan payload use the
underlying stack to test if the new payload is sane. If any errors are
generated, then the changes are not committed to copy of the payload in BLE API.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vcoubard 1131:692ddf04fc42 1 /* mbed Microcontroller Library
vcoubard 1131:692ddf04fc42 2 * Copyright (c) 2006-2013 ARM Limited
vcoubard 1131:692ddf04fc42 3 *
vcoubard 1131:692ddf04fc42 4 * Licensed under the Apache License, Version 2.0 (the "License");
vcoubard 1131:692ddf04fc42 5 * you may not use this file except in compliance with the License.
vcoubard 1131:692ddf04fc42 6 * You may obtain a copy of the License at
vcoubard 1131:692ddf04fc42 7 *
vcoubard 1131:692ddf04fc42 8 * http://www.apache.org/licenses/LICENSE-2.0
vcoubard 1131:692ddf04fc42 9 *
vcoubard 1131:692ddf04fc42 10 * Unless required by applicable law or agreed to in writing, software
vcoubard 1131:692ddf04fc42 11 * distributed under the License is distributed on an "AS IS" BASIS,
vcoubard 1131:692ddf04fc42 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vcoubard 1131:692ddf04fc42 13 * See the License for the specific language governing permissions and
vcoubard 1131:692ddf04fc42 14 * limitations under the License.
vcoubard 1131:692ddf04fc42 15 */
vcoubard 1131:692ddf04fc42 16
vcoubard 1131:692ddf04fc42 17 #ifndef __GAP_H__
vcoubard 1131:692ddf04fc42 18 #define __GAP_H__
vcoubard 1131:692ddf04fc42 19
vcoubard 1135:22aada733dbd 20 #include "ble/BLEProtocol.h"
vcoubard 1131:692ddf04fc42 21 #include "GapAdvertisingData.h"
vcoubard 1131:692ddf04fc42 22 #include "GapAdvertisingParams.h"
vcoubard 1131:692ddf04fc42 23 #include "GapScanningParams.h"
vcoubard 1131:692ddf04fc42 24 #include "GapEvents.h"
vcoubard 1131:692ddf04fc42 25 #include "CallChainOfFunctionPointersWithContext.h"
vcoubard 1131:692ddf04fc42 26 #include "FunctionPointerWithContext.h"
vcoubard 1135:22aada733dbd 27 #include "deprecate.h"
vcoubard 1131:692ddf04fc42 28
vcoubard 1131:692ddf04fc42 29 /* Forward declarations for classes that will only be used for pointers or references in the following. */
vcoubard 1131:692ddf04fc42 30 class GapAdvertisingParams;
vcoubard 1131:692ddf04fc42 31 class GapScanningParams;
vcoubard 1131:692ddf04fc42 32 class GapAdvertisingData;
vcoubard 1131:692ddf04fc42 33
vcoubard 1131:692ddf04fc42 34 class Gap {
vcoubard 1135:22aada733dbd 35 /*
vcoubard 1135:22aada733dbd 36 * DEPRECATION ALERT: all of the APIs in this `public` block are deprecated.
vcoubard 1135:22aada733dbd 37 * They have been relocated to the class BLEProtocol.
vcoubard 1135:22aada733dbd 38 */
vcoubard 1131:692ddf04fc42 39 public:
vcoubard 1135:22aada733dbd 40 /**
vcoubard 1135:22aada733dbd 41 * Address-type for BLEProtocol addresses.
vcoubard 1135:22aada733dbd 42 *
vcoubard 1183:1589830dbdb7 43 * @deprecated Use BLEProtocol::AddressType_t instead.
vcoubard 1135:22aada733dbd 44 */
vcoubard 1135:22aada733dbd 45 typedef BLEProtocol::AddressType_t AddressType_t;
vcoubard 1135:22aada733dbd 46
vcoubard 1135:22aada733dbd 47 /**
vcoubard 1135:22aada733dbd 48 * Address-type for BLEProtocol addresses.
vcoubard 1183:1589830dbdb7 49 *
vcoubard 1183:1589830dbdb7 50 * @deprecated Use BLEProtocol::AddressType_t instead.
vcoubard 1135:22aada733dbd 51 */
vcoubard 1135:22aada733dbd 52 typedef BLEProtocol::AddressType_t addr_type_t;
vcoubard 1135:22aada733dbd 53
vcoubard 1135:22aada733dbd 54 /**
vcoubard 1135:22aada733dbd 55 * Address-type for BLEProtocol addresses.
vcoubard 1135:22aada733dbd 56 *
vcoubard 1183:1589830dbdb7 57 * @deprecated Use BLEProtocol::AddressType_t instead. The following
vcoubard 1183:1589830dbdb7 58 * constants have been left in their deprecated state to
vcoubard 1183:1589830dbdb7 59 * transparenly support existing applications which may have
vcoubard 1183:1589830dbdb7 60 * used Gap::ADDR_TYPE_*.
vcoubard 1135:22aada733dbd 61 */
vcoubard 1135:22aada733dbd 62 enum DeprecatedAddressType_t {
vcoubard 1135:22aada733dbd 63 ADDR_TYPE_PUBLIC = BLEProtocol::AddressType::PUBLIC,
vcoubard 1135:22aada733dbd 64 ADDR_TYPE_RANDOM_STATIC = BLEProtocol::AddressType::RANDOM_STATIC,
vcoubard 1135:22aada733dbd 65 ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE = BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE,
vcoubard 1135:22aada733dbd 66 ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE = BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE
vcoubard 1131:692ddf04fc42 67 };
vcoubard 1131:692ddf04fc42 68
vcoubard 1183:1589830dbdb7 69 /**
vcoubard 1183:1589830dbdb7 70 * Length (in octets) of the BLE MAC address.
vcoubard 1183:1589830dbdb7 71 */
vcoubard 1183:1589830dbdb7 72 static const unsigned ADDR_LEN = BLEProtocol::ADDR_LEN;
vcoubard 1183:1589830dbdb7 73 /**
vcoubard 1183:1589830dbdb7 74 * 48-bit address, LSB format.
vcoubard 1183:1589830dbdb7 75 *
vcoubard 1183:1589830dbdb7 76 * @deprecated Use BLEProtocol::AddressBytes_t instead.
vcoubard 1183:1589830dbdb7 77 */
vcoubard 1183:1589830dbdb7 78 typedef BLEProtocol::AddressBytes_t Address_t;
vcoubard 1183:1589830dbdb7 79 /**
vcoubard 1183:1589830dbdb7 80 * 48-bit address, LSB format.
vcoubard 1183:1589830dbdb7 81 *
vcoubard 1183:1589830dbdb7 82 * @deprecated Use BLEProtocol::AddressBytes_t instead.
vcoubard 1183:1589830dbdb7 83 */
vcoubard 1183:1589830dbdb7 84 typedef BLEProtocol::AddressBytes_t address_t;
vcoubard 1131:692ddf04fc42 85
vcoubard 1135:22aada733dbd 86 public:
vcoubard 1183:1589830dbdb7 87 /**
vcoubard 1183:1589830dbdb7 88 * Enumeration for timeout sources.
vcoubard 1183:1589830dbdb7 89 */
vcoubard 1131:692ddf04fc42 90 enum TimeoutSource_t {
vcoubard 1131:692ddf04fc42 91 TIMEOUT_SRC_ADVERTISING = 0x00, /**< Advertising timeout. */
vcoubard 1131:692ddf04fc42 92 TIMEOUT_SRC_SECURITY_REQUEST = 0x01, /**< Security request timeout. */
vcoubard 1131:692ddf04fc42 93 TIMEOUT_SRC_SCAN = 0x02, /**< Scanning timeout. */
vcoubard 1131:692ddf04fc42 94 TIMEOUT_SRC_CONN = 0x03, /**< Connection timeout. */
vcoubard 1131:692ddf04fc42 95 };
vcoubard 1131:692ddf04fc42 96
vcoubard 1131:692ddf04fc42 97 /**
vcoubard 1131:692ddf04fc42 98 * Enumeration for disconnection reasons. The values for these reasons are
vcoubard 1131:692ddf04fc42 99 * derived from Nordic's implementation, but the reasons are meant to be
vcoubard 1131:692ddf04fc42 100 * independent of the transport. If you are returned a reason that is not
vcoubard 1131:692ddf04fc42 101 * covered by this enumeration, please refer to the underlying
vcoubard 1131:692ddf04fc42 102 * transport library.
vcoubard 1131:692ddf04fc42 103 */
vcoubard 1131:692ddf04fc42 104 enum DisconnectionReason_t {
vcoubard 1131:692ddf04fc42 105 CONNECTION_TIMEOUT = 0x08,
vcoubard 1131:692ddf04fc42 106 REMOTE_USER_TERMINATED_CONNECTION = 0x13,
vcoubard 1131:692ddf04fc42 107 REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES = 0x14, /**< Remote device terminated connection due to low resources.*/
vcoubard 1131:692ddf04fc42 108 REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF = 0x15, /**< Remote device terminated connection due to power off. */
vcoubard 1131:692ddf04fc42 109 LOCAL_HOST_TERMINATED_CONNECTION = 0x16,
vcoubard 1131:692ddf04fc42 110 CONN_INTERVAL_UNACCEPTABLE = 0x3B,
vcoubard 1131:692ddf04fc42 111 };
vcoubard 1131:692ddf04fc42 112
vcoubard 1135:22aada733dbd 113 /**
vcoubard 1135:22aada733dbd 114 * Enumeration for whitelist advertising policy filter modes. The possible
vcoubard 1135:22aada733dbd 115 * filter modes were obtained from the Bluetooth Core Specification
vcoubard 1135:22aada733dbd 116 * 4.2 (Vol. 6), Part B, Section 4.3.2.
vcoubard 1135:22aada733dbd 117 *
vcoubard 1135:22aada733dbd 118 * @experimental
vcoubard 1135:22aada733dbd 119 */
vcoubard 1135:22aada733dbd 120 enum AdvertisingPolicyMode_t {
vcoubard 1135:22aada733dbd 121 ADV_POLICY_IGNORE_WHITELIST = 0,
vcoubard 1135:22aada733dbd 122 ADV_POLICY_FILTER_SCAN_REQS = 1,
vcoubard 1135:22aada733dbd 123 ADV_POLICY_FILTER_CONN_REQS = 2,
vcoubard 1135:22aada733dbd 124 ADV_POLICY_FILTER_ALL_REQS = 3,
vcoubard 1135:22aada733dbd 125 };
vcoubard 1135:22aada733dbd 126
vcoubard 1135:22aada733dbd 127 /**
vcoubard 1135:22aada733dbd 128 * Enumeration for whitelist scanning policy filter modes. The possible
vcoubard 1135:22aada733dbd 129 * filter modes were obtained from the Bluetooth Core Specification
vcoubard 1135:22aada733dbd 130 * 4.2 (Vol. 6), Part B, Section 4.3.3.
vcoubard 1135:22aada733dbd 131 *
vcoubard 1135:22aada733dbd 132 * @experimental
vcoubard 1135:22aada733dbd 133 */
vcoubard 1135:22aada733dbd 134 enum ScanningPolicyMode_t {
vcoubard 1135:22aada733dbd 135 SCAN_POLICY_IGNORE_WHITELIST = 0,
vcoubard 1135:22aada733dbd 136 SCAN_POLICY_FILTER_ALL_ADV = 1,
vcoubard 1135:22aada733dbd 137 };
vcoubard 1135:22aada733dbd 138
vcoubard 1135:22aada733dbd 139 /**
vcoubard 1135:22aada733dbd 140 * Enumeration for the whitelist initiator policy fiter modes. The possible
vcoubard 1135:22aada733dbd 141 * filter modes were obtained from the Bluetooth Core Specification
vcoubard 1135:22aada733dbd 142 * 4.2 (vol. 6), Part B, Section 4.4.4.
vcoubard 1135:22aada733dbd 143 *
vcoubard 1135:22aada733dbd 144 * @experimental
vcoubard 1135:22aada733dbd 145 */
vcoubard 1135:22aada733dbd 146 enum InitiatorPolicyMode_t {
vcoubard 1135:22aada733dbd 147 INIT_POLICY_IGNORE_WHITELIST = 0,
vcoubard 1135:22aada733dbd 148 INIT_POLICY_FILTER_ALL_ADV = 1,
vcoubard 1135:22aada733dbd 149 };
vcoubard 1135:22aada733dbd 150
vcoubard 1135:22aada733dbd 151 /**
vcoubard 1135:22aada733dbd 152 * Representation of a Bluetooth Low Enery Whitelist containing addresses.
vcoubard 1135:22aada733dbd 153 *
vcoubard 1135:22aada733dbd 154 * @experimental
vcoubard 1135:22aada733dbd 155 */
vcoubard 1135:22aada733dbd 156 struct Whitelist_t {
vcoubard 1183:1589830dbdb7 157 BLEProtocol::Address_t *addresses; /**< List of BLE addresses in the whitelist. */
vcoubard 1183:1589830dbdb7 158 uint8_t size; /**< Total number of BLE addresses in this whitelist */
vcoubard 1183:1589830dbdb7 159 uint8_t capacity; /**< Maximum number of BLE addresses that can be added to this whitelist. */
vcoubard 1135:22aada733dbd 160 };
vcoubard 1135:22aada733dbd 161
vcoubard 1135:22aada733dbd 162
vcoubard 1183:1589830dbdb7 163 /**
vcoubard 1183:1589830dbdb7 164 * Describes the current state of the device (more than one bit can be set).
vcoubard 1183:1589830dbdb7 165 */
vcoubard 1131:692ddf04fc42 166 struct GapState_t {
vcoubard 1131:692ddf04fc42 167 unsigned advertising : 1; /**< Peripheral is currently advertising. */
vcoubard 1131:692ddf04fc42 168 unsigned connected : 1; /**< Peripheral is connected to a central. */
vcoubard 1131:692ddf04fc42 169 };
vcoubard 1131:692ddf04fc42 170
vcoubard 1183:1589830dbdb7 171 /**
vcoubard 1183:1589830dbdb7 172 * Type for connection handle.
vcoubard 1183:1589830dbdb7 173 */
vcoubard 1183:1589830dbdb7 174 typedef uint16_t Handle_t;
vcoubard 1131:692ddf04fc42 175
vcoubard 1183:1589830dbdb7 176 /**
vcoubard 1183:1589830dbdb7 177 * Structure containing GAP connection parameters. When in peripheral role
vcoubard 1183:1589830dbdb7 178 * the connection parameters are suggestions. The choice of the connection
vcoubard 1183:1589830dbdb7 179 * parameters is eventually up to the central.
vcoubard 1183:1589830dbdb7 180 */
vcoubard 1131:692ddf04fc42 181 typedef struct {
vcoubard 1183:1589830dbdb7 182 uint16_t minConnectionInterval; /**< Minimum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
vcoubard 1183:1589830dbdb7 183 uint16_t maxConnectionInterval; /**< Maximum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
vcoubard 1183:1589830dbdb7 184 uint16_t slaveLatency; /**< Slave Latency in number of connection events, see BLE_GAP_CP_LIMITS.*/
vcoubard 1183:1589830dbdb7 185 uint16_t connectionSupervisionTimeout; /**< Connection Supervision Timeout in 10 ms units, see BLE_GAP_CP_LIMITS.*/
vcoubard 1131:692ddf04fc42 186 } ConnectionParams_t;
vcoubard 1131:692ddf04fc42 187
vcoubard 1183:1589830dbdb7 188 /**
vcoubard 1183:1589830dbdb7 189 * Enumeration for the possible GAP roles of a BLE device.
vcoubard 1183:1589830dbdb7 190 */
vcoubard 1131:692ddf04fc42 191 enum Role_t {
vcoubard 1131:692ddf04fc42 192 PERIPHERAL = 0x1, /**< Peripheral Role. */
vcoubard 1131:692ddf04fc42 193 CENTRAL = 0x2, /**< Central Role. */
vcoubard 1131:692ddf04fc42 194 };
vcoubard 1131:692ddf04fc42 195
vcoubard 1183:1589830dbdb7 196 /**
vcoubard 1183:1589830dbdb7 197 * Structure containing data and metadata of a scanned advertising packet.
vcoubard 1183:1589830dbdb7 198 */
vcoubard 1131:692ddf04fc42 199 struct AdvertisementCallbackParams_t {
vcoubard 1183:1589830dbdb7 200 BLEProtocol::AddressBytes_t peerAddr; /**< The peer's BLE address. */
vcoubard 1183:1589830dbdb7 201 int8_t rssi; /**< The advertisement packet RSSI value. */
vcoubard 1183:1589830dbdb7 202 bool isScanResponse; /**< Whether this packet is the response to a scan request. */
vcoubard 1183:1589830dbdb7 203 GapAdvertisingParams::AdvertisingType_t type; /**< The type of advertisement. */
vcoubard 1183:1589830dbdb7 204 uint8_t advertisingDataLen; /**< Length of the advertisement data. */
vcoubard 1183:1589830dbdb7 205 const uint8_t *advertisingData; /**< Pointer to the advertisement packet's data. */
vcoubard 1131:692ddf04fc42 206 };
vcoubard 1183:1589830dbdb7 207
vcoubard 1183:1589830dbdb7 208 /**
vcoubard 1183:1589830dbdb7 209 * Type for the handlers of advertisement callback events. Refer to
vcoubard 1183:1589830dbdb7 210 * Gap::startScan().
vcoubard 1183:1589830dbdb7 211 */
vcoubard 1131:692ddf04fc42 212 typedef FunctionPointerWithContext<const AdvertisementCallbackParams_t *> AdvertisementReportCallback_t;
vcoubard 1131:692ddf04fc42 213
vcoubard 1183:1589830dbdb7 214 /**
vcoubard 1183:1589830dbdb7 215 * Encapsulates the parameters of a connection. This information is passed
vcoubard 1183:1589830dbdb7 216 * to the registered handler of connection events. Refer to Gap::onConnection().
vcoubard 1183:1589830dbdb7 217 */
vcoubard 1131:692ddf04fc42 218 struct ConnectionCallbackParams_t {
vcoubard 1183:1589830dbdb7 219 Handle_t handle; /**< The ID for this connection */
vcoubard 1183:1589830dbdb7 220 Role_t role; /**< This device's role in the connection */
vcoubard 1183:1589830dbdb7 221 BLEProtocol::AddressType_t peerAddrType; /**< The peer's BLE address type */
vcoubard 1183:1589830dbdb7 222 BLEProtocol::AddressBytes_t peerAddr; /**< The peer's BLE address */
vcoubard 1183:1589830dbdb7 223 BLEProtocol::AddressType_t ownAddrType; /**< This device's BLE address type */
vcoubard 1183:1589830dbdb7 224 BLEProtocol::AddressBytes_t ownAddr; /**< This devices's BLE address */
vcoubard 1183:1589830dbdb7 225 const ConnectionParams_t *connectionParams; /**< The currently configured connection parameters */
vcoubard 1131:692ddf04fc42 226
vcoubard 1183:1589830dbdb7 227 /**
vcoubard 1183:1589830dbdb7 228 * Constructor for ConnectionCallbackParams_t.
vcoubard 1183:1589830dbdb7 229 *
vcoubard 1183:1589830dbdb7 230 * @param[in] handleIn
vcoubard 1183:1589830dbdb7 231 * Value for ConnectionCallbackParams_t::handle
vcoubard 1183:1589830dbdb7 232 * @param[in] roleIn
vcoubard 1183:1589830dbdb7 233 * Value for ConnectionCallbackParams_t::role
vcoubard 1183:1589830dbdb7 234 * @param[in] peerAddrTypeIn
vcoubard 1183:1589830dbdb7 235 * Value for ConnectionCallbackParams_t::peerAddrType
vcoubard 1183:1589830dbdb7 236 * @param[in] peerAddrIn
vcoubard 1183:1589830dbdb7 237 * Value for ConnectionCallbackParams_t::peerAddr
vcoubard 1183:1589830dbdb7 238 * @param[in] ownAddrTypeIn
vcoubard 1183:1589830dbdb7 239 * Value for ConnectionCallbackParams_t::ownAddrType
vcoubard 1183:1589830dbdb7 240 * @param[in] ownAddrIn
vcoubard 1183:1589830dbdb7 241 * Value for ConnectionCallbackParams_t::ownAddr
vcoubard 1183:1589830dbdb7 242 * @param[in] connectionParamsIn
vcoubard 1183:1589830dbdb7 243 * Value for ConnectionCallbackParams_t::connectionParams
vcoubard 1183:1589830dbdb7 244 */
vcoubard 1135:22aada733dbd 245 ConnectionCallbackParams_t(Handle_t handleIn,
vcoubard 1135:22aada733dbd 246 Role_t roleIn,
vcoubard 1135:22aada733dbd 247 BLEProtocol::AddressType_t peerAddrTypeIn,
vcoubard 1135:22aada733dbd 248 const uint8_t *peerAddrIn,
vcoubard 1135:22aada733dbd 249 BLEProtocol::AddressType_t ownAddrTypeIn,
vcoubard 1135:22aada733dbd 250 const uint8_t *ownAddrIn,
vcoubard 1135:22aada733dbd 251 const ConnectionParams_t *connectionParamsIn) :
vcoubard 1131:692ddf04fc42 252 handle(handleIn),
vcoubard 1131:692ddf04fc42 253 role(roleIn),
vcoubard 1131:692ddf04fc42 254 peerAddrType(peerAddrTypeIn),
vcoubard 1131:692ddf04fc42 255 peerAddr(),
vcoubard 1131:692ddf04fc42 256 ownAddrType(ownAddrTypeIn),
vcoubard 1131:692ddf04fc42 257 ownAddr(),
vcoubard 1131:692ddf04fc42 258 connectionParams(connectionParamsIn) {
vcoubard 1131:692ddf04fc42 259 memcpy(peerAddr, peerAddrIn, ADDR_LEN);
vcoubard 1131:692ddf04fc42 260 memcpy(ownAddr, ownAddrIn, ADDR_LEN);
vcoubard 1131:692ddf04fc42 261 }
vcoubard 1131:692ddf04fc42 262 };
vcoubard 1131:692ddf04fc42 263
vcoubard 1183:1589830dbdb7 264 /**
vcoubard 1183:1589830dbdb7 265 * Structure that encapsulates information about a disconnection event.
vcoubard 1183:1589830dbdb7 266 * Refer to Gap::onDisconnection().
vcoubard 1183:1589830dbdb7 267 */
vcoubard 1131:692ddf04fc42 268 struct DisconnectionCallbackParams_t {
vcoubard 1183:1589830dbdb7 269 Handle_t handle; /**< The ID of the connection that caused the disconnection event */
vcoubard 1183:1589830dbdb7 270 DisconnectionReason_t reason; /**< The reason of the disconnection event */
vcoubard 1131:692ddf04fc42 271
vcoubard 1183:1589830dbdb7 272 /**
vcoubard 1183:1589830dbdb7 273 * Constructor for DisconnectionCallbackParams_t.
vcoubard 1183:1589830dbdb7 274 *
vcoubard 1183:1589830dbdb7 275 * @param[in] handleIn
vcoubard 1183:1589830dbdb7 276 * Value for DisconnectionCallbackParams_t::handle.
vcoubard 1183:1589830dbdb7 277 * @param[in] reasonIn
vcoubard 1183:1589830dbdb7 278 * Value for DisconnectionCallbackParams_t::reason.
vcoubard 1183:1589830dbdb7 279 */
vcoubard 1131:692ddf04fc42 280 DisconnectionCallbackParams_t(Handle_t handleIn,
vcoubard 1131:692ddf04fc42 281 DisconnectionReason_t reasonIn) :
vcoubard 1131:692ddf04fc42 282 handle(handleIn),
vcoubard 1131:692ddf04fc42 283 reason(reasonIn)
vcoubard 1131:692ddf04fc42 284 {}
vcoubard 1131:692ddf04fc42 285 };
vcoubard 1131:692ddf04fc42 286
vcoubard 1131:692ddf04fc42 287 static const uint16_t UNIT_1_25_MS = 1250; /**< Number of microseconds in 1.25 milliseconds. */
vcoubard 1183:1589830dbdb7 288 /**
vcoubard 1183:1589830dbdb7 289 * Helper function to convert from units of milliseconds to GAP duration
vcoubard 1183:1589830dbdb7 290 * units.
vcoubard 1183:1589830dbdb7 291 *
vcoubard 1183:1589830dbdb7 292 * @param[in] durationInMillis
vcoubard 1183:1589830dbdb7 293 * The duration in milliseconds.
vcoubard 1183:1589830dbdb7 294 *
vcoubard 1183:1589830dbdb7 295 * @return The duration in GAP duration units.
vcoubard 1183:1589830dbdb7 296 */
vcoubard 1131:692ddf04fc42 297 static uint16_t MSEC_TO_GAP_DURATION_UNITS(uint32_t durationInMillis) {
vcoubard 1131:692ddf04fc42 298 return (durationInMillis * 1000) / UNIT_1_25_MS;
vcoubard 1131:692ddf04fc42 299 }
vcoubard 1131:692ddf04fc42 300
vcoubard 1183:1589830dbdb7 301 /**
vcoubard 1183:1589830dbdb7 302 * Type for the registered callbacks added to the timeout event callchain.
vcoubard 1183:1589830dbdb7 303 * Refer to Gap::onTimeout().
vcoubard 1183:1589830dbdb7 304 */
vcoubard 1131:692ddf04fc42 305 typedef FunctionPointerWithContext<TimeoutSource_t> TimeoutEventCallback_t;
vcoubard 1183:1589830dbdb7 306 /**
vcoubard 1183:1589830dbdb7 307 * Type for the timeout event callchain. Refer to Gap::onTimeout().
vcoubard 1183:1589830dbdb7 308 */
vcoubard 1131:692ddf04fc42 309 typedef CallChainOfFunctionPointersWithContext<TimeoutSource_t> TimeoutEventCallbackChain_t;
vcoubard 1131:692ddf04fc42 310
vcoubard 1183:1589830dbdb7 311 /**
vcoubard 1183:1589830dbdb7 312 * Type for the registered callbacks added to the connection event
vcoubard 1183:1589830dbdb7 313 * callchain. Refer to Gap::onConnection().
vcoubard 1183:1589830dbdb7 314 */
vcoubard 1131:692ddf04fc42 315 typedef FunctionPointerWithContext<const ConnectionCallbackParams_t *> ConnectionEventCallback_t;
vcoubard 1183:1589830dbdb7 316 /**
vcoubard 1183:1589830dbdb7 317 * Type for the connection event callchain. Refer to Gap::onConnection().
vcoubard 1183:1589830dbdb7 318 */
vcoubard 1131:692ddf04fc42 319 typedef CallChainOfFunctionPointersWithContext<const ConnectionCallbackParams_t *> ConnectionEventCallbackChain_t;
vcoubard 1131:692ddf04fc42 320
vcoubard 1183:1589830dbdb7 321 /**
vcoubard 1183:1589830dbdb7 322 * Type for the registered callbacks added to the disconnection event
vcoubard 1183:1589830dbdb7 323 * callchain. Refer to Gap::onDisconnetion().
vcoubard 1183:1589830dbdb7 324 */
vcoubard 1131:692ddf04fc42 325 typedef FunctionPointerWithContext<const DisconnectionCallbackParams_t*> DisconnectionEventCallback_t;
vcoubard 1183:1589830dbdb7 326 /**
vcoubard 1183:1589830dbdb7 327 * Type for the disconnection event callchain. Refer to Gap::onDisconnection().
vcoubard 1183:1589830dbdb7 328 */
vcoubard 1132:6362b7c2fdff 329 typedef CallChainOfFunctionPointersWithContext<const DisconnectionCallbackParams_t*> DisconnectionEventCallbackChain_t;
vcoubard 1131:692ddf04fc42 330
vcoubard 1183:1589830dbdb7 331 /**
vcoubard 1183:1589830dbdb7 332 * Type for the handlers of radio notification callback events. Refer to
vcoubard 1183:1589830dbdb7 333 * Gap::onRadioNotification().
vcoubard 1183:1589830dbdb7 334 */
vcoubard 1131:692ddf04fc42 335 typedef FunctionPointerWithContext<bool> RadioNotificationEventCallback_t;
vcoubard 1131:692ddf04fc42 336
vcoubard 1183:1589830dbdb7 337 /**
vcoubard 1183:1589830dbdb7 338 * Type for the handlers of shutdown callback events. Refer to
vcoubard 1183:1589830dbdb7 339 * Gap::onShutdown().
vcoubard 1183:1589830dbdb7 340 */
vcoubard 1135:22aada733dbd 341 typedef FunctionPointerWithContext<const Gap *> GapShutdownCallback_t;
vcoubard 1183:1589830dbdb7 342 /**
vcoubard 1183:1589830dbdb7 343 * Type for the shutdown event callchain. Refer to Gap::onShutdown().
vcoubard 1183:1589830dbdb7 344 */
vcoubard 1135:22aada733dbd 345 typedef CallChainOfFunctionPointersWithContext<const Gap *> GapShutdownCallbackChain_t;
vcoubard 1135:22aada733dbd 346
vcoubard 1131:692ddf04fc42 347 /*
vcoubard 1131:692ddf04fc42 348 * The following functions are meant to be overridden in the platform-specific sub-class.
vcoubard 1131:692ddf04fc42 349 */
vcoubard 1131:692ddf04fc42 350 public:
vcoubard 1131:692ddf04fc42 351 /**
vcoubard 1131:692ddf04fc42 352 * Set the BTLE MAC address and type. Please note that the address format is
vcoubard 1135:22aada733dbd 353 * least significant byte first (LSB). Please refer to BLEProtocol::AddressBytes_t.
vcoubard 1131:692ddf04fc42 354 *
vcoubard 1183:1589830dbdb7 355 * @param[in] type
vcoubard 1183:1589830dbdb7 356 * The type of the BLE address to set.
vcoubard 1183:1589830dbdb7 357 * @param[in] address
vcoubard 1183:1589830dbdb7 358 * The BLE address to set.
vcoubard 1183:1589830dbdb7 359 *
vcoubard 1131:692ddf04fc42 360 * @return BLE_ERROR_NONE on success.
vcoubard 1131:692ddf04fc42 361 */
vcoubard 1135:22aada733dbd 362 virtual ble_error_t setAddress(BLEProtocol::AddressType_t type, const BLEProtocol::AddressBytes_t address) {
vcoubard 1131:692ddf04fc42 363 /* avoid compiler warnings about unused variables */
vcoubard 1131:692ddf04fc42 364 (void)type;
vcoubard 1131:692ddf04fc42 365 (void)address;
vcoubard 1131:692ddf04fc42 366
vcoubard 1131:692ddf04fc42 367 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 368 }
vcoubard 1131:692ddf04fc42 369
vcoubard 1131:692ddf04fc42 370 /**
vcoubard 1131:692ddf04fc42 371 * Fetch the BTLE MAC address and type.
vcoubard 1131:692ddf04fc42 372 *
vcoubard 1183:1589830dbdb7 373 * @param[out] typeP
vcoubard 1183:1589830dbdb7 374 * The current BLE address type.
vcoubard 1183:1589830dbdb7 375 * @param[out] address
vcoubard 1183:1589830dbdb7 376 * The current BLE address.
vcoubard 1183:1589830dbdb7 377 *
vcoubard 1131:692ddf04fc42 378 * @return BLE_ERROR_NONE on success.
vcoubard 1131:692ddf04fc42 379 */
vcoubard 1135:22aada733dbd 380 virtual ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address) {
vcoubard 1131:692ddf04fc42 381 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 382 (void)typeP;
vcoubard 1131:692ddf04fc42 383 (void)address;
vcoubard 1131:692ddf04fc42 384
vcoubard 1131:692ddf04fc42 385 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 386 }
vcoubard 1131:692ddf04fc42 387
vcoubard 1131:692ddf04fc42 388 /**
vcoubard 1183:1589830dbdb7 389 * Get the minimum advertising interval in milliseconds for connectable
vcoubard 1183:1589830dbdb7 390 * undirected and connectable directed event types supported by the
vcoubard 1183:1589830dbdb7 391 * underlying BLE stack.
vcoubard 1183:1589830dbdb7 392 *
vcoubard 1134:d540a48f650d 393 * @return Minimum Advertising interval in milliseconds for connectable
vcoubard 1183:1589830dbdb7 394 * undirected and connectable directed event types.
vcoubard 1131:692ddf04fc42 395 */
vcoubard 1131:692ddf04fc42 396 virtual uint16_t getMinAdvertisingInterval(void) const {
vcoubard 1131:692ddf04fc42 397 return 0; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 398 }
vcoubard 1131:692ddf04fc42 399
vcoubard 1131:692ddf04fc42 400 /**
vcoubard 1183:1589830dbdb7 401 * Get the minimum advertising interval in milliseconds for scannable
vcoubard 1183:1589830dbdb7 402 * undirected and non-connectable undirected even types supported by the
vcoubard 1183:1589830dbdb7 403 * underlying BLE stack.
vcoubard 1183:1589830dbdb7 404 *
vcoubard 1134:d540a48f650d 405 * @return Minimum Advertising interval in milliseconds for scannable
vcoubard 1183:1589830dbdb7 406 * undirected and non-connectable undirected event types.
vcoubard 1131:692ddf04fc42 407 */
vcoubard 1131:692ddf04fc42 408 virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const {
vcoubard 1131:692ddf04fc42 409 return 0; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 410 }
vcoubard 1131:692ddf04fc42 411
vcoubard 1131:692ddf04fc42 412 /**
vcoubard 1183:1589830dbdb7 413 * Get the maximum advertising interval in milliseconds for all event types
vcoubard 1183:1589830dbdb7 414 * supported by the underlying BLE stack.
vcoubard 1183:1589830dbdb7 415 *
vcoubard 1131:692ddf04fc42 416 * @return Maximum Advertising interval in milliseconds.
vcoubard 1131:692ddf04fc42 417 */
vcoubard 1131:692ddf04fc42 418 virtual uint16_t getMaxAdvertisingInterval(void) const {
vcoubard 1131:692ddf04fc42 419 return 0xFFFF; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 420 }
vcoubard 1131:692ddf04fc42 421
vcoubard 1183:1589830dbdb7 422 /**
vcoubard 1183:1589830dbdb7 423 * Stop advertising. The current advertising parameters remain in effect.
vcoubard 1183:1589830dbdb7 424 *
vcoubard 1183:1589830dbdb7 425 * @retval BLE_ERROR_NONE if successfully stopped advertising procedure.
vcoubard 1183:1589830dbdb7 426 */
vcoubard 1131:692ddf04fc42 427 virtual ble_error_t stopAdvertising(void) {
vcoubard 1131:692ddf04fc42 428 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 429 }
vcoubard 1131:692ddf04fc42 430
vcoubard 1131:692ddf04fc42 431 /**
vcoubard 1131:692ddf04fc42 432 * Stop scanning. The current scanning parameters remain in effect.
vcoubard 1131:692ddf04fc42 433 *
vcoubard 1131:692ddf04fc42 434 * @retval BLE_ERROR_NONE if successfully stopped scanning procedure.
vcoubard 1131:692ddf04fc42 435 */
vcoubard 1131:692ddf04fc42 436 virtual ble_error_t stopScan() {
vcoubard 1131:692ddf04fc42 437 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 438 }
vcoubard 1131:692ddf04fc42 439
vcoubard 1131:692ddf04fc42 440 /**
vcoubard 1131:692ddf04fc42 441 * Create a connection (GAP Link Establishment).
vcoubard 1131:692ddf04fc42 442 *
vcoubard 1183:1589830dbdb7 443 * @param[in] peerAddr
vcoubard 1183:1589830dbdb7 444 * 48-bit address, LSB format.
vcoubard 1183:1589830dbdb7 445 * @param[in] peerAddrType
vcoubard 1183:1589830dbdb7 446 * Address type of the peer.
vcoubard 1183:1589830dbdb7 447 * @param[in] connectionParams
vcoubard 1183:1589830dbdb7 448 * Connection parameters.
vcoubard 1183:1589830dbdb7 449 * @param[in] scanParams
vcoubard 1183:1589830dbdb7 450 * Paramters to be used while scanning for the peer.
vcoubard 1183:1589830dbdb7 451 *
vcoubard 1131:692ddf04fc42 452 * @return BLE_ERROR_NONE if connection establishment procedure is started
vcoubard 1183:1589830dbdb7 453 * successfully. The connectionCallChain (if set) will be invoked upon
vcoubard 1183:1589830dbdb7 454 * a connection event.
vcoubard 1131:692ddf04fc42 455 */
vcoubard 1135:22aada733dbd 456 virtual ble_error_t connect(const BLEProtocol::AddressBytes_t peerAddr,
vcoubard 1135:22aada733dbd 457 BLEProtocol::AddressType_t peerAddrType,
vcoubard 1135:22aada733dbd 458 const ConnectionParams_t *connectionParams,
vcoubard 1135:22aada733dbd 459 const GapScanningParams *scanParams) {
vcoubard 1131:692ddf04fc42 460 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 461 (void)peerAddr;
vcoubard 1131:692ddf04fc42 462 (void)peerAddrType;
vcoubard 1131:692ddf04fc42 463 (void)connectionParams;
vcoubard 1131:692ddf04fc42 464 (void)scanParams;
vcoubard 1131:692ddf04fc42 465
vcoubard 1131:692ddf04fc42 466 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 467 }
vcoubard 1131:692ddf04fc42 468
vcoubard 1131:692ddf04fc42 469 /**
vcoubard 1135:22aada733dbd 470 * Create a connection (GAP Link Establishment).
vcoubard 1135:22aada733dbd 471 *
vcoubard 1183:1589830dbdb7 472 * @deprecated This funtion overloads Gap::connect(const BLEProtocol::Address_t peerAddr,
vcoubard 1183:1589830dbdb7 473 * BLEProtocol::AddressType_t peerAddrType,
vcoubard 1183:1589830dbdb7 474 * const ConnectionParams_t *connectionParams,
vcoubard 1183:1589830dbdb7 475 * const GapScanningParams *scanParams)
vcoubard 1183:1589830dbdb7 476 * to maintain backward compatibility for change from Gap::AddressType_t to
vcoubard 1183:1589830dbdb7 477 * BLEProtocol::AddressType_t.
vcoubard 1135:22aada733dbd 478 */
vcoubard 1135:22aada733dbd 479 ble_error_t connect(const BLEProtocol::AddressBytes_t peerAddr,
vcoubard 1135:22aada733dbd 480 DeprecatedAddressType_t peerAddrType,
vcoubard 1135:22aada733dbd 481 const ConnectionParams_t *connectionParams,
vcoubard 1135:22aada733dbd 482 const GapScanningParams *scanParams)
vcoubard 1135:22aada733dbd 483 __deprecated_message("Gap::DeprecatedAddressType_t is deprecated, use BLEProtocol::AddressType_t instead") {
vcoubard 1135:22aada733dbd 484 return connect(peerAddr, (BLEProtocol::AddressType_t) peerAddrType, connectionParams, scanParams);
vcoubard 1135:22aada733dbd 485 }
vcoubard 1135:22aada733dbd 486
vcoubard 1135:22aada733dbd 487 /**
vcoubard 1131:692ddf04fc42 488 * This call initiates the disconnection procedure, and its completion will
vcoubard 1131:692ddf04fc42 489 * be communicated to the application with an invocation of the
vcoubard 1131:692ddf04fc42 490 * disconnectionCallback.
vcoubard 1131:692ddf04fc42 491 *
vcoubard 1183:1589830dbdb7 492 * @param[in] reason
vcoubard 1183:1589830dbdb7 493 * The reason for disconnection; to be sent back to the peer.
vcoubard 1183:1589830dbdb7 494 * @param[in] connectionHandle
vcoubard 1183:1589830dbdb7 495 * The handle of the connection to disconnect from.
vcoubard 1183:1589830dbdb7 496 *
vcoubard 1183:1589830dbdb7 497 * @return BLE_ERROR_NONE if disconnection was successful.
vcoubard 1131:692ddf04fc42 498 */
vcoubard 1131:692ddf04fc42 499 virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason) {
vcoubard 1131:692ddf04fc42 500 /* avoid compiler warnings about unused variables */
vcoubard 1131:692ddf04fc42 501 (void)connectionHandle;
vcoubard 1131:692ddf04fc42 502 (void)reason;
vcoubard 1131:692ddf04fc42 503
vcoubard 1131:692ddf04fc42 504 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 505 }
vcoubard 1131:692ddf04fc42 506
vcoubard 1131:692ddf04fc42 507 /**
vcoubard 1131:692ddf04fc42 508 * This call initiates the disconnection procedure, and its completion will
vcoubard 1131:692ddf04fc42 509 * be communicated to the application with an invocation of the
vcoubard 1131:692ddf04fc42 510 * disconnectionCallback.
vcoubard 1131:692ddf04fc42 511 *
vcoubard 1183:1589830dbdb7 512 * @param[in] reason
vcoubard 1183:1589830dbdb7 513 * The reason for disconnection; to be sent back to the peer.
vcoubard 1183:1589830dbdb7 514 *
vcoubard 1183:1589830dbdb7 515 * @return BLE_ERROR_NONE if disconnection was successful.
vcoubard 1131:692ddf04fc42 516 *
vcoubard 1183:1589830dbdb7 517 * @deprecated This version of disconnect() doesn't take a connection handle. It
vcoubard 1183:1589830dbdb7 518 * works reliably only for stacks that are limited to a single
vcoubard 1183:1589830dbdb7 519 * connection. Use instead Gap::disconnect(Handle_t connectionHandle,
vcoubard 1183:1589830dbdb7 520 * DisconnectionReason_t reason) instead.
vcoubard 1131:692ddf04fc42 521 */
vcoubard 1131:692ddf04fc42 522 virtual ble_error_t disconnect(DisconnectionReason_t reason) {
vcoubard 1131:692ddf04fc42 523 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 524 (void)reason;
vcoubard 1131:692ddf04fc42 525
vcoubard 1131:692ddf04fc42 526 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 527 }
vcoubard 1131:692ddf04fc42 528
vcoubard 1131:692ddf04fc42 529 /**
vcoubard 1131:692ddf04fc42 530 * Get the GAP peripheral preferred connection parameters. These are the
vcoubard 1131:692ddf04fc42 531 * defaults that the peripheral would like to have in a connection. The
vcoubard 1131:692ddf04fc42 532 * choice of the connection parameters is eventually up to the central.
vcoubard 1131:692ddf04fc42 533 *
vcoubard 1131:692ddf04fc42 534 * @param[out] params
vcoubard 1131:692ddf04fc42 535 * The structure where the parameters will be stored. Memory
vcoubard 1131:692ddf04fc42 536 * for this is owned by the caller.
vcoubard 1131:692ddf04fc42 537 *
vcoubard 1131:692ddf04fc42 538 * @return BLE_ERROR_NONE if the parameters were successfully filled into
vcoubard 1183:1589830dbdb7 539 * the given structure pointed to by params.
vcoubard 1131:692ddf04fc42 540 */
vcoubard 1131:692ddf04fc42 541 virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params) {
vcoubard 1131:692ddf04fc42 542 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 543 (void)params;
vcoubard 1131:692ddf04fc42 544
vcoubard 1131:692ddf04fc42 545 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 546 }
vcoubard 1131:692ddf04fc42 547
vcoubard 1131:692ddf04fc42 548 /**
vcoubard 1131:692ddf04fc42 549 * Set the GAP peripheral preferred connection parameters. These are the
vcoubard 1131:692ddf04fc42 550 * defaults that the peripheral would like to have in a connection. The
vcoubard 1131:692ddf04fc42 551 * choice of the connection parameters is eventually up to the central.
vcoubard 1131:692ddf04fc42 552 *
vcoubard 1131:692ddf04fc42 553 * @param[in] params
vcoubard 1131:692ddf04fc42 554 * The structure containing the desired parameters.
vcoubard 1183:1589830dbdb7 555 *
vcoubard 1183:1589830dbdb7 556 * @return BLE_ERROR_NONE if the preferred connection params were set
vcoubard 1183:1589830dbdb7 557 * correctly.
vcoubard 1131:692ddf04fc42 558 */
vcoubard 1131:692ddf04fc42 559 virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params) {
vcoubard 1131:692ddf04fc42 560 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 561 (void)params;
vcoubard 1131:692ddf04fc42 562
vcoubard 1131:692ddf04fc42 563 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 564 }
vcoubard 1131:692ddf04fc42 565
vcoubard 1131:692ddf04fc42 566 /**
vcoubard 1183:1589830dbdb7 567 * Update connection parameters. In the central role this will initiate a
vcoubard 1183:1589830dbdb7 568 * Link Layer connection parameter update procedure. In the peripheral role,
vcoubard 1183:1589830dbdb7 569 * this will send the corresponding L2CAP request and wait for the central
vcoubard 1183:1589830dbdb7 570 * to perform the procedure.
vcoubard 1131:692ddf04fc42 571 *
vcoubard 1131:692ddf04fc42 572 * @param[in] handle
vcoubard 1131:692ddf04fc42 573 * Connection Handle.
vcoubard 1131:692ddf04fc42 574 * @param[in] params
vcoubard 1131:692ddf04fc42 575 * Pointer to desired connection parameters. If NULL is provided on a peripheral role,
vcoubard 1131:692ddf04fc42 576 * the parameters in the PPCP characteristic of the GAP service will be used instead.
vcoubard 1183:1589830dbdb7 577 *
vcoubard 1183:1589830dbdb7 578 * @return BLE_ERROR_NONE if the connection parameters were updated correctly.
vcoubard 1131:692ddf04fc42 579 */
vcoubard 1131:692ddf04fc42 580 virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params) {
vcoubard 1131:692ddf04fc42 581 /* avoid compiler warnings about unused variables */
vcoubard 1131:692ddf04fc42 582 (void)handle;
vcoubard 1131:692ddf04fc42 583 (void)params;
vcoubard 1131:692ddf04fc42 584
vcoubard 1131:692ddf04fc42 585 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 586 }
vcoubard 1131:692ddf04fc42 587
vcoubard 1131:692ddf04fc42 588 /**
vcoubard 1131:692ddf04fc42 589 * Set the device name characteristic in the GAP service.
vcoubard 1183:1589830dbdb7 590 *
vcoubard 1131:692ddf04fc42 591 * @param[in] deviceName
vcoubard 1131:692ddf04fc42 592 * The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string.
vcoubard 1183:1589830dbdb7 593 *
vcoubard 1183:1589830dbdb7 594 * @return BLE_ERROR_NONE if the device name was set correctly.
vcoubard 1131:692ddf04fc42 595 */
vcoubard 1131:692ddf04fc42 596 virtual ble_error_t setDeviceName(const uint8_t *deviceName) {
vcoubard 1131:692ddf04fc42 597 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 598 (void)deviceName;
vcoubard 1131:692ddf04fc42 599
vcoubard 1131:692ddf04fc42 600 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 601 }
vcoubard 1131:692ddf04fc42 602
vcoubard 1131:692ddf04fc42 603 /**
vcoubard 1131:692ddf04fc42 604 * Get the value of the device name characteristic in the GAP service.
vcoubard 1183:1589830dbdb7 605 *
vcoubard 1131:692ddf04fc42 606 * @param[out] deviceName
vcoubard 1131:692ddf04fc42 607 * Pointer to an empty buffer where the UTF-8 *non NULL-
vcoubard 1131:692ddf04fc42 608 * terminated* string will be placed. Set this
vcoubard 1131:692ddf04fc42 609 * value to NULL in order to obtain the deviceName-length
vcoubard 1131:692ddf04fc42 610 * from the 'length' parameter.
vcoubard 1131:692ddf04fc42 611 *
vcoubard 1183:1589830dbdb7 612 * @param[in,out] lengthP
vcoubard 1131:692ddf04fc42 613 * (on input) Length of the buffer pointed to by deviceName;
vcoubard 1131:692ddf04fc42 614 * (on output) the complete device name length (without the
vcoubard 1131:692ddf04fc42 615 * null terminator).
vcoubard 1131:692ddf04fc42 616 *
vcoubard 1183:1589830dbdb7 617 * @return BLE_ERROR_NONE if the device name was fetched correctly from the
vcoubard 1183:1589830dbdb7 618 * underlying BLE stack.
vcoubard 1183:1589830dbdb7 619 *
vcoubard 1131:692ddf04fc42 620 * @note If the device name is longer than the size of the supplied buffer,
vcoubard 1183:1589830dbdb7 621 * length will return the complete device name length, and not the
vcoubard 1183:1589830dbdb7 622 * number of bytes actually returned in deviceName. The application may
vcoubard 1183:1589830dbdb7 623 * use this information to retry with a suitable buffer size.
vcoubard 1131:692ddf04fc42 624 */
vcoubard 1131:692ddf04fc42 625 virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) {
vcoubard 1131:692ddf04fc42 626 /* avoid compiler warnings about unused variables */
vcoubard 1131:692ddf04fc42 627 (void)deviceName;
vcoubard 1131:692ddf04fc42 628 (void)lengthP;
vcoubard 1131:692ddf04fc42 629
vcoubard 1131:692ddf04fc42 630 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 631 }
vcoubard 1131:692ddf04fc42 632
vcoubard 1131:692ddf04fc42 633 /**
vcoubard 1131:692ddf04fc42 634 * Set the appearance characteristic in the GAP service.
vcoubard 1183:1589830dbdb7 635 *
vcoubard 1131:692ddf04fc42 636 * @param[in] appearance
vcoubard 1131:692ddf04fc42 637 * The new value for the device-appearance.
vcoubard 1183:1589830dbdb7 638 *
vcoubard 1183:1589830dbdb7 639 * @return BLE_ERROR_NONE if the new appearance was set correctly.
vcoubard 1131:692ddf04fc42 640 */
vcoubard 1131:692ddf04fc42 641 virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) {
vcoubard 1131:692ddf04fc42 642 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 643 (void)appearance;
vcoubard 1131:692ddf04fc42 644
vcoubard 1131:692ddf04fc42 645 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 646 }
vcoubard 1131:692ddf04fc42 647
vcoubard 1131:692ddf04fc42 648 /**
vcoubard 1131:692ddf04fc42 649 * Get the appearance characteristic in the GAP service.
vcoubard 1183:1589830dbdb7 650 *
vcoubard 1131:692ddf04fc42 651 * @param[out] appearance
vcoubard 1183:1589830dbdb7 652 * The current device-appearance value.
vcoubard 1183:1589830dbdb7 653 *
vcoubard 1183:1589830dbdb7 654 * @return BLE_ERROR_NONE if the device-appearance was fetched correctly
vcoubard 1183:1589830dbdb7 655 * from the underlying BLE stack.
vcoubard 1131:692ddf04fc42 656 */
vcoubard 1131:692ddf04fc42 657 virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) {
vcoubard 1131:692ddf04fc42 658 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 659 (void)appearanceP;
vcoubard 1131:692ddf04fc42 660
vcoubard 1131:692ddf04fc42 661 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 662 }
vcoubard 1131:692ddf04fc42 663
vcoubard 1131:692ddf04fc42 664 /**
vcoubard 1131:692ddf04fc42 665 * Set the radio's transmit power.
vcoubard 1183:1589830dbdb7 666 *
vcoubard 1183:1589830dbdb7 667 * @param[in] txPower
vcoubard 1183:1589830dbdb7 668 * Radio's transmit power in dBm.
vcoubard 1183:1589830dbdb7 669 *
vcoubard 1183:1589830dbdb7 670 * @return BLE_ERROR_NONE if the new radio's transmit power was set
vcoubard 1183:1589830dbdb7 671 * correctly.
vcoubard 1131:692ddf04fc42 672 */
vcoubard 1131:692ddf04fc42 673 virtual ble_error_t setTxPower(int8_t txPower) {
vcoubard 1131:692ddf04fc42 674 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 675 (void)txPower;
vcoubard 1131:692ddf04fc42 676
vcoubard 1131:692ddf04fc42 677 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 678 }
vcoubard 1131:692ddf04fc42 679
vcoubard 1131:692ddf04fc42 680 /**
vcoubard 1131:692ddf04fc42 681 * Query the underlying stack for permitted arguments for setTxPower().
vcoubard 1131:692ddf04fc42 682 *
vcoubard 1131:692ddf04fc42 683 * @param[out] valueArrayPP
vcoubard 1131:692ddf04fc42 684 * Out parameter to receive the immutable array of Tx values.
vcoubard 1131:692ddf04fc42 685 * @param[out] countP
vcoubard 1131:692ddf04fc42 686 * Out parameter to receive the array's size.
vcoubard 1131:692ddf04fc42 687 */
vcoubard 1131:692ddf04fc42 688 virtual void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) {
vcoubard 1131:692ddf04fc42 689 /* Avoid compiler warnings about unused variables. */
vcoubard 1131:692ddf04fc42 690 (void)valueArrayPP;
vcoubard 1131:692ddf04fc42 691 (void)countP;
vcoubard 1131:692ddf04fc42 692
vcoubard 1131:692ddf04fc42 693 *countP = 0; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 694 }
vcoubard 1131:692ddf04fc42 695
vcoubard 1135:22aada733dbd 696 /**
vcoubard 1183:1589830dbdb7 697 * Get the maximum size of the whitelist.
vcoubard 1183:1589830dbdb7 698 *
vcoubard 1135:22aada733dbd 699 * @return Maximum size of the whitelist.
vcoubard 1135:22aada733dbd 700 *
vcoubard 1183:1589830dbdb7 701 * @note If using mbed OS the size of the whitelist can be configured by
vcoubard 1183:1589830dbdb7 702 * setting the YOTTA_CFG_WHITELIST_MAX_SIZE macro in your yotta
vcoubard 1183:1589830dbdb7 703 * config file.
vcoubard 1183:1589830dbdb7 704 *
vcoubard 1135:22aada733dbd 705 * @experimental
vcoubard 1135:22aada733dbd 706 */
vcoubard 1135:22aada733dbd 707 virtual uint8_t getMaxWhitelistSize(void) const
vcoubard 1135:22aada733dbd 708 {
vcoubard 1135:22aada733dbd 709 return 0;
vcoubard 1135:22aada733dbd 710 }
vcoubard 1135:22aada733dbd 711
vcoubard 1135:22aada733dbd 712 /**
vcoubard 1135:22aada733dbd 713 * Get the internal whitelist to be used by the Link Layer when scanning,
vcoubard 1135:22aada733dbd 714 * advertising or initiating a connection depending on the filter policies.
vcoubard 1135:22aada733dbd 715 *
vcoubard 1183:1589830dbdb7 716 * @param[in,out] whitelist
vcoubard 1135:22aada733dbd 717 * (on input) whitelist.capacity contains the maximum number
vcoubard 1135:22aada733dbd 718 * of addresses to be returned.
vcoubard 1135:22aada733dbd 719 * (on output) The populated whitelist with copies of the
vcoubard 1135:22aada733dbd 720 * addresses in the implementation's whitelist.
vcoubard 1135:22aada733dbd 721 *
vcoubard 1135:22aada733dbd 722 * @return BLE_ERROR_NONE if the implementation's whitelist was successfully
vcoubard 1135:22aada733dbd 723 * copied into the supplied reference.
vcoubard 1135:22aada733dbd 724 *
vcoubard 1135:22aada733dbd 725 * @experimental
vcoubard 1135:22aada733dbd 726 */
vcoubard 1135:22aada733dbd 727 virtual ble_error_t getWhitelist(Whitelist_t &whitelist) const
vcoubard 1135:22aada733dbd 728 {
vcoubard 1135:22aada733dbd 729 (void) whitelist;
vcoubard 1135:22aada733dbd 730 return BLE_ERROR_NOT_IMPLEMENTED;
vcoubard 1135:22aada733dbd 731 }
vcoubard 1135:22aada733dbd 732
vcoubard 1135:22aada733dbd 733 /**
vcoubard 1135:22aada733dbd 734 * Set the internal whitelist to be used by the Link Layer when scanning,
vcoubard 1135:22aada733dbd 735 * advertising or initiating a connection depending on the filter policies.
vcoubard 1135:22aada733dbd 736 *
vcoubard 1135:22aada733dbd 737 * @param[in] whitelist
vcoubard 1135:22aada733dbd 738 * A reference to a whitelist containing the addresses to
vcoubard 1135:22aada733dbd 739 * be added to the internal whitelist.
vcoubard 1135:22aada733dbd 740 *
vcoubard 1135:22aada733dbd 741 * @return BLE_ERROR_NONE if the implementation's whitelist was successfully
vcoubard 1135:22aada733dbd 742 * populated with the addresses in the given whitelist.
vcoubard 1135:22aada733dbd 743 *
vcoubard 1135:22aada733dbd 744 * @note The whitelist must not contain addresses of type @ref
vcoubard 1135:22aada733dbd 745 * BLEProtocol::AddressType_t::RANDOM_PRIVATE_NON_RESOLVABLE, this
vcoubard 1135:22aada733dbd 746 * this will result in a @ref BLE_ERROR_INVALID_PARAM since the
vcoubard 1135:22aada733dbd 747 * remote peer might change its private address at any time and it
vcoubard 1135:22aada733dbd 748 * is not possible to resolve it.
vcoubard 1135:22aada733dbd 749 * @note If the input whitelist is larger than @ref getMaxWhitelistSize()
vcoubard 1135:22aada733dbd 750 * the @ref BLE_ERROR_PARAM_OUT_OF_RANGE is returned.
vcoubard 1135:22aada733dbd 751 *
vcoubard 1135:22aada733dbd 752 * @experimental
vcoubard 1135:22aada733dbd 753 */
vcoubard 1135:22aada733dbd 754 virtual ble_error_t setWhitelist(const Whitelist_t &whitelist)
vcoubard 1135:22aada733dbd 755 {
vcoubard 1135:22aada733dbd 756 (void) whitelist;
vcoubard 1135:22aada733dbd 757 return BLE_ERROR_NOT_IMPLEMENTED;
vcoubard 1135:22aada733dbd 758 }
vcoubard 1135:22aada733dbd 759
vcoubard 1135:22aada733dbd 760 /**
vcoubard 1135:22aada733dbd 761 * Set the advertising policy filter mode to be used in the next call
vcoubard 1135:22aada733dbd 762 * to startAdvertising().
vcoubard 1135:22aada733dbd 763 *
vcoubard 1135:22aada733dbd 764 * @param[in] mode
vcoubard 1135:22aada733dbd 765 * The new advertising policy filter mode.
vcoubard 1135:22aada733dbd 766 *
vcoubard 1135:22aada733dbd 767 * @return BLE_ERROR_NONE if the specified policy filter mode was set
vcoubard 1135:22aada733dbd 768 * successfully.
vcoubard 1135:22aada733dbd 769 *
vcoubard 1135:22aada733dbd 770 * @experimental
vcoubard 1135:22aada733dbd 771 */
vcoubard 1135:22aada733dbd 772 virtual ble_error_t setAdvertisingPolicyMode(AdvertisingPolicyMode_t mode)
vcoubard 1135:22aada733dbd 773 {
vcoubard 1135:22aada733dbd 774 (void) mode;
vcoubard 1135:22aada733dbd 775 return BLE_ERROR_NOT_IMPLEMENTED;
vcoubard 1135:22aada733dbd 776 }
vcoubard 1135:22aada733dbd 777
vcoubard 1135:22aada733dbd 778 /**
vcoubard 1135:22aada733dbd 779 * Set the scan policy filter mode to be used in the next call
vcoubard 1135:22aada733dbd 780 * to startScan().
vcoubard 1135:22aada733dbd 781 *
vcoubard 1135:22aada733dbd 782 * @param[in] mode
vcoubard 1135:22aada733dbd 783 * The new scan policy filter mode.
vcoubard 1135:22aada733dbd 784 *
vcoubard 1135:22aada733dbd 785 * @return BLE_ERROR_NONE if the specified policy filter mode was set
vcoubard 1135:22aada733dbd 786 * successfully.
vcoubard 1135:22aada733dbd 787 *
vcoubard 1135:22aada733dbd 788 * @experimental
vcoubard 1135:22aada733dbd 789 */
vcoubard 1135:22aada733dbd 790 virtual ble_error_t setScanningPolicyMode(ScanningPolicyMode_t mode)
vcoubard 1135:22aada733dbd 791 {
vcoubard 1135:22aada733dbd 792 (void) mode;
vcoubard 1135:22aada733dbd 793 return BLE_ERROR_NOT_IMPLEMENTED;
vcoubard 1135:22aada733dbd 794 }
vcoubard 1135:22aada733dbd 795
vcoubard 1135:22aada733dbd 796 /**
vcoubard 1135:22aada733dbd 797 * Set the initiator policy filter mode to be used.
vcoubard 1135:22aada733dbd 798 *
vcoubard 1135:22aada733dbd 799 * @param[in] mode
vcoubard 1135:22aada733dbd 800 * The new initiator policy filter mode.
vcoubard 1135:22aada733dbd 801 *
vcoubard 1135:22aada733dbd 802 * @return BLE_ERROR_NONE if the specified policy filter mode was set
vcoubard 1135:22aada733dbd 803 * successfully.
vcoubard 1135:22aada733dbd 804 *
vcoubard 1135:22aada733dbd 805 * @experimental
vcoubard 1135:22aada733dbd 806 */
vcoubard 1135:22aada733dbd 807 virtual ble_error_t setInitiatorPolicyMode(InitiatorPolicyMode_t mode)
vcoubard 1135:22aada733dbd 808 {
vcoubard 1135:22aada733dbd 809 (void) mode;
vcoubard 1135:22aada733dbd 810 return BLE_ERROR_NOT_IMPLEMENTED;
vcoubard 1135:22aada733dbd 811 }
vcoubard 1135:22aada733dbd 812
vcoubard 1135:22aada733dbd 813 /**
vcoubard 1135:22aada733dbd 814 * Get the advertising policy filter mode that will be used in the next
vcoubard 1135:22aada733dbd 815 * call to startAdvertising().
vcoubard 1135:22aada733dbd 816 *
vcoubard 1135:22aada733dbd 817 * @return The set advertising policy filter mode.
vcoubard 1135:22aada733dbd 818 *
vcoubard 1135:22aada733dbd 819 * @experimental
vcoubard 1135:22aada733dbd 820 */
vcoubard 1135:22aada733dbd 821 virtual AdvertisingPolicyMode_t getAdvertisingPolicyMode(void) const
vcoubard 1135:22aada733dbd 822 {
vcoubard 1135:22aada733dbd 823 return ADV_POLICY_IGNORE_WHITELIST;
vcoubard 1135:22aada733dbd 824 }
vcoubard 1135:22aada733dbd 825
vcoubard 1135:22aada733dbd 826 /**
vcoubard 1135:22aada733dbd 827 * Get the scan policy filter mode that will be used in the next
vcoubard 1135:22aada733dbd 828 * call to startScan().
vcoubard 1135:22aada733dbd 829 *
vcoubard 1135:22aada733dbd 830 * @return The set scan policy filter mode.
vcoubard 1135:22aada733dbd 831 *
vcoubard 1135:22aada733dbd 832 * @experimental
vcoubard 1135:22aada733dbd 833 */
vcoubard 1135:22aada733dbd 834 virtual ScanningPolicyMode_t getScanningPolicyMode(void) const
vcoubard 1135:22aada733dbd 835 {
vcoubard 1135:22aada733dbd 836 return SCAN_POLICY_IGNORE_WHITELIST;
vcoubard 1135:22aada733dbd 837 }
vcoubard 1135:22aada733dbd 838
vcoubard 1135:22aada733dbd 839 /**
vcoubard 1135:22aada733dbd 840 * Get the initiator policy filter mode that will be used.
vcoubard 1135:22aada733dbd 841 *
vcoubard 1135:22aada733dbd 842 * @return The set scan policy filter mode.
vcoubard 1135:22aada733dbd 843 *
vcoubard 1135:22aada733dbd 844 * @experimental
vcoubard 1135:22aada733dbd 845 */
vcoubard 1135:22aada733dbd 846 virtual InitiatorPolicyMode_t getInitiatorPolicyMode(void) const
vcoubard 1135:22aada733dbd 847 {
vcoubard 1135:22aada733dbd 848 return INIT_POLICY_IGNORE_WHITELIST;
vcoubard 1135:22aada733dbd 849 }
vcoubard 1135:22aada733dbd 850
vcoubard 1131:692ddf04fc42 851 protected:
vcoubard 1131:692ddf04fc42 852 /* Override the following in the underlying adaptation layer to provide the functionality of scanning. */
vcoubard 1183:1589830dbdb7 853
vcoubard 1183:1589830dbdb7 854 /**
vcoubard 1183:1589830dbdb7 855 * Start scanning procedure in the underlying BLE stack.
vcoubard 1183:1589830dbdb7 856 *
vcoubard 1183:1589830dbdb7 857 * @param[in] scanningParams
vcoubard 1183:1589830dbdb7 858 * The GAP scanning parameters.
vcoubard 1183:1589830dbdb7 859 *
vcoubard 1183:1589830dbdb7 860 * @return BLE_ERROR_NONE if the scan procedure started successfully.
vcoubard 1183:1589830dbdb7 861 */
vcoubard 1131:692ddf04fc42 862 virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams) {
vcoubard 1131:692ddf04fc42 863 (void)scanningParams;
vcoubard 1131:692ddf04fc42 864 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 865 }
vcoubard 1131:692ddf04fc42 866
vcoubard 1131:692ddf04fc42 867 /*
vcoubard 1131:692ddf04fc42 868 * APIs with non-virtual implementations.
vcoubard 1131:692ddf04fc42 869 */
vcoubard 1131:692ddf04fc42 870 public:
vcoubard 1131:692ddf04fc42 871 /**
vcoubard 1183:1589830dbdb7 872 * Get the current GAP state of the device using a bitmask that
vcoubard 1131:692ddf04fc42 873 * describes whether the device is advertising or connected.
vcoubard 1183:1589830dbdb7 874 *
vcoubard 1183:1589830dbdb7 875 * @return The current GAP state of the device.
vcoubard 1131:692ddf04fc42 876 */
vcoubard 1131:692ddf04fc42 877 GapState_t getState(void) const {
vcoubard 1131:692ddf04fc42 878 return state;
vcoubard 1131:692ddf04fc42 879 }
vcoubard 1131:692ddf04fc42 880
vcoubard 1131:692ddf04fc42 881 /**
vcoubard 1131:692ddf04fc42 882 * Set the GAP advertising mode to use for this device.
vcoubard 1183:1589830dbdb7 883 *
vcoubard 1183:1589830dbdb7 884 * @param[in] advType
vcoubard 1183:1589830dbdb7 885 * The new type of the advertising packets.
vcoubard 1131:692ddf04fc42 886 */
vcoubard 1131:692ddf04fc42 887 void setAdvertisingType(GapAdvertisingParams::AdvertisingType_t advType) {
vcoubard 1131:692ddf04fc42 888 _advParams.setAdvertisingType(advType);
vcoubard 1131:692ddf04fc42 889 }
vcoubard 1131:692ddf04fc42 890
vcoubard 1131:692ddf04fc42 891 /**
vcoubard 1183:1589830dbdb7 892 * Set the advertising interval.
vcoubard 1183:1589830dbdb7 893 *
vcoubard 1131:692ddf04fc42 894 * @param[in] interval
vcoubard 1131:692ddf04fc42 895 * Advertising interval in units of milliseconds. Advertising
vcoubard 1131:692ddf04fc42 896 * is disabled if interval is 0. If interval is smaller than
vcoubard 1131:692ddf04fc42 897 * the minimum supported value, then the minimum supported
vcoubard 1131:692ddf04fc42 898 * value is used instead. This minimum value can be discovered
vcoubard 1131:692ddf04fc42 899 * using getMinAdvertisingInterval().
vcoubard 1131:692ddf04fc42 900 *
vcoubard 1131:692ddf04fc42 901 * This field must be set to 0 if connectionMode is equal
vcoubard 1131:692ddf04fc42 902 * to ADV_CONNECTABLE_DIRECTED.
vcoubard 1131:692ddf04fc42 903 *
vcoubard 1183:1589830dbdb7 904 * @note Decreasing this value will allow central devices to detect a
vcoubard 1183:1589830dbdb7 905 * peripheral faster, at the expense of more power being used by the radio
vcoubard 1183:1589830dbdb7 906 * due to the higher data transmit rate.
vcoubard 1131:692ddf04fc42 907 *
vcoubard 1183:1589830dbdb7 908 * @note [WARNING] This API previously used 0.625ms as the unit for its
vcoubard 1183:1589830dbdb7 909 * @p interval argument. That required an explicit conversion from
vcoubard 1183:1589830dbdb7 910 * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is
vcoubard 1183:1589830dbdb7 911 * no longer required as the new units are milliseconds. Any application
vcoubard 1183:1589830dbdb7 912 * code depending on the old semantics needs to be updated accordingly.
vcoubard 1131:692ddf04fc42 913 */
vcoubard 1131:692ddf04fc42 914 void setAdvertisingInterval(uint16_t interval) {
vcoubard 1131:692ddf04fc42 915 if (interval == 0) {
vcoubard 1131:692ddf04fc42 916 stopAdvertising();
vcoubard 1131:692ddf04fc42 917 } else if (interval < getMinAdvertisingInterval()) {
vcoubard 1131:692ddf04fc42 918 interval = getMinAdvertisingInterval();
vcoubard 1131:692ddf04fc42 919 }
vcoubard 1131:692ddf04fc42 920 _advParams.setInterval(interval);
vcoubard 1131:692ddf04fc42 921 }
vcoubard 1131:692ddf04fc42 922
vcoubard 1131:692ddf04fc42 923 /**
vcoubard 1183:1589830dbdb7 924 * Set the advertising timeout. The length of time to advertise for before
vcoubard 1183:1589830dbdb7 925 * a timeout event is generated.
vcoubard 1183:1589830dbdb7 926 *
vcoubard 1131:692ddf04fc42 927 * @param[in] timeout
vcoubard 1131:692ddf04fc42 928 * Advertising timeout (in seconds) between 0x1 and 0x3FFF (1
vcoubard 1131:692ddf04fc42 929 * and 16383). Use 0 to disable the advertising timeout.
vcoubard 1131:692ddf04fc42 930 */
vcoubard 1131:692ddf04fc42 931 void setAdvertisingTimeout(uint16_t timeout) {
vcoubard 1131:692ddf04fc42 932 _advParams.setTimeout(timeout);
vcoubard 1131:692ddf04fc42 933 }
vcoubard 1131:692ddf04fc42 934
vcoubard 1131:692ddf04fc42 935 /**
vcoubard 1131:692ddf04fc42 936 * Start advertising.
vcoubard 1183:1589830dbdb7 937 *
vcoubard 1183:1589830dbdb7 938 * @return BLE_ERROR_NONE if the device started advertising successfully.
vcoubard 1131:692ddf04fc42 939 */
vcoubard 1131:692ddf04fc42 940 ble_error_t startAdvertising(void) {
vcoubard 1186:61ac7e01586f 941 return startAdvertising(_advParams);
vcoubard 1131:692ddf04fc42 942 }
vcoubard 1131:692ddf04fc42 943
vcoubard 1131:692ddf04fc42 944 /**
vcoubard 1131:692ddf04fc42 945 * Reset any advertising payload prepared from prior calls to
vcoubard 1131:692ddf04fc42 946 * accumulateAdvertisingPayload(). This automatically propagates the re-
vcoubard 1131:692ddf04fc42 947 * initialized advertising payload to the underlying stack.
vcoubard 1131:692ddf04fc42 948 */
vcoubard 1131:692ddf04fc42 949 void clearAdvertisingPayload(void) {
vcoubard 1131:692ddf04fc42 950 _advPayload.clear();
vcoubard 1188:039621a96054 951 setAdvertisingData(_advPayload, _scanResponse);
vcoubard 1131:692ddf04fc42 952 }
vcoubard 1131:692ddf04fc42 953
vcoubard 1131:692ddf04fc42 954 /**
vcoubard 1131:692ddf04fc42 955 * Accumulate an AD structure in the advertising payload. Please note that
vcoubard 1131:692ddf04fc42 956 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
vcoubard 1131:692ddf04fc42 957 * as an additional 31 bytes if the advertising payload is too
vcoubard 1131:692ddf04fc42 958 * small.
vcoubard 1131:692ddf04fc42 959 *
vcoubard 1131:692ddf04fc42 960 * @param[in] flags
vcoubard 1131:692ddf04fc42 961 * The flags to be added. Please refer to
vcoubard 1131:692ddf04fc42 962 * GapAdvertisingData::Flags for valid flags. Multiple
vcoubard 1131:692ddf04fc42 963 * flags may be specified in combination.
vcoubard 1183:1589830dbdb7 964 *
vcoubard 1183:1589830dbdb7 965 * @return BLE_ERROR_NONE if the data was successfully added to the
vcoubard 1183:1589830dbdb7 966 * advertising payload.
vcoubard 1131:692ddf04fc42 967 */
vcoubard 1131:692ddf04fc42 968 ble_error_t accumulateAdvertisingPayload(uint8_t flags) {
vcoubard 1188:039621a96054 969 GapAdvertisingData advPayloadCopy = _advPayload;
vcoubard 1131:692ddf04fc42 970 ble_error_t rc;
vcoubard 1188:039621a96054 971 if ((rc = advPayloadCopy.addFlags(flags)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 972 return rc;
vcoubard 1131:692ddf04fc42 973 }
vcoubard 1131:692ddf04fc42 974
vcoubard 1188:039621a96054 975 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
vcoubard 1188:039621a96054 976 if (rc == BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 977 _advPayload = advPayloadCopy;
vcoubard 1188:039621a96054 978 }
vcoubard 1188:039621a96054 979
vcoubard 1188:039621a96054 980 return rc;
vcoubard 1131:692ddf04fc42 981 }
vcoubard 1131:692ddf04fc42 982
vcoubard 1131:692ddf04fc42 983 /**
vcoubard 1131:692ddf04fc42 984 * Accumulate an AD structure in the advertising payload. Please note that
vcoubard 1131:692ddf04fc42 985 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
vcoubard 1131:692ddf04fc42 986 * as an additional 31 bytes if the advertising payload is too
vcoubard 1131:692ddf04fc42 987 * small.
vcoubard 1131:692ddf04fc42 988 *
vcoubard 1183:1589830dbdb7 989 * @param[in] app
vcoubard 1183:1589830dbdb7 990 * The appearance of the peripheral.
vcoubard 1183:1589830dbdb7 991 *
vcoubard 1183:1589830dbdb7 992 * @return BLE_ERROR_NONE if the data was successfully added to the
vcoubard 1183:1589830dbdb7 993 * advertising payload.
vcoubard 1131:692ddf04fc42 994 */
vcoubard 1131:692ddf04fc42 995 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) {
vcoubard 1188:039621a96054 996 GapAdvertisingData advPayloadCopy = _advPayload;
vcoubard 1131:692ddf04fc42 997 ble_error_t rc;
vcoubard 1188:039621a96054 998 if ((rc = advPayloadCopy.addAppearance(app)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 999 return rc;
vcoubard 1131:692ddf04fc42 1000 }
vcoubard 1131:692ddf04fc42 1001
vcoubard 1188:039621a96054 1002 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
vcoubard 1188:039621a96054 1003 if (rc == BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 1004 _advPayload = advPayloadCopy;
vcoubard 1188:039621a96054 1005 }
vcoubard 1188:039621a96054 1006
vcoubard 1188:039621a96054 1007 return rc;
vcoubard 1131:692ddf04fc42 1008 }
vcoubard 1131:692ddf04fc42 1009
vcoubard 1131:692ddf04fc42 1010 /**
vcoubard 1131:692ddf04fc42 1011 * Accumulate an AD structure in the advertising payload. Please note that
vcoubard 1131:692ddf04fc42 1012 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used
vcoubard 1131:692ddf04fc42 1013 * as an additional 31 bytes if the advertising payload is too
vcoubard 1131:692ddf04fc42 1014 * small.
vcoubard 1131:692ddf04fc42 1015 *
vcoubard 1183:1589830dbdb7 1016 * @param[in] power
vcoubard 1183:1589830dbdb7 1017 * The max transmit power to be used by the controller (in dBm).
vcoubard 1183:1589830dbdb7 1018 *
vcoubard 1183:1589830dbdb7 1019 * @return BLE_ERROR_NONE if the data was successfully added to the
vcoubard 1183:1589830dbdb7 1020 * advertising payload.
vcoubard 1131:692ddf04fc42 1021 */
vcoubard 1131:692ddf04fc42 1022 ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) {
vcoubard 1188:039621a96054 1023 if (power < -100 || power > 20) {
vcoubard 1188:039621a96054 1024 return BLE_ERROR_PARAM_OUT_OF_RANGE;
vcoubard 1188:039621a96054 1025 }
vcoubard 1188:039621a96054 1026
vcoubard 1131:692ddf04fc42 1027 ble_error_t rc;
vcoubard 1131:692ddf04fc42 1028 if ((rc = _advPayload.addTxPower(power)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1029 return rc;
vcoubard 1131:692ddf04fc42 1030 }
vcoubard 1131:692ddf04fc42 1031
vcoubard 1188:039621a96054 1032 return setAdvertisingData(_advPayload, _scanResponse);
vcoubard 1131:692ddf04fc42 1033 }
vcoubard 1131:692ddf04fc42 1034
vcoubard 1131:692ddf04fc42 1035 /**
vcoubard 1131:692ddf04fc42 1036 * Accumulate a variable length byte-stream as an AD structure in the
vcoubard 1131:692ddf04fc42 1037 * advertising payload. Please note that the payload is limited to 31 bytes.
vcoubard 1131:692ddf04fc42 1038 * The SCAN_RESPONSE message may be used as an additional 31 bytes if the
vcoubard 1131:692ddf04fc42 1039 * advertising payload is too small.
vcoubard 1131:692ddf04fc42 1040 *
vcoubard 1183:1589830dbdb7 1041 * @param[in] type
vcoubard 1183:1589830dbdb7 1042 * The type describing the variable length data.
vcoubard 1183:1589830dbdb7 1043 * @param[in] data
vcoubard 1183:1589830dbdb7 1044 * Data bytes.
vcoubard 1183:1589830dbdb7 1045 * @param[in] len
vcoubard 1183:1589830dbdb7 1046 * Length of data.
vcoubard 1135:22aada733dbd 1047 *
vcoubard 1135:22aada733dbd 1048 * @return BLE_ERROR_NONE if the advertisement payload was updated based on
vcoubard 1135:22aada733dbd 1049 * matching AD type; otherwise, an appropriate error.
vcoubard 1135:22aada733dbd 1050 *
vcoubard 1135:22aada733dbd 1051 * @note When the specified AD type is INCOMPLETE_LIST_16BIT_SERVICE_IDS,
vcoubard 1135:22aada733dbd 1052 * COMPLETE_LIST_16BIT_SERVICE_IDS, INCOMPLETE_LIST_32BIT_SERVICE_IDS,
vcoubard 1135:22aada733dbd 1053 * COMPLETE_LIST_32BIT_SERVICE_IDS, INCOMPLETE_LIST_128BIT_SERVICE_IDS,
vcoubard 1135:22aada733dbd 1054 * COMPLETE_LIST_128BIT_SERVICE_IDS or LIST_128BIT_SOLICITATION_IDS the
vcoubard 1135:22aada733dbd 1055 * supplied value is appended to the values previously added to the
vcoubard 1135:22aada733dbd 1056 * payload.
vcoubard 1131:692ddf04fc42 1057 */
vcoubard 1131:692ddf04fc42 1058 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
vcoubard 1188:039621a96054 1059 GapAdvertisingData advPayloadCopy = _advPayload;
vcoubard 1131:692ddf04fc42 1060 ble_error_t rc;
vcoubard 1188:039621a96054 1061 if ((rc = advPayloadCopy.addData(type, data, len)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1062 return rc;
vcoubard 1131:692ddf04fc42 1063 }
vcoubard 1131:692ddf04fc42 1064
vcoubard 1188:039621a96054 1065 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
vcoubard 1188:039621a96054 1066 if (rc == BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 1067 _advPayload = advPayloadCopy;
vcoubard 1188:039621a96054 1068 }
vcoubard 1188:039621a96054 1069
vcoubard 1188:039621a96054 1070 return rc;
vcoubard 1131:692ddf04fc42 1071 }
vcoubard 1131:692ddf04fc42 1072
vcoubard 1131:692ddf04fc42 1073 /**
vcoubard 1131:692ddf04fc42 1074 * Update a particular ADV field in the advertising payload (based on
vcoubard 1135:22aada733dbd 1075 * matching type).
vcoubard 1131:692ddf04fc42 1076 *
vcoubard 1183:1589830dbdb7 1077 * @param[in] type
vcoubard 1183:1589830dbdb7 1078 * The ADV type field describing the variable length data.
vcoubard 1183:1589830dbdb7 1079 * @param[in] data
vcoubard 1183:1589830dbdb7 1080 * Data bytes.
vcoubard 1183:1589830dbdb7 1081 * @param[in] len
vcoubard 1183:1589830dbdb7 1082 * Length of data.
vcoubard 1131:692ddf04fc42 1083 *
vcoubard 1183:1589830dbdb7 1084 * @note If advertisements are enabled, then the update will take effect immediately.
vcoubard 1131:692ddf04fc42 1085 *
vcoubard 1131:692ddf04fc42 1086 * @return BLE_ERROR_NONE if the advertisement payload was updated based on
vcoubard 1135:22aada733dbd 1087 * matching AD type; otherwise, an appropriate error.
vcoubard 1131:692ddf04fc42 1088 */
vcoubard 1131:692ddf04fc42 1089 ble_error_t updateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
vcoubard 1188:039621a96054 1090 GapAdvertisingData advPayloadCopy = _advPayload;
vcoubard 1131:692ddf04fc42 1091 ble_error_t rc;
vcoubard 1188:039621a96054 1092 if ((rc = advPayloadCopy.updateData(type, data, len)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1093 return rc;
vcoubard 1131:692ddf04fc42 1094 }
vcoubard 1131:692ddf04fc42 1095
vcoubard 1188:039621a96054 1096 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
vcoubard 1188:039621a96054 1097 if (rc == BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 1098 _advPayload = advPayloadCopy;
vcoubard 1188:039621a96054 1099 }
vcoubard 1188:039621a96054 1100
vcoubard 1188:039621a96054 1101 return rc;
vcoubard 1131:692ddf04fc42 1102 }
vcoubard 1131:692ddf04fc42 1103
vcoubard 1131:692ddf04fc42 1104 /**
vcoubard 1131:692ddf04fc42 1105 * Set up a particular, user-constructed advertisement payload for the
vcoubard 1131:692ddf04fc42 1106 * underlying stack. It would be uncommon for this API to be used directly;
vcoubard 1183:1589830dbdb7 1107 * there are other APIs to build an advertisement payload (refer to
vcoubard 1183:1589830dbdb7 1108 * Gap::accumulateAdvertisingPayload()).
vcoubard 1183:1589830dbdb7 1109 *
vcoubard 1183:1589830dbdb7 1110 * @param[in] payload
vcoubard 1183:1589830dbdb7 1111 * A reference to a user constructed advertisement
vcoubard 1183:1589830dbdb7 1112 * payload.
vcoubard 1183:1589830dbdb7 1113 *
vcoubard 1183:1589830dbdb7 1114 * @return BLE_ERROR_NONE if the advertisement payload was successfully
vcoubard 1183:1589830dbdb7 1115 * set.
vcoubard 1131:692ddf04fc42 1116 */
vcoubard 1131:692ddf04fc42 1117 ble_error_t setAdvertisingPayload(const GapAdvertisingData &payload) {
vcoubard 1188:039621a96054 1118 ble_error_t rc = setAdvertisingData(_advPayload, _scanResponse);
vcoubard 1188:039621a96054 1119 if (rc != BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 1120 /* The payload has a problem, do not store it */
vcoubard 1188:039621a96054 1121 return rc;
vcoubard 1188:039621a96054 1122 }
vcoubard 1131:692ddf04fc42 1123 _advPayload = payload;
vcoubard 1188:039621a96054 1124 return BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1125 }
vcoubard 1131:692ddf04fc42 1126
vcoubard 1131:692ddf04fc42 1127 /**
vcoubard 1183:1589830dbdb7 1128 * Get a reference to the advertising payload.
vcoubard 1183:1589830dbdb7 1129 *
vcoubard 1183:1589830dbdb7 1130 * @return Read back advertising data.
vcoubard 1183:1589830dbdb7 1131 *
vcoubard 1183:1589830dbdb7 1132 * @note Useful for storing and restoring payload.
vcoubard 1131:692ddf04fc42 1133 */
vcoubard 1131:692ddf04fc42 1134 const GapAdvertisingData &getAdvertisingPayload(void) const {
vcoubard 1131:692ddf04fc42 1135 return _advPayload;
vcoubard 1131:692ddf04fc42 1136 }
vcoubard 1131:692ddf04fc42 1137
vcoubard 1131:692ddf04fc42 1138 /**
vcoubard 1131:692ddf04fc42 1139 * Accumulate a variable length byte-stream as an AD structure in the
vcoubard 1131:692ddf04fc42 1140 * scanResponse payload.
vcoubard 1131:692ddf04fc42 1141 *
vcoubard 1183:1589830dbdb7 1142 * @param[in] type
vcoubard 1183:1589830dbdb7 1143 * The type describing the variable length data.
vcoubard 1183:1589830dbdb7 1144 * @param[in] data
vcoubard 1183:1589830dbdb7 1145 * Data bytes.
vcoubard 1183:1589830dbdb7 1146 * @param[in] len
vcoubard 1183:1589830dbdb7 1147 * Length of data.
vcoubard 1183:1589830dbdb7 1148 *
vcoubard 1183:1589830dbdb7 1149 * @return BLE_ERROR_NONE if the data was successfully added to the scan
vcoubard 1183:1589830dbdb7 1150 * response payload.
vcoubard 1131:692ddf04fc42 1151 */
vcoubard 1131:692ddf04fc42 1152 ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
vcoubard 1188:039621a96054 1153 GapAdvertisingData scanResponseCopy = _scanResponse;
vcoubard 1131:692ddf04fc42 1154 ble_error_t rc;
vcoubard 1188:039621a96054 1155 if ((rc = scanResponseCopy.addData(type, data, len)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1156 return rc;
vcoubard 1131:692ddf04fc42 1157 }
vcoubard 1131:692ddf04fc42 1158
vcoubard 1188:039621a96054 1159 rc = setAdvertisingData(_advPayload, scanResponseCopy);
vcoubard 1188:039621a96054 1160 if (rc == BLE_ERROR_NONE) {
vcoubard 1188:039621a96054 1161 _scanResponse = scanResponseCopy;
vcoubard 1188:039621a96054 1162 }
vcoubard 1188:039621a96054 1163
vcoubard 1188:039621a96054 1164 return rc;
vcoubard 1131:692ddf04fc42 1165 }
vcoubard 1131:692ddf04fc42 1166
vcoubard 1131:692ddf04fc42 1167 /**
vcoubard 1131:692ddf04fc42 1168 * Reset any scan response prepared from prior calls to
vcoubard 1183:1589830dbdb7 1169 * Gap::accumulateScanResponse().
vcoubard 1131:692ddf04fc42 1170 *
vcoubard 1183:1589830dbdb7 1171 * @note This should be followed by a call to Gap::setAdvertisingPayload() or
vcoubard 1183:1589830dbdb7 1172 * Gap::startAdvertising() before the update takes effect.
vcoubard 1131:692ddf04fc42 1173 */
vcoubard 1131:692ddf04fc42 1174 void clearScanResponse(void) {
vcoubard 1131:692ddf04fc42 1175 _scanResponse.clear();
vcoubard 1188:039621a96054 1176 setAdvertisingData(_advPayload, _scanResponse);
vcoubard 1131:692ddf04fc42 1177 }
vcoubard 1131:692ddf04fc42 1178
vcoubard 1131:692ddf04fc42 1179 /**
vcoubard 1131:692ddf04fc42 1180 * Set up parameters for GAP scanning (observer mode).
vcoubard 1183:1589830dbdb7 1181 *
vcoubard 1131:692ddf04fc42 1182 * @param[in] interval
vcoubard 1131:692ddf04fc42 1183 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
vcoubard 1131:692ddf04fc42 1184 * @param[in] window
vcoubard 1131:692ddf04fc42 1185 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s].
vcoubard 1131:692ddf04fc42 1186 * @param[in] timeout
vcoubard 1131:692ddf04fc42 1187 * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables the timeout.
vcoubard 1131:692ddf04fc42 1188 * @param[in] activeScanning
vcoubard 1131:692ddf04fc42 1189 * Set to True if active-scanning is required. This is used to fetch the
vcoubard 1131:692ddf04fc42 1190 * scan response from a peer if possible.
vcoubard 1131:692ddf04fc42 1191 *
vcoubard 1183:1589830dbdb7 1192 * @return BLE_ERROR_NONE if the scan parameters were correctly set.
vcoubard 1131:692ddf04fc42 1193 *
vcoubard 1183:1589830dbdb7 1194 * @note The scanning window divided by the interval determines the duty cycle for
vcoubard 1183:1589830dbdb7 1195 * scanning. For example, if the interval is 100ms and the window is 10ms,
vcoubard 1183:1589830dbdb7 1196 * then the controller will scan for 10 percent of the time. It is possible
vcoubard 1183:1589830dbdb7 1197 * to have the interval and window set to the same value. In this case,
vcoubard 1183:1589830dbdb7 1198 * scanning is continuous, with a change of scanning frequency once every
vcoubard 1183:1589830dbdb7 1199 * interval.
vcoubard 1131:692ddf04fc42 1200 *
vcoubard 1183:1589830dbdb7 1201 * @note Once the scanning parameters have been configured, scanning can be
vcoubard 1183:1589830dbdb7 1202 * enabled by using startScan().
vcoubard 1183:1589830dbdb7 1203 *
vcoubard 1183:1589830dbdb7 1204 * @note The scan interval and window are recommendations to the BLE stack.
vcoubard 1131:692ddf04fc42 1205 */
vcoubard 1131:692ddf04fc42 1206 ble_error_t setScanParams(uint16_t interval = GapScanningParams::SCAN_INTERVAL_MAX,
vcoubard 1131:692ddf04fc42 1207 uint16_t window = GapScanningParams::SCAN_WINDOW_MAX,
vcoubard 1131:692ddf04fc42 1208 uint16_t timeout = 0,
vcoubard 1131:692ddf04fc42 1209 bool activeScanning = false) {
vcoubard 1131:692ddf04fc42 1210 ble_error_t rc;
vcoubard 1131:692ddf04fc42 1211 if (((rc = _scanningParams.setInterval(interval)) == BLE_ERROR_NONE) &&
vcoubard 1131:692ddf04fc42 1212 ((rc = _scanningParams.setWindow(window)) == BLE_ERROR_NONE) &&
vcoubard 1131:692ddf04fc42 1213 ((rc = _scanningParams.setTimeout(timeout)) == BLE_ERROR_NONE)) {
vcoubard 1131:692ddf04fc42 1214 _scanningParams.setActiveScanning(activeScanning);
vcoubard 1131:692ddf04fc42 1215 return BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1216 }
vcoubard 1131:692ddf04fc42 1217
vcoubard 1131:692ddf04fc42 1218 return rc;
vcoubard 1131:692ddf04fc42 1219 }
vcoubard 1131:692ddf04fc42 1220
vcoubard 1131:692ddf04fc42 1221 /**
vcoubard 1131:692ddf04fc42 1222 * Set up the scanInterval parameter for GAP scanning (observer mode).
vcoubard 1183:1589830dbdb7 1223 *
vcoubard 1131:692ddf04fc42 1224 * @param[in] interval
vcoubard 1131:692ddf04fc42 1225 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
vcoubard 1131:692ddf04fc42 1226 *
vcoubard 1183:1589830dbdb7 1227 * @return BLE_ERROR_NONE if the scan interval was correctly set.
vcoubard 1131:692ddf04fc42 1228 *
vcoubard 1183:1589830dbdb7 1229 * @note The scanning window divided by the interval determines the duty cycle for
vcoubard 1183:1589830dbdb7 1230 * scanning. For example, if the interval is 100ms and the window is 10ms,
vcoubard 1183:1589830dbdb7 1231 * then the controller will scan for 10 percent of the time. It is possible
vcoubard 1183:1589830dbdb7 1232 * to have the interval and window set to the same value. In this case,
vcoubard 1183:1589830dbdb7 1233 * scanning is continuous, with a change of scanning frequency once every
vcoubard 1183:1589830dbdb7 1234 * interval.
vcoubard 1183:1589830dbdb7 1235 *
vcoubard 1183:1589830dbdb7 1236 * @note Once the scanning parameters have been configured, scanning can be
vcoubard 1183:1589830dbdb7 1237 * enabled by using startScan().
vcoubard 1131:692ddf04fc42 1238 */
vcoubard 1131:692ddf04fc42 1239 ble_error_t setScanInterval(uint16_t interval) {
vcoubard 1131:692ddf04fc42 1240 return _scanningParams.setInterval(interval);
vcoubard 1131:692ddf04fc42 1241 }
vcoubard 1131:692ddf04fc42 1242
vcoubard 1131:692ddf04fc42 1243 /**
vcoubard 1131:692ddf04fc42 1244 * Set up the scanWindow parameter for GAP scanning (observer mode).
vcoubard 1183:1589830dbdb7 1245 *
vcoubard 1131:692ddf04fc42 1246 * @param[in] window
vcoubard 1131:692ddf04fc42 1247 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s].
vcoubard 1131:692ddf04fc42 1248 *
vcoubard 1183:1589830dbdb7 1249 * @return BLE_ERROR_NONE if the scan window was correctly set.
vcoubard 1131:692ddf04fc42 1250 *
vcoubard 1183:1589830dbdb7 1251 * @note The scanning window divided by the interval determines the duty cycle for
vcoubard 1183:1589830dbdb7 1252 * scanning. For example, if the interval is 100ms and the window is 10ms,
vcoubard 1183:1589830dbdb7 1253 * then the controller will scan for 10 percent of the time. It is possible
vcoubard 1183:1589830dbdb7 1254 * to have the interval and window set to the same value. In this case,
vcoubard 1183:1589830dbdb7 1255 * scanning is continuous, with a change of scanning frequency once every
vcoubard 1183:1589830dbdb7 1256 * interval.
vcoubard 1131:692ddf04fc42 1257 *
vcoubard 1183:1589830dbdb7 1258 * @note Once the scanning parameters have been configured, scanning can be
vcoubard 1183:1589830dbdb7 1259 * enabled by using startScan().
vcoubard 1183:1589830dbdb7 1260 *
vcoubard 1183:1589830dbdb7 1261 * @note If scanning is already active, the updated value of scanWindow will be
vcoubard 1183:1589830dbdb7 1262 * propagated to the underlying BLE stack.
vcoubard 1131:692ddf04fc42 1263 */
vcoubard 1131:692ddf04fc42 1264 ble_error_t setScanWindow(uint16_t window) {
vcoubard 1131:692ddf04fc42 1265 ble_error_t rc;
vcoubard 1131:692ddf04fc42 1266 if ((rc = _scanningParams.setWindow(window)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1267 return rc;
vcoubard 1131:692ddf04fc42 1268 }
vcoubard 1131:692ddf04fc42 1269
vcoubard 1131:692ddf04fc42 1270 /* If scanning is already active, propagate the new setting to the stack. */
vcoubard 1131:692ddf04fc42 1271 if (scanningActive) {
vcoubard 1131:692ddf04fc42 1272 return startRadioScan(_scanningParams);
vcoubard 1131:692ddf04fc42 1273 }
vcoubard 1131:692ddf04fc42 1274
vcoubard 1131:692ddf04fc42 1275 return BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1276 }
vcoubard 1131:692ddf04fc42 1277
vcoubard 1131:692ddf04fc42 1278 /**
vcoubard 1131:692ddf04fc42 1279 * Set up parameters for GAP scanning (observer mode).
vcoubard 1183:1589830dbdb7 1280 *
vcoubard 1131:692ddf04fc42 1281 * @param[in] timeout
vcoubard 1131:692ddf04fc42 1282 * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables the timeout.
vcoubard 1131:692ddf04fc42 1283 *
vcoubard 1183:1589830dbdb7 1284 * @return BLE_ERROR_NONE if the scan timeout was correctly set.
vcoubard 1131:692ddf04fc42 1285 *
vcoubard 1183:1589830dbdb7 1286 * @note Once the scanning parameters have been configured, scanning can be
vcoubard 1183:1589830dbdb7 1287 * enabled by using startScan().
vcoubard 1183:1589830dbdb7 1288 *
vcoubard 1183:1589830dbdb7 1289 * @note If scanning is already active, the updated value of scanTimeout will be
vcoubard 1183:1589830dbdb7 1290 * propagated to the underlying BLE stack.
vcoubard 1131:692ddf04fc42 1291 */
vcoubard 1131:692ddf04fc42 1292 ble_error_t setScanTimeout(uint16_t timeout) {
vcoubard 1131:692ddf04fc42 1293 ble_error_t rc;
vcoubard 1131:692ddf04fc42 1294 if ((rc = _scanningParams.setTimeout(timeout)) != BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1295 return rc;
vcoubard 1131:692ddf04fc42 1296 }
vcoubard 1131:692ddf04fc42 1297
vcoubard 1131:692ddf04fc42 1298 /* If scanning is already active, propagate the new settings to the stack. */
vcoubard 1131:692ddf04fc42 1299 if (scanningActive) {
vcoubard 1131:692ddf04fc42 1300 return startRadioScan(_scanningParams);
vcoubard 1131:692ddf04fc42 1301 }
vcoubard 1131:692ddf04fc42 1302
vcoubard 1131:692ddf04fc42 1303 return BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1304 }
vcoubard 1131:692ddf04fc42 1305
vcoubard 1131:692ddf04fc42 1306 /**
vcoubard 1183:1589830dbdb7 1307 * Modify the active scanning parameter for GAP scanning (observer mode).
vcoubard 1183:1589830dbdb7 1308 * This is used to fetch the scan response from a peer if possible.
vcoubard 1183:1589830dbdb7 1309 *
vcoubard 1131:692ddf04fc42 1310 * @param[in] activeScanning
vcoubard 1183:1589830dbdb7 1311 * Set to True if active-scanning is required.
vcoubard 1131:692ddf04fc42 1312 *
vcoubard 1183:1589830dbdb7 1313 * @return BLE_ERROR_NONE if active scanning was successfully set.
vcoubard 1131:692ddf04fc42 1314 *
vcoubard 1183:1589830dbdb7 1315 * @note Once the scanning parameters have been configured, scanning can be
vcoubard 1183:1589830dbdb7 1316 * enabled by using startScan().
vcoubard 1183:1589830dbdb7 1317 *
vcoubard 1183:1589830dbdb7 1318 * @note If scanning is already in progress, then active-scanning will be enabled
vcoubard 1183:1589830dbdb7 1319 * for the underlying BLE stack.
vcoubard 1131:692ddf04fc42 1320 */
vcoubard 1131:692ddf04fc42 1321 ble_error_t setActiveScanning(bool activeScanning) {
vcoubard 1131:692ddf04fc42 1322 _scanningParams.setActiveScanning(activeScanning);
vcoubard 1131:692ddf04fc42 1323
vcoubard 1131:692ddf04fc42 1324 /* If scanning is already active, propagate the new settings to the stack. */
vcoubard 1131:692ddf04fc42 1325 if (scanningActive) {
vcoubard 1131:692ddf04fc42 1326 return startRadioScan(_scanningParams);
vcoubard 1131:692ddf04fc42 1327 }
vcoubard 1131:692ddf04fc42 1328
vcoubard 1131:692ddf04fc42 1329 return BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1330 }
vcoubard 1131:692ddf04fc42 1331
vcoubard 1131:692ddf04fc42 1332 /**
vcoubard 1131:692ddf04fc42 1333 * Start scanning (Observer Procedure) based on the parameters currently in
vcoubard 1131:692ddf04fc42 1334 * effect.
vcoubard 1131:692ddf04fc42 1335 *
vcoubard 1131:692ddf04fc42 1336 * @param[in] callback
vcoubard 1131:692ddf04fc42 1337 * The application-specific callback to be invoked upon
vcoubard 1131:692ddf04fc42 1338 * receiving every advertisement report. This can be passed in
vcoubard 1131:692ddf04fc42 1339 * as NULL, in which case scanning may not be enabled at all.
vcoubard 1183:1589830dbdb7 1340 *
vcoubard 1183:1589830dbdb7 1341 * @return BLE_ERROR_NONE if the device successfully started the scan
vcoubard 1183:1589830dbdb7 1342 * procedure.
vcoubard 1131:692ddf04fc42 1343 */
vcoubard 1131:692ddf04fc42 1344 ble_error_t startScan(void (*callback)(const AdvertisementCallbackParams_t *params)) {
vcoubard 1131:692ddf04fc42 1345 ble_error_t err = BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1346 if (callback) {
vcoubard 1131:692ddf04fc42 1347 if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1348 scanningActive = true;
vcoubard 1131:692ddf04fc42 1349 onAdvertisementReport.attach(callback);
vcoubard 1131:692ddf04fc42 1350 }
vcoubard 1131:692ddf04fc42 1351 }
vcoubard 1131:692ddf04fc42 1352
vcoubard 1131:692ddf04fc42 1353 return err;
vcoubard 1131:692ddf04fc42 1354 }
vcoubard 1131:692ddf04fc42 1355
vcoubard 1131:692ddf04fc42 1356 /**
vcoubard 1183:1589830dbdb7 1357 * Same as Gap::startScan(), but allows the possibility to add an object
vcoubard 1183:1589830dbdb7 1358 * reference and member function as handler for advertisement event
vcoubard 1183:1589830dbdb7 1359 * callbacks.
vcoubard 1183:1589830dbdb7 1360 *
vcoubard 1183:1589830dbdb7 1361 * @param[in] object
vcoubard 1183:1589830dbdb7 1362 * Pointer to the object of a class defining the member callback
vcoubard 1183:1589830dbdb7 1363 * function (@p callbackMember).
vcoubard 1183:1589830dbdb7 1364 * @param[in] callbackMember
vcoubard 1183:1589830dbdb7 1365 * The member callback (within the context of an object) to be
vcoubard 1183:1589830dbdb7 1366 * invoked.
vcoubard 1183:1589830dbdb7 1367 *
vcoubard 1183:1589830dbdb7 1368 * @return BLE_ERROR_NONE if the device successfully started the scan
vcoubard 1183:1589830dbdb7 1369 * procedure.
vcoubard 1131:692ddf04fc42 1370 */
vcoubard 1131:692ddf04fc42 1371 template<typename T>
vcoubard 1131:692ddf04fc42 1372 ble_error_t startScan(T *object, void (T::*callbackMember)(const AdvertisementCallbackParams_t *params)) {
vcoubard 1131:692ddf04fc42 1373 ble_error_t err = BLE_ERROR_NONE;
vcoubard 1131:692ddf04fc42 1374 if (object && callbackMember) {
vcoubard 1131:692ddf04fc42 1375 if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
vcoubard 1131:692ddf04fc42 1376 scanningActive = true;
vcoubard 1131:692ddf04fc42 1377 onAdvertisementReport.attach(object, callbackMember);
vcoubard 1131:692ddf04fc42 1378 }
vcoubard 1131:692ddf04fc42 1379 }
vcoubard 1131:692ddf04fc42 1380
vcoubard 1131:692ddf04fc42 1381 return err;
vcoubard 1131:692ddf04fc42 1382 }
vcoubard 1131:692ddf04fc42 1383
vcoubard 1131:692ddf04fc42 1384 /**
vcoubard 1131:692ddf04fc42 1385 * Initialize radio-notification events to be generated from the stack.
vcoubard 1131:692ddf04fc42 1386 * This API doesn't need to be called directly.
vcoubard 1131:692ddf04fc42 1387 *
vcoubard 1131:692ddf04fc42 1388 * Radio Notification is a feature that enables ACTIVE and INACTIVE
vcoubard 1131:692ddf04fc42 1389 * (nACTIVE) signals from the stack that notify the application when the
vcoubard 1131:692ddf04fc42 1390 * radio is in use.
vcoubard 1131:692ddf04fc42 1391 *
vcoubard 1131:692ddf04fc42 1392 * The ACTIVE signal is sent before the radio event starts. The nACTIVE
vcoubard 1131:692ddf04fc42 1393 * signal is sent at the end of the radio event. These signals can be used
vcoubard 1131:692ddf04fc42 1394 * by the application programmer to synchronize application logic with radio
vcoubard 1131:692ddf04fc42 1395 * activity. For example, the ACTIVE signal can be used to shut off external
vcoubard 1131:692ddf04fc42 1396 * devices, to manage peak current drawn during periods when the radio is on,
vcoubard 1131:692ddf04fc42 1397 * or to trigger sensor data collection for transmission in the Radio Event.
vcoubard 1131:692ddf04fc42 1398 *
vcoubard 1131:692ddf04fc42 1399 * @return BLE_ERROR_NONE on successful initialization, otherwise an error code.
vcoubard 1131:692ddf04fc42 1400 */
vcoubard 1131:692ddf04fc42 1401 virtual ble_error_t initRadioNotification(void) {
vcoubard 1131:692ddf04fc42 1402 return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
vcoubard 1131:692ddf04fc42 1403 }
vcoubard 1131:692ddf04fc42 1404
vcoubard 1131:692ddf04fc42 1405 private:
vcoubard 1183:1589830dbdb7 1406 /**
vcoubard 1183:1589830dbdb7 1407 * Functionality that is BLE stack-dependent and must be implemented by the
vcoubard 1183:1589830dbdb7 1408 * ported. This is a helper function to set the advertising data in the
vcoubard 1183:1589830dbdb7 1409 * BLE stack.
vcoubard 1183:1589830dbdb7 1410 *
vcoubard 1183:1589830dbdb7 1411 * @param[in] advData
vcoubard 1183:1589830dbdb7 1412 * The new advertising data.
vcoubard 1183:1589830dbdb7 1413 * @param[in] scanResponse
vcoubard 1183:1589830dbdb7 1414 * The new scan response data.
vcoubard 1183:1589830dbdb7 1415 *
vcoubard 1183:1589830dbdb7 1416 * @return BLE_ERROR_NONE if the advertising data was set successfully.
vcoubard 1183:1589830dbdb7 1417 */
vcoubard 1131:692ddf04fc42 1418 virtual ble_error_t setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse) = 0;
vcoubard 1183:1589830dbdb7 1419
vcoubard 1183:1589830dbdb7 1420 /**
vcoubard 1183:1589830dbdb7 1421 * Functionality that is BLE stack-dependent and must be implemented by the
vcoubard 1183:1589830dbdb7 1422 * ported. This is a helper function to start the advertising procedure in
vcoubard 1183:1589830dbdb7 1423 * the underlying BLE stack.
vcoubard 1183:1589830dbdb7 1424 *
vcoubard 1183:1589830dbdb7 1425 * @param[in]
vcoubard 1183:1589830dbdb7 1426 * The advertising parameters.
vcoubard 1183:1589830dbdb7 1427 *
vcoubard 1183:1589830dbdb7 1428 * @return BLE_ERROR_NONE if the advertising procedure was successfully
vcoubard 1183:1589830dbdb7 1429 * started.
vcoubard 1183:1589830dbdb7 1430 */
vcoubard 1131:692ddf04fc42 1431 virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
vcoubard 1131:692ddf04fc42 1432
vcoubard 1131:692ddf04fc42 1433 public:
vcoubard 1131:692ddf04fc42 1434 /**
vcoubard 1183:1589830dbdb7 1435 * Accessor to read back currently active advertising parameters.
vcoubard 1183:1589830dbdb7 1436 *
vcoubard 1183:1589830dbdb7 1437 * @return A reference to the current advertising parameters.
vcoubard 1131:692ddf04fc42 1438 */
vcoubard 1131:692ddf04fc42 1439 GapAdvertisingParams &getAdvertisingParams(void) {
vcoubard 1131:692ddf04fc42 1440 return _advParams;
vcoubard 1131:692ddf04fc42 1441 }
vcoubard 1183:1589830dbdb7 1442
vcoubard 1183:1589830dbdb7 1443 /**
vcoubard 1183:1589830dbdb7 1444 * A const alternative to Gap::getAdvertisingParams().
vcoubard 1183:1589830dbdb7 1445 *
vcoubard 1183:1589830dbdb7 1446 * @return A const reference to the current advertising parameters.
vcoubard 1183:1589830dbdb7 1447 */
vcoubard 1131:692ddf04fc42 1448 const GapAdvertisingParams &getAdvertisingParams(void) const {
vcoubard 1131:692ddf04fc42 1449 return _advParams;
vcoubard 1131:692ddf04fc42 1450 }
vcoubard 1131:692ddf04fc42 1451
vcoubard 1131:692ddf04fc42 1452 /**
vcoubard 1131:692ddf04fc42 1453 * Set up a particular, user-constructed set of advertisement parameters for
vcoubard 1131:692ddf04fc42 1454 * the underlying stack. It would be uncommon for this API to be used
vcoubard 1131:692ddf04fc42 1455 * directly; there are other APIs to tweak advertisement parameters
vcoubard 1131:692ddf04fc42 1456 * individually.
vcoubard 1183:1589830dbdb7 1457 *
vcoubard 1183:1589830dbdb7 1458 * @param[in] newParams
vcoubard 1183:1589830dbdb7 1459 * The new advertising parameters.
vcoubard 1131:692ddf04fc42 1460 */
vcoubard 1131:692ddf04fc42 1461 void setAdvertisingParams(const GapAdvertisingParams &newParams) {
vcoubard 1131:692ddf04fc42 1462 _advParams = newParams;
vcoubard 1131:692ddf04fc42 1463 }
vcoubard 1131:692ddf04fc42 1464
vcoubard 1131:692ddf04fc42 1465 /* Event callback handlers. */
vcoubard 1131:692ddf04fc42 1466 public:
vcoubard 1131:692ddf04fc42 1467 /**
vcoubard 1131:692ddf04fc42 1468 * Set up a callback for timeout events. Refer to TimeoutSource_t for
vcoubard 1131:692ddf04fc42 1469 * possible event types.
vcoubard 1183:1589830dbdb7 1470 *
vcoubard 1183:1589830dbdb7 1471 * @param[in] callback
vcoubard 1183:1589830dbdb7 1472 * Event handler being registered.
vcoubard 1183:1589830dbdb7 1473 *
vcoubard 1183:1589830dbdb7 1474 * @note It is possible to unregister callbacks using onTimeout().detach(callback).
vcoubard 1131:692ddf04fc42 1475 */
vcoubard 1131:692ddf04fc42 1476 void onTimeout(TimeoutEventCallback_t callback) {
vcoubard 1131:692ddf04fc42 1477 timeoutCallbackChain.add(callback);
vcoubard 1131:692ddf04fc42 1478 }
vcoubard 1131:692ddf04fc42 1479
vcoubard 1131:692ddf04fc42 1480 /**
vcoubard 1183:1589830dbdb7 1481 * @brief Provide access to the callchain of timeout event callbacks.
vcoubard 1183:1589830dbdb7 1482 *
vcoubard 1183:1589830dbdb7 1483 * @note It is possible to register callbacks using onTimeout().add(callback).
vcoubard 1183:1589830dbdb7 1484 *
vcoubard 1183:1589830dbdb7 1485 * @note It is possible to unregister callbacks using onTimeout().detach(callback).
vcoubard 1183:1589830dbdb7 1486 *
vcoubard 1183:1589830dbdb7 1487 * @return A reference to the timeout event callbacks chain.
vcoubard 1131:692ddf04fc42 1488 */
vcoubard 1131:692ddf04fc42 1489 TimeoutEventCallbackChain_t& onTimeout() {
vcoubard 1131:692ddf04fc42 1490 return timeoutCallbackChain;
vcoubard 1131:692ddf04fc42 1491 }
vcoubard 1131:692ddf04fc42 1492
vcoubard 1131:692ddf04fc42 1493 /**
vcoubard 1131:692ddf04fc42 1494 * Append to a chain of callbacks to be invoked upon GAP connection.
vcoubard 1183:1589830dbdb7 1495 *
vcoubard 1183:1589830dbdb7 1496 * @param[in] callback
vcoubard 1183:1589830dbdb7 1497 * Event handler being registered.
vcoubard 1183:1589830dbdb7 1498 *
vcoubard 1131:692ddf04fc42 1499 * @note It is possible to unregister callbacks using onConnection().detach(callback)
vcoubard 1131:692ddf04fc42 1500 */
vcoubard 1183:1589830dbdb7 1501 void onConnection(ConnectionEventCallback_t callback) {
vcoubard 1183:1589830dbdb7 1502 connectionCallChain.add(callback);
vcoubard 1183:1589830dbdb7 1503 }
vcoubard 1131:692ddf04fc42 1504
vcoubard 1131:692ddf04fc42 1505 /**
vcoubard 1183:1589830dbdb7 1506 * Same as Gap::onConnection(), but allows the possibility to add an object
vcoubard 1183:1589830dbdb7 1507 * reference and member function as handler for connection event
vcoubard 1183:1589830dbdb7 1508 * callbacks.
vcoubard 1183:1589830dbdb7 1509 *
vcoubard 1183:1589830dbdb7 1510 * @param[in] tptr
vcoubard 1183:1589830dbdb7 1511 * Pointer to the object of a class defining the member callback
vcoubard 1183:1589830dbdb7 1512 * function (@p mptr).
vcoubard 1183:1589830dbdb7 1513 * @param[in] mptr
vcoubard 1183:1589830dbdb7 1514 * The member callback (within the context of an object) to be
vcoubard 1183:1589830dbdb7 1515 * invoked.
vcoubard 1183:1589830dbdb7 1516 */
vcoubard 1183:1589830dbdb7 1517 template<typename T>
vcoubard 1183:1589830dbdb7 1518 void onConnection(T *tptr, void (T::*mptr)(const ConnectionCallbackParams_t*)) {
vcoubard 1183:1589830dbdb7 1519 connectionCallChain.add(tptr, mptr);
vcoubard 1183:1589830dbdb7 1520 }
vcoubard 1183:1589830dbdb7 1521
vcoubard 1183:1589830dbdb7 1522 /**
vcoubard 1183:1589830dbdb7 1523 * @brief Provide access to the callchain of connection event callbacks.
vcoubard 1183:1589830dbdb7 1524 *
vcoubard 1183:1589830dbdb7 1525 * @return A reference to the connection event callbacks chain.
vcoubard 1183:1589830dbdb7 1526 *
vcoubard 1183:1589830dbdb7 1527 * @note It is possible to register callbacks using onConnection().add(callback).
vcoubard 1183:1589830dbdb7 1528 *
vcoubard 1183:1589830dbdb7 1529 * @note It is possible to unregister callbacks using onConnection().detach(callback).
vcoubard 1131:692ddf04fc42 1530 */
vcoubard 1132:6362b7c2fdff 1531 ConnectionEventCallbackChain_t& onConnection() {
vcoubard 1131:692ddf04fc42 1532 return connectionCallChain;
vcoubard 1131:692ddf04fc42 1533 }
vcoubard 1131:692ddf04fc42 1534
vcoubard 1131:692ddf04fc42 1535 /**
vcoubard 1131:692ddf04fc42 1536 * Append to a chain of callbacks to be invoked upon GAP disconnection.
vcoubard 1183:1589830dbdb7 1537 *
vcoubard 1183:1589830dbdb7 1538 * @param[in] callback
vcoubard 1183:1589830dbdb7 1539 Event handler being registered.
vcoubard 1183:1589830dbdb7 1540 *
vcoubard 1183:1589830dbdb7 1541 * @note It is possible to unregister callbacks using onDisconnection().detach(callback).
vcoubard 1131:692ddf04fc42 1542 */
vcoubard 1183:1589830dbdb7 1543 void onDisconnection(DisconnectionEventCallback_t callback) {
vcoubard 1183:1589830dbdb7 1544 disconnectionCallChain.add(callback);
vcoubard 1183:1589830dbdb7 1545 }
vcoubard 1131:692ddf04fc42 1546
vcoubard 1131:692ddf04fc42 1547 /**
vcoubard 1183:1589830dbdb7 1548 * Same as Gap::onDisconnection(), but allows the possibility to add an object
vcoubard 1183:1589830dbdb7 1549 * reference and member function as handler for disconnection event
vcoubard 1183:1589830dbdb7 1550 * callbacks.
vcoubard 1183:1589830dbdb7 1551 *
vcoubard 1183:1589830dbdb7 1552 * @param[in] tptr
vcoubard 1183:1589830dbdb7 1553 * Pointer to the object of a class defining the member callback
vcoubard 1183:1589830dbdb7 1554 * function (@p mptr).
vcoubard 1183:1589830dbdb7 1555 * @param[in] mptr
vcoubard 1183:1589830dbdb7 1556 * The member callback (within the context of an object) to be
vcoubard 1183:1589830dbdb7 1557 * invoked.
vcoubard 1183:1589830dbdb7 1558 */
vcoubard 1183:1589830dbdb7 1559 template<typename T>
vcoubard 1183:1589830dbdb7 1560 void onDisconnection(T *tptr, void (T::*mptr)(const DisconnectionCallbackParams_t*)) {
vcoubard 1183:1589830dbdb7 1561 disconnectionCallChain.add(tptr, mptr);
vcoubard 1183:1589830dbdb7 1562 }
vcoubard 1183:1589830dbdb7 1563
vcoubard 1183:1589830dbdb7 1564 /**
vcoubard 1183:1589830dbdb7 1565 * @brief Provide access to the callchain of disconnection event callbacks.
vcoubard 1183:1589830dbdb7 1566 *
vcoubard 1183:1589830dbdb7 1567 * @return A reference to the disconnection event callback chain.
vcoubard 1183:1589830dbdb7 1568 *
vcoubard 1183:1589830dbdb7 1569 * @note It is possible to register callbacks using onDisconnection().add(callback).
vcoubard 1183:1589830dbdb7 1570 *
vcoubard 1183:1589830dbdb7 1571 * @note It is possible to unregister callbacks using onDisconnection().detach(callback).
vcoubard 1131:692ddf04fc42 1572 */
vcoubard 1131:692ddf04fc42 1573 DisconnectionEventCallbackChain_t& onDisconnection() {
vcoubard 1131:692ddf04fc42 1574 return disconnectionCallChain;
vcoubard 1131:692ddf04fc42 1575 }
vcoubard 1131:692ddf04fc42 1576
vcoubard 1131:692ddf04fc42 1577 /**
vcoubard 1131:692ddf04fc42 1578 * Set the application callback for radio-notification events.
vcoubard 1131:692ddf04fc42 1579 *
vcoubard 1131:692ddf04fc42 1580 * Radio Notification is a feature that enables ACTIVE and INACTIVE
vcoubard 1131:692ddf04fc42 1581 * (nACTIVE) signals from the stack that notify the application when the
vcoubard 1131:692ddf04fc42 1582 * radio is in use.
vcoubard 1131:692ddf04fc42 1583 *
vcoubard 1131:692ddf04fc42 1584 * The ACTIVE signal is sent before the radio event starts. The nACTIVE
vcoubard 1131:692ddf04fc42 1585 * signal is sent at the end of the radio event. These signals can be used
vcoubard 1131:692ddf04fc42 1586 * by the application programmer to synchronize application logic with radio
vcoubard 1131:692ddf04fc42 1587 * activity. For example, the ACTIVE signal can be used to shut off external
vcoubard 1131:692ddf04fc42 1588 * devices, to manage peak current drawn during periods when the radio is on,
vcoubard 1131:692ddf04fc42 1589 * or to trigger sensor data collection for transmission in the Radio Event.
vcoubard 1131:692ddf04fc42 1590 *
vcoubard 1183:1589830dbdb7 1591 * @param[in] callback
vcoubard 1183:1589830dbdb7 1592 * The application handler to be invoked in response to a radio
vcoubard 1183:1589830dbdb7 1593 * ACTIVE/INACTIVE event.
vcoubard 1131:692ddf04fc42 1594 */
vcoubard 1131:692ddf04fc42 1595 void onRadioNotification(void (*callback)(bool param)) {
vcoubard 1131:692ddf04fc42 1596 radioNotificationCallback.attach(callback);
vcoubard 1131:692ddf04fc42 1597 }
vcoubard 1183:1589830dbdb7 1598
vcoubard 1183:1589830dbdb7 1599 /**
vcoubard 1183:1589830dbdb7 1600 * Same as Gap::onRadioNotification(), but allows the posibility to
vcoubard 1183:1589830dbdb7 1601 * register an object reference and member function as handler for radio
vcoubard 1183:1589830dbdb7 1602 * notification events.
vcoubard 1183:1589830dbdb7 1603 *
vcoubard 1183:1589830dbdb7 1604 * @param[in] tptr
vcoubard 1183:1589830dbdb7 1605 * Pointer to the object of a class defining the member callback
vcoubard 1183:1589830dbdb7 1606 * function (@p mptr).
vcoubard 1183:1589830dbdb7 1607 * @param[in] mptr
vcoubard 1183:1589830dbdb7 1608 * The member callback (within the context of an object) to be
vcoubard 1183:1589830dbdb7 1609 * invoked in response to a radio ACTIVE/INACTIVE event.
vcoubard 1183:1589830dbdb7 1610 */
vcoubard 1131:692ddf04fc42 1611 template <typename T>
vcoubard 1131:692ddf04fc42 1612 void onRadioNotification(T *tptr, void (T::*mptr)(bool)) {
vcoubard 1131:692ddf04fc42 1613 radioNotificationCallback.attach(tptr, mptr);
vcoubard 1131:692ddf04fc42 1614 }
vcoubard 1131:692ddf04fc42 1615
vcoubard 1135:22aada733dbd 1616 /**
vcoubard 1135:22aada733dbd 1617 * Setup a callback to be invoked to notify the user application that the
vcoubard 1135:22aada733dbd 1618 * Gap instance is about to shutdown (possibly as a result of a call
vcoubard 1135:22aada733dbd 1619 * to BLE::shutdown()).
vcoubard 1135:22aada733dbd 1620 *
vcoubard 1183:1589830dbdb7 1621 * @param[in] callback
vcoubard 1183:1589830dbdb7 1622 * The handler that is being registered to be notified of
vcoubard 1183:1589830dbdb7 1623 * shutdown events.
vcoubard 1183:1589830dbdb7 1624 *
vcoubard 1183:1589830dbdb7 1625 * @note It is possible to chain together multiple onShutdown callbacks
vcoubard 1135:22aada733dbd 1626 * (potentially from different modules of an application) to be notified
vcoubard 1135:22aada733dbd 1627 * before the Gap instance is shutdown.
vcoubard 1135:22aada733dbd 1628 *
vcoubard 1183:1589830dbdb7 1629 * @note It is also possible to set up a callback into a member function of
vcoubard 1135:22aada733dbd 1630 * some object.
vcoubard 1135:22aada733dbd 1631 *
vcoubard 1183:1589830dbdb7 1632 * @note It is possible to unregister a callback using onShutdown().detach(callback)
vcoubard 1135:22aada733dbd 1633 */
vcoubard 1135:22aada733dbd 1634 void onShutdown(const GapShutdownCallback_t& callback) {
vcoubard 1135:22aada733dbd 1635 shutdownCallChain.add(callback);
vcoubard 1135:22aada733dbd 1636 }
vcoubard 1183:1589830dbdb7 1637
vcoubard 1183:1589830dbdb7 1638 /**
vcoubard 1183:1589830dbdb7 1639 * Same as Gap::onShutdown(), but allows the posibility to
vcoubard 1183:1589830dbdb7 1640 * register an object reference and member function as handler for shutdown
vcoubard 1183:1589830dbdb7 1641 * events.
vcoubard 1183:1589830dbdb7 1642 *
vcoubard 1183:1589830dbdb7 1643 * @param[in] objPtr
vcoubard 1183:1589830dbdb7 1644 * Pointer to the object of a class defining the member callback
vcoubard 1183:1589830dbdb7 1645 * function (@p memberPtr).
vcoubard 1183:1589830dbdb7 1646 * @param[in] memberPtr
vcoubard 1183:1589830dbdb7 1647 * The member callback (within the context of an object) to be
vcoubard 1183:1589830dbdb7 1648 * invoked in response to a shutdown event.
vcoubard 1183:1589830dbdb7 1649 */
vcoubard 1135:22aada733dbd 1650 template <typename T>
vcoubard 1135:22aada733dbd 1651 void onShutdown(T *objPtr, void (T::*memberPtr)(void)) {
vcoubard 1135:22aada733dbd 1652 shutdownCallChain.add(objPtr, memberPtr);
vcoubard 1135:22aada733dbd 1653 }
vcoubard 1135:22aada733dbd 1654
vcoubard 1135:22aada733dbd 1655 /**
vcoubard 1183:1589830dbdb7 1656 * @brief Provide access to the callchain of shutdown event callbacks.
vcoubard 1183:1589830dbdb7 1657 *
vcoubard 1183:1589830dbdb7 1658 * @return A reference to the shutdown event callback chain.
vcoubard 1183:1589830dbdb7 1659 *
vcoubard 1183:1589830dbdb7 1660 * @note It is possible to register callbacks using onShutdown().add(callback).
vcoubard 1183:1589830dbdb7 1661 *
vcoubard 1183:1589830dbdb7 1662 * @note It is possible to unregister callbacks using onShutdown().detach(callback).
vcoubard 1135:22aada733dbd 1663 */
vcoubard 1135:22aada733dbd 1664 GapShutdownCallbackChain_t& onShutdown() {
vcoubard 1135:22aada733dbd 1665 return shutdownCallChain;
vcoubard 1135:22aada733dbd 1666 }
vcoubard 1135:22aada733dbd 1667
vcoubard 1135:22aada733dbd 1668 public:
vcoubard 1135:22aada733dbd 1669 /**
vcoubard 1135:22aada733dbd 1670 * Notify all registered onShutdown callbacks that the Gap instance is
vcoubard 1135:22aada733dbd 1671 * about to be shutdown and clear all Gap state of the
vcoubard 1135:22aada733dbd 1672 * associated object.
vcoubard 1135:22aada733dbd 1673 *
vcoubard 1135:22aada733dbd 1674 * This function is meant to be overridden in the platform-specific
vcoubard 1135:22aada733dbd 1675 * sub-class. Nevertheless, the sub-class is only expected to reset its
vcoubard 1135:22aada733dbd 1676 * state and not the data held in Gap members. This shall be achieved by a
vcoubard 1135:22aada733dbd 1677 * call to Gap::reset() from the sub-class' reset() implementation.
vcoubard 1135:22aada733dbd 1678 *
vcoubard 1135:22aada733dbd 1679 * @return BLE_ERROR_NONE on success.
vcoubard 1135:22aada733dbd 1680 *
vcoubard 1183:1589830dbdb7 1681 * @note Currently a call to reset() does not reset the advertising and
vcoubard 1135:22aada733dbd 1682 * scan parameters to default values.
vcoubard 1135:22aada733dbd 1683 */
vcoubard 1135:22aada733dbd 1684 virtual ble_error_t reset(void) {
vcoubard 1135:22aada733dbd 1685 /* Notify that the instance is about to shutdown */
vcoubard 1135:22aada733dbd 1686 shutdownCallChain.call(this);
vcoubard 1135:22aada733dbd 1687 shutdownCallChain.clear();
vcoubard 1135:22aada733dbd 1688
vcoubard 1135:22aada733dbd 1689 /* Clear Gap state */
vcoubard 1135:22aada733dbd 1690 state.advertising = 0;
vcoubard 1135:22aada733dbd 1691 state.connected = 0;
vcoubard 1180:e11b058d005e 1692 connectionCount = 0;
vcoubard 1135:22aada733dbd 1693
vcoubard 1135:22aada733dbd 1694 /* Clear scanning state */
vcoubard 1135:22aada733dbd 1695 scanningActive = false;
vcoubard 1135:22aada733dbd 1696
vcoubard 1135:22aada733dbd 1697 /* Clear advertising and scanning data */
vcoubard 1135:22aada733dbd 1698 _advPayload.clear();
vcoubard 1135:22aada733dbd 1699 _scanResponse.clear();
vcoubard 1135:22aada733dbd 1700
vcoubard 1135:22aada733dbd 1701 /* Clear callbacks */
vcoubard 1135:22aada733dbd 1702 timeoutCallbackChain.clear();
vcoubard 1135:22aada733dbd 1703 connectionCallChain.clear();
vcoubard 1135:22aada733dbd 1704 disconnectionCallChain.clear();
vcoubard 1135:22aada733dbd 1705 radioNotificationCallback = NULL;
vcoubard 1135:22aada733dbd 1706 onAdvertisementReport = NULL;
vcoubard 1135:22aada733dbd 1707
vcoubard 1135:22aada733dbd 1708 return BLE_ERROR_NONE;
vcoubard 1135:22aada733dbd 1709 }
vcoubard 1135:22aada733dbd 1710
vcoubard 1131:692ddf04fc42 1711 protected:
vcoubard 1183:1589830dbdb7 1712 /**
vcoubard 1183:1589830dbdb7 1713 * Construct a Gap instance.
vcoubard 1183:1589830dbdb7 1714 */
vcoubard 1131:692ddf04fc42 1715 Gap() :
vcoubard 1131:692ddf04fc42 1716 _advParams(),
vcoubard 1131:692ddf04fc42 1717 _advPayload(),
vcoubard 1131:692ddf04fc42 1718 _scanningParams(),
vcoubard 1131:692ddf04fc42 1719 _scanResponse(),
vcoubard 1180:e11b058d005e 1720 connectionCount(0),
vcoubard 1131:692ddf04fc42 1721 state(),
vcoubard 1131:692ddf04fc42 1722 scanningActive(false),
vcoubard 1131:692ddf04fc42 1723 timeoutCallbackChain(),
vcoubard 1131:692ddf04fc42 1724 radioNotificationCallback(),
vcoubard 1131:692ddf04fc42 1725 onAdvertisementReport(),
vcoubard 1131:692ddf04fc42 1726 connectionCallChain(),
vcoubard 1131:692ddf04fc42 1727 disconnectionCallChain() {
vcoubard 1131:692ddf04fc42 1728 _advPayload.clear();
vcoubard 1131:692ddf04fc42 1729 _scanResponse.clear();
vcoubard 1131:692ddf04fc42 1730 }
vcoubard 1131:692ddf04fc42 1731
vcoubard 1131:692ddf04fc42 1732 /* Entry points for the underlying stack to report events back to the user. */
vcoubard 1131:692ddf04fc42 1733 public:
vcoubard 1183:1589830dbdb7 1734 /**
vcoubard 1183:1589830dbdb7 1735 * Helper function that notifies all registered handlers of an occurrence
vcoubard 1183:1589830dbdb7 1736 * of a connection event. This function is meant to be called from the
vcoubard 1183:1589830dbdb7 1737 * BLE stack specific implementation when a connection event occurs.
vcoubard 1183:1589830dbdb7 1738 *
vcoubard 1183:1589830dbdb7 1739 * @param[in] handle
vcoubard 1183:1589830dbdb7 1740 * The ID of the connection that generated the event.
vcoubard 1183:1589830dbdb7 1741 * @param[in] role
vcoubard 1183:1589830dbdb7 1742 * The role of this BLE device in the connection.
vcoubard 1183:1589830dbdb7 1743 * @param[in] peerAddrType
vcoubard 1183:1589830dbdb7 1744 * The peer's BLE address type.
vcoubard 1183:1589830dbdb7 1745 * @param[in] peerAddr
vcoubard 1183:1589830dbdb7 1746 * The peer's BLE address.
vcoubard 1183:1589830dbdb7 1747 * @param[in] ownAddrType
vcoubard 1183:1589830dbdb7 1748 * This device's BLE address type.
vcoubard 1183:1589830dbdb7 1749 * @param[in] ownAddr
vcoubard 1183:1589830dbdb7 1750 * This device's BLE address.
vcoubard 1183:1589830dbdb7 1751 * @param[in] connectionParams
vcoubard 1183:1589830dbdb7 1752 * The parameters configured for this connection.
vcoubard 1183:1589830dbdb7 1753 */
vcoubard 1135:22aada733dbd 1754 void processConnectionEvent(Handle_t handle,
vcoubard 1135:22aada733dbd 1755 Role_t role,
vcoubard 1135:22aada733dbd 1756 BLEProtocol::AddressType_t peerAddrType,
vcoubard 1135:22aada733dbd 1757 const BLEProtocol::AddressBytes_t peerAddr,
vcoubard 1135:22aada733dbd 1758 BLEProtocol::AddressType_t ownAddrType,
vcoubard 1135:22aada733dbd 1759 const BLEProtocol::AddressBytes_t ownAddr,
vcoubard 1135:22aada733dbd 1760 const ConnectionParams_t *connectionParams) {
vcoubard 1180:e11b058d005e 1761 /* Update Gap state */
vcoubard 1180:e11b058d005e 1762 state.advertising = 0;
vcoubard 1180:e11b058d005e 1763 state.connected = 1;
vcoubard 1180:e11b058d005e 1764 ++connectionCount;
vcoubard 1180:e11b058d005e 1765
vcoubard 1131:692ddf04fc42 1766 ConnectionCallbackParams_t callbackParams(handle, role, peerAddrType, peerAddr, ownAddrType, ownAddr, connectionParams);
vcoubard 1131:692ddf04fc42 1767 connectionCallChain.call(&callbackParams);
vcoubard 1131:692ddf04fc42 1768 }
vcoubard 1131:692ddf04fc42 1769
vcoubard 1183:1589830dbdb7 1770 /**
vcoubard 1183:1589830dbdb7 1771 * Helper function that notifies all registered handlers of an occurrence
vcoubard 1183:1589830dbdb7 1772 * of a disconnection event. This function is meant to be called from the
vcoubard 1183:1589830dbdb7 1773 * BLE stack specific implementation when a disconnection event occurs.
vcoubard 1183:1589830dbdb7 1774 *
vcoubard 1183:1589830dbdb7 1775 * @param[in] handle
vcoubard 1183:1589830dbdb7 1776 * The ID of the connection that generated the event.
vcoubard 1183:1589830dbdb7 1777 * @param[in] reason
vcoubard 1183:1589830dbdb7 1778 * The reason for disconnection.
vcoubard 1183:1589830dbdb7 1779 */
vcoubard 1131:692ddf04fc42 1780 void processDisconnectionEvent(Handle_t handle, DisconnectionReason_t reason) {
vcoubard 1180:e11b058d005e 1781 /* Update Gap state */
vcoubard 1180:e11b058d005e 1782 --connectionCount;
vcoubard 1180:e11b058d005e 1783 if (!connectionCount) {
vcoubard 1180:e11b058d005e 1784 state.connected = 0;
vcoubard 1180:e11b058d005e 1785 }
vcoubard 1180:e11b058d005e 1786
vcoubard 1131:692ddf04fc42 1787 DisconnectionCallbackParams_t callbackParams(handle, reason);
vcoubard 1131:692ddf04fc42 1788 disconnectionCallChain.call(&callbackParams);
vcoubard 1131:692ddf04fc42 1789 }
vcoubard 1131:692ddf04fc42 1790
vcoubard 1183:1589830dbdb7 1791 /**
vcoubard 1183:1589830dbdb7 1792 * Helper function that notifies the registered handler of a scanned
vcoubard 1183:1589830dbdb7 1793 * advertisement packet. This function is meant to be called from the
vcoubard 1183:1589830dbdb7 1794 * BLE stack specific implementation when a such event occurs.
vcoubard 1183:1589830dbdb7 1795 *
vcoubard 1183:1589830dbdb7 1796 * @param[in] peerAddr
vcoubard 1183:1589830dbdb7 1797 * The peer's BLE address.
vcoubard 1183:1589830dbdb7 1798 * @param[in] rssi
vcoubard 1183:1589830dbdb7 1799 * The advertisement packet RSSI value.
vcoubard 1183:1589830dbdb7 1800 * @param[in] isScanReponse
vcoubard 1183:1589830dbdb7 1801 * Whether this packet is the response to a scan request.
vcoubard 1183:1589830dbdb7 1802 * @param[in] type
vcoubard 1183:1589830dbdb7 1803 * The type of advertisement.
vcoubard 1183:1589830dbdb7 1804 * @param[in] advertisingDataLen
vcoubard 1183:1589830dbdb7 1805 * Length of the advertisement data.
vcoubard 1183:1589830dbdb7 1806 * @param[in] advertisingData
vcoubard 1183:1589830dbdb7 1807 * Pointer to the advertisement packet's data.
vcoubard 1183:1589830dbdb7 1808 */
vcoubard 1135:22aada733dbd 1809 void processAdvertisementReport(const BLEProtocol::AddressBytes_t peerAddr,
vcoubard 1135:22aada733dbd 1810 int8_t rssi,
vcoubard 1135:22aada733dbd 1811 bool isScanResponse,
vcoubard 1131:692ddf04fc42 1812 GapAdvertisingParams::AdvertisingType_t type,
vcoubard 1135:22aada733dbd 1813 uint8_t advertisingDataLen,
vcoubard 1135:22aada733dbd 1814 const uint8_t *advertisingData) {
vcoubard 1131:692ddf04fc42 1815 AdvertisementCallbackParams_t params;
vcoubard 1131:692ddf04fc42 1816 memcpy(params.peerAddr, peerAddr, ADDR_LEN);
vcoubard 1131:692ddf04fc42 1817 params.rssi = rssi;
vcoubard 1131:692ddf04fc42 1818 params.isScanResponse = isScanResponse;
vcoubard 1131:692ddf04fc42 1819 params.type = type;
vcoubard 1131:692ddf04fc42 1820 params.advertisingDataLen = advertisingDataLen;
vcoubard 1131:692ddf04fc42 1821 params.advertisingData = advertisingData;
vcoubard 1131:692ddf04fc42 1822 onAdvertisementReport.call(&params);
vcoubard 1131:692ddf04fc42 1823 }
vcoubard 1131:692ddf04fc42 1824
vcoubard 1183:1589830dbdb7 1825 /**
vcoubard 1183:1589830dbdb7 1826 * Helper function that notifies all registered handlers of an occurrence
vcoubard 1183:1589830dbdb7 1827 * of a timeout event. This function is meant to be called from the
vcoubard 1183:1589830dbdb7 1828 * BLE stack specific implementation when a timeout event occurs.
vcoubard 1183:1589830dbdb7 1829 *
vcoubard 1183:1589830dbdb7 1830 * @param[in] source
vcoubard 1183:1589830dbdb7 1831 * The source of the timout event.
vcoubard 1183:1589830dbdb7 1832 */
vcoubard 1131:692ddf04fc42 1833 void processTimeoutEvent(TimeoutSource_t source) {
vcoubard 1179:4ab722f8dca0 1834 if (source == TIMEOUT_SRC_ADVERTISING) {
vcoubard 1179:4ab722f8dca0 1835 /* Update gap state if the source is an advertising timeout */
vcoubard 1179:4ab722f8dca0 1836 state.advertising = 0;
vcoubard 1179:4ab722f8dca0 1837 }
vcoubard 1131:692ddf04fc42 1838 if (timeoutCallbackChain) {
vcoubard 1131:692ddf04fc42 1839 timeoutCallbackChain(source);
vcoubard 1131:692ddf04fc42 1840 }
vcoubard 1131:692ddf04fc42 1841 }
vcoubard 1131:692ddf04fc42 1842
vcoubard 1131:692ddf04fc42 1843 protected:
vcoubard 1183:1589830dbdb7 1844 /**
vcoubard 1183:1589830dbdb7 1845 * Currently set advertising parameters.
vcoubard 1183:1589830dbdb7 1846 */
vcoubard 1131:692ddf04fc42 1847 GapAdvertisingParams _advParams;
vcoubard 1183:1589830dbdb7 1848 /**
vcoubard 1183:1589830dbdb7 1849 * Currently set advertising data.
vcoubard 1183:1589830dbdb7 1850 */
vcoubard 1131:692ddf04fc42 1851 GapAdvertisingData _advPayload;
vcoubard 1183:1589830dbdb7 1852 /**
vcoubard 1183:1589830dbdb7 1853 * Currently set scanning parameters.
vcoubard 1183:1589830dbdb7 1854 */
vcoubard 1131:692ddf04fc42 1855 GapScanningParams _scanningParams;
vcoubard 1183:1589830dbdb7 1856 /**
vcoubard 1183:1589830dbdb7 1857 * Currently set scan response data.
vcoubard 1183:1589830dbdb7 1858 */
vcoubard 1131:692ddf04fc42 1859 GapAdvertisingData _scanResponse;
vcoubard 1131:692ddf04fc42 1860
vcoubard 1180:e11b058d005e 1861 /**
vcoubard 1180:e11b058d005e 1862 * Total number of open connections.
vcoubard 1180:e11b058d005e 1863 */
vcoubard 1180:e11b058d005e 1864 uint8_t connectionCount;
vcoubard 1183:1589830dbdb7 1865 /**
vcoubard 1183:1589830dbdb7 1866 * The current GAP state.
vcoubard 1183:1589830dbdb7 1867 */
vcoubard 1131:692ddf04fc42 1868 GapState_t state;
vcoubard 1183:1589830dbdb7 1869 /**
vcoubard 1183:1589830dbdb7 1870 * Whether active scanning is set. This is used to fetch the scan response
vcoubard 1183:1589830dbdb7 1871 * from a peer if possible.
vcoubard 1183:1589830dbdb7 1872 */
vcoubard 1131:692ddf04fc42 1873 bool scanningActive;
vcoubard 1131:692ddf04fc42 1874
vcoubard 1131:692ddf04fc42 1875 protected:
vcoubard 1183:1589830dbdb7 1876 /**
vcoubard 1183:1589830dbdb7 1877 * Callchain containing all registered callback handlers for timeout
vcoubard 1183:1589830dbdb7 1878 * events.
vcoubard 1183:1589830dbdb7 1879 */
vcoubard 1131:692ddf04fc42 1880 TimeoutEventCallbackChain_t timeoutCallbackChain;
vcoubard 1183:1589830dbdb7 1881 /**
vcoubard 1183:1589830dbdb7 1882 * The registered callback handler for radio notification events.
vcoubard 1183:1589830dbdb7 1883 */
vcoubard 1131:692ddf04fc42 1884 RadioNotificationEventCallback_t radioNotificationCallback;
vcoubard 1183:1589830dbdb7 1885 /**
vcoubard 1183:1589830dbdb7 1886 * The registered callback handler for scanned advertisement packet
vcoubard 1183:1589830dbdb7 1887 * notifications.
vcoubard 1183:1589830dbdb7 1888 */
vcoubard 1131:692ddf04fc42 1889 AdvertisementReportCallback_t onAdvertisementReport;
vcoubard 1183:1589830dbdb7 1890 /**
vcoubard 1183:1589830dbdb7 1891 * Callchain containing all registered callback handlers for connection
vcoubard 1183:1589830dbdb7 1892 * events.
vcoubard 1183:1589830dbdb7 1893 */
vcoubard 1131:692ddf04fc42 1894 ConnectionEventCallbackChain_t connectionCallChain;
vcoubard 1183:1589830dbdb7 1895 /**
vcoubard 1183:1589830dbdb7 1896 * Callchain containing all registered callback handlers for disconnection
vcoubard 1183:1589830dbdb7 1897 * events.
vcoubard 1183:1589830dbdb7 1898 */
vcoubard 1131:692ddf04fc42 1899 DisconnectionEventCallbackChain_t disconnectionCallChain;
vcoubard 1131:692ddf04fc42 1900
vcoubard 1131:692ddf04fc42 1901 private:
vcoubard 1183:1589830dbdb7 1902 /**
vcoubard 1183:1589830dbdb7 1903 * Callchain containing all registered callback handlers for shutdown
vcoubard 1183:1589830dbdb7 1904 * events.
vcoubard 1183:1589830dbdb7 1905 */
vcoubard 1135:22aada733dbd 1906 GapShutdownCallbackChain_t shutdownCallChain;
vcoubard 1135:22aada733dbd 1907
vcoubard 1135:22aada733dbd 1908 private:
vcoubard 1131:692ddf04fc42 1909 /* Disallow copy and assignment. */
vcoubard 1131:692ddf04fc42 1910 Gap(const Gap &);
vcoubard 1131:692ddf04fc42 1911 Gap& operator=(const Gap &);
vcoubard 1131:692ddf04fc42 1912 };
vcoubard 1131:692ddf04fc42 1913
rgrover1 710:b2e1a2660ec2 1914 #endif // ifndef __GAP_H__