19 #ifndef MBED_EXTENDED_CONNECT_PARAMETERS_H__ 20 #define MBED_EXTENDED_CONNECT_PARAMETERS_H__ 22 #include "platform/mbed_assert.h" 24 #include "ble/common/BLETypes.h" 129 #if BLE_FEATURE_PHY_MANAGEMENT 133 #endif // BLE_FEATURE_PHY_MANAGEMENT 153 scan_interval_t scanInterval = scan_interval_t::min(),
154 scan_window_t scanWindow = scan_window_t::min(),
155 conn_interval_t minConnectionInterval = conn_interval_t(50),
156 conn_interval_t maxConnectionInterval = conn_interval_t(100),
157 slave_latency_t slaveLatency = slave_latency_t::min(),
158 supervision_timeout_t connectionSupervisionTimeout = supervision_timeout_t(100),
159 conn_event_length_t minEventLength = conn_event_length_t::min(),
160 conn_event_length_t maxEventLength = conn_event_length_t::max()
179 scan_interval_t scanInterval,
180 scan_window_t scanWindow
199 conn_interval_t minConnectionInterval,
200 conn_interval_t maxConnectionInterval,
201 slave_latency_t slaveLatency,
202 supervision_timeout_t connectionSupervisionTimeout,
203 conn_event_length_t minEventLength = conn_event_length_t::min(),
204 conn_event_length_t maxEventLength = conn_event_length_t::max()
214 _ownAddressType = ownAddress;
227 #if BLE_FEATURE_WHITELIST 228 _filterPolicy = filterPolicy;
229 #endif // BLE_FEATURE_WHITELIST 244 #if BLE_FEATURE_PHY_MANAGEMENT 248 #endif // BLE_FEATURE_PHY_MANAGEMENT 261 #if BLE_FEATURE_PHY_MANAGEMENT 262 handlePhyToggle(phy,
false);
263 #endif // BLE_FEATURE_PHY_MANAGEMENT 276 #if BLE_FEATURE_PHY_MANAGEMENT 277 handlePhyToggle(phy,
true);
278 #endif // BLE_FEATURE_PHY_MANAGEMENT 291 return _ownAddressType;
301 #if BLE_FEATURE_WHITELIST 302 return _filterPolicy;
304 return initiator_filter_policy_t::NO_FILTER;
305 #endif // BLE_FEATURE_WHITELIST 315 _enabledPhy[LE_1M_INDEX] * 1
316 #
if BLE_FEATURE_PHY_MANAGEMENT
317 + _enabledPhy[LE_2M_INDEX] * 1
318 + _enabledPhy[LE_CODED_INDEX] * 1
323 #if !defined(DOXYGEN_ONLY) 327 #if BLE_FEATURE_PHY_MANAGEMENT 329 _enabledPhy[LE_1M_INDEX],
330 _enabledPhy[LE_2M_INDEX],
331 _enabledPhy[LE_CODED_INDEX]
335 return phy_set_t::PHY_SET_1M;
336 #endif // BLE_FEATURE_PHY_MANAGEMENT 342 const uint16_t *getScanIntervalArray()
const 344 return &_scanInterval[getFirstEnabledIndex()];
347 const uint16_t *getScanWindowArray()
const 349 return &_scanWindow[getFirstEnabledIndex()];
352 const uint16_t *getMinConnectionIntervalArray()
const 354 return &_minConnectionInterval[getFirstEnabledIndex()];
357 const uint16_t *getMaxConnectionIntervalArray()
const 359 return &_maxConnectionInterval[getFirstEnabledIndex()];
362 const uint16_t *getSlaveLatencyArray()
const 364 return &_slaveLatency[getFirstEnabledIndex()];
367 const uint16_t *getConnectionSupervisionTimeoutArray()
const 369 return &_connectionSupervisionTimeout[getFirstEnabledIndex()];
372 const uint16_t *getMinEventLengthArray()
const 374 return &_minEventLength[getFirstEnabledIndex()];
377 const uint16_t *getMaxEventLengthArray()
const 379 return &_maxEventLength[getFirstEnabledIndex()];
385 uint8_t getFirstEnabledIndex()
const 387 #if BLE_FEATURE_PHY_MANAGEMENT 388 if (_enabledPhy[LE_1M_INDEX]) {
390 }
else if (_enabledPhy[LE_2M_INDEX]) {
392 }
else if (_enabledPhy[LE_CODED_INDEX]) {
393 return LE_CODED_INDEX;
397 MBED_ASSERT(
"Trying to use connection parameters without any PHY defined.");
398 #endif // BLE_FEATURE_PHY_MANAGEMENT 408 uint8_t handlePhyToggle(
phy_t phy,
bool enable)
410 uint8_t index = phyToIndex(phy);
412 #if BLE_FEATURE_PHY_MANAGEMENT 413 bool was_swapped = isSwapped();
415 _enabledPhy[index] = enable;
417 bool is_swapped = isSwapped();
419 if (was_swapped != is_swapped) {
423 if (is_swapped && index == LE_CODED_INDEX) {
427 #endif // BLE_FEATURE_PHY_MANAGEMENT 432 static uint8_t phyToIndex(
phy_t phy)
435 switch (phy.
value()) {
439 #if BLE_FEATURE_PHY_MANAGEMENT 444 index = LE_CODED_INDEX;
446 #endif // BLE_FEATURE_PHY_MANAGEMENT 455 #if BLE_FEATURE_PHY_MANAGEMENT 456 bool isSwapped()
const 459 _enabledPhy[LE_1M_INDEX] &&
460 !_enabledPhy[LE_2M_INDEX] &&
461 _enabledPhy[LE_CODED_INDEX]
466 void swapCodedAnd2M();
467 #endif // BLE_FEATURE_PHY_MANAGEMENT 470 initiator_filter_policy_t _filterPolicy;
471 own_address_type_t _ownAddressType;
473 uint16_t _scanInterval[MAX_PARAM_PHYS];
474 uint16_t _scanWindow[MAX_PARAM_PHYS];
475 uint16_t _minConnectionInterval[MAX_PARAM_PHYS];
476 uint16_t _maxConnectionInterval[MAX_PARAM_PHYS];
477 uint16_t _slaveLatency[MAX_PARAM_PHYS];
478 uint16_t _connectionSupervisionTimeout[MAX_PARAM_PHYS];
479 uint16_t _minEventLength[MAX_PARAM_PHYS];
480 uint16_t _maxEventLength[MAX_PARAM_PHYS];
482 bool _enabledPhy[MAX_PARAM_PHYS];
ConnectionParameters & setFilter(initiator_filter_policy_t filterPolicy)
Set if the whitelist should be used to find the peer.
LayoutType value() const
Explicit access to the inner value of the SafeEnum instance.
ConnectionParameters & setConnectionParameters(phy_t phy, conn_interval_t minConnectionInterval, conn_interval_t maxConnectionInterval, slave_latency_t slaveLatency, supervision_timeout_t connectionSupervisionTimeout, conn_event_length_t minEventLength=conn_event_length_t::min(), conn_event_length_t maxEventLength=conn_event_length_t::max())
Set the conenction parameters of a given PHY.
ConnectionParameters & enablePhy(phy_t phy=phy_t::LE_1M)
Enable an individual PHY.
Type that describes a bluetooth PHY(sical) transport.
Parameters defining the connection initiation process.
ConnectionParameters(phy_t phy=phy_t::LE_1M, scan_interval_t scanInterval=scan_interval_t::min(), scan_window_t scanWindow=scan_window_t::min(), conn_interval_t minConnectionInterval=conn_interval_t(50), conn_interval_t maxConnectionInterval=conn_interval_t(100), slave_latency_t slaveLatency=slave_latency_t::min(), supervision_timeout_t connectionSupervisionTimeout=supervision_timeout_t(100), conn_event_length_t minEventLength=conn_event_length_t::min(), conn_event_length_t maxEventLength=conn_event_length_t::max())
Create a ConnectionParameters object.
ConnectionParameters & togglePhy(bool phy1M, bool phy2M, bool phyCoded)
Enable or disable PHYs.
Type that describe a set of PHY(sical) transports.
ConnectionParameters & setOwnAddressType(own_address_type_t ownAddress)
Address type used by the local device to connect the peer.
own_address_type_t getOwnAddressType() const
Return the local address type used.
ConnectionParameters & disablePhy(phy_t phy=phy_t::LE_1M)
Disable an individual PHY.
uint8_t getNumberOfEnabledPhys() const
Return the number of PHY enabled.
ConnectionParameters & setScanParameters(phy_t phy, scan_interval_t scanInterval, scan_window_t scanWindow)
Set the scan parameters for a given PHY.
initiator_filter_policy_t getFilter() const
Return the initiator policy.
Entry namespace for all BLE API definitions.