This makes sure the flags are supported before attempting to set it.
Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
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);
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.
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);