diff options
-rw-r--r-- | input/device.c | 48 | ||||
-rw-r--r-- | input/device.h | 26 | ||||
-rw-r--r-- | input/manager.c | 31 |
3 files changed, 61 insertions, 44 deletions
diff --git a/input/device.c b/input/device.c index 5ebeb1ec..a29cc095 100644 --- a/input/device.c +++ b/input/device.c @@ -61,6 +61,29 @@ #define UPDOWN_ENABLED 1 +struct pending_connect { + DBusConnection *conn; + DBusMessage *msg; +}; + +struct fake_input { + GIOChannel *io; + int rfcomm; /* RFCOMM socket */ + int uinput; /* uinput socket */ + uint8_t ch; /* RFCOMM channel number */ +}; + +struct device { + bdaddr_t src; + bdaddr_t dst; + char *name; + uint8_t major; + uint8_t minor; + struct hidp_connadd_req hidp; /* FIXME: Use dynamic alloc? */ + struct fake_input *fake; + struct pending_connect *pending_connect; +}; + static struct device *device_new(bdaddr_t *src, bdaddr_t *dst) { struct device *idev; @@ -1086,6 +1109,13 @@ int fake_input_register(DBusConnection *conn, bdaddr_t *src, int input_device_unregister(DBusConnection *conn, const char *path) { DBusMessage *msg; + struct device *idev; + + if (!dbus_connection_get_object_path_data(conn, + path, (void *) &idev)) + return -1; + + del_stored_device_info(&idev->src, &idev->dst); if (!dbus_connection_unregister_object_path(conn, path)) { error("Input device path unregister failed"); @@ -1105,3 +1135,21 @@ int input_device_unregister(DBusConnection *conn, const char *path) return 0; } + +int input_device_get_bdaddr(DBusConnection *conn, const char *path, + bdaddr_t *src, bdaddr_t *dst) +{ + struct device *idev; + + if (!dbus_connection_get_object_path_data(conn, path, + (void *) &idev)) + return -1; + + if (!idev) + return -1; + + bacpy(src, &idev->src); + bacpy(dst, &idev->dst); + + return 0; +} diff --git a/input/device.h b/input/device.h index 398e3751..b156b985 100644 --- a/input/device.h +++ b/input/device.h @@ -21,31 +21,11 @@ * */ -struct fake_input { - GIOChannel *io; - int rfcomm; /* RFCOMM socket */ - int uinput; /* uinput socket */ - uint8_t ch; /* RFCOMM channel number */ -}; - -struct pending_connect { - DBusConnection *conn; - DBusMessage *msg; -}; - -struct device { - bdaddr_t src; - bdaddr_t dst; - char *name; - uint8_t major; - uint8_t minor; - struct hidp_connadd_req hidp; /* FIXME: Use dynamic alloc? */ - struct fake_input *fake; - struct pending_connect *pending_connect; -}; - int input_device_register(DBusConnection *conn, bdaddr_t *src, bdaddr_t *dst, 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 **ppath); int input_device_unregister(DBusConnection *conn, const char *path); + +int input_device_get_bdaddr(DBusConnection *conn, const char *path, + bdaddr_t *src, bdaddr_t *dst); diff --git a/input/manager.c b/input/manager.c index bd75dc5a..f74349df 100644 --- a/input/manager.c +++ b/input/manager.c @@ -115,20 +115,6 @@ static void pending_req_free(struct pending_req *pr) g_free(pr); } -static int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr) -{ - struct device *idev; - - if (!dbus_connection_get_object_path_data(connection, path, - (void *) &idev)) - return -1; - - if (!idev) - return -1; - - return bacmp(&idev->dst, bdaddr); -} - static int get_record(struct pending_req *pr, uint32_t handle, DBusPendingCallNotifyFunction cb) { @@ -637,6 +623,16 @@ done: dbus_pending_call_unref(call); } +static int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr) +{ + bdaddr_t src, dst; + + if (input_device_get_bdaddr(connection, path, &src, &dst) < 0) + return -1; + + return bacmp(&dst, bdaddr); +} + static DBusHandlerResult create_device(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -710,7 +706,6 @@ static DBusHandlerResult create_device(DBusConnection *conn, static DBusHandlerResult remove_device(DBusConnection *conn, DBusMessage *msg, void *data) { - struct device *idev; DBusMessage *reply; DBusError derr; GSList *l; @@ -736,12 +731,6 @@ static DBusHandlerResult remove_device(DBusConnection *conn, g_free(l->data); device_paths = g_slist_remove(device_paths, l->data); - if (!dbus_connection_get_object_path_data(connection, - path, (void *) &idev)) - return err_does_not_exist(conn, msg, "Input doesn't exist"); - - del_stored_device_info(&idev->src, &idev->dst); - if (input_device_unregister(conn, path) < 0) { dbus_message_unref(reply); return err_failed(conn, msg, "D-Bus path unregistration failed"); |