From 767e85b10ab1ae294e6d9128250544b225a6e680 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 1 Feb 2008 12:39:32 +0000 Subject: Send DefaultAdapterChanged more often --- hcid/dbus-api.txt | 3 ++- hcid/dbus-hci.c | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/hcid/dbus-api.txt b/hcid/dbus-api.txt index 9372ab21..fb930e72 100644 --- a/hcid/dbus-api.txt +++ b/hcid/dbus-api.txt @@ -224,7 +224,8 @@ Signals void AdapterAdded(string path) void DefaultAdapterChanged(string path) - Parameter is object path of the new default adapter. + Parameter is object path of the new default adapter, + or an empty string if there is no available adapters. void ServiceAdded(string path) diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index e5114517..2a2286b0 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -532,7 +532,7 @@ int hcid_dbus_unregister_device(uint16_t id) ret = unregister_adapter_path(path); - if (ret == 0 && get_default_adapter() == id) { + if (ret == 0 && (get_default_adapter() == id || get_default_adapter() < 0)) { int new_default = hci_get_route(NULL); set_default_adapter(new_default); if (new_default >= 0) { @@ -543,6 +543,13 @@ int hcid_dbus_unregister_device(uint16_t id) "DefaultAdapterChanged", DBUS_TYPE_STRING, &pptr, DBUS_TYPE_INVALID); + } else { + *path = '\0'; + dbus_connection_emit_signal(connection, BASE_PATH, + MANAGER_INTERFACE, + "DefaultAdapterChanged", + DBUS_TYPE_STRING, &pptr, + DBUS_TYPE_INVALID); } } @@ -551,7 +558,7 @@ int hcid_dbus_unregister_device(uint16_t id) int hcid_dbus_start_device(uint16_t id) { - char path[MAX_PATH_LENGTH]; + char path[MAX_PATH_LENGTH], *pptr; struct hci_dev_info di; struct adapter* adapter; struct hci_conn_list_req *cl = NULL; @@ -633,10 +640,17 @@ int hcid_dbus_start_device(uint16_t id) DBUS_TYPE_STRING, &mode, DBUS_TYPE_INVALID); -failed: - if (ret == 0 && get_default_adapter() < 0) + if (get_default_adapter() < 0) { set_default_adapter(id); + pptr = path; + dbus_connection_emit_signal(connection, BASE_PATH, + MANAGER_INTERFACE, + "DefaultAdapterChanged", + DBUS_TYPE_STRING, &pptr, + DBUS_TYPE_INVALID); + } +failed: if (dd >= 0) hci_close_dev(dd); -- cgit