diff options
Diffstat (limited to 'src/adapter.c')
| -rw-r--r-- | src/adapter.c | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c index bb2e131f..fe9aaef0 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2850,6 +2850,50 @@ void adapter_remove_oor_device(struct adapter *adapter, char *peer_addr)  	}  } +void adapter_mode_changed(struct adapter *adapter, uint8_t scan_mode) +{ +	const char *mode; +	const gchar *path = adapter_get_path(adapter); + +	adapter_set_scan_mode(adapter, scan_mode); + +	switch (scan_mode) { +	case SCAN_DISABLED: +		mode = "off"; +		adapter_set_mode(adapter, MODE_OFF); +		break; +	case SCAN_PAGE: +		mode = "connectable"; +		adapter_set_mode(adapter, MODE_CONNECTABLE); +		break; +	case (SCAN_PAGE | SCAN_INQUIRY): + +		if (adapter->discov_timeout != 0) +			adapter_set_discov_timeout(adapter, adapter->discov_timeout * 1000); + +		if (adapter_get_mode(adapter) == MODE_LIMITED) { +			mode = "limited"; +		} else { +			adapter_set_mode(adapter, MODE_DISCOVERABLE); +			mode = "discoverable"; +		} +		break; +	case SCAN_INQUIRY: +		/* Address the scenario where another app changed the scan mode */ +		if (adapter->discov_timeout != 0) +			adapter_set_discov_timeout(adapter, adapter->discov_timeout * 1000); + +		/* ignore, this event should not be sent*/ +	default: +		/* ignore, reserved */ +		return; +	} + +	dbus_connection_emit_property_changed(connection, path, +					ADAPTER_INTERFACE, "Mode", +					DBUS_TYPE_STRING, &mode); +} +  int btd_register_adapter_driver(struct btd_adapter_driver *driver)  {  	adapter_drivers = g_slist_append(adapter_drivers, driver);  | 
