this is using the mbed os version 5-13-1
source/Types.h@75:08eff6258e1b, 2019-03-14 (annotated)
- 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?
| User | Revision | Line number | New 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 |