summaryrefslogtreecommitdiff
path: root/src/adapter.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2009-04-16 18:20:08 -0300
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2009-04-16 18:20:08 -0300
commit999d9b9ac1f8e7d25f620661b99ae6068560c3f1 (patch)
treee691dd62a9be0cfa4b46396ff4fac9cc2a0b4fb9 /src/adapter.c
parentdbfd944d832fbef2fb5ba9a69974697810f36d1a (diff)
downloadbluez-999d9b9ac1f8e7d25f620661b99ae6068560c3f1.tar.gz
Emit Manager.AdapterAdded only when adapter is ready.
Emitting Manager.AdapterAdded without adapter being ready may cause Adapter.GetProperties to return properties in an invalid state.
Diffstat (limited to 'src/adapter.c')
-rw-r--r--src/adapter.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 44a93b1aa..a60fa77fb 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1243,7 +1243,7 @@ static DBusMessage *get_properties(DBusConnection *conn,
dict_append_entry(&dict, "Class", DBUS_TYPE_UINT32, &class);
/* Powered */
- value = adapter->up ? TRUE : FALSE;
+ value = (adapter->up && !adapter->off_requested) ? TRUE : FALSE;
dict_append_entry(&dict, "Powered", DBUS_TYPE_BOOLEAN, &value);
/* Discoverable */
@@ -2057,15 +2057,10 @@ static int adapter_up(struct btd_adapter *adapter, int dd)
}
proceed:
- if (dev_down == FALSE) {
+ if (dev_down == FALSE)
hci_send_cmd(dd, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE,
1, &scan_mode);
- emit_property_changed(connection, adapter->path,
- ADAPTER_INTERFACE, "Powered",
- DBUS_TYPE_BOOLEAN, &powered);
- }
-
if (adapter->initialized == FALSE) {
load_drivers(adapter);
load_devices(adapter);
@@ -2077,12 +2072,18 @@ proceed:
adapter->initialized = TRUE;
adapter_update(adapter, 0, FALSE);
+
+ manager_add_adapter(adapter->path);
}
if (dev_down) {
ioctl(dd, HCIDEVDOWN, adapter->dev_id);
+ adapter->off_requested = TRUE;
return 1;
- }
+ } else
+ emit_property_changed(connection, adapter->path,
+ ADAPTER_INTERFACE, "Powered",
+ DBUS_TYPE_BOOLEAN, &powered);
return 0;
}
@@ -2520,6 +2521,11 @@ int adapter_get_state(struct btd_adapter *adapter)
return adapter->state;
}
+gboolean adapter_is_ready(struct btd_adapter *adapter)
+{
+ return adapter->initialized;
+}
+
struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
struct remote_dev_info *match)
{