diff options
Diffstat (limited to 'hcid/adapter.c')
| -rw-r--r-- | hcid/adapter.c | 38 | 
1 files changed, 33 insertions, 5 deletions
| diff --git a/hcid/adapter.c b/hcid/adapter.c index 045d425d..04fe4c09 100644 --- a/hcid/adapter.c +++ b/hcid/adapter.c @@ -2014,7 +2014,7 @@ static DBusHandlerResult adapter_set_remote_alias(DBusConnection *conn,  	if (new_path) {  		struct device *device; -		device = adapter_get_device(adapter, addr); +		device = adapter_find_device(adapter, addr);  		if (device) {  			dbus_connection_emit_property_changed(conn,  					device->path, DEVICE_INTERFACE, @@ -2267,7 +2267,7 @@ static void create_device_req_free(struct create_device_req *create)  	g_free(create);  } -struct device *adapter_get_device(struct adapter *adapter, const char *dest) +struct device *adapter_find_device(struct adapter *adapter, const char *dest)  {  	struct device *device;  	GSList *l; @@ -2285,6 +2285,34 @@ struct device *adapter_get_device(struct adapter *adapter, const char *dest)  	return device;  } +struct device *adapter_get_device(DBusConnection *conn, +				struct adapter *adapter, const gchar *address) +{ +	struct device *device; +	char path[MAX_PATH_LENGTH]; + +	if (!adapter) +		return NULL; + +	device = adapter_find_device(adapter, address); +	if (device) +		return device; + +	device = device_create(conn, adapter, address, NULL); +	if (!device) +		return NULL; + +	snprintf(path, MAX_PATH_LENGTH, "/hci%d", adapter->dev_id); + +	adapter->devices = g_slist_append(adapter->devices, device); +	dbus_connection_emit_signal(conn, path, +				ADAPTER_INTERFACE, "DeviceCreated", +				DBUS_TYPE_OBJECT_PATH, &device->path, +				DBUS_TYPE_INVALID); + +	return device; +} +  static gboolean create_bonding_conn_complete(GIOChannel *io, GIOCondition cond,  						struct adapter *adapter)  { @@ -2643,7 +2671,7 @@ static DBusHandlerResult adapter_remove_bonding(DBusConnection *conn,  		struct device *device;  		gboolean paired = FALSE; -		device = adapter_get_device(adapter, addr_ptr); +		device = adapter_find_device(adapter, addr_ptr);  		if (device) {  			dbus_connection_emit_property_changed(conn,  					device->path, DEVICE_INTERFACE, @@ -3289,7 +3317,7 @@ static DBusHandlerResult adapter_set_trusted(DBusConnection *conn,  		struct device *device;  		gboolean trust = TRUE; -		device = adapter_get_device(adapter, address); +		device = adapter_find_device(adapter, address);  		if (device) {  			dbus_connection_emit_property_changed(conn,  					device->path, DEVICE_INTERFACE, @@ -3370,7 +3398,7 @@ static DBusHandlerResult adapter_remove_trust(DBusConnection *conn,  		struct device *device;  		gboolean trust = FALSE; -		device = adapter_get_device(adapter, address); +		device = adapter_find_device(adapter, address);  		if (device) {  			dbus_connection_emit_property_changed(conn,  					device->path, DEVICE_INTERFACE, | 
