• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __UHID_H_
2 #define __UHID_H_
3 
4 /*
5  * User-space I/O driver support for HID subsystem
6  * Copyright (c) 2012 David Herrmann
7  */
8 
9 /*
10  * This program is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU General Public License as published by the Free
12  * Software Foundation; either version 2 of the License, or (at your option)
13  * any later version.
14  */
15 
16 /*
17  * Public header for user-space communication. We try to keep every structure
18  * aligned but to be safe we also use __attribute__((__packed__)). Therefore,
19  * the communication should be ABI compatible even between architectures.
20  */
21 
22 #include <linux/input.h>
23 #include <linux/types.h>
24 
25 enum uhid_event_type {
26 	UHID_CREATE,
27 	UHID_DESTROY,
28 	UHID_START,
29 	UHID_STOP,
30 	UHID_OPEN,
31 	UHID_CLOSE,
32 	UHID_OUTPUT,
33 	UHID_OUTPUT_EV,			/* obsolete! */
34 	UHID_INPUT,
35 	UHID_FEATURE,
36 	UHID_FEATURE_ANSWER,
37 };
38 
39 struct uhid_create_req {
40 	__u8 name[128];
41 	__u8 phys[64];
42 	__u8 uniq[64];
43 	__u8 __user *rd_data;
44 	__u16 rd_size;
45 
46 	__u16 bus;
47 	__u32 vendor;
48 	__u32 product;
49 	__u32 version;
50 	__u32 country;
51 } __attribute__((__packed__));
52 
53 #define UHID_DATA_MAX 4096
54 
55 enum uhid_report_type {
56 	UHID_FEATURE_REPORT,
57 	UHID_OUTPUT_REPORT,
58 	UHID_INPUT_REPORT,
59 };
60 
61 struct uhid_input_req {
62 	__u8 data[UHID_DATA_MAX];
63 	__u16 size;
64 } __attribute__((__packed__));
65 
66 struct uhid_output_req {
67 	__u8 data[UHID_DATA_MAX];
68 	__u16 size;
69 	__u8 rtype;
70 } __attribute__((__packed__));
71 
72 /* Obsolete! Newer kernels will no longer send these events but instead convert
73  * it into raw output reports via UHID_OUTPUT. */
74 struct uhid_output_ev_req {
75 	__u16 type;
76 	__u16 code;
77 	__s32 value;
78 } __attribute__((__packed__));
79 
80 struct uhid_feature_req {
81 	__u32 id;
82 	__u8 rnum;
83 	__u8 rtype;
84 } __attribute__((__packed__));
85 
86 struct uhid_feature_answer_req {
87 	__u32 id;
88 	__u16 err;
89 	__u16 size;
90 	__u8 data[UHID_DATA_MAX];
91 } __attribute__((__packed__));
92 
93 struct uhid_event {
94 	__u32 type;
95 
96 	union {
97 		struct uhid_create_req create;
98 		struct uhid_input_req input;
99 		struct uhid_output_req output;
100 		struct uhid_output_ev_req output_ev;
101 		struct uhid_feature_req feature;
102 		struct uhid_feature_answer_req feature_answer;
103 	} u;
104 } __attribute__((__packed__));
105 
106 #endif /* __UHID_H_ */
107