diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2008-12-01 00:17:28 +0200 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2008-12-01 00:17:28 +0200 | 
| commit | c97ce94e9319a57200bbcf7acf8e965395985e42 (patch) | |
| tree | 864ac7bed9ee0464ee3298a029b4d4953cabdc34 /src | |
| parent | 770e5445eb76ae30f226c01ec790ca375acb8f47 (diff) | |
Get rid of the first_up variable and always probe drivers on startup
This patch reorganizes the adapter_up function logic a little bit so
that we probe all drivers even if we are going to do a DEVDOWN ioctl
afterwards due to a previously stored off mode (in the OffMode=DevDown
case). An extra benefit is that we don't need the second init tracking
variable in the adapter struct anymore.
Diffstat (limited to 'src')
| -rw-r--r-- | src/adapter.c | 25 | 
1 files changed, 11 insertions, 14 deletions
| diff --git a/src/adapter.c b/src/adapter.c index 1a04729c..854e419f 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -119,7 +119,6 @@ struct btd_adapter {  	struct hci_dev dev;		/* hci info */  	gboolean pairable;		/* pairable state */ -	gboolean first_up;		/* Needed for offmode=devdown */  	gboolean initialized;  }; @@ -2518,15 +2517,10 @@ static void adapter_up(struct btd_adapter *adapter, int dd)  	char mode[14], srcaddr[18];  	int i;  	uint8_t scan_mode; -	gboolean powered, first_up = FALSE; +	gboolean powered, dev_down = FALSE;  	ba2str(&adapter->bdaddr, srcaddr); -	if (adapter->first_up == TRUE) { -		first_up = TRUE; -		adapter->first_up = FALSE; -	} -  	adapter->up = 1;  	adapter->discov_timeout = get_discoverable_timeout(srcaddr);  	adapter->pairable_timeout = get_pairable_timeout(srcaddr); @@ -2550,9 +2544,9 @@ static void adapter_up(struct btd_adapter *adapter, int dd)  			adapter->mode = MODE_OFF;  			scan_mode = SCAN_DISABLED;  		} else if (main_opts.offmode == HCID_OFFMODE_DEVDOWN) { -			if (first_up) { -				ioctl(dd, HCIDEVDOWN, adapter->dev_id); -				return; +			if (!adapter->initialized) { +				dev_down = TRUE; +				goto proceed;  			}  			if (read_on_mode(srcaddr, mode, sizeof(mode)) < 0) @@ -2574,8 +2568,9 @@ static void adapter_up(struct btd_adapter *adapter, int dd)  	}  proceed: -	hci_send_cmd(dd, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, -					1, &scan_mode); +	if (dev_down == FALSE) +		hci_send_cmd(dd, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, +				1, &scan_mode);  	/* retrieve the active connections: address the scenario where  	 * the are active connections before the daemon've started */ @@ -2598,7 +2593,7 @@ proceed:  		g_free(cl);  	} -	if (main_opts.offmode == HCID_OFFMODE_DEVDOWN) +	if (dev_down == FALSE && main_opts.offmode == HCID_OFFMODE_DEVDOWN)  		emit_property_changed(connection, adapter->path,  					ADAPTER_INTERFACE, "Powered",  					DBUS_TYPE_BOOLEAN, &powered); @@ -2608,6 +2603,9 @@ proceed:  		load_devices(adapter);  		adapter->initialized = TRUE;  	} + +	if (dev_down) +		ioctl(dd, HCIDEVDOWN, adapter->dev_id);  }  int adapter_start(struct btd_adapter *adapter) @@ -2934,7 +2932,6 @@ struct btd_adapter *adapter_create(DBusConnection *conn, int id)  	}  	adapter->dev_id = id; -	adapter->first_up = TRUE;  	adapter->state |= RESOLVE_NAME;  	adapter->path = g_strdup(path); | 
