Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 29953 | Differences between
and this patch

Collapse All | Expand All

(-)build-tree/xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile (-3 / +4 lines)
Lines 45-59 Link Here
45
SRCS = lnx_init.c lnx_video.c lnx_io.c libc_wrapper.c bios_mmap.c \
45
SRCS = lnx_init.c lnx_video.c lnx_io.c libc_wrapper.c bios_mmap.c \
46
       VTsw_usl.c std_kbdEv.c posix_tty.c $(MOUSESRC) \
46
       VTsw_usl.c std_kbdEv.c posix_tty.c $(MOUSESRC) \
47
       lnx_pci.c vidmem.c lnx_apm.c $(JOYSTICK_SRC) $(DRI_SRC) $(RES_SRCS) \
47
       lnx_pci.c vidmem.c lnx_apm.c $(JOYSTICK_SRC) $(DRI_SRC) $(RES_SRCS) \
48
       $(AXP_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/
48
       $(AXP_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/ lnx_evdev.c
49
49
50
OBJS = lnx_init.o lnx_video.o lnx_io.o libc_wrapper.o bios_mmap.o \
50
OBJS = lnx_init.o lnx_video.o lnx_io.o libc_wrapper.o bios_mmap.o \
51
       VTsw_usl.o std_kbdEv.o posix_tty.o $(MOUSEOBJ) \
51
       VTsw_usl.o std_kbdEv.o posix_tty.o $(MOUSEOBJ) \
52
       lnx_pci.o vidmem.o lnx_apm.o $(JOYSTICK_OBJ) $(DRI_OBJ) $(RES_OBJS) \
52
       lnx_pci.o vidmem.o lnx_apm.o $(JOYSTICK_OBJ) $(DRI_OBJ) $(RES_OBJS) \
53
       $(AXP_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/
53
       $(AXP_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/ lnx_evdev.o
54
54
55
INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC) -I. -I$(SERVERSRC)/include \
55
INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC) -I. -I$(SERVERSRC)/include \
56
           -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(XF86OSSRC)/shared
56
           -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(XF86OSSRC)/shared \
57
           -I$(SERVERSRC)/mi
57
58
58
RESDEFINES = -DUSESTDRES
59
RESDEFINES = -DUSESTDRES
59
60
(-)build-tree/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.c (+278 lines)
Line 0 Link Here
1
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_mouse.c,v 1.1 1999/05/17 13:17:18 dawes Exp $ */
2
3
/*
4
 * Copyright 2003 by Zephaniah E. Hull.
5
 */
6
7
#include "X.h"
8
#include "xf86.h"
9
#include "xf86Priv.h"
10
#include "xf86_OSlib.h"
11
#include "xf86Xinput.h"
12
#include "xf86OSmouse.h"
13
#include "lnx_evdev.h"
14
#include "mipointer.h"
15
16
static Bool evdev_alive = FALSE;
17
static evdevDriverPtr evdev_drivers = NULL;
18
static char *evdev_buf;
19
static char evdev_device[23];
20
21
static int
22
glob_match(const char *pattern, const char *matchp)
23
{
24
    int i, j = 0, ret = 0;
25
    if (!(pattern && matchp))
26
	return (strlen(pattern) == strlen(matchp));
27
28
    for (i = 0; matchp[i]; i++) {
29
	if (pattern[j] == '\\')
30
	    j++;
31
	else if (pattern[j] == '*') {
32
	    if (pattern[j + 1]) {
33
		if (!glob_match(pattern+j+1,matchp+i))
34
		    return 0;
35
	    } else
36
		return 0;
37
	    continue;
38
	} else if (pattern[j] == '?') {
39
	    j++;
40
	    continue;
41
	}
42
43
	if ((ret = (pattern[j] - matchp[i])))
44
	    return ret;
45
46
	j++;
47
    }
48
    if (!pattern[j] || ((pattern[j] == '*') && !pattern[j + 1]))
49
	return 0;
50
    else
51
	return 1;
52
}
53
54
55
int
56
evdevGetFDForDriver (evdevDriverPtr driver)
57
{
58
    char dev[20];
59
    char tmp[256] = "";
60
    int fd, i;
61
62
    if (!driver)
63
	return -1;
64
65
    for (i = 0; i < 32; i++) {
66
	snprintf(dev, sizeof(dev), "/dev/input/event%d", i); 
67
	SYSCALL(fd = open (dev, O_RDWR | O_NONBLOCK));
68
	if (fd == -1)
69
	    continue;
70
71
#define check(name,get)							\
72
    	if (name) {							\
73
	    if (ioctl(fd, get, tmp) == -1)				\
74
		tmp[0] = '\0';						\
75
	    if (glob_match(name, tmp)) {				\
76
		close(fd);						\
77
		continue;						\
78
	    }								\
79
	}
80
81
	check(driver->name, EVIOCGNAME(sizeof(tmp)));
82
	check(driver->phys, EVIOCGPHYS(sizeof(tmp)));
83
#undef check
84
	return fd;
85
    }
86
    return -1;
87
}
88
89
static void
90
evdevReadInput(InputInfoPtr pInfo)
91
{
92
    int			n;
93
    evdevDriverPtr	driver;
94
    char		*cur, *end;
95
    char		*id, *value, *name, *phys, *action;
96
    Bool		up;
97
98
    do {
99
	SYSCALL(n = read(pInfo->fd, evdev_buf, 1022));
100
	evdev_buf[n] = '\n';	/* Just to be extra safe. */
101
	evdev_buf[n + 1] = '\0';/* Just to be extra safe. */
102
103
	cur = evdev_buf;
104
	while (cur[0] && (end = strchr(cur, '\n')) && (end != cur)) {
105
	    name = phys = action = NULL;
106
	    if (!strncmp("2.1", cur, 3)) {
107
#define next_sep(sep,end,clr)	while (1) {	\
108
	if ((*cur == '\n') || (*cur == '\0')) {	\
109
	    if (end) {				\
110
		goto evdevReadInput__finished;	\
111
	    } else if (clr)			\
112
		*cur = '\0';			\
113
	    cur++;				\
114
	    break;				\
115
	} else if (*cur == sep) {		\
116
	    if (clr)				\
117
		*cur = '\0';			\
118
	    cur++;				\
119
	    break;				\
120
	}					\
121
	cur++;					\
122
    }
123
	
124
		next_sep('\002', 1, 0);
125
loop_start__21:
126
		id = cur;
127
		next_sep('\003', 1, 1);
128
		value = cur;
129
		next_sep('\002', 0, 1);
130
		if (!strcmp(id, "ACTION"))
131
		    action = value;
132
		else if (!strcmp(id, "NAME"))
133
		    name = value;
134
		else if (!strcmp(id, "PHYS"))
135
		    phys = value;
136
		if (*cur != '\n')
137
		    goto loop_start__21;
138
#undef next_sep
139
	    }
140
evdevReadInput__finished:
141
142
	    if (!(action && name && phys)) {
143
		xf86Msg(X_ERROR,"%s: Incomplete command! -%s-%s-%s-\n",
144
			pInfo->name, action, name, phys);
145
	    } else {
146
		if (!strcmp(action, "add"))
147
		    up = TRUE;
148
		else
149
		    up = FALSE;
150
151
		for (driver = evdev_drivers; driver; driver = driver->next) {
152
		    if (driver->name && glob_match(name, driver->name))
153
			continue;
154
		    if (driver->phys && glob_match(phys, driver->phys))
155
			continue;
156
		    if (up)
157
			driver->callback(driver->cb_data, DEVICE_ON);
158
		    else
159
			driver->callback(driver->cb_data, DEVICE_OFF);
160
		}
161
	    }
162
	    cur = end + 1;
163
	}
164
    } while (xf86WaitForInput(pInfo->fd, 0));
165
    return;
166
}
167
168
static void
169
evdevSigioReadInput (int fd, void *closure)
170
{
171
    evdevReadInput ((InputInfoPtr) closure);
172
}
173
174
static int
175
evdevGetControlFD (void)
176
{
177
    int i, ret;
178
179
    for (i = 0; i < 100; i++) {
180
	snprintf(evdev_device,sizeof(evdev_device),"/tmp/.X11-unix/evdev%d", i);
181
	SYSCALL(ret = mkfifo (evdev_device, 0666));
182
	if (ret == -1) {
183
	    if (errno != EEXIST)
184
		return -1;
185
	    continue;
186
	}
187
	SYSCALL(ret = open (evdev_device, O_RDWR | O_NONBLOCK));
188
	return ret;
189
    }
190
191
    return -1;
192
}
193
194
static void
195
evdevReleaseControlFD (int fd)
196
{
197
    SYSCALL(close(fd));
198
    SYSCALL(unlink(evdev_device));
199
}
200
201
static int
202
evdevControl(DeviceIntPtr pPointer, int what)
203
{
204
    InputInfoPtr pInfo;
205
206
    pInfo = pPointer->public.devicePrivate;
207
208
    switch (what) {
209
    case DEVICE_INIT: 
210
	pPointer->public.on = FALSE;
211
	break;
212
213
    case DEVICE_ON:
214
	pInfo->fd = evdevGetControlFD ();
215
	if (pInfo->fd == -1) {
216
	    xf86Msg(X_ERROR, "%s: cannot open control FIFO.\n", pInfo->name);
217
	    return BadRequest;
218
	}
219
	xf86FlushInput(pInfo->fd);
220
	if (!xf86InstallSIGIOHandler (pInfo->fd, evdevSigioReadInput, pInfo))
221
	    AddEnabledDevice(pInfo->fd);
222
	pPointer->public.on = TRUE;
223
	break;
224
225
    case DEVICE_OFF:
226
    case DEVICE_CLOSE:
227
	if (pInfo->fd != -1) {
228
	    RemoveEnabledDevice(pInfo->fd);
229
	    xf86RemoveSIGIOHandler(pInfo->fd);
230
	    evdevReleaseControlFD (pInfo->fd);
231
	    pInfo->fd = -1;
232
	}
233
	pPointer->public.on = FALSE;
234
	usleep(300000);
235
	break;
236
    }
237
    return Success;
238
}
239
240
Bool
241
evdevStart (InputDriverPtr drv)
242
{
243
    InputInfoPtr pInfo;
244
245
    if (evdev_alive)
246
	return TRUE;
247
248
    if (!(evdev_buf = xcalloc(1024, 1)))
249
	return FALSE;
250
251
    if (!(pInfo = xf86AllocateInput(drv, 0)))
252
	return FALSE;
253
254
255
    pInfo->name = "evdev brain";
256
    pInfo->type_name = "evdev brain";
257
    pInfo->device_control = evdevControl;
258
    pInfo->read_input = evdevReadInput;
259
    pInfo->fd = -1;
260
    evdev_alive = TRUE;
261
    pInfo->flags = XI86_CONFIGURED | XI86_OPEN_ON_INIT;
262
    return TRUE;
263
}
264
265
Bool
266
evdevNewDriver (evdevDriverPtr driver)
267
{
268
    if (!evdev_alive)
269
	return FALSE;
270
    if (!(driver->name || driver->phys))
271
	return FALSE;
272
    if (!driver->callback)
273
	return FALSE;
274
275
    driver->next = evdev_drivers;
276
    evdev_drivers = driver;
277
    return TRUE;
278
}
(-)build-tree/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.h (+752 lines)
Line 0 Link Here
1
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx.h,v 3.2 2000/02/15 02:00:14 eich Exp $ */
2
3
#ifndef LNX_EVDEV_H_
4
#define LNX_EVDEV_H_
5
6
7
/* Stuff taken from the linux header. (With some minor changes.) */
8
9
#include <sys/time.h>
10
#include <sys/ioctl.h>
11
#include <asm/types.h>
12
13
/*
14
 * The event structure itself
15
 */
16
17
struct input_event {
18
	struct timeval time;
19
	__u16 type;
20
	__u16 code;
21
	__s32 value;
22
};
23
24
/*
25
 * Protocol version.
26
 */
27
28
#define EV_VERSION		0x010000
29
30
/*
31
 * IOCTLs (0x00 - 0x7f)
32
 */
33
34
struct input_id {
35
	__u16 bustype;
36
	__u16 vendor;
37
	__u16 product;
38
	__u16 version;
39
};
40
41
struct input_absinfo {
42
	__s32 value;
43
	__s32 minimum;
44
	__s32 maximum;
45
	__s32 fuzz;
46
	__s32 flat;
47
};
48
49
#define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */
50
#define EVIOCGID		_IOR('E', 0x02, struct input_id)	/* get device ID */
51
#define EVIOCGREP		_IOR('E', 0x03, int[2])			/* get repeat settings */
52
#define EVIOCSREP		_IOW('E', 0x03, int[2])			/* get repeat settings */
53
#define EVIOCGKEYCODE		_IOR('E', 0x04, int[2])			/* get keycode */
54
#define EVIOCSKEYCODE		_IOW('E', 0x04, int[2])			/* set keycode */
55
56
#define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */
57
#define EVIOCGPHYS(len)		_IOC(_IOC_READ, 'E', 0x07, len)		/* get physical location */
58
#define EVIOCGUNIQ(len)		_IOC(_IOC_READ, 'E', 0x08, len)		/* get unique identifier */
59
60
#define EVIOCGKEY(len)		_IOC(_IOC_READ, 'E', 0x18, len)		/* get global keystate */
61
#define EVIOCGLED(len)		_IOC(_IOC_READ, 'E', 0x19, len)		/* get all LEDs */
62
#define EVIOCGSND(len)		_IOC(_IOC_READ, 'E', 0x1a, len)		/* get all sounds status */
63
64
#define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
65
#define EVIOCGABS(abs)		_IOR('E', 0x40 + abs, struct input_absinfo)		/* get abs value/limits */
66
#define EVIOCSABS(abs)		_IOW('E', 0xc0 + abs, struct input_absinfo)		/* set abs value/limits */
67
68
#define EVIOCSFF		_IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))	/* send a force effect to a force feedback device */
69
#define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */
70
#define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */
71
72
#define EVIOCGRAB		_IOW('E', 0x90, int)			/* Grab/Release device */
73
#define EVIOCGMASK		_IOR('E', 0x91, unsigned long *)	/* Get our input mask */
74
#define EVIOCSMASK		_IOW('E', 0x92, unsigned long)		/* Set our input mask */
75
#define EVIOCGDMASK		_IOR('E', 0x93, unsigned long *)	/* Get device input mask */
76
#define EVIOCSDMASK		_IOW('E', 0x94, unsigned long)		/* Set device input mask */
77
78
79
80
#define BITS_PER_LONG		(sizeof(long) * 8)
81
#define NBITS(x)		((((x)-1)/BITS_PER_LONG)+1)
82
#define OFF(x) 			((x)%BITS_PER_LONG)
83
#define LONG(x)			((x)/BITS_PER_LONG)
84
#define BIT(x)			(1UL<<((x)%BITS_PER_LONG))
85
#define test_bit(bit, array)    ((array[LONG(bit)] >> OFF(bit)) & 1)
86
87
/*
88
 * Event types
89
 */
90
91
#define EV_SYN			0x00
92
#define EV_KEY			0x01
93
#define EV_REL			0x02
94
#define EV_ABS			0x03
95
#define EV_MSC			0x04
96
#define EV_LED			0x11
97
#define EV_SND			0x12
98
#define EV_REP			0x14
99
#define EV_FF			0x15
100
#define EV_PWR			0x16
101
#define EV_FF_STATUS		0x17
102
#define EV_MAX			0x1f
103
104
/*
105
 * Synchronization events.
106
 */
107
108
#define EV_SYN_REPORT		0
109
#define EV_SYN_CONFIG		1
110
111
/*
112
 * Keys and buttons
113
 */
114
115
#define EV_KEY_RESERVED		0
116
#define EV_KEY_ESC		1
117
#define EV_KEY_1		2
118
#define EV_KEY_2		3
119
#define EV_KEY_3		4
120
#define EV_KEY_4		5
121
#define EV_KEY_5		6
122
#define EV_KEY_6		7
123
#define EV_KEY_7		8
124
#define EV_KEY_8		9
125
#define EV_KEY_9		10
126
#define EV_KEY_0		11
127
#define EV_KEY_MINUS		12
128
#define EV_KEY_EQUAL		13
129
#define EV_KEY_BACKSPACE	14
130
#define EV_KEY_TAB		15
131
#define EV_KEY_Q		16
132
#define EV_KEY_W		17
133
#define EV_KEY_E		18
134
#define EV_KEY_R		19
135
#define EV_KEY_T		20
136
#define EV_KEY_Y		21
137
#define EV_KEY_U		22
138
#define EV_KEY_I		23
139
#define EV_KEY_O		24
140
#define EV_KEY_P		25
141
#define EV_KEY_LEFTBRACE	26
142
#define EV_KEY_RIGHTBRACE	27
143
#define EV_KEY_ENTER		28
144
#define EV_KEY_LEFTCTRL		29
145
#define EV_KEY_A		30
146
#define EV_KEY_S		31
147
#define EV_KEY_D		32
148
#define EV_KEY_F		33
149
#define EV_KEY_G		34
150
#define EV_KEY_H		35
151
#define EV_KEY_J		36
152
#define EV_KEY_K		37
153
#define EV_KEY_L		38
154
#define EV_KEY_SEMICOLON	39
155
#define EV_KEY_APOSTROPHE	40
156
#define EV_KEY_GRAVE		41
157
#define EV_KEY_LEFTSHIFT	42
158
#define EV_KEY_BACKSLASH	43
159
#define EV_KEY_Z		44
160
#define EV_KEY_X		45
161
#define EV_KEY_C		46
162
#define EV_KEY_V		47
163
#define EV_KEY_B		48
164
#define EV_KEY_N		49
165
#define EV_KEY_M		50
166
#define EV_KEY_COMMA		51
167
#define EV_KEY_DOT		52
168
#define EV_KEY_SLASH		53
169
#define EV_KEY_RIGHTSHIFT	54
170
#define EV_KEY_KPASTERISK	55
171
#define EV_KEY_LEFTALT		56
172
#define EV_KEY_SPACE		57
173
#define EV_KEY_CAPSLOCK		58
174
#define EV_KEY_F1		59
175
#define EV_KEY_F2		60
176
#define EV_KEY_F3		61
177
#define EV_KEY_F4		62
178
#define EV_KEY_F5		63
179
#define EV_KEY_F6		64
180
#define EV_KEY_F7		65
181
#define EV_KEY_F8		66
182
#define EV_KEY_F9		67
183
#define EV_KEY_F10		68
184
#define EV_KEY_NUMLOCK		69
185
#define EV_KEY_SCROLLLOCK	70
186
#define EV_KEY_KP7		71
187
#define EV_KEY_KP8		72
188
#define EV_KEY_KP9		73
189
#define EV_KEY_KPMINUS		74
190
#define EV_KEY_KP4		75
191
#define EV_KEY_KP5		76
192
#define EV_KEY_KP6		77
193
#define EV_KEY_KPPLUS		78
194
#define EV_KEY_KP1		79
195
#define EV_KEY_KP2		80
196
#define EV_KEY_KP3		81
197
#define EV_KEY_KP0		82
198
#define EV_KEY_KPDOT		83
199
#define EV_KEY_103RD		84
200
#define EV_KEY_F13		85
201
#define EV_KEY_102ND		86
202
#define EV_KEY_F11		87
203
#define EV_KEY_F12		88
204
#define EV_KEY_F14		89
205
#define EV_KEY_F15		90
206
#define EV_KEY_F16		91
207
#define EV_KEY_F17		92
208
#define EV_KEY_F18		93
209
#define EV_KEY_F19		94
210
#define EV_KEY_F20		95
211
#define EV_KEY_KPENTER		96
212
#define EV_KEY_RIGHTCTRL	97
213
#define EV_KEY_KPSLASH		98
214
#define EV_KEY_SYSRQ		99
215
#define EV_KEY_RIGHTALT		100
216
#define EV_KEY_LINEFEED		101
217
#define EV_KEY_HOME		102
218
#define EV_KEY_UP		103
219
#define EV_KEY_PAGEUP		104
220
#define EV_KEY_LEFT		105
221
#define EV_KEY_RIGHT		106
222
#define EV_KEY_END		107
223
#define EV_KEY_DOWN		108
224
#define EV_KEY_PAGEDOWN		109
225
#define EV_KEY_INSERT		110
226
#define EV_KEY_DELETE		111
227
#define EV_KEY_MACRO		112
228
#define EV_KEY_MUTE		113
229
#define EV_KEY_VOLUMEDOWN	114
230
#define EV_KEY_VOLUMEUP		115
231
#define EV_KEY_POWER		116
232
#define EV_KEY_KPEQUAL		117
233
#define EV_KEY_KPPLUSMINUS	118
234
#define EV_KEY_PAUSE		119
235
#define EV_KEY_F21		120
236
#define EV_KEY_F22		121
237
#define EV_KEY_F23		122
238
#define EV_KEY_F24		123
239
#define EV_KEY_KPCOMMA		124
240
#define EV_KEY_LEFTMETA		125
241
#define EV_KEY_RIGHTMETA	126
242
#define EV_KEY_COMPOSE		127
243
244
#define EV_KEY_STOP		128
245
#define EV_KEY_AGAIN		129
246
#define EV_KEY_PROPS		130
247
#define EV_KEY_UNDO		131
248
#define EV_KEY_FRONT		132
249
#define EV_KEY_COPY		133
250
#define EV_KEY_OPEN		134
251
#define EV_KEY_PASTE		135
252
#define EV_KEY_FIND		136
253
#define EV_KEY_CUT		137
254
#define EV_KEY_HELP		138
255
#define EV_KEY_MENU		139
256
#define EV_KEY_CALC		140
257
#define EV_KEY_SETUP		141
258
#define EV_KEY_SLEEP		142
259
#define EV_KEY_WAKEUP		143
260
#define EV_KEY_FILE		144
261
#define EV_KEY_SENDFILE		145
262
#define EV_KEY_DELETEFILE	146
263
#define EV_KEY_XFER		147
264
#define EV_KEY_PROG1		148
265
#define EV_KEY_PROG2		149
266
#define EV_KEY_WWW		150
267
#define EV_KEY_MSDOS		151
268
#define EV_KEY_COFFEE		152
269
#define EV_KEY_DIRECTION	153
270
#define EV_KEY_CYCLEWINDOWS	154
271
#define EV_KEY_MAIL		155
272
#define EV_KEY_BOOKMARKS	156
273
#define EV_KEY_COMPUTER		157
274
#define EV_KEY_BACK		158
275
#define EV_KEY_FORWARD		159
276
#define EV_KEY_CLOSECD		160
277
#define EV_KEY_EJECTCD		161
278
#define EV_KEY_EJECTCLOSECD	162
279
#define EV_KEY_NEXTSONG		163
280
#define EV_KEY_PLAYPAUSE	164
281
#define EV_KEY_PREVIOUSSONG	165
282
#define EV_KEY_STOPCD		166
283
#define EV_KEY_RECORD		167
284
#define EV_KEY_REWIND		168
285
#define EV_KEY_PHONE		169
286
#define EV_KEY_ISO		170
287
#define EV_KEY_CONFIG		171
288
#define EV_KEY_HOMEPAGE		172
289
#define EV_KEY_REFRESH		173
290
#define EV_KEY_EXIT		174
291
#define EV_KEY_MOVE		175
292
#define EV_KEY_EDIT		176
293
#define EV_KEY_SCROLLUP		177
294
#define EV_KEY_SCROLLDOWN	178
295
#define EV_KEY_KPLEFTPAREN	179
296
#define EV_KEY_KPRIGHTPAREN	180
297
298
#define EV_KEY_INTL1		181
299
#define EV_KEY_INTL2		182
300
#define EV_KEY_INTL3		183
301
#define EV_KEY_INTL4		184
302
#define EV_KEY_INTL5		185
303
#define EV_KEY_INTL6		186
304
#define EV_KEY_INTL7		187
305
#define EV_KEY_INTL8		188
306
#define EV_KEY_INTL9		189
307
#define EV_KEY_LANG1		190
308
#define EV_KEY_LANG2		191
309
#define EV_KEY_LANG3		192
310
#define EV_KEY_LANG4		193
311
#define EV_KEY_LANG5		194
312
#define EV_KEY_LANG6		195
313
#define EV_KEY_LANG7		196
314
#define EV_KEY_LANG8		197
315
#define EV_KEY_LANG9		198
316
317
#define EV_KEY_PLAYCD		200
318
#define EV_KEY_PAUSECD		201
319
#define EV_KEY_PROG3		202
320
#define EV_KEY_PROG4		203
321
#define EV_KEY_SUSPEND		205
322
#define EV_KEY_CLOSE		206
323
#define EV_KEY_PLAY		207
324
#define EV_KEY_FASTFORWARD	208
325
#define EV_KEY_BASSBOOST	209
326
#define EV_KEY_PRINT		210
327
#define EV_KEY_HP		211
328
#define EV_KEY_CAMERA		212
329
#define EV_KEY_SOUND		213
330
#define EV_KEY_QUESTION		214
331
#define EV_KEY_EMAIL		215
332
#define EV_KEY_CHAT		216
333
#define EV_KEY_SEARCH		217
334
#define EV_KEY_CONNECT		218
335
#define EV_KEY_FINANCE		219
336
#define EV_KEY_SPORT		220
337
#define EV_KEY_SHOP		221
338
#define EV_KEY_ALTERASE		222
339
#define EV_KEY_CANCEL		223
340
#define EV_KEY_BRIGHTNESSDOWN	224
341
#define EV_KEY_BRIGHTNESSUP	225
342
#define EV_KEY_MEDIA		226
343
344
#define EV_KEY_UNKNOWN		240
345
346
#define EV_BTN_MISC		0x100
347
#define EV_BTN_0		0x100
348
#define EV_BTN_1		0x101
349
#define EV_BTN_2		0x102
350
#define EV_BTN_3		0x103
351
#define EV_BTN_4		0x104
352
#define EV_BTN_5		0x105
353
#define EV_BTN_6		0x106
354
#define EV_BTN_7		0x107
355
#define EV_BTN_8		0x108
356
#define EV_BTN_9		0x109
357
358
#define EV_BTN_MOUSE		0x110
359
#define EV_BTN_LEFT		0x110
360
#define EV_BTN_RIGHT		0x111
361
#define EV_BTN_MIDDLE		0x112
362
#define EV_BTN_SIDE		0x113
363
#define EV_BTN_EXTRA		0x114
364
#define EV_BTN_FORWARD		0x115
365
#define EV_BTN_BACK		0x116
366
367
#define EV_BTN_JOYSTICK		0x120
368
#define EV_BTN_TRIGGER		0x120
369
#define EV_BTN_THUMB		0x121
370
#define EV_BTN_THUMB2		0x122
371
#define EV_BTN_TOP		0x123
372
#define EV_BTN_TOP2		0x124
373
#define EV_BTN_PINKIE		0x125
374
#define EV_BTN_BASE		0x126
375
#define EV_BTN_BASE2		0x127
376
#define EV_BTN_BASE3		0x128
377
#define EV_BTN_BASE4		0x129
378
#define EV_BTN_BASE5		0x12a
379
#define EV_BTN_BASE6		0x12b
380
#define EV_BTN_DEAD		0x12f
381
382
#define EV_BTN_GAMEPAD		0x130
383
#define EV_BTN_A		0x130
384
#define EV_BTN_B		0x131
385
#define EV_BTN_C		0x132
386
#define EV_BTN_X		0x133
387
#define EV_BTN_Y		0x134
388
#define EV_BTN_Z		0x135
389
#define EV_BTN_TL		0x136
390
#define EV_BTN_TR		0x137
391
#define EV_BTN_TL2		0x138
392
#define EV_BTN_TR2		0x139
393
#define EV_BTN_SELECT		0x13a
394
#define EV_BTN_START		0x13b
395
#define EV_BTN_MODE		0x13c
396
#define EV_BTN_THUMBL		0x13d
397
#define EV_BTN_THUMBR		0x13e
398
399
#define EV_BTN_DIGI		0x140
400
#define EV_BTN_TOOL_PEN		0x140
401
#define EV_BTN_TOOL_RUBBER	0x141
402
#define EV_BTN_TOOL_BRUSH	0x142
403
#define EV_BTN_TOOL_PENCIL	0x143
404
#define EV_BTN_TOOL_AIRBRUSH	0x144
405
#define EV_BTN_TOOL_FINGER	0x145
406
#define EV_BTN_TOOL_MOUSE	0x146
407
#define EV_BTN_TOOL_LENS	0x147
408
#define EV_BTN_TOUCH		0x14a
409
#define EV_BTN_STYLUS		0x14b
410
#define EV_BTN_STYLUS2		0x14c
411
412
#define EV_BTN_WHEEL		0x150
413
#define EV_BTN_GEAR_DOWN	0x150
414
#define EV_BTN_GEAR_UP		0x151
415
416
#define EV_KEY_OK		0x160
417
#define EV_KEY_SELECT 		0x161
418
#define EV_KEY_GOTO		0x162
419
#define EV_KEY_CLEAR		0x163
420
#define EV_KEY_POWER2		0x164
421
#define EV_KEY_OPTION		0x165
422
#define EV_KEY_INFO		0x166
423
#define EV_KEY_TIME		0x167
424
#define EV_KEY_VENDOR		0x168
425
#define EV_KEY_ARCHIVE		0x169
426
#define EV_KEY_PROGRAM		0x16a
427
#define EV_KEY_CHANNEL		0x16b
428
#define EV_KEY_FAVORITES	0x16c
429
#define EV_KEY_EPG		0x16d
430
#define EV_KEY_PVR		0x16e
431
#define EV_KEY_MHP		0x16f
432
#define EV_KEY_LANGUAGE		0x170
433
#define EV_KEY_TITLE		0x171
434
#define EV_KEY_SUBTITLE		0x172
435
#define EV_KEY_ANGLE		0x173
436
#define EV_KEY_ZOOM		0x174
437
#define EV_KEY_MODE		0x175
438
#define EV_KEY_KEYBOARD		0x176
439
#define EV_KEY_SCREEN		0x177
440
#define EV_KEY_PC		0x178
441
#define EV_KEY_TV		0x179
442
#define EV_KEY_TV2		0x17a
443
#define EV_KEY_VCR		0x17b
444
#define EV_KEY_VCR2		0x17c
445
#define EV_KEY_SAT		0x17d
446
#define EV_KEY_SAT2		0x17e
447
#define EV_KEY_CD		0x17f
448
#define EV_KEY_TAPE		0x180
449
#define EV_KEY_RADIO		0x181
450
#define EV_KEY_TUNER		0x182
451
#define EV_KEY_PLAYER		0x183
452
#define EV_KEY_TEXT		0x184
453
#define EV_KEY_DVD		0x185
454
#define EV_KEY_AUX		0x186
455
#define EV_KEY_MP3		0x187
456
#define EV_KEY_AUDIO		0x188
457
#define EV_KEY_VIDEO		0x189
458
#define EV_KEY_DIRECTORY	0x18a
459
#define EV_KEY_LIST		0x18b
460
#define EV_KEY_MEMO		0x18c
461
#define EV_KEY_CALENDAR		0x18d
462
#define EV_KEY_RED		0x18e
463
#define EV_KEY_GREEN		0x18f
464
#define EV_KEY_YELLOW		0x190
465
#define EV_KEY_BLUE		0x191
466
#define EV_KEY_CHANNELUP	0x192
467
#define EV_KEY_CHANNELDOWN	0x193
468
#define EV_KEY_FIRST		0x194
469
#define EV_KEY_LAST		0x195
470
#define EV_KEY_AB		0x196
471
#define EV_KEY_NEXT		0x197
472
#define EV_KEY_RESTART		0x198
473
#define EV_KEY_SLOW		0x199
474
#define EV_KEY_SHUFFLE		0x19a
475
#define EV_KEY_BREAK		0x19b
476
#define EV_KEY_PREVIOUS		0x19c
477
#define EV_KEY_DIGITS		0x19d
478
#define EV_KEY_TEEN		0x19e
479
#define EV_KEY_TWEN		0x19f
480
481
#define EV_KEY_MAX		0x1ff
482
483
/*
484
 * Relative axes
485
 */
486
487
#define EV_REL_X		0x00
488
#define EV_REL_Y		0x01
489
#define EV_REL_Z		0x02
490
#define EV_REL_HWHEEL		0x06
491
#define EV_REL_DIAL		0x07
492
#define EV_REL_WHEEL		0x08
493
#define EV_REL_MISC		0x09
494
#define EV_REL_MAX		0x0f
495
496
/*
497
 * Absolute axes
498
 */
499
500
#define EV_ABS_X		0x00
501
#define EV_ABS_Y		0x01
502
#define EV_ABS_Z		0x02
503
#define EV_ABS_RX		0x03
504
#define EV_ABS_RY		0x04
505
#define EV_ABS_RZ		0x05
506
#define EV_ABS_THROTTLE		0x06
507
#define EV_ABS_RUDDER		0x07
508
#define EV_ABS_WHEEL		0x08
509
#define EV_ABS_GAS		0x09
510
#define EV_ABS_BRAKE		0x0a
511
#define EV_ABS_HAT0X		0x10
512
#define EV_ABS_HAT0Y		0x11
513
#define EV_ABS_HAT1X		0x12
514
#define EV_ABS_HAT1Y		0x13
515
#define EV_ABS_HAT2X		0x14
516
#define EV_ABS_HAT2Y		0x15
517
#define EV_ABS_HAT3X		0x16
518
#define EV_ABS_HAT3Y		0x17
519
#define EV_ABS_PRESSURE		0x18
520
#define EV_ABS_DISTANCE		0x19
521
#define EV_ABS_TILT_X		0x1a
522
#define EV_ABS_TILT_Y		0x1b
523
#define EV_ABS_VOLUME		0x20
524
#define EV_ABS_MISC		0x28
525
#define EV_ABS_MAX		0x3f
526
527
/*
528
 * Misc events
529
 */
530
531
#define EV_MSG_SERIAL		0x00
532
#define EV_MSG_PULSELED		0x01
533
#define EV_MSG_MAX		0x07
534
535
/*
536
 * LEDs
537
 */
538
539
#define EV_LED_NUML		0x00
540
#define EV_LED_CAPSL		0x01
541
#define EV_LED_SCROLLL		0x02
542
#define EV_LED_COMPOSE		0x03
543
#define EV_LED_KANA		0x04
544
#define EV_LED_SLEEP		0x05
545
#define EV_LED_SUSPEND		0x06
546
#define EV_LED_MUTE		0x07
547
#define EV_LED_MISC		0x08
548
#define EV_LED_MAX		0x0f
549
550
/*
551
 * Autorepeat values
552
 */
553
554
#define EV_REP_DELAY		0x00
555
#define EV_REP_PERIOD		0x01
556
#define EV_REP_MAX		0x01
557
558
/*
559
 * Sounds
560
 */
561
562
#define EV_SND_CLICK		0x00
563
#define EV_SND_BELL		0x01
564
#define EV_SND_TONE		0x02
565
#define EV_SND_MAX		0x07
566
567
/*
568
 * IDs.
569
 */
570
571
#define EV_ID_BUS		0
572
#define EV_ID_VENDOR		1
573
#define EV_ID_PRODUCT		2
574
#define EV_ID_VERSION		3
575
576
#define EV_BUS_PCI		0x01
577
#define EV_BUS_ISAPNP		0x02
578
#define EV_BUS_USB		0x03
579
#define EV_BUS_HIL		0x04
580
581
#define EV_BUS_ISA		0x10
582
#define EV_BUS_I8042		0x11
583
#define EV_BUS_XTKBD		0x12
584
#define EV_BUS_RS232		0x13
585
#define EV_BUS_GAMEPORT		0x14
586
#define EV_BUS_PARPORT		0x15
587
#define EV_BUS_AMIGA		0x16
588
#define EV_BUS_ADB		0x17
589
#define EV_BUS_I2C		0x18
590
#define EV_BUS_HOST		0x19
591
592
/*
593
 * Values describing the status of an effect
594
 */
595
#define EV_FF_STATUS_STOPPED	0x00
596
#define EV_FF_STATUS_PLAYING	0x01
597
#define EV_FF_STATUS_MAX	0x01
598
599
/*
600
 * Structures used in ioctls to upload effects to a device
601
 * The first structures are not passed directly by using ioctls.
602
 * They are sub-structures of the actually sent structure (called ff_effect)
603
 */
604
605
struct ff_replay {
606
	__u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */
607
	__u16 delay;  /* Time to wait before to start playing an effect */
608
};
609
610
struct ff_trigger {
611
	__u16 button;   /* Number of button triggering an effect */
612
	__u16 interval; /* Time to wait before an effect can be re-triggered (ms) */
613
};
614
615
struct ff_envelope {
616
	__u16 attack_length;	/* Duration of attack (ms) */
617
	__u16 attack_level;	/* Level at beginning of attack */
618
	__u16 fade_length;	/* Duration of fade (ms) */
619
	__u16 fade_level;	/* Level at end of fade */
620
};
621
622
/* EV_FF_CONSTANT */
623
struct ff_constant_effect {
624
	__s16 level;	    /* Strength of effect. Negative values are OK */
625
	struct ff_envelope envelope;
626
};
627
628
/* EV_FF_RAMP */
629
struct ff_ramp_effect {
630
	__s16 start_level;
631
	__s16 end_level;
632
	struct ff_envelope envelope;
633
};
634
635
/* EV_FF_SPRING of FF_FRICTION */
636
struct ff_condition_effect {
637
	__u16 right_saturation; /* Max level when joystick is on the right */
638
	__u16 left_saturation;  /* Max level when joystick in on the left */
639
640
	__s16 right_coeff;	/* Indicates how fast the force grows when the
641
				   joystick moves to the right */
642
	__s16 left_coeff;	/* Same for left side */
643
644
	__u16 deadband;	/* Size of area where no force is produced */
645
	__s16 center;	/* Position of dead zone */
646
647
};
648
649
/* EV_FF_PERIODIC */
650
struct ff_periodic_effect {
651
	__u16 waveform;	/* Kind of wave (sine, square...) */
652
	__u16 period;	/* in ms */
653
	__s16 magnitude;	/* Peak value */
654
	__s16 offset;	/* Mean value of wave (roughly) */
655
	__u16 phase;		/* 'Horizontal' shift */
656
657
	struct ff_envelope envelope;
658
659
/* Only used if waveform == EV_FF_CUSTOM */
660
	__u32 custom_len;	/* Number of samples  */	
661
	__s16 *custom_data;	/* Buffer of samples */
662
/* Note: the data pointed by custom_data is copied by the driver. You can
663
 * therefore dispose of the memory after the upload/update */
664
};
665
666
/* EV_FF_RUMBLE */
667
/* Some rumble pads have two motors of different weight.
668
   strong_magnitude represents the magnitude of the vibration generated
669
   by the heavy motor.
670
*/
671
struct ff_rumble_effect {
672
	__u16 strong_magnitude;  /* Magnitude of the heavy motor */
673
	__u16 weak_magnitude;    /* Magnitude of the light one */
674
};
675
676
/*
677
 * Structure sent through ioctl from the application to the driver
678
 */
679
struct ff_effect {
680
	__u16 type;
681
/* Following field denotes the unique id assigned to an effect.
682
 * If user sets if to -1, a new effect is created, and its id is returned in the same field
683
 * Else, the user sets it to the effect id it wants to update.
684
 */
685
	__s16 id;
686
687
	__u16 direction;	/* Direction. 0 deg -> 0x0000 (down)
688
					     90 deg -> 0x4000 (left)
689
					    180 deg -> 0x8000 (up)
690
					    270 deg -> 0xC000 (right)
691
				*/
692
693
	struct ff_trigger trigger;
694
	struct ff_replay replay;
695
696
	union {
697
		struct ff_constant_effect constant;
698
		struct ff_ramp_effect ramp;
699
		struct ff_periodic_effect periodic;
700
		struct ff_condition_effect condition[2]; /* One for each axis */
701
		struct ff_rumble_effect rumble;
702
	} u;
703
};
704
705
/*
706
 * Force feedback effect types
707
 */
708
709
#define EV_FF_RUMBLE	0x50
710
#define EV_FF_PERIODIC	0x51
711
#define EV_FF_CONSTANT	0x52
712
#define EV_FF_SPRING	0x53
713
#define EV_FF_FRICTION	0x54
714
#define EV_FF_DAMPER	0x55
715
#define EV_FF_INERTIA	0x56
716
#define EV_FF_RAMP	0x57
717
718
/*
719
 * Force feedback periodic effect types
720
 */
721
722
#define EV_FF_SQUARE	0x58
723
#define EV_FF_TRIANGLE	0x59
724
#define EV_FF_SINE	0x5a
725
#define EV_FF_SAW_UP	0x5b
726
#define EV_FF_SAW_DOWN	0x5c
727
#define EV_FF_CUSTOM	0x5d
728
729
/*
730
 * Set ff device properties
731
 */
732
733
#define EV_FF_GAIN		0x60
734
#define EV_FF_AUTOCENTER	0x61
735
736
#define EV_FF_MAX		0x7f
737
738
739
740
typedef struct _evdevDriver {
741
    const char	*name;
742
    const char	*phys;
743
    void	*cb_data;
744
    int		(*callback)(void *cb_data, int what);
745
    struct _evdevDriver	*next;
746
} evdevDriver, *evdevDriverPtr;
747
748
int evdevGetFDForDriver (evdevDriverPtr driver);
749
Bool evdevStart (InputDriverPtr drv);
750
Bool evdevNewDriver (evdevDriverPtr driver);
751
752
#endif	/* LNX_EVDEV_H_ */

Return to bug 29953