summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/dbus-adapter.c5
-rw-r--r--hcid/dbus-error.c5
-rw-r--r--hcid/dbus.c11
-rw-r--r--hcid/dbus.h7
4 files changed, 24 insertions, 4 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c
index d77b9be7..3c2a3300 100644
--- a/hcid/dbus-adapter.c
+++ b/hcid/dbus-adapter.c
@@ -1137,6 +1137,9 @@ static DBusMessage *handle_dev_discover_devices_req(DBusMessage *msg, void *data
uint32_t lap = 0x9e8b33;
int dd;
+ if (dbus_data->busy)
+ return error_discover_in_progress(msg);
+
dd = hci_open_dev(dbus_data->dev_id);
if (dd < 0)
return error_no_such_adapter(msg);
@@ -1283,7 +1286,7 @@ DBusHandlerResult msg_func_device(DBusConnection *conn, DBusMessage *msg, void *
signature = dbus_message_get_signature(msg);
iface = dbus_message_get_interface(msg);
- info("Adapter path:%s method:%s", dbus_message_get_path(msg), method);
+ info("Adapter path:%s iface:%s method:%s", dbus_message_get_path(msg), iface, method);
if (strcmp(ADAPTER_INTERFACE, iface))
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
diff --git a/hcid/dbus-error.c b/hcid/dbus-error.c
index 4da6a9fd..8c169efd 100644
--- a/hcid/dbus-error.c
+++ b/hcid/dbus-error.c
@@ -235,3 +235,8 @@ DBusMessage *error_bonding_in_progress(DBusMessage *msg)
{
return error_in_progress(msg, "Bonding in progress");
}
+
+DBusMessage *error_discover_in_progress(DBusMessage *msg)
+{
+ return error_in_progress(msg, "Discover in progress");
+}
diff --git a/hcid/dbus.c b/hcid/dbus.c
index 471952b2..bb8d2528 100644
--- a/hcid/dbus.c
+++ b/hcid/dbus.c
@@ -281,6 +281,7 @@ static gboolean register_dbus_path(const char *path, uint16_t path_id, uint16_t
data->discoverable_timeout = DFT_DISCOVERABLE_TIMEOUT;
data->timeout_hits = 0;
data->timeout_handler = NULL;
+ data->busy = 0;
if (fallback) {
if (!dbus_connection_register_fallback(connection, path, pvtable, data)) {
@@ -554,6 +555,7 @@ void hcid_dbus_inquiry_start(bdaddr_t *local)
{
DBusMessage *message = NULL;
char path[MAX_PATH_LENGTH];
+ struct hci_dbus_data *pdata = NULL;
char *local_addr;
bdaddr_t tmp;
int id;
@@ -568,6 +570,10 @@ void hcid_dbus_inquiry_start(bdaddr_t *local)
snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ if (dbus_connection_get_object_path_data(connection, path, (void*) &pdata)) {
+ pdata->busy = 1;
+ }
+
message = dbus_message_new_signal(path, ADAPTER_INTERFACE,
DEV_SIG_DISCOVER_START);
if (message == NULL) {
@@ -591,6 +597,7 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)
{
DBusMessage *message = NULL;
char path[MAX_PATH_LENGTH];
+ struct hci_dbus_data *pdata = NULL;
char *local_addr;
bdaddr_t tmp;
int id;
@@ -605,6 +612,10 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)
snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ if (dbus_connection_get_object_path_data(connection, path, (void*) &pdata)) {
+ pdata->busy = 0;
+ }
+
message = dbus_message_new_signal(path, ADAPTER_INTERFACE,
DEV_SIG_DISCOVER_COMPLETE);
if (message == NULL) {
diff --git a/hcid/dbus.h b/hcid/dbus.h
index 8c20c4a3..7e5b6f81 100644
--- a/hcid/dbus.h
+++ b/hcid/dbus.h
@@ -72,7 +72,8 @@ struct hci_dbus_data {
uint32_t discoverable_timeout;
uint32_t timeout_hits;
timeout_handler_func_t *timeout_handler;
- uint8_t mode;
+ uint8_t mode;
+ uint8_t busy;
};
typedef int register_function_t(DBusConnection *conn, uint16_t id);
@@ -101,7 +102,7 @@ DBusMessage *error_not_connected(DBusMessage *msg);
DBusMessage *error_bonding_already_exists(DBusMessage *msg);
DBusMessage *error_bonding_does_not_exists(DBusMessage *msg);
DBusMessage *error_bonding_in_progress(DBusMessage *msg);
-
+DBusMessage *error_discover_in_progress(DBusMessage *msg);
typedef void (*name_cb_t)(const char *name, void *user_data);
@@ -165,7 +166,7 @@ int name_listener_remove(DBusConnection *connection, const char *name,
#define DEV_LIST_BONDINGS "ListBondings"
#define DEV_GET_PIN_CODE_LENGTH "GetPinCodeLength"
#define DEV_GET_ENCRYPTION_KEY_SIZE "GetEncryptionKeySize"
-#define DEV_DISCOVER_DEVICES "DiscoverdDevices"
+#define DEV_DISCOVER_DEVICES "DiscoverDevices"
#define DEV_CANCEL_DISCOVERY "CancelDiscovery"
#define DEV_DISCOVER_CACHE "DiscoverCache"
#define DEV_DISCOVER_SERVICE "DiscoverService"