move feature support into user api

pull/8738/head
paul-szczepanek-arm 2018-11-14 16:54:17 +00:00 committed by Vincent Coubard
parent 05fb66a987
commit 09f71d278d
7 changed files with 54 additions and 31 deletions

View File

@ -44,6 +44,7 @@ void clamp(T& value, const R& min, const R& max) {
}
}
/* BLE units, using microseconds as the common denominator */
typedef Duration<uint32_t, 625, Range<0x20, 0xFFFFFF> > adv_interval_t;
typedef Duration<uint16_t, 10000, Range<0x00, 0xFFFF> > adv_duration_t;
typedef Duration<uint16_t, 10000, Range<0x00, 0xFFFF> > scan_duration_t;
@ -61,6 +62,34 @@ typedef Duration<uint32_t, 1> us_t;
typedef Bounded<uint16_t, 0, 0x01F3> slave_latency_t;
/** Features supported by the controller.
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B - 4.6 */
struct ControllerSupportedFeatures_t : SafeEnum<ControllerSupportedFeatures_t, uint8_t> {
enum type {
LE_ENCRYPTION = 0,
CONNECTION_PARAMETERS_REQUEST_PROCEDURE,
EXTENDED_REJECT_INDICATION,
SLAVE_INITIATED_FEATURES_EXCHANGE,
LE_PING,
LE_DATA_PACKET_LENGTH_EXTENSION,
LL_PRIVACY,
EXTENDED_SCANNER_FILTER_POLICIES,
LE_2M_PHY,
STABLE_MODULATION_INDEX_TRANSMITTER,
STABLE_MODULATION_INDEX_RECEIVER,
LE_CODED_PHY,
LE_EXTENDED_ADVERTISING,
LE_PERIODIC_ADVERTISING,
CHANNEL_SELECTION_ALGORITHM_2,
LE_POWER_CLASS
};
/**
* Construct a new instance of ControllerSupportedFeatures_t.
*/
ControllerSupportedFeatures_t(type value) : SafeEnum<ControllerSupportedFeatures_t, uint8_t>(value) { }
};
/**
* Opaque reference to a connection.
*

View File

@ -1768,6 +1768,15 @@ public:
return BLE_ERROR_NOT_IMPLEMENTED;
}
/** Check controller support for a specific feature.
*
* @param feature Feature to check.
* @return True if feature is supported.
*/
bool IsFeatureSupported(
ble::ControllerSupportedFeatures_t feature
);
/* advertising */
/** Return currently available number of supported advertising sets.

View File

@ -76,6 +76,12 @@ public:
*/
virtual ~GenericGap();
/** @copydoc Gap::IsFeatureSupported
*/
bool IsFeatureSupported(
ble::ControllerSupportedFeatures_t feature
);
/** @copydoc Gap::getMaxAdvertisingSetNumber
*/
uint8_t getMaxAdvertisingSetNumber();

View File

@ -33,33 +33,6 @@ namespace pal {
* by that layer.
*/
struct Gap {
/** @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B - 4.6 */
struct ControllerSupportedFeatures_t : SafeEnum<ControllerSupportedFeatures_t, uint8_t> {
enum type {
LE_ENCRYPTION = 0,
CONNECTION_PARAMETERS_REQUEST_PROCEDURE,
EXTENDED_REJECT_INDICATION,
SLAVE_INITIATED_FEATURES_EXCHANGE,
LE_PING,
LE_DATA_PACKET_LENGTH_EXTENSION,
LL_PRIVACY,
EXTENDED_SCANNER_FILTER_POLICIES,
LE_2M_PHY,
STABLE_MODULATION_INDEX_TRANSMITTER,
STABLE_MODULATION_INDEX_RECEIVER,
LE_CODED_PHY,
LE_EXTENDED_ADVERTISING,
LE_PERIODIC_ADVERTISING,
CHANNEL_SELECTION_ALGORITHM_2,
LE_POWER_CLASS
};
/**
* Construct a new instance of ControllerSupportedFeatures_t.
*/
ControllerSupportedFeatures_t(type value) : SafeEnum<ControllerSupportedFeatures_t, uint8_t>(value) { }
};
struct EventHandler {
/**
* @copydoc Gap::EventHandler::onReadPhy

View File

@ -444,6 +444,12 @@ GenericGap::~GenericGap()
{
}
bool GenericGap::IsFeatureSupported(
ble::ControllerSupportedFeatures_t feature
) {
return _pal_gap.is_feature_supported(feature);
}
ble_error_t GenericGap::setAddress(
LegacyAddressType_t type,
const Address_t address
@ -2601,8 +2607,8 @@ void GenericGap::use_non_deprecated_scan_api() const
bool GenericGap::is_extended_advertising_available()
{
return _pal_gap.is_feature_supported(
pal::Gap::ControllerSupportedFeatures_t::LE_EXTENDED_ADVERTISING
return IsFeatureSupported(
ble::ControllerSupportedFeatures_t::LE_EXTENDED_ADVERTISING
);
}

View File

@ -15,7 +15,7 @@ namespace cordio {
class Gap : public ::ble::pal::Gap {
public:
virtual bool is_feature_supported(
Gap::ControllerSupportedFeatures_t feature
ble::ControllerSupportedFeatures_t feature
);
virtual ble_error_t initialize();

View File

@ -24,7 +24,7 @@ namespace vendor {
namespace cordio {
bool Gap::is_feature_supported(
Gap::ControllerSupportedFeatures_t feature
ble::ControllerSupportedFeatures_t feature
) {
return (HciGetLeSupFeat() & (1 << feature.value()));
}