diff options
author | Petri Gynther <pgynther@google.com> | 2014-03-24 16:50:01 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2014-04-01 12:27:33 -0400 |
commit | 4522643aa9630be17238edf1b4c0b690c5dd7f5d (patch) | |
tree | 4476b31d4cab4643baeaf0877e21da51f69c7ad2 /include/uapi/linux/uhid.h | |
parent | c3d77fab51f40821de91a744e4b514e9e4e76a7c (diff) |
HID: uhid: Add UHID_CREATE2 + UHID_INPUT2
UHID_CREATE2:
HID report descriptor data (rd_data) is an array in struct uhid_create2_req,
instead of a pointer. Enables use from languages that don't support pointers,
e.g. Python.
UHID_INPUT2:
Data array is the last field of struct uhid_input2_req. Enables userspace to
write only the required bytes to kernel (ev.type + ev.u.input2.size + the part
of the data array that matters), instead of the entire struct uhid_input2_req.
Note:
UHID_CREATE2 increases the total size of struct uhid_event slightly, thus
increasing the size of messages that are queued for userspace. However, this
won't affect the userspace processing of these events.
[Jiri Kosina <jkosina@suse.cz>: adjust to hid_get_raw_report() and
hid_output_raw_report() API changes]
Signed-off-by: Petri Gynther <pgynther@google.com>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'include/uapi/linux/uhid.h')
-rw-r--r-- | include/uapi/linux/uhid.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/uapi/linux/uhid.h b/include/uapi/linux/uhid.h index 414b74be4da1..1e3b09c191cd 100644 --- a/include/uapi/linux/uhid.h +++ b/include/uapi/linux/uhid.h | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <linux/input.h> | 22 | #include <linux/input.h> |
23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
24 | #include <linux/hid.h> | ||
24 | 25 | ||
25 | enum uhid_event_type { | 26 | enum uhid_event_type { |
26 | UHID_CREATE, | 27 | UHID_CREATE, |
@@ -34,6 +35,8 @@ enum uhid_event_type { | |||
34 | UHID_INPUT, | 35 | UHID_INPUT, |
35 | UHID_FEATURE, | 36 | UHID_FEATURE, |
36 | UHID_FEATURE_ANSWER, | 37 | UHID_FEATURE_ANSWER, |
38 | UHID_CREATE2, | ||
39 | UHID_INPUT2, | ||
37 | }; | 40 | }; |
38 | 41 | ||
39 | struct uhid_create_req { | 42 | struct uhid_create_req { |
@@ -50,6 +53,19 @@ struct uhid_create_req { | |||
50 | __u32 country; | 53 | __u32 country; |
51 | } __attribute__((__packed__)); | 54 | } __attribute__((__packed__)); |
52 | 55 | ||
56 | struct uhid_create2_req { | ||
57 | __u8 name[128]; | ||
58 | __u8 phys[64]; | ||
59 | __u8 uniq[64]; | ||
60 | __u16 rd_size; | ||
61 | __u16 bus; | ||
62 | __u32 vendor; | ||
63 | __u32 product; | ||
64 | __u32 version; | ||
65 | __u32 country; | ||
66 | __u8 rd_data[HID_MAX_DESCRIPTOR_SIZE]; | ||
67 | } __attribute__((__packed__)); | ||
68 | |||
53 | #define UHID_DATA_MAX 4096 | 69 | #define UHID_DATA_MAX 4096 |
54 | 70 | ||
55 | enum uhid_report_type { | 71 | enum uhid_report_type { |
@@ -63,6 +79,11 @@ struct uhid_input_req { | |||
63 | __u16 size; | 79 | __u16 size; |
64 | } __attribute__((__packed__)); | 80 | } __attribute__((__packed__)); |
65 | 81 | ||
82 | struct uhid_input2_req { | ||
83 | __u16 size; | ||
84 | __u8 data[UHID_DATA_MAX]; | ||
85 | } __attribute__((__packed__)); | ||
86 | |||
66 | struct uhid_output_req { | 87 | struct uhid_output_req { |
67 | __u8 data[UHID_DATA_MAX]; | 88 | __u8 data[UHID_DATA_MAX]; |
68 | __u16 size; | 89 | __u16 size; |
@@ -100,6 +121,8 @@ struct uhid_event { | |||
100 | struct uhid_output_ev_req output_ev; | 121 | struct uhid_output_ev_req output_ev; |
101 | struct uhid_feature_req feature; | 122 | struct uhid_feature_req feature; |
102 | struct uhid_feature_answer_req feature_answer; | 123 | struct uhid_feature_answer_req feature_answer; |
124 | struct uhid_create2_req create2; | ||
125 | struct uhid_input2_req input2; | ||
103 | } u; | 126 | } u; |
104 | } __attribute__((__packed__)); | 127 | } __attribute__((__packed__)); |
105 | 128 | ||