|
@@ -20,6 +20,11 @@
|
|
* Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
|
|
* Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
|
|
*
|
|
*
|
|
* Changes/Revisions:
|
|
* Changes/Revisions:
|
|
|
|
+ * 0.5 08/13/2015 (David Herrmann <dh.herrmann@gmail.com> &
|
|
|
|
+ * Benjamin Tissoires <benjamin.tissoires@redhat.com>)
|
|
|
|
+ * - add UI_DEV_SETUP ioctl
|
|
|
|
+ * - add UI_ABS_SETUP ioctl
|
|
|
|
+ * - add UI_GET_VERSION ioctl
|
|
* 0.4 01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
|
|
* 0.4 01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
|
|
* - add UI_GET_SYSNAME ioctl
|
|
* - add UI_GET_SYSNAME ioctl
|
|
* 0.3 24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
|
|
* 0.3 24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
|
|
@@ -37,8 +42,8 @@
|
|
#include <linux/types.h>
|
|
#include <linux/types.h>
|
|
#include <linux/input.h>
|
|
#include <linux/input.h>
|
|
|
|
|
|
-#define UINPUT_VERSION 4
|
|
|
|
-
|
|
|
|
|
|
+#define UINPUT_VERSION 5
|
|
|
|
+#define UINPUT_MAX_NAME_SIZE 80
|
|
|
|
|
|
struct uinput_ff_upload {
|
|
struct uinput_ff_upload {
|
|
__u32 request_id;
|
|
__u32 request_id;
|
|
@@ -58,6 +63,79 @@ struct uinput_ff_erase {
|
|
#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
|
|
#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
|
|
#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
|
|
#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
|
|
|
|
|
|
|
|
+struct uinput_setup {
|
|
|
|
+ struct input_id id;
|
|
|
|
+ char name[UINPUT_MAX_NAME_SIZE];
|
|
|
|
+ __u32 ff_effects_max;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * UI_DEV_SETUP - Set device parameters for setup
|
|
|
|
+ *
|
|
|
|
+ * This ioctl sets parameters for the input device to be created. It must be
|
|
|
|
+ * issued *before* calling UI_DEV_CREATE or it will fail. This ioctl supersedes
|
|
|
|
+ * the old "struct uinput_user_dev" method, which wrote this data via write().
|
|
|
|
+ * To actually set the absolute axes, you also need to call the ioctl
|
|
|
|
+ * UI_ABS_SETUP *before* calling this ioctl.
|
|
|
|
+ *
|
|
|
|
+ * This ioctl takes a "struct uinput_setup" object as argument. The fields of
|
|
|
|
+ * this object are as follows:
|
|
|
|
+ * id: See the description of "struct input_id". This field is
|
|
|
|
+ * copied unchanged into the new device.
|
|
|
|
+ * name: This is used unchanged as name for the new device.
|
|
|
|
+ * ff_effects_max: This limits the maximum numbers of force-feedback effects.
|
|
|
|
+ * See below for a description of FF with uinput.
|
|
|
|
+ *
|
|
|
|
+ * This ioctl can be called multiple times and will overwrite previous values.
|
|
|
|
+ * If this ioctl fails with -EINVAL, you're recommended to use the old
|
|
|
|
+ * "uinput_user_dev" method via write() as fallback, in case you run on an old
|
|
|
|
+ * kernel that does not support this ioctl.
|
|
|
|
+ *
|
|
|
|
+ * This ioctl may fail with -EINVAL if it is not supported or if you passed
|
|
|
|
+ * incorrect values, -ENOMEM if the kernel runs out of memory or -EFAULT if the
|
|
|
|
+ * passed uinput_setup object cannot be read/written.
|
|
|
|
+ * If this call fails, partial data may have already been applied to the
|
|
|
|
+ * internal device.
|
|
|
|
+ */
|
|
|
|
+#define UI_DEV_SETUP _IOW(UINPUT_IOCTL_BASE, 3, struct uinput_setup)
|
|
|
|
+
|
|
|
|
+struct uinput_abs_setup {
|
|
|
|
+ __u16 code; /* axis code */
|
|
|
|
+ /* __u16 filler; */
|
|
|
|
+ struct input_absinfo absinfo;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * UI_ABS_SETUP - Set absolute axis information for the device to setup
|
|
|
|
+ *
|
|
|
|
+ * This ioctl sets one absolute axis information for the input device to be
|
|
|
|
+ * created. It must be issued *before* calling UI_DEV_SETUP and UI_DEV_CREATE
|
|
|
|
+ * for every absolute axis the device exports.
|
|
|
|
+ * This ioctl supersedes the old "struct uinput_user_dev" method, which wrote
|
|
|
|
+ * part of this data and the content of UI_DEV_SETUP via write().
|
|
|
|
+ *
|
|
|
|
+ * This ioctl takes a "struct uinput_abs_setup" object as argument. The fields
|
|
|
|
+ * of this object are as follows:
|
|
|
|
+ * code: The corresponding input code associated with this axis
|
|
|
|
+ * (ABS_X, ABS_Y, etc...)
|
|
|
|
+ * absinfo: See "struct input_absinfo" for a description of this field.
|
|
|
|
+ * This field is copied unchanged into the kernel for the
|
|
|
|
+ * specified axis. If the axis is not enabled via
|
|
|
|
+ * UI_SET_ABSBIT, this ioctl will enable it.
|
|
|
|
+ *
|
|
|
|
+ * This ioctl can be called multiple times and will overwrite previous values.
|
|
|
|
+ * If this ioctl fails with -EINVAL, you're recommended to use the old
|
|
|
|
+ * "uinput_user_dev" method via write() as fallback, in case you run on an old
|
|
|
|
+ * kernel that does not support this ioctl.
|
|
|
|
+ *
|
|
|
|
+ * This ioctl may fail with -EINVAL if it is not supported or if you passed
|
|
|
|
+ * incorrect values, -ENOMEM if the kernel runs out of memory or -EFAULT if the
|
|
|
|
+ * passed uinput_setup object cannot be read/written.
|
|
|
|
+ * If this call fails, partial data may have already been applied to the
|
|
|
|
+ * internal device.
|
|
|
|
+ */
|
|
|
|
+#define UI_ABS_SETUP _IOW(UINPUT_IOCTL_BASE, 4, struct uinput_abs_setup)
|
|
|
|
+
|
|
#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
|
|
#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
|
|
#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int)
|
|
#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int)
|
|
#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int)
|
|
#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int)
|
|
@@ -144,7 +222,6 @@ struct uinput_ff_erase {
|
|
#define UI_FF_UPLOAD 1
|
|
#define UI_FF_UPLOAD 1
|
|
#define UI_FF_ERASE 2
|
|
#define UI_FF_ERASE 2
|
|
|
|
|
|
-#define UINPUT_MAX_NAME_SIZE 80
|
|
|
|
struct uinput_user_dev {
|
|
struct uinput_user_dev {
|
|
char name[UINPUT_MAX_NAME_SIZE];
|
|
char name[UINPUT_MAX_NAME_SIZE];
|
|
struct input_id id;
|
|
struct input_id id;
|