diff options
| author | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-09-03 19:31:10 -0300 | 
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-09-04 10:05:58 -0300 | 
| commit | 531fe8fae7f46a86ec850748ffd44ffa754014bd (patch) | |
| tree | f69173c150ad7e061b0477bdea5a283f1865254c | |
| parent | 01761bea1ce6539b97640123660c67d81c54318b (diff) | |
Rename DiscoverDevices to StartDiscovery, CancelDiscovery to StopDiscovery and fix logic around Discovering property to reflect when the base band is busy.
| -rw-r--r-- | doc/adapter-api.txt | 24 | ||||
| -rw-r--r-- | src/adapter.c | 17 | ||||
| -rw-r--r-- | src/dbus-hci.c | 27 | 
3 files changed, 36 insertions, 32 deletions
| diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt index 4a915d7f..a97ee921 100644 --- a/doc/adapter-api.txt +++ b/doc/adapter-api.txt @@ -54,31 +54,31 @@ Methods		dict GetProperties()  			Possible Errors: org.bluez.Error.DoesNotExist -		void DiscoverDevices() +		void StartDiscovery() -			This method starts the device discovery procedure. This +			This method starts the device discovery session. This  			includes an inquiry procedure and remote device name -			resolving. +			resolving. Use StopDiscovery to release the sessions +			acquired. -			On start up this process will generate a DiscoveryStarted -			signal and then return DeviceFound singals. If the -			procedure has been finished an DiscoveryCompleted -			signal will be sent. +			This process will start emitting DeviceFound and +			PropertyChanged "Discovering" signals.  			Possible errors: org.bluez.Error.NotReady  					 org.bluez.Error.Failed -					 org.bluez.Error.InProgress -					 org.bluez.Error.NoSuchAdapter -		void CancelDiscovery() +		void StopDiscovery() -			This method will cancel any previous DiscoverDevices +			This method will cancel any previous StartDiscovery  			transaction. +			Note that a discovery procedure is shared between all +			discovery sessions thus calling StopDiscovery will only +			release a single session. +  			Possible errors: org.bluez.Error.NotReady  					 org.bluez.Error.Failed  					 org.bluez.Error.NotAuthorized -					 org.bluez.Error.NoSuchAdapter  		object FindDevice(string address) diff --git a/src/adapter.c b/src/adapter.c index 36cac369..4f30bbfb 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1413,7 +1413,7 @@ static int start_periodic_inquiry(struct btd_adapter *adapter)  	return 0;  } -static DBusMessage *adapter_discover_devices(DBusConnection *conn, +static DBusMessage *adapter_start_discovery(DBusConnection *conn,  						DBusMessage *msg, void *data)  {  	struct session_req *req; @@ -1450,7 +1450,7 @@ done:  	return dbus_message_new_method_return(msg);  } -static DBusMessage *adapter_cancel_discovery(DBusConnection *conn, +static DBusMessage *adapter_stop_discovery(DBusConnection *conn,  						DBusMessage *msg, void *data)  {  	struct btd_adapter *adapter = data; @@ -1973,8 +1973,8 @@ static GDBusMethodTable adapter_methods[] = {  	{ "RequestMode",	"s",	"",	request_mode,  						G_DBUS_METHOD_FLAG_ASYNC},  	{ "ReleaseMode",	"",	"",	release_mode		}, -	{ "DiscoverDevices",	"",	"",	adapter_discover_devices}, -	{ "CancelDiscovery",	"",	"",	adapter_cancel_discovery, +	{ "StartDiscovery",	"",	"",	adapter_start_discovery }, +	{ "StopDiscovery",	"",	"",	adapter_stop_discovery,  						G_DBUS_METHOD_FLAG_ASYNC},  	{ "ListDevices",	"",	"ao",	list_devices		},  	{ "CreateDevice",	"s",	"o",	create_device, @@ -2777,15 +2777,11 @@ void adapter_set_state(struct btd_adapter *adapter, int state)  	if (adapter->state == state)  		return; -	if (state & PERIODIC_INQUIRY || state & STD_INQUIRY) { +	if (state & PERIODIC_INQUIRY || state & STD_INQUIRY)  		discov_active = TRUE; -		if (adapter->scheduler_id) -			goto done; -	} else if (adapter->disc_sessions && adapter->state & STD_INQUIRY) { +	else if (adapter->disc_sessions && main_opts.inqmode)  		adapter->scheduler_id = g_timeout_add(main_opts.inqmode * 1000,  				(GSourceFunc) start_inquiry, adapter); -		goto done; -	}  	if (!discov_active && adapter->found_devices) {  		g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL); @@ -2803,7 +2799,6 @@ void adapter_set_state(struct btd_adapter *adapter, int state)  				ADAPTER_INTERFACE, "Discovering",  				DBUS_TYPE_BOOLEAN, &discov_active); -done:  	adapter->state = state;  } diff --git a/src/dbus-hci.c b/src/dbus-hci.c index 3776456c..f04694d4 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -714,12 +714,6 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  				!(adapter_get_state(adapter) & STD_INQUIRY))  		adapter_update_oor_devices(adapter); -	/* reset the discover type to be able to handle D-Bus and non D-Bus -	 * requests */ -	state = adapter_get_state(adapter); -	state &= ~STD_INQUIRY; -	adapter_set_state(adapter, state); -  	/*  	 * The following scenarios can happen:  	 * 1. standard inquiry: always send discovery completed signal @@ -731,7 +725,15 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  	 *  	 * Keep in mind that non D-Bus requests can arrive.  	 */ -	found_device_req_name(adapter); +	if (found_device_req_name(adapter) == 0) +		return; + +	/* reset the discover type to be able to handle D-Bus and non D-Bus +	 * requests */ +	state = adapter_get_state(adapter); +	state &= ~STD_INQUIRY; +	state &= ~PERIODIC_INQUIRY; +	adapter_set_state(adapter, state);  }  void hcid_dbus_periodic_inquiry_start(bdaddr_t *local, uint8_t status) @@ -884,7 +886,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,  		state |= PERIODIC_INQUIRY;  		adapter_set_state(adapter, state);  	} -		/* Out of range list update */ +	/* Out of range list update */  	if (adapter_get_state(adapter) & PERIODIC_INQUIRY)  		adapter_remove_oor_device(adapter, peer_addr); @@ -989,6 +991,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	char peer_addr[18];  	const char *paddr = peer_addr;  	const gchar *dev_path; +	int state;  	adapter = manager_find_adapter(local);  	if (!adapter) { @@ -1016,7 +1019,13 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	adapter_remove_found_device(adapter, peer);  	/* check if there is more devices to request names */ -	found_device_req_name(adapter); +	if (found_device_req_name(adapter) == 0) +		return; + +	state = adapter_get_state(adapter); +	state &= ~PERIODIC_INQUIRY; +	state &= ~STD_INQUIRY; +	adapter_set_state(adapter, state);  }  void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle, | 
