diff options
| -rw-r--r-- | input/device.c | 74 | ||||
| -rw-r--r-- | input/device.h | 4 | ||||
| -rw-r--r-- | input/error.h | 2 | ||||
| -rw-r--r-- | input/manager.c | 6 | 
4 files changed, 40 insertions, 46 deletions
| diff --git a/input/device.c b/input/device.c index 7e7325fb..5f70ede1 100644 --- a/input/device.c +++ b/input/device.c @@ -34,9 +34,9 @@  #include <sys/socket.h>  #include <bluetooth/bluetooth.h> +#include <bluetooth/hidp.h>  #include <bluetooth/l2cap.h>  #include <bluetooth/rfcomm.h> -#include <bluetooth/hidp.h>  #include <glib.h> @@ -47,10 +47,10 @@  #include "textfile.h"  #include "uinput.h" -#include "storage.h" +#include "device.h"  #include "error.h"  #include "manager.h" -#include "device.h" +#include "storage.h"  #define INPUT_DEVICE_INTERFACE	"org.bluez.input.Device" @@ -1003,21 +1003,11 @@ static const DBusObjectPathVTable device_table = {  /*   * Input registration functions   */ -int input_device_register(DBusConnection *conn, bdaddr_t *src, bdaddr_t *dst, -			struct hidp_connadd_req *hid, const char **path) +static int register_path(DBusConnection *conn, const char *path, struct input_device *idev)  {  	DBusMessage *msg; -	struct input_device *idev; - -	idev = input_device_new(src, dst); -	*path = create_input_path(idev->major, idev->minor); - -	memcpy(&idev->hidp, hid, sizeof(struct hidp_connadd_req)); - -	/* FIXME: rd_data is a pointer - hacking */ - -	if (!dbus_connection_register_object_path(conn, -				*path, &device_table, idev)) { +	if (!dbus_connection_register_object_path(conn, path, +							&device_table, idev)) {  		error("Input device path registration failed");  		return -1;  	} @@ -1028,50 +1018,56 @@ int input_device_register(DBusConnection *conn, bdaddr_t *src, bdaddr_t *dst,  		return -1;  	dbus_message_append_args(msg, -			DBUS_TYPE_STRING, &*path, +			DBUS_TYPE_STRING, &path,  			DBUS_TYPE_INVALID);  	send_message_and_unref(conn, msg); -	info("Created input device: %s", *path); +	info("Created input device: %s", path);  	return 0;  } -int fake_input_register(DBusConnection *conn, bdaddr_t *src, -			bdaddr_t *dst, uint8_t ch, const char **path) +int input_device_register(DBusConnection *conn, bdaddr_t *src, bdaddr_t *dst, +				struct hidp_connadd_req *hid, const char **ppath)  { -	DBusMessage *msg;  	struct input_device *idev; +	const char *path;  	idev = input_device_new(src, dst); -	*path = create_input_path(idev->major, idev->minor); +	path = create_input_path(idev->major, idev->minor); -	idev->fake = g_new0(struct fake_input, 1); -	idev->fake->ch = ch; +	/* rd_data must not be deallocated since the memory address is copied */ +	memcpy(&idev->hidp, hid, sizeof(struct hidp_connadd_req)); -	if (!dbus_connection_register_object_path(conn, -				*path, &device_table, idev)) { -		error("Fake input device path registration failed"); +	if (register_path(conn, path, idev) < 0)  		return -1; -	} -	/* FIXME: dupplicated code */ -	msg = dbus_message_new_signal(INPUT_PATH, -			INPUT_MANAGER_INTERFACE, "DeviceCreated"); -	if (!msg) -		return -1; +	if (*ppath) +		*ppath = path; -	dbus_message_append_args(msg, -			DBUS_TYPE_STRING, &*path, -			DBUS_TYPE_INVALID); +	return 0; +} -	send_message_and_unref(conn, msg); +int fake_input_register(DBusConnection *conn, bdaddr_t *src, +			bdaddr_t *dst, uint8_t ch, const char **ppath) +{ +	struct input_device *idev; +	const char *path; -	info("Created input device: %s", *path); +	idev = input_device_new(src, dst); +	path = create_input_path(idev->major, idev->minor); -	return 0; +	idev->fake = g_new0(struct fake_input, 1); +	idev->fake->ch = ch; + +	if (register_path(conn, path, idev) < 0) +		return -1; +	if (*ppath) +		*ppath = path; + +	return 0;  }  int input_device_unregister(DBusConnection *conn, const char *path) diff --git a/input/device.h b/input/device.h index 604d7b79..fa5cec12 100644 --- a/input/device.h +++ b/input/device.h @@ -45,7 +45,7 @@ struct input_device {  };  int input_device_register(DBusConnection *conn, bdaddr_t *src, bdaddr_t *dst, -				struct hidp_connadd_req *hidp, const char **path); +				struct hidp_connadd_req *hidp, const char **ppath);  int fake_input_register(DBusConnection *conn, bdaddr_t *src, -			bdaddr_t *dst, uint8_t ch, const char **path); +			bdaddr_t *dst, uint8_t ch, const char **ppath);  int input_device_unregister(DBusConnection *conn, const char *path); diff --git a/input/error.h b/input/error.h index 9f767d1a..f5f4c757 100644 --- a/input/error.h +++ b/input/error.h @@ -40,5 +40,3 @@ DBusHandlerResult err_does_not_exist(DBusConnection *conn,  					DBusMessage *msg, const char *str);  DBusHandlerResult err_not_supported(DBusConnection *conn, DBusMessage *msg); - - diff --git a/input/manager.c b/input/manager.c index 2675b5cb..2ad8948e 100644 --- a/input/manager.c +++ b/input/manager.c @@ -30,9 +30,9 @@  #include <bluetooth/bluetooth.h>  #include <bluetooth/hci.h>  #include <bluetooth/hci_lib.h> +#include <bluetooth/hidp.h>  #include <bluetooth/sdp.h>  #include <bluetooth/sdp_lib.h> -#include <bluetooth/hidp.h>  #include <glib.h> @@ -42,10 +42,10 @@  #include "logging.h"  #include "textfile.h" -#include "error.h" -#include "storage.h"  #include "device.h" +#include "error.h"  #include "manager.h" +#include "storage.h"  const char *pnp_uuid = "00001200-0000-1000-8000-00805f9b34fb";  const char *hid_uuid = "00001124-0000-1000-8000-00805f9b34fb"; | 
