diff --git a/features/FEATURE_BLE/ble/BLETypes.h b/features/FEATURE_BLE/ble/BLETypes.h index bbe3dc2ad9..c445340e20 100644 --- a/features/FEATURE_BLE/ble/BLETypes.h +++ b/features/FEATURE_BLE/ble/BLETypes.h @@ -32,6 +32,16 @@ namespace ble { +/* replace with std::clamp when it arrives */ +template +void clamp(T& value, const R& min, const R& max) { + if (value > max) { + value = max; + } else if (value < min) { + value = min; + } +} + /** * Opaque reference to a connection. * diff --git a/features/FEATURE_BLE/ble/gap/AdvertisingParameters.h b/features/FEATURE_BLE/ble/gap/AdvertisingParameters.h index 5c0a563fa5..95f3229a6e 100644 --- a/features/FEATURE_BLE/ble/gap/AdvertisingParameters.h +++ b/features/FEATURE_BLE/ble/gap/AdvertisingParameters.h @@ -22,14 +22,6 @@ #include "blecommon.h" #include "SafeEnum.h" -/* TODO: std::clamp */ -#define CLAMP(value, min, max) \ - if (value > max) { \ - value = max; \ - } else if (value < min) { \ - value = min; \ - } - /** * @addtogroup ble * @{ @@ -140,11 +132,11 @@ public: _maxInterval = 0; } else if (_advType == ble::ADV_NON_CONNECTABLE_UNDIRECTED) { /* Min interval is slightly larger than in other modes. */ - CLAMP(_minInterval, GAP_ADV_PARAMS_INTERVAL_MIN_NONCON, GAP_ADV_PARAMS_INTERVAL_MAX); - CLAMP(_maxInterval, GAP_ADV_PARAMS_INTERVAL_MIN_NONCON, GAP_ADV_PARAMS_INTERVAL_MAX); + ble::clamp(_minInterval, GAP_ADV_PARAMS_INTERVAL_MIN_NONCON, GAP_ADV_PARAMS_INTERVAL_MAX); + ble::clamp(_maxInterval, GAP_ADV_PARAMS_INTERVAL_MIN_NONCON, GAP_ADV_PARAMS_INTERVAL_MAX); } else { - CLAMP(_minInterval, GAP_ADV_PARAMS_INTERVAL_MIN, GAP_ADV_PARAMS_INTERVAL_MAX); - CLAMP(_maxInterval, GAP_ADV_PARAMS_INTERVAL_MIN, GAP_ADV_PARAMS_INTERVAL_MAX); + ble::clamp(_minInterval, GAP_ADV_PARAMS_INTERVAL_MIN, GAP_ADV_PARAMS_INTERVAL_MAX); + ble::clamp(_maxInterval, GAP_ADV_PARAMS_INTERVAL_MIN, GAP_ADV_PARAMS_INTERVAL_MAX); } /* Timeout checks. */ diff --git a/features/FEATURE_BLE/ble/gap/ExtendedConnectParameters.h b/features/FEATURE_BLE/ble/gap/ExtendedConnectParameters.h index 810491390d..085cd1a581 100644 --- a/features/FEATURE_BLE/ble/gap/ExtendedConnectParameters.h +++ b/features/FEATURE_BLE/ble/gap/ExtendedConnectParameters.h @@ -59,6 +59,9 @@ public: _scanInterval[phy_index] = scanInterval_us / 625; _scanWindow[phy_index] = scanWindow_us / 625; + ble::clamp(_scanInterval[phy_index], 0x0004, 0xFFFF); + ble::clamp(_scanWindow[phy_index], 0x0006, 0x0C80); + return *this; } @@ -274,14 +277,14 @@ private: ble::scanning_policy_mode_t _filterPolicy; ble::own_address_type_t _ownAddressType; - uint16_t _scanInterval[MAX_PARAM_PHYS]; /* 0.625 */ - uint16_t _scanWindow[MAX_PARAM_PHYS]; /* 0.625 */ - uint16_t _minConnectionInterval[MAX_PARAM_PHYS]; /* 1.25 */ - uint16_t _maxConnectionInterval[MAX_PARAM_PHYS]; /* 1.25 */ - uint16_t _slaveLatency[MAX_PARAM_PHYS]; /* 0.625 */ - uint16_t _connectionSupervisionTimeout[MAX_PARAM_PHYS]; /* 10 */ - uint16_t _minEventLength[MAX_PARAM_PHYS]; /* 0.625 */ - uint16_t _maxEventLength[MAX_PARAM_PHYS]; /* 0.625 */ + uint16_t _scanInterval[MAX_PARAM_PHYS]; /* 0.625 ms */ + uint16_t _scanWindow[MAX_PARAM_PHYS]; /* 0.625 ms */ + uint16_t _minConnectionInterval[MAX_PARAM_PHYS]; /* 1.25 ms */ + uint16_t _maxConnectionInterval[MAX_PARAM_PHYS]; /* 1.25 ms */ + uint16_t _slaveLatency[MAX_PARAM_PHYS]; /* events */ + uint16_t _connectionSupervisionTimeout[MAX_PARAM_PHYS]; /* 10 ms */ + uint16_t _minEventLength[MAX_PARAM_PHYS]; /* 0.625 ms */ + uint16_t _maxEventLength[MAX_PARAM_PHYS]; /* 0.625 ms */ bool _enabledPhy[MAX_PARAM_PHYS]; };