Rtos API example

Committer:
marcozecchini
Date:
Sat Feb 23 12:13:36 2019 +0000
Revision:
0:9fca2b23d0ba
final commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcozecchini 0:9fca2b23d0ba 1 /* mbed Microcontroller Library
marcozecchini 0:9fca2b23d0ba 2 * Copyright (c) 2006-2013 ARM Limited
marcozecchini 0:9fca2b23d0ba 3 *
marcozecchini 0:9fca2b23d0ba 4 * Licensed under the Apache License, Version 2.0 (the "License");
marcozecchini 0:9fca2b23d0ba 5 * you may not use this file except in compliance with the License.
marcozecchini 0:9fca2b23d0ba 6 * You may obtain a copy of the License at
marcozecchini 0:9fca2b23d0ba 7 *
marcozecchini 0:9fca2b23d0ba 8 * http://www.apache.org/licenses/LICENSE-2.0
marcozecchini 0:9fca2b23d0ba 9 *
marcozecchini 0:9fca2b23d0ba 10 * Unless required by applicable law or agreed to in writing, software
marcozecchini 0:9fca2b23d0ba 11 * distributed under the License is distributed on an "AS IS" BASIS,
marcozecchini 0:9fca2b23d0ba 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
marcozecchini 0:9fca2b23d0ba 13 * See the License for the specific language governing permissions and
marcozecchini 0:9fca2b23d0ba 14 * limitations under the License.
marcozecchini 0:9fca2b23d0ba 15 */
marcozecchini 0:9fca2b23d0ba 16
marcozecchini 0:9fca2b23d0ba 17 #ifndef MBED_BLE_GAP_H__
marcozecchini 0:9fca2b23d0ba 18 #define MBED_BLE_GAP_H__
marcozecchini 0:9fca2b23d0ba 19
marcozecchini 0:9fca2b23d0ba 20 #include "BLETypes.h"
marcozecchini 0:9fca2b23d0ba 21 #include "BLEProtocol.h"
marcozecchini 0:9fca2b23d0ba 22 #include "GapAdvertisingData.h"
marcozecchini 0:9fca2b23d0ba 23 #include "GapAdvertisingParams.h"
marcozecchini 0:9fca2b23d0ba 24 #include "GapScanningParams.h"
marcozecchini 0:9fca2b23d0ba 25 #include "GapEvents.h"
marcozecchini 0:9fca2b23d0ba 26 #include "CallChainOfFunctionPointersWithContext.h"
marcozecchini 0:9fca2b23d0ba 27 #include "FunctionPointerWithContext.h"
marcozecchini 0:9fca2b23d0ba 28 #include "platform/mbed_toolchain.h"
marcozecchini 0:9fca2b23d0ba 29
marcozecchini 0:9fca2b23d0ba 30 /* Forward declarations for classes that are only used for pointers or
marcozecchini 0:9fca2b23d0ba 31 references. */
marcozecchini 0:9fca2b23d0ba 32 class GapAdvertisingParams;
marcozecchini 0:9fca2b23d0ba 33 class GapScanningParams;
marcozecchini 0:9fca2b23d0ba 34 class GapAdvertisingData;
marcozecchini 0:9fca2b23d0ba 35
marcozecchini 0:9fca2b23d0ba 36 /**
marcozecchini 0:9fca2b23d0ba 37 * @addtogroup ble
marcozecchini 0:9fca2b23d0ba 38 * @{
marcozecchini 0:9fca2b23d0ba 39 * @addtogroup gap
marcozecchini 0:9fca2b23d0ba 40 * @{
marcozecchini 0:9fca2b23d0ba 41 */
marcozecchini 0:9fca2b23d0ba 42
marcozecchini 0:9fca2b23d0ba 43 /**
marcozecchini 0:9fca2b23d0ba 44 * Define device discovery, connection and link management procedures.
marcozecchini 0:9fca2b23d0ba 45 *
marcozecchini 0:9fca2b23d0ba 46 * - Device discovery: A device can advertise nearby peers of its existence,
marcozecchini 0:9fca2b23d0ba 47 * identity and capabilities. Similarly, a device can scan its environment to
marcozecchini 0:9fca2b23d0ba 48 * find advertising peers. The information acquired during the scan helps to
marcozecchini 0:9fca2b23d0ba 49 * identify peers and understand their use. A scanner may acquire more information
marcozecchini 0:9fca2b23d0ba 50 * about an advertising peer by sending a scan request. If the peer accepts scan
marcozecchini 0:9fca2b23d0ba 51 * requests, it may reply with additional information about its state.
marcozecchini 0:9fca2b23d0ba 52 *
marcozecchini 0:9fca2b23d0ba 53 * - Connection: A bluetooth device can establish a connection to a connectable
marcozecchini 0:9fca2b23d0ba 54 * advertising peer. Once the connection is established, both devices can
marcozecchini 0:9fca2b23d0ba 55 * communicate using the GATT protocol. The GATT protocol allows connected
marcozecchini 0:9fca2b23d0ba 56 * devices to expose a set of states that the other peer can discover, read and write.
marcozecchini 0:9fca2b23d0ba 57 *
marcozecchini 0:9fca2b23d0ba 58 * - Link Management: Connected devices may drop the connection and may adjust
marcozecchini 0:9fca2b23d0ba 59 * connection parameters according to the power envelop needed for their
marcozecchini 0:9fca2b23d0ba 60 * application.
marcozecchini 0:9fca2b23d0ba 61 *
marcozecchini 0:9fca2b23d0ba 62 * @par Accessing gap
marcozecchini 0:9fca2b23d0ba 63 *
marcozecchini 0:9fca2b23d0ba 64 * Instance of a Gap class for a given BLE device should be accessed using
marcozecchini 0:9fca2b23d0ba 65 * BLE::gap(). The reference returned remains valid until the BLE instance
marcozecchini 0:9fca2b23d0ba 66 * shut down (see BLE::shutdown()).
marcozecchini 0:9fca2b23d0ba 67 *
marcozecchini 0:9fca2b23d0ba 68 * @code
marcozecchini 0:9fca2b23d0ba 69 * // assuming ble_device has been initialized
marcozecchini 0:9fca2b23d0ba 70 * BLE& ble_device;
marcozecchini 0:9fca2b23d0ba 71 *
marcozecchini 0:9fca2b23d0ba 72 * Gap& gap = ble_device.gap();
marcozecchini 0:9fca2b23d0ba 73 * @endcode
marcozecchini 0:9fca2b23d0ba 74 *
marcozecchini 0:9fca2b23d0ba 75 * @par Advertising
marcozecchini 0:9fca2b23d0ba 76 *
marcozecchini 0:9fca2b23d0ba 77 * Advertising consists of broadcasting at a regular interval a small amount of
marcozecchini 0:9fca2b23d0ba 78 * data containing valuable informations about the device. These packets may be
marcozecchini 0:9fca2b23d0ba 79 * scanned by peer devices listening on BLE advertising channels.
marcozecchini 0:9fca2b23d0ba 80 *
marcozecchini 0:9fca2b23d0ba 81 * Scanners may also request additional information from a device advertising by
marcozecchini 0:9fca2b23d0ba 82 * sending a scan request. If the broadcaster accepts scan requests, it can reply
marcozecchini 0:9fca2b23d0ba 83 * with a scan response packet containing additional information.
marcozecchini 0:9fca2b23d0ba 84 *
marcozecchini 0:9fca2b23d0ba 85 * @code
marcozecchini 0:9fca2b23d0ba 86 * // assuming gap has been initialized
marcozecchini 0:9fca2b23d0ba 87 * Gap& gap;
marcozecchini 0:9fca2b23d0ba 88 *
marcozecchini 0:9fca2b23d0ba 89 * // construct the packet to advertise
marcozecchini 0:9fca2b23d0ba 90 * GapAdvertisingData advertising_data;
marcozecchini 0:9fca2b23d0ba 91 *
marcozecchini 0:9fca2b23d0ba 92 * // Add advertiser flags
marcozecchini 0:9fca2b23d0ba 93 * advertising_data.addFlags(
marcozecchini 0:9fca2b23d0ba 94 * GapAdvertisingData::LE_GENERAL_DISCOVERABLE |
marcozecchini 0:9fca2b23d0ba 95 * GapAdvertisingData::BREDR_NOT_SUPPORTED
marcozecchini 0:9fca2b23d0ba 96 * );
marcozecchini 0:9fca2b23d0ba 97 *
marcozecchini 0:9fca2b23d0ba 98 * // Add the name of the device to the advertising data
marcozecchini 0:9fca2b23d0ba 99 * static const uint8_t device_name[] = "HRM";
marcozecchini 0:9fca2b23d0ba 100 * advertising_data.addData(
marcozecchini 0:9fca2b23d0ba 101 * GapAdvertisingData::COMPLETE_LOCAL_NAME,
marcozecchini 0:9fca2b23d0ba 102 * device_name,
marcozecchini 0:9fca2b23d0ba 103 * sizeof(device_name)
marcozecchini 0:9fca2b23d0ba 104 * );
marcozecchini 0:9fca2b23d0ba 105 *
marcozecchini 0:9fca2b23d0ba 106 * // set the advertising data in the gap instance, they will be used when
marcozecchini 0:9fca2b23d0ba 107 * // advertising starts.
marcozecchini 0:9fca2b23d0ba 108 * gap.setAdvertisingPayload(advertising_data);
marcozecchini 0:9fca2b23d0ba 109 *
marcozecchini 0:9fca2b23d0ba 110 * // Configure the advertising procedure
marcozecchini 0:9fca2b23d0ba 111 * GapAdvertisingParams advertising_params(
marcozecchini 0:9fca2b23d0ba 112 * GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED, // type of advertising
marcozecchini 0:9fca2b23d0ba 113 * GapAdvertisingParams::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000), // interval
marcozecchini 0:9fca2b23d0ba 114 * 0 // The advertising procedure will not timeout
marcozecchini 0:9fca2b23d0ba 115 * );
marcozecchini 0:9fca2b23d0ba 116 *
marcozecchini 0:9fca2b23d0ba 117 * gap.setAdvertisingParams(advertising_params);
marcozecchini 0:9fca2b23d0ba 118 *
marcozecchini 0:9fca2b23d0ba 119 * // start the advertising procedure, the device will advertise its flag and the
marcozecchini 0:9fca2b23d0ba 120 * // name "HRM". Other peers will also be allowed to connect to it.
marcozecchini 0:9fca2b23d0ba 121 * gap.startAdvertising();
marcozecchini 0:9fca2b23d0ba 122 * @endcode
marcozecchini 0:9fca2b23d0ba 123 *
marcozecchini 0:9fca2b23d0ba 124 * @par Scanning
marcozecchini 0:9fca2b23d0ba 125 *
marcozecchini 0:9fca2b23d0ba 126 * Scanning consist of listening for peer advertising packets. From a scan, a
marcozecchini 0:9fca2b23d0ba 127 * device can identify devices available in its environment.
marcozecchini 0:9fca2b23d0ba 128 *
marcozecchini 0:9fca2b23d0ba 129 * If the device scans actively, then it will send scan request to scannable
marcozecchini 0:9fca2b23d0ba 130 * advertisers and collect their scan response.
marcozecchini 0:9fca2b23d0ba 131 *
marcozecchini 0:9fca2b23d0ba 132 * @code
marcozecchini 0:9fca2b23d0ba 133 * // assuming gap has been initialized
marcozecchini 0:9fca2b23d0ba 134 * Gap& gap;
marcozecchini 0:9fca2b23d0ba 135 *
marcozecchini 0:9fca2b23d0ba 136 * // Handle advertising packet by dumping their content
marcozecchini 0:9fca2b23d0ba 137 * void handle_advertising_packet(const AdvertisementCallbackParams_t* packet)
marcozecchini 0:9fca2b23d0ba 138 * {
marcozecchini 0:9fca2b23d0ba 139 * printf("Packet received: \r\n");
marcozecchini 0:9fca2b23d0ba 140 * printf(" - peer address: %02X:%02X:%02X:%02X:%02X:%02X\r\n",
marcozecchini 0:9fca2b23d0ba 141 * packet->peerAddr[5], packet->peerAddr[4], packet->peerAddr[3],
marcozecchini 0:9fca2b23d0ba 142 * packet->peerAddr[2], packet->peerAddr[1], packet->peerAddr[0]);
marcozecchini 0:9fca2b23d0ba 143 * printf(" - rssi: %d", packet->rssi);
marcozecchini 0:9fca2b23d0ba 144 * printf(" - scan response: %s\r\n", packet->isScanresponse ? "true" : "false");
marcozecchini 0:9fca2b23d0ba 145 * printf(" - advertising type: %d\r\n", packet->type);
marcozecchini 0:9fca2b23d0ba 146 * printf(" - advertising type: %d\r\n", packet->type);
marcozecchini 0:9fca2b23d0ba 147 * printf(" - Advertising data: \r\n");
marcozecchini 0:9fca2b23d0ba 148 *
marcozecchini 0:9fca2b23d0ba 149 * // parse advertising data, it is a succession of AD structures where
marcozecchini 0:9fca2b23d0ba 150 * // the first byte is the size of the AD structure, the second byte the
marcozecchini 0:9fca2b23d0ba 151 * // type of the data and remaining bytes are the value.
marcozecchini 0:9fca2b23d0ba 152 *
marcozecchini 0:9fca2b23d0ba 153 * for (size_t i = 0; i < packet->advertisingDataLen; i += packet->advertisingData[i]) {
marcozecchini 0:9fca2b23d0ba 154 * printf(" - type: 0X%02X, data: ", packet->advertisingData[i + 1]);
marcozecchini 0:9fca2b23d0ba 155 * for (size_t j = 0; j < packet->advertisingData[i] - 2; ++j) {
marcozecchini 0:9fca2b23d0ba 156 * printf("0X%02X ", packet->advertisingData[i + 2 + j]);
marcozecchini 0:9fca2b23d0ba 157 * }
marcozecchini 0:9fca2b23d0ba 158 * printf("\r\n");
marcozecchini 0:9fca2b23d0ba 159 * }
marcozecchini 0:9fca2b23d0ba 160 * }
marcozecchini 0:9fca2b23d0ba 161 *
marcozecchini 0:9fca2b23d0ba 162 * // set the scan parameters
marcozecchini 0:9fca2b23d0ba 163 * gap.setScanParams(
marcozecchini 0:9fca2b23d0ba 164 * 100, // interval between two scan window in ms
marcozecchini 0:9fca2b23d0ba 165 * 50, // scan window: period during which the device listen for advertising packets.
marcozecchini 0:9fca2b23d0ba 166 * 0, // the scan process never ends
marcozecchini 0:9fca2b23d0ba 167 * true // the device sends scan request to scannable peers.
marcozecchini 0:9fca2b23d0ba 168 * );
marcozecchini 0:9fca2b23d0ba 169 *
marcozecchini 0:9fca2b23d0ba 170 * // start the scan procedure
marcozecchini 0:9fca2b23d0ba 171 * gap.startScan(handle_advertising_packet);
marcozecchini 0:9fca2b23d0ba 172 * @endcode
marcozecchini 0:9fca2b23d0ba 173 *
marcozecchini 0:9fca2b23d0ba 174 * @par Connection event handling
marcozecchini 0:9fca2b23d0ba 175 *
marcozecchini 0:9fca2b23d0ba 176 * A peer may connect device advertising connectable packets. The
marcozecchini 0:9fca2b23d0ba 177 * advertising procedure ends as soon as the device is connected.
marcozecchini 0:9fca2b23d0ba 178 *
marcozecchini 0:9fca2b23d0ba 179 * A device accepting a connection request from a peer is named a peripheral,
marcozecchini 0:9fca2b23d0ba 180 * and the device initiating the connection is named a central.
marcozecchini 0:9fca2b23d0ba 181 *
marcozecchini 0:9fca2b23d0ba 182 * Peripheral and central receive a connection event when the connection is
marcozecchini 0:9fca2b23d0ba 183 * effective.
marcozecchini 0:9fca2b23d0ba 184 *
marcozecchini 0:9fca2b23d0ba 185 * @code
marcozecchini 0:9fca2b23d0ba 186 * Gap& gap;
marcozecchini 0:9fca2b23d0ba 187 *
marcozecchini 0:9fca2b23d0ba 188 * // handle connection event
marcozecchini 0:9fca2b23d0ba 189 * void when_connected(const ConnectionCallbackParams_t *connection_event) {
marcozecchini 0:9fca2b23d0ba 190 * // If this callback is entered, then the connection to a peer is effective.
marcozecchini 0:9fca2b23d0ba 191 * }
marcozecchini 0:9fca2b23d0ba 192 *
marcozecchini 0:9fca2b23d0ba 193 * // register connection event handler, which will be invoked whether the device
marcozecchini 0:9fca2b23d0ba 194 * // acts as a central or a peripheral
marcozecchini 0:9fca2b23d0ba 195 * gap.onConnection(when_connected);
marcozecchini 0:9fca2b23d0ba 196 * @endcode
marcozecchini 0:9fca2b23d0ba 197 *
marcozecchini 0:9fca2b23d0ba 198 * @par Connection initiation
marcozecchini 0:9fca2b23d0ba 199 *
marcozecchini 0:9fca2b23d0ba 200 * Connection is initiated central devices.
marcozecchini 0:9fca2b23d0ba 201 *
marcozecchini 0:9fca2b23d0ba 202 * @code
marcozecchini 0:9fca2b23d0ba 203 * // assuming gap has been initialized
marcozecchini 0:9fca2b23d0ba 204 * Gap& gap;
marcozecchini 0:9fca2b23d0ba 205 *
marcozecchini 0:9fca2b23d0ba 206 * // Handle the connection event
marcozecchini 0:9fca2b23d0ba 207 * void handle_connection(const ConnectionCallbackParams_t* connection_event)
marcozecchini 0:9fca2b23d0ba 208 * {
marcozecchini 0:9fca2b23d0ba 209 * // event handling
marcozecchini 0:9fca2b23d0ba 210 * }
marcozecchini 0:9fca2b23d0ba 211 *
marcozecchini 0:9fca2b23d0ba 212 * // Handle advertising packet: connect to the first connectable device
marcozecchini 0:9fca2b23d0ba 213 * void handle_advertising_packet(const AdvertisementCallbackParams_t* packet)
marcozecchini 0:9fca2b23d0ba 214 * {
marcozecchini 0:9fca2b23d0ba 215 * if (packet->type != GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED) {
marcozecchini 0:9fca2b23d0ba 216 * return;
marcozecchini 0:9fca2b23d0ba 217 * }
marcozecchini 0:9fca2b23d0ba 218 *
marcozecchini 0:9fca2b23d0ba 219 * // register connection event handler
marcozecchini 0:9fca2b23d0ba 220 * gap.onConnection(handle_connection);
marcozecchini 0:9fca2b23d0ba 221 *
marcozecchini 0:9fca2b23d0ba 222 * Gap::ConnectionParams_t connection_parameters = {
marcozecchini 0:9fca2b23d0ba 223 * 50, // min connection interval
marcozecchini 0:9fca2b23d0ba 224 * 100, // max connection interval
marcozecchini 0:9fca2b23d0ba 225 * 0, // slave latency
marcozecchini 0:9fca2b23d0ba 226 * 600 // connection supervision timeout
marcozecchini 0:9fca2b23d0ba 227 * };
marcozecchini 0:9fca2b23d0ba 228 *
marcozecchini 0:9fca2b23d0ba 229 * // scan parameter used to find the device to connect to
marcozecchini 0:9fca2b23d0ba 230 * GapScanningParams scanning_params(
marcozecchini 0:9fca2b23d0ba 231 * 100, // interval
marcozecchini 0:9fca2b23d0ba 232 * 100, // window
marcozecchini 0:9fca2b23d0ba 233 * 0, // timeout
marcozecchini 0:9fca2b23d0ba 234 * false // active
marcozecchini 0:9fca2b23d0ba 235 * );
marcozecchini 0:9fca2b23d0ba 236 *
marcozecchini 0:9fca2b23d0ba 237 * // Initiate the connection procedure
marcozecchini 0:9fca2b23d0ba 238 * gap.connect(
marcozecchini 0:9fca2b23d0ba 239 * packet->peerAddr,
marcozecchini 0:9fca2b23d0ba 240 * BLEProtocol::RANDOM_STATIC,
marcozecchini 0:9fca2b23d0ba 241 * &connection_parameters,
marcozecchini 0:9fca2b23d0ba 242 * &scanning_params
marcozecchini 0:9fca2b23d0ba 243 * );
marcozecchini 0:9fca2b23d0ba 244 * }
marcozecchini 0:9fca2b23d0ba 245 *
marcozecchini 0:9fca2b23d0ba 246 * // set the scan parameters
marcozecchini 0:9fca2b23d0ba 247 * gap.setScanParams(
marcozecchini 0:9fca2b23d0ba 248 * 100, // interval between two scan window in ms
marcozecchini 0:9fca2b23d0ba 249 * 50, // scan window: period during which the device listen for advertising packets.
marcozecchini 0:9fca2b23d0ba 250 * 0, // the scan process never ends
marcozecchini 0:9fca2b23d0ba 251 * true // the device sends scan request to scannable peers.
marcozecchini 0:9fca2b23d0ba 252 * );
marcozecchini 0:9fca2b23d0ba 253 *
marcozecchini 0:9fca2b23d0ba 254 * // start the scan procedure
marcozecchini 0:9fca2b23d0ba 255 * gap.startScan(handle_advertising_packet);
marcozecchini 0:9fca2b23d0ba 256 * @endcode
marcozecchini 0:9fca2b23d0ba 257 *
marcozecchini 0:9fca2b23d0ba 258 * @par disconnection
marcozecchini 0:9fca2b23d0ba 259 *
marcozecchini 0:9fca2b23d0ba 260 * The application code initiates a disconnection when it calls the
marcozecchini 0:9fca2b23d0ba 261 * disconnect(Handle_t, DisconnectionReason_t) function.
marcozecchini 0:9fca2b23d0ba 262 *
marcozecchini 0:9fca2b23d0ba 263 * Disconnection may also be initiated by the remote peer or the local
marcozecchini 0:9fca2b23d0ba 264 * controller/stack. To catch all disconnection events, application code may
marcozecchini 0:9fca2b23d0ba 265 * set up an handler taking care of disconnection events by calling
marcozecchini 0:9fca2b23d0ba 266 * onDisconnection().
marcozecchini 0:9fca2b23d0ba 267 */
marcozecchini 0:9fca2b23d0ba 268 class Gap {
marcozecchini 0:9fca2b23d0ba 269 /*
marcozecchini 0:9fca2b23d0ba 270 * DEPRECATION ALERT: all of the APIs in this `public` block are deprecated.
marcozecchini 0:9fca2b23d0ba 271 * They have been relocated to the class BLEProtocol.
marcozecchini 0:9fca2b23d0ba 272 */
marcozecchini 0:9fca2b23d0ba 273 public:
marcozecchini 0:9fca2b23d0ba 274 /**
marcozecchini 0:9fca2b23d0ba 275 * Address-type for BLEProtocol addresses.
marcozecchini 0:9fca2b23d0ba 276 *
marcozecchini 0:9fca2b23d0ba 277 * @deprecated Use BLEProtocol::AddressType_t instead.
marcozecchini 0:9fca2b23d0ba 278 */
marcozecchini 0:9fca2b23d0ba 279 typedef BLEProtocol::AddressType_t AddressType_t;
marcozecchini 0:9fca2b23d0ba 280
marcozecchini 0:9fca2b23d0ba 281 /**
marcozecchini 0:9fca2b23d0ba 282 * Address-type for BLEProtocol addresses.
marcozecchini 0:9fca2b23d0ba 283 *
marcozecchini 0:9fca2b23d0ba 284 * @deprecated Use BLEProtocol::AddressType_t instead.
marcozecchini 0:9fca2b23d0ba 285 */
marcozecchini 0:9fca2b23d0ba 286 typedef BLEProtocol::AddressType_t addr_type_t;
marcozecchini 0:9fca2b23d0ba 287
marcozecchini 0:9fca2b23d0ba 288 /**
marcozecchini 0:9fca2b23d0ba 289 * Address-type for BLEProtocol addresses.
marcozecchini 0:9fca2b23d0ba 290 *
marcozecchini 0:9fca2b23d0ba 291 * @deprecated Use BLEProtocol::AddressType_t instead. The following
marcozecchini 0:9fca2b23d0ba 292 * constants have been left in their deprecated state to transparently
marcozecchini 0:9fca2b23d0ba 293 * support existing applications that may have used Gap::ADDR_TYPE_*.
marcozecchini 0:9fca2b23d0ba 294 */
marcozecchini 0:9fca2b23d0ba 295 enum DeprecatedAddressType_t {
marcozecchini 0:9fca2b23d0ba 296 ADDR_TYPE_PUBLIC = BLEProtocol::AddressType::PUBLIC,
marcozecchini 0:9fca2b23d0ba 297 ADDR_TYPE_RANDOM_STATIC = BLEProtocol::AddressType::RANDOM_STATIC,
marcozecchini 0:9fca2b23d0ba 298 ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE = BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE,
marcozecchini 0:9fca2b23d0ba 299 ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE = BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE
marcozecchini 0:9fca2b23d0ba 300 };
marcozecchini 0:9fca2b23d0ba 301
marcozecchini 0:9fca2b23d0ba 302 /**
marcozecchini 0:9fca2b23d0ba 303 * Length (in octets) of the BLE MAC address.
marcozecchini 0:9fca2b23d0ba 304 */
marcozecchini 0:9fca2b23d0ba 305 static const unsigned ADDR_LEN = BLEProtocol::ADDR_LEN;
marcozecchini 0:9fca2b23d0ba 306
marcozecchini 0:9fca2b23d0ba 307 /**
marcozecchini 0:9fca2b23d0ba 308 * 48-bit address, LSB format.
marcozecchini 0:9fca2b23d0ba 309 *
marcozecchini 0:9fca2b23d0ba 310 * @deprecated Use BLEProtocol::AddressBytes_t instead.
marcozecchini 0:9fca2b23d0ba 311 */
marcozecchini 0:9fca2b23d0ba 312 typedef BLEProtocol::AddressBytes_t Address_t;
marcozecchini 0:9fca2b23d0ba 313
marcozecchini 0:9fca2b23d0ba 314 /**
marcozecchini 0:9fca2b23d0ba 315 * 48-bit address, LSB format.
marcozecchini 0:9fca2b23d0ba 316 *
marcozecchini 0:9fca2b23d0ba 317 * @deprecated Use BLEProtocol::AddressBytes_t instead.
marcozecchini 0:9fca2b23d0ba 318 */
marcozecchini 0:9fca2b23d0ba 319 typedef BLEProtocol::AddressBytes_t address_t;
marcozecchini 0:9fca2b23d0ba 320
marcozecchini 0:9fca2b23d0ba 321 public:
marcozecchini 0:9fca2b23d0ba 322 /**
marcozecchini 0:9fca2b23d0ba 323 * Enumeration of possible timeout sources.
marcozecchini 0:9fca2b23d0ba 324 */
marcozecchini 0:9fca2b23d0ba 325 enum TimeoutSource_t {
marcozecchini 0:9fca2b23d0ba 326 /**
marcozecchini 0:9fca2b23d0ba 327 * Advertising timeout.
marcozecchini 0:9fca2b23d0ba 328 */
marcozecchini 0:9fca2b23d0ba 329 TIMEOUT_SRC_ADVERTISING = 0x00,
marcozecchini 0:9fca2b23d0ba 330
marcozecchini 0:9fca2b23d0ba 331 /**
marcozecchini 0:9fca2b23d0ba 332 * Security request timeout.
marcozecchini 0:9fca2b23d0ba 333 */
marcozecchini 0:9fca2b23d0ba 334 TIMEOUT_SRC_SECURITY_REQUEST = 0x01,
marcozecchini 0:9fca2b23d0ba 335
marcozecchini 0:9fca2b23d0ba 336 /**
marcozecchini 0:9fca2b23d0ba 337 * Scanning timeout.
marcozecchini 0:9fca2b23d0ba 338 */
marcozecchini 0:9fca2b23d0ba 339 TIMEOUT_SRC_SCAN = 0x02,
marcozecchini 0:9fca2b23d0ba 340
marcozecchini 0:9fca2b23d0ba 341 /**
marcozecchini 0:9fca2b23d0ba 342 * Connection timeout.
marcozecchini 0:9fca2b23d0ba 343 */
marcozecchini 0:9fca2b23d0ba 344 TIMEOUT_SRC_CONN = 0x03,
marcozecchini 0:9fca2b23d0ba 345 };
marcozecchini 0:9fca2b23d0ba 346
marcozecchini 0:9fca2b23d0ba 347 /**
marcozecchini 0:9fca2b23d0ba 348 * Enumeration of disconnection reasons.
marcozecchini 0:9fca2b23d0ba 349 *
marcozecchini 0:9fca2b23d0ba 350 * @important There might be a mismatch between the disconnection reason
marcozecchini 0:9fca2b23d0ba 351 * passed to disconnect() and the disconnection event generated locally
marcozecchini 0:9fca2b23d0ba 352 * because the disconnection reason passed to disconnect() is the
marcozecchini 0:9fca2b23d0ba 353 * disconnection reason to be transmitted to the peer.
marcozecchini 0:9fca2b23d0ba 354 */
marcozecchini 0:9fca2b23d0ba 355 enum DisconnectionReason_t {
marcozecchini 0:9fca2b23d0ba 356 /**
marcozecchini 0:9fca2b23d0ba 357 * The connection timed out.
marcozecchini 0:9fca2b23d0ba 358 *
marcozecchini 0:9fca2b23d0ba 359 * @important shall not be used as a reason in disconnect().
marcozecchini 0:9fca2b23d0ba 360 */
marcozecchini 0:9fca2b23d0ba 361 CONNECTION_TIMEOUT = 0x08,
marcozecchini 0:9fca2b23d0ba 362
marcozecchini 0:9fca2b23d0ba 363 /**
marcozecchini 0:9fca2b23d0ba 364 * Connection terminated by the user.
marcozecchini 0:9fca2b23d0ba 365 */
marcozecchini 0:9fca2b23d0ba 366 REMOTE_USER_TERMINATED_CONNECTION = 0x13,
marcozecchini 0:9fca2b23d0ba 367
marcozecchini 0:9fca2b23d0ba 368 /**
marcozecchini 0:9fca2b23d0ba 369 * Remote device terminated connection due to low resources.
marcozecchini 0:9fca2b23d0ba 370 */
marcozecchini 0:9fca2b23d0ba 371 REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES = 0x14,
marcozecchini 0:9fca2b23d0ba 372
marcozecchini 0:9fca2b23d0ba 373 /**
marcozecchini 0:9fca2b23d0ba 374 * Remote device terminated connection due to power off.
marcozecchini 0:9fca2b23d0ba 375 */
marcozecchini 0:9fca2b23d0ba 376 REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF = 0x15,
marcozecchini 0:9fca2b23d0ba 377
marcozecchini 0:9fca2b23d0ba 378 /**
marcozecchini 0:9fca2b23d0ba 379 * Indicate that the local user or the internal
marcozecchini 0:9fca2b23d0ba 380 * Bluetooth subsystem terminated the connection.
marcozecchini 0:9fca2b23d0ba 381 *
marcozecchini 0:9fca2b23d0ba 382 * @important shall not be used as a reason in disconnect().
marcozecchini 0:9fca2b23d0ba 383 */
marcozecchini 0:9fca2b23d0ba 384 LOCAL_HOST_TERMINATED_CONNECTION = 0x16,
marcozecchini 0:9fca2b23d0ba 385
marcozecchini 0:9fca2b23d0ba 386 /**
marcozecchini 0:9fca2b23d0ba 387 * Connection parameters were unacceptable.
marcozecchini 0:9fca2b23d0ba 388 */
marcozecchini 0:9fca2b23d0ba 389 CONN_INTERVAL_UNACCEPTABLE = 0x3B,
marcozecchini 0:9fca2b23d0ba 390 };
marcozecchini 0:9fca2b23d0ba 391
marcozecchini 0:9fca2b23d0ba 392 /**
marcozecchini 0:9fca2b23d0ba 393 * Advertising policy filter modes.
marcozecchini 0:9fca2b23d0ba 394 *
marcozecchini 0:9fca2b23d0ba 395 * @see Bluetooth Core Specification 4.2 (Vol. 6), Part B, Section 4.3.2.
marcozecchini 0:9fca2b23d0ba 396 */
marcozecchini 0:9fca2b23d0ba 397 enum AdvertisingPolicyMode_t {
marcozecchini 0:9fca2b23d0ba 398 /**
marcozecchini 0:9fca2b23d0ba 399 * The whitelist is not used to filter peer request during advertising.
marcozecchini 0:9fca2b23d0ba 400 */
marcozecchini 0:9fca2b23d0ba 401 ADV_POLICY_IGNORE_WHITELIST = 0,
marcozecchini 0:9fca2b23d0ba 402
marcozecchini 0:9fca2b23d0ba 403 /**
marcozecchini 0:9fca2b23d0ba 404 * The whitelist is used to filter peer scan requests.
marcozecchini 0:9fca2b23d0ba 405 */
marcozecchini 0:9fca2b23d0ba 406 ADV_POLICY_FILTER_SCAN_REQS = 1,
marcozecchini 0:9fca2b23d0ba 407
marcozecchini 0:9fca2b23d0ba 408 /**
marcozecchini 0:9fca2b23d0ba 409 * The whitelist is used to filter peer connection requests.
marcozecchini 0:9fca2b23d0ba 410 */
marcozecchini 0:9fca2b23d0ba 411 ADV_POLICY_FILTER_CONN_REQS = 2,
marcozecchini 0:9fca2b23d0ba 412
marcozecchini 0:9fca2b23d0ba 413 /**
marcozecchini 0:9fca2b23d0ba 414 * The whitelist is used to filter peer scan and connection requests.
marcozecchini 0:9fca2b23d0ba 415 */
marcozecchini 0:9fca2b23d0ba 416 ADV_POLICY_FILTER_ALL_REQS = 3,
marcozecchini 0:9fca2b23d0ba 417 };
marcozecchini 0:9fca2b23d0ba 418
marcozecchini 0:9fca2b23d0ba 419 /**
marcozecchini 0:9fca2b23d0ba 420 * Scanning policy filter mode.
marcozecchini 0:9fca2b23d0ba 421 *
marcozecchini 0:9fca2b23d0ba 422 * @see Bluetooth Core Specification 4.2 (Vol. 6), Part B, Section 4.3.3.
marcozecchini 0:9fca2b23d0ba 423 */
marcozecchini 0:9fca2b23d0ba 424 enum ScanningPolicyMode_t {
marcozecchini 0:9fca2b23d0ba 425 /**
marcozecchini 0:9fca2b23d0ba 426 * The whitelist is not used for scanning operations.
marcozecchini 0:9fca2b23d0ba 427 */
marcozecchini 0:9fca2b23d0ba 428 SCAN_POLICY_IGNORE_WHITELIST = 0,
marcozecchini 0:9fca2b23d0ba 429
marcozecchini 0:9fca2b23d0ba 430 /**
marcozecchini 0:9fca2b23d0ba 431 * The whitelist is used to filter incoming advertising.
marcozecchini 0:9fca2b23d0ba 432 */
marcozecchini 0:9fca2b23d0ba 433 SCAN_POLICY_FILTER_ALL_ADV = 1,
marcozecchini 0:9fca2b23d0ba 434 };
marcozecchini 0:9fca2b23d0ba 435
marcozecchini 0:9fca2b23d0ba 436 /**
marcozecchini 0:9fca2b23d0ba 437 * Connection initiation policy filter mode.
marcozecchini 0:9fca2b23d0ba 438 *
marcozecchini 0:9fca2b23d0ba 439 * @see Bluetooth Core Specification 4.2 (vol. 6), Part B, Section 4.4.4.
marcozecchini 0:9fca2b23d0ba 440 */
marcozecchini 0:9fca2b23d0ba 441 enum InitiatorPolicyMode_t {
marcozecchini 0:9fca2b23d0ba 442 /**
marcozecchini 0:9fca2b23d0ba 443 * Connection can be initiated to any device.
marcozecchini 0:9fca2b23d0ba 444 */
marcozecchini 0:9fca2b23d0ba 445 INIT_POLICY_IGNORE_WHITELIST = 0,
marcozecchini 0:9fca2b23d0ba 446
marcozecchini 0:9fca2b23d0ba 447 /**
marcozecchini 0:9fca2b23d0ba 448 * Connection initiation is restricted to the devices present in the
marcozecchini 0:9fca2b23d0ba 449 * whitelist.
marcozecchini 0:9fca2b23d0ba 450 */
marcozecchini 0:9fca2b23d0ba 451 INIT_POLICY_FILTER_ALL_ADV = 1,
marcozecchini 0:9fca2b23d0ba 452 };
marcozecchini 0:9fca2b23d0ba 453
marcozecchini 0:9fca2b23d0ba 454 /**
marcozecchini 0:9fca2b23d0ba 455 * Representation of a whitelist of addresses.
marcozecchini 0:9fca2b23d0ba 456 */
marcozecchini 0:9fca2b23d0ba 457 struct Whitelist_t {
marcozecchini 0:9fca2b23d0ba 458 /**
marcozecchini 0:9fca2b23d0ba 459 * Pointer to the array of the addresses composing the whitelist.
marcozecchini 0:9fca2b23d0ba 460 */
marcozecchini 0:9fca2b23d0ba 461 BLEProtocol::Address_t *addresses;
marcozecchini 0:9fca2b23d0ba 462
marcozecchini 0:9fca2b23d0ba 463 /**
marcozecchini 0:9fca2b23d0ba 464 * Number addresses in this whitelist.
marcozecchini 0:9fca2b23d0ba 465 */
marcozecchini 0:9fca2b23d0ba 466 uint8_t size;
marcozecchini 0:9fca2b23d0ba 467
marcozecchini 0:9fca2b23d0ba 468 /**
marcozecchini 0:9fca2b23d0ba 469 * Capacity of the array holding the addresses.
marcozecchini 0:9fca2b23d0ba 470 */
marcozecchini 0:9fca2b23d0ba 471 uint8_t capacity;
marcozecchini 0:9fca2b23d0ba 472 };
marcozecchini 0:9fca2b23d0ba 473
marcozecchini 0:9fca2b23d0ba 474 /**
marcozecchini 0:9fca2b23d0ba 475 * Description of the states of the device.
marcozecchini 0:9fca2b23d0ba 476 */
marcozecchini 0:9fca2b23d0ba 477 struct GapState_t {
marcozecchini 0:9fca2b23d0ba 478 /**
marcozecchini 0:9fca2b23d0ba 479 * If set, the device is currently advertising.
marcozecchini 0:9fca2b23d0ba 480 */
marcozecchini 0:9fca2b23d0ba 481 unsigned advertising : 1;
marcozecchini 0:9fca2b23d0ba 482
marcozecchini 0:9fca2b23d0ba 483 /**
marcozecchini 0:9fca2b23d0ba 484 * If set, the device is connected to at least one other peer.
marcozecchini 0:9fca2b23d0ba 485 */
marcozecchini 0:9fca2b23d0ba 486 unsigned connected : 1;
marcozecchini 0:9fca2b23d0ba 487 };
marcozecchini 0:9fca2b23d0ba 488
marcozecchini 0:9fca2b23d0ba 489 /**
marcozecchini 0:9fca2b23d0ba 490 * Opaque value type representing a connection handle.
marcozecchini 0:9fca2b23d0ba 491 *
marcozecchini 0:9fca2b23d0ba 492 * It is used to identify to refer to a specific connection across Gap,
marcozecchini 0:9fca2b23d0ba 493 * GattClient and GattEvent API.
marcozecchini 0:9fca2b23d0ba 494 *
marcozecchini 0:9fca2b23d0ba 495 * @note instances are generated by in the connection callback.
marcozecchini 0:9fca2b23d0ba 496 */
marcozecchini 0:9fca2b23d0ba 497 typedef ble::connection_handle_t Handle_t;
marcozecchini 0:9fca2b23d0ba 498
marcozecchini 0:9fca2b23d0ba 499 /**
marcozecchini 0:9fca2b23d0ba 500 * Parameters of a BLE connection.
marcozecchini 0:9fca2b23d0ba 501 */
marcozecchini 0:9fca2b23d0ba 502 typedef struct {
marcozecchini 0:9fca2b23d0ba 503 /**
marcozecchini 0:9fca2b23d0ba 504 * Minimum interval between two connection events allowed for a
marcozecchini 0:9fca2b23d0ba 505 * connection.
marcozecchini 0:9fca2b23d0ba 506 *
marcozecchini 0:9fca2b23d0ba 507 * It shall be less than or equal to maxConnectionInterval. This value,
marcozecchini 0:9fca2b23d0ba 508 * in units of 1.25ms, is included in the range [0x0006 : 0x0C80].
marcozecchini 0:9fca2b23d0ba 509 */
marcozecchini 0:9fca2b23d0ba 510 uint16_t minConnectionInterval;
marcozecchini 0:9fca2b23d0ba 511
marcozecchini 0:9fca2b23d0ba 512 /**
marcozecchini 0:9fca2b23d0ba 513 * Maximum interval between two connection events allowed for a
marcozecchini 0:9fca2b23d0ba 514 * connection.
marcozecchini 0:9fca2b23d0ba 515 *
marcozecchini 0:9fca2b23d0ba 516 * It shall be greater than or equal to minConnectionInterval. This
marcozecchini 0:9fca2b23d0ba 517 * value is in unit of 1.25ms and is in the range [0x0006 : 0x0C80].
marcozecchini 0:9fca2b23d0ba 518 */
marcozecchini 0:9fca2b23d0ba 519 uint16_t maxConnectionInterval;
marcozecchini 0:9fca2b23d0ba 520
marcozecchini 0:9fca2b23d0ba 521 /**
marcozecchini 0:9fca2b23d0ba 522 * Number of connection events the slave can drop if it has nothing to
marcozecchini 0:9fca2b23d0ba 523 * communicate to the master.
marcozecchini 0:9fca2b23d0ba 524 *
marcozecchini 0:9fca2b23d0ba 525 * This value shall be in the range [0x0000 : 0x01F3].
marcozecchini 0:9fca2b23d0ba 526 */
marcozecchini 0:9fca2b23d0ba 527 uint16_t slaveLatency;
marcozecchini 0:9fca2b23d0ba 528
marcozecchini 0:9fca2b23d0ba 529 /**
marcozecchini 0:9fca2b23d0ba 530 * Link supervision timeout for the connection.
marcozecchini 0:9fca2b23d0ba 531 *
marcozecchini 0:9fca2b23d0ba 532 * Time after which the connection is considered lost if the device
marcozecchini 0:9fca2b23d0ba 533 * didn't receive a packet from its peer.
marcozecchini 0:9fca2b23d0ba 534 *
marcozecchini 0:9fca2b23d0ba 535 * It is larger than:
marcozecchini 0:9fca2b23d0ba 536 * (1 + slaveLatency) * maxConnectionInterval * 2
marcozecchini 0:9fca2b23d0ba 537 *
marcozecchini 0:9fca2b23d0ba 538 * This value is in the range [0x000A : 0x0C80] and is in unit of
marcozecchini 0:9fca2b23d0ba 539 * 10 ms.
marcozecchini 0:9fca2b23d0ba 540 *
marcozecchini 0:9fca2b23d0ba 541 * @note maxConnectionInterval is in ms in the formulae above.
marcozecchini 0:9fca2b23d0ba 542 */
marcozecchini 0:9fca2b23d0ba 543 uint16_t connectionSupervisionTimeout;
marcozecchini 0:9fca2b23d0ba 544 } ConnectionParams_t;
marcozecchini 0:9fca2b23d0ba 545
marcozecchini 0:9fca2b23d0ba 546 /**
marcozecchini 0:9fca2b23d0ba 547 * Enumeration of GAP roles.
marcozecchini 0:9fca2b23d0ba 548 *
marcozecchini 0:9fca2b23d0ba 549 * @note The BLE API does not express the broadcaster and scanner roles.
marcozecchini 0:9fca2b23d0ba 550 *
marcozecchini 0:9fca2b23d0ba 551 * @important A device can fulfill different roles concurrently.
marcozecchini 0:9fca2b23d0ba 552 */
marcozecchini 0:9fca2b23d0ba 553 enum Role_t {
marcozecchini 0:9fca2b23d0ba 554 /**
marcozecchini 0:9fca2b23d0ba 555 * Peripheral Role.
marcozecchini 0:9fca2b23d0ba 556 *
marcozecchini 0:9fca2b23d0ba 557 * The device can advertise and it can be connected by a central. It
marcozecchini 0:9fca2b23d0ba 558 * acts as a slave when connected.
marcozecchini 0:9fca2b23d0ba 559 *
marcozecchini 0:9fca2b23d0ba 560 * @note A peripheral is a broadcaster.
marcozecchini 0:9fca2b23d0ba 561 */
marcozecchini 0:9fca2b23d0ba 562 PERIPHERAL = 0x1,
marcozecchini 0:9fca2b23d0ba 563
marcozecchini 0:9fca2b23d0ba 564 /**
marcozecchini 0:9fca2b23d0ba 565 * Central Role.
marcozecchini 0:9fca2b23d0ba 566 *
marcozecchini 0:9fca2b23d0ba 567 * The device can scan and initiate connection to peripherals. It
marcozecchini 0:9fca2b23d0ba 568 * acts as the master when a connection is established.
marcozecchini 0:9fca2b23d0ba 569 *
marcozecchini 0:9fca2b23d0ba 570 * @note A central is a scanner.
marcozecchini 0:9fca2b23d0ba 571 */
marcozecchini 0:9fca2b23d0ba 572 CENTRAL = 0x2,
marcozecchini 0:9fca2b23d0ba 573 };
marcozecchini 0:9fca2b23d0ba 574
marcozecchini 0:9fca2b23d0ba 575 /**
marcozecchini 0:9fca2b23d0ba 576 * Representation of a scanned advertising packet.
marcozecchini 0:9fca2b23d0ba 577 *
marcozecchini 0:9fca2b23d0ba 578 * Instances of this type are passed to the callback registered in
marcozecchini 0:9fca2b23d0ba 579 * startScan().
marcozecchini 0:9fca2b23d0ba 580 */
marcozecchini 0:9fca2b23d0ba 581 struct AdvertisementCallbackParams_t {
marcozecchini 0:9fca2b23d0ba 582 /**
marcozecchini 0:9fca2b23d0ba 583 * BLE address of the device that has advertised the packet.
marcozecchini 0:9fca2b23d0ba 584 */
marcozecchini 0:9fca2b23d0ba 585 BLEProtocol::AddressBytes_t peerAddr;
marcozecchini 0:9fca2b23d0ba 586
marcozecchini 0:9fca2b23d0ba 587 /**
marcozecchini 0:9fca2b23d0ba 588 * RSSI value of the packet.
marcozecchini 0:9fca2b23d0ba 589 */
marcozecchini 0:9fca2b23d0ba 590 int8_t rssi;
marcozecchini 0:9fca2b23d0ba 591
marcozecchini 0:9fca2b23d0ba 592 /**
marcozecchini 0:9fca2b23d0ba 593 * Flag indicating if the packet is a response to a scan request.
marcozecchini 0:9fca2b23d0ba 594 */
marcozecchini 0:9fca2b23d0ba 595 bool isScanResponse;
marcozecchini 0:9fca2b23d0ba 596
marcozecchini 0:9fca2b23d0ba 597 /**
marcozecchini 0:9fca2b23d0ba 598 * Type of advertisement.
marcozecchini 0:9fca2b23d0ba 599 */
marcozecchini 0:9fca2b23d0ba 600 GapAdvertisingParams::AdvertisingType_t type;
marcozecchini 0:9fca2b23d0ba 601
marcozecchini 0:9fca2b23d0ba 602 /**
marcozecchini 0:9fca2b23d0ba 603 * Length of the advertisement data.
marcozecchini 0:9fca2b23d0ba 604 */
marcozecchini 0:9fca2b23d0ba 605 uint8_t advertisingDataLen;
marcozecchini 0:9fca2b23d0ba 606
marcozecchini 0:9fca2b23d0ba 607 /**
marcozecchini 0:9fca2b23d0ba 608 * Pointer to the advertisement packet's data.
marcozecchini 0:9fca2b23d0ba 609 */
marcozecchini 0:9fca2b23d0ba 610 const uint8_t *advertisingData;
marcozecchini 0:9fca2b23d0ba 611 };
marcozecchini 0:9fca2b23d0ba 612
marcozecchini 0:9fca2b23d0ba 613 /**
marcozecchini 0:9fca2b23d0ba 614 * Type of the callback handling scanned advertisement packets.
marcozecchini 0:9fca2b23d0ba 615 *
marcozecchini 0:9fca2b23d0ba 616 * @see Gap::startScan().
marcozecchini 0:9fca2b23d0ba 617 */
marcozecchini 0:9fca2b23d0ba 618 typedef FunctionPointerWithContext<const AdvertisementCallbackParams_t *>
marcozecchini 0:9fca2b23d0ba 619 AdvertisementReportCallback_t;
marcozecchini 0:9fca2b23d0ba 620
marcozecchini 0:9fca2b23d0ba 621 /**
marcozecchini 0:9fca2b23d0ba 622 * Connection events.
marcozecchini 0:9fca2b23d0ba 623 *
marcozecchini 0:9fca2b23d0ba 624 * It contains all the information related to a newly established connection.
marcozecchini 0:9fca2b23d0ba 625 *
marcozecchini 0:9fca2b23d0ba 626 * Instances of this structure are passed to handlers that
marcozecchini 0:9fca2b23d0ba 627 * Gap::onConnection() registers when a connection is established.
marcozecchini 0:9fca2b23d0ba 628 */
marcozecchini 0:9fca2b23d0ba 629 struct ConnectionCallbackParams_t {
marcozecchini 0:9fca2b23d0ba 630 /**
marcozecchini 0:9fca2b23d0ba 631 * Connection handle.
marcozecchini 0:9fca2b23d0ba 632 */
marcozecchini 0:9fca2b23d0ba 633 Handle_t handle;
marcozecchini 0:9fca2b23d0ba 634
marcozecchini 0:9fca2b23d0ba 635 /**
marcozecchini 0:9fca2b23d0ba 636 * Connection Role of the local device.
marcozecchini 0:9fca2b23d0ba 637 */
marcozecchini 0:9fca2b23d0ba 638 Role_t role;
marcozecchini 0:9fca2b23d0ba 639
marcozecchini 0:9fca2b23d0ba 640 /**
marcozecchini 0:9fca2b23d0ba 641 * Type of the address the peer uses.
marcozecchini 0:9fca2b23d0ba 642 */
marcozecchini 0:9fca2b23d0ba 643 BLEProtocol::AddressType_t peerAddrType;
marcozecchini 0:9fca2b23d0ba 644
marcozecchini 0:9fca2b23d0ba 645 /**
marcozecchini 0:9fca2b23d0ba 646 * Address of the peer.
marcozecchini 0:9fca2b23d0ba 647 */
marcozecchini 0:9fca2b23d0ba 648 BLEProtocol::AddressBytes_t peerAddr;
marcozecchini 0:9fca2b23d0ba 649
marcozecchini 0:9fca2b23d0ba 650 /**
marcozecchini 0:9fca2b23d0ba 651 * Address type of the local device.
marcozecchini 0:9fca2b23d0ba 652 */
marcozecchini 0:9fca2b23d0ba 653 BLEProtocol::AddressType_t ownAddrType;
marcozecchini 0:9fca2b23d0ba 654
marcozecchini 0:9fca2b23d0ba 655 /**
marcozecchini 0:9fca2b23d0ba 656 * Address of the local device.
marcozecchini 0:9fca2b23d0ba 657 */
marcozecchini 0:9fca2b23d0ba 658 BLEProtocol::AddressBytes_t ownAddr;
marcozecchini 0:9fca2b23d0ba 659
marcozecchini 0:9fca2b23d0ba 660 /**
marcozecchini 0:9fca2b23d0ba 661 * Connection parameters.
marcozecchini 0:9fca2b23d0ba 662 */
marcozecchini 0:9fca2b23d0ba 663 const ConnectionParams_t *connectionParams;
marcozecchini 0:9fca2b23d0ba 664
marcozecchini 0:9fca2b23d0ba 665 /**
marcozecchini 0:9fca2b23d0ba 666 * Construct an instance of ConnectionCallbackParams_t.
marcozecchini 0:9fca2b23d0ba 667 *
marcozecchini 0:9fca2b23d0ba 668 * @param[in] handleIn Value to assign to handle.
marcozecchini 0:9fca2b23d0ba 669 * @param[in] roleIn Value to assign to role.
marcozecchini 0:9fca2b23d0ba 670 * @param[in] peerAddrTypeIn Value to assign to peerAddrType.
marcozecchini 0:9fca2b23d0ba 671 * @param[in] peerAddrIn Value to assign to peerAddr.
marcozecchini 0:9fca2b23d0ba 672 * @param[in] ownAddrTypeIn Value to assign to ownAddrType.
marcozecchini 0:9fca2b23d0ba 673 * @param[in] ownAddrIn Value to assign to ownAddr.
marcozecchini 0:9fca2b23d0ba 674 * @param[in] connectionParamsIn Value to assign to connectionParams.
marcozecchini 0:9fca2b23d0ba 675 *
marcozecchini 0:9fca2b23d0ba 676 * @note Constructor is not meant to be called by user code.
marcozecchini 0:9fca2b23d0ba 677 * The BLE API vendor code generates ConnectionCallbackParams_t.
marcozecchini 0:9fca2b23d0ba 678 */
marcozecchini 0:9fca2b23d0ba 679 ConnectionCallbackParams_t(
marcozecchini 0:9fca2b23d0ba 680 Handle_t handleIn,
marcozecchini 0:9fca2b23d0ba 681 Role_t roleIn,
marcozecchini 0:9fca2b23d0ba 682 BLEProtocol::AddressType_t peerAddrTypeIn,
marcozecchini 0:9fca2b23d0ba 683 const uint8_t *peerAddrIn,
marcozecchini 0:9fca2b23d0ba 684 BLEProtocol::AddressType_t ownAddrTypeIn,
marcozecchini 0:9fca2b23d0ba 685 const uint8_t *ownAddrIn,
marcozecchini 0:9fca2b23d0ba 686 const ConnectionParams_t *connectionParamsIn
marcozecchini 0:9fca2b23d0ba 687 ) : handle(handleIn),
marcozecchini 0:9fca2b23d0ba 688 role(roleIn),
marcozecchini 0:9fca2b23d0ba 689 peerAddrType(peerAddrTypeIn),
marcozecchini 0:9fca2b23d0ba 690 peerAddr(),
marcozecchini 0:9fca2b23d0ba 691 ownAddrType(ownAddrTypeIn),
marcozecchini 0:9fca2b23d0ba 692 ownAddr(),
marcozecchini 0:9fca2b23d0ba 693 connectionParams(connectionParamsIn)
marcozecchini 0:9fca2b23d0ba 694 {
marcozecchini 0:9fca2b23d0ba 695 memcpy(peerAddr, peerAddrIn, ADDR_LEN);
marcozecchini 0:9fca2b23d0ba 696 memcpy(ownAddr, ownAddrIn, ADDR_LEN);
marcozecchini 0:9fca2b23d0ba 697 }
marcozecchini 0:9fca2b23d0ba 698 };
marcozecchini 0:9fca2b23d0ba 699
marcozecchini 0:9fca2b23d0ba 700 /**
marcozecchini 0:9fca2b23d0ba 701 * Disconnection event.
marcozecchini 0:9fca2b23d0ba 702 *
marcozecchini 0:9fca2b23d0ba 703 * Instances of this event are passed to callbacks registered with
marcozecchini 0:9fca2b23d0ba 704 * Gap::onDisconnection() when a connection ends.
marcozecchini 0:9fca2b23d0ba 705 *
marcozecchini 0:9fca2b23d0ba 706 * @note Constructor is not meant to be called by user code.
marcozecchini 0:9fca2b23d0ba 707 * The BLE API vendor code generates ConnectionCallbackParams_t.
marcozecchini 0:9fca2b23d0ba 708 */
marcozecchini 0:9fca2b23d0ba 709 struct DisconnectionCallbackParams_t {
marcozecchini 0:9fca2b23d0ba 710 /**
marcozecchini 0:9fca2b23d0ba 711 * ID of the connection that has ended.
marcozecchini 0:9fca2b23d0ba 712 */
marcozecchini 0:9fca2b23d0ba 713 Handle_t handle;
marcozecchini 0:9fca2b23d0ba 714
marcozecchini 0:9fca2b23d0ba 715 /**
marcozecchini 0:9fca2b23d0ba 716 * Reason of the disconnection.
marcozecchini 0:9fca2b23d0ba 717 */
marcozecchini 0:9fca2b23d0ba 718 DisconnectionReason_t reason;
marcozecchini 0:9fca2b23d0ba 719
marcozecchini 0:9fca2b23d0ba 720 /**
marcozecchini 0:9fca2b23d0ba 721 * Construct a DisconnectionCallbackParams_t.
marcozecchini 0:9fca2b23d0ba 722 *
marcozecchini 0:9fca2b23d0ba 723 * @param[in] handleIn Value assigned to handle.
marcozecchini 0:9fca2b23d0ba 724 * @param[in] reasonIn Value assigned to reason.
marcozecchini 0:9fca2b23d0ba 725 */
marcozecchini 0:9fca2b23d0ba 726 DisconnectionCallbackParams_t(
marcozecchini 0:9fca2b23d0ba 727 Handle_t handleIn,
marcozecchini 0:9fca2b23d0ba 728 DisconnectionReason_t reasonIn
marcozecchini 0:9fca2b23d0ba 729 ) : handle(handleIn),
marcozecchini 0:9fca2b23d0ba 730 reason(reasonIn)
marcozecchini 0:9fca2b23d0ba 731 {}
marcozecchini 0:9fca2b23d0ba 732 };
marcozecchini 0:9fca2b23d0ba 733
marcozecchini 0:9fca2b23d0ba 734 /**
marcozecchini 0:9fca2b23d0ba 735 * Number of microseconds in 1.25 milliseconds.
marcozecchini 0:9fca2b23d0ba 736 */
marcozecchini 0:9fca2b23d0ba 737 static const uint16_t UNIT_1_25_MS = 1250;
marcozecchini 0:9fca2b23d0ba 738
marcozecchini 0:9fca2b23d0ba 739 /**
marcozecchini 0:9fca2b23d0ba 740 * Convert milliseconds into 1.25ms units.
marcozecchini 0:9fca2b23d0ba 741 *
marcozecchini 0:9fca2b23d0ba 742 * This function may be used to convert ms time of connection intervals into
marcozecchini 0:9fca2b23d0ba 743 * the format expected for connection parameters.
marcozecchini 0:9fca2b23d0ba 744 *
marcozecchini 0:9fca2b23d0ba 745 * @param[in] durationInMillis The duration in milliseconds.
marcozecchini 0:9fca2b23d0ba 746 *
marcozecchini 0:9fca2b23d0ba 747 * @return The duration in unit of 1.25ms.
marcozecchini 0:9fca2b23d0ba 748 */
marcozecchini 0:9fca2b23d0ba 749 static uint16_t MSEC_TO_GAP_DURATION_UNITS(uint32_t durationInMillis)
marcozecchini 0:9fca2b23d0ba 750 {
marcozecchini 0:9fca2b23d0ba 751 return (durationInMillis * 1000) / UNIT_1_25_MS;
marcozecchini 0:9fca2b23d0ba 752 }
marcozecchini 0:9fca2b23d0ba 753
marcozecchini 0:9fca2b23d0ba 754 /**
marcozecchini 0:9fca2b23d0ba 755 * Timeout event handler.
marcozecchini 0:9fca2b23d0ba 756 *
marcozecchini 0:9fca2b23d0ba 757 * @see Gap::onTimeout().
marcozecchini 0:9fca2b23d0ba 758 */
marcozecchini 0:9fca2b23d0ba 759 typedef FunctionPointerWithContext<TimeoutSource_t> TimeoutEventCallback_t;
marcozecchini 0:9fca2b23d0ba 760
marcozecchini 0:9fca2b23d0ba 761 /**
marcozecchini 0:9fca2b23d0ba 762 * Callchain of timeout event handlers.
marcozecchini 0:9fca2b23d0ba 763 *
marcozecchini 0:9fca2b23d0ba 764 * @see Gap::onTimeout().
marcozecchini 0:9fca2b23d0ba 765 */
marcozecchini 0:9fca2b23d0ba 766 typedef CallChainOfFunctionPointersWithContext<TimeoutSource_t>
marcozecchini 0:9fca2b23d0ba 767 TimeoutEventCallbackChain_t;
marcozecchini 0:9fca2b23d0ba 768
marcozecchini 0:9fca2b23d0ba 769 /**
marcozecchini 0:9fca2b23d0ba 770 * Connection event handler.
marcozecchini 0:9fca2b23d0ba 771 *
marcozecchini 0:9fca2b23d0ba 772 * @see Gap::onConnection().
marcozecchini 0:9fca2b23d0ba 773 */
marcozecchini 0:9fca2b23d0ba 774 typedef FunctionPointerWithContext<const ConnectionCallbackParams_t *>
marcozecchini 0:9fca2b23d0ba 775 ConnectionEventCallback_t;
marcozecchini 0:9fca2b23d0ba 776
marcozecchini 0:9fca2b23d0ba 777 /**
marcozecchini 0:9fca2b23d0ba 778 * Callchain of connection event handlers.
marcozecchini 0:9fca2b23d0ba 779 *
marcozecchini 0:9fca2b23d0ba 780 * @see Gap::onConnection().
marcozecchini 0:9fca2b23d0ba 781 */
marcozecchini 0:9fca2b23d0ba 782 typedef CallChainOfFunctionPointersWithContext<const ConnectionCallbackParams_t *>
marcozecchini 0:9fca2b23d0ba 783 ConnectionEventCallbackChain_t;
marcozecchini 0:9fca2b23d0ba 784
marcozecchini 0:9fca2b23d0ba 785 /**
marcozecchini 0:9fca2b23d0ba 786 * Disconnection event handler.
marcozecchini 0:9fca2b23d0ba 787 *
marcozecchini 0:9fca2b23d0ba 788 * @see Gap::onDisconnection().
marcozecchini 0:9fca2b23d0ba 789 */
marcozecchini 0:9fca2b23d0ba 790 typedef FunctionPointerWithContext<const DisconnectionCallbackParams_t*>
marcozecchini 0:9fca2b23d0ba 791 DisconnectionEventCallback_t;
marcozecchini 0:9fca2b23d0ba 792
marcozecchini 0:9fca2b23d0ba 793 /**
marcozecchini 0:9fca2b23d0ba 794 * Callchain of disconnection event handlers.
marcozecchini 0:9fca2b23d0ba 795 *
marcozecchini 0:9fca2b23d0ba 796 * @see Gap::onDisconnection().
marcozecchini 0:9fca2b23d0ba 797 */
marcozecchini 0:9fca2b23d0ba 798 typedef CallChainOfFunctionPointersWithContext<const DisconnectionCallbackParams_t*>
marcozecchini 0:9fca2b23d0ba 799 DisconnectionEventCallbackChain_t;
marcozecchini 0:9fca2b23d0ba 800
marcozecchini 0:9fca2b23d0ba 801 /**
marcozecchini 0:9fca2b23d0ba 802 * Radio notification event handler.
marcozecchini 0:9fca2b23d0ba 803 *
marcozecchini 0:9fca2b23d0ba 804 * @see Gap::onRadioNotification().
marcozecchini 0:9fca2b23d0ba 805 */
marcozecchini 0:9fca2b23d0ba 806 typedef FunctionPointerWithContext<bool> RadioNotificationEventCallback_t;
marcozecchini 0:9fca2b23d0ba 807
marcozecchini 0:9fca2b23d0ba 808 /**
marcozecchini 0:9fca2b23d0ba 809 * Gap shutdown event handler.
marcozecchini 0:9fca2b23d0ba 810 *
marcozecchini 0:9fca2b23d0ba 811 * @see Gap::onShutdown().
marcozecchini 0:9fca2b23d0ba 812 */
marcozecchini 0:9fca2b23d0ba 813 typedef FunctionPointerWithContext<const Gap *> GapShutdownCallback_t;
marcozecchini 0:9fca2b23d0ba 814
marcozecchini 0:9fca2b23d0ba 815 /**
marcozecchini 0:9fca2b23d0ba 816 * Callchain of gap shutdown event handler.
marcozecchini 0:9fca2b23d0ba 817 *
marcozecchini 0:9fca2b23d0ba 818 * @see Gap::onShutdown().
marcozecchini 0:9fca2b23d0ba 819 */
marcozecchini 0:9fca2b23d0ba 820 typedef CallChainOfFunctionPointersWithContext<const Gap *>
marcozecchini 0:9fca2b23d0ba 821 GapShutdownCallbackChain_t;
marcozecchini 0:9fca2b23d0ba 822
marcozecchini 0:9fca2b23d0ba 823 /*
marcozecchini 0:9fca2b23d0ba 824 * The following functions are meant to be overridden in the platform-specific subclass.
marcozecchini 0:9fca2b23d0ba 825 */
marcozecchini 0:9fca2b23d0ba 826 public:
marcozecchini 0:9fca2b23d0ba 827 /**
marcozecchini 0:9fca2b23d0ba 828 * Set the device MAC address and type.
marcozecchini 0:9fca2b23d0ba 829 *
marcozecchini 0:9fca2b23d0ba 830 * The address set is used in subsequent GAP operations: scanning,
marcozecchini 0:9fca2b23d0ba 831 * advertising and connection initiation.
marcozecchini 0:9fca2b23d0ba 832 *
marcozecchini 0:9fca2b23d0ba 833 * @param[in] type Type of the address to set.
marcozecchini 0:9fca2b23d0ba 834 * @param[in] address Value of the address to set. It is ordered in
marcozecchini 0:9fca2b23d0ba 835 * little endian. This parameter is not considered if the address type
marcozecchini 0:9fca2b23d0ba 836 * is RANDOM_PRIVATE_RESOLVABLE or RANDOM_PRIVATE_NON_RESOLVABLE. For those
marcozecchini 0:9fca2b23d0ba 837 * types of address, the BLE API itself generates the address.
marcozecchini 0:9fca2b23d0ba 838 *
marcozecchini 0:9fca2b23d0ba 839 * @note Some implementation may refuse to set a new PUBLIC address.
marcozecchini 0:9fca2b23d0ba 840 * @note Random static address set does not change.
marcozecchini 0:9fca2b23d0ba 841 *
marcozecchini 0:9fca2b23d0ba 842 * @return BLE_ERROR_NONE on success.
marcozecchini 0:9fca2b23d0ba 843 */
marcozecchini 0:9fca2b23d0ba 844 virtual ble_error_t setAddress(
marcozecchini 0:9fca2b23d0ba 845 BLEProtocol::AddressType_t type,
marcozecchini 0:9fca2b23d0ba 846 const BLEProtocol::AddressBytes_t address
marcozecchini 0:9fca2b23d0ba 847 ) {
marcozecchini 0:9fca2b23d0ba 848 /* avoid compiler warnings about unused variables */
marcozecchini 0:9fca2b23d0ba 849 (void)type;
marcozecchini 0:9fca2b23d0ba 850 (void)address;
marcozecchini 0:9fca2b23d0ba 851
marcozecchini 0:9fca2b23d0ba 852 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 853 is supported. */
marcozecchini 0:9fca2b23d0ba 854 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 855 }
marcozecchini 0:9fca2b23d0ba 856
marcozecchini 0:9fca2b23d0ba 857 /**
marcozecchini 0:9fca2b23d0ba 858 * Fetch the current address and its type.
marcozecchini 0:9fca2b23d0ba 859 *
marcozecchini 0:9fca2b23d0ba 860 * @param[out] typeP Type of the current address set.
marcozecchini 0:9fca2b23d0ba 861 * @param[out] address Value of the current address.
marcozecchini 0:9fca2b23d0ba 862 *
marcozecchini 0:9fca2b23d0ba 863 * @return BLE_ERROR_NONE on success.
marcozecchini 0:9fca2b23d0ba 864 */
marcozecchini 0:9fca2b23d0ba 865 virtual ble_error_t getAddress(
marcozecchini 0:9fca2b23d0ba 866 BLEProtocol::AddressType_t *typeP,
marcozecchini 0:9fca2b23d0ba 867 BLEProtocol::AddressBytes_t address
marcozecchini 0:9fca2b23d0ba 868 ) {
marcozecchini 0:9fca2b23d0ba 869 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 870 (void)typeP;
marcozecchini 0:9fca2b23d0ba 871 (void)address;
marcozecchini 0:9fca2b23d0ba 872
marcozecchini 0:9fca2b23d0ba 873 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 874 is supported. */
marcozecchini 0:9fca2b23d0ba 875 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 876 }
marcozecchini 0:9fca2b23d0ba 877
marcozecchini 0:9fca2b23d0ba 878 /**
marcozecchini 0:9fca2b23d0ba 879 * Get the minimum advertising interval in milliseconds, which can be used
marcozecchini 0:9fca2b23d0ba 880 * for connectable advertising types.
marcozecchini 0:9fca2b23d0ba 881 *
marcozecchini 0:9fca2b23d0ba 882 * @return Minimum Advertising interval in milliseconds for connectable
marcozecchini 0:9fca2b23d0ba 883 * undirected and connectable directed advertising types.
marcozecchini 0:9fca2b23d0ba 884 */
marcozecchini 0:9fca2b23d0ba 885 virtual uint16_t getMinAdvertisingInterval(void) const
marcozecchini 0:9fca2b23d0ba 886 {
marcozecchini 0:9fca2b23d0ba 887 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 888 is supported. */
marcozecchini 0:9fca2b23d0ba 889 return 0;
marcozecchini 0:9fca2b23d0ba 890 }
marcozecchini 0:9fca2b23d0ba 891
marcozecchini 0:9fca2b23d0ba 892 /**
marcozecchini 0:9fca2b23d0ba 893 * Get the minimum advertising interval in milliseconds, which can be
marcozecchini 0:9fca2b23d0ba 894 * used for nonconnectable advertising type.
marcozecchini 0:9fca2b23d0ba 895 *
marcozecchini 0:9fca2b23d0ba 896 * @return Minimum Advertising interval in milliseconds for scannable
marcozecchini 0:9fca2b23d0ba 897 * undirected and nonconnectable undirected event types.
marcozecchini 0:9fca2b23d0ba 898 */
marcozecchini 0:9fca2b23d0ba 899 virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const
marcozecchini 0:9fca2b23d0ba 900 {
marcozecchini 0:9fca2b23d0ba 901 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 902 is supported. */
marcozecchini 0:9fca2b23d0ba 903 return 0;
marcozecchini 0:9fca2b23d0ba 904 }
marcozecchini 0:9fca2b23d0ba 905
marcozecchini 0:9fca2b23d0ba 906 /**
marcozecchini 0:9fca2b23d0ba 907 * Get the maximum advertising interval in milliseconds.
marcozecchini 0:9fca2b23d0ba 908 *
marcozecchini 0:9fca2b23d0ba 909 * @return Maximum Advertising interval in milliseconds.
marcozecchini 0:9fca2b23d0ba 910 */
marcozecchini 0:9fca2b23d0ba 911 virtual uint16_t getMaxAdvertisingInterval(void) const
marcozecchini 0:9fca2b23d0ba 912 {
marcozecchini 0:9fca2b23d0ba 913 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 914 is supported. */
marcozecchini 0:9fca2b23d0ba 915 return 0xFFFF;
marcozecchini 0:9fca2b23d0ba 916 }
marcozecchini 0:9fca2b23d0ba 917
marcozecchini 0:9fca2b23d0ba 918 /**
marcozecchini 0:9fca2b23d0ba 919 * Stop the ongoing advertising procedure.
marcozecchini 0:9fca2b23d0ba 920 *
marcozecchini 0:9fca2b23d0ba 921 * @note The current advertising parameters remain in effect.
marcozecchini 0:9fca2b23d0ba 922 *
marcozecchini 0:9fca2b23d0ba 923 * @retval BLE_ERROR_NONE if the advertising procedure has been successfully
marcozecchini 0:9fca2b23d0ba 924 * stopped.
marcozecchini 0:9fca2b23d0ba 925 */
marcozecchini 0:9fca2b23d0ba 926 virtual ble_error_t stopAdvertising(void)
marcozecchini 0:9fca2b23d0ba 927 {
marcozecchini 0:9fca2b23d0ba 928 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 929 is supported. */
marcozecchini 0:9fca2b23d0ba 930 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 931 }
marcozecchini 0:9fca2b23d0ba 932
marcozecchini 0:9fca2b23d0ba 933 /**
marcozecchini 0:9fca2b23d0ba 934 * Stop the ongoing scanning procedure.
marcozecchini 0:9fca2b23d0ba 935 *
marcozecchini 0:9fca2b23d0ba 936 * The current scanning parameters remain in effect.
marcozecchini 0:9fca2b23d0ba 937 *
marcozecchini 0:9fca2b23d0ba 938 * @retval BLE_ERROR_NONE if successfully stopped scanning procedure.
marcozecchini 0:9fca2b23d0ba 939 */
marcozecchini 0:9fca2b23d0ba 940 virtual ble_error_t stopScan()
marcozecchini 0:9fca2b23d0ba 941 {
marcozecchini 0:9fca2b23d0ba 942 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 943 is supported. */
marcozecchini 0:9fca2b23d0ba 944 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 945 }
marcozecchini 0:9fca2b23d0ba 946
marcozecchini 0:9fca2b23d0ba 947 /**
marcozecchini 0:9fca2b23d0ba 948 * Initiate a connection to a peer.
marcozecchini 0:9fca2b23d0ba 949 *
marcozecchini 0:9fca2b23d0ba 950 * Once the connection is established, a ConnectionCallbackParams_t event is
marcozecchini 0:9fca2b23d0ba 951 * emitted to handlers that have been registered with onConnection().
marcozecchini 0:9fca2b23d0ba 952 *
marcozecchini 0:9fca2b23d0ba 953 * @param[in] peerAddr MAC address of the peer. It must be in LSB format.
marcozecchini 0:9fca2b23d0ba 954 * @param[in] peerAddrType Address type of the peer.
marcozecchini 0:9fca2b23d0ba 955 * @param[in] connectionParams Connection parameters to use.
marcozecchini 0:9fca2b23d0ba 956 * @param[in] scanParams Scan parameters used to find the peer.
marcozecchini 0:9fca2b23d0ba 957 *
marcozecchini 0:9fca2b23d0ba 958 * @return BLE_ERROR_NONE if connection establishment procedure is started
marcozecchini 0:9fca2b23d0ba 959 * successfully. The connectionCallChain (if set) is invoked upon
marcozecchini 0:9fca2b23d0ba 960 * a connection event.
marcozecchini 0:9fca2b23d0ba 961 */
marcozecchini 0:9fca2b23d0ba 962 virtual ble_error_t connect(
marcozecchini 0:9fca2b23d0ba 963 const BLEProtocol::AddressBytes_t peerAddr,
marcozecchini 0:9fca2b23d0ba 964 BLEProtocol::AddressType_t peerAddrType,
marcozecchini 0:9fca2b23d0ba 965 const ConnectionParams_t *connectionParams,
marcozecchini 0:9fca2b23d0ba 966 const GapScanningParams *scanParams
marcozecchini 0:9fca2b23d0ba 967 ) {
marcozecchini 0:9fca2b23d0ba 968 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 969 (void)peerAddr;
marcozecchini 0:9fca2b23d0ba 970 (void)peerAddrType;
marcozecchini 0:9fca2b23d0ba 971 (void)connectionParams;
marcozecchini 0:9fca2b23d0ba 972 (void)scanParams;
marcozecchini 0:9fca2b23d0ba 973
marcozecchini 0:9fca2b23d0ba 974 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 975 is supported. */
marcozecchini 0:9fca2b23d0ba 976 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 977 }
marcozecchini 0:9fca2b23d0ba 978
marcozecchini 0:9fca2b23d0ba 979 /**
marcozecchini 0:9fca2b23d0ba 980 * Initiate a connection to a peer.
marcozecchini 0:9fca2b23d0ba 981 *
marcozecchini 0:9fca2b23d0ba 982 * @see connect()
marcozecchini 0:9fca2b23d0ba 983 *
marcozecchini 0:9fca2b23d0ba 984 * @deprecated This funtion overloads Gap::connect(
marcozecchini 0:9fca2b23d0ba 985 * const BLEProtocol::Address_t peerAddr,
marcozecchini 0:9fca2b23d0ba 986 * BLEProtocol::AddressType_t peerAddrType,
marcozecchini 0:9fca2b23d0ba 987 * const ConnectionParams_t *connectionParams,
marcozecchini 0:9fca2b23d0ba 988 * const GapScanningParams *scanParams
marcozecchini 0:9fca2b23d0ba 989 * )
marcozecchini 0:9fca2b23d0ba 990 * to maintain backward compatibility for changes from Gap::AddressType_t to
marcozecchini 0:9fca2b23d0ba 991 * BLEProtocol::AddressType_t.
marcozecchini 0:9fca2b23d0ba 992 */
marcozecchini 0:9fca2b23d0ba 993 MBED_DEPRECATED("Gap::DeprecatedAddressType_t is deprecated, use BLEProtocol::AddressType_t instead")
marcozecchini 0:9fca2b23d0ba 994 ble_error_t connect(
marcozecchini 0:9fca2b23d0ba 995 const BLEProtocol::AddressBytes_t peerAddr,
marcozecchini 0:9fca2b23d0ba 996 DeprecatedAddressType_t peerAddrType,
marcozecchini 0:9fca2b23d0ba 997 const ConnectionParams_t *connectionParams,
marcozecchini 0:9fca2b23d0ba 998 const GapScanningParams *scanParams
marcozecchini 0:9fca2b23d0ba 999 ) {
marcozecchini 0:9fca2b23d0ba 1000 return connect(
marcozecchini 0:9fca2b23d0ba 1001 peerAddr,
marcozecchini 0:9fca2b23d0ba 1002 (BLEProtocol::AddressType_t)
marcozecchini 0:9fca2b23d0ba 1003 peerAddrType,
marcozecchini 0:9fca2b23d0ba 1004 connectionParams,
marcozecchini 0:9fca2b23d0ba 1005 scanParams
marcozecchini 0:9fca2b23d0ba 1006 );
marcozecchini 0:9fca2b23d0ba 1007 }
marcozecchini 0:9fca2b23d0ba 1008
marcozecchini 0:9fca2b23d0ba 1009 /**
marcozecchini 0:9fca2b23d0ba 1010 * Initiate a disconnection procedure.
marcozecchini 0:9fca2b23d0ba 1011 *
marcozecchini 0:9fca2b23d0ba 1012 * Once the disconnection procedure has completed a
marcozecchini 0:9fca2b23d0ba 1013 * DisconnectionCallbackParams_t, the event is emitted to handlers that
marcozecchini 0:9fca2b23d0ba 1014 * have been registered with onDisconnection().
marcozecchini 0:9fca2b23d0ba 1015 *
marcozecchini 0:9fca2b23d0ba 1016 * @param[in] reason Reason of the disconnection transmitted to the peer.
marcozecchini 0:9fca2b23d0ba 1017 * @param[in] connectionHandle Handle of the connection to end.
marcozecchini 0:9fca2b23d0ba 1018 *
marcozecchini 0:9fca2b23d0ba 1019 * @return BLE_ERROR_NONE if the disconnection procedure successfully
marcozecchini 0:9fca2b23d0ba 1020 * started.
marcozecchini 0:9fca2b23d0ba 1021 */
marcozecchini 0:9fca2b23d0ba 1022 virtual ble_error_t disconnect(
marcozecchini 0:9fca2b23d0ba 1023 Handle_t connectionHandle, DisconnectionReason_t reason
marcozecchini 0:9fca2b23d0ba 1024 ) {
marcozecchini 0:9fca2b23d0ba 1025 /* avoid compiler warnings about unused variables */
marcozecchini 0:9fca2b23d0ba 1026 (void)connectionHandle;
marcozecchini 0:9fca2b23d0ba 1027 (void)reason;
marcozecchini 0:9fca2b23d0ba 1028
marcozecchini 0:9fca2b23d0ba 1029 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1030 is supported. */
marcozecchini 0:9fca2b23d0ba 1031 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1032 }
marcozecchini 0:9fca2b23d0ba 1033
marcozecchini 0:9fca2b23d0ba 1034 /**
marcozecchini 0:9fca2b23d0ba 1035 * Initiate a disconnection procedure.
marcozecchini 0:9fca2b23d0ba 1036 *
marcozecchini 0:9fca2b23d0ba 1037 * @deprecated This version of disconnect() doesn't take a connection handle.
marcozecchini 0:9fca2b23d0ba 1038 * It works reliably only for stacks that are limited to a single connection.
marcozecchini 0:9fca2b23d0ba 1039 * Use Gap::disconnect(Handle_t connectionHandle, DisconnectionReason_t reason)
marcozecchini 0:9fca2b23d0ba 1040 * instead.
marcozecchini 0:9fca2b23d0ba 1041 *
marcozecchini 0:9fca2b23d0ba 1042 * @param[in] reason The reason for disconnection; to be sent back to the peer.
marcozecchini 0:9fca2b23d0ba 1043 *
marcozecchini 0:9fca2b23d0ba 1044 * @return BLE_ERROR_NONE if disconnection was successful.
marcozecchini 0:9fca2b23d0ba 1045 */
marcozecchini 0:9fca2b23d0ba 1046 MBED_DEPRECATED("Use disconnect(Handle_t, DisconnectionReason_t) instead.")
marcozecchini 0:9fca2b23d0ba 1047 virtual ble_error_t disconnect(DisconnectionReason_t reason) {
marcozecchini 0:9fca2b23d0ba 1048 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1049 (void)reason;
marcozecchini 0:9fca2b23d0ba 1050
marcozecchini 0:9fca2b23d0ba 1051 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1052 is supported. */
marcozecchini 0:9fca2b23d0ba 1053 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1054 }
marcozecchini 0:9fca2b23d0ba 1055
marcozecchini 0:9fca2b23d0ba 1056 /**
marcozecchini 0:9fca2b23d0ba 1057 * Returned the preferred connection parameters exposed in the GATT Generic
marcozecchini 0:9fca2b23d0ba 1058 * Access Service.
marcozecchini 0:9fca2b23d0ba 1059 *
marcozecchini 0:9fca2b23d0ba 1060 * @param[out] params Structure where the parameters are stored.
marcozecchini 0:9fca2b23d0ba 1061 *
marcozecchini 0:9fca2b23d0ba 1062 * @return BLE_ERROR_NONE if the parameters were successfully filled into
marcozecchini 0:9fca2b23d0ba 1063 * @p params.
marcozecchini 0:9fca2b23d0ba 1064 */
marcozecchini 0:9fca2b23d0ba 1065 virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params)
marcozecchini 0:9fca2b23d0ba 1066 {
marcozecchini 0:9fca2b23d0ba 1067 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1068 (void)params;
marcozecchini 0:9fca2b23d0ba 1069
marcozecchini 0:9fca2b23d0ba 1070 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1071 is supported. */
marcozecchini 0:9fca2b23d0ba 1072 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1073 }
marcozecchini 0:9fca2b23d0ba 1074
marcozecchini 0:9fca2b23d0ba 1075 /**
marcozecchini 0:9fca2b23d0ba 1076 * Set the value of the preferred connection parameters exposed in the GATT
marcozecchini 0:9fca2b23d0ba 1077 * Generic Access Service.
marcozecchini 0:9fca2b23d0ba 1078 *
marcozecchini 0:9fca2b23d0ba 1079 * A connected peer may read the characteristic exposing these parameters
marcozecchini 0:9fca2b23d0ba 1080 * and request an update of the connection parameters to accomodate the
marcozecchini 0:9fca2b23d0ba 1081 * local device.
marcozecchini 0:9fca2b23d0ba 1082 *
marcozecchini 0:9fca2b23d0ba 1083 * @param[in] params Value of the preferred connection parameters.
marcozecchini 0:9fca2b23d0ba 1084 *
marcozecchini 0:9fca2b23d0ba 1085 * @return BLE_ERROR_NONE if the preferred connection params were set
marcozecchini 0:9fca2b23d0ba 1086 * correctly.
marcozecchini 0:9fca2b23d0ba 1087 */
marcozecchini 0:9fca2b23d0ba 1088 virtual ble_error_t setPreferredConnectionParams(
marcozecchini 0:9fca2b23d0ba 1089 const ConnectionParams_t *params
marcozecchini 0:9fca2b23d0ba 1090 ) {
marcozecchini 0:9fca2b23d0ba 1091 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1092 (void)params;
marcozecchini 0:9fca2b23d0ba 1093
marcozecchini 0:9fca2b23d0ba 1094 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1095 is supported. */
marcozecchini 0:9fca2b23d0ba 1096 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1097 }
marcozecchini 0:9fca2b23d0ba 1098
marcozecchini 0:9fca2b23d0ba 1099 /**
marcozecchini 0:9fca2b23d0ba 1100 * Update connection parameters of an existing connection.
marcozecchini 0:9fca2b23d0ba 1101 *
marcozecchini 0:9fca2b23d0ba 1102 * In the central role, this initiates a Link Layer connection parameter
marcozecchini 0:9fca2b23d0ba 1103 * update procedure. In the peripheral role, this sends the corresponding
marcozecchini 0:9fca2b23d0ba 1104 * L2CAP request and waits for the central to perform the procedure.
marcozecchini 0:9fca2b23d0ba 1105 *
marcozecchini 0:9fca2b23d0ba 1106 * @param[in] handle Connection Handle.
marcozecchini 0:9fca2b23d0ba 1107 * @param[in] params Pointer to desired connection parameters.
marcozecchini 0:9fca2b23d0ba 1108 *
marcozecchini 0:9fca2b23d0ba 1109 * @return BLE_ERROR_NONE if the connection parameters were updated correctly.
marcozecchini 0:9fca2b23d0ba 1110 */
marcozecchini 0:9fca2b23d0ba 1111 virtual ble_error_t updateConnectionParams(
marcozecchini 0:9fca2b23d0ba 1112 Handle_t handle,
marcozecchini 0:9fca2b23d0ba 1113 const ConnectionParams_t *params
marcozecchini 0:9fca2b23d0ba 1114 ) {
marcozecchini 0:9fca2b23d0ba 1115 /* avoid compiler warnings about unused variables */
marcozecchini 0:9fca2b23d0ba 1116 (void)handle;
marcozecchini 0:9fca2b23d0ba 1117 (void)params;
marcozecchini 0:9fca2b23d0ba 1118
marcozecchini 0:9fca2b23d0ba 1119 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1120 is supported. */
marcozecchini 0:9fca2b23d0ba 1121 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1122 }
marcozecchini 0:9fca2b23d0ba 1123
marcozecchini 0:9fca2b23d0ba 1124 /**
marcozecchini 0:9fca2b23d0ba 1125 * Set the value of the device name characteristic in the Generic Access
marcozecchini 0:9fca2b23d0ba 1126 * Service.
marcozecchini 0:9fca2b23d0ba 1127 *
marcozecchini 0:9fca2b23d0ba 1128 * @param[in] deviceName The new value for the device-name. This is a
marcozecchini 0:9fca2b23d0ba 1129 * UTF-8 encoded, <b>NULL-terminated</b> string.
marcozecchini 0:9fca2b23d0ba 1130 *
marcozecchini 0:9fca2b23d0ba 1131 * @return BLE_ERROR_NONE if the device name was set correctly.
marcozecchini 0:9fca2b23d0ba 1132 */
marcozecchini 0:9fca2b23d0ba 1133 virtual ble_error_t setDeviceName(const uint8_t *deviceName) {
marcozecchini 0:9fca2b23d0ba 1134 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1135 (void)deviceName;
marcozecchini 0:9fca2b23d0ba 1136
marcozecchini 0:9fca2b23d0ba 1137 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1138 is supported. */
marcozecchini 0:9fca2b23d0ba 1139 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1140 }
marcozecchini 0:9fca2b23d0ba 1141
marcozecchini 0:9fca2b23d0ba 1142 /**
marcozecchini 0:9fca2b23d0ba 1143 * Get the value of the device name characteristic in the Generic Access
marcozecchini 0:9fca2b23d0ba 1144 * Service.
marcozecchini 0:9fca2b23d0ba 1145 *
marcozecchini 0:9fca2b23d0ba 1146 * To obtain the length of the deviceName value, this function is
marcozecchini 0:9fca2b23d0ba 1147 * invoked with the @p deviceName parameter set to NULL.
marcozecchini 0:9fca2b23d0ba 1148 *
marcozecchini 0:9fca2b23d0ba 1149 * @param[out] deviceName Pointer to an empty buffer where the UTF-8
marcozecchini 0:9fca2b23d0ba 1150 * <b>non NULL-terminated<b> string is placed.
marcozecchini 0:9fca2b23d0ba 1151 *
marcozecchini 0:9fca2b23d0ba 1152 * @param[in,out] lengthP Length of the @p deviceName buffer. If the device
marcozecchini 0:9fca2b23d0ba 1153 * name is successfully copied, then the length of the device name
marcozecchini 0:9fca2b23d0ba 1154 * string (excluding the null terminator) replaces this value.
marcozecchini 0:9fca2b23d0ba 1155 *
marcozecchini 0:9fca2b23d0ba 1156 * @return BLE_ERROR_NONE if the device name was fetched correctly from the
marcozecchini 0:9fca2b23d0ba 1157 * underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1158 *
marcozecchini 0:9fca2b23d0ba 1159 * @note If the device name is longer than the size of the supplied buffer,
marcozecchini 0:9fca2b23d0ba 1160 * length returns the complete device name length and not the number of
marcozecchini 0:9fca2b23d0ba 1161 * bytes actually returned in deviceName. The application may use this
marcozecchini 0:9fca2b23d0ba 1162 * information to retry with a suitable buffer size.
marcozecchini 0:9fca2b23d0ba 1163 */
marcozecchini 0:9fca2b23d0ba 1164 virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP)
marcozecchini 0:9fca2b23d0ba 1165 {
marcozecchini 0:9fca2b23d0ba 1166 /* avoid compiler warnings about unused variables */
marcozecchini 0:9fca2b23d0ba 1167 (void)deviceName;
marcozecchini 0:9fca2b23d0ba 1168 (void)lengthP;
marcozecchini 0:9fca2b23d0ba 1169
marcozecchini 0:9fca2b23d0ba 1170 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1171 is supported. */
marcozecchini 0:9fca2b23d0ba 1172 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1173 }
marcozecchini 0:9fca2b23d0ba 1174
marcozecchini 0:9fca2b23d0ba 1175 /**
marcozecchini 0:9fca2b23d0ba 1176 * Set the value of the appearance characteristic in the GAP service.
marcozecchini 0:9fca2b23d0ba 1177 *
marcozecchini 0:9fca2b23d0ba 1178 * @param[in] appearance The new value for the device-appearance.
marcozecchini 0:9fca2b23d0ba 1179 *
marcozecchini 0:9fca2b23d0ba 1180 * @return BLE_ERROR_NONE if the new appearance was set correctly.
marcozecchini 0:9fca2b23d0ba 1181 */
marcozecchini 0:9fca2b23d0ba 1182 virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance)
marcozecchini 0:9fca2b23d0ba 1183 {
marcozecchini 0:9fca2b23d0ba 1184 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1185 (void)appearance;
marcozecchini 0:9fca2b23d0ba 1186
marcozecchini 0:9fca2b23d0ba 1187 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1188 is supported. */
marcozecchini 0:9fca2b23d0ba 1189 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1190 }
marcozecchini 0:9fca2b23d0ba 1191
marcozecchini 0:9fca2b23d0ba 1192 /**
marcozecchini 0:9fca2b23d0ba 1193 * Get the value of the appearance characteristic in the GAP service.
marcozecchini 0:9fca2b23d0ba 1194 *
marcozecchini 0:9fca2b23d0ba 1195 * @param[out] appearance The current device-appearance value.
marcozecchini 0:9fca2b23d0ba 1196 *
marcozecchini 0:9fca2b23d0ba 1197 * @return BLE_ERROR_NONE if the device-appearance was fetched correctly
marcozecchini 0:9fca2b23d0ba 1198 * from the underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1199 */
marcozecchini 0:9fca2b23d0ba 1200 virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP)
marcozecchini 0:9fca2b23d0ba 1201 {
marcozecchini 0:9fca2b23d0ba 1202 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1203 (void)appearanceP;
marcozecchini 0:9fca2b23d0ba 1204
marcozecchini 0:9fca2b23d0ba 1205 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1206 is supported. */
marcozecchini 0:9fca2b23d0ba 1207 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1208 }
marcozecchini 0:9fca2b23d0ba 1209
marcozecchini 0:9fca2b23d0ba 1210 /**
marcozecchini 0:9fca2b23d0ba 1211 * Set the radio's transmit power.
marcozecchini 0:9fca2b23d0ba 1212 *
marcozecchini 0:9fca2b23d0ba 1213 * @param[in] txPower Radio's transmit power in dBm.
marcozecchini 0:9fca2b23d0ba 1214 *
marcozecchini 0:9fca2b23d0ba 1215 * @return BLE_ERROR_NONE if the new radio's transmit power was set
marcozecchini 0:9fca2b23d0ba 1216 * correctly.
marcozecchini 0:9fca2b23d0ba 1217 */
marcozecchini 0:9fca2b23d0ba 1218 virtual ble_error_t setTxPower(int8_t txPower)
marcozecchini 0:9fca2b23d0ba 1219 {
marcozecchini 0:9fca2b23d0ba 1220 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1221 (void)txPower;
marcozecchini 0:9fca2b23d0ba 1222
marcozecchini 0:9fca2b23d0ba 1223 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1224 is supported. */
marcozecchini 0:9fca2b23d0ba 1225 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1226 }
marcozecchini 0:9fca2b23d0ba 1227
marcozecchini 0:9fca2b23d0ba 1228 /**
marcozecchini 0:9fca2b23d0ba 1229 * Query the underlying stack for allowed Tx power values.
marcozecchini 0:9fca2b23d0ba 1230 *
marcozecchini 0:9fca2b23d0ba 1231 * @param[out] valueArrayPP Receive the immutable array of Tx values.
marcozecchini 0:9fca2b23d0ba 1232 * @param[out] countP Receive the array's size.
marcozecchini 0:9fca2b23d0ba 1233 */
marcozecchini 0:9fca2b23d0ba 1234 virtual void getPermittedTxPowerValues(
marcozecchini 0:9fca2b23d0ba 1235 const int8_t **valueArrayPP, size_t *countP
marcozecchini 0:9fca2b23d0ba 1236 ) {
marcozecchini 0:9fca2b23d0ba 1237 /* Avoid compiler warnings about unused variables. */
marcozecchini 0:9fca2b23d0ba 1238 (void)valueArrayPP;
marcozecchini 0:9fca2b23d0ba 1239 (void)countP;
marcozecchini 0:9fca2b23d0ba 1240
marcozecchini 0:9fca2b23d0ba 1241 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1242 is supported. */
marcozecchini 0:9fca2b23d0ba 1243 *countP = 0;
marcozecchini 0:9fca2b23d0ba 1244 }
marcozecchini 0:9fca2b23d0ba 1245
marcozecchini 0:9fca2b23d0ba 1246 /**
marcozecchini 0:9fca2b23d0ba 1247 * Get the maximum size of the whitelist.
marcozecchini 0:9fca2b23d0ba 1248 *
marcozecchini 0:9fca2b23d0ba 1249 * @return Maximum size of the whitelist.
marcozecchini 0:9fca2b23d0ba 1250 *
marcozecchini 0:9fca2b23d0ba 1251 * @note If using Mbed OS, you can configure the size of the whitelist by
marcozecchini 0:9fca2b23d0ba 1252 * setting the YOTTA_CFG_WHITELIST_MAX_SIZE macro in your yotta config file.
marcozecchini 0:9fca2b23d0ba 1253 */
marcozecchini 0:9fca2b23d0ba 1254 virtual uint8_t getMaxWhitelistSize(void) const
marcozecchini 0:9fca2b23d0ba 1255 {
marcozecchini 0:9fca2b23d0ba 1256 return 0;
marcozecchini 0:9fca2b23d0ba 1257 }
marcozecchini 0:9fca2b23d0ba 1258
marcozecchini 0:9fca2b23d0ba 1259 /**
marcozecchini 0:9fca2b23d0ba 1260 * Get the Link Layer to use the internal whitelist when scanning,
marcozecchini 0:9fca2b23d0ba 1261 * advertising or initiating a connection depending on the filter policies.
marcozecchini 0:9fca2b23d0ba 1262 *
marcozecchini 0:9fca2b23d0ba 1263 * @param[in,out] whitelist Define the whitelist instance which is used
marcozecchini 0:9fca2b23d0ba 1264 * to store the whitelist requested. In input, the caller provisions memory.
marcozecchini 0:9fca2b23d0ba 1265 *
marcozecchini 0:9fca2b23d0ba 1266 * @return BLE_ERROR_NONE if the implementation's whitelist was successfully
marcozecchini 0:9fca2b23d0ba 1267 * copied into the supplied reference.
marcozecchini 0:9fca2b23d0ba 1268 *
marcozecchini 0:9fca2b23d0ba 1269 * @experimental
marcozecchini 0:9fca2b23d0ba 1270 */
marcozecchini 0:9fca2b23d0ba 1271 virtual ble_error_t getWhitelist(Whitelist_t &whitelist) const
marcozecchini 0:9fca2b23d0ba 1272 {
marcozecchini 0:9fca2b23d0ba 1273 (void) whitelist;
marcozecchini 0:9fca2b23d0ba 1274 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1275 }
marcozecchini 0:9fca2b23d0ba 1276
marcozecchini 0:9fca2b23d0ba 1277 /**
marcozecchini 0:9fca2b23d0ba 1278 * Set the value of the whitelist to be used during GAP procedures.
marcozecchini 0:9fca2b23d0ba 1279 *
marcozecchini 0:9fca2b23d0ba 1280 * @param[in] whitelist A reference to a whitelist containing the addresses
marcozecchini 0:9fca2b23d0ba 1281 * to be copied to the internal whitelist.
marcozecchini 0:9fca2b23d0ba 1282 *
marcozecchini 0:9fca2b23d0ba 1283 * @return BLE_ERROR_NONE if the implementation's whitelist was successfully
marcozecchini 0:9fca2b23d0ba 1284 * populated with the addresses in the given whitelist.
marcozecchini 0:9fca2b23d0ba 1285 *
marcozecchini 0:9fca2b23d0ba 1286 * @note The whitelist must not contain addresses of type @ref
marcozecchini 0:9fca2b23d0ba 1287 * BLEProtocol::AddressType_t::RANDOM_PRIVATE_NON_RESOLVABLE. This
marcozecchini 0:9fca2b23d0ba 1288 * results in a @ref BLE_ERROR_INVALID_PARAM because the remote peer might
marcozecchini 0:9fca2b23d0ba 1289 * change its private address at any time, and it is not possible to resolve
marcozecchini 0:9fca2b23d0ba 1290 * it.
marcozecchini 0:9fca2b23d0ba 1291 *
marcozecchini 0:9fca2b23d0ba 1292 * @note If the input whitelist is larger than @ref getMaxWhitelistSize(),
marcozecchini 0:9fca2b23d0ba 1293 * then @ref BLE_ERROR_PARAM_OUT_OF_RANGE is returned.
marcozecchini 0:9fca2b23d0ba 1294 */
marcozecchini 0:9fca2b23d0ba 1295 virtual ble_error_t setWhitelist(const Whitelist_t &whitelist)
marcozecchini 0:9fca2b23d0ba 1296 {
marcozecchini 0:9fca2b23d0ba 1297 (void) whitelist;
marcozecchini 0:9fca2b23d0ba 1298 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1299 }
marcozecchini 0:9fca2b23d0ba 1300
marcozecchini 0:9fca2b23d0ba 1301 /**
marcozecchini 0:9fca2b23d0ba 1302 * Set the advertising policy filter mode to be used during the next
marcozecchini 0:9fca2b23d0ba 1303 * advertising procedure.
marcozecchini 0:9fca2b23d0ba 1304 *
marcozecchini 0:9fca2b23d0ba 1305 * @param[in] mode New advertising policy filter mode.
marcozecchini 0:9fca2b23d0ba 1306 *
marcozecchini 0:9fca2b23d0ba 1307 * @return BLE_ERROR_NONE if the specified policy filter mode was set
marcozecchini 0:9fca2b23d0ba 1308 * successfully.
marcozecchini 0:9fca2b23d0ba 1309 */
marcozecchini 0:9fca2b23d0ba 1310 virtual ble_error_t setAdvertisingPolicyMode(AdvertisingPolicyMode_t mode)
marcozecchini 0:9fca2b23d0ba 1311 {
marcozecchini 0:9fca2b23d0ba 1312 (void) mode;
marcozecchini 0:9fca2b23d0ba 1313 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1314 }
marcozecchini 0:9fca2b23d0ba 1315
marcozecchini 0:9fca2b23d0ba 1316 /**
marcozecchini 0:9fca2b23d0ba 1317 * Set the scan policy filter mode to be used during the next scan procedure.
marcozecchini 0:9fca2b23d0ba 1318 *
marcozecchini 0:9fca2b23d0ba 1319 * @param[in] mode New scan policy filter mode.
marcozecchini 0:9fca2b23d0ba 1320 *
marcozecchini 0:9fca2b23d0ba 1321 * @return BLE_ERROR_NONE if the specified policy filter mode was set
marcozecchini 0:9fca2b23d0ba 1322 * successfully.
marcozecchini 0:9fca2b23d0ba 1323 */
marcozecchini 0:9fca2b23d0ba 1324 virtual ble_error_t setScanningPolicyMode(ScanningPolicyMode_t mode)
marcozecchini 0:9fca2b23d0ba 1325 {
marcozecchini 0:9fca2b23d0ba 1326 (void) mode;
marcozecchini 0:9fca2b23d0ba 1327 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1328 }
marcozecchini 0:9fca2b23d0ba 1329
marcozecchini 0:9fca2b23d0ba 1330 /**
marcozecchini 0:9fca2b23d0ba 1331 * Set the initiator policy filter mode to be used during the next connection
marcozecchini 0:9fca2b23d0ba 1332 * initiation.
marcozecchini 0:9fca2b23d0ba 1333 *
marcozecchini 0:9fca2b23d0ba 1334 * @param[in] mode New initiator policy filter mode.
marcozecchini 0:9fca2b23d0ba 1335 *
marcozecchini 0:9fca2b23d0ba 1336 * @return BLE_ERROR_NONE if the specified policy filter mode was set
marcozecchini 0:9fca2b23d0ba 1337 * successfully.
marcozecchini 0:9fca2b23d0ba 1338 */
marcozecchini 0:9fca2b23d0ba 1339 virtual ble_error_t setInitiatorPolicyMode(InitiatorPolicyMode_t mode)
marcozecchini 0:9fca2b23d0ba 1340 {
marcozecchini 0:9fca2b23d0ba 1341 (void) mode;
marcozecchini 0:9fca2b23d0ba 1342 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1343 }
marcozecchini 0:9fca2b23d0ba 1344
marcozecchini 0:9fca2b23d0ba 1345 /**
marcozecchini 0:9fca2b23d0ba 1346 * Get the current advertising policy filter mode.
marcozecchini 0:9fca2b23d0ba 1347 *
marcozecchini 0:9fca2b23d0ba 1348 * @return The current advertising policy filter mode.
marcozecchini 0:9fca2b23d0ba 1349 */
marcozecchini 0:9fca2b23d0ba 1350 virtual AdvertisingPolicyMode_t getAdvertisingPolicyMode(void) const
marcozecchini 0:9fca2b23d0ba 1351 {
marcozecchini 0:9fca2b23d0ba 1352 return ADV_POLICY_IGNORE_WHITELIST;
marcozecchini 0:9fca2b23d0ba 1353 }
marcozecchini 0:9fca2b23d0ba 1354
marcozecchini 0:9fca2b23d0ba 1355 /**
marcozecchini 0:9fca2b23d0ba 1356 * Get the current scan policy filter mode.
marcozecchini 0:9fca2b23d0ba 1357 *
marcozecchini 0:9fca2b23d0ba 1358 * @return The current scan policy filter mode.
marcozecchini 0:9fca2b23d0ba 1359 */
marcozecchini 0:9fca2b23d0ba 1360 virtual ScanningPolicyMode_t getScanningPolicyMode(void) const
marcozecchini 0:9fca2b23d0ba 1361 {
marcozecchini 0:9fca2b23d0ba 1362 return SCAN_POLICY_IGNORE_WHITELIST;
marcozecchini 0:9fca2b23d0ba 1363 }
marcozecchini 0:9fca2b23d0ba 1364
marcozecchini 0:9fca2b23d0ba 1365 /**
marcozecchini 0:9fca2b23d0ba 1366 * Get the current initiator policy filter mode.
marcozecchini 0:9fca2b23d0ba 1367 *
marcozecchini 0:9fca2b23d0ba 1368 * @return The current scan policy filter mode.
marcozecchini 0:9fca2b23d0ba 1369 */
marcozecchini 0:9fca2b23d0ba 1370 virtual InitiatorPolicyMode_t getInitiatorPolicyMode(void) const
marcozecchini 0:9fca2b23d0ba 1371 {
marcozecchini 0:9fca2b23d0ba 1372 return INIT_POLICY_IGNORE_WHITELIST;
marcozecchini 0:9fca2b23d0ba 1373 }
marcozecchini 0:9fca2b23d0ba 1374
marcozecchini 0:9fca2b23d0ba 1375 protected:
marcozecchini 0:9fca2b23d0ba 1376 /* Override the following in the underlying adaptation layer to provide the
marcozecchini 0:9fca2b23d0ba 1377 functionality of scanning. */
marcozecchini 0:9fca2b23d0ba 1378
marcozecchini 0:9fca2b23d0ba 1379 /**
marcozecchini 0:9fca2b23d0ba 1380 * Start scanning procedure in the underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1381 *
marcozecchini 0:9fca2b23d0ba 1382 * @param[in] scanningParams Parameters of the scan procedure.
marcozecchini 0:9fca2b23d0ba 1383 *
marcozecchini 0:9fca2b23d0ba 1384 * @return BLE_ERROR_NONE if the scan procedure was successfully started.
marcozecchini 0:9fca2b23d0ba 1385 */
marcozecchini 0:9fca2b23d0ba 1386 virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams)
marcozecchini 0:9fca2b23d0ba 1387 {
marcozecchini 0:9fca2b23d0ba 1388 (void)scanningParams;
marcozecchini 0:9fca2b23d0ba 1389 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1390 is supported. */
marcozecchini 0:9fca2b23d0ba 1391 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1392 }
marcozecchini 0:9fca2b23d0ba 1393
marcozecchini 0:9fca2b23d0ba 1394 /*
marcozecchini 0:9fca2b23d0ba 1395 * APIs with nonvirtual implementations.
marcozecchini 0:9fca2b23d0ba 1396 */
marcozecchini 0:9fca2b23d0ba 1397 public:
marcozecchini 0:9fca2b23d0ba 1398 /**
marcozecchini 0:9fca2b23d0ba 1399 * Get the current advertising and connection states of the device.
marcozecchini 0:9fca2b23d0ba 1400 *
marcozecchini 0:9fca2b23d0ba 1401 * @return The current GAP state of the device.
marcozecchini 0:9fca2b23d0ba 1402 */
marcozecchini 0:9fca2b23d0ba 1403 GapState_t getState(void) const
marcozecchini 0:9fca2b23d0ba 1404 {
marcozecchini 0:9fca2b23d0ba 1405 return state;
marcozecchini 0:9fca2b23d0ba 1406 }
marcozecchini 0:9fca2b23d0ba 1407
marcozecchini 0:9fca2b23d0ba 1408 /**
marcozecchini 0:9fca2b23d0ba 1409 * Set the advertising type to use during the advertising procedure.
marcozecchini 0:9fca2b23d0ba 1410 *
marcozecchini 0:9fca2b23d0ba 1411 * @param[in] advType New type of advertising to use.
marcozecchini 0:9fca2b23d0ba 1412 */
marcozecchini 0:9fca2b23d0ba 1413 void setAdvertisingType(GapAdvertisingParams::AdvertisingType_t advType)
marcozecchini 0:9fca2b23d0ba 1414 {
marcozecchini 0:9fca2b23d0ba 1415 _advParams.setAdvertisingType(advType);
marcozecchini 0:9fca2b23d0ba 1416 }
marcozecchini 0:9fca2b23d0ba 1417
marcozecchini 0:9fca2b23d0ba 1418 /**
marcozecchini 0:9fca2b23d0ba 1419 * Set the advertising interval.
marcozecchini 0:9fca2b23d0ba 1420 *
marcozecchini 0:9fca2b23d0ba 1421 * @param[in] interval Advertising interval in units of milliseconds.
marcozecchini 0:9fca2b23d0ba 1422 * Advertising is disabled if interval is 0. If interval is smaller than
marcozecchini 0:9fca2b23d0ba 1423 * the minimum supported value, then the minimum supported value is used
marcozecchini 0:9fca2b23d0ba 1424 * instead. This minimum value can be discovered using
marcozecchini 0:9fca2b23d0ba 1425 * getMinAdvertisingInterval().
marcozecchini 0:9fca2b23d0ba 1426 *
marcozecchini 0:9fca2b23d0ba 1427 * This field must be set to 0 if connectionMode is equal
marcozecchini 0:9fca2b23d0ba 1428 * to ADV_CONNECTABLE_DIRECTED.
marcozecchini 0:9fca2b23d0ba 1429 *
marcozecchini 0:9fca2b23d0ba 1430 * @note Decreasing this value allows central devices to detect a
marcozecchini 0:9fca2b23d0ba 1431 * peripheral faster, at the expense of the radio using more power
marcozecchini 0:9fca2b23d0ba 1432 * due to the higher data transmit rate.
marcozecchini 0:9fca2b23d0ba 1433 */
marcozecchini 0:9fca2b23d0ba 1434 void setAdvertisingInterval(uint16_t interval)
marcozecchini 0:9fca2b23d0ba 1435 {
marcozecchini 0:9fca2b23d0ba 1436 if (interval == 0) {
marcozecchini 0:9fca2b23d0ba 1437 stopAdvertising();
marcozecchini 0:9fca2b23d0ba 1438 } else if (interval < getMinAdvertisingInterval()) {
marcozecchini 0:9fca2b23d0ba 1439 interval = getMinAdvertisingInterval();
marcozecchini 0:9fca2b23d0ba 1440 }
marcozecchini 0:9fca2b23d0ba 1441 _advParams.setInterval(interval);
marcozecchini 0:9fca2b23d0ba 1442 }
marcozecchini 0:9fca2b23d0ba 1443
marcozecchini 0:9fca2b23d0ba 1444 /**
marcozecchini 0:9fca2b23d0ba 1445 * Set the advertising duration.
marcozecchini 0:9fca2b23d0ba 1446 *
marcozecchini 0:9fca2b23d0ba 1447 * A timeout event is genenerated once the advertising period expired.
marcozecchini 0:9fca2b23d0ba 1448 *
marcozecchini 0:9fca2b23d0ba 1449 * @param[in] timeout Advertising timeout (in seconds) between 0x1 and 0x3FFF.
marcozecchini 0:9fca2b23d0ba 1450 * The special value 0 may be used to disable the advertising timeout.
marcozecchini 0:9fca2b23d0ba 1451 */
marcozecchini 0:9fca2b23d0ba 1452 void setAdvertisingTimeout(uint16_t timeout)
marcozecchini 0:9fca2b23d0ba 1453 {
marcozecchini 0:9fca2b23d0ba 1454 _advParams.setTimeout(timeout);
marcozecchini 0:9fca2b23d0ba 1455 }
marcozecchini 0:9fca2b23d0ba 1456
marcozecchini 0:9fca2b23d0ba 1457 /**
marcozecchini 0:9fca2b23d0ba 1458 * Start the advertising procedure.
marcozecchini 0:9fca2b23d0ba 1459 *
marcozecchini 0:9fca2b23d0ba 1460 * @return BLE_ERROR_NONE if the device started advertising successfully.
marcozecchini 0:9fca2b23d0ba 1461 */
marcozecchini 0:9fca2b23d0ba 1462 ble_error_t startAdvertising(void)
marcozecchini 0:9fca2b23d0ba 1463 {
marcozecchini 0:9fca2b23d0ba 1464 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1465 if ((rc = startAdvertising(_advParams)) == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1466 state.advertising = 1;
marcozecchini 0:9fca2b23d0ba 1467 }
marcozecchini 0:9fca2b23d0ba 1468 return rc;
marcozecchini 0:9fca2b23d0ba 1469 }
marcozecchini 0:9fca2b23d0ba 1470
marcozecchini 0:9fca2b23d0ba 1471 /**
marcozecchini 0:9fca2b23d0ba 1472 * Reset the value of the advertising payload advertised.
marcozecchini 0:9fca2b23d0ba 1473 */
marcozecchini 0:9fca2b23d0ba 1474 void clearAdvertisingPayload(void)
marcozecchini 0:9fca2b23d0ba 1475 {
marcozecchini 0:9fca2b23d0ba 1476 _advPayload.clear();
marcozecchini 0:9fca2b23d0ba 1477 setAdvertisingData(_advPayload, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1478 }
marcozecchini 0:9fca2b23d0ba 1479
marcozecchini 0:9fca2b23d0ba 1480 /**
marcozecchini 0:9fca2b23d0ba 1481 * Set gap flags in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1482 *
marcozecchini 0:9fca2b23d0ba 1483 * A call to this function is equivalent to:
marcozecchini 0:9fca2b23d0ba 1484 *
marcozecchini 0:9fca2b23d0ba 1485 * @code
marcozecchini 0:9fca2b23d0ba 1486 * Gap &gap;
marcozecchini 0:9fca2b23d0ba 1487 *
marcozecchini 0:9fca2b23d0ba 1488 * GapAdvertisingData payload = gap.getAdvertisingPayload();
marcozecchini 0:9fca2b23d0ba 1489 * payload.addFlags(flags);
marcozecchini 0:9fca2b23d0ba 1490 * gap.setAdvertisingPayload(payload);
marcozecchini 0:9fca2b23d0ba 1491 * @endcode
marcozecchini 0:9fca2b23d0ba 1492 *
marcozecchini 0:9fca2b23d0ba 1493 * @param[in] flags The flags to be added.
marcozecchini 0:9fca2b23d0ba 1494 *
marcozecchini 0:9fca2b23d0ba 1495 * @return BLE_ERROR_NONE if the data was successfully added to the
marcozecchini 0:9fca2b23d0ba 1496 * advertising payload.
marcozecchini 0:9fca2b23d0ba 1497 */
marcozecchini 0:9fca2b23d0ba 1498 ble_error_t accumulateAdvertisingPayload(uint8_t flags)
marcozecchini 0:9fca2b23d0ba 1499 {
marcozecchini 0:9fca2b23d0ba 1500 GapAdvertisingData advPayloadCopy = _advPayload;
marcozecchini 0:9fca2b23d0ba 1501 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1502 if ((rc = advPayloadCopy.addFlags(flags)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1503 return rc;
marcozecchini 0:9fca2b23d0ba 1504 }
marcozecchini 0:9fca2b23d0ba 1505
marcozecchini 0:9fca2b23d0ba 1506 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1507 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1508 _advPayload = advPayloadCopy;
marcozecchini 0:9fca2b23d0ba 1509 }
marcozecchini 0:9fca2b23d0ba 1510
marcozecchini 0:9fca2b23d0ba 1511 return rc;
marcozecchini 0:9fca2b23d0ba 1512 }
marcozecchini 0:9fca2b23d0ba 1513
marcozecchini 0:9fca2b23d0ba 1514 /**
marcozecchini 0:9fca2b23d0ba 1515 * Set the appearance field in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1516 *
marcozecchini 0:9fca2b23d0ba 1517 * A call to this function is equivalent to:
marcozecchini 0:9fca2b23d0ba 1518 *
marcozecchini 0:9fca2b23d0ba 1519 * @code
marcozecchini 0:9fca2b23d0ba 1520 * Gap &gap;
marcozecchini 0:9fca2b23d0ba 1521 *
marcozecchini 0:9fca2b23d0ba 1522 * GapAdvertisingData payload = gap.getAdvertisingPayload();
marcozecchini 0:9fca2b23d0ba 1523 * payload.addAppearance(app);
marcozecchini 0:9fca2b23d0ba 1524 * gap.setAdvertisingPayload(payload);
marcozecchini 0:9fca2b23d0ba 1525 * @endcode
marcozecchini 0:9fca2b23d0ba 1526 *
marcozecchini 0:9fca2b23d0ba 1527 * @param[in] app The appearance to advertise.
marcozecchini 0:9fca2b23d0ba 1528 *
marcozecchini 0:9fca2b23d0ba 1529 * @return BLE_ERROR_NONE if the data was successfully added to the
marcozecchini 0:9fca2b23d0ba 1530 * advertising payload.
marcozecchini 0:9fca2b23d0ba 1531 */
marcozecchini 0:9fca2b23d0ba 1532 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app)
marcozecchini 0:9fca2b23d0ba 1533 {
marcozecchini 0:9fca2b23d0ba 1534 GapAdvertisingData advPayloadCopy = _advPayload;
marcozecchini 0:9fca2b23d0ba 1535 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1536 if ((rc = advPayloadCopy.addAppearance(app)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1537 return rc;
marcozecchini 0:9fca2b23d0ba 1538 }
marcozecchini 0:9fca2b23d0ba 1539
marcozecchini 0:9fca2b23d0ba 1540 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1541 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1542 _advPayload = advPayloadCopy;
marcozecchini 0:9fca2b23d0ba 1543 }
marcozecchini 0:9fca2b23d0ba 1544
marcozecchini 0:9fca2b23d0ba 1545 return rc;
marcozecchini 0:9fca2b23d0ba 1546 }
marcozecchini 0:9fca2b23d0ba 1547
marcozecchini 0:9fca2b23d0ba 1548 /**
marcozecchini 0:9fca2b23d0ba 1549 * Set the Tx Power field in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1550 *
marcozecchini 0:9fca2b23d0ba 1551 * A call to this function is equivalent to:
marcozecchini 0:9fca2b23d0ba 1552 *
marcozecchini 0:9fca2b23d0ba 1553 * @code
marcozecchini 0:9fca2b23d0ba 1554 * Gap &gap;
marcozecchini 0:9fca2b23d0ba 1555 *
marcozecchini 0:9fca2b23d0ba 1556 * GapAdvertisingData payload = gap.getAdvertisingPayload();
marcozecchini 0:9fca2b23d0ba 1557 * payload.addTxPower(power);
marcozecchini 0:9fca2b23d0ba 1558 * gap.setAdvertisingPayload(payload);
marcozecchini 0:9fca2b23d0ba 1559 * @endcode
marcozecchini 0:9fca2b23d0ba 1560 *
marcozecchini 0:9fca2b23d0ba 1561 * @param[in] power Transmit power in dBm used by the controller to advertise.
marcozecchini 0:9fca2b23d0ba 1562 *
marcozecchini 0:9fca2b23d0ba 1563 * @return BLE_ERROR_NONE if the data was successfully added to the
marcozecchini 0:9fca2b23d0ba 1564 * advertising payload.
marcozecchini 0:9fca2b23d0ba 1565 */
marcozecchini 0:9fca2b23d0ba 1566 ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power)
marcozecchini 0:9fca2b23d0ba 1567 {
marcozecchini 0:9fca2b23d0ba 1568 GapAdvertisingData advPayloadCopy = _advPayload;
marcozecchini 0:9fca2b23d0ba 1569 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1570 if ((rc = advPayloadCopy.addTxPower(power)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1571 return rc;
marcozecchini 0:9fca2b23d0ba 1572 }
marcozecchini 0:9fca2b23d0ba 1573
marcozecchini 0:9fca2b23d0ba 1574 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1575 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1576 _advPayload = advPayloadCopy;
marcozecchini 0:9fca2b23d0ba 1577 }
marcozecchini 0:9fca2b23d0ba 1578
marcozecchini 0:9fca2b23d0ba 1579 return rc;
marcozecchini 0:9fca2b23d0ba 1580 }
marcozecchini 0:9fca2b23d0ba 1581
marcozecchini 0:9fca2b23d0ba 1582 /**
marcozecchini 0:9fca2b23d0ba 1583 * Add a new field in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1584 *
marcozecchini 0:9fca2b23d0ba 1585 * A call to this function is equivalent to:
marcozecchini 0:9fca2b23d0ba 1586 *
marcozecchini 0:9fca2b23d0ba 1587 * @code
marcozecchini 0:9fca2b23d0ba 1588 * Gap &gap;
marcozecchini 0:9fca2b23d0ba 1589 *
marcozecchini 0:9fca2b23d0ba 1590 * GapAdvertisingData payload = gap.getAdvertisingPayload();
marcozecchini 0:9fca2b23d0ba 1591 * payload.addData(type, data, len);
marcozecchini 0:9fca2b23d0ba 1592 * gap.setAdvertisingPayload(payload);
marcozecchini 0:9fca2b23d0ba 1593 * @endcode
marcozecchini 0:9fca2b23d0ba 1594 *
marcozecchini 0:9fca2b23d0ba 1595 * @param[in] type Identity of the field being added.
marcozecchini 0:9fca2b23d0ba 1596 * @param[in] data Buffer containing the value of the field.
marcozecchini 0:9fca2b23d0ba 1597 * @param[in] len Length of the data buffer.
marcozecchini 0:9fca2b23d0ba 1598 *
marcozecchini 0:9fca2b23d0ba 1599 * @return BLE_ERROR_NONE if the advertisement payload was updated based on
marcozecchini 0:9fca2b23d0ba 1600 * matching AD type; otherwise, an appropriate error.
marcozecchini 0:9fca2b23d0ba 1601 *
marcozecchini 0:9fca2b23d0ba 1602 * @note When the specified AD type is INCOMPLETE_LIST_16BIT_SERVICE_IDS,
marcozecchini 0:9fca2b23d0ba 1603 * COMPLETE_LIST_16BIT_SERVICE_IDS, INCOMPLETE_LIST_32BIT_SERVICE_IDS,
marcozecchini 0:9fca2b23d0ba 1604 * COMPLETE_LIST_32BIT_SERVICE_IDS, INCOMPLETE_LIST_128BIT_SERVICE_IDS,
marcozecchini 0:9fca2b23d0ba 1605 * COMPLETE_LIST_128BIT_SERVICE_IDS or LIST_128BIT_SOLICITATION_IDS the
marcozecchini 0:9fca2b23d0ba 1606 * supplied value is appended to the values previously added to the payload.
marcozecchini 0:9fca2b23d0ba 1607 */
marcozecchini 0:9fca2b23d0ba 1608 ble_error_t accumulateAdvertisingPayload(
marcozecchini 0:9fca2b23d0ba 1609 GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len
marcozecchini 0:9fca2b23d0ba 1610 ) {
marcozecchini 0:9fca2b23d0ba 1611 GapAdvertisingData advPayloadCopy = _advPayload;
marcozecchini 0:9fca2b23d0ba 1612 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1613 if ((rc = advPayloadCopy.addData(type, data, len)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1614 return rc;
marcozecchini 0:9fca2b23d0ba 1615 }
marcozecchini 0:9fca2b23d0ba 1616
marcozecchini 0:9fca2b23d0ba 1617 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1618 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1619 _advPayload = advPayloadCopy;
marcozecchini 0:9fca2b23d0ba 1620 }
marcozecchini 0:9fca2b23d0ba 1621
marcozecchini 0:9fca2b23d0ba 1622 return rc;
marcozecchini 0:9fca2b23d0ba 1623 }
marcozecchini 0:9fca2b23d0ba 1624
marcozecchini 0:9fca2b23d0ba 1625 /**
marcozecchini 0:9fca2b23d0ba 1626 * Update a particular field in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1627 *
marcozecchini 0:9fca2b23d0ba 1628 * A call to this function is equivalent to:
marcozecchini 0:9fca2b23d0ba 1629 *
marcozecchini 0:9fca2b23d0ba 1630 * @code
marcozecchini 0:9fca2b23d0ba 1631 * Gap &gap;
marcozecchini 0:9fca2b23d0ba 1632 *
marcozecchini 0:9fca2b23d0ba 1633 * GapAdvertisingData payload = gap.getAdvertisingPayload();
marcozecchini 0:9fca2b23d0ba 1634 * payload.updateData(type, data, len);
marcozecchini 0:9fca2b23d0ba 1635 * gap.setAdvertisingPayload(payload);
marcozecchini 0:9fca2b23d0ba 1636 * @endcode
marcozecchini 0:9fca2b23d0ba 1637 *
marcozecchini 0:9fca2b23d0ba 1638 *
marcozecchini 0:9fca2b23d0ba 1639 * @param[in] type Id of the field to update.
marcozecchini 0:9fca2b23d0ba 1640 * @param[in] data data buffer containing the new value of the field.
marcozecchini 0:9fca2b23d0ba 1641 * @param[in] len Length of the data buffer.
marcozecchini 0:9fca2b23d0ba 1642 *
marcozecchini 0:9fca2b23d0ba 1643 * @note If advertisements are enabled, then the update takes effect
marcozecchini 0:9fca2b23d0ba 1644 * immediately.
marcozecchini 0:9fca2b23d0ba 1645 *
marcozecchini 0:9fca2b23d0ba 1646 * @return BLE_ERROR_NONE if the advertisement payload was updated based on
marcozecchini 0:9fca2b23d0ba 1647 * matching AD type; otherwise, an appropriate error.
marcozecchini 0:9fca2b23d0ba 1648 */
marcozecchini 0:9fca2b23d0ba 1649 ble_error_t updateAdvertisingPayload(
marcozecchini 0:9fca2b23d0ba 1650 GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len
marcozecchini 0:9fca2b23d0ba 1651 ) {
marcozecchini 0:9fca2b23d0ba 1652 GapAdvertisingData advPayloadCopy = _advPayload;
marcozecchini 0:9fca2b23d0ba 1653 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1654 if ((rc = advPayloadCopy.updateData(type, data, len)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1655 return rc;
marcozecchini 0:9fca2b23d0ba 1656 }
marcozecchini 0:9fca2b23d0ba 1657
marcozecchini 0:9fca2b23d0ba 1658 rc = setAdvertisingData(advPayloadCopy, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1659 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1660 _advPayload = advPayloadCopy;
marcozecchini 0:9fca2b23d0ba 1661 }
marcozecchini 0:9fca2b23d0ba 1662
marcozecchini 0:9fca2b23d0ba 1663 return rc;
marcozecchini 0:9fca2b23d0ba 1664 }
marcozecchini 0:9fca2b23d0ba 1665
marcozecchini 0:9fca2b23d0ba 1666 /**
marcozecchini 0:9fca2b23d0ba 1667 * Set the value of the payload advertised.
marcozecchini 0:9fca2b23d0ba 1668 *
marcozecchini 0:9fca2b23d0ba 1669 * @param[in] payload A reference to a user constructed advertisement
marcozecchini 0:9fca2b23d0ba 1670 * payload to set.
marcozecchini 0:9fca2b23d0ba 1671 *
marcozecchini 0:9fca2b23d0ba 1672 * @return BLE_ERROR_NONE if the advertisement payload was successfully
marcozecchini 0:9fca2b23d0ba 1673 * set.
marcozecchini 0:9fca2b23d0ba 1674 */
marcozecchini 0:9fca2b23d0ba 1675 ble_error_t setAdvertisingPayload(const GapAdvertisingData &payload)
marcozecchini 0:9fca2b23d0ba 1676 {
marcozecchini 0:9fca2b23d0ba 1677 ble_error_t rc = setAdvertisingData(payload, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1678 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1679 _advPayload = payload;
marcozecchini 0:9fca2b23d0ba 1680 }
marcozecchini 0:9fca2b23d0ba 1681
marcozecchini 0:9fca2b23d0ba 1682 return rc;
marcozecchini 0:9fca2b23d0ba 1683 }
marcozecchini 0:9fca2b23d0ba 1684
marcozecchini 0:9fca2b23d0ba 1685 /**
marcozecchini 0:9fca2b23d0ba 1686 * Get a reference to the current advertising payload.
marcozecchini 0:9fca2b23d0ba 1687 *
marcozecchini 0:9fca2b23d0ba 1688 * @return A reference to the current advertising payload.
marcozecchini 0:9fca2b23d0ba 1689 */
marcozecchini 0:9fca2b23d0ba 1690 const GapAdvertisingData &getAdvertisingPayload(void) const
marcozecchini 0:9fca2b23d0ba 1691 {
marcozecchini 0:9fca2b23d0ba 1692 return _advPayload;
marcozecchini 0:9fca2b23d0ba 1693 }
marcozecchini 0:9fca2b23d0ba 1694
marcozecchini 0:9fca2b23d0ba 1695 /**
marcozecchini 0:9fca2b23d0ba 1696 * Add a new field in the advertising payload.
marcozecchini 0:9fca2b23d0ba 1697 *
marcozecchini 0:9fca2b23d0ba 1698 * @param[in] type AD type identifier.
marcozecchini 0:9fca2b23d0ba 1699 * @param[in] data buffer containing AD data.
marcozecchini 0:9fca2b23d0ba 1700 * @param[in] len Length of the data buffer.
marcozecchini 0:9fca2b23d0ba 1701 *
marcozecchini 0:9fca2b23d0ba 1702 * @return BLE_ERROR_NONE if the data was successfully added to the scan
marcozecchini 0:9fca2b23d0ba 1703 * response payload.
marcozecchini 0:9fca2b23d0ba 1704 */
marcozecchini 0:9fca2b23d0ba 1705 ble_error_t accumulateScanResponse(
marcozecchini 0:9fca2b23d0ba 1706 GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len
marcozecchini 0:9fca2b23d0ba 1707 ) {
marcozecchini 0:9fca2b23d0ba 1708 GapAdvertisingData scanResponseCopy = _scanResponse;
marcozecchini 0:9fca2b23d0ba 1709 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1710 if ((rc = scanResponseCopy.addData(type, data, len)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1711 return rc;
marcozecchini 0:9fca2b23d0ba 1712 }
marcozecchini 0:9fca2b23d0ba 1713
marcozecchini 0:9fca2b23d0ba 1714 rc = setAdvertisingData(_advPayload, scanResponseCopy);
marcozecchini 0:9fca2b23d0ba 1715 if (rc == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1716 _scanResponse = scanResponseCopy;
marcozecchini 0:9fca2b23d0ba 1717 }
marcozecchini 0:9fca2b23d0ba 1718
marcozecchini 0:9fca2b23d0ba 1719 return rc;
marcozecchini 0:9fca2b23d0ba 1720 }
marcozecchini 0:9fca2b23d0ba 1721
marcozecchini 0:9fca2b23d0ba 1722 /**
marcozecchini 0:9fca2b23d0ba 1723 * Reset the content of the scan response.
marcozecchini 0:9fca2b23d0ba 1724 *
marcozecchini 0:9fca2b23d0ba 1725 * @note This should be followed by a call to Gap::setAdvertisingPayload()
marcozecchini 0:9fca2b23d0ba 1726 * or Gap::startAdvertising() before the update takes effect.
marcozecchini 0:9fca2b23d0ba 1727 */
marcozecchini 0:9fca2b23d0ba 1728 void clearScanResponse(void) {
marcozecchini 0:9fca2b23d0ba 1729 _scanResponse.clear();
marcozecchini 0:9fca2b23d0ba 1730 setAdvertisingData(_advPayload, _scanResponse);
marcozecchini 0:9fca2b23d0ba 1731 }
marcozecchini 0:9fca2b23d0ba 1732
marcozecchini 0:9fca2b23d0ba 1733 /**
marcozecchini 0:9fca2b23d0ba 1734 * Set the parameters used during a scan procedure.
marcozecchini 0:9fca2b23d0ba 1735 *
marcozecchini 0:9fca2b23d0ba 1736 * @param[in] interval in ms between the start of two consecutive scan windows.
marcozecchini 0:9fca2b23d0ba 1737 * That value is greater or equal to the scan window value. The
marcozecchini 0:9fca2b23d0ba 1738 * maximum allowed value is 10.24ms.
marcozecchini 0:9fca2b23d0ba 1739 *
marcozecchini 0:9fca2b23d0ba 1740 * @param[in] window Period in ms during which the scanner listens to
marcozecchini 0:9fca2b23d0ba 1741 * advertising channels. That value is in the range 2.5ms to 10.24s.
marcozecchini 0:9fca2b23d0ba 1742 *
marcozecchini 0:9fca2b23d0ba 1743 * @param[in] timeout Duration in seconds of the scan procedure if any. The
marcozecchini 0:9fca2b23d0ba 1744 * special value 0 disable specific duration of the scan procedure.
marcozecchini 0:9fca2b23d0ba 1745 *
marcozecchini 0:9fca2b23d0ba 1746 * @param[in] activeScanning If set to true, then the scanner sends scan
marcozecchini 0:9fca2b23d0ba 1747 * requests to a scannable or connectable advertiser. If set to false, then the
marcozecchini 0:9fca2b23d0ba 1748 * scanner does not send any request during the scan procedure.
marcozecchini 0:9fca2b23d0ba 1749 *
marcozecchini 0:9fca2b23d0ba 1750 * @return BLE_ERROR_NONE if the scan parameters were correctly set.
marcozecchini 0:9fca2b23d0ba 1751 *
marcozecchini 0:9fca2b23d0ba 1752 * @note The scanning window divided by the interval determines the duty
marcozecchini 0:9fca2b23d0ba 1753 * cycle for scanning. For example, if the interval is 100ms and the window
marcozecchini 0:9fca2b23d0ba 1754 * is 10ms, then the controller scans for 10 percent of the time.
marcozecchini 0:9fca2b23d0ba 1755 *
marcozecchini 0:9fca2b23d0ba 1756 * @note If the interval and the window are set to the same value, then the
marcozecchini 0:9fca2b23d0ba 1757 * device scans continuously during the scan procedure. The scanning
marcozecchini 0:9fca2b23d0ba 1758 * frequency changes at every interval.
marcozecchini 0:9fca2b23d0ba 1759 *
marcozecchini 0:9fca2b23d0ba 1760 * @note Once the scanning parameters have been configured, scanning can be
marcozecchini 0:9fca2b23d0ba 1761 * enabled by using startScan().
marcozecchini 0:9fca2b23d0ba 1762 *
marcozecchini 0:9fca2b23d0ba 1763 * @note The scan interval and window are recommendations to the BLE stack.
marcozecchini 0:9fca2b23d0ba 1764 */
marcozecchini 0:9fca2b23d0ba 1765 ble_error_t setScanParams(
marcozecchini 0:9fca2b23d0ba 1766 uint16_t interval = GapScanningParams::SCAN_INTERVAL_MAX,
marcozecchini 0:9fca2b23d0ba 1767 uint16_t window = GapScanningParams::SCAN_WINDOW_MAX,
marcozecchini 0:9fca2b23d0ba 1768 uint16_t timeout = 0,
marcozecchini 0:9fca2b23d0ba 1769 bool activeScanning = false
marcozecchini 0:9fca2b23d0ba 1770 ) {
marcozecchini 0:9fca2b23d0ba 1771 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1772 if (((rc = _scanningParams.setInterval(interval)) == BLE_ERROR_NONE) &&
marcozecchini 0:9fca2b23d0ba 1773 ((rc = _scanningParams.setWindow(window)) == BLE_ERROR_NONE) &&
marcozecchini 0:9fca2b23d0ba 1774 ((rc = _scanningParams.setTimeout(timeout)) == BLE_ERROR_NONE)) {
marcozecchini 0:9fca2b23d0ba 1775 _scanningParams.setActiveScanning(activeScanning);
marcozecchini 0:9fca2b23d0ba 1776 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1777 }
marcozecchini 0:9fca2b23d0ba 1778
marcozecchini 0:9fca2b23d0ba 1779 return rc;
marcozecchini 0:9fca2b23d0ba 1780 }
marcozecchini 0:9fca2b23d0ba 1781
marcozecchini 0:9fca2b23d0ba 1782 /**
marcozecchini 0:9fca2b23d0ba 1783 * Set the interval parameter used during scanning procedures.
marcozecchini 0:9fca2b23d0ba 1784 *
marcozecchini 0:9fca2b23d0ba 1785 * @param[in] interval Interval in ms between the start of two consecutive
marcozecchini 0:9fca2b23d0ba 1786 * scan windows. That value is greater or equal to the scan window value.
marcozecchini 0:9fca2b23d0ba 1787 * The maximum allowed value is 10.24ms.
marcozecchini 0:9fca2b23d0ba 1788 *
marcozecchini 0:9fca2b23d0ba 1789 * @return BLE_ERROR_NONE if the scan interval was correctly set.
marcozecchini 0:9fca2b23d0ba 1790 */
marcozecchini 0:9fca2b23d0ba 1791 ble_error_t setScanInterval(uint16_t interval)
marcozecchini 0:9fca2b23d0ba 1792 {
marcozecchini 0:9fca2b23d0ba 1793 return _scanningParams.setInterval(interval);
marcozecchini 0:9fca2b23d0ba 1794 }
marcozecchini 0:9fca2b23d0ba 1795
marcozecchini 0:9fca2b23d0ba 1796 /**
marcozecchini 0:9fca2b23d0ba 1797 * Set the window parameter used during scanning procedures.
marcozecchini 0:9fca2b23d0ba 1798 *
marcozecchini 0:9fca2b23d0ba 1799 * @param[in] window Period in ms during which the scanner listens to
marcozecchini 0:9fca2b23d0ba 1800 * advertising channels. That value is in the range 2.5ms to 10.24s.
marcozecchini 0:9fca2b23d0ba 1801 *
marcozecchini 0:9fca2b23d0ba 1802 * @return BLE_ERROR_NONE if the scan window was correctly set.
marcozecchini 0:9fca2b23d0ba 1803 *
marcozecchini 0:9fca2b23d0ba 1804 * @note If scanning is already active, the updated value of scanWindow
marcozecchini 0:9fca2b23d0ba 1805 * is propagated to the underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1806 */
marcozecchini 0:9fca2b23d0ba 1807 ble_error_t setScanWindow(uint16_t window)
marcozecchini 0:9fca2b23d0ba 1808 {
marcozecchini 0:9fca2b23d0ba 1809 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1810 if ((rc = _scanningParams.setWindow(window)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1811 return rc;
marcozecchini 0:9fca2b23d0ba 1812 }
marcozecchini 0:9fca2b23d0ba 1813
marcozecchini 0:9fca2b23d0ba 1814 /* If scanning is already active, propagate the new setting to the stack. */
marcozecchini 0:9fca2b23d0ba 1815 if (scanningActive) {
marcozecchini 0:9fca2b23d0ba 1816 return startRadioScan(_scanningParams);
marcozecchini 0:9fca2b23d0ba 1817 }
marcozecchini 0:9fca2b23d0ba 1818
marcozecchini 0:9fca2b23d0ba 1819 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1820 }
marcozecchini 0:9fca2b23d0ba 1821
marcozecchini 0:9fca2b23d0ba 1822 /**
marcozecchini 0:9fca2b23d0ba 1823 * Set the timeout parameter used during scanning procedures.
marcozecchini 0:9fca2b23d0ba 1824 *
marcozecchini 0:9fca2b23d0ba 1825 * @param[in] timeout Duration in seconds of the scan procedure if any. The
marcozecchini 0:9fca2b23d0ba 1826 * special value 0 disables specific duration of the scan procedure.
marcozecchini 0:9fca2b23d0ba 1827 *
marcozecchini 0:9fca2b23d0ba 1828 * @return BLE_ERROR_NONE if the scan timeout was correctly set.
marcozecchini 0:9fca2b23d0ba 1829 *
marcozecchini 0:9fca2b23d0ba 1830 * @note If scanning is already active, the updated value of scanTimeout
marcozecchini 0:9fca2b23d0ba 1831 * is propagated to the underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1832 */
marcozecchini 0:9fca2b23d0ba 1833 ble_error_t setScanTimeout(uint16_t timeout)
marcozecchini 0:9fca2b23d0ba 1834 {
marcozecchini 0:9fca2b23d0ba 1835 ble_error_t rc;
marcozecchini 0:9fca2b23d0ba 1836 if ((rc = _scanningParams.setTimeout(timeout)) != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1837 return rc;
marcozecchini 0:9fca2b23d0ba 1838 }
marcozecchini 0:9fca2b23d0ba 1839
marcozecchini 0:9fca2b23d0ba 1840 /* If scanning is already active, propagate the new settings to the stack. */
marcozecchini 0:9fca2b23d0ba 1841 if (scanningActive) {
marcozecchini 0:9fca2b23d0ba 1842 return startRadioScan(_scanningParams);
marcozecchini 0:9fca2b23d0ba 1843 }
marcozecchini 0:9fca2b23d0ba 1844
marcozecchini 0:9fca2b23d0ba 1845 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1846 }
marcozecchini 0:9fca2b23d0ba 1847
marcozecchini 0:9fca2b23d0ba 1848 /**
marcozecchini 0:9fca2b23d0ba 1849 * Enable or disable active scanning.
marcozecchini 0:9fca2b23d0ba 1850 *
marcozecchini 0:9fca2b23d0ba 1851 * @param[in] activeScanning If set to true, then the scanner sends scan
marcozecchini 0:9fca2b23d0ba 1852 * requests to a scannable or connectable advertiser. If set to false then the
marcozecchini 0:9fca2b23d0ba 1853 * scanner does not send any request during the scan procedure.
marcozecchini 0:9fca2b23d0ba 1854 *
marcozecchini 0:9fca2b23d0ba 1855 * @return BLE_ERROR_NONE if active scanning was successfully set.
marcozecchini 0:9fca2b23d0ba 1856 *
marcozecchini 0:9fca2b23d0ba 1857 * @note If scanning is already in progress, then active scanning is
marcozecchini 0:9fca2b23d0ba 1858 * enabled for the underlying BLE stack.
marcozecchini 0:9fca2b23d0ba 1859 */
marcozecchini 0:9fca2b23d0ba 1860 ble_error_t setActiveScanning(bool activeScanning)
marcozecchini 0:9fca2b23d0ba 1861 {
marcozecchini 0:9fca2b23d0ba 1862 _scanningParams.setActiveScanning(activeScanning);
marcozecchini 0:9fca2b23d0ba 1863
marcozecchini 0:9fca2b23d0ba 1864 /* If scanning is already active, propagate the new settings to the stack. */
marcozecchini 0:9fca2b23d0ba 1865 if (scanningActive) {
marcozecchini 0:9fca2b23d0ba 1866 return startRadioScan(_scanningParams);
marcozecchini 0:9fca2b23d0ba 1867 }
marcozecchini 0:9fca2b23d0ba 1868
marcozecchini 0:9fca2b23d0ba 1869 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1870 }
marcozecchini 0:9fca2b23d0ba 1871
marcozecchini 0:9fca2b23d0ba 1872 /**
marcozecchini 0:9fca2b23d0ba 1873 * Start the scanning procedure.
marcozecchini 0:9fca2b23d0ba 1874 *
marcozecchini 0:9fca2b23d0ba 1875 * Packets received during the scan procedure are forwarded to the
marcozecchini 0:9fca2b23d0ba 1876 * scan packet handler passed as argument to this function.
marcozecchini 0:9fca2b23d0ba 1877 *
marcozecchini 0:9fca2b23d0ba 1878 * @param[in] callback Advertisement packet event handler. Upon reception
marcozecchini 0:9fca2b23d0ba 1879 * of an advertising packet, the packet is forwarded to @p callback.
marcozecchini 0:9fca2b23d0ba 1880 *
marcozecchini 0:9fca2b23d0ba 1881 * @return BLE_ERROR_NONE if the device successfully started the scan
marcozecchini 0:9fca2b23d0ba 1882 * procedure.
marcozecchini 0:9fca2b23d0ba 1883 *
marcozecchini 0:9fca2b23d0ba 1884 * @note The parameters used by the procedure are defined by setScanParams().
marcozecchini 0:9fca2b23d0ba 1885 */
marcozecchini 0:9fca2b23d0ba 1886 ble_error_t startScan(
marcozecchini 0:9fca2b23d0ba 1887 void (*callback)(const AdvertisementCallbackParams_t *params)
marcozecchini 0:9fca2b23d0ba 1888 ) {
marcozecchini 0:9fca2b23d0ba 1889 ble_error_t err = BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1890 if (callback) {
marcozecchini 0:9fca2b23d0ba 1891 if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1892 scanningActive = true;
marcozecchini 0:9fca2b23d0ba 1893 onAdvertisementReport.attach(callback);
marcozecchini 0:9fca2b23d0ba 1894 }
marcozecchini 0:9fca2b23d0ba 1895 }
marcozecchini 0:9fca2b23d0ba 1896
marcozecchini 0:9fca2b23d0ba 1897 return err;
marcozecchini 0:9fca2b23d0ba 1898 }
marcozecchini 0:9fca2b23d0ba 1899
marcozecchini 0:9fca2b23d0ba 1900 /**
marcozecchini 0:9fca2b23d0ba 1901 * Start the scanning procedure.
marcozecchini 0:9fca2b23d0ba 1902 *
marcozecchini 0:9fca2b23d0ba 1903 * Packets received during the scan procedure are forwarded to the
marcozecchini 0:9fca2b23d0ba 1904 * scan packet handler passed as argument to this function.
marcozecchini 0:9fca2b23d0ba 1905 *
marcozecchini 0:9fca2b23d0ba 1906 * @param[in] object Instance used to invoke @p callbackMember.
marcozecchini 0:9fca2b23d0ba 1907 *
marcozecchini 0:9fca2b23d0ba 1908 * @param[in] callbackMember Advertisement packet event handler. Upon
marcozecchini 0:9fca2b23d0ba 1909 * reception of an advertising packet, the packet is forwarded to @p
marcozecchini 0:9fca2b23d0ba 1910 * callback invoked from @p object.
marcozecchini 0:9fca2b23d0ba 1911 *
marcozecchini 0:9fca2b23d0ba 1912 * @return BLE_ERROR_NONE if the device successfully started the scan
marcozecchini 0:9fca2b23d0ba 1913 * procedure.
marcozecchini 0:9fca2b23d0ba 1914 *
marcozecchini 0:9fca2b23d0ba 1915 * @note The parameters used by the procedure are defined by setScanParams().
marcozecchini 0:9fca2b23d0ba 1916 */
marcozecchini 0:9fca2b23d0ba 1917 template<typename T>
marcozecchini 0:9fca2b23d0ba 1918 ble_error_t startScan(
marcozecchini 0:9fca2b23d0ba 1919 T *object,
marcozecchini 0:9fca2b23d0ba 1920 void (T::*callbackMember)(const AdvertisementCallbackParams_t *params)
marcozecchini 0:9fca2b23d0ba 1921 ) {
marcozecchini 0:9fca2b23d0ba 1922 ble_error_t err = BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 1923 if (object && callbackMember) {
marcozecchini 0:9fca2b23d0ba 1924 if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 1925 scanningActive = true;
marcozecchini 0:9fca2b23d0ba 1926 onAdvertisementReport.attach(object, callbackMember);
marcozecchini 0:9fca2b23d0ba 1927 }
marcozecchini 0:9fca2b23d0ba 1928 }
marcozecchini 0:9fca2b23d0ba 1929
marcozecchini 0:9fca2b23d0ba 1930 return err;
marcozecchini 0:9fca2b23d0ba 1931 }
marcozecchini 0:9fca2b23d0ba 1932
marcozecchini 0:9fca2b23d0ba 1933 /**
marcozecchini 0:9fca2b23d0ba 1934 * Enable radio-notification events.
marcozecchini 0:9fca2b23d0ba 1935 *
marcozecchini 0:9fca2b23d0ba 1936 * Radio Notification is a feature that notifies the application when the
marcozecchini 0:9fca2b23d0ba 1937 * radio is in use.
marcozecchini 0:9fca2b23d0ba 1938 *
marcozecchini 0:9fca2b23d0ba 1939 * The ACTIVE signal is sent before the radio event starts. The nACTIVE
marcozecchini 0:9fca2b23d0ba 1940 * signal is sent at the end of the radio event. The application programmer can
marcozecchini 0:9fca2b23d0ba 1941 * use these signals to synchronize application logic with radio
marcozecchini 0:9fca2b23d0ba 1942 * activity. For example, the ACTIVE signal can be used to shut off external
marcozecchini 0:9fca2b23d0ba 1943 * devices, to manage peak current drawn during periods when the radio is on
marcozecchini 0:9fca2b23d0ba 1944 * or to trigger sensor data collection for transmission in the Radio Event.
marcozecchini 0:9fca2b23d0ba 1945 *
marcozecchini 0:9fca2b23d0ba 1946 * @return BLE_ERROR_NONE on successful initialization, otherwise an error code.
marcozecchini 0:9fca2b23d0ba 1947 */
marcozecchini 0:9fca2b23d0ba 1948 virtual ble_error_t initRadioNotification(void)
marcozecchini 0:9fca2b23d0ba 1949 {
marcozecchini 0:9fca2b23d0ba 1950 /* Requesting action from porter(s): override this API if this capability
marcozecchini 0:9fca2b23d0ba 1951 is supported. */
marcozecchini 0:9fca2b23d0ba 1952 return BLE_ERROR_NOT_IMPLEMENTED;
marcozecchini 0:9fca2b23d0ba 1953 }
marcozecchini 0:9fca2b23d0ba 1954
marcozecchini 0:9fca2b23d0ba 1955 private:
marcozecchini 0:9fca2b23d0ba 1956 /**
marcozecchini 0:9fca2b23d0ba 1957 * Set the advertising data and scan response in the vendor subsytem.
marcozecchini 0:9fca2b23d0ba 1958 *
marcozecchini 0:9fca2b23d0ba 1959 * @param[in] advData Advertising data to set.
marcozecchini 0:9fca2b23d0ba 1960 * @param[in] scanResponse Scan response to set.
marcozecchini 0:9fca2b23d0ba 1961 *
marcozecchini 0:9fca2b23d0ba 1962 * @return BLE_ERROR_NONE if the advertising data was set successfully.
marcozecchini 0:9fca2b23d0ba 1963 *
marcozecchini 0:9fca2b23d0ba 1964 * @note Must be implemented in vendor port.
marcozecchini 0:9fca2b23d0ba 1965 */
marcozecchini 0:9fca2b23d0ba 1966 virtual ble_error_t setAdvertisingData(
marcozecchini 0:9fca2b23d0ba 1967 const GapAdvertisingData &advData,
marcozecchini 0:9fca2b23d0ba 1968 const GapAdvertisingData &scanResponse
marcozecchini 0:9fca2b23d0ba 1969 ) = 0;
marcozecchini 0:9fca2b23d0ba 1970
marcozecchini 0:9fca2b23d0ba 1971 /**
marcozecchini 0:9fca2b23d0ba 1972 * Start the advertising procedure.
marcozecchini 0:9fca2b23d0ba 1973 *
marcozecchini 0:9fca2b23d0ba 1974 * @param[in] Advertising parameters to use.
marcozecchini 0:9fca2b23d0ba 1975 *
marcozecchini 0:9fca2b23d0ba 1976 * @return BLE_ERROR_NONE if the advertising procedure successfully
marcozecchini 0:9fca2b23d0ba 1977 * started.
marcozecchini 0:9fca2b23d0ba 1978 *
marcozecchini 0:9fca2b23d0ba 1979 * @note Must be implemented in vendor port.
marcozecchini 0:9fca2b23d0ba 1980 */
marcozecchini 0:9fca2b23d0ba 1981 virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
marcozecchini 0:9fca2b23d0ba 1982
marcozecchini 0:9fca2b23d0ba 1983 public:
marcozecchini 0:9fca2b23d0ba 1984 /**
marcozecchini 0:9fca2b23d0ba 1985 * Get the current advertising parameters.
marcozecchini 0:9fca2b23d0ba 1986 *
marcozecchini 0:9fca2b23d0ba 1987 * @return A reference to the current advertising parameters.
marcozecchini 0:9fca2b23d0ba 1988 */
marcozecchini 0:9fca2b23d0ba 1989 GapAdvertisingParams &getAdvertisingParams(void)
marcozecchini 0:9fca2b23d0ba 1990 {
marcozecchini 0:9fca2b23d0ba 1991 return _advParams;
marcozecchini 0:9fca2b23d0ba 1992 }
marcozecchini 0:9fca2b23d0ba 1993
marcozecchini 0:9fca2b23d0ba 1994 /**
marcozecchini 0:9fca2b23d0ba 1995 * Const alternative to Gap::getAdvertisingParams().
marcozecchini 0:9fca2b23d0ba 1996 *
marcozecchini 0:9fca2b23d0ba 1997 * @return A const reference to the current advertising parameters.
marcozecchini 0:9fca2b23d0ba 1998 */
marcozecchini 0:9fca2b23d0ba 1999 const GapAdvertisingParams &getAdvertisingParams(void) const
marcozecchini 0:9fca2b23d0ba 2000 {
marcozecchini 0:9fca2b23d0ba 2001 return _advParams;
marcozecchini 0:9fca2b23d0ba 2002 }
marcozecchini 0:9fca2b23d0ba 2003
marcozecchini 0:9fca2b23d0ba 2004 /**
marcozecchini 0:9fca2b23d0ba 2005 * Set the advertising parameters.
marcozecchini 0:9fca2b23d0ba 2006 *
marcozecchini 0:9fca2b23d0ba 2007 * @param[in] newParams The new advertising parameters.
marcozecchini 0:9fca2b23d0ba 2008 */
marcozecchini 0:9fca2b23d0ba 2009 void setAdvertisingParams(const GapAdvertisingParams &newParams)
marcozecchini 0:9fca2b23d0ba 2010 {
marcozecchini 0:9fca2b23d0ba 2011 _advParams = newParams;
marcozecchini 0:9fca2b23d0ba 2012 }
marcozecchini 0:9fca2b23d0ba 2013
marcozecchini 0:9fca2b23d0ba 2014 /* Event handlers. */
marcozecchini 0:9fca2b23d0ba 2015 public:
marcozecchini 0:9fca2b23d0ba 2016 /**
marcozecchini 0:9fca2b23d0ba 2017 * Register a callback handling timeout events.
marcozecchini 0:9fca2b23d0ba 2018 *
marcozecchini 0:9fca2b23d0ba 2019 * @param[in] callback Event handler being registered.
marcozecchini 0:9fca2b23d0ba 2020 *
marcozecchini 0:9fca2b23d0ba 2021 * @note A callback may be unregistered using onTimeout().detach(callback).
marcozecchini 0:9fca2b23d0ba 2022 *
marcozecchini 0:9fca2b23d0ba 2023 * @see TimeoutSource_t
marcozecchini 0:9fca2b23d0ba 2024 */
marcozecchini 0:9fca2b23d0ba 2025 void onTimeout(TimeoutEventCallback_t callback)
marcozecchini 0:9fca2b23d0ba 2026 {
marcozecchini 0:9fca2b23d0ba 2027 timeoutCallbackChain.add(callback);
marcozecchini 0:9fca2b23d0ba 2028 }
marcozecchini 0:9fca2b23d0ba 2029
marcozecchini 0:9fca2b23d0ba 2030 /**
marcozecchini 0:9fca2b23d0ba 2031 * Get the callchain of registered timeout event handlers.
marcozecchini 0:9fca2b23d0ba 2032 *
marcozecchini 0:9fca2b23d0ba 2033 * @note To register callbacks, use onTimeout().add(callback).
marcozecchini 0:9fca2b23d0ba 2034 *
marcozecchini 0:9fca2b23d0ba 2035 * @note To unregister callbacks, use onTimeout().detach(callback).
marcozecchini 0:9fca2b23d0ba 2036 *
marcozecchini 0:9fca2b23d0ba 2037 * @return A reference to the timeout event callbacks chain.
marcozecchini 0:9fca2b23d0ba 2038 */
marcozecchini 0:9fca2b23d0ba 2039 TimeoutEventCallbackChain_t& onTimeout()
marcozecchini 0:9fca2b23d0ba 2040 {
marcozecchini 0:9fca2b23d0ba 2041 return timeoutCallbackChain;
marcozecchini 0:9fca2b23d0ba 2042 }
marcozecchini 0:9fca2b23d0ba 2043
marcozecchini 0:9fca2b23d0ba 2044 /**
marcozecchini 0:9fca2b23d0ba 2045 * Register a callback handling connection events.
marcozecchini 0:9fca2b23d0ba 2046 *
marcozecchini 0:9fca2b23d0ba 2047 * @param[in] callback Event handler being registered.
marcozecchini 0:9fca2b23d0ba 2048 *
marcozecchini 0:9fca2b23d0ba 2049 * @note A callback may be unregistered using onConnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2050 */
marcozecchini 0:9fca2b23d0ba 2051 void onConnection(ConnectionEventCallback_t callback)
marcozecchini 0:9fca2b23d0ba 2052 {
marcozecchini 0:9fca2b23d0ba 2053 connectionCallChain.add(callback);
marcozecchini 0:9fca2b23d0ba 2054 }
marcozecchini 0:9fca2b23d0ba 2055
marcozecchini 0:9fca2b23d0ba 2056 /**
marcozecchini 0:9fca2b23d0ba 2057 * Register a callback handling connection events.
marcozecchini 0:9fca2b23d0ba 2058 *
marcozecchini 0:9fca2b23d0ba 2059 * @param[in] tptr Instance used to invoke @p mptr.
marcozecchini 0:9fca2b23d0ba 2060 * @param[in] mptr Event handler being registered.
marcozecchini 0:9fca2b23d0ba 2061 *
marcozecchini 0:9fca2b23d0ba 2062 * @note A callback may be unregistered using onConnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2063 */
marcozecchini 0:9fca2b23d0ba 2064 template<typename T>
marcozecchini 0:9fca2b23d0ba 2065 void onConnection(T *tptr, void (T::*mptr)(const ConnectionCallbackParams_t*))
marcozecchini 0:9fca2b23d0ba 2066 {
marcozecchini 0:9fca2b23d0ba 2067 connectionCallChain.add(tptr, mptr);
marcozecchini 0:9fca2b23d0ba 2068 }
marcozecchini 0:9fca2b23d0ba 2069
marcozecchini 0:9fca2b23d0ba 2070 /**
marcozecchini 0:9fca2b23d0ba 2071 * Get the callchain of registered connection event handlers.
marcozecchini 0:9fca2b23d0ba 2072 *
marcozecchini 0:9fca2b23d0ba 2073 * @note To register callbacks, use onConnection().add(callback).
marcozecchini 0:9fca2b23d0ba 2074 *
marcozecchini 0:9fca2b23d0ba 2075 * @note To unregister callbacks, use onConnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2076 *
marcozecchini 0:9fca2b23d0ba 2077 * @return A reference to the connection event callbacks chain.
marcozecchini 0:9fca2b23d0ba 2078 */
marcozecchini 0:9fca2b23d0ba 2079 ConnectionEventCallbackChain_t& onConnection()
marcozecchini 0:9fca2b23d0ba 2080 {
marcozecchini 0:9fca2b23d0ba 2081 return connectionCallChain;
marcozecchini 0:9fca2b23d0ba 2082 }
marcozecchini 0:9fca2b23d0ba 2083
marcozecchini 0:9fca2b23d0ba 2084 /**
marcozecchini 0:9fca2b23d0ba 2085 * Register a callback handling disconnection events.
marcozecchini 0:9fca2b23d0ba 2086 *
marcozecchini 0:9fca2b23d0ba 2087 * @param[in] callback Event handler being registered.
marcozecchini 0:9fca2b23d0ba 2088 *
marcozecchini 0:9fca2b23d0ba 2089 * @note A callback may be unregistered using onDisconnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2090 */
marcozecchini 0:9fca2b23d0ba 2091 void onDisconnection(DisconnectionEventCallback_t callback)
marcozecchini 0:9fca2b23d0ba 2092 {
marcozecchini 0:9fca2b23d0ba 2093 disconnectionCallChain.add(callback);
marcozecchini 0:9fca2b23d0ba 2094 }
marcozecchini 0:9fca2b23d0ba 2095
marcozecchini 0:9fca2b23d0ba 2096 /**
marcozecchini 0:9fca2b23d0ba 2097 * Register a callback handling disconnection events.
marcozecchini 0:9fca2b23d0ba 2098 *
marcozecchini 0:9fca2b23d0ba 2099 * @param[in] tptr Instance used to invoke mptr.
marcozecchini 0:9fca2b23d0ba 2100 * @param[in] mptr Event handler being registered.
marcozecchini 0:9fca2b23d0ba 2101 *
marcozecchini 0:9fca2b23d0ba 2102 * @note A callback may be unregistered using onDisconnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2103 */
marcozecchini 0:9fca2b23d0ba 2104 template<typename T>
marcozecchini 0:9fca2b23d0ba 2105 void onDisconnection(T *tptr, void (T::*mptr)(const DisconnectionCallbackParams_t*))
marcozecchini 0:9fca2b23d0ba 2106 {
marcozecchini 0:9fca2b23d0ba 2107 disconnectionCallChain.add(tptr, mptr);
marcozecchini 0:9fca2b23d0ba 2108 }
marcozecchini 0:9fca2b23d0ba 2109
marcozecchini 0:9fca2b23d0ba 2110 /**
marcozecchini 0:9fca2b23d0ba 2111 * Get the callchain of registered disconnection event handlers.
marcozecchini 0:9fca2b23d0ba 2112 *
marcozecchini 0:9fca2b23d0ba 2113 * @note To register callbacks use onDisconnection().add(callback).
marcozecchini 0:9fca2b23d0ba 2114 *
marcozecchini 0:9fca2b23d0ba 2115 * @note To unregister callbacks use onDisconnection().detach(callback).
marcozecchini 0:9fca2b23d0ba 2116 *
marcozecchini 0:9fca2b23d0ba 2117 * @return A reference to the disconnection event callbacks chain.
marcozecchini 0:9fca2b23d0ba 2118 */
marcozecchini 0:9fca2b23d0ba 2119 DisconnectionEventCallbackChain_t& onDisconnection()
marcozecchini 0:9fca2b23d0ba 2120 {
marcozecchini 0:9fca2b23d0ba 2121 return disconnectionCallChain;
marcozecchini 0:9fca2b23d0ba 2122 }
marcozecchini 0:9fca2b23d0ba 2123
marcozecchini 0:9fca2b23d0ba 2124 /**
marcozecchini 0:9fca2b23d0ba 2125 * Set the radio-notification events handler.
marcozecchini 0:9fca2b23d0ba 2126 *
marcozecchini 0:9fca2b23d0ba 2127 * Radio Notification is a feature that enables ACTIVE and INACTIVE
marcozecchini 0:9fca2b23d0ba 2128 * (nACTIVE) signals from the stack that notify the application when the
marcozecchini 0:9fca2b23d0ba 2129 * radio is in use.
marcozecchini 0:9fca2b23d0ba 2130 *
marcozecchini 0:9fca2b23d0ba 2131 * The ACTIVE signal is sent before the radio event starts. The nACTIVE
marcozecchini 0:9fca2b23d0ba 2132 * signal is sent at the end of the radio event. The application programmer can
marcozecchini 0:9fca2b23d0ba 2133 * use these signals to synchronize application logic with radio
marcozecchini 0:9fca2b23d0ba 2134 * activity. For example, the ACTIVE signal can be used to shut off external
marcozecchini 0:9fca2b23d0ba 2135 * devices, to manage peak current drawn during periods when the radio is on
marcozecchini 0:9fca2b23d0ba 2136 * or to trigger sensor data collection for transmission in the Radio Event.
marcozecchini 0:9fca2b23d0ba 2137 *
marcozecchini 0:9fca2b23d0ba 2138 * @param[in] callback Application handler to be invoked in response to a
marcozecchini 0:9fca2b23d0ba 2139 * radio ACTIVE/INACTIVE event.
marcozecchini 0:9fca2b23d0ba 2140 */
marcozecchini 0:9fca2b23d0ba 2141 void onRadioNotification(void (*callback)(bool param))
marcozecchini 0:9fca2b23d0ba 2142 {
marcozecchini 0:9fca2b23d0ba 2143 radioNotificationCallback.attach(callback);
marcozecchini 0:9fca2b23d0ba 2144 }
marcozecchini 0:9fca2b23d0ba 2145
marcozecchini 0:9fca2b23d0ba 2146 /**
marcozecchini 0:9fca2b23d0ba 2147 * Set the radio-notification events handler.
marcozecchini 0:9fca2b23d0ba 2148 *
marcozecchini 0:9fca2b23d0ba 2149 * @param[in] tptr Instance to be used to invoke mptr.
marcozecchini 0:9fca2b23d0ba 2150 * @param[in] mptr Application handler to be invoked in response to a
marcozecchini 0:9fca2b23d0ba 2151 * radio ACTIVE/INACTIVE event.
marcozecchini 0:9fca2b23d0ba 2152 */
marcozecchini 0:9fca2b23d0ba 2153 template <typename T>
marcozecchini 0:9fca2b23d0ba 2154 void onRadioNotification(T *tptr, void (T::*mptr)(bool))
marcozecchini 0:9fca2b23d0ba 2155 {
marcozecchini 0:9fca2b23d0ba 2156 radioNotificationCallback.attach(tptr, mptr);
marcozecchini 0:9fca2b23d0ba 2157 }
marcozecchini 0:9fca2b23d0ba 2158
marcozecchini 0:9fca2b23d0ba 2159 /**
marcozecchini 0:9fca2b23d0ba 2160 * Register a Gap shutdown event handler.
marcozecchini 0:9fca2b23d0ba 2161 *
marcozecchini 0:9fca2b23d0ba 2162 * The handler is called when the Gap instance is about to shut down.
marcozecchini 0:9fca2b23d0ba 2163 * It is usually issued after a call to BLE::shutdown().
marcozecchini 0:9fca2b23d0ba 2164 *
marcozecchini 0:9fca2b23d0ba 2165 * @param[in] callback Shutdown event handler to register.
marcozecchini 0:9fca2b23d0ba 2166 *
marcozecchini 0:9fca2b23d0ba 2167 * @note To unregister a shutdown event handler, use
marcozecchini 0:9fca2b23d0ba 2168 * onShutdown().detach(callback).
marcozecchini 0:9fca2b23d0ba 2169 */
marcozecchini 0:9fca2b23d0ba 2170 void onShutdown(const GapShutdownCallback_t& callback)
marcozecchini 0:9fca2b23d0ba 2171 {
marcozecchini 0:9fca2b23d0ba 2172 shutdownCallChain.add(callback);
marcozecchini 0:9fca2b23d0ba 2173 }
marcozecchini 0:9fca2b23d0ba 2174
marcozecchini 0:9fca2b23d0ba 2175 /**
marcozecchini 0:9fca2b23d0ba 2176 * Register a Gap shutdown event handler.
marcozecchini 0:9fca2b23d0ba 2177 *
marcozecchini 0:9fca2b23d0ba 2178 * @param[in] objPtr Instance used to invoke @p memberPtr.
marcozecchini 0:9fca2b23d0ba 2179 * @param[in] memberPtr Shutdown event handler to register.
marcozecchini 0:9fca2b23d0ba 2180 */
marcozecchini 0:9fca2b23d0ba 2181 template <typename T>
marcozecchini 0:9fca2b23d0ba 2182 void onShutdown(T *objPtr, void (T::*memberPtr)(const Gap *))
marcozecchini 0:9fca2b23d0ba 2183 {
marcozecchini 0:9fca2b23d0ba 2184 shutdownCallChain.add(objPtr, memberPtr);
marcozecchini 0:9fca2b23d0ba 2185 }
marcozecchini 0:9fca2b23d0ba 2186
marcozecchini 0:9fca2b23d0ba 2187 /**
marcozecchini 0:9fca2b23d0ba 2188 * Access the callchain of shutdown event handler.
marcozecchini 0:9fca2b23d0ba 2189 *
marcozecchini 0:9fca2b23d0ba 2190 * @note To register callbacks, use onShutdown().add(callback).
marcozecchini 0:9fca2b23d0ba 2191 *
marcozecchini 0:9fca2b23d0ba 2192 * @note To unregister callbacks, use onShutdown().detach(callback).
marcozecchini 0:9fca2b23d0ba 2193 *
marcozecchini 0:9fca2b23d0ba 2194 * @return A reference to the shutdown event callback chain.
marcozecchini 0:9fca2b23d0ba 2195 */
marcozecchini 0:9fca2b23d0ba 2196 GapShutdownCallbackChain_t& onShutdown()
marcozecchini 0:9fca2b23d0ba 2197 {
marcozecchini 0:9fca2b23d0ba 2198 return shutdownCallChain;
marcozecchini 0:9fca2b23d0ba 2199 }
marcozecchini 0:9fca2b23d0ba 2200
marcozecchini 0:9fca2b23d0ba 2201 public:
marcozecchini 0:9fca2b23d0ba 2202 /**
marcozecchini 0:9fca2b23d0ba 2203 * Reset the Gap instance.
marcozecchini 0:9fca2b23d0ba 2204 *
marcozecchini 0:9fca2b23d0ba 2205 * Reset process starts by notifying all registered shutdown event handlers
marcozecchini 0:9fca2b23d0ba 2206 * that the Gap instance is about to be shut down. Then, it clears all Gap state
marcozecchini 0:9fca2b23d0ba 2207 * of the associated object and then cleans the state present in the vendor
marcozecchini 0:9fca2b23d0ba 2208 * implementation.
marcozecchini 0:9fca2b23d0ba 2209 *
marcozecchini 0:9fca2b23d0ba 2210 * This function is meant to be overridden in the platform-specific
marcozecchini 0:9fca2b23d0ba 2211 * subclass. Nevertheless, the subclass only resets its
marcozecchini 0:9fca2b23d0ba 2212 * state and not the data held in Gap members. This is achieved by a
marcozecchini 0:9fca2b23d0ba 2213 * call to Gap::reset() from the subclass' reset() implementation.
marcozecchini 0:9fca2b23d0ba 2214 *
marcozecchini 0:9fca2b23d0ba 2215 * @return BLE_ERROR_NONE on success.
marcozecchini 0:9fca2b23d0ba 2216 *
marcozecchini 0:9fca2b23d0ba 2217 * @note Currently, a call to reset() does not reset the advertising and
marcozecchini 0:9fca2b23d0ba 2218 * scan parameters to default values.
marcozecchini 0:9fca2b23d0ba 2219 */
marcozecchini 0:9fca2b23d0ba 2220 virtual ble_error_t reset(void)
marcozecchini 0:9fca2b23d0ba 2221 {
marcozecchini 0:9fca2b23d0ba 2222 /* Notify that the instance is about to shut down */
marcozecchini 0:9fca2b23d0ba 2223 shutdownCallChain.call(this);
marcozecchini 0:9fca2b23d0ba 2224 shutdownCallChain.clear();
marcozecchini 0:9fca2b23d0ba 2225
marcozecchini 0:9fca2b23d0ba 2226 /* Clear Gap state */
marcozecchini 0:9fca2b23d0ba 2227 state.advertising = 0;
marcozecchini 0:9fca2b23d0ba 2228 state.connected = 0;
marcozecchini 0:9fca2b23d0ba 2229 connectionCount = 0;
marcozecchini 0:9fca2b23d0ba 2230
marcozecchini 0:9fca2b23d0ba 2231 /* Clear scanning state */
marcozecchini 0:9fca2b23d0ba 2232 scanningActive = false;
marcozecchini 0:9fca2b23d0ba 2233
marcozecchini 0:9fca2b23d0ba 2234 /* Clear advertising and scanning data */
marcozecchini 0:9fca2b23d0ba 2235 _advPayload.clear();
marcozecchini 0:9fca2b23d0ba 2236 _scanResponse.clear();
marcozecchini 0:9fca2b23d0ba 2237
marcozecchini 0:9fca2b23d0ba 2238 /* Clear callbacks */
marcozecchini 0:9fca2b23d0ba 2239 timeoutCallbackChain.clear();
marcozecchini 0:9fca2b23d0ba 2240 connectionCallChain.clear();
marcozecchini 0:9fca2b23d0ba 2241 disconnectionCallChain.clear();
marcozecchini 0:9fca2b23d0ba 2242 radioNotificationCallback = NULL;
marcozecchini 0:9fca2b23d0ba 2243 onAdvertisementReport = NULL;
marcozecchini 0:9fca2b23d0ba 2244
marcozecchini 0:9fca2b23d0ba 2245 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 2246 }
marcozecchini 0:9fca2b23d0ba 2247
marcozecchini 0:9fca2b23d0ba 2248 protected:
marcozecchini 0:9fca2b23d0ba 2249 /**
marcozecchini 0:9fca2b23d0ba 2250 * Construct a Gap instance.
marcozecchini 0:9fca2b23d0ba 2251 */
marcozecchini 0:9fca2b23d0ba 2252 Gap() :
marcozecchini 0:9fca2b23d0ba 2253 _advParams(),
marcozecchini 0:9fca2b23d0ba 2254 _advPayload(),
marcozecchini 0:9fca2b23d0ba 2255 _scanningParams(),
marcozecchini 0:9fca2b23d0ba 2256 _scanResponse(),
marcozecchini 0:9fca2b23d0ba 2257 connectionCount(0),
marcozecchini 0:9fca2b23d0ba 2258 state(),
marcozecchini 0:9fca2b23d0ba 2259 scanningActive(false),
marcozecchini 0:9fca2b23d0ba 2260 timeoutCallbackChain(),
marcozecchini 0:9fca2b23d0ba 2261 radioNotificationCallback(),
marcozecchini 0:9fca2b23d0ba 2262 onAdvertisementReport(),
marcozecchini 0:9fca2b23d0ba 2263 connectionCallChain(),
marcozecchini 0:9fca2b23d0ba 2264 disconnectionCallChain() {
marcozecchini 0:9fca2b23d0ba 2265 _advPayload.clear();
marcozecchini 0:9fca2b23d0ba 2266 _scanResponse.clear();
marcozecchini 0:9fca2b23d0ba 2267 }
marcozecchini 0:9fca2b23d0ba 2268
marcozecchini 0:9fca2b23d0ba 2269 /* Entry points for the underlying stack to report events back to the user. */
marcozecchini 0:9fca2b23d0ba 2270 public:
marcozecchini 0:9fca2b23d0ba 2271 /**
marcozecchini 0:9fca2b23d0ba 2272 * Notify all registered connection event handlers of a connection event.
marcozecchini 0:9fca2b23d0ba 2273 *
marcozecchini 0:9fca2b23d0ba 2274 * @important This function is meant to be called from the BLE stack specific
marcozecchini 0:9fca2b23d0ba 2275 * implementation when a connection event occurs.
marcozecchini 0:9fca2b23d0ba 2276 *
marcozecchini 0:9fca2b23d0ba 2277 * @param[in] handle Handle of the new connection.
marcozecchini 0:9fca2b23d0ba 2278 * @param[in] role Role of this BLE device in the connection.
marcozecchini 0:9fca2b23d0ba 2279 * @param[in] peerAddrType Address type of the connected peer.
marcozecchini 0:9fca2b23d0ba 2280 * @param[in] peerAddr Address of the connected peer.
marcozecchini 0:9fca2b23d0ba 2281 * @param[in] ownAddrType Address type this device uses for this
marcozecchini 0:9fca2b23d0ba 2282 * connection.
marcozecchini 0:9fca2b23d0ba 2283 * @param[in] ownAddr Address this device uses for this connection.
marcozecchini 0:9fca2b23d0ba 2284 * @param[in] connectionParams Parameters of the connection.
marcozecchini 0:9fca2b23d0ba 2285 */
marcozecchini 0:9fca2b23d0ba 2286 void processConnectionEvent(
marcozecchini 0:9fca2b23d0ba 2287 Handle_t handle,
marcozecchini 0:9fca2b23d0ba 2288 Role_t role,
marcozecchini 0:9fca2b23d0ba 2289 BLEProtocol::AddressType_t peerAddrType,
marcozecchini 0:9fca2b23d0ba 2290 const BLEProtocol::AddressBytes_t peerAddr,
marcozecchini 0:9fca2b23d0ba 2291 BLEProtocol::AddressType_t ownAddrType,
marcozecchini 0:9fca2b23d0ba 2292 const BLEProtocol::AddressBytes_t ownAddr,
marcozecchini 0:9fca2b23d0ba 2293 const ConnectionParams_t *connectionParams
marcozecchini 0:9fca2b23d0ba 2294 ) {
marcozecchini 0:9fca2b23d0ba 2295 /* Update Gap state */
marcozecchini 0:9fca2b23d0ba 2296 state.advertising = 0;
marcozecchini 0:9fca2b23d0ba 2297 state.connected = 1;
marcozecchini 0:9fca2b23d0ba 2298 ++connectionCount;
marcozecchini 0:9fca2b23d0ba 2299
marcozecchini 0:9fca2b23d0ba 2300 ConnectionCallbackParams_t callbackParams(
marcozecchini 0:9fca2b23d0ba 2301 handle,
marcozecchini 0:9fca2b23d0ba 2302 role,
marcozecchini 0:9fca2b23d0ba 2303 peerAddrType,
marcozecchini 0:9fca2b23d0ba 2304 peerAddr,
marcozecchini 0:9fca2b23d0ba 2305 ownAddrType,
marcozecchini 0:9fca2b23d0ba 2306 ownAddr,
marcozecchini 0:9fca2b23d0ba 2307 connectionParams
marcozecchini 0:9fca2b23d0ba 2308 );
marcozecchini 0:9fca2b23d0ba 2309 connectionCallChain.call(&callbackParams);
marcozecchini 0:9fca2b23d0ba 2310 }
marcozecchini 0:9fca2b23d0ba 2311
marcozecchini 0:9fca2b23d0ba 2312 /**
marcozecchini 0:9fca2b23d0ba 2313 * Notify all registered disconnection event handlers of a disconnection event.
marcozecchini 0:9fca2b23d0ba 2314 *
marcozecchini 0:9fca2b23d0ba 2315 * @important This function is meant to be called from the BLE stack specific
marcozecchini 0:9fca2b23d0ba 2316 * implementation when a disconnection event occurs.
marcozecchini 0:9fca2b23d0ba 2317 *
marcozecchini 0:9fca2b23d0ba 2318 * @param[in] handle Handle of the terminated connection.
marcozecchini 0:9fca2b23d0ba 2319 * @param[in] reason Reason of the disconnection.
marcozecchini 0:9fca2b23d0ba 2320 */
marcozecchini 0:9fca2b23d0ba 2321 void processDisconnectionEvent(Handle_t handle, DisconnectionReason_t reason)
marcozecchini 0:9fca2b23d0ba 2322 {
marcozecchini 0:9fca2b23d0ba 2323 /* Update Gap state */
marcozecchini 0:9fca2b23d0ba 2324 --connectionCount;
marcozecchini 0:9fca2b23d0ba 2325 if (!connectionCount) {
marcozecchini 0:9fca2b23d0ba 2326 state.connected = 0;
marcozecchini 0:9fca2b23d0ba 2327 }
marcozecchini 0:9fca2b23d0ba 2328
marcozecchini 0:9fca2b23d0ba 2329 DisconnectionCallbackParams_t callbackParams(handle, reason);
marcozecchini 0:9fca2b23d0ba 2330 disconnectionCallChain.call(&callbackParams);
marcozecchini 0:9fca2b23d0ba 2331 }
marcozecchini 0:9fca2b23d0ba 2332
marcozecchini 0:9fca2b23d0ba 2333 /**
marcozecchini 0:9fca2b23d0ba 2334 * Forward a received advertising packet to all registered event handlers
marcozecchini 0:9fca2b23d0ba 2335 * listening for scanned packet events.
marcozecchini 0:9fca2b23d0ba 2336 *
marcozecchini 0:9fca2b23d0ba 2337 * @important This function is meant to be called from the BLE stack specific
marcozecchini 0:9fca2b23d0ba 2338 * implementation when a disconnection event occurs.
marcozecchini 0:9fca2b23d0ba 2339 *
marcozecchini 0:9fca2b23d0ba 2340 * @param[in] peerAddr Address of the peer that has emitted the packet.
marcozecchini 0:9fca2b23d0ba 2341 * @param[in] rssi Value of the RSSI measured for the received packet.
marcozecchini 0:9fca2b23d0ba 2342 * @param[in] isScanReponse If true, then the packet is a response to a scan
marcozecchini 0:9fca2b23d0ba 2343 * request.
marcozecchini 0:9fca2b23d0ba 2344 * @param[in] type Advertising type of the packet.
marcozecchini 0:9fca2b23d0ba 2345 * @param[in] advertisingDataLen Length of the advertisement data received.
marcozecchini 0:9fca2b23d0ba 2346 * @param[in] advertisingData Pointer to the advertisement packet's data.
marcozecchini 0:9fca2b23d0ba 2347 */
marcozecchini 0:9fca2b23d0ba 2348 void processAdvertisementReport(
marcozecchini 0:9fca2b23d0ba 2349 const BLEProtocol::AddressBytes_t peerAddr,
marcozecchini 0:9fca2b23d0ba 2350 int8_t rssi,
marcozecchini 0:9fca2b23d0ba 2351 bool isScanResponse,
marcozecchini 0:9fca2b23d0ba 2352 GapAdvertisingParams::AdvertisingType_t type,
marcozecchini 0:9fca2b23d0ba 2353 uint8_t advertisingDataLen,
marcozecchini 0:9fca2b23d0ba 2354 const uint8_t *advertisingData
marcozecchini 0:9fca2b23d0ba 2355 ) {
marcozecchini 0:9fca2b23d0ba 2356 AdvertisementCallbackParams_t params;
marcozecchini 0:9fca2b23d0ba 2357 memcpy(params.peerAddr, peerAddr, ADDR_LEN);
marcozecchini 0:9fca2b23d0ba 2358 params.rssi = rssi;
marcozecchini 0:9fca2b23d0ba 2359 params.isScanResponse = isScanResponse;
marcozecchini 0:9fca2b23d0ba 2360 params.type = type;
marcozecchini 0:9fca2b23d0ba 2361 params.advertisingDataLen = advertisingDataLen;
marcozecchini 0:9fca2b23d0ba 2362 params.advertisingData = advertisingData;
marcozecchini 0:9fca2b23d0ba 2363 onAdvertisementReport.call(&params);
marcozecchini 0:9fca2b23d0ba 2364 }
marcozecchini 0:9fca2b23d0ba 2365
marcozecchini 0:9fca2b23d0ba 2366 /**
marcozecchini 0:9fca2b23d0ba 2367 * Notify the occurrence of a timeout event to all registered timeout events
marcozecchini 0:9fca2b23d0ba 2368 * handler.
marcozecchini 0:9fca2b23d0ba 2369 *
marcozecchini 0:9fca2b23d0ba 2370 * @important This function is meant to be called from the BLE stack specific
marcozecchini 0:9fca2b23d0ba 2371 * implementation when a disconnection event occurs.
marcozecchini 0:9fca2b23d0ba 2372 *
marcozecchini 0:9fca2b23d0ba 2373 * @param[in] source Source of the timout event.
marcozecchini 0:9fca2b23d0ba 2374 */
marcozecchini 0:9fca2b23d0ba 2375 void processTimeoutEvent(TimeoutSource_t source)
marcozecchini 0:9fca2b23d0ba 2376 {
marcozecchini 0:9fca2b23d0ba 2377 if (source == TIMEOUT_SRC_ADVERTISING) {
marcozecchini 0:9fca2b23d0ba 2378 /* Update gap state if the source is an advertising timeout */
marcozecchini 0:9fca2b23d0ba 2379 state.advertising = 0;
marcozecchini 0:9fca2b23d0ba 2380 }
marcozecchini 0:9fca2b23d0ba 2381 if (timeoutCallbackChain) {
marcozecchini 0:9fca2b23d0ba 2382 timeoutCallbackChain(source);
marcozecchini 0:9fca2b23d0ba 2383 }
marcozecchini 0:9fca2b23d0ba 2384 }
marcozecchini 0:9fca2b23d0ba 2385
marcozecchini 0:9fca2b23d0ba 2386 protected:
marcozecchini 0:9fca2b23d0ba 2387 /**
marcozecchini 0:9fca2b23d0ba 2388 * Current advertising parameters.
marcozecchini 0:9fca2b23d0ba 2389 */
marcozecchini 0:9fca2b23d0ba 2390 GapAdvertisingParams _advParams;
marcozecchini 0:9fca2b23d0ba 2391
marcozecchini 0:9fca2b23d0ba 2392 /**
marcozecchini 0:9fca2b23d0ba 2393 * Current advertising data.
marcozecchini 0:9fca2b23d0ba 2394 */
marcozecchini 0:9fca2b23d0ba 2395 GapAdvertisingData _advPayload;
marcozecchini 0:9fca2b23d0ba 2396
marcozecchini 0:9fca2b23d0ba 2397 /**
marcozecchini 0:9fca2b23d0ba 2398 * Current scanning parameters.
marcozecchini 0:9fca2b23d0ba 2399 */
marcozecchini 0:9fca2b23d0ba 2400 GapScanningParams _scanningParams;
marcozecchini 0:9fca2b23d0ba 2401
marcozecchini 0:9fca2b23d0ba 2402 /**
marcozecchini 0:9fca2b23d0ba 2403 * Current scan response.
marcozecchini 0:9fca2b23d0ba 2404 */
marcozecchini 0:9fca2b23d0ba 2405 GapAdvertisingData _scanResponse;
marcozecchini 0:9fca2b23d0ba 2406
marcozecchini 0:9fca2b23d0ba 2407 /**
marcozecchini 0:9fca2b23d0ba 2408 * Number of open connections.
marcozecchini 0:9fca2b23d0ba 2409 */
marcozecchini 0:9fca2b23d0ba 2410 uint8_t connectionCount;
marcozecchini 0:9fca2b23d0ba 2411
marcozecchini 0:9fca2b23d0ba 2412 /**
marcozecchini 0:9fca2b23d0ba 2413 * Current GAP state.
marcozecchini 0:9fca2b23d0ba 2414 */
marcozecchini 0:9fca2b23d0ba 2415 GapState_t state;
marcozecchini 0:9fca2b23d0ba 2416
marcozecchini 0:9fca2b23d0ba 2417 /**
marcozecchini 0:9fca2b23d0ba 2418 * Active scanning flag.
marcozecchini 0:9fca2b23d0ba 2419 */
marcozecchini 0:9fca2b23d0ba 2420 bool scanningActive;
marcozecchini 0:9fca2b23d0ba 2421
marcozecchini 0:9fca2b23d0ba 2422 protected:
marcozecchini 0:9fca2b23d0ba 2423 /**
marcozecchini 0:9fca2b23d0ba 2424 * Callchain containing all registered callback handlers for timeout
marcozecchini 0:9fca2b23d0ba 2425 * events.
marcozecchini 0:9fca2b23d0ba 2426 */
marcozecchini 0:9fca2b23d0ba 2427 TimeoutEventCallbackChain_t timeoutCallbackChain;
marcozecchini 0:9fca2b23d0ba 2428
marcozecchini 0:9fca2b23d0ba 2429 /**
marcozecchini 0:9fca2b23d0ba 2430 * The registered callback handler for radio notification events.
marcozecchini 0:9fca2b23d0ba 2431 */
marcozecchini 0:9fca2b23d0ba 2432 RadioNotificationEventCallback_t radioNotificationCallback;
marcozecchini 0:9fca2b23d0ba 2433
marcozecchini 0:9fca2b23d0ba 2434 /**
marcozecchini 0:9fca2b23d0ba 2435 * The registered callback handler for scanned advertisement packet
marcozecchini 0:9fca2b23d0ba 2436 * notifications.
marcozecchini 0:9fca2b23d0ba 2437 */
marcozecchini 0:9fca2b23d0ba 2438 AdvertisementReportCallback_t onAdvertisementReport;
marcozecchini 0:9fca2b23d0ba 2439
marcozecchini 0:9fca2b23d0ba 2440 /**
marcozecchini 0:9fca2b23d0ba 2441 * Callchain containing all registered callback handlers for connection
marcozecchini 0:9fca2b23d0ba 2442 * events.
marcozecchini 0:9fca2b23d0ba 2443 */
marcozecchini 0:9fca2b23d0ba 2444 ConnectionEventCallbackChain_t connectionCallChain;
marcozecchini 0:9fca2b23d0ba 2445
marcozecchini 0:9fca2b23d0ba 2446 /**
marcozecchini 0:9fca2b23d0ba 2447 * Callchain containing all registered callback handlers for disconnection
marcozecchini 0:9fca2b23d0ba 2448 * events.
marcozecchini 0:9fca2b23d0ba 2449 */
marcozecchini 0:9fca2b23d0ba 2450 DisconnectionEventCallbackChain_t disconnectionCallChain;
marcozecchini 0:9fca2b23d0ba 2451
marcozecchini 0:9fca2b23d0ba 2452 private:
marcozecchini 0:9fca2b23d0ba 2453 /**
marcozecchini 0:9fca2b23d0ba 2454 * Callchain containing all registered callback handlers for shutdown
marcozecchini 0:9fca2b23d0ba 2455 * events.
marcozecchini 0:9fca2b23d0ba 2456 */
marcozecchini 0:9fca2b23d0ba 2457 GapShutdownCallbackChain_t shutdownCallChain;
marcozecchini 0:9fca2b23d0ba 2458
marcozecchini 0:9fca2b23d0ba 2459 private:
marcozecchini 0:9fca2b23d0ba 2460 /* Disallow copy and assignment. */
marcozecchini 0:9fca2b23d0ba 2461 Gap(const Gap &);
marcozecchini 0:9fca2b23d0ba 2462 Gap& operator=(const Gap &);
marcozecchini 0:9fca2b23d0ba 2463 };
marcozecchini 0:9fca2b23d0ba 2464
marcozecchini 0:9fca2b23d0ba 2465 /**
marcozecchini 0:9fca2b23d0ba 2466 * @}
marcozecchini 0:9fca2b23d0ba 2467 * @}
marcozecchini 0:9fca2b23d0ba 2468 */
marcozecchini 0:9fca2b23d0ba 2469
marcozecchini 0:9fca2b23d0ba 2470 #endif // ifndef MBED_BLE_GAP_H__