patch-2.4.10 linux/include/linux/input.h

Next file: linux/include/linux/interrupt.h
Previous file: linux/include/linux/ide.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.9/linux/include/linux/input.h linux/include/linux/input.h
@@ -2,7 +2,7 @@
 #define _INPUT_H
 
 /*
- * $Id: input.h,v 1.18 2000/07/25 21:36:56 vojtech Exp $
+ * $Id: input.h,v 1.34 2001/05/28 09:06:44 vojtech Exp $
  *
  *  Copyright (c) 1999-2000 Vojtech Pavlik
  *
@@ -12,18 +12,18 @@
 /*
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or 
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- * 
+ *
  * Should you need to contact me, the author, you can do so either by
  * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
  * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
@@ -34,6 +34,7 @@
 #else
 #include <sys/time.h>
 #include <sys/ioctl.h>
+#include <asm/types.h>
 #endif
 
 /*
@@ -57,7 +58,7 @@
  * IOCTLs (0x00 - 0x7f)
  */
 
-#define EVIOCGVERSION		_IOR('E', 0x01, int)                    /* get driver version */
+#define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */
 #define EVIOCGID		_IOR('E', 0x02, short[4])		/* get device ID */
 #define EVIOCGREP		_IOR('E', 0x03, int[2])			/* get repeat settings */
 #define EVIOCSREP		_IOW('E', 0x03, int[2])			/* get repeat settings */
@@ -65,9 +66,16 @@
 #define EVIOCSKEYCODE		_IOW('E', 0x04, int[2])			/* set keycode */
 #define EVIOCGKEY		_IOR('E', 0x05, int[2])			/* get key value */
 #define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */
+#define EVIOCGBUS		_IOR('E', 0x07, short[4])		/* get bus address */
 
 #define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
-#define EVIOCGABS(abs)		_IOR('E', 0x40 + abs, int[5])		/* get abs value/limits */ 
+#define EVIOCGABS(abs)		_IOR('E', 0x40 + abs, int[5])		/* get abs value/limits */
+
+#define EVIOCSFF		_IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))	/* send a force effect to a force feedback device */
+#define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */
+#define EVIOCSGAIN		_IOW('E', 0x82, unsigned short)		/* Set overall gain */
+#define EVIOCSAUTOCENTER	_IOW('E', 0x83, unsigned short)		/* Enable or disable auto-centering */
+#define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */
 
 /*
  * Event types
@@ -77,187 +85,189 @@
 #define EV_KEY			0x01
 #define EV_REL			0x02
 #define EV_ABS			0x03
+#define EV_MSC			0x04
 #define EV_LED			0x11
 #define EV_SND			0x12
 #define EV_REP			0x14
+#define EV_FF			0x15
 #define EV_MAX			0x1f
 
 /*
  * Keys and buttons
  */
 
-#define KEY_RESERVED		0		
-#define KEY_ESC			1		
-#define KEY_1			2		
-#define KEY_2			3		
-#define KEY_3			4		
-#define KEY_4			5		
-#define KEY_5			6		
-#define KEY_6			7		
-#define KEY_7			8		
-#define KEY_8			9		
-#define KEY_9			10		
-#define KEY_0			11		
-#define KEY_MINUS		12		
-#define KEY_EQUAL		13		
-#define KEY_BACKSPACE		14		
-#define KEY_TAB			15		
-#define KEY_Q			16		
-#define KEY_W			17		
-#define KEY_E			18		
-#define KEY_R			19		
-#define KEY_T			20		
-#define KEY_Y			21		
-#define KEY_U			22		
-#define KEY_I			23		
-#define KEY_O			24		
-#define KEY_P			25		
-#define KEY_LEFTBRACE		26		
-#define KEY_RIGHTBRACE		27		
-#define KEY_ENTER		28		
-#define KEY_LEFTCTRL		29		
-#define KEY_A			30		
-#define KEY_S			31		
-#define KEY_D			32		
-#define KEY_F			33		
-#define KEY_G			34		
-#define KEY_H			35		
-#define KEY_J			36		
-#define KEY_K			37		
-#define KEY_L			38		
-#define KEY_SEMICOLON		39		
-#define KEY_APOSTROPHE		40		
-#define KEY_GRAVE		41		
-#define KEY_LEFTSHIFT		42		
-#define KEY_BACKSLASH		43		
-#define KEY_Z			44		
-#define KEY_X			45		
-#define KEY_C			46		
-#define KEY_V			47		
-#define KEY_B			48		
-#define KEY_N			49		
-#define KEY_M			50		
-#define KEY_COMMA		51		
-#define KEY_DOT			52		
-#define KEY_SLASH		53		
-#define KEY_RIGHTSHIFT		54		
-#define KEY_KPASTERISK		55		
-#define KEY_LEFTALT		56		
-#define KEY_SPACE		57		
-#define KEY_CAPSLOCK		58		
-#define KEY_F1			59		
-#define KEY_F2			60		
-#define KEY_F3			61		
-#define KEY_F4			62		
-#define KEY_F5			63		
-#define KEY_F6			64		
-#define KEY_F7			65		
-#define KEY_F8			66		
-#define KEY_F9			67		
-#define KEY_F10			68		
-#define KEY_NUMLOCK		69		
-#define KEY_SCROLLLOCK		70		
-#define KEY_KP7			71		
-#define KEY_KP8			72		
-#define KEY_KP9			73		
-#define KEY_KPMINUS		74		
-#define KEY_KP4			75		
-#define KEY_KP5			76		
-#define KEY_KP6			77		
-#define KEY_KPPLUS		78		
-#define KEY_KP1			79		
-#define KEY_KP2			80		
-#define KEY_KP3			81		
-#define KEY_KP0			82		
-#define KEY_KPDOT		83		
+#define KEY_RESERVED		0
+#define KEY_ESC			1
+#define KEY_1			2
+#define KEY_2			3
+#define KEY_3			4
+#define KEY_4			5
+#define KEY_5			6
+#define KEY_6			7
+#define KEY_7			8
+#define KEY_8			9
+#define KEY_9			10
+#define KEY_0			11
+#define KEY_MINUS		12
+#define KEY_EQUAL		13
+#define KEY_BACKSPACE		14
+#define KEY_TAB			15
+#define KEY_Q			16
+#define KEY_W			17
+#define KEY_E			18
+#define KEY_R			19
+#define KEY_T			20
+#define KEY_Y			21
+#define KEY_U			22
+#define KEY_I			23
+#define KEY_O			24
+#define KEY_P			25
+#define KEY_LEFTBRACE		26
+#define KEY_RIGHTBRACE		27
+#define KEY_ENTER		28
+#define KEY_LEFTCTRL		29
+#define KEY_A			30
+#define KEY_S			31
+#define KEY_D			32
+#define KEY_F			33
+#define KEY_G			34
+#define KEY_H			35
+#define KEY_J			36
+#define KEY_K			37
+#define KEY_L			38
+#define KEY_SEMICOLON		39
+#define KEY_APOSTROPHE		40
+#define KEY_GRAVE		41
+#define KEY_LEFTSHIFT		42
+#define KEY_BACKSLASH		43
+#define KEY_Z			44
+#define KEY_X			45
+#define KEY_C			46
+#define KEY_V			47
+#define KEY_B			48
+#define KEY_N			49
+#define KEY_M			50
+#define KEY_COMMA		51
+#define KEY_DOT			52
+#define KEY_SLASH		53
+#define KEY_RIGHTSHIFT		54
+#define KEY_KPASTERISK		55
+#define KEY_LEFTALT		56
+#define KEY_SPACE		57
+#define KEY_CAPSLOCK		58
+#define KEY_F1			59
+#define KEY_F2			60
+#define KEY_F3			61
+#define KEY_F4			62
+#define KEY_F5			63
+#define KEY_F6			64
+#define KEY_F7			65
+#define KEY_F8			66
+#define KEY_F9			67
+#define KEY_F10			68
+#define KEY_NUMLOCK		69
+#define KEY_SCROLLLOCK		70
+#define KEY_KP7			71
+#define KEY_KP8			72
+#define KEY_KP9			73
+#define KEY_KPMINUS		74
+#define KEY_KP4			75
+#define KEY_KP5			76
+#define KEY_KP6			77
+#define KEY_KPPLUS		78
+#define KEY_KP1			79
+#define KEY_KP2			80
+#define KEY_KP3			81
+#define KEY_KP0			82
+#define KEY_KPDOT		83
 #define KEY_103RD		84
-#define KEY_F13			85		
-#define KEY_102ND		86		
-#define KEY_F11			87		
-#define KEY_F12			88		
-#define KEY_F14			89		
-#define KEY_F15			90		
-#define KEY_F16			91		
-#define KEY_F17			92		
-#define KEY_F18			93		
-#define KEY_F19			94		
-#define KEY_F20			95		
-#define KEY_KPENTER		96		
-#define KEY_RIGHTCTRL		97		
-#define KEY_KPSLASH		98		
-#define KEY_SYSRQ		99		
-#define KEY_RIGHTALT		100		
-#define KEY_LINEFEED		101		
-#define KEY_HOME		102		
-#define KEY_UP			103		
-#define KEY_PAGEUP		104		
-#define KEY_LEFT		105		
-#define KEY_RIGHT		106		
-#define KEY_END			107		
-#define KEY_DOWN		108		
-#define KEY_PAGEDOWN		109		
-#define KEY_INSERT		110		
-#define KEY_DELETE		111		
-#define KEY_MACRO		112		
-#define KEY_MUTE		113		
-#define KEY_VOLUMEDOWN		114		
-#define KEY_VOLUMEUP		115		
-#define KEY_POWER		116		
-#define KEY_KPEQUAL		117		
-#define KEY_KPPLUSMINUS		118		
-#define KEY_PAUSE		119		
-#define KEY_F21			120		
-#define KEY_F22			121		
-#define KEY_F23			122		
-#define KEY_F24			123		
+#define KEY_F13			85
+#define KEY_102ND		86
+#define KEY_F11			87
+#define KEY_F12			88
+#define KEY_F14			89
+#define KEY_F15			90
+#define KEY_F16			91
+#define KEY_F17			92
+#define KEY_F18			93
+#define KEY_F19			94
+#define KEY_F20			95
+#define KEY_KPENTER		96
+#define KEY_RIGHTCTRL		97
+#define KEY_KPSLASH		98
+#define KEY_SYSRQ		99
+#define KEY_RIGHTALT		100
+#define KEY_LINEFEED		101
+#define KEY_HOME		102
+#define KEY_UP			103
+#define KEY_PAGEUP		104
+#define KEY_LEFT		105
+#define KEY_RIGHT		106
+#define KEY_END			107
+#define KEY_DOWN		108
+#define KEY_PAGEDOWN		109
+#define KEY_INSERT		110
+#define KEY_DELETE		111
+#define KEY_MACRO		112
+#define KEY_MUTE		113
+#define KEY_VOLUMEDOWN		114
+#define KEY_VOLUMEUP		115
+#define KEY_POWER		116
+#define KEY_KPEQUAL		117
+#define KEY_KPPLUSMINUS		118
+#define KEY_PAUSE		119
+#define KEY_F21			120
+#define KEY_F22			121
+#define KEY_F23			122
+#define KEY_F24			123
 #define KEY_KPCOMMA		124
-#define KEY_LEFTMETA		125		
-#define KEY_RIGHTMETA		126		
-#define KEY_COMPOSE		127		
-
-#define KEY_STOP		128		
-#define KEY_AGAIN		129		
-#define KEY_PROPS		130		
-#define KEY_UNDO		131		
-#define KEY_FRONT		132		
-#define KEY_COPY		133		
-#define KEY_OPEN		134		
-#define KEY_PASTE		135		
-#define KEY_FIND		136		
-#define KEY_CUT			137		
-#define KEY_HELP		138		
-#define KEY_MENU		139		
-#define KEY_CALC		140		
-#define KEY_SETUP		141		
-#define KEY_SLEEP		142		
-#define KEY_WAKEUP		143		
-#define KEY_FILE		144		
-#define KEY_SENDFILE		145		
-#define KEY_DELETEFILE		146		
-#define KEY_XFER		147		
-#define KEY_PROG1		148		
-#define KEY_PROG2		149		
-#define KEY_WWW			150		
-#define KEY_MSDOS		151		
-#define KEY_COFFEE		152		
-#define KEY_DIRECTION		153		
-#define KEY_CYCLEWINDOWS	154		
+#define KEY_LEFTMETA		125
+#define KEY_RIGHTMETA		126
+#define KEY_COMPOSE		127
+
+#define KEY_STOP		128
+#define KEY_AGAIN		129
+#define KEY_PROPS		130
+#define KEY_UNDO		131
+#define KEY_FRONT		132
+#define KEY_COPY		133
+#define KEY_OPEN		134
+#define KEY_PASTE		135
+#define KEY_FIND		136
+#define KEY_CUT			137
+#define KEY_HELP		138
+#define KEY_MENU		139
+#define KEY_CALC		140
+#define KEY_SETUP		141
+#define KEY_SLEEP		142
+#define KEY_WAKEUP		143
+#define KEY_FILE		144
+#define KEY_SENDFILE		145
+#define KEY_DELETEFILE		146
+#define KEY_XFER		147
+#define KEY_PROG1		148
+#define KEY_PROG2		149
+#define KEY_WWW			150
+#define KEY_MSDOS		151
+#define KEY_COFFEE		152
+#define KEY_DIRECTION		153
+#define KEY_CYCLEWINDOWS	154
 #define KEY_MAIL		155
 #define KEY_BOOKMARKS		156
 #define KEY_COMPUTER		157
 #define KEY_BACK		158
 #define KEY_FORWARD		159
-#define KEY_CLOSECD		160		
-#define KEY_EJECTCD		161		
-#define KEY_EJECTCLOSECD	162		
-#define KEY_NEXTSONG		163		
-#define KEY_PLAYPAUSE		164		
-#define KEY_PREVIOUSSONG	165		
-#define KEY_STOPCD		166		
-#define KEY_RECORD		167		
-#define KEY_REWIND		168		
+#define KEY_CLOSECD		160
+#define KEY_EJECTCD		161
+#define KEY_EJECTCLOSECD	162
+#define KEY_NEXTSONG		163
+#define KEY_PLAYPAUSE		164
+#define KEY_PREVIOUSSONG	165
+#define KEY_STOPCD		166
+#define KEY_RECORD		167
+#define KEY_REWIND		168
 #define KEY_PHONE		169
-
+#define KEY_ISO			170
 #define KEY_CONFIG		171
 #define KEY_HOMEPAGE		172
 #define KEY_REFRESH		173
@@ -288,7 +298,14 @@
 #define KEY_LANG8		197
 #define KEY_LANG9		198
 
-#define KEY_UNKNOWN		200
+#define KEY_PLAYCD		200
+#define KEY_PAUSECD		201
+#define KEY_PROG3		202
+#define KEY_PROG4		203
+#define KEY_SUSPEND		205
+#define KEY_CLOSE		206
+
+#define KEY_UNKNOWN		220
 
 #define BTN_MISC		0x100
 #define BTN_0			0x100
@@ -324,6 +341,7 @@
 #define BTN_BASE4		0x129
 #define BTN_BASE5		0x12a
 #define BTN_BASE6		0x12b
+#define BTN_DEAD		0x12f
 
 #define BTN_GAMEPAD		0x130
 #define BTN_A			0x130
@@ -339,6 +357,8 @@
 #define BTN_SELECT		0x13a
 #define BTN_START		0x13b
 #define BTN_MODE		0x13c
+#define BTN_THUMBL		0x13d
+#define BTN_THUMBR		0x13e
 
 #define BTN_DIGI		0x140
 #define BTN_TOOL_PEN		0x140
@@ -399,6 +419,13 @@
 #define ABS_MAX			0x1f
 
 /*
+ * Misc events
+ */
+
+#define MSC_SERIAL		0x00
+#define MSC_MAX			0x07
+
+/*
  * LEDs
  */
 
@@ -407,6 +434,10 @@
 #define LED_SCROLLL		0x02
 #define LED_COMPOSE		0x03
 #define LED_KANA		0x04
+#define LED_SLEEP		0x05
+#define LED_SUSPEND		0x06
+#define LED_MUTE		0x07
+#define LED_MISC		0x08
 #define LED_MAX			0x0f
 
 /*
@@ -448,6 +479,135 @@
 #define BUS_ADB			0x17
 #define BUS_I2C			0x18
 
+/*
+ * Structures used in ioctls to upload effects to a device
+ * The first structures are not passed directly by using ioctls.
+ * They are sub-structures of the actually sent structure (called ff_effect)
+ */
+
+struct ff_replay {
+	__u16 length;		/* Duration of an effect */
+	__u16 delay;		/* Time to wait before to start playing an effect */
+};
+
+struct ff_trigger {
+	__u16 button;		/* Number of button triggering an effect */
+	__u16 interval;		/* Time to wait before an effect can be re-triggered */
+};
+
+struct ff_shape {
+	__u16 attack_length;	/* Duration of attack */
+	__s16 attack_level;	/* Level at beginning of attack */
+	__u16 fade_length;	/* Duration of fade */
+	__s16 fade_level;	/* Level at end of fade */
+};
+
+/* FF_CONSTANT */
+struct ff_constant_effect {
+	__s16 level;		/* Strength of effect */
+	__u16 direction;	/* Direction of effect (see periodic effects) */
+	struct ff_shape shape;
+};
+
+/* FF_SPRING of FF_FRICTION */
+struct ff_interactive_effect {
+/* Axis along which effect must be created. If null, the field named direction
+ * is used
+ * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
+ */
+	__u16 axis;
+	__u16 direction;
+
+	__s16 right_saturation; /* Max level when joystick is on the right */
+	__s16 left_saturation;  /* Max level when joystick in on the left */
+
+	__s16 right_coeff;	/* Indicates how fast the force grows when the
+				   joystick moves to the right */
+	__s16 left_coeff;	/* Same for left side */
+
+	__u16 deadband;		/* Size of area where no force is produced */
+	__s16 center;		/* Position of dead dead zone */
+
+};
+
+/* FF_PERIODIC */
+struct ff_periodic_effect {
+	__u16 waveform;		/* Kind of wave (sine, square...) */
+	__u16 period;
+	__s16 magnitude;	/* Peak value */
+	__s16 offset;		/* Mean value of wave (roughly) */
+	__u16 phase;		/* 'Horizontal' shift */
+	__u16 direction;	/* Direction. 0 deg -> 0x0000
+					     90 deg -> 0x4000 */
+
+	struct ff_shape shape;
+};
+
+/*
+ * Structure sent through ioctl from the application to the driver
+ */
+struct ff_effect {
+	__u16 type;
+/* Following field denotes the unique id assigned to an effect.
+ * It is set by the driver.
+ */
+	__s16 id;
+
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+
+	union {
+		struct ff_constant_effect constant;
+		struct ff_periodic_effect periodic;
+		struct ff_interactive_effect interactive;
+	} u;
+};
+
+/*
+ * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
+ * access the bitmap.
+ */
+
+#define FF_BTN(x)	((x) - BTN_MISC + FF_BTN_OFFSET)
+#define FF_BTN_OFFSET	0x00
+
+/*
+ * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
+ */
+
+#define FF_ABS(x)	((x) + FF_ABS_OFFSET)
+#define FF_ABS_OFFSET	0x40
+
+/*
+ * Force feedback effect types
+ */
+
+#define FF_RUMBLE	0x50
+#define FF_PERIODIC	0x51
+#define FF_CONSTANT	0x52
+#define FF_SPRING	0x53
+#define FF_FRICTION	0x54
+
+/*
+ * Force feedback periodic effect types
+ */
+
+#define FF_SQUARE	0x58
+#define FF_TRIANGLE	0x59
+#define FF_SINE		0x5a
+#define FF_SAW_UP	0x5b
+#define FF_SAW_DOWN	0x5c
+#define FF_CUSTOM	0x5d
+
+/*
+ * Set ff device properties
+ */
+
+#define FF_GAIN		0x60
+#define FF_AUTOCENTER	0x61
+
+#define FF_MAX		0x7f
+
 #ifdef __KERNEL__
 
 /*
@@ -476,8 +636,11 @@
 	unsigned long keybit[NBITS(KEY_MAX)];
 	unsigned long relbit[NBITS(REL_MAX)];
 	unsigned long absbit[NBITS(ABS_MAX)];
+	unsigned long mscbit[NBITS(MSC_MAX)];
 	unsigned long ledbit[NBITS(LED_MAX)];
 	unsigned long sndbit[NBITS(SND_MAX)];
+	unsigned long ffbit[NBITS(FF_MAX)];
+	int ff_effects_max;
 
 	unsigned int keycodemax;
 	unsigned int keycodesize;
@@ -492,7 +655,7 @@
 	unsigned long key[NBITS(KEY_MAX)];
 	unsigned long led[NBITS(LED_MAX)];
 	unsigned long snd[NBITS(SND_MAX)];
-	
+
 	int absmax[ABS_MAX + 1];
 	int absmin[ABS_MAX + 1];
 	int absfuzz[ABS_MAX + 1];
@@ -501,6 +664,8 @@
 	int (*open)(struct input_dev *dev);
 	void (*close)(struct input_dev *dev);
 	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
+	int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
+	int (*erase_effect)(struct input_dev *dev, int effect_id);
 
 	struct input_handle *handle;
 	struct input_dev *next;
@@ -526,7 +691,7 @@
 	void *private;
 
 	int open;
-	
+
 	struct input_dev *dev;
 	struct input_handler *handler;
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)