bool advertising; /* Advertising active */
gchar *version; /* Bluetooth Version */
uint8_t adv_tx_power;
+ guint adv_restart_timeout;
bool le_discovering; /* LE Discovery active */
GSList *le_discovery_list; /* list of LE discovery clients */
#endif
if (adapter->le_discovering == true) {
struct watch_client *client;
client = adapter->le_discovery_list->data;
- g_dbus_remove_watch(dbus_conn, client->watch);
adapter->le_discovering = false;
+ g_dbus_remove_watch(dbus_conn, client->watch);
}
} else {
hci_set_bit(BDADDR_LE_PUBLIC, &adapter->discovery_type);
DBG("cp.type %d", cp.type);
DBG("adapter->discovery_enable %d", adapter->discovery_enable);
if (adapter->discovery_enable == 0x00) {
- g_dbus_remove_watch(dbus_conn, client->watch);
adapter->le_discovering = false;
+ g_dbus_remove_watch(dbus_conn, client->watch);
g_dbus_emit_property_changed(dbus_conn, adapter->path,
ADAPTER_INTERFACE, "LEDiscovering");
DBUS_TYPE_INVALID))
return btd_error_invalid_args(msg);
+ if (adapter->adv_restart_timeout > 0)
+ return btd_error_in_progress(msg);
+
DBG("%s advertising slot_id %d", enable ? "Enable" : "Disable", slot_id);
if (adapter_le_is_supported_multi_advertising() && slot_id > 0)
struct btd_adapter *adapter = data->adapter;
dbus_bool_t err;
+ adapter->adv_restart_timeout = 0;
+
err = adapter_le_enable_multi_adv(adapter, TRUE, data->slot_id);
if (!err)
advertising_state_changed(adapter, data->slot_id, FALSE);
data->adapter = adapter;
data->slot_id = ev->adv_instance;
- g_timeout_add(300, multi_adv_start_timeout_cb, data);
+ adapter->adv_restart_timeout =
+ g_timeout_add(300, multi_adv_start_timeout_cb, data);
}
}