takashi kadono / Mbed OS Nucleo_446

Dependencies:   ssd1331

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?

UserRevisionLine numberNew 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_ */