xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/uinput.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef __UINPUT_H_
2*53ee8cc1Swenshuai.xi #define __UINPUT_H_
3*53ee8cc1Swenshuai.xi /*
4*53ee8cc1Swenshuai.xi  *  User level driver support for input subsystem
5*53ee8cc1Swenshuai.xi  *
6*53ee8cc1Swenshuai.xi  * Heavily based on evdev.c by Vojtech Pavlik
7*53ee8cc1Swenshuai.xi  *
8*53ee8cc1Swenshuai.xi  * This program is free software; you can redistribute it and/or modify
9*53ee8cc1Swenshuai.xi  * it under the terms of the GNU General Public License as published by
10*53ee8cc1Swenshuai.xi  * the Free Software Foundation; either version 2 of the License, or
11*53ee8cc1Swenshuai.xi  * (at your option) any later version.
12*53ee8cc1Swenshuai.xi  *
13*53ee8cc1Swenshuai.xi  * This program is distributed in the hope that it will be useful,
14*53ee8cc1Swenshuai.xi  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*53ee8cc1Swenshuai.xi  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*53ee8cc1Swenshuai.xi  * GNU General Public License for more details.
17*53ee8cc1Swenshuai.xi  *
18*53ee8cc1Swenshuai.xi  * You should have received a copy of the GNU General Public License
19*53ee8cc1Swenshuai.xi  * along with this program; if not, write to the Free Software
20*53ee8cc1Swenshuai.xi  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*53ee8cc1Swenshuai.xi  *
22*53ee8cc1Swenshuai.xi  * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
23*53ee8cc1Swenshuai.xi  *
24*53ee8cc1Swenshuai.xi  * Changes/Revisions:
25*53ee8cc1Swenshuai.xi  *	0.3	24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
26*53ee8cc1Swenshuai.xi  *		- update ff support for the changes in kernel interface
27*53ee8cc1Swenshuai.xi  *		- add UINPUT_VERSION
28*53ee8cc1Swenshuai.xi  *	0.2	16/10/2004 (Micah Dowty <micah@navi.cx>)
29*53ee8cc1Swenshuai.xi  *		- added force feedback support
30*53ee8cc1Swenshuai.xi  *             - added UI_SET_PHYS
31*53ee8cc1Swenshuai.xi  *	0.1	20/06/2002
32*53ee8cc1Swenshuai.xi  *		- first public version
33*53ee8cc1Swenshuai.xi  */
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi #include <linux/input.h>
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi #define UINPUT_VERSION		3
38*53ee8cc1Swenshuai.xi 
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi struct uinput_ff_upload {
41*53ee8cc1Swenshuai.xi 	int			request_id;
42*53ee8cc1Swenshuai.xi 	int			retval;
43*53ee8cc1Swenshuai.xi 	struct ff_effect	effect;
44*53ee8cc1Swenshuai.xi 	struct ff_effect	old;
45*53ee8cc1Swenshuai.xi };
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi struct uinput_ff_erase {
48*53ee8cc1Swenshuai.xi 	int			request_id;
49*53ee8cc1Swenshuai.xi 	int			retval;
50*53ee8cc1Swenshuai.xi 	int			effect_id;
51*53ee8cc1Swenshuai.xi };
52*53ee8cc1Swenshuai.xi 
53*53ee8cc1Swenshuai.xi /* ioctl */
54*53ee8cc1Swenshuai.xi #define UINPUT_IOCTL_BASE	'U'
55*53ee8cc1Swenshuai.xi #define UI_DEV_CREATE		_IO(UINPUT_IOCTL_BASE, 1)
56*53ee8cc1Swenshuai.xi #define UI_DEV_DESTROY		_IO(UINPUT_IOCTL_BASE, 2)
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi #define UI_SET_EVBIT		_IOW(UINPUT_IOCTL_BASE, 100, int)
59*53ee8cc1Swenshuai.xi #define UI_SET_KEYBIT		_IOW(UINPUT_IOCTL_BASE, 101, int)
60*53ee8cc1Swenshuai.xi #define UI_SET_RELBIT		_IOW(UINPUT_IOCTL_BASE, 102, int)
61*53ee8cc1Swenshuai.xi #define UI_SET_ABSBIT		_IOW(UINPUT_IOCTL_BASE, 103, int)
62*53ee8cc1Swenshuai.xi #define UI_SET_MSCBIT		_IOW(UINPUT_IOCTL_BASE, 104, int)
63*53ee8cc1Swenshuai.xi #define UI_SET_LEDBIT		_IOW(UINPUT_IOCTL_BASE, 105, int)
64*53ee8cc1Swenshuai.xi #define UI_SET_SNDBIT		_IOW(UINPUT_IOCTL_BASE, 106, int)
65*53ee8cc1Swenshuai.xi #define UI_SET_FFBIT		_IOW(UINPUT_IOCTL_BASE, 107, int)
66*53ee8cc1Swenshuai.xi #define UI_SET_PHYS		_IOW(UINPUT_IOCTL_BASE, 108, char*)
67*53ee8cc1Swenshuai.xi #define UI_SET_SWBIT		_IOW(UINPUT_IOCTL_BASE, 109, int)
68*53ee8cc1Swenshuai.xi 
69*53ee8cc1Swenshuai.xi #define UI_BEGIN_FF_UPLOAD	_IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload)
70*53ee8cc1Swenshuai.xi #define UI_END_FF_UPLOAD	_IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload)
71*53ee8cc1Swenshuai.xi #define UI_BEGIN_FF_ERASE	_IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase)
72*53ee8cc1Swenshuai.xi #define UI_END_FF_ERASE		_IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase)
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi /*
75*53ee8cc1Swenshuai.xi  * To write a force-feedback-capable driver, the upload_effect
76*53ee8cc1Swenshuai.xi  * and erase_effect callbacks in input_dev must be implemented.
77*53ee8cc1Swenshuai.xi  * The uinput driver will generate a fake input event when one of
78*53ee8cc1Swenshuai.xi  * these callbacks are invoked. The userspace code then uses
79*53ee8cc1Swenshuai.xi  * ioctls to retrieve additional parameters and send the return code.
80*53ee8cc1Swenshuai.xi  * The callback blocks until this return code is sent.
81*53ee8cc1Swenshuai.xi  *
82*53ee8cc1Swenshuai.xi  * The described callback mechanism is only used if ff_effects_max
83*53ee8cc1Swenshuai.xi  * is set.
84*53ee8cc1Swenshuai.xi  *
85*53ee8cc1Swenshuai.xi  * To implement upload_effect():
86*53ee8cc1Swenshuai.xi  *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_UPLOAD.
87*53ee8cc1Swenshuai.xi  *      A request ID will be given in 'value'.
88*53ee8cc1Swenshuai.xi  *   2. Allocate a uinput_ff_upload struct, fill in request_id with
89*53ee8cc1Swenshuai.xi  *      the 'value' from the EV_UINPUT event.
90*53ee8cc1Swenshuai.xi  *   3. Issue a UI_BEGIN_FF_UPLOAD ioctl, giving it the
91*53ee8cc1Swenshuai.xi  *      uinput_ff_upload struct. It will be filled in with the
92*53ee8cc1Swenshuai.xi  *      ff_effects passed to upload_effect().
93*53ee8cc1Swenshuai.xi  *   4. Perform the effect upload, and place a return code back into
94*53ee8cc1Swenshuai.xi         the uinput_ff_upload struct.
95*53ee8cc1Swenshuai.xi  *   5. Issue a UI_END_FF_UPLOAD ioctl, also giving it the
96*53ee8cc1Swenshuai.xi  *      uinput_ff_upload_effect struct. This will complete execution
97*53ee8cc1Swenshuai.xi  *      of our upload_effect() handler.
98*53ee8cc1Swenshuai.xi  *
99*53ee8cc1Swenshuai.xi  * To implement erase_effect():
100*53ee8cc1Swenshuai.xi  *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_ERASE.
101*53ee8cc1Swenshuai.xi  *      A request ID will be given in 'value'.
102*53ee8cc1Swenshuai.xi  *   2. Allocate a uinput_ff_erase struct, fill in request_id with
103*53ee8cc1Swenshuai.xi  *      the 'value' from the EV_UINPUT event.
104*53ee8cc1Swenshuai.xi  *   3. Issue a UI_BEGIN_FF_ERASE ioctl, giving it the
105*53ee8cc1Swenshuai.xi  *      uinput_ff_erase struct. It will be filled in with the
106*53ee8cc1Swenshuai.xi  *      effect ID passed to erase_effect().
107*53ee8cc1Swenshuai.xi  *   4. Perform the effect erasure, and place a return code back
108*53ee8cc1Swenshuai.xi  *      into the uinput_ff_erase struct.
109*53ee8cc1Swenshuai.xi  *   5. Issue a UI_END_FF_ERASE ioctl, also giving it the
110*53ee8cc1Swenshuai.xi  *      uinput_ff_erase_effect struct. This will complete execution
111*53ee8cc1Swenshuai.xi  *      of our erase_effect() handler.
112*53ee8cc1Swenshuai.xi  */
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi /*
115*53ee8cc1Swenshuai.xi  * This is the new event type, used only by uinput.
116*53ee8cc1Swenshuai.xi  * 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value'
117*53ee8cc1Swenshuai.xi  * is the unique request ID. This number was picked
118*53ee8cc1Swenshuai.xi  * arbitrarily, above EV_MAX (since the input system
119*53ee8cc1Swenshuai.xi  * never sees it) but in the range of a 16-bit int.
120*53ee8cc1Swenshuai.xi  */
121*53ee8cc1Swenshuai.xi #define EV_UINPUT		0x0101
122*53ee8cc1Swenshuai.xi #define UI_FF_UPLOAD		1
123*53ee8cc1Swenshuai.xi #define UI_FF_ERASE		2
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi #define UINPUT_MAX_NAME_SIZE	80
126*53ee8cc1Swenshuai.xi struct uinput_user_dev {
127*53ee8cc1Swenshuai.xi 	char name[UINPUT_MAX_NAME_SIZE];
128*53ee8cc1Swenshuai.xi 	struct input_id id;
129*53ee8cc1Swenshuai.xi         int ff_effects_max;
130*53ee8cc1Swenshuai.xi         int absmax[ABS_MAX + 1];
131*53ee8cc1Swenshuai.xi         int absmin[ABS_MAX + 1];
132*53ee8cc1Swenshuai.xi         int absfuzz[ABS_MAX + 1];
133*53ee8cc1Swenshuai.xi         int absflat[ABS_MAX + 1];
134*53ee8cc1Swenshuai.xi };
135*53ee8cc1Swenshuai.xi #endif	/* __UINPUT_H_ */
136*53ee8cc1Swenshuai.xi 
137