diff --git a/src/adapter.c b/src/adapter.c
index 10432b7..ec26aab 100644
--- a/src/adapter.c
+++ b/src/adapter.c
mgmt_request_func_t func, void *user_data)
{
struct mgmt_cp_set_device_flags cp;
+ uint32_t supported = btd_device_get_supported_flags(device);
const bdaddr_t *bdaddr;
uint8_t bdaddr_type;
- if (!btd_has_kernel_features(KERNEL_CONN_CONTROL))
+ if (!btd_has_kernel_features(KERNEL_CONN_CONTROL) ||
+ (supported | flags) != supported)
return;
bdaddr = device_get_address(device);
diff --git a/src/device.c b/src/device.c
index bc99420..698c668 100644
--- a/src/device.c
+++ b/src/device.c
return dev->current_flags;
}
+uint32_t btd_device_get_supported_flags(struct btd_device *dev)
+{
+ return dev->supported_flags;
+}
+
/* This event is sent immediately after add device on all mgmt sockets.
* Afterwards, it is only sent to mgmt sockets other than the one which called
* set_device_flags.
diff --git a/src/device.h b/src/device.h
index cc474bd..9e81fda 100644
--- a/src/device.h
+++ b/src/device.h
int btd_device_connect_services(struct btd_device *dev, GSList *services);
uint32_t btd_device_get_current_flags(struct btd_device *dev);
+uint32_t btd_device_get_supported_flags(struct btd_device *dev);
void btd_device_flags_changed(struct btd_device *dev, uint32_t supported_flags,
uint32_t current_flags);