diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/hal-dummy.c | 7 | ||||
| -rw-r--r-- | common/hal-libhal.c | 56 | ||||
| -rw-r--r-- | common/hal.h | 3 | 
3 files changed, 54 insertions, 12 deletions
| diff --git a/common/hal-dummy.c b/common/hal-dummy.c index 8d6be05f..a516ed1b 100644 --- a/common/hal-dummy.c +++ b/common/hal-dummy.c @@ -36,7 +36,12 @@ void hal_cleanup(void)  {  } -int hal_add_device(struct hal_device *device) +int hal_create_device(struct hal_device *device) +{ +	return 0; +} + +int hal_remove_device(struct hal_device *device)  {  	return 0;  } diff --git a/common/hal-libhal.c b/common/hal-libhal.c index 4ae97098..cf8ece1f 100644 --- a/common/hal-libhal.c +++ b/common/hal-libhal.c @@ -38,6 +38,19 @@  static LibHalContext *hal_ctx = NULL; +static DBusHandlerResult filter_function(DBusConnection *connection, +					DBusMessage *message, void *userdata) +{ +	info("filter_function: sender=%s destination=%s obj_path=%s interface=%s method=%s", +	     dbus_message_get_sender (message), +	     dbus_message_get_destination (message), +	     dbus_message_get_path (message), +	     dbus_message_get_interface (message), +	     dbus_message_get_member (message)); + +	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} +  int hal_init(DBusConnection *conn)  {  	hal_ctx = libhal_ctx_new(); @@ -46,6 +59,8 @@ int hal_init(DBusConnection *conn)  	conn = init_dbus(NULL, NULL, NULL); +	dbus_connection_add_filter(conn, filter_function, NULL, NULL); +  	if (libhal_ctx_set_dbus_connection(hal_ctx, conn) == FALSE) {  		error("Failed to connect HAL via system bus");  		libhal_ctx_free(hal_ctx); @@ -75,18 +90,14 @@ void hal_cleanup(void)  	hal_ctx = NULL;  } -int hal_add_device(struct hal_device *device) +int hal_create_device(struct hal_device *device)  { +	DBusError err;  	char udi[128], *dev;  	char *str = "00000000-0000-1000-8000-00805f9b34fb";  	dev = libhal_new_device(hal_ctx, NULL); -	if (libhal_device_add_capability(hal_ctx, dev, -					"bluetooth", NULL) == FALSE) { -		error("Failed to add device capability"); -	} -  	if (libhal_device_set_property_string(hal_ctx, dev,  				"bluetooth.uuid", str, NULL) == FALSE) {  		error("Failed to add UUID property"); @@ -97,14 +108,39 @@ int hal_add_device(struct hal_device *device)  		error("Failed to add connected state property");  	} -	sprintf(udi, "/org/freedesktop/Hal/devices/bluetooth_network_connection_aabbccddeeff"); +	if (libhal_device_add_capability(hal_ctx, dev, +					"bluetooth", NULL) == FALSE) { +		error("Failed to add device capability"); +	} -	if (libhal_remove_device(hal_ctx, udi, NULL) == FALSE) { -		error("Can't remove old HAL device"); +	sprintf(udi, "/org/freedesktop/Hal/devices/bluetooth_test"); + +	dbus_error_init(&err); +	if (libhal_device_claim_interface(hal_ctx, dev, +			"org.freedesktop.Hal.Device.MyBluetooth", +				"    <method name=\"Connect\">\n" +				"    </method>\n" +				"    <method name=\"Disconnect\">\n" +				"    </method>\n", +			&err) == FALSE) { +		error("Failed to claim to interface: ", err.message);  	}  	if (libhal_device_commit_to_gdl(hal_ctx, dev, udi, NULL) == FALSE) { -		error("Failed to add new HAL device"); +		error("Failed to create HAL device"); +	} + +	return 0; +} + +int hal_remove_device(struct hal_device *device) +{ +	char udi[128]; + +	sprintf(udi, "/org/freedesktop/Hal/devices/bluetooth_test"); + +	if (libhal_remove_device(hal_ctx, udi, NULL) == FALSE) { +		error("Failed to remove HAL device");  	}  	return 0; diff --git a/common/hal.h b/common/hal.h index f2afacad..5f80fb92 100644 --- a/common/hal.h +++ b/common/hal.h @@ -31,4 +31,5 @@ struct hal_device {  	char uuid[37];  }; -int hal_add_device(struct hal_device *); +int hal_create_device(struct hal_device *); +int hal_remove_device(struct hal_device *); | 
