diff options
| -rw-r--r-- | hcid/adapter.c | 38 | ||||
| -rw-r--r-- | hcid/adapter.h | 5 | ||||
| -rw-r--r-- | hcid/dbus-hci.c | 10 | 
3 files changed, 42 insertions, 11 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, diff --git a/hcid/adapter.h b/hcid/adapter.h index 9da56d3e..280c1d1c 100644 --- a/hcid/adapter.h +++ b/hcid/adapter.h @@ -115,7 +115,10 @@ struct adapter {  dbus_bool_t adapter_init(DBusConnection *conn, const char *path); -struct device *adapter_get_device(struct adapter *adapter, const char *dest); +struct device *adapter_get_device(DBusConnection *conn, +				struct adapter *adapter, const gchar *address); + +struct device *adapter_find_device(struct adapter *adapter, const char *dest);  const char *major_class_str(uint32_t class); diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index f87d0c2e..72ea30a9 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -1006,7 +1006,7 @@ int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci)  	ba2str(&ci->bdaddr, addr); -	device = adapter_get_device(adapter, addr); +	device = adapter_find_device(adapter, addr);  	if (!device) {  		device = device_create(connection, adapter, addr, NULL);  		device->created = TRUE; @@ -1090,7 +1090,7 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,  				struct device *device;  				gboolean paired = TRUE; -				device = adapter_get_device(adapter, paddr); +				device = adapter_get_device(connection, adapter, paddr);  				if (device) {  					dbus_connection_emit_property_changed(connection,  						device->path, DEVICE_INTERFACE, @@ -1807,7 +1807,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  		if (hcid_dbus_use_experimental()) {  			struct device *device; -			device = adapter_get_device(adapter, paddr); +			device = adapter_find_device(adapter, paddr);  			if (device) {  				dbus_connection_emit_property_changed(connection,  						device->path, DEVICE_INTERFACE, @@ -1920,7 +1920,7 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle,  			struct device *device;  			gboolean connected = TRUE; -			device = adapter_get_device(adapter, paddr); +			device = adapter_find_device(adapter, paddr);  			if (device) {  				dbus_connection_emit_property_changed(connection,  					device->path, DEVICE_INTERFACE, @@ -2036,7 +2036,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  		struct device *device;  		gboolean connected = FALSE; -		device = adapter_get_device(adapter, paddr); +		device = adapter_find_device(adapter, paddr);  		if (device) {  			dbus_connection_emit_property_changed(connection,  						device->path, DEVICE_INTERFACE, | 
