diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2006-03-09 22:21:27 +0000 |
---|---|---|
committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2006-03-09 22:21:27 +0000 |
commit | 96c80bcf3082bfe60dec6e1885511787c65cbcfd (patch) | |
tree | 4aefce94e2c867f7fc6b9d78ce3a869e5d90a145 /hcid | |
parent | 3c1d9df615705539a3d43d46e80f978cf08b9948 (diff) |
avoid multiple inquiry request when there is pending inquiry procedure
Diffstat (limited to 'hcid')
-rw-r--r-- | hcid/dbus-adapter.c | 5 | ||||
-rw-r--r-- | hcid/dbus-error.c | 5 | ||||
-rw-r--r-- | hcid/dbus.c | 11 | ||||
-rw-r--r-- | hcid/dbus.h | 7 |
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" |