this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Committer:
ocomeni
Date:
Thu Mar 14 21:34:06 2019 +0000
Revision:
75:08eff6258e1b
Ble Security example now working!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ocomeni 75:08eff6258e1b 1 /* mbed Microcontroller Library
ocomeni 75:08eff6258e1b 2 * Copyright (c) 2018 ARM Limited
ocomeni 75:08eff6258e1b 3 *
ocomeni 75:08eff6258e1b 4 * Licensed under the Apache License, Version 2.0 (the "License");
ocomeni 75:08eff6258e1b 5 * you may not use this file except in compliance with the License.
ocomeni 75:08eff6258e1b 6 * You may obtain a copy of the License at
ocomeni 75:08eff6258e1b 7 *
ocomeni 75:08eff6258e1b 8 * http://www.apache.org/licenses/LICENSE-2.0
ocomeni 75:08eff6258e1b 9 *
ocomeni 75:08eff6258e1b 10 * Unless required by applicable law or agreed to in writing, software
ocomeni 75:08eff6258e1b 11 * distributed under the License is distributed on an "AS IS" BASIS,
ocomeni 75:08eff6258e1b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ocomeni 75:08eff6258e1b 13 * See the License for the specific language governing permissions and
ocomeni 75:08eff6258e1b 14 * limitations under the License.
ocomeni 75:08eff6258e1b 15 */
ocomeni 75:08eff6258e1b 16
ocomeni 75:08eff6258e1b 17 #ifndef BLE_GAP_TYPES_H
ocomeni 75:08eff6258e1b 18 #define BLE_GAP_TYPES_H
ocomeni 75:08eff6258e1b 19
ocomeni 75:08eff6258e1b 20 #include "Duration.h"
ocomeni 75:08eff6258e1b 21 #include "Bounded.h"
ocomeni 75:08eff6258e1b 22 #include "ble/SafeEnum.h"
ocomeni 75:08eff6258e1b 23
ocomeni 75:08eff6258e1b 24 namespace ble {
ocomeni 75:08eff6258e1b 25
ocomeni 75:08eff6258e1b 26 /**
ocomeni 75:08eff6258e1b 27 * @addtogroup ble
ocomeni 75:08eff6258e1b 28 * @{
ocomeni 75:08eff6258e1b 29 * @addtogroup gap
ocomeni 75:08eff6258e1b 30 * @{
ocomeni 75:08eff6258e1b 31 */
ocomeni 75:08eff6258e1b 32
ocomeni 75:08eff6258e1b 33 /* BLE units, using microseconds as the common denominator */
ocomeni 75:08eff6258e1b 34
ocomeni 75:08eff6258e1b 35 /**
ocomeni 75:08eff6258e1b 36 * Time interval between two advertisements.
ocomeni 75:08eff6258e1b 37 *
ocomeni 75:08eff6258e1b 38 * The duration is in unit of 625µs and ranges from 0x20 to 0xFFFFFF .
ocomeni 75:08eff6258e1b 39 *
ocomeni 75:08eff6258e1b 40 * @note before Bluetooth 5 range was 0x20 to 0xFFFF.
ocomeni 75:08eff6258e1b 41 */
ocomeni 75:08eff6258e1b 42 typedef Duration<uint32_t, 625, Range<0x20, 0xFFFFFF> > adv_interval_t;
ocomeni 75:08eff6258e1b 43
ocomeni 75:08eff6258e1b 44 /**
ocomeni 75:08eff6258e1b 45 * Advertising process duration.
ocomeni 75:08eff6258e1b 46 *
ocomeni 75:08eff6258e1b 47 * The duration is in unit of 10ms and ranges from 0x0001 to 0xFFFF. The special
ocomeni 75:08eff6258e1b 48 * value 0x0000 means the advertising process never ends; it is accessible with
ocomeni 75:08eff6258e1b 49 * adv_duration_t::forever().
ocomeni 75:08eff6258e1b 50 */
ocomeni 75:08eff6258e1b 51 typedef Duration<uint16_t, 10000, Range<0x00, 0xFFFF>, /* forever */ Value<uint16_t, 0x0000> > adv_duration_t;
ocomeni 75:08eff6258e1b 52
ocomeni 75:08eff6258e1b 53 /**
ocomeni 75:08eff6258e1b 54 * Scan process duration.
ocomeni 75:08eff6258e1b 55 *
ocomeni 75:08eff6258e1b 56 * The duration is in unit of 10ms and ranges from 0x0001 to 0xFFFF. The special
ocomeni 75:08eff6258e1b 57 * value 0x0000 means the scan process never ends; it is accessible with
ocomeni 75:08eff6258e1b 58 * scan_duration_t::forever().
ocomeni 75:08eff6258e1b 59 */
ocomeni 75:08eff6258e1b 60 typedef Duration<uint16_t, 10000, Range<0x00, 0xFFFF>, /* forever */ Value<uint16_t, 0x0000> > scan_duration_t;
ocomeni 75:08eff6258e1b 61
ocomeni 75:08eff6258e1b 62 /**
ocomeni 75:08eff6258e1b 63 * Time interval between two scan processes.
ocomeni 75:08eff6258e1b 64 *
ocomeni 75:08eff6258e1b 65 * The duration is in unit of 1.28s and ranges from 0x0001 to 0xFFFF. The special
ocomeni 75:08eff6258e1b 66 * value 0x0000 is used to indicate that scan_period_t is not used.
ocomeni 75:08eff6258e1b 67 */
ocomeni 75:08eff6258e1b 68 typedef Duration<uint16_t, 1280000, Range<0x00, 0xFFFF> > scan_period_t;
ocomeni 75:08eff6258e1b 69
ocomeni 75:08eff6258e1b 70 /**
ocomeni 75:08eff6258e1b 71 * Time interval between two scans.
ocomeni 75:08eff6258e1b 72 *
ocomeni 75:08eff6258e1b 73 * The duration is in unit of 625µs and ranges from 0x04 to 0xFFFF.
ocomeni 75:08eff6258e1b 74 */
ocomeni 75:08eff6258e1b 75 typedef Duration<uint16_t, 625, Range<0x04, 0xFFFF> > scan_interval_t;
ocomeni 75:08eff6258e1b 76
ocomeni 75:08eff6258e1b 77 /**
ocomeni 75:08eff6258e1b 78 * Duration of a scan.
ocomeni 75:08eff6258e1b 79 *
ocomeni 75:08eff6258e1b 80 * The duration is in unit of 625µs and ranges from 0x04 to 0xFFFF.
ocomeni 75:08eff6258e1b 81 */
ocomeni 75:08eff6258e1b 82 typedef Duration<uint16_t, 625, Range<0x04, 0xFFFF> > scan_window_t;
ocomeni 75:08eff6258e1b 83
ocomeni 75:08eff6258e1b 84 /**
ocomeni 75:08eff6258e1b 85 * Time interval between two connection events.
ocomeni 75:08eff6258e1b 86 *
ocomeni 75:08eff6258e1b 87 * The interval is in unit of 1.250 milliseconds and ranges from 0x06 to 0xC80.
ocomeni 75:08eff6258e1b 88 */
ocomeni 75:08eff6258e1b 89 typedef Duration<uint16_t, 1250, Range<0x06, 0x0C80> > conn_interval_t;
ocomeni 75:08eff6258e1b 90
ocomeni 75:08eff6258e1b 91 /**
ocomeni 75:08eff6258e1b 92 * Time after which a connection is loss of devices have not exchanged data.
ocomeni 75:08eff6258e1b 93 *
ocomeni 75:08eff6258e1b 94 * The duration is in unit of 10 milliseconds and ranges from 0x0A to 0xC80.
ocomeni 75:08eff6258e1b 95 *
ocomeni 75:08eff6258e1b 96 * @note this time should be no larger than (1 + ConnLatency) * ConnIntervalMax * 2
ocomeni 75:08eff6258e1b 97 */
ocomeni 75:08eff6258e1b 98 typedef Duration<uint16_t, 10000, Range<0x0A, 0x0C80> > supervision_timeout_t;
ocomeni 75:08eff6258e1b 99
ocomeni 75:08eff6258e1b 100 /**
ocomeni 75:08eff6258e1b 101 * Duration of a connection event.
ocomeni 75:08eff6258e1b 102 *
ocomeni 75:08eff6258e1b 103 * The duration is in unit of 625µs and ranges from 0x0 to 0xFFFF .
ocomeni 75:08eff6258e1b 104 */
ocomeni 75:08eff6258e1b 105 typedef Duration<uint16_t, 625, Range<0, 0xFFFF> > conn_event_length_t;
ocomeni 75:08eff6258e1b 106
ocomeni 75:08eff6258e1b 107 /**
ocomeni 75:08eff6258e1b 108 * Time after which a periodic sync link is considered lost if the receiver hasn't
ocomeni 75:08eff6258e1b 109 * received anything from the advertiser.
ocomeni 75:08eff6258e1b 110 *
ocomeni 75:08eff6258e1b 111 * The duration is in unit of 10 milliseconds and ranges from 0x0A to 0x4000.
ocomeni 75:08eff6258e1b 112 */
ocomeni 75:08eff6258e1b 113 typedef Duration<uint16_t, 10000, Range<0x0A, 0x4000> > sync_timeout_t;
ocomeni 75:08eff6258e1b 114
ocomeni 75:08eff6258e1b 115 /**
ocomeni 75:08eff6258e1b 116 * Interval between two periodic advertising events.
ocomeni 75:08eff6258e1b 117 *
ocomeni 75:08eff6258e1b 118 * The duration is in unit of 1.250ms and ranges from 0x06 to 0xFFFF.
ocomeni 75:08eff6258e1b 119 */
ocomeni 75:08eff6258e1b 120 typedef Duration<uint16_t, 1250, Range<0x06, 0xFFFF> > periodic_interval_t;
ocomeni 75:08eff6258e1b 121
ocomeni 75:08eff6258e1b 122 /**
ocomeni 75:08eff6258e1b 123 * Number of connection events that can be skipped by the slave.
ocomeni 75:08eff6258e1b 124 *
ocomeni 75:08eff6258e1b 125 * It ranges from 0 to 0x1F3.
ocomeni 75:08eff6258e1b 126 */
ocomeni 75:08eff6258e1b 127 typedef Bounded<uint16_t, 0, 0x01F3> slave_latency_t;
ocomeni 75:08eff6258e1b 128
ocomeni 75:08eff6258e1b 129 /**
ocomeni 75:08eff6258e1b 130 * Handle of an advertising set.
ocomeni 75:08eff6258e1b 131 *
ocomeni 75:08eff6258e1b 132 * @note Range of valid handle is comprised between 0x00 and 0xEF.
ocomeni 75:08eff6258e1b 133 */
ocomeni 75:08eff6258e1b 134 typedef uint8_t advertising_handle_t;
ocomeni 75:08eff6258e1b 135
ocomeni 75:08eff6258e1b 136 /**
ocomeni 75:08eff6258e1b 137 * Handle of a sync representing a periodic advertiser.
ocomeni 75:08eff6258e1b 138 *
ocomeni 75:08eff6258e1b 139 * @note Range of valid handle is comprised between 0x0000 and 0xFFFF.
ocomeni 75:08eff6258e1b 140 */
ocomeni 75:08eff6258e1b 141 typedef uint16_t periodic_sync_handle_t;
ocomeni 75:08eff6258e1b 142
ocomeni 75:08eff6258e1b 143 /**
ocomeni 75:08eff6258e1b 144 * Encapsulates the peripheral advertising modes.
ocomeni 75:08eff6258e1b 145 *
ocomeni 75:08eff6258e1b 146 * It determines how the device appears to other scanner and peripheral
ocomeni 75:08eff6258e1b 147 * devices in the scanning range.
ocomeni 75:08eff6258e1b 148 */
ocomeni 75:08eff6258e1b 149 struct advertising_type_t : SafeEnum<advertising_type_t, uint8_t> {
ocomeni 75:08eff6258e1b 150 /// enumeration of advertising_type_t values
ocomeni 75:08eff6258e1b 151 enum type {
ocomeni 75:08eff6258e1b 152 /**
ocomeni 75:08eff6258e1b 153 * Device is connectable, scannable and doesn't expect connection from a
ocomeni 75:08eff6258e1b 154 * specific peer.
ocomeni 75:08eff6258e1b 155 *
ocomeni 75:08eff6258e1b 156 * @see Vol 3, Part C, Section 9.3.4 and Vol 6, Part B, Section 2.3.1.1.
ocomeni 75:08eff6258e1b 157 */
ocomeni 75:08eff6258e1b 158 CONNECTABLE_UNDIRECTED = 0x00,
ocomeni 75:08eff6258e1b 159
ocomeni 75:08eff6258e1b 160 /**
ocomeni 75:08eff6258e1b 161 * Device is connectable and expects connection from a specific peer.
ocomeni 75:08eff6258e1b 162 * (3.75 ms or smaller Advertising Interval)
ocomeni 75:08eff6258e1b 163 * @see Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2.
ocomeni 75:08eff6258e1b 164 */
ocomeni 75:08eff6258e1b 165 CONNECTABLE_DIRECTED = 0x01,
ocomeni 75:08eff6258e1b 166
ocomeni 75:08eff6258e1b 167 /**
ocomeni 75:08eff6258e1b 168 * Device is scannable but not connectable.
ocomeni 75:08eff6258e1b 169 *
ocomeni 75:08eff6258e1b 170 * @see Vol 6, Part B, Section 2.3.1.4.
ocomeni 75:08eff6258e1b 171 */
ocomeni 75:08eff6258e1b 172 SCANNABLE_UNDIRECTED = 0x02,
ocomeni 75:08eff6258e1b 173
ocomeni 75:08eff6258e1b 174 /**
ocomeni 75:08eff6258e1b 175 * Device is not connectable and not scannable.
ocomeni 75:08eff6258e1b 176 *
ocomeni 75:08eff6258e1b 177 * @see Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3.
ocomeni 75:08eff6258e1b 178 */
ocomeni 75:08eff6258e1b 179 NON_CONNECTABLE_UNDIRECTED = 0x03,
ocomeni 75:08eff6258e1b 180
ocomeni 75:08eff6258e1b 181 /**
ocomeni 75:08eff6258e1b 182 * Device is connectable and expects connection from a specific peer (sent at long user set intervals).
ocomeni 75:08eff6258e1b 183 */
ocomeni 75:08eff6258e1b 184 CONNECTABLE_DIRECTED_LOW_DUTY = 0x04,
ocomeni 75:08eff6258e1b 185
ocomeni 75:08eff6258e1b 186 #if !defined(DOXYGEN_ONLY)
ocomeni 75:08eff6258e1b 187 // used by the PAL; naming in line with the the spec.
ocomeni 75:08eff6258e1b 188 ADV_IND = 0x00,
ocomeni 75:08eff6258e1b 189 ADV_DIRECT_IND = 0x01,
ocomeni 75:08eff6258e1b 190 ADV_SCAN_IND = 0x02,
ocomeni 75:08eff6258e1b 191 ADV_NONCONN_IND = 0x03,
ocomeni 75:08eff6258e1b 192 ADV_DIRECT_IND_LOW_DUTY_CYCLE = 0x04
ocomeni 75:08eff6258e1b 193 #endif
ocomeni 75:08eff6258e1b 194 };
ocomeni 75:08eff6258e1b 195
ocomeni 75:08eff6258e1b 196 /**
ocomeni 75:08eff6258e1b 197 * Construct a new advertising_type_t value.
ocomeni 75:08eff6258e1b 198 *
ocomeni 75:08eff6258e1b 199 * @param value The value of the advertising_type_t created.
ocomeni 75:08eff6258e1b 200 */
ocomeni 75:08eff6258e1b 201 advertising_type_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 202 {
ocomeni 75:08eff6258e1b 203 }
ocomeni 75:08eff6258e1b 204 };
ocomeni 75:08eff6258e1b 205
ocomeni 75:08eff6258e1b 206
ocomeni 75:08eff6258e1b 207 /** Used to indicate if the packet is complete and if it's truncated.
ocomeni 75:08eff6258e1b 208 */
ocomeni 75:08eff6258e1b 209 struct advertising_data_status_t : SafeEnum<advertising_data_status_t, uint8_t> {
ocomeni 75:08eff6258e1b 210 /// enumeration of advertising_data_status_t values
ocomeni 75:08eff6258e1b 211 enum type {
ocomeni 75:08eff6258e1b 212 COMPLETE = 0x00, /// Advertising payload complete.
ocomeni 75:08eff6258e1b 213 INCOMPLETE_MORE_DATA = 0x01, /// Partial advertising payload, more to come.
ocomeni 75:08eff6258e1b 214 INCOMPLETE_DATA_TRUNCATED = 0x02 /// Advertising payload incomplete, and no more is coming.
ocomeni 75:08eff6258e1b 215 };
ocomeni 75:08eff6258e1b 216
ocomeni 75:08eff6258e1b 217 /**
ocomeni 75:08eff6258e1b 218 * Construct a new advertising_data_status_t value.
ocomeni 75:08eff6258e1b 219 *
ocomeni 75:08eff6258e1b 220 * @param value The value of the advertising_data_status_t created.
ocomeni 75:08eff6258e1b 221 */
ocomeni 75:08eff6258e1b 222 advertising_data_status_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 223 {
ocomeni 75:08eff6258e1b 224 }
ocomeni 75:08eff6258e1b 225
ocomeni 75:08eff6258e1b 226 #if !defined(DOXYGEN_ONLY)
ocomeni 75:08eff6258e1b 227
ocomeni 75:08eff6258e1b 228 /**
ocomeni 75:08eff6258e1b 229 * Explicit constructor from a raw value.
ocomeni 75:08eff6258e1b 230 */
ocomeni 75:08eff6258e1b 231 explicit advertising_data_status_t(uint8_t raw_value) :
ocomeni 75:08eff6258e1b 232 SafeEnum(raw_value)
ocomeni 75:08eff6258e1b 233 {
ocomeni 75:08eff6258e1b 234 }
ocomeni 75:08eff6258e1b 235
ocomeni 75:08eff6258e1b 236 #endif
ocomeni 75:08eff6258e1b 237
ocomeni 75:08eff6258e1b 238 };
ocomeni 75:08eff6258e1b 239
ocomeni 75:08eff6258e1b 240 /** Properties of an advertising event.
ocomeni 75:08eff6258e1b 241 */
ocomeni 75:08eff6258e1b 242 struct advertising_event_t {
ocomeni 75:08eff6258e1b 243
ocomeni 75:08eff6258e1b 244 private:
ocomeni 75:08eff6258e1b 245 // Implementation note: The object is constructed from the field Event_Type
ocomeni 75:08eff6258e1b 246 // of an LE Extended Advertising.
ocomeni 75:08eff6258e1b 247 // Indexes and functions of bits are defined in BLUETOOTH SPECIFICATION
ocomeni 75:08eff6258e1b 248 // Version 5.0 | Vol 2, Part E -
ocomeni 75:08eff6258e1b 249 // Section 7.7.65.13 LE Extended Advertising report Event
ocomeni 75:08eff6258e1b 250 enum {
ocomeni 75:08eff6258e1b 251 CONNECTABLE_BIT = 0,
ocomeni 75:08eff6258e1b 252 SCANNABLE_ADVERTISING_BIT = 1,
ocomeni 75:08eff6258e1b 253 DIRECTED_ADVERTISING_BIT = 2,
ocomeni 75:08eff6258e1b 254 SCAN_RESPONSE_BIT = 3,
ocomeni 75:08eff6258e1b 255 LEGACY_PDU_BIT = 4,
ocomeni 75:08eff6258e1b 256 DATA_STATUS_INDEX = 5,
ocomeni 75:08eff6258e1b 257 DATA_STATUS_MASK = 0x03
ocomeni 75:08eff6258e1b 258 };
ocomeni 75:08eff6258e1b 259
ocomeni 75:08eff6258e1b 260 public:
ocomeni 75:08eff6258e1b 261
ocomeni 75:08eff6258e1b 262 #if !defined(DOXYGEN_ONLY)
ocomeni 75:08eff6258e1b 263
ocomeni 75:08eff6258e1b 264 /** Create based on a raw value.
ocomeni 75:08eff6258e1b 265 *
ocomeni 75:08eff6258e1b 266 * @param value
ocomeni 75:08eff6258e1b 267 */
ocomeni 75:08eff6258e1b 268 explicit advertising_event_t(uint8_t value) : value(value)
ocomeni 75:08eff6258e1b 269 {
ocomeni 75:08eff6258e1b 270 }
ocomeni 75:08eff6258e1b 271
ocomeni 75:08eff6258e1b 272 #endif
ocomeni 75:08eff6258e1b 273
ocomeni 75:08eff6258e1b 274 /** Is advertising connectable.
ocomeni 75:08eff6258e1b 275 *
ocomeni 75:08eff6258e1b 276 * @return True if connectable.
ocomeni 75:08eff6258e1b 277 */
ocomeni 75:08eff6258e1b 278 bool connectable() const
ocomeni 75:08eff6258e1b 279 {
ocomeni 75:08eff6258e1b 280 return static_cast<bool>(value & (1 << CONNECTABLE_BIT));
ocomeni 75:08eff6258e1b 281 }
ocomeni 75:08eff6258e1b 282
ocomeni 75:08eff6258e1b 283 /** Is advertising scannable.
ocomeni 75:08eff6258e1b 284 *
ocomeni 75:08eff6258e1b 285 * @return True if scannable
ocomeni 75:08eff6258e1b 286 */
ocomeni 75:08eff6258e1b 287 bool scannable_advertising() const
ocomeni 75:08eff6258e1b 288 {
ocomeni 75:08eff6258e1b 289 return static_cast<bool>(value & (1 << SCANNABLE_ADVERTISING_BIT));
ocomeni 75:08eff6258e1b 290 }
ocomeni 75:08eff6258e1b 291
ocomeni 75:08eff6258e1b 292 /** Is advertising directed.
ocomeni 75:08eff6258e1b 293 *
ocomeni 75:08eff6258e1b 294 * @return True if directed.
ocomeni 75:08eff6258e1b 295 */
ocomeni 75:08eff6258e1b 296 bool directed_advertising() const
ocomeni 75:08eff6258e1b 297 {
ocomeni 75:08eff6258e1b 298 return static_cast<bool>(value & (1 << DIRECTED_ADVERTISING_BIT));
ocomeni 75:08eff6258e1b 299 }
ocomeni 75:08eff6258e1b 300
ocomeni 75:08eff6258e1b 301 /** Is this a scan response.
ocomeni 75:08eff6258e1b 302 *
ocomeni 75:08eff6258e1b 303 * @return True if scan response.
ocomeni 75:08eff6258e1b 304 */
ocomeni 75:08eff6258e1b 305 bool scan_response() const
ocomeni 75:08eff6258e1b 306 {
ocomeni 75:08eff6258e1b 307 return static_cast<bool>(value & (1 << SCAN_RESPONSE_BIT));
ocomeni 75:08eff6258e1b 308 }
ocomeni 75:08eff6258e1b 309
ocomeni 75:08eff6258e1b 310 /** Is this legacy advertising.
ocomeni 75:08eff6258e1b 311 *
ocomeni 75:08eff6258e1b 312 * @return True if legacy.
ocomeni 75:08eff6258e1b 313 */
ocomeni 75:08eff6258e1b 314 bool legacy_advertising() const
ocomeni 75:08eff6258e1b 315 {
ocomeni 75:08eff6258e1b 316 return static_cast<bool>(value & (1 << LEGACY_PDU_BIT));
ocomeni 75:08eff6258e1b 317 }
ocomeni 75:08eff6258e1b 318
ocomeni 75:08eff6258e1b 319 /** Payload completeness status.
ocomeni 75:08eff6258e1b 320 *
ocomeni 75:08eff6258e1b 321 * @return @see advertising_data_status_t for details.
ocomeni 75:08eff6258e1b 322 */
ocomeni 75:08eff6258e1b 323 advertising_data_status_t data_status() const
ocomeni 75:08eff6258e1b 324 {
ocomeni 75:08eff6258e1b 325 return static_cast<advertising_data_status_t::type>(
ocomeni 75:08eff6258e1b 326 (value >> DATA_STATUS_INDEX) & DATA_STATUS_MASK
ocomeni 75:08eff6258e1b 327 );
ocomeni 75:08eff6258e1b 328 }
ocomeni 75:08eff6258e1b 329
ocomeni 75:08eff6258e1b 330 /** Is payload complete.
ocomeni 75:08eff6258e1b 331 *
ocomeni 75:08eff6258e1b 332 * @return True if payload is coplete.
ocomeni 75:08eff6258e1b 333 */
ocomeni 75:08eff6258e1b 334 bool complete() const
ocomeni 75:08eff6258e1b 335 {
ocomeni 75:08eff6258e1b 336 return data_status() == advertising_data_status_t::COMPLETE;
ocomeni 75:08eff6258e1b 337 }
ocomeni 75:08eff6258e1b 338
ocomeni 75:08eff6258e1b 339 /** Is there more data coming.
ocomeni 75:08eff6258e1b 340 *
ocomeni 75:08eff6258e1b 341 * @return True if more data coming.
ocomeni 75:08eff6258e1b 342 */
ocomeni 75:08eff6258e1b 343 bool more_data_to_come() const
ocomeni 75:08eff6258e1b 344 {
ocomeni 75:08eff6258e1b 345 return data_status() == advertising_data_status_t::INCOMPLETE_MORE_DATA;
ocomeni 75:08eff6258e1b 346 }
ocomeni 75:08eff6258e1b 347
ocomeni 75:08eff6258e1b 348 /** Is the payload truncated.
ocomeni 75:08eff6258e1b 349 *
ocomeni 75:08eff6258e1b 350 * @return True if no more data coming.
ocomeni 75:08eff6258e1b 351 */
ocomeni 75:08eff6258e1b 352 bool truncated() const
ocomeni 75:08eff6258e1b 353 {
ocomeni 75:08eff6258e1b 354 return data_status() == advertising_data_status_t::INCOMPLETE_DATA_TRUNCATED;
ocomeni 75:08eff6258e1b 355 }
ocomeni 75:08eff6258e1b 356
ocomeni 75:08eff6258e1b 357 private:
ocomeni 75:08eff6258e1b 358 uint8_t value;
ocomeni 75:08eff6258e1b 359 };
ocomeni 75:08eff6258e1b 360
ocomeni 75:08eff6258e1b 361 /**
ocomeni 75:08eff6258e1b 362 * Identify an advertising SID. Range: [0x00, 0x0F]
ocomeni 75:08eff6258e1b 363 */
ocomeni 75:08eff6258e1b 364 typedef uint8_t advertising_sid_t;
ocomeni 75:08eff6258e1b 365
ocomeni 75:08eff6258e1b 366 /** Received signal strength. Range <-127, 20>.
ocomeni 75:08eff6258e1b 367 * @note Special value 127 means RSSI is not available. */
ocomeni 75:08eff6258e1b 368 typedef int8_t rssi_t;
ocomeni 75:08eff6258e1b 369
ocomeni 75:08eff6258e1b 370 /**
ocomeni 75:08eff6258e1b 371 * Describe the advertising power.
ocomeni 75:08eff6258e1b 372 *
ocomeni 75:08eff6258e1b 373 * Values between -127 and +126 are considered power values in dBm while
ocomeni 75:08eff6258e1b 374 * the special value 127 can be used as a wildcard to indicate that the host
ocomeni 75:08eff6258e1b 375 * has no preference or if the power information is not available.
ocomeni 75:08eff6258e1b 376 */
ocomeni 75:08eff6258e1b 377 typedef int8_t advertising_power_t;
ocomeni 75:08eff6258e1b 378
ocomeni 75:08eff6258e1b 379 /**
ocomeni 75:08eff6258e1b 380 * Advertising policy filter modes.
ocomeni 75:08eff6258e1b 381 *
ocomeni 75:08eff6258e1b 382 * @see Bluetooth Core Specification 4.2 (Vol. 6), Part B, Section 4.3.2.
ocomeni 75:08eff6258e1b 383 */
ocomeni 75:08eff6258e1b 384 struct advertising_filter_policy_t : SafeEnum<advertising_filter_policy_t, uint8_t> {
ocomeni 75:08eff6258e1b 385 /// enumeration of advertising_filter_policy_t values
ocomeni 75:08eff6258e1b 386 enum type {
ocomeni 75:08eff6258e1b 387 /**
ocomeni 75:08eff6258e1b 388 * Process connection and scan requests from all devices. The whitelist is
ocomeni 75:08eff6258e1b 389 * not used.
ocomeni 75:08eff6258e1b 390 */
ocomeni 75:08eff6258e1b 391 NO_FILTER = 0x00,
ocomeni 75:08eff6258e1b 392
ocomeni 75:08eff6258e1b 393 /**
ocomeni 75:08eff6258e1b 394 * Process connection requests from all devices but filter out scan requests
ocomeni 75:08eff6258e1b 395 * of devices that are not in the whitelist.
ocomeni 75:08eff6258e1b 396 */
ocomeni 75:08eff6258e1b 397 FILTER_SCAN_REQUESTS = 0x01,
ocomeni 75:08eff6258e1b 398
ocomeni 75:08eff6258e1b 399 /**
ocomeni 75:08eff6258e1b 400 * Process scan requests from all devices but filter out connection requests
ocomeni 75:08eff6258e1b 401 * of devices that are not in the whitelist.
ocomeni 75:08eff6258e1b 402 */
ocomeni 75:08eff6258e1b 403 FILTER_CONNECTION_REQUEST = 0x02,
ocomeni 75:08eff6258e1b 404
ocomeni 75:08eff6258e1b 405 /**
ocomeni 75:08eff6258e1b 406 * Filter out scan or connection requests of devices that are not in the
ocomeni 75:08eff6258e1b 407 * whitelist.
ocomeni 75:08eff6258e1b 408 */
ocomeni 75:08eff6258e1b 409 FILTER_SCAN_AND_CONNECTION_REQUESTS = 0x03
ocomeni 75:08eff6258e1b 410 };
ocomeni 75:08eff6258e1b 411
ocomeni 75:08eff6258e1b 412 /**
ocomeni 75:08eff6258e1b 413 * Construct a advertising_filter_policy_t.
ocomeni 75:08eff6258e1b 414 * @param value The value of the advertising_filter_policy_t created.
ocomeni 75:08eff6258e1b 415 */
ocomeni 75:08eff6258e1b 416 advertising_filter_policy_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 417 {
ocomeni 75:08eff6258e1b 418 }
ocomeni 75:08eff6258e1b 419 };
ocomeni 75:08eff6258e1b 420
ocomeni 75:08eff6258e1b 421 /**
ocomeni 75:08eff6258e1b 422 * Scanning policy filter mode.
ocomeni 75:08eff6258e1b 423 *
ocomeni 75:08eff6258e1b 424 * @see Bluetooth Core Specification 4.2 (Vol. 6), Part B, Section 4.3.3.
ocomeni 75:08eff6258e1b 425 */
ocomeni 75:08eff6258e1b 426 struct scanning_filter_policy_t : SafeEnum<scanning_filter_policy_t, uint8_t> {
ocomeni 75:08eff6258e1b 427 /// enumeration of scanning_filter_policy_t values
ocomeni 75:08eff6258e1b 428 enum type {
ocomeni 75:08eff6258e1b 429 /**
ocomeni 75:08eff6258e1b 430 * Accept all advertising packets except directed advertising packets not
ocomeni 75:08eff6258e1b 431 * addressed to this device.
ocomeni 75:08eff6258e1b 432 */
ocomeni 75:08eff6258e1b 433 NO_FILTER = 0x00,
ocomeni 75:08eff6258e1b 434
ocomeni 75:08eff6258e1b 435 /**
ocomeni 75:08eff6258e1b 436 * Accept only advertising packets from devices in the whitelist except
ocomeni 75:08eff6258e1b 437 * directed advertising packets not addressed to this device.
ocomeni 75:08eff6258e1b 438 */
ocomeni 75:08eff6258e1b 439 FILTER_ADVERTISING = 0x01,
ocomeni 75:08eff6258e1b 440
ocomeni 75:08eff6258e1b 441 /**
ocomeni 75:08eff6258e1b 442 * Accept all advertising packets except directed advertising packets
ocomeni 75:08eff6258e1b 443 * where the initiator's identity address does not address this device.
ocomeni 75:08eff6258e1b 444 *
ocomeni 75:08eff6258e1b 445 * @note Directed advertising packets where the initiator's address is a
ocomeni 75:08eff6258e1b 446 * resolvable private address that cannot be resolved are also accepted.
ocomeni 75:08eff6258e1b 447 */
ocomeni 75:08eff6258e1b 448 NO_FILTER_INCLUDE_UNRESOLVABLE_DIRECTED = 2,
ocomeni 75:08eff6258e1b 449
ocomeni 75:08eff6258e1b 450 /**
ocomeni 75:08eff6258e1b 451 * Accept all advertising packets except:
ocomeni 75:08eff6258e1b 452 * - Advertising packets where the advertiser's
ocomeni 75:08eff6258e1b 453 * identity address is not in the whitelist.
ocomeni 75:08eff6258e1b 454 * - Directed advertising packets where the initiator's identity address
ocomeni 75:08eff6258e1b 455 * does not address this device.
ocomeni 75:08eff6258e1b 456 *
ocomeni 75:08eff6258e1b 457 * @note Directed advertising packets where the initiator's address is a
ocomeni 75:08eff6258e1b 458 * resolvable private address that cannot be resolved are also accepted.
ocomeni 75:08eff6258e1b 459 */
ocomeni 75:08eff6258e1b 460 FILTER_ADVERTISING_INCLUDE_UNRESOLVABLE_DIRECTED = 3
ocomeni 75:08eff6258e1b 461 };
ocomeni 75:08eff6258e1b 462
ocomeni 75:08eff6258e1b 463 /**
ocomeni 75:08eff6258e1b 464 * Construct a new instance of scanning_filter_policy_t.
ocomeni 75:08eff6258e1b 465 *
ocomeni 75:08eff6258e1b 466 * @param value The value of the scanning_filter_policy_t created.
ocomeni 75:08eff6258e1b 467 */
ocomeni 75:08eff6258e1b 468 scanning_filter_policy_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 469 {
ocomeni 75:08eff6258e1b 470 }
ocomeni 75:08eff6258e1b 471 };
ocomeni 75:08eff6258e1b 472
ocomeni 75:08eff6258e1b 473 /**
ocomeni 75:08eff6258e1b 474 * Filter policy that you can use during connection initiation.
ocomeni 75:08eff6258e1b 475 */
ocomeni 75:08eff6258e1b 476 struct initiator_filter_policy_t : SafeEnum<initiator_filter_policy_t, uint8_t> {
ocomeni 75:08eff6258e1b 477 /// enumeration of initiator_filter_policy_t values.
ocomeni 75:08eff6258e1b 478 enum type {
ocomeni 75:08eff6258e1b 479 /**
ocomeni 75:08eff6258e1b 480 * The whitelist is not used to determine which advertiser to connect to.
ocomeni 75:08eff6258e1b 481 */
ocomeni 75:08eff6258e1b 482 NO_FILTER,
ocomeni 75:08eff6258e1b 483
ocomeni 75:08eff6258e1b 484 /**
ocomeni 75:08eff6258e1b 485 * The whitelist is used to determine which advertiser to connect to.
ocomeni 75:08eff6258e1b 486 */
ocomeni 75:08eff6258e1b 487 USE_WHITE_LIST
ocomeni 75:08eff6258e1b 488 };
ocomeni 75:08eff6258e1b 489
ocomeni 75:08eff6258e1b 490 /**
ocomeni 75:08eff6258e1b 491 * Construct a initiator_filter_policy_t.
ocomeni 75:08eff6258e1b 492 * @param value The value of the initiator_filter_policy_t.
ocomeni 75:08eff6258e1b 493 */
ocomeni 75:08eff6258e1b 494 initiator_filter_policy_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 495 {
ocomeni 75:08eff6258e1b 496 }
ocomeni 75:08eff6258e1b 497 };
ocomeni 75:08eff6258e1b 498
ocomeni 75:08eff6258e1b 499 /**
ocomeni 75:08eff6258e1b 500 * Scanning policy filter mode.
ocomeni 75:08eff6258e1b 501 *
ocomeni 75:08eff6258e1b 502 * @see Bluetooth Core Specification 4.2 (Vol. 6), Part B, Section 4.3.3.
ocomeni 75:08eff6258e1b 503 */
ocomeni 75:08eff6258e1b 504 struct duplicates_filter_t : SafeEnum<duplicates_filter_t, uint8_t> {
ocomeni 75:08eff6258e1b 505 /// enumeration of duplicates_filter_t values
ocomeni 75:08eff6258e1b 506 enum type {
ocomeni 75:08eff6258e1b 507 /**
ocomeni 75:08eff6258e1b 508 * Disable duplicate filtering.
ocomeni 75:08eff6258e1b 509 */
ocomeni 75:08eff6258e1b 510 DISABLE,
ocomeni 75:08eff6258e1b 511
ocomeni 75:08eff6258e1b 512 /**
ocomeni 75:08eff6258e1b 513 * Enable duplicate filtering.
ocomeni 75:08eff6258e1b 514 */
ocomeni 75:08eff6258e1b 515 ENABLE,
ocomeni 75:08eff6258e1b 516
ocomeni 75:08eff6258e1b 517 /**
ocomeni 75:08eff6258e1b 518 * Enable duplicate filtering, and reset the cache periodically.
ocomeni 75:08eff6258e1b 519 */
ocomeni 75:08eff6258e1b 520 PERIODIC_RESET
ocomeni 75:08eff6258e1b 521 };
ocomeni 75:08eff6258e1b 522
ocomeni 75:08eff6258e1b 523 /**
ocomeni 75:08eff6258e1b 524 * Construct a new duplicates_filter_t value.
ocomeni 75:08eff6258e1b 525 * @param value The value of the duplicates_filter_t created.
ocomeni 75:08eff6258e1b 526 */
ocomeni 75:08eff6258e1b 527 duplicates_filter_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 528 {
ocomeni 75:08eff6258e1b 529 }
ocomeni 75:08eff6258e1b 530 };
ocomeni 75:08eff6258e1b 531
ocomeni 75:08eff6258e1b 532 /**
ocomeni 75:08eff6258e1b 533 * Type used to model the own address used during the following GAP operations:
ocomeni 75:08eff6258e1b 534 * advertising, scanning and initiating
ocomeni 75:08eff6258e1b 535 */
ocomeni 75:08eff6258e1b 536 struct own_address_type_t : SafeEnum<own_address_type_t, uint8_t> {
ocomeni 75:08eff6258e1b 537 /// enumeration of own_address_type_t values.
ocomeni 75:08eff6258e1b 538 enum type {
ocomeni 75:08eff6258e1b 539 /**
ocomeni 75:08eff6258e1b 540 * Use the public device address.
ocomeni 75:08eff6258e1b 541 */
ocomeni 75:08eff6258e1b 542 PUBLIC = 0x00,
ocomeni 75:08eff6258e1b 543
ocomeni 75:08eff6258e1b 544 /**
ocomeni 75:08eff6258e1b 545 * Use the random device address.
ocomeni 75:08eff6258e1b 546 */
ocomeni 75:08eff6258e1b 547 RANDOM = 0x01,
ocomeni 75:08eff6258e1b 548
ocomeni 75:08eff6258e1b 549 /**
ocomeni 75:08eff6258e1b 550 * Generated resolvable private address based on the local IRK from the
ocomeni 75:08eff6258e1b 551 * resolving list. Use the public address if no entry match in the resolving
ocomeni 75:08eff6258e1b 552 * list.
ocomeni 75:08eff6258e1b 553 */
ocomeni 75:08eff6258e1b 554 RESOLVABLE_PRIVATE_ADDRESS_PUBLIC_FALLBACK = 0x02,
ocomeni 75:08eff6258e1b 555
ocomeni 75:08eff6258e1b 556 /**
ocomeni 75:08eff6258e1b 557 * Generated resolvable private address based on the local IRK from the
ocomeni 75:08eff6258e1b 558 * resolving list. Use the random address if no entry match in the resolving
ocomeni 75:08eff6258e1b 559 * list.
ocomeni 75:08eff6258e1b 560 */
ocomeni 75:08eff6258e1b 561 RESOLVABLE_PRIVATE_ADDRESS_RANDOM_FALLBACK = 0x03,
ocomeni 75:08eff6258e1b 562 };
ocomeni 75:08eff6258e1b 563
ocomeni 75:08eff6258e1b 564 /**
ocomeni 75:08eff6258e1b 565 * Construct a new instance of own_address_type_t.
ocomeni 75:08eff6258e1b 566 * @param value The value of the own_address_type_t created.
ocomeni 75:08eff6258e1b 567 */
ocomeni 75:08eff6258e1b 568 own_address_type_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 569 {
ocomeni 75:08eff6258e1b 570 }
ocomeni 75:08eff6258e1b 571 };
ocomeni 75:08eff6258e1b 572
ocomeni 75:08eff6258e1b 573 /**
ocomeni 75:08eff6258e1b 574 * Type of an address to connect to.
ocomeni 75:08eff6258e1b 575 *
ocomeni 75:08eff6258e1b 576 * It is used to connect to a device directly with directed advertising.
ocomeni 75:08eff6258e1b 577 */
ocomeni 75:08eff6258e1b 578 struct target_peer_address_type_t : SafeEnum<target_peer_address_type_t, uint8_t> {
ocomeni 75:08eff6258e1b 579 /// enumeration of target_peer_address_type_t values.
ocomeni 75:08eff6258e1b 580 enum type {
ocomeni 75:08eff6258e1b 581 PUBLIC = 0x00, /**< Public Device Address or Public Identity Address. */
ocomeni 75:08eff6258e1b 582 RANDOM = 0x01, /**< Random Device Address or Random (static) Identity Address. */
ocomeni 75:08eff6258e1b 583 };
ocomeni 75:08eff6258e1b 584
ocomeni 75:08eff6258e1b 585 /**
ocomeni 75:08eff6258e1b 586 * Create a new target_peer_address_type_t.
ocomeni 75:08eff6258e1b 587 * @param value The value of the target_peer_address_type_t created.
ocomeni 75:08eff6258e1b 588 */
ocomeni 75:08eff6258e1b 589 target_peer_address_type_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 590 {
ocomeni 75:08eff6258e1b 591 }
ocomeni 75:08eff6258e1b 592 };
ocomeni 75:08eff6258e1b 593
ocomeni 75:08eff6258e1b 594 /**
ocomeni 75:08eff6258e1b 595 * Accuracy of the master clock.
ocomeni 75:08eff6258e1b 596 */
ocomeni 75:08eff6258e1b 597 struct clock_accuracy_t : SafeEnum<clock_accuracy_t, uint8_t> {
ocomeni 75:08eff6258e1b 598 /// enumeration of clock_accuracy_t values.
ocomeni 75:08eff6258e1b 599 enum type {
ocomeni 75:08eff6258e1b 600 /**
ocomeni 75:08eff6258e1b 601 * 500 PPM
ocomeni 75:08eff6258e1b 602 */
ocomeni 75:08eff6258e1b 603 PPM_500 = 0x00,
ocomeni 75:08eff6258e1b 604
ocomeni 75:08eff6258e1b 605 /**
ocomeni 75:08eff6258e1b 606 * 250 PPM
ocomeni 75:08eff6258e1b 607 */
ocomeni 75:08eff6258e1b 608 PPM_250 = 0x01,
ocomeni 75:08eff6258e1b 609
ocomeni 75:08eff6258e1b 610 /**
ocomeni 75:08eff6258e1b 611 * 150 PPM
ocomeni 75:08eff6258e1b 612 */
ocomeni 75:08eff6258e1b 613 PPM_150 = 0x02,
ocomeni 75:08eff6258e1b 614
ocomeni 75:08eff6258e1b 615 /**
ocomeni 75:08eff6258e1b 616 * 100 PPM
ocomeni 75:08eff6258e1b 617 */
ocomeni 75:08eff6258e1b 618 PPM_100 = 0x03,
ocomeni 75:08eff6258e1b 619
ocomeni 75:08eff6258e1b 620 /**
ocomeni 75:08eff6258e1b 621 * 75 PPM
ocomeni 75:08eff6258e1b 622 */
ocomeni 75:08eff6258e1b 623 PPM_75 = 0x04,
ocomeni 75:08eff6258e1b 624
ocomeni 75:08eff6258e1b 625 /**
ocomeni 75:08eff6258e1b 626 * 50 PPM
ocomeni 75:08eff6258e1b 627 */
ocomeni 75:08eff6258e1b 628 PPM_50 = 0x05,
ocomeni 75:08eff6258e1b 629
ocomeni 75:08eff6258e1b 630 /**
ocomeni 75:08eff6258e1b 631 * 30 PPM
ocomeni 75:08eff6258e1b 632 */
ocomeni 75:08eff6258e1b 633 PPM_30 = 0x06,
ocomeni 75:08eff6258e1b 634
ocomeni 75:08eff6258e1b 635 /**
ocomeni 75:08eff6258e1b 636 * 20 PPM
ocomeni 75:08eff6258e1b 637 */
ocomeni 75:08eff6258e1b 638 PPM_20 = 0x07
ocomeni 75:08eff6258e1b 639 };
ocomeni 75:08eff6258e1b 640
ocomeni 75:08eff6258e1b 641 /** Get clock accuracy.
ocomeni 75:08eff6258e1b 642 *
ocomeni 75:08eff6258e1b 643 * @return Parts per million as a number.
ocomeni 75:08eff6258e1b 644 */
ocomeni 75:08eff6258e1b 645 uint16_t get_ppm()
ocomeni 75:08eff6258e1b 646 {
ocomeni 75:08eff6258e1b 647 switch (value()) {
ocomeni 75:08eff6258e1b 648 case PPM_500:
ocomeni 75:08eff6258e1b 649 return 500;
ocomeni 75:08eff6258e1b 650 case PPM_250:
ocomeni 75:08eff6258e1b 651 return 250;
ocomeni 75:08eff6258e1b 652 case PPM_150:
ocomeni 75:08eff6258e1b 653 return 150;
ocomeni 75:08eff6258e1b 654 case PPM_100:
ocomeni 75:08eff6258e1b 655 return 100;
ocomeni 75:08eff6258e1b 656 case PPM_75:
ocomeni 75:08eff6258e1b 657 return 75;
ocomeni 75:08eff6258e1b 658 case PPM_50:
ocomeni 75:08eff6258e1b 659 return 50;
ocomeni 75:08eff6258e1b 660 case PPM_30:
ocomeni 75:08eff6258e1b 661 return 30;
ocomeni 75:08eff6258e1b 662 case PPM_20:
ocomeni 75:08eff6258e1b 663 return 20;
ocomeni 75:08eff6258e1b 664 default:
ocomeni 75:08eff6258e1b 665 return 0;
ocomeni 75:08eff6258e1b 666 }
ocomeni 75:08eff6258e1b 667 }
ocomeni 75:08eff6258e1b 668
ocomeni 75:08eff6258e1b 669 /**
ocomeni 75:08eff6258e1b 670 * Construct a new clock_accuracy_t value.
ocomeni 75:08eff6258e1b 671 * @param value The value of the clock_accuracy_t created.
ocomeni 75:08eff6258e1b 672 */
ocomeni 75:08eff6258e1b 673 clock_accuracy_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 674 {
ocomeni 75:08eff6258e1b 675 }
ocomeni 75:08eff6258e1b 676
ocomeni 75:08eff6258e1b 677 #if !defined(DOXYGEN_ONLY)
ocomeni 75:08eff6258e1b 678
ocomeni 75:08eff6258e1b 679 /**
ocomeni 75:08eff6258e1b 680 * Construct a new clock_accuracy_t value from a raw value.
ocomeni 75:08eff6258e1b 681 * @param raw_value The value of the clock accuracy.
ocomeni 75:08eff6258e1b 682 */
ocomeni 75:08eff6258e1b 683 explicit clock_accuracy_t(uint8_t raw_value) : SafeEnum(raw_value)
ocomeni 75:08eff6258e1b 684 {
ocomeni 75:08eff6258e1b 685 }
ocomeni 75:08eff6258e1b 686
ocomeni 75:08eff6258e1b 687 #endif
ocomeni 75:08eff6258e1b 688 };
ocomeni 75:08eff6258e1b 689
ocomeni 75:08eff6258e1b 690 /**
ocomeni 75:08eff6258e1b 691 * Enumeration of GAP roles.
ocomeni 75:08eff6258e1b 692 *
ocomeni 75:08eff6258e1b 693 * @note The BLE API does not express the broadcaster and scanner roles.
ocomeni 75:08eff6258e1b 694 *
ocomeni 75:08eff6258e1b 695 * @attention A device can fulfill different roles concurrently.
ocomeni 75:08eff6258e1b 696 */
ocomeni 75:08eff6258e1b 697 struct connection_role_t : SafeEnum<connection_role_t, uint8_t> {
ocomeni 75:08eff6258e1b 698 /** struct scoped enum wrapped by the class */
ocomeni 75:08eff6258e1b 699 enum type {
ocomeni 75:08eff6258e1b 700 /**
ocomeni 75:08eff6258e1b 701 * Central Role.
ocomeni 75:08eff6258e1b 702 *
ocomeni 75:08eff6258e1b 703 * The device can scan and initiate connection to peripherals. It
ocomeni 75:08eff6258e1b 704 * acts as the master when a connection is established.
ocomeni 75:08eff6258e1b 705 *
ocomeni 75:08eff6258e1b 706 * @note A central is a scanner.
ocomeni 75:08eff6258e1b 707 */
ocomeni 75:08eff6258e1b 708 CENTRAL = 0x00,
ocomeni 75:08eff6258e1b 709
ocomeni 75:08eff6258e1b 710 /**
ocomeni 75:08eff6258e1b 711 * Peripheral Role.
ocomeni 75:08eff6258e1b 712 *
ocomeni 75:08eff6258e1b 713 * The device can advertise, and you can connect it by a central. It
ocomeni 75:08eff6258e1b 714 * acts as a slave when connected.
ocomeni 75:08eff6258e1b 715 *
ocomeni 75:08eff6258e1b 716 * @note A peripheral is a broadcaster.
ocomeni 75:08eff6258e1b 717 */
ocomeni 75:08eff6258e1b 718 PERIPHERAL = 0x01
ocomeni 75:08eff6258e1b 719 };
ocomeni 75:08eff6258e1b 720
ocomeni 75:08eff6258e1b 721 /**
ocomeni 75:08eff6258e1b 722 * Construct a new instance of role_t.
ocomeni 75:08eff6258e1b 723 *
ocomeni 75:08eff6258e1b 724 * @param value The value of the role_t created.
ocomeni 75:08eff6258e1b 725 */
ocomeni 75:08eff6258e1b 726 connection_role_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 727 {
ocomeni 75:08eff6258e1b 728 }
ocomeni 75:08eff6258e1b 729
ocomeni 75:08eff6258e1b 730 #if !defined(DOXYGEN_ONLY)
ocomeni 75:08eff6258e1b 731
ocomeni 75:08eff6258e1b 732 /**
ocomeni 75:08eff6258e1b 733 * Explicit constructor from a raw value.
ocomeni 75:08eff6258e1b 734 * @param raw_value The role.
ocomeni 75:08eff6258e1b 735 */
ocomeni 75:08eff6258e1b 736 explicit connection_role_t(uint8_t raw_value) : SafeEnum(raw_value)
ocomeni 75:08eff6258e1b 737 {
ocomeni 75:08eff6258e1b 738 }
ocomeni 75:08eff6258e1b 739
ocomeni 75:08eff6258e1b 740 #endif
ocomeni 75:08eff6258e1b 741 };
ocomeni 75:08eff6258e1b 742
ocomeni 75:08eff6258e1b 743 /**
ocomeni 75:08eff6258e1b 744 * Enumeration of disconnection reasons that should be transmited to the peer.
ocomeni 75:08eff6258e1b 745 */
ocomeni 75:08eff6258e1b 746 struct local_disconnection_reason_t : SafeEnum<local_disconnection_reason_t, uint8_t> {
ocomeni 75:08eff6258e1b 747 /// enumeration of local_disconnection_reason_t values.
ocomeni 75:08eff6258e1b 748 enum type {
ocomeni 75:08eff6258e1b 749 /**
ocomeni 75:08eff6258e1b 750 * GAP or GATT failed to authenticate the peer.
ocomeni 75:08eff6258e1b 751 */
ocomeni 75:08eff6258e1b 752 AUTHENTICATION_FAILURE = 0x05,
ocomeni 75:08eff6258e1b 753
ocomeni 75:08eff6258e1b 754 /**
ocomeni 75:08eff6258e1b 755 * Connection terminated by the user.
ocomeni 75:08eff6258e1b 756 */
ocomeni 75:08eff6258e1b 757 USER_TERMINATION = 0x13,
ocomeni 75:08eff6258e1b 758
ocomeni 75:08eff6258e1b 759 /**
ocomeni 75:08eff6258e1b 760 * Connection termination due to low resources.
ocomeni 75:08eff6258e1b 761 */
ocomeni 75:08eff6258e1b 762 LOW_RESOURCES = 0x14,
ocomeni 75:08eff6258e1b 763
ocomeni 75:08eff6258e1b 764 /**
ocomeni 75:08eff6258e1b 765 * Connection termination due to power off.
ocomeni 75:08eff6258e1b 766 */
ocomeni 75:08eff6258e1b 767 POWER_OFF = 0x15,
ocomeni 75:08eff6258e1b 768
ocomeni 75:08eff6258e1b 769 /**
ocomeni 75:08eff6258e1b 770 * Remote feature not supported.
ocomeni 75:08eff6258e1b 771 */
ocomeni 75:08eff6258e1b 772 UNSUPPORTED_REMOTE_FEATURE = 0x1A,
ocomeni 75:08eff6258e1b 773
ocomeni 75:08eff6258e1b 774 /**
ocomeni 75:08eff6258e1b 775 * Not possible to pai with a unit key.
ocomeni 75:08eff6258e1b 776 */
ocomeni 75:08eff6258e1b 777 PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED = 0x29,
ocomeni 75:08eff6258e1b 778
ocomeni 75:08eff6258e1b 779 /**
ocomeni 75:08eff6258e1b 780 * Connection parameters were unacceptable.
ocomeni 75:08eff6258e1b 781 */
ocomeni 75:08eff6258e1b 782 UNACCEPTABLE_CONNECTION_PARAMETERS = 0x3B
ocomeni 75:08eff6258e1b 783 };
ocomeni 75:08eff6258e1b 784
ocomeni 75:08eff6258e1b 785 /**
ocomeni 75:08eff6258e1b 786 * Construct a new instance of disconnection_reason_t.
ocomeni 75:08eff6258e1b 787 *
ocomeni 75:08eff6258e1b 788 * @param value The value of the local_disconnection_reason_t created.
ocomeni 75:08eff6258e1b 789 */
ocomeni 75:08eff6258e1b 790 local_disconnection_reason_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 791 {
ocomeni 75:08eff6258e1b 792 }
ocomeni 75:08eff6258e1b 793 };
ocomeni 75:08eff6258e1b 794
ocomeni 75:08eff6258e1b 795
ocomeni 75:08eff6258e1b 796 /**
ocomeni 75:08eff6258e1b 797 * Enumeration of disconnection reasons received in a disconnection event.
ocomeni 75:08eff6258e1b 798 */
ocomeni 75:08eff6258e1b 799 struct disconnection_reason_t : SafeEnum<disconnection_reason_t, uint8_t> {
ocomeni 75:08eff6258e1b 800 /// enumeration of disconnection_reason_t values.
ocomeni 75:08eff6258e1b 801 enum type {
ocomeni 75:08eff6258e1b 802 /**
ocomeni 75:08eff6258e1b 803 * GAP or GATT failed to authenticate the peer.
ocomeni 75:08eff6258e1b 804 */
ocomeni 75:08eff6258e1b 805 AUTHENTICATION_FAILURE = 0x05,
ocomeni 75:08eff6258e1b 806
ocomeni 75:08eff6258e1b 807 /**
ocomeni 75:08eff6258e1b 808 * The connection timed out.
ocomeni 75:08eff6258e1b 809 */
ocomeni 75:08eff6258e1b 810 CONNECTION_TIMEOUT = 0x08,
ocomeni 75:08eff6258e1b 811
ocomeni 75:08eff6258e1b 812 /**
ocomeni 75:08eff6258e1b 813 * Connection terminated by the user.
ocomeni 75:08eff6258e1b 814 */
ocomeni 75:08eff6258e1b 815 REMOTE_USER_TERMINATED_CONNECTION = 0x13,
ocomeni 75:08eff6258e1b 816
ocomeni 75:08eff6258e1b 817 /**
ocomeni 75:08eff6258e1b 818 * Remote device terminated connection due to low resources.
ocomeni 75:08eff6258e1b 819 */
ocomeni 75:08eff6258e1b 820 REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES = 0x14,
ocomeni 75:08eff6258e1b 821
ocomeni 75:08eff6258e1b 822 /**
ocomeni 75:08eff6258e1b 823 * Remote device terminated connection due to power off.
ocomeni 75:08eff6258e1b 824 */
ocomeni 75:08eff6258e1b 825 REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF = 0x15,
ocomeni 75:08eff6258e1b 826
ocomeni 75:08eff6258e1b 827 /**
ocomeni 75:08eff6258e1b 828 * Indicate that the local user or the internal
ocomeni 75:08eff6258e1b 829 * Bluetooth subsystem terminated the connection.
ocomeni 75:08eff6258e1b 830 */
ocomeni 75:08eff6258e1b 831 LOCAL_HOST_TERMINATED_CONNECTION = 0x16,
ocomeni 75:08eff6258e1b 832
ocomeni 75:08eff6258e1b 833 /**
ocomeni 75:08eff6258e1b 834 * Connection parameters were unacceptable.
ocomeni 75:08eff6258e1b 835 */
ocomeni 75:08eff6258e1b 836 UNACCEPTABLE_CONNECTION_PARAMETERS = 0x3B
ocomeni 75:08eff6258e1b 837 };
ocomeni 75:08eff6258e1b 838
ocomeni 75:08eff6258e1b 839 /**
ocomeni 75:08eff6258e1b 840 * Construct a new instance of disconnection_reason_t.
ocomeni 75:08eff6258e1b 841 *
ocomeni 75:08eff6258e1b 842 * @param value The value of the disconnection_reason_t created.
ocomeni 75:08eff6258e1b 843 */
ocomeni 75:08eff6258e1b 844 disconnection_reason_t(type value) : SafeEnum(value)
ocomeni 75:08eff6258e1b 845 {
ocomeni 75:08eff6258e1b 846 }
ocomeni 75:08eff6258e1b 847 };
ocomeni 75:08eff6258e1b 848
ocomeni 75:08eff6258e1b 849 /**
ocomeni 75:08eff6258e1b 850 * Privacy Configuration of the peripheral role.
ocomeni 75:08eff6258e1b 851 *
ocomeni 75:08eff6258e1b 852 * @note This configuration also applies to the broadcaster role configuration.
ocomeni 75:08eff6258e1b 853 */
ocomeni 75:08eff6258e1b 854 struct peripheral_privacy_configuration_t {
ocomeni 75:08eff6258e1b 855 /**
ocomeni 75:08eff6258e1b 856 * Indicates if nonresolvable random address should be used when the
ocomeni 75:08eff6258e1b 857 * peripheral advertises nonconnectable packets.
ocomeni 75:08eff6258e1b 858 *
ocomeni 75:08eff6258e1b 859 * Resolvable random address continues to be used for connectable packets.
ocomeni 75:08eff6258e1b 860 */
ocomeni 75:08eff6258e1b 861 bool use_non_resolvable_random_address;
ocomeni 75:08eff6258e1b 862
ocomeni 75:08eff6258e1b 863 /**
ocomeni 75:08eff6258e1b 864 * Resolution strategy for initiator resolvable addresses when a
ocomeni 75:08eff6258e1b 865 * connection request is received.
ocomeni 75:08eff6258e1b 866 */
ocomeni 75:08eff6258e1b 867 enum resolution_strategy_t {
ocomeni 75:08eff6258e1b 868 /**
ocomeni 75:08eff6258e1b 869 * Do not resolve the address of the initiator and accept the
ocomeni 75:08eff6258e1b 870 * connection request.
ocomeni 75:08eff6258e1b 871 */
ocomeni 75:08eff6258e1b 872 DO_NOT_RESOLVE,
ocomeni 75:08eff6258e1b 873
ocomeni 75:08eff6258e1b 874 /**
ocomeni 75:08eff6258e1b 875 * If a bond is present in the secure database and the address
ocomeni 75:08eff6258e1b 876 * resolution fails, then reject the connection request with the error
ocomeni 75:08eff6258e1b 877 * code AUTHENTICATION_FAILLURE.
ocomeni 75:08eff6258e1b 878 */
ocomeni 75:08eff6258e1b 879 REJECT_NON_RESOLVED_ADDRESS,
ocomeni 75:08eff6258e1b 880
ocomeni 75:08eff6258e1b 881 /**
ocomeni 75:08eff6258e1b 882 * Perform the pairing procedure if the initiator resolvable
ocomeni 75:08eff6258e1b 883 * address failed the resolution process.
ocomeni 75:08eff6258e1b 884 */
ocomeni 75:08eff6258e1b 885 PERFORM_PAIRING_PROCEDURE,
ocomeni 75:08eff6258e1b 886
ocomeni 75:08eff6258e1b 887 /**
ocomeni 75:08eff6258e1b 888 * Perform the authentication procedure if the initiator resolvable
ocomeni 75:08eff6258e1b 889 * address failed the resolution process.
ocomeni 75:08eff6258e1b 890 */
ocomeni 75:08eff6258e1b 891 PERFORM_AUTHENTICATION_PROCEDURE
ocomeni 75:08eff6258e1b 892 };
ocomeni 75:08eff6258e1b 893
ocomeni 75:08eff6258e1b 894 MBED_DEPRECATED_SINCE("mbed-os-5.11", "Use resolution_strategy_t instead.")
ocomeni 75:08eff6258e1b 895 typedef resolution_strategy_t ResolutionStrategy;
ocomeni 75:08eff6258e1b 896
ocomeni 75:08eff6258e1b 897 /**
ocomeni 75:08eff6258e1b 898 * Connection strategy to use when a connection request contains a
ocomeni 75:08eff6258e1b 899 * private resolvable address.
ocomeni 75:08eff6258e1b 900 */
ocomeni 75:08eff6258e1b 901 resolution_strategy_t resolution_strategy;
ocomeni 75:08eff6258e1b 902 };
ocomeni 75:08eff6258e1b 903
ocomeni 75:08eff6258e1b 904 /**
ocomeni 75:08eff6258e1b 905 * Privacy configuration of the central role.
ocomeni 75:08eff6258e1b 906 *
ocomeni 75:08eff6258e1b 907 * @note This configuration is also used when the local device operates as
ocomeni 75:08eff6258e1b 908 * an observer.
ocomeni 75:08eff6258e1b 909 */
ocomeni 75:08eff6258e1b 910 struct central_privay_configuration_t {
ocomeni 75:08eff6258e1b 911 /**
ocomeni 75:08eff6258e1b 912 * Indicates if nonresolvable random address should be used when the
ocomeni 75:08eff6258e1b 913 * central or observer sends scan request packets.
ocomeni 75:08eff6258e1b 914 *
ocomeni 75:08eff6258e1b 915 * Resolvable random address continues to be used for connection requests.
ocomeni 75:08eff6258e1b 916 */
ocomeni 75:08eff6258e1b 917 bool use_non_resolvable_random_address;
ocomeni 75:08eff6258e1b 918
ocomeni 75:08eff6258e1b 919
ocomeni 75:08eff6258e1b 920 /**
ocomeni 75:08eff6258e1b 921 * Resolution strategy of resolvable addresses received in advertising
ocomeni 75:08eff6258e1b 922 * packets.
ocomeni 75:08eff6258e1b 923 */
ocomeni 75:08eff6258e1b 924 enum resolution_strategy_t {
ocomeni 75:08eff6258e1b 925 /**
ocomeni 75:08eff6258e1b 926 * Do not resolve the address received in advertising packets.
ocomeni 75:08eff6258e1b 927 */
ocomeni 75:08eff6258e1b 928 DO_NOT_RESOLVE,
ocomeni 75:08eff6258e1b 929
ocomeni 75:08eff6258e1b 930 /**
ocomeni 75:08eff6258e1b 931 * Resolve the resolvable addresses in the advertising packet and
ocomeni 75:08eff6258e1b 932 * forward advertising packet to the application independently of
ocomeni 75:08eff6258e1b 933 * the address resolution procedure result.
ocomeni 75:08eff6258e1b 934 */
ocomeni 75:08eff6258e1b 935 RESOLVE_AND_FORWARD,
ocomeni 75:08eff6258e1b 936
ocomeni 75:08eff6258e1b 937 /**
ocomeni 75:08eff6258e1b 938 * Filter out packets containing a resolvable address that cannot be resolved
ocomeni 75:08eff6258e1b 939 * by this device.
ocomeni 75:08eff6258e1b 940 *
ocomeni 75:08eff6258e1b 941 * @note Filtering is applied if the local device contains at least
ocomeni 75:08eff6258e1b 942 * one bond.
ocomeni 75:08eff6258e1b 943 */
ocomeni 75:08eff6258e1b 944 RESOLVE_AND_FILTER
ocomeni 75:08eff6258e1b 945 };
ocomeni 75:08eff6258e1b 946
ocomeni 75:08eff6258e1b 947 MBED_DEPRECATED_SINCE("mbed-os-5.11", "Use resolution_strategy_t instead.")
ocomeni 75:08eff6258e1b 948 typedef resolution_strategy_t ResolutionStrategy;
ocomeni 75:08eff6258e1b 949
ocomeni 75:08eff6258e1b 950 /**
ocomeni 75:08eff6258e1b 951 * Resolution strategy applied to advertising packets received by the
ocomeni 75:08eff6258e1b 952 * local device.
ocomeni 75:08eff6258e1b 953 */
ocomeni 75:08eff6258e1b 954 resolution_strategy_t resolution_strategy;
ocomeni 75:08eff6258e1b 955 };
ocomeni 75:08eff6258e1b 956
ocomeni 75:08eff6258e1b 957
ocomeni 75:08eff6258e1b 958 /**
ocomeni 75:08eff6258e1b 959 * @}
ocomeni 75:08eff6258e1b 960 * @}
ocomeni 75:08eff6258e1b 961 */
ocomeni 75:08eff6258e1b 962
ocomeni 75:08eff6258e1b 963 } // namespace ble
ocomeni 75:08eff6258e1b 964
ocomeni 75:08eff6258e1b 965 #endif //BLE_GAP_TYPES_H