Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/features/FEATURE_BLE/ble/pal/PalGap.h@3:f3764f852aa8, 2018-10-11 (annotated)
- Committer:
- kadonotakashi
- Date:
- Thu Oct 11 02:27:46 2018 +0000
- Revision:
- 3:f3764f852aa8
- Parent:
- 0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kadonotakashi | 0:8fdf9a60065b | 1 | /* mbed Microcontroller Library |
kadonotakashi | 0:8fdf9a60065b | 2 | * Copyright (c) 2017-2017 ARM Limited |
kadonotakashi | 0:8fdf9a60065b | 3 | * |
kadonotakashi | 0:8fdf9a60065b | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kadonotakashi | 0:8fdf9a60065b | 5 | * you may not use this file except in compliance with the License. |
kadonotakashi | 0:8fdf9a60065b | 6 | * You may obtain a copy of the License at |
kadonotakashi | 0:8fdf9a60065b | 7 | * |
kadonotakashi | 0:8fdf9a60065b | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
kadonotakashi | 0:8fdf9a60065b | 9 | * |
kadonotakashi | 0:8fdf9a60065b | 10 | * Unless required by applicable law or agreed to in writing, software |
kadonotakashi | 0:8fdf9a60065b | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
kadonotakashi | 0:8fdf9a60065b | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kadonotakashi | 0:8fdf9a60065b | 13 | * See the License for the specific language governing permissions and |
kadonotakashi | 0:8fdf9a60065b | 14 | * limitations under the License. |
kadonotakashi | 0:8fdf9a60065b | 15 | */ |
kadonotakashi | 0:8fdf9a60065b | 16 | |
kadonotakashi | 0:8fdf9a60065b | 17 | #ifndef BLE_PAL_GAP_H_ |
kadonotakashi | 0:8fdf9a60065b | 18 | #define BLE_PAL_GAP_H_ |
kadonotakashi | 0:8fdf9a60065b | 19 | |
kadonotakashi | 0:8fdf9a60065b | 20 | #include "platform/Callback.h" |
kadonotakashi | 0:8fdf9a60065b | 21 | #include "ble/pal/GapTypes.h" |
kadonotakashi | 0:8fdf9a60065b | 22 | #include "GapEvents.h" |
kadonotakashi | 0:8fdf9a60065b | 23 | #include "blecommon.h" |
kadonotakashi | 0:8fdf9a60065b | 24 | |
kadonotakashi | 0:8fdf9a60065b | 25 | namespace ble { |
kadonotakashi | 0:8fdf9a60065b | 26 | namespace pal { |
kadonotakashi | 0:8fdf9a60065b | 27 | |
kadonotakashi | 0:8fdf9a60065b | 28 | /** |
kadonotakashi | 0:8fdf9a60065b | 29 | * Adaptation interface for the GAP layer. |
kadonotakashi | 0:8fdf9a60065b | 30 | * |
kadonotakashi | 0:8fdf9a60065b | 31 | * Define the primitive necessary to realize GAP operations. the API and event |
kadonotakashi | 0:8fdf9a60065b | 32 | * follow closely the definition of the HCI commands and events used |
kadonotakashi | 0:8fdf9a60065b | 33 | * by that layer. |
kadonotakashi | 0:8fdf9a60065b | 34 | */ |
kadonotakashi | 0:8fdf9a60065b | 35 | struct Gap { |
kadonotakashi | 0:8fdf9a60065b | 36 | /** @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B - 4.6 */ |
kadonotakashi | 0:8fdf9a60065b | 37 | struct ControllerSupportedFeatures_t : SafeEnum<ControllerSupportedFeatures_t, uint8_t> { |
kadonotakashi | 0:8fdf9a60065b | 38 | enum type { |
kadonotakashi | 0:8fdf9a60065b | 39 | LE_ENCRYPTION = 0, |
kadonotakashi | 0:8fdf9a60065b | 40 | CONNECTION_PARAMETERS_REQUEST_PROCEDURE, |
kadonotakashi | 0:8fdf9a60065b | 41 | EXTENDED_REJECT_INDICATION, |
kadonotakashi | 0:8fdf9a60065b | 42 | SLAVE_INITIATED_FEATURES_EXCHANGE, |
kadonotakashi | 0:8fdf9a60065b | 43 | LE_PING, |
kadonotakashi | 0:8fdf9a60065b | 44 | LE_DATA_PACKET_LENGTH_EXTENSION, |
kadonotakashi | 0:8fdf9a60065b | 45 | LL_PRIVACY, |
kadonotakashi | 0:8fdf9a60065b | 46 | EXTENDED_SCANNER_FILTER_POLICIES, |
kadonotakashi | 0:8fdf9a60065b | 47 | LE_2M_PHY, |
kadonotakashi | 0:8fdf9a60065b | 48 | STABLE_MODULATION_INDEX_TRANSMITTER, |
kadonotakashi | 0:8fdf9a60065b | 49 | STABLE_MODULATION_INDEX_RECEIVER, |
kadonotakashi | 0:8fdf9a60065b | 50 | LE_CODED_PHY, |
kadonotakashi | 0:8fdf9a60065b | 51 | LE_EXTENDED_ADVERTISING, |
kadonotakashi | 0:8fdf9a60065b | 52 | LE_PERIODIC_ADVERTISING, |
kadonotakashi | 0:8fdf9a60065b | 53 | CHANNEL_SELECTION_ALGORITHM_2, |
kadonotakashi | 0:8fdf9a60065b | 54 | LE_POWER_CLASS |
kadonotakashi | 0:8fdf9a60065b | 55 | }; |
kadonotakashi | 0:8fdf9a60065b | 56 | |
kadonotakashi | 0:8fdf9a60065b | 57 | /** |
kadonotakashi | 0:8fdf9a60065b | 58 | * Construct a new instance of ControllerSupportedFeatures_t. |
kadonotakashi | 0:8fdf9a60065b | 59 | */ |
kadonotakashi | 0:8fdf9a60065b | 60 | ControllerSupportedFeatures_t(type value) : SafeEnum<ControllerSupportedFeatures_t, uint8_t>(value) { } |
kadonotakashi | 0:8fdf9a60065b | 61 | }; |
kadonotakashi | 0:8fdf9a60065b | 62 | |
kadonotakashi | 0:8fdf9a60065b | 63 | struct EventHandler { |
kadonotakashi | 0:8fdf9a60065b | 64 | /** |
kadonotakashi | 0:8fdf9a60065b | 65 | * @copydoc Gap::EventHandler::onReadPhy |
kadonotakashi | 0:8fdf9a60065b | 66 | */ |
kadonotakashi | 0:8fdf9a60065b | 67 | virtual void on_read_phy( |
kadonotakashi | 0:8fdf9a60065b | 68 | pal::hci_error_code_t status, |
kadonotakashi | 0:8fdf9a60065b | 69 | connection_handle_t connectionHandle, |
kadonotakashi | 0:8fdf9a60065b | 70 | ble::phy_t tx_phy, |
kadonotakashi | 0:8fdf9a60065b | 71 | ble::phy_t rx_phy |
kadonotakashi | 0:8fdf9a60065b | 72 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 73 | |
kadonotakashi | 0:8fdf9a60065b | 74 | /** |
kadonotakashi | 0:8fdf9a60065b | 75 | * @copydoc Gap::EventHandler::onPhyUpdateComplete |
kadonotakashi | 0:8fdf9a60065b | 76 | */ |
kadonotakashi | 0:8fdf9a60065b | 77 | virtual void on_phy_update_complete( |
kadonotakashi | 0:8fdf9a60065b | 78 | pal::hci_error_code_t status, |
kadonotakashi | 0:8fdf9a60065b | 79 | connection_handle_t connection_handle, |
kadonotakashi | 0:8fdf9a60065b | 80 | ble::phy_t tx_phy, |
kadonotakashi | 0:8fdf9a60065b | 81 | ble::phy_t rx_phy |
kadonotakashi | 0:8fdf9a60065b | 82 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 83 | }; |
kadonotakashi | 0:8fdf9a60065b | 84 | |
kadonotakashi | 0:8fdf9a60065b | 85 | /** |
kadonotakashi | 0:8fdf9a60065b | 86 | * Initialisation of the instance. An implementation can use this function |
kadonotakashi | 0:8fdf9a60065b | 87 | * to initialise the subsystems needed to realize the operations of this |
kadonotakashi | 0:8fdf9a60065b | 88 | * interface. |
kadonotakashi | 0:8fdf9a60065b | 89 | * |
kadonotakashi | 0:8fdf9a60065b | 90 | * This function has to be called before any other operations. |
kadonotakashi | 0:8fdf9a60065b | 91 | * |
kadonotakashi | 0:8fdf9a60065b | 92 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 93 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 94 | */ |
kadonotakashi | 0:8fdf9a60065b | 95 | virtual ble_error_t initialize() = 0; |
kadonotakashi | 0:8fdf9a60065b | 96 | |
kadonotakashi | 0:8fdf9a60065b | 97 | /** |
kadonotakashi | 0:8fdf9a60065b | 98 | * Termination of the instance. An implementation can use this function |
kadonotakashi | 0:8fdf9a60065b | 99 | * to release the subsystems initialised to realise the operations of |
kadonotakashi | 0:8fdf9a60065b | 100 | * this interface. |
kadonotakashi | 0:8fdf9a60065b | 101 | * |
kadonotakashi | 0:8fdf9a60065b | 102 | * After a call to this function, initialise should be called again to |
kadonotakashi | 0:8fdf9a60065b | 103 | * allow use of the interface. |
kadonotakashi | 0:8fdf9a60065b | 104 | * |
kadonotakashi | 0:8fdf9a60065b | 105 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 106 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 107 | */ |
kadonotakashi | 0:8fdf9a60065b | 108 | virtual ble_error_t terminate() = 0; |
kadonotakashi | 0:8fdf9a60065b | 109 | |
kadonotakashi | 0:8fdf9a60065b | 110 | /** |
kadonotakashi | 0:8fdf9a60065b | 111 | * Return the public device address. |
kadonotakashi | 0:8fdf9a60065b | 112 | * |
kadonotakashi | 0:8fdf9a60065b | 113 | * @note The public device address is usually acquired at initialization and |
kadonotakashi | 0:8fdf9a60065b | 114 | * stored in the instance. |
kadonotakashi | 0:8fdf9a60065b | 115 | * |
kadonotakashi | 0:8fdf9a60065b | 116 | * @return the public device address. |
kadonotakashi | 0:8fdf9a60065b | 117 | */ |
kadonotakashi | 0:8fdf9a60065b | 118 | virtual address_t get_device_address() = 0; |
kadonotakashi | 0:8fdf9a60065b | 119 | |
kadonotakashi | 0:8fdf9a60065b | 120 | /** |
kadonotakashi | 0:8fdf9a60065b | 121 | * Return the current random address. |
kadonotakashi | 0:8fdf9a60065b | 122 | * |
kadonotakashi | 0:8fdf9a60065b | 123 | * @note The random address is usually acquired at initialization and stored |
kadonotakashi | 0:8fdf9a60065b | 124 | * in the instance. |
kadonotakashi | 0:8fdf9a60065b | 125 | * |
kadonotakashi | 0:8fdf9a60065b | 126 | * @return the random device address. |
kadonotakashi | 0:8fdf9a60065b | 127 | */ |
kadonotakashi | 0:8fdf9a60065b | 128 | virtual address_t get_random_address() = 0; |
kadonotakashi | 0:8fdf9a60065b | 129 | |
kadonotakashi | 0:8fdf9a60065b | 130 | /** |
kadonotakashi | 0:8fdf9a60065b | 131 | * Set the random address which will used be during scan, connection or |
kadonotakashi | 0:8fdf9a60065b | 132 | * advertising process if the own address type selected is random. |
kadonotakashi | 0:8fdf9a60065b | 133 | * |
kadonotakashi | 0:8fdf9a60065b | 134 | * Changing the address during scan, connection or advertising process is |
kadonotakashi | 0:8fdf9a60065b | 135 | * forbiden. |
kadonotakashi | 0:8fdf9a60065b | 136 | * |
kadonotakashi | 0:8fdf9a60065b | 137 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.4 LE set random address command. |
kadonotakashi | 0:8fdf9a60065b | 138 | * |
kadonotakashi | 0:8fdf9a60065b | 139 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 140 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 141 | */ |
kadonotakashi | 0:8fdf9a60065b | 142 | virtual ble_error_t set_random_address(const address_t& address) = 0; |
kadonotakashi | 0:8fdf9a60065b | 143 | |
kadonotakashi | 0:8fdf9a60065b | 144 | /** |
kadonotakashi | 0:8fdf9a60065b | 145 | * Set the advertising parameters which will be used during the advertising |
kadonotakashi | 0:8fdf9a60065b | 146 | * process. |
kadonotakashi | 0:8fdf9a60065b | 147 | * |
kadonotakashi | 0:8fdf9a60065b | 148 | * @param advertising_interval_min: Minimum advertising interval which can |
kadonotakashi | 0:8fdf9a60065b | 149 | * be used during undirected and low duty cycle directed advertising. This |
kadonotakashi | 0:8fdf9a60065b | 150 | * parameter shall be less than or equal to advertising_interval_max. This |
kadonotakashi | 0:8fdf9a60065b | 151 | * parameter shall be in the range [0x20 : 0x4000] where each unit is equal |
kadonotakashi | 0:8fdf9a60065b | 152 | * to 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 153 | * This parameter is not used by directed high duty cycle advertising. |
kadonotakashi | 0:8fdf9a60065b | 154 | * |
kadonotakashi | 0:8fdf9a60065b | 155 | * @param advertising_interval_max: Maximum advertising interval which can |
kadonotakashi | 0:8fdf9a60065b | 156 | * be used during undirected and low duty cycle directed advertising. This |
kadonotakashi | 0:8fdf9a60065b | 157 | * parameter shall be more than or equal to advertising_interval_min. This |
kadonotakashi | 0:8fdf9a60065b | 158 | * parameter shall be in the range [0x20 : 0x4000] where each unit is equal |
kadonotakashi | 0:8fdf9a60065b | 159 | * to 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 160 | * This parameter is not used by directed high duty cycle advertising. |
kadonotakashi | 0:8fdf9a60065b | 161 | * |
kadonotakashi | 0:8fdf9a60065b | 162 | * @param advertising_type Packet type that is used during the |
kadonotakashi | 0:8fdf9a60065b | 163 | * advertising process. Direct advertising require valid peer addresses |
kadonotakashi | 0:8fdf9a60065b | 164 | * parameters and ignore the filter policy set. |
kadonotakashi | 0:8fdf9a60065b | 165 | * If the High duty cycle advertising is used then the advertising parameter |
kadonotakashi | 0:8fdf9a60065b | 166 | * intervals are ignored. |
kadonotakashi | 0:8fdf9a60065b | 167 | * |
kadonotakashi | 0:8fdf9a60065b | 168 | * @param own_address_type Own address type used during advertising. |
kadonotakashi | 0:8fdf9a60065b | 169 | * If own address type is equal to RESOLVABLE_PRIVATE_ADDRESS_PUBLIC_FALLBACK |
kadonotakashi | 0:8fdf9a60065b | 170 | * or RESOLVABLE_PRIVATE_ADDRESS_RANDOM_FALLBACK then the peer address |
kadonotakashi | 0:8fdf9a60065b | 171 | * parameters (type and address) will be used to find the local IRK. |
kadonotakashi | 0:8fdf9a60065b | 172 | * |
kadonotakashi | 0:8fdf9a60065b | 173 | * @param peer_address_type Address type of the peer. |
kadonotakashi | 0:8fdf9a60065b | 174 | * This parameter shall be valid if directed advertising is used ( |
kadonotakashi | 0:8fdf9a60065b | 175 | * ADV_DIRECT_IND or ADV_DIRECT_IND_LOW_DUTY_CYCLE). This parameter should |
kadonotakashi | 0:8fdf9a60065b | 176 | * be valid if the own address type is equal to 0x02 or 0x03. |
kadonotakashi | 0:8fdf9a60065b | 177 | * In other cases, this parameter is ignored. |
kadonotakashi | 0:8fdf9a60065b | 178 | * |
kadonotakashi | 0:8fdf9a60065b | 179 | * @param peer_address Public device address, Random device addres, Public |
kadonotakashi | 0:8fdf9a60065b | 180 | * identity address or Random static identity address of the device targeted |
kadonotakashi | 0:8fdf9a60065b | 181 | * by the advertising. |
kadonotakashi | 0:8fdf9a60065b | 182 | * This parameter shall be valid if directed advertising is used ( |
kadonotakashi | 0:8fdf9a60065b | 183 | * ADV_DIRECT_IND or ADV_DIRECT_IND_LOW_DUTY_CYCLE). This parameter should |
kadonotakashi | 0:8fdf9a60065b | 184 | * be valid if the own address type is equal to 0x02 or 0x03. |
kadonotakashi | 0:8fdf9a60065b | 185 | * In other cases, this parameter is ignored. |
kadonotakashi | 0:8fdf9a60065b | 186 | * |
kadonotakashi | 0:8fdf9a60065b | 187 | * @param advertising_channel_map Map of the channel used to send |
kadonotakashi | 0:8fdf9a60065b | 188 | * advertising data. |
kadonotakashi | 0:8fdf9a60065b | 189 | * |
kadonotakashi | 0:8fdf9a60065b | 190 | * @param advertising_filter_policy Filter policy applied during the |
kadonotakashi | 0:8fdf9a60065b | 191 | * advertising process. The subsystem should use the whitelist to apply the |
kadonotakashi | 0:8fdf9a60065b | 192 | * policy. This parameter is ignored if the advertising type is directed ( |
kadonotakashi | 0:8fdf9a60065b | 193 | * ADV_DIRECT_IND or ADV_DIRECT_IND_LOW_DUTY_CYCLE). |
kadonotakashi | 0:8fdf9a60065b | 194 | * |
kadonotakashi | 0:8fdf9a60065b | 195 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 196 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 197 | * |
kadonotakashi | 0:8fdf9a60065b | 198 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.5 LE set advertising parameters |
kadonotakashi | 0:8fdf9a60065b | 199 | * command. |
kadonotakashi | 0:8fdf9a60065b | 200 | */ |
kadonotakashi | 0:8fdf9a60065b | 201 | virtual ble_error_t set_advertising_parameters( |
kadonotakashi | 0:8fdf9a60065b | 202 | uint16_t advertising_interval_min, |
kadonotakashi | 0:8fdf9a60065b | 203 | uint16_t advertising_interval_max, |
kadonotakashi | 0:8fdf9a60065b | 204 | advertising_type_t advertising_type, |
kadonotakashi | 0:8fdf9a60065b | 205 | own_address_type_t own_address_type, |
kadonotakashi | 0:8fdf9a60065b | 206 | advertising_peer_address_type_t peer_address_type, |
kadonotakashi | 0:8fdf9a60065b | 207 | const address_t& peer_address, |
kadonotakashi | 0:8fdf9a60065b | 208 | advertising_channel_map_t advertising_channel_map, |
kadonotakashi | 0:8fdf9a60065b | 209 | advertising_filter_policy_t advertising_filter_policy |
kadonotakashi | 0:8fdf9a60065b | 210 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 211 | |
kadonotakashi | 0:8fdf9a60065b | 212 | /** |
kadonotakashi | 0:8fdf9a60065b | 213 | * Set the data sends in advertising packet. If the advertising is |
kadonotakashi | 0:8fdf9a60065b | 214 | * currently enabled, the data shall be used when a new advertising packet |
kadonotakashi | 0:8fdf9a60065b | 215 | * is issued. |
kadonotakashi | 0:8fdf9a60065b | 216 | * |
kadonotakashi | 0:8fdf9a60065b | 217 | * @param advertising_data_length Number of significant bytes in the |
kadonotakashi | 0:8fdf9a60065b | 218 | * advertising data. |
kadonotakashi | 0:8fdf9a60065b | 219 | * |
kadonotakashi | 0:8fdf9a60065b | 220 | * @param advertising_data The data sends in advertising packets. Non |
kadonotakashi | 0:8fdf9a60065b | 221 | * significant bytes shall be equal to 0. |
kadonotakashi | 0:8fdf9a60065b | 222 | * |
kadonotakashi | 0:8fdf9a60065b | 223 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 224 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 225 | * |
kadonotakashi | 0:8fdf9a60065b | 226 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.5 LE set advertising data |
kadonotakashi | 0:8fdf9a60065b | 227 | * command. |
kadonotakashi | 0:8fdf9a60065b | 228 | */ |
kadonotakashi | 0:8fdf9a60065b | 229 | virtual ble_error_t set_advertising_data( |
kadonotakashi | 0:8fdf9a60065b | 230 | uint8_t advertising_data_length, |
kadonotakashi | 0:8fdf9a60065b | 231 | const advertising_data_t& advertising_data |
kadonotakashi | 0:8fdf9a60065b | 232 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 233 | |
kadonotakashi | 0:8fdf9a60065b | 234 | /** |
kadonotakashi | 0:8fdf9a60065b | 235 | * Set the data sends in scan response packets. If the advertising is |
kadonotakashi | 0:8fdf9a60065b | 236 | * currently enabled, the data shall be used when a new scan response is |
kadonotakashi | 0:8fdf9a60065b | 237 | * issued. |
kadonotakashi | 0:8fdf9a60065b | 238 | * |
kadonotakashi | 0:8fdf9a60065b | 239 | * @param scan_response_data_length Number of significant bytes in the |
kadonotakashi | 0:8fdf9a60065b | 240 | * scan response data. |
kadonotakashi | 0:8fdf9a60065b | 241 | * |
kadonotakashi | 0:8fdf9a60065b | 242 | * @param scan_response_data The data sends in scan response packets. Non |
kadonotakashi | 0:8fdf9a60065b | 243 | * significant bytes shall be equal to 0. |
kadonotakashi | 0:8fdf9a60065b | 244 | * |
kadonotakashi | 0:8fdf9a60065b | 245 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 246 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 247 | * |
kadonotakashi | 0:8fdf9a60065b | 248 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.8 LE set scan response data |
kadonotakashi | 0:8fdf9a60065b | 249 | * command. |
kadonotakashi | 0:8fdf9a60065b | 250 | */ |
kadonotakashi | 0:8fdf9a60065b | 251 | virtual ble_error_t set_scan_response_data( |
kadonotakashi | 0:8fdf9a60065b | 252 | uint8_t scan_response_data_length, |
kadonotakashi | 0:8fdf9a60065b | 253 | const advertising_data_t& scan_response_data |
kadonotakashi | 0:8fdf9a60065b | 254 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 255 | |
kadonotakashi | 0:8fdf9a60065b | 256 | /** |
kadonotakashi | 0:8fdf9a60065b | 257 | * Start or stop advertising. |
kadonotakashi | 0:8fdf9a60065b | 258 | * |
kadonotakashi | 0:8fdf9a60065b | 259 | * The process use advertising and scan response data set with |
kadonotakashi | 0:8fdf9a60065b | 260 | * set_advertising_data and set_scan_response_data while the parameters used |
kadonotakashi | 0:8fdf9a60065b | 261 | * are the one set by set_advertising_parameters. |
kadonotakashi | 0:8fdf9a60065b | 262 | * |
kadonotakashi | 0:8fdf9a60065b | 263 | * The advertising shall continue until: |
kadonotakashi | 0:8fdf9a60065b | 264 | * - The advertising is manually disabled (advertising_enable(false)). |
kadonotakashi | 0:8fdf9a60065b | 265 | * - A connection is created. |
kadonotakashi | 0:8fdf9a60065b | 266 | * - Time out in case of high duty cycle directed advertising. |
kadonotakashi | 0:8fdf9a60065b | 267 | * |
kadonotakashi | 0:8fdf9a60065b | 268 | * If the random address has not been set and the advertising parameter |
kadonotakashi | 0:8fdf9a60065b | 269 | * own_address_type is set to 0x01 then the procedure shall fail. |
kadonotakashi | 0:8fdf9a60065b | 270 | * |
kadonotakashi | 0:8fdf9a60065b | 271 | * If the random address has not been set and the advertising parameter |
kadonotakashi | 0:8fdf9a60065b | 272 | * own_address_type is set to RESOLVABLE_PRIVATE_ADDRESS_RANDOM_FALLBACK and |
kadonotakashi | 0:8fdf9a60065b | 273 | * the peer address is not in the resolving list then the procedure shall |
kadonotakashi | 0:8fdf9a60065b | 274 | * fail. |
kadonotakashi | 0:8fdf9a60065b | 275 | * |
kadonotakashi | 0:8fdf9a60065b | 276 | * @param enable If true start the advertising process, if the process was |
kadonotakashi | 0:8fdf9a60065b | 277 | * already runing and own_address_type is equal to 0x02 or 0x03, the |
kadonotakashi | 0:8fdf9a60065b | 278 | * subsystem can change the random address. |
kadonotakashi | 0:8fdf9a60065b | 279 | * If false and the advertising is running then the process should be |
kadonotakashi | 0:8fdf9a60065b | 280 | * stoped. |
kadonotakashi | 0:8fdf9a60065b | 281 | * |
kadonotakashi | 0:8fdf9a60065b | 282 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 283 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 284 | * |
kadonotakashi | 0:8fdf9a60065b | 285 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.9 LE set advertising enable |
kadonotakashi | 0:8fdf9a60065b | 286 | * command. |
kadonotakashi | 0:8fdf9a60065b | 287 | * |
kadonotakashi | 0:8fdf9a60065b | 288 | * @note If the advertising type is ADV_DIRECT_IND and the connection is not |
kadonotakashi | 0:8fdf9a60065b | 289 | * created during the time allowed to the procedure then a |
kadonotakashi | 0:8fdf9a60065b | 290 | * ConnectionComplete event shall be emmited with its error code set to |
kadonotakashi | 0:8fdf9a60065b | 291 | * ADVERTISING_TIMEOUT. |
kadonotakashi | 0:8fdf9a60065b | 292 | * |
kadonotakashi | 0:8fdf9a60065b | 293 | * @note Successfull connection shall emit a ConnectionComplete event. It |
kadonotakashi | 0:8fdf9a60065b | 294 | * also means advertising is disabled. |
kadonotakashi | 0:8fdf9a60065b | 295 | */ |
kadonotakashi | 0:8fdf9a60065b | 296 | virtual ble_error_t advertising_enable(bool enable) = 0; |
kadonotakashi | 0:8fdf9a60065b | 297 | |
kadonotakashi | 0:8fdf9a60065b | 298 | /** |
kadonotakashi | 0:8fdf9a60065b | 299 | * Set the parameter of the scan process. |
kadonotakashi | 0:8fdf9a60065b | 300 | * |
kadonotakashi | 0:8fdf9a60065b | 301 | * This command shall not be effective when the scanning process is running. |
kadonotakashi | 0:8fdf9a60065b | 302 | * |
kadonotakashi | 0:8fdf9a60065b | 303 | * @param active_scanning If true the subsystem does active scanning and |
kadonotakashi | 0:8fdf9a60065b | 304 | * the bluetooth subsystem shall send scanning PDUs. It shall also listen |
kadonotakashi | 0:8fdf9a60065b | 305 | * to scan responses. If false no scanning PDUs are sent during the scan |
kadonotakashi | 0:8fdf9a60065b | 306 | * process. |
kadonotakashi | 0:8fdf9a60065b | 307 | * |
kadonotakashi | 0:8fdf9a60065b | 308 | * @param scan_interval The time interval between two subsequent LE scans in |
kadonotakashi | 0:8fdf9a60065b | 309 | * unit of 0.625ms. This parameter shall be in the range [0x0004 : 0x4000]. |
kadonotakashi | 0:8fdf9a60065b | 310 | * |
kadonotakashi | 0:8fdf9a60065b | 311 | * @param scan_window Duration of the LE scan. It shall be less than or |
kadonotakashi | 0:8fdf9a60065b | 312 | * equal to scan_interval value. This parameter shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 313 | * [0x0004 : 0x4000] and is in unit of 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 314 | * |
kadonotakashi | 0:8fdf9a60065b | 315 | * @param own_address_type Own address type used in scan request packets. |
kadonotakashi | 0:8fdf9a60065b | 316 | * |
kadonotakashi | 0:8fdf9a60065b | 317 | * @param filter_policy Filter policy applied when scanning. |
kadonotakashi | 0:8fdf9a60065b | 318 | * |
kadonotakashi | 0:8fdf9a60065b | 319 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 320 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 321 | * |
kadonotakashi | 0:8fdf9a60065b | 322 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.10 LE set scan parameters |
kadonotakashi | 0:8fdf9a60065b | 323 | * command. |
kadonotakashi | 0:8fdf9a60065b | 324 | */ |
kadonotakashi | 0:8fdf9a60065b | 325 | virtual ble_error_t set_scan_parameters( |
kadonotakashi | 0:8fdf9a60065b | 326 | bool active_scanning, |
kadonotakashi | 0:8fdf9a60065b | 327 | uint16_t scan_interval, |
kadonotakashi | 0:8fdf9a60065b | 328 | uint16_t scan_window, |
kadonotakashi | 0:8fdf9a60065b | 329 | own_address_type_t own_address_type, |
kadonotakashi | 0:8fdf9a60065b | 330 | scanning_filter_policy_t filter_policy |
kadonotakashi | 0:8fdf9a60065b | 331 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 332 | |
kadonotakashi | 0:8fdf9a60065b | 333 | /** |
kadonotakashi | 0:8fdf9a60065b | 334 | * Start/stop scanning process. |
kadonotakashi | 0:8fdf9a60065b | 335 | * |
kadonotakashi | 0:8fdf9a60065b | 336 | * Parameters of the scanning process shall be set before the scan launch |
kadonotakashi | 0:8fdf9a60065b | 337 | * by using the function set_scan_parameters. |
kadonotakashi | 0:8fdf9a60065b | 338 | * |
kadonotakashi | 0:8fdf9a60065b | 339 | * @parameter enable Start the scanning process if true and stop it if |
kadonotakashi | 0:8fdf9a60065b | 340 | * false. If the scan process is already started, enabling it again will |
kadonotakashi | 0:8fdf9a60065b | 341 | * only update the duplicate filtering; based on the new parameter. |
kadonotakashi | 0:8fdf9a60065b | 342 | * |
kadonotakashi | 0:8fdf9a60065b | 343 | * @parameter filter_duplicates Enable duplicate filtering if true, |
kadonotakashi | 0:8fdf9a60065b | 344 | * otherwise disable it. |
kadonotakashi | 0:8fdf9a60065b | 345 | * |
kadonotakashi | 0:8fdf9a60065b | 346 | * @attention advertising data or scan response data is not considered |
kadonotakashi | 0:8fdf9a60065b | 347 | * significant when determining duplicate advertising reports. |
kadonotakashi | 0:8fdf9a60065b | 348 | * |
kadonotakashi | 0:8fdf9a60065b | 349 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 350 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 351 | * |
kadonotakashi | 0:8fdf9a60065b | 352 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.11 LE set scan enable command. |
kadonotakashi | 0:8fdf9a60065b | 353 | */ |
kadonotakashi | 0:8fdf9a60065b | 354 | virtual ble_error_t scan_enable( |
kadonotakashi | 0:8fdf9a60065b | 355 | bool enable, |
kadonotakashi | 0:8fdf9a60065b | 356 | bool filter_duplicates |
kadonotakashi | 0:8fdf9a60065b | 357 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 358 | |
kadonotakashi | 0:8fdf9a60065b | 359 | /** |
kadonotakashi | 0:8fdf9a60065b | 360 | * Create a new le connection to a connectable advertiser. |
kadonotakashi | 0:8fdf9a60065b | 361 | * |
kadonotakashi | 0:8fdf9a60065b | 362 | * @param scan_interval Hint to the le subsystem indicating how |
kadonotakashi | 0:8fdf9a60065b | 363 | * frequently it should scan for the peer address. It represent the time |
kadonotakashi | 0:8fdf9a60065b | 364 | * interval between two subsequent scan for the peer. It shall be in the |
kadonotakashi | 0:8fdf9a60065b | 365 | * range [0x0004 : 0x4000] and the time is in unit of 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 366 | * |
kadonotakashi | 0:8fdf9a60065b | 367 | * @param scan_window Hint to the le subsystem indicating for how long it |
kadonotakashi | 0:8fdf9a60065b | 368 | * should scan during a scan interval. The value shall be smaller or equal |
kadonotakashi | 0:8fdf9a60065b | 369 | * to scan_interval. If it is equal to scan_interval then scanning should |
kadonotakashi | 0:8fdf9a60065b | 370 | * run continuously. It shall be in the range [0x0004 : 0x4000] and the time |
kadonotakashi | 0:8fdf9a60065b | 371 | * is in unit of 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 372 | * |
kadonotakashi | 0:8fdf9a60065b | 373 | * @param initiator_policy Used to determine if the whitelist is used to |
kadonotakashi | 0:8fdf9a60065b | 374 | * determine the address to connect to. If the whitelist is not used, the |
kadonotakashi | 0:8fdf9a60065b | 375 | * connection shall be made against an advertiser matching the peer_address |
kadonotakashi | 0:8fdf9a60065b | 376 | * and the peer_address_type parameters. Otherwise those parameters are |
kadonotakashi | 0:8fdf9a60065b | 377 | * ignored. |
kadonotakashi | 0:8fdf9a60065b | 378 | * |
kadonotakashi | 0:8fdf9a60065b | 379 | * @param peer_address_type Type of address used by the advertiser. Not used |
kadonotakashi | 0:8fdf9a60065b | 380 | * if initiator_policy use the whitelist. |
kadonotakashi | 0:8fdf9a60065b | 381 | * |
kadonotakashi | 0:8fdf9a60065b | 382 | * @param Address used by the advertiser in its advertising packets. Not |
kadonotakashi | 0:8fdf9a60065b | 383 | * used if initiator_policy use the whitelist. |
kadonotakashi | 0:8fdf9a60065b | 384 | * |
kadonotakashi | 0:8fdf9a60065b | 385 | * @param own_address_type Type of address used in the connection request |
kadonotakashi | 0:8fdf9a60065b | 386 | * packet. |
kadonotakashi | 0:8fdf9a60065b | 387 | * |
kadonotakashi | 0:8fdf9a60065b | 388 | * @param connection_interval_min Minimum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 389 | * events allowed for the connection. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 390 | * connection_interval_max. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 391 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 392 | * |
kadonotakashi | 0:8fdf9a60065b | 393 | * @param connection_interval_max Maximum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 394 | * events allowed for the connection. It shall be greater than or equal to |
kadonotakashi | 0:8fdf9a60065b | 395 | * connection_interval_min. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 396 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 397 | * |
kadonotakashi | 0:8fdf9a60065b | 398 | * @param connection_latency Number of connection events the slave can drop |
kadonotakashi | 0:8fdf9a60065b | 399 | * if it has nothing to communicate to the master. This value shall be in |
kadonotakashi | 0:8fdf9a60065b | 400 | * the range [0x0000 : 0x01F3]. |
kadonotakashi | 0:8fdf9a60065b | 401 | * |
kadonotakashi | 0:8fdf9a60065b | 402 | * @param supervision_timeout Link supervision timeout for the connection. |
kadonotakashi | 0:8fdf9a60065b | 403 | * It shall be larger than: |
kadonotakashi | 0:8fdf9a60065b | 404 | * (1 + connection_latency) * connection_interval_max * 2 |
kadonotakashi | 0:8fdf9a60065b | 405 | * Note: connection_interval_max is in ms in this formulae. |
kadonotakashi | 0:8fdf9a60065b | 406 | * Everytime the master or the slave receive a valid packet from the peer, |
kadonotakashi | 0:8fdf9a60065b | 407 | * the supervision timer is reset. If the supervision timer reaches |
kadonotakashi | 0:8fdf9a60065b | 408 | * supervision_timeout then the connection is considered lost and a |
kadonotakashi | 0:8fdf9a60065b | 409 | * disconnect event shall be emmited. |
kadonotakashi | 0:8fdf9a60065b | 410 | * This value shall be in the range [0x000A : 0x0C80] and is in unit of 10 |
kadonotakashi | 0:8fdf9a60065b | 411 | * ms. |
kadonotakashi | 0:8fdf9a60065b | 412 | * |
kadonotakashi | 0:8fdf9a60065b | 413 | * @param minimum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 414 | * minimum length a connection event. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 415 | * maximum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 416 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 417 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 418 | * |
kadonotakashi | 0:8fdf9a60065b | 419 | * @param maximum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 420 | * maximum length a connection event. It shall be more than or equal to |
kadonotakashi | 0:8fdf9a60065b | 421 | * minimum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 422 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 423 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 424 | * |
kadonotakashi | 0:8fdf9a60065b | 425 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 426 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 427 | * |
kadonotakashi | 0:8fdf9a60065b | 428 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.12 LE create connection command. |
kadonotakashi | 0:8fdf9a60065b | 429 | */ |
kadonotakashi | 0:8fdf9a60065b | 430 | virtual ble_error_t create_connection( |
kadonotakashi | 0:8fdf9a60065b | 431 | uint16_t scan_interval, |
kadonotakashi | 0:8fdf9a60065b | 432 | uint16_t scan_window, |
kadonotakashi | 0:8fdf9a60065b | 433 | initiator_policy_t initiator_policy, |
kadonotakashi | 0:8fdf9a60065b | 434 | connection_peer_address_type_t peer_address_type, |
kadonotakashi | 0:8fdf9a60065b | 435 | const address_t& peer_address, |
kadonotakashi | 0:8fdf9a60065b | 436 | own_address_type_t own_address_type, |
kadonotakashi | 0:8fdf9a60065b | 437 | uint16_t connection_interval_min, |
kadonotakashi | 0:8fdf9a60065b | 438 | uint16_t connection_interval_max, |
kadonotakashi | 0:8fdf9a60065b | 439 | uint16_t connection_latency, |
kadonotakashi | 0:8fdf9a60065b | 440 | uint16_t supervision_timeout, |
kadonotakashi | 0:8fdf9a60065b | 441 | uint16_t minimum_connection_event_length, |
kadonotakashi | 0:8fdf9a60065b | 442 | uint16_t maximum_connection_event_length |
kadonotakashi | 0:8fdf9a60065b | 443 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 444 | |
kadonotakashi | 0:8fdf9a60065b | 445 | /** |
kadonotakashi | 0:8fdf9a60065b | 446 | * Cancel the ongoing connection creation process. |
kadonotakashi | 0:8fdf9a60065b | 447 | * |
kadonotakashi | 0:8fdf9a60065b | 448 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 449 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 450 | * |
kadonotakashi | 0:8fdf9a60065b | 451 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.13 LE create connection cancel |
kadonotakashi | 0:8fdf9a60065b | 452 | * command. |
kadonotakashi | 0:8fdf9a60065b | 453 | */ |
kadonotakashi | 0:8fdf9a60065b | 454 | virtual ble_error_t cancel_connection_creation() = 0; |
kadonotakashi | 0:8fdf9a60065b | 455 | |
kadonotakashi | 0:8fdf9a60065b | 456 | /** |
kadonotakashi | 0:8fdf9a60065b | 457 | * Return the number of total whitelist entries that can be stored in the |
kadonotakashi | 0:8fdf9a60065b | 458 | * le subsystem. |
kadonotakashi | 0:8fdf9a60065b | 459 | * |
kadonotakashi | 0:8fdf9a60065b | 460 | * @note The value returned can change over time. |
kadonotakashi | 0:8fdf9a60065b | 461 | * |
kadonotakashi | 0:8fdf9a60065b | 462 | * @return The number of entries that can be stored in the LE subsystem. It |
kadonotakashi | 0:8fdf9a60065b | 463 | * range from 0x01 to 0xFF. |
kadonotakashi | 0:8fdf9a60065b | 464 | * |
kadonotakashi | 0:8fdf9a60065b | 465 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.14 LE read white list size |
kadonotakashi | 0:8fdf9a60065b | 466 | * command. |
kadonotakashi | 0:8fdf9a60065b | 467 | */ |
kadonotakashi | 0:8fdf9a60065b | 468 | virtual uint8_t read_white_list_capacity() = 0; |
kadonotakashi | 0:8fdf9a60065b | 469 | |
kadonotakashi | 0:8fdf9a60065b | 470 | /** |
kadonotakashi | 0:8fdf9a60065b | 471 | * Clear the whitelist stored in the LE subsystem. |
kadonotakashi | 0:8fdf9a60065b | 472 | * |
kadonotakashi | 0:8fdf9a60065b | 473 | * @attention This command shall not be issued if the whitelist is being |
kadonotakashi | 0:8fdf9a60065b | 474 | * used by the advertising, scanning or connection creation procedure. |
kadonotakashi | 0:8fdf9a60065b | 475 | * |
kadonotakashi | 0:8fdf9a60065b | 476 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 477 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 478 | * |
kadonotakashi | 0:8fdf9a60065b | 479 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.15 LE clear white list command. |
kadonotakashi | 0:8fdf9a60065b | 480 | */ |
kadonotakashi | 0:8fdf9a60065b | 481 | virtual ble_error_t clear_whitelist() = 0; |
kadonotakashi | 0:8fdf9a60065b | 482 | |
kadonotakashi | 0:8fdf9a60065b | 483 | /** |
kadonotakashi | 0:8fdf9a60065b | 484 | * Add a device to the LE subsystem Whitelist. |
kadonotakashi | 0:8fdf9a60065b | 485 | * |
kadonotakashi | 0:8fdf9a60065b | 486 | * @param address_type address_type Type of the address to add in the |
kadonotakashi | 0:8fdf9a60065b | 487 | * whitelist. |
kadonotakashi | 0:8fdf9a60065b | 488 | * |
kadonotakashi | 0:8fdf9a60065b | 489 | * @param address Address of the device. |
kadonotakashi | 0:8fdf9a60065b | 490 | * |
kadonotakashi | 0:8fdf9a60065b | 491 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 492 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 493 | * |
kadonotakashi | 0:8fdf9a60065b | 494 | * @attention This command shall not be issued if the whitelist is being |
kadonotakashi | 0:8fdf9a60065b | 495 | * used by the advertising, scanning or connection creation procedure. |
kadonotakashi | 0:8fdf9a60065b | 496 | * |
kadonotakashi | 0:8fdf9a60065b | 497 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.16 LE add device to white list |
kadonotakashi | 0:8fdf9a60065b | 498 | * command. |
kadonotakashi | 0:8fdf9a60065b | 499 | */ |
kadonotakashi | 0:8fdf9a60065b | 500 | virtual ble_error_t add_device_to_whitelist( |
kadonotakashi | 0:8fdf9a60065b | 501 | whitelist_address_type_t address_type, |
kadonotakashi | 0:8fdf9a60065b | 502 | address_t address |
kadonotakashi | 0:8fdf9a60065b | 503 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 504 | |
kadonotakashi | 0:8fdf9a60065b | 505 | /** |
kadonotakashi | 0:8fdf9a60065b | 506 | * Remove a device from the LE subsystem Whitelist. |
kadonotakashi | 0:8fdf9a60065b | 507 | * |
kadonotakashi | 0:8fdf9a60065b | 508 | * @param address_type address_type Type of the address of the device to |
kadonotakashi | 0:8fdf9a60065b | 509 | * remove from the whitelist. |
kadonotakashi | 0:8fdf9a60065b | 510 | * |
kadonotakashi | 0:8fdf9a60065b | 511 | * @param address Address of the device to remove from the whitelist |
kadonotakashi | 0:8fdf9a60065b | 512 | * |
kadonotakashi | 0:8fdf9a60065b | 513 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 514 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 515 | * |
kadonotakashi | 0:8fdf9a60065b | 516 | * @attention This command shall not be issued if the whitelist is being |
kadonotakashi | 0:8fdf9a60065b | 517 | * used by the advertising, scanning or connection creation procedure. |
kadonotakashi | 0:8fdf9a60065b | 518 | * |
kadonotakashi | 0:8fdf9a60065b | 519 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.17 LE remove device from white |
kadonotakashi | 0:8fdf9a60065b | 520 | * list command. |
kadonotakashi | 0:8fdf9a60065b | 521 | */ |
kadonotakashi | 0:8fdf9a60065b | 522 | virtual ble_error_t remove_device_from_whitelist( |
kadonotakashi | 0:8fdf9a60065b | 523 | whitelist_address_type_t address_type, |
kadonotakashi | 0:8fdf9a60065b | 524 | address_t address |
kadonotakashi | 0:8fdf9a60065b | 525 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 526 | |
kadonotakashi | 0:8fdf9a60065b | 527 | /** |
kadonotakashi | 0:8fdf9a60065b | 528 | * Start a connection update procedure. |
kadonotakashi | 0:8fdf9a60065b | 529 | * |
kadonotakashi | 0:8fdf9a60065b | 530 | * This procedure change the parameter used for a connection it can be |
kadonotakashi | 0:8fdf9a60065b | 531 | * master or slave initiated. |
kadonotakashi | 0:8fdf9a60065b | 532 | * |
kadonotakashi | 0:8fdf9a60065b | 533 | * The peer will received a connection parameters request and will either |
kadonotakashi | 0:8fdf9a60065b | 534 | * accept or reject the new parameters for the connection. |
kadonotakashi | 0:8fdf9a60065b | 535 | * |
kadonotakashi | 0:8fdf9a60065b | 536 | * Once the peer response has been received, the procedure ends and a |
kadonotakashi | 0:8fdf9a60065b | 537 | * Connection update complete event is emmited. |
kadonotakashi | 0:8fdf9a60065b | 538 | * |
kadonotakashi | 0:8fdf9a60065b | 539 | * @param connection Handle of the connection. |
kadonotakashi | 0:8fdf9a60065b | 540 | * |
kadonotakashi | 0:8fdf9a60065b | 541 | * @param connection_interval_min Minimum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 542 | * events allowed for the connection. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 543 | * connection_interval_max. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 544 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 545 | * |
kadonotakashi | 0:8fdf9a60065b | 546 | * @param connection_interval_max Maximum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 547 | * events allowed for the connection. It shall be greater than or equal to |
kadonotakashi | 0:8fdf9a60065b | 548 | * connection_interval_min. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 549 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 550 | * |
kadonotakashi | 0:8fdf9a60065b | 551 | * @param connection_latency Number of connection events the slave can drop |
kadonotakashi | 0:8fdf9a60065b | 552 | * if it has nothing to communicate to the master. This value shall be in |
kadonotakashi | 0:8fdf9a60065b | 553 | * the range [0x0000 : 0x01F3]. |
kadonotakashi | 0:8fdf9a60065b | 554 | * |
kadonotakashi | 0:8fdf9a60065b | 555 | * @param supervision_timeout Link supervision timeout for the connection. |
kadonotakashi | 0:8fdf9a60065b | 556 | * It shall be larger than: |
kadonotakashi | 0:8fdf9a60065b | 557 | * (1 + connection_latency) * connection_interval_max * 2 |
kadonotakashi | 0:8fdf9a60065b | 558 | * Note: connection_interval_max is in ms in this formulae. |
kadonotakashi | 0:8fdf9a60065b | 559 | * Everytime the master or the slave receive a valid packet from the peer, |
kadonotakashi | 0:8fdf9a60065b | 560 | * the supervision timer is reset. If the supervision timer reaches |
kadonotakashi | 0:8fdf9a60065b | 561 | * supervision_timeout then the connection is considered lost and a |
kadonotakashi | 0:8fdf9a60065b | 562 | * disconnect event shall be emmited. |
kadonotakashi | 0:8fdf9a60065b | 563 | * This value shall be in the range [0x000A : 0x0C80] and is in unit of 10 |
kadonotakashi | 0:8fdf9a60065b | 564 | * ms. |
kadonotakashi | 0:8fdf9a60065b | 565 | * |
kadonotakashi | 0:8fdf9a60065b | 566 | * @param minimum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 567 | * minimum length a connection event. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 568 | * maximum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 569 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 570 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 571 | * |
kadonotakashi | 0:8fdf9a60065b | 572 | * @param maximum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 573 | * maximum length a connection event. It shall be more than or equal to |
kadonotakashi | 0:8fdf9a60065b | 574 | * minimum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 575 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 576 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 577 | * |
kadonotakashi | 0:8fdf9a60065b | 578 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 579 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 580 | * |
kadonotakashi | 0:8fdf9a60065b | 581 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.18 LE Connection update command. |
kadonotakashi | 0:8fdf9a60065b | 582 | * |
kadonotakashi | 0:8fdf9a60065b | 583 | */ |
kadonotakashi | 0:8fdf9a60065b | 584 | virtual ble_error_t connection_parameters_update( |
kadonotakashi | 0:8fdf9a60065b | 585 | connection_handle_t connection, |
kadonotakashi | 0:8fdf9a60065b | 586 | uint16_t connection_interval_min, |
kadonotakashi | 0:8fdf9a60065b | 587 | uint16_t connection_interval_max, |
kadonotakashi | 0:8fdf9a60065b | 588 | uint16_t connection_latency, |
kadonotakashi | 0:8fdf9a60065b | 589 | uint16_t supervision_timeout, |
kadonotakashi | 0:8fdf9a60065b | 590 | uint16_t minimum_connection_event_length, |
kadonotakashi | 0:8fdf9a60065b | 591 | uint16_t maximum_connection_event_length |
kadonotakashi | 0:8fdf9a60065b | 592 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 593 | |
kadonotakashi | 0:8fdf9a60065b | 594 | /** |
kadonotakashi | 0:8fdf9a60065b | 595 | * Accept connection parameter request. |
kadonotakashi | 0:8fdf9a60065b | 596 | * |
kadonotakashi | 0:8fdf9a60065b | 597 | * This command sends a positive response to a connection parameter request |
kadonotakashi | 0:8fdf9a60065b | 598 | * from a peer. |
kadonotakashi | 0:8fdf9a60065b | 599 | * |
kadonotakashi | 0:8fdf9a60065b | 600 | * @param connection Handle of the connection. |
kadonotakashi | 0:8fdf9a60065b | 601 | * |
kadonotakashi | 0:8fdf9a60065b | 602 | * @param connection_interval_min Minimum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 603 | * events allowed for the connection. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 604 | * connection_interval_max. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 605 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 606 | * |
kadonotakashi | 0:8fdf9a60065b | 607 | * @param connection_interval_max Maximum interval between two connection |
kadonotakashi | 0:8fdf9a60065b | 608 | * events allowed for the connection. It shall be greater than or equal to |
kadonotakashi | 0:8fdf9a60065b | 609 | * connection_interval_min. This value shall be in range [0x0006 : 0x0C80] |
kadonotakashi | 0:8fdf9a60065b | 610 | * and is in unit of 1.25ms. |
kadonotakashi | 0:8fdf9a60065b | 611 | * |
kadonotakashi | 0:8fdf9a60065b | 612 | * @param connection_latency Number of connection events the slave can drop |
kadonotakashi | 0:8fdf9a60065b | 613 | * if it has nothing to communicate to the master. This value shall be in |
kadonotakashi | 0:8fdf9a60065b | 614 | * the range [0x0000 : 0x01F3]. |
kadonotakashi | 0:8fdf9a60065b | 615 | * |
kadonotakashi | 0:8fdf9a60065b | 616 | * @param supervision_timeout Link supervision timeout for the connection. |
kadonotakashi | 0:8fdf9a60065b | 617 | * It shall be larger than: |
kadonotakashi | 0:8fdf9a60065b | 618 | * (1 + connection_latency) * connection_interval_max * 2 |
kadonotakashi | 0:8fdf9a60065b | 619 | * Note: connection_interval_max is in ms in this formulae. |
kadonotakashi | 0:8fdf9a60065b | 620 | * Everytime the master or the slave receive a valid packet from the peer, |
kadonotakashi | 0:8fdf9a60065b | 621 | * the supervision timer is reset. If the supervision timer reaches |
kadonotakashi | 0:8fdf9a60065b | 622 | * supervision_timeout then the connection is considered lost and a |
kadonotakashi | 0:8fdf9a60065b | 623 | * disconnect event shall be emmited. |
kadonotakashi | 0:8fdf9a60065b | 624 | * This value shall be in the range [0x000A : 0x0C80] and is in unit of 10 |
kadonotakashi | 0:8fdf9a60065b | 625 | * ms. |
kadonotakashi | 0:8fdf9a60065b | 626 | * |
kadonotakashi | 0:8fdf9a60065b | 627 | * @param minimum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 628 | * minimum length a connection event. It shall be less than or equal to |
kadonotakashi | 0:8fdf9a60065b | 629 | * maximum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 630 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 631 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 632 | * |
kadonotakashi | 0:8fdf9a60065b | 633 | * @param maximum_connection_event_length Informative parameter of the |
kadonotakashi | 0:8fdf9a60065b | 634 | * maximum length a connection event. It shall be more than or equal to |
kadonotakashi | 0:8fdf9a60065b | 635 | * minimum_connection_event_length. It shall be in the range |
kadonotakashi | 0:8fdf9a60065b | 636 | * [0x0000 : 0xFFFF]. It should also be less than the expected connection |
kadonotakashi | 0:8fdf9a60065b | 637 | * interval. The unit is 0.625ms. |
kadonotakashi | 0:8fdf9a60065b | 638 | * |
kadonotakashi | 0:8fdf9a60065b | 639 | * @note Usually parameters of this function match the connection parameters |
kadonotakashi | 0:8fdf9a60065b | 640 | * received in the connection parameter request event. |
kadonotakashi | 0:8fdf9a60065b | 641 | * |
kadonotakashi | 0:8fdf9a60065b | 642 | * @attention: Once the new connection parameters are in used a Connection |
kadonotakashi | 0:8fdf9a60065b | 643 | * Update Complete event shall be emmited. |
kadonotakashi | 0:8fdf9a60065b | 644 | * |
kadonotakashi | 0:8fdf9a60065b | 645 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 646 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 647 | * |
kadonotakashi | 0:8fdf9a60065b | 648 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.31 LE remote connection parameter |
kadonotakashi | 0:8fdf9a60065b | 649 | * request reply command. |
kadonotakashi | 0:8fdf9a60065b | 650 | */ |
kadonotakashi | 0:8fdf9a60065b | 651 | virtual ble_error_t accept_connection_parameter_request( |
kadonotakashi | 0:8fdf9a60065b | 652 | connection_handle_t connection_handle, |
kadonotakashi | 0:8fdf9a60065b | 653 | uint16_t interval_min, |
kadonotakashi | 0:8fdf9a60065b | 654 | uint16_t interval_max, |
kadonotakashi | 0:8fdf9a60065b | 655 | uint16_t latency, |
kadonotakashi | 0:8fdf9a60065b | 656 | uint16_t supervision_timeout, |
kadonotakashi | 0:8fdf9a60065b | 657 | uint16_t minimum_connection_event_length, |
kadonotakashi | 0:8fdf9a60065b | 658 | uint16_t maximum_connection_event_length |
kadonotakashi | 0:8fdf9a60065b | 659 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 660 | |
kadonotakashi | 0:8fdf9a60065b | 661 | /** |
kadonotakashi | 0:8fdf9a60065b | 662 | * Reject a connection parameter update request. |
kadonotakashi | 0:8fdf9a60065b | 663 | * |
kadonotakashi | 0:8fdf9a60065b | 664 | * @param connection_handle handle to the peer which has issued the |
kadonotakashi | 0:8fdf9a60065b | 665 | * connection parameter request. |
kadonotakashi | 0:8fdf9a60065b | 666 | * |
kadonotakashi | 0:8fdf9a60065b | 667 | * @param rejection_reason Indicate to the peer why the proposed connection |
kadonotakashi | 0:8fdf9a60065b | 668 | * parameters were rejected. |
kadonotakashi | 0:8fdf9a60065b | 669 | * |
kadonotakashi | 0:8fdf9a60065b | 670 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 671 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 672 | * |
kadonotakashi | 0:8fdf9a60065b | 673 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.32 LE Remote Connection Parameter |
kadonotakashi | 0:8fdf9a60065b | 674 | * Request Negative Reply Command. |
kadonotakashi | 0:8fdf9a60065b | 675 | */ |
kadonotakashi | 0:8fdf9a60065b | 676 | virtual ble_error_t reject_connection_parameter_request( |
kadonotakashi | 0:8fdf9a60065b | 677 | connection_handle_t connection_handle, |
kadonotakashi | 0:8fdf9a60065b | 678 | hci_error_code_t rejection_reason |
kadonotakashi | 0:8fdf9a60065b | 679 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 680 | |
kadonotakashi | 0:8fdf9a60065b | 681 | /** |
kadonotakashi | 0:8fdf9a60065b | 682 | * Start a disconnection procedure. |
kadonotakashi | 0:8fdf9a60065b | 683 | * |
kadonotakashi | 0:8fdf9a60065b | 684 | * Once the procedure is complete it should emit a disconnection complete |
kadonotakashi | 0:8fdf9a60065b | 685 | * event. |
kadonotakashi | 0:8fdf9a60065b | 686 | * |
kadonotakashi | 0:8fdf9a60065b | 687 | * @param connection Handle of the connection to terminate. |
kadonotakashi | 0:8fdf9a60065b | 688 | * |
kadonotakashi | 0:8fdf9a60065b | 689 | * @param disconnection_reason Indicates the reason for ending the |
kadonotakashi | 0:8fdf9a60065b | 690 | * connection. |
kadonotakashi | 0:8fdf9a60065b | 691 | * |
kadonotakashi | 0:8fdf9a60065b | 692 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 693 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 694 | * |
kadonotakashi | 0:8fdf9a60065b | 695 | * @note: See Bluetooth 5 Vol 2 PartE: 7.1.6 disconenct command. |
kadonotakashi | 0:8fdf9a60065b | 696 | */ |
kadonotakashi | 0:8fdf9a60065b | 697 | virtual ble_error_t disconnect( |
kadonotakashi | 0:8fdf9a60065b | 698 | connection_handle_t connection, |
kadonotakashi | 0:8fdf9a60065b | 699 | disconnection_reason_t disconnection_reason |
kadonotakashi | 0:8fdf9a60065b | 700 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 701 | |
kadonotakashi | 0:8fdf9a60065b | 702 | /** Check if privacy feature is supported by implementation |
kadonotakashi | 0:8fdf9a60065b | 703 | * |
kadonotakashi | 0:8fdf9a60065b | 704 | * @return true if privacy is supported, false otherwise. |
kadonotakashi | 0:8fdf9a60065b | 705 | * |
kadonotakashi | 0:8fdf9a60065b | 706 | * @note: See Bluetooth 5 Vol 3 Part C: 10.7 Privacy feature. |
kadonotakashi | 0:8fdf9a60065b | 707 | */ |
kadonotakashi | 0:8fdf9a60065b | 708 | virtual bool is_privacy_supported() = 0; |
kadonotakashi | 0:8fdf9a60065b | 709 | |
kadonotakashi | 0:8fdf9a60065b | 710 | /** Enable or disable private addresses resolution |
kadonotakashi | 0:8fdf9a60065b | 711 | * |
kadonotakashi | 0:8fdf9a60065b | 712 | * @param enable whether to enable private addresses resolution |
kadonotakashi | 0:8fdf9a60065b | 713 | * |
kadonotakashi | 0:8fdf9a60065b | 714 | * @return BLE_ERROR_NONE if the request has been successfully sent or the |
kadonotakashi | 0:8fdf9a60065b | 715 | * appropriate error otherwise. |
kadonotakashi | 0:8fdf9a60065b | 716 | * |
kadonotakashi | 0:8fdf9a60065b | 717 | * @note: See Bluetooth 5 Vol 2 PartE: 7.8.44 LE Set Address Resolution Enable command. |
kadonotakashi | 0:8fdf9a60065b | 718 | */ |
kadonotakashi | 0:8fdf9a60065b | 719 | virtual ble_error_t set_address_resolution( |
kadonotakashi | 0:8fdf9a60065b | 720 | bool enable |
kadonotakashi | 0:8fdf9a60065b | 721 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 722 | |
kadonotakashi | 0:8fdf9a60065b | 723 | /** |
kadonotakashi | 0:8fdf9a60065b | 724 | * Checked support for a feature in the link controller. |
kadonotakashi | 0:8fdf9a60065b | 725 | * |
kadonotakashi | 0:8fdf9a60065b | 726 | * @param feature feature to be checked. |
kadonotakashi | 0:8fdf9a60065b | 727 | * @return TRUE if feature is supported. |
kadonotakashi | 0:8fdf9a60065b | 728 | */ |
kadonotakashi | 0:8fdf9a60065b | 729 | virtual bool is_feature_supported( |
kadonotakashi | 0:8fdf9a60065b | 730 | ControllerSupportedFeatures_t feature |
kadonotakashi | 0:8fdf9a60065b | 731 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 732 | |
kadonotakashi | 0:8fdf9a60065b | 733 | /** |
kadonotakashi | 0:8fdf9a60065b | 734 | * @see Gap::readPhy |
kadonotakashi | 0:8fdf9a60065b | 735 | */ |
kadonotakashi | 0:8fdf9a60065b | 736 | virtual ble_error_t read_phy(connection_handle_t connection) = 0; |
kadonotakashi | 0:8fdf9a60065b | 737 | |
kadonotakashi | 0:8fdf9a60065b | 738 | /** |
kadonotakashi | 0:8fdf9a60065b | 739 | * @see Gap::setPreferredPhys |
kadonotakashi | 0:8fdf9a60065b | 740 | */ |
kadonotakashi | 0:8fdf9a60065b | 741 | virtual ble_error_t set_preferred_phys( |
kadonotakashi | 0:8fdf9a60065b | 742 | const phy_set_t& tx_phys, |
kadonotakashi | 0:8fdf9a60065b | 743 | const phy_set_t& rx_phys |
kadonotakashi | 0:8fdf9a60065b | 744 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 745 | |
kadonotakashi | 0:8fdf9a60065b | 746 | /** |
kadonotakashi | 0:8fdf9a60065b | 747 | * @see Gap::setPhy |
kadonotakashi | 0:8fdf9a60065b | 748 | */ |
kadonotakashi | 0:8fdf9a60065b | 749 | virtual ble_error_t set_phy( |
kadonotakashi | 0:8fdf9a60065b | 750 | connection_handle_t connection, |
kadonotakashi | 0:8fdf9a60065b | 751 | const phy_set_t& tx_phys, |
kadonotakashi | 0:8fdf9a60065b | 752 | const phy_set_t& rx_phys, |
kadonotakashi | 0:8fdf9a60065b | 753 | coded_symbol_per_bit_t coded_symbol |
kadonotakashi | 0:8fdf9a60065b | 754 | ) = 0; |
kadonotakashi | 0:8fdf9a60065b | 755 | |
kadonotakashi | 0:8fdf9a60065b | 756 | /** |
kadonotakashi | 0:8fdf9a60065b | 757 | * Register a callback which will handle Gap events. |
kadonotakashi | 0:8fdf9a60065b | 758 | * |
kadonotakashi | 0:8fdf9a60065b | 759 | * @param cb The callback object which will handle Gap events from the |
kadonotakashi | 0:8fdf9a60065b | 760 | * LE subsystem. |
kadonotakashi | 0:8fdf9a60065b | 761 | * It accept a single parameter in input: The event received. |
kadonotakashi | 0:8fdf9a60065b | 762 | */ |
kadonotakashi | 0:8fdf9a60065b | 763 | void when_gap_event_received(mbed::Callback<void(const GapEvent&)> cb) |
kadonotakashi | 0:8fdf9a60065b | 764 | { |
kadonotakashi | 0:8fdf9a60065b | 765 | _gap_event_cb = cb; |
kadonotakashi | 0:8fdf9a60065b | 766 | } |
kadonotakashi | 0:8fdf9a60065b | 767 | |
kadonotakashi | 0:8fdf9a60065b | 768 | public: |
kadonotakashi | 0:8fdf9a60065b | 769 | /** |
kadonotakashi | 0:8fdf9a60065b | 770 | * Sets the event handler that us called by the PAL porters to notify the stack of events |
kadonotakashi | 0:8fdf9a60065b | 771 | * which will in turn be passed onto the user application when appropriate. |
kadonotakashi | 0:8fdf9a60065b | 772 | * |
kadonotakashi | 0:8fdf9a60065b | 773 | * @param[in] event_handler the new event handler interface implementation. Memory |
kadonotakashi | 0:8fdf9a60065b | 774 | * owned by caller who is responsible for updating this pointer if interface changes. |
kadonotakashi | 0:8fdf9a60065b | 775 | */ |
kadonotakashi | 0:8fdf9a60065b | 776 | void set_event_handler(EventHandler *event_handler) { |
kadonotakashi | 0:8fdf9a60065b | 777 | _pal_event_handler = event_handler; |
kadonotakashi | 0:8fdf9a60065b | 778 | } |
kadonotakashi | 0:8fdf9a60065b | 779 | |
kadonotakashi | 0:8fdf9a60065b | 780 | EventHandler* get_event_handler() { |
kadonotakashi | 0:8fdf9a60065b | 781 | return _pal_event_handler; |
kadonotakashi | 0:8fdf9a60065b | 782 | } |
kadonotakashi | 0:8fdf9a60065b | 783 | |
kadonotakashi | 0:8fdf9a60065b | 784 | protected: |
kadonotakashi | 0:8fdf9a60065b | 785 | EventHandler *_pal_event_handler; |
kadonotakashi | 0:8fdf9a60065b | 786 | |
kadonotakashi | 0:8fdf9a60065b | 787 | protected: |
kadonotakashi | 0:8fdf9a60065b | 788 | Gap() : _pal_event_handler(NULL) { } |
kadonotakashi | 0:8fdf9a60065b | 789 | |
kadonotakashi | 0:8fdf9a60065b | 790 | virtual ~Gap() { } |
kadonotakashi | 0:8fdf9a60065b | 791 | |
kadonotakashi | 0:8fdf9a60065b | 792 | /** |
kadonotakashi | 0:8fdf9a60065b | 793 | * Implementation shall call this function whenever the LE subsystem |
kadonotakashi | 0:8fdf9a60065b | 794 | * generate a Gap event. |
kadonotakashi | 0:8fdf9a60065b | 795 | * |
kadonotakashi | 0:8fdf9a60065b | 796 | * @param gap_event The event to emit to higher layer. |
kadonotakashi | 0:8fdf9a60065b | 797 | */ |
kadonotakashi | 0:8fdf9a60065b | 798 | void emit_gap_event(const GapEvent& gap_event) |
kadonotakashi | 0:8fdf9a60065b | 799 | { |
kadonotakashi | 0:8fdf9a60065b | 800 | if (_gap_event_cb) { |
kadonotakashi | 0:8fdf9a60065b | 801 | _gap_event_cb(gap_event); |
kadonotakashi | 0:8fdf9a60065b | 802 | } |
kadonotakashi | 0:8fdf9a60065b | 803 | } |
kadonotakashi | 0:8fdf9a60065b | 804 | |
kadonotakashi | 0:8fdf9a60065b | 805 | public: |
kadonotakashi | 0:8fdf9a60065b | 806 | /** |
kadonotakashi | 0:8fdf9a60065b | 807 | * Create an ALL_PHYS parameter used in LE Set PHY Command |
kadonotakashi | 0:8fdf9a60065b | 808 | * and LE Set Default PHY Command. |
kadonotakashi | 0:8fdf9a60065b | 809 | * @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E - 7.8.49 |
kadonotakashi | 0:8fdf9a60065b | 810 | */ |
kadonotakashi | 0:8fdf9a60065b | 811 | static uint8_t create_all_phys_value( |
kadonotakashi | 0:8fdf9a60065b | 812 | const phy_set_t& tx_phys, |
kadonotakashi | 0:8fdf9a60065b | 813 | const phy_set_t& rx_phys |
kadonotakashi | 0:8fdf9a60065b | 814 | ) { |
kadonotakashi | 0:8fdf9a60065b | 815 | /* if phy set is empty set corresponding all_phys bit to 1 */ |
kadonotakashi | 0:8fdf9a60065b | 816 | uint8_t all_phys = 0; |
kadonotakashi | 0:8fdf9a60065b | 817 | if (tx_phys.value() == 0) { |
kadonotakashi | 0:8fdf9a60065b | 818 | all_phys |= 0x01; |
kadonotakashi | 0:8fdf9a60065b | 819 | } |
kadonotakashi | 0:8fdf9a60065b | 820 | if (rx_phys.value() == 0) { |
kadonotakashi | 0:8fdf9a60065b | 821 | all_phys |= 0x02; |
kadonotakashi | 0:8fdf9a60065b | 822 | } |
kadonotakashi | 0:8fdf9a60065b | 823 | return all_phys; |
kadonotakashi | 0:8fdf9a60065b | 824 | } |
kadonotakashi | 0:8fdf9a60065b | 825 | |
kadonotakashi | 0:8fdf9a60065b | 826 | private: |
kadonotakashi | 0:8fdf9a60065b | 827 | /** |
kadonotakashi | 0:8fdf9a60065b | 828 | * Callback called when an event is emitted by the LE subsystem. |
kadonotakashi | 0:8fdf9a60065b | 829 | */ |
kadonotakashi | 0:8fdf9a60065b | 830 | mbed::Callback<void(const GapEvent&)> _gap_event_cb; |
kadonotakashi | 0:8fdf9a60065b | 831 | |
kadonotakashi | 0:8fdf9a60065b | 832 | private: |
kadonotakashi | 0:8fdf9a60065b | 833 | // Disallow copy construction and copy assignment. |
kadonotakashi | 0:8fdf9a60065b | 834 | Gap(const Gap&); |
kadonotakashi | 0:8fdf9a60065b | 835 | Gap& operator=(const Gap&); |
kadonotakashi | 0:8fdf9a60065b | 836 | }; |
kadonotakashi | 0:8fdf9a60065b | 837 | |
kadonotakashi | 0:8fdf9a60065b | 838 | } // namespace pal |
kadonotakashi | 0:8fdf9a60065b | 839 | } // namespace ble |
kadonotakashi | 0:8fdf9a60065b | 840 | |
kadonotakashi | 0:8fdf9a60065b | 841 | #endif /* BLE_PAL_GAP_H_ */ |