diff options
author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-04-16 18:20:08 -0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-04-16 18:20:08 -0300 |
commit | 999d9b9ac1f8e7d25f620661b99ae6068560c3f1 (patch) | |
tree | e691dd62a9be0cfa4b46396ff4fac9cc2a0b4fb9 /src/adapter.c | |
parent | dbfd944d832fbef2fb5ba9a69974697810f36d1a (diff) | |
download | bluez-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.c | 22 |
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) { |