input.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:17k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _INPUT_H
  2. #define _INPUT_H
  3. /*
  4.  * $Id: input.h,v 1.34 2001/05/28 09:06:44 vojtech Exp $
  5.  *
  6.  *  Copyright (c) 1999-2000 Vojtech Pavlik
  7.  *
  8.  *  Sponsored by SuSE
  9.  */
  10. /*
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  24.  *
  25.  * Should you need to contact me, the author, you can do so either by
  26.  * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
  27.  * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
  28.  */
  29. #ifdef __KERNEL__
  30. #include <linux/time.h>
  31. #else
  32. #include <sys/time.h>
  33. #include <sys/ioctl.h>
  34. #include <asm/types.h>
  35. #endif
  36. /*
  37.  * The event structure itself
  38.  */
  39. struct input_event {
  40. struct timeval time;
  41. unsigned short type;
  42. unsigned short code;
  43. unsigned int value;
  44. };
  45. /*
  46.  * Protocol version.
  47.  */
  48. #define EV_VERSION 0x010000
  49. /*
  50.  * IOCTLs (0x00 - 0x7f)
  51.  */
  52. #define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
  53. #define EVIOCGID _IOR('E', 0x02, short[4]) /* get device ID */
  54. #define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */
  55. #define EVIOCSREP _IOW('E', 0x03, int[2]) /* get repeat settings */
  56. #define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */
  57. #define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */
  58. #define EVIOCGKEY _IOR('E', 0x05, int[2]) /* get key value */
  59. #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
  60. #define EVIOCGBUS _IOR('E', 0x07, short[4]) /* get bus address */
  61. #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
  62. #define EVIOCGABS(abs) _IOR('E', 0x40 + abs, int[5]) /* get abs value/limits */
  63. #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */
  64. #define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
  65. #define EVIOCSGAIN _IOW('E', 0x82, unsigned short) /* Set overall gain */
  66. #define EVIOCSAUTOCENTER _IOW('E', 0x83, unsigned short) /* Enable or disable auto-centering */
  67. #define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
  68. /*
  69.  * Event types
  70.  */
  71. #define EV_RST 0x00
  72. #define EV_KEY 0x01
  73. #define EV_REL 0x02
  74. #define EV_ABS 0x03
  75. #define EV_MSC 0x04
  76. #define EV_LED 0x11
  77. #define EV_SND 0x12
  78. #define EV_REP 0x14
  79. #define EV_FF 0x15
  80. #define EV_MAX 0x1f
  81. /*
  82.  * Keys and buttons
  83.  */
  84. #define KEY_RESERVED 0
  85. #define KEY_ESC 1
  86. #define KEY_1 2
  87. #define KEY_2 3
  88. #define KEY_3 4
  89. #define KEY_4 5
  90. #define KEY_5 6
  91. #define KEY_6 7
  92. #define KEY_7 8
  93. #define KEY_8 9
  94. #define KEY_9 10
  95. #define KEY_0 11
  96. #define KEY_MINUS 12
  97. #define KEY_EQUAL 13
  98. #define KEY_BACKSPACE 14
  99. #define KEY_TAB 15
  100. #define KEY_Q 16
  101. #define KEY_W 17
  102. #define KEY_E 18
  103. #define KEY_R 19
  104. #define KEY_T 20
  105. #define KEY_Y 21
  106. #define KEY_U 22
  107. #define KEY_I 23
  108. #define KEY_O 24
  109. #define KEY_P 25
  110. #define KEY_LEFTBRACE 26
  111. #define KEY_RIGHTBRACE 27
  112. #define KEY_ENTER 28
  113. #define KEY_LEFTCTRL 29
  114. #define KEY_A 30
  115. #define KEY_S 31
  116. #define KEY_D 32
  117. #define KEY_F 33
  118. #define KEY_G 34
  119. #define KEY_H 35
  120. #define KEY_J 36
  121. #define KEY_K 37
  122. #define KEY_L 38
  123. #define KEY_SEMICOLON 39
  124. #define KEY_APOSTROPHE 40
  125. #define KEY_GRAVE 41
  126. #define KEY_LEFTSHIFT 42
  127. #define KEY_BACKSLASH 43
  128. #define KEY_Z 44
  129. #define KEY_X 45
  130. #define KEY_C 46
  131. #define KEY_V 47
  132. #define KEY_B 48
  133. #define KEY_N 49
  134. #define KEY_M 50
  135. #define KEY_COMMA 51
  136. #define KEY_DOT 52
  137. #define KEY_SLASH 53
  138. #define KEY_RIGHTSHIFT 54
  139. #define KEY_KPASTERISK 55
  140. #define KEY_LEFTALT 56
  141. #define KEY_SPACE 57
  142. #define KEY_CAPSLOCK 58
  143. #define KEY_F1 59
  144. #define KEY_F2 60
  145. #define KEY_F3 61
  146. #define KEY_F4 62
  147. #define KEY_F5 63
  148. #define KEY_F6 64
  149. #define KEY_F7 65
  150. #define KEY_F8 66
  151. #define KEY_F9 67
  152. #define KEY_F10 68
  153. #define KEY_NUMLOCK 69
  154. #define KEY_SCROLLLOCK 70
  155. #define KEY_KP7 71
  156. #define KEY_KP8 72
  157. #define KEY_KP9 73
  158. #define KEY_KPMINUS 74
  159. #define KEY_KP4 75
  160. #define KEY_KP5 76
  161. #define KEY_KP6 77
  162. #define KEY_KPPLUS 78
  163. #define KEY_KP1 79
  164. #define KEY_KP2 80
  165. #define KEY_KP3 81
  166. #define KEY_KP0 82
  167. #define KEY_KPDOT 83
  168. #define KEY_103RD 84
  169. #define KEY_F13 85
  170. #define KEY_102ND 86
  171. #define KEY_F11 87
  172. #define KEY_F12 88
  173. #define KEY_F14 89
  174. #define KEY_F15 90
  175. #define KEY_F16 91
  176. #define KEY_F17 92
  177. #define KEY_F18 93
  178. #define KEY_F19 94
  179. #define KEY_F20 95
  180. #define KEY_KPENTER 96
  181. #define KEY_RIGHTCTRL 97
  182. #define KEY_KPSLASH 98
  183. #define KEY_SYSRQ 99
  184. #define KEY_RIGHTALT 100
  185. #define KEY_LINEFEED 101
  186. #define KEY_HOME 102
  187. #define KEY_UP 103
  188. #define KEY_PAGEUP 104
  189. #define KEY_LEFT 105
  190. #define KEY_RIGHT 106
  191. #define KEY_END 107
  192. #define KEY_DOWN 108
  193. #define KEY_PAGEDOWN 109
  194. #define KEY_INSERT 110
  195. #define KEY_DELETE 111
  196. #define KEY_MACRO 112
  197. #define KEY_MUTE 113
  198. #define KEY_VOLUMEDOWN 114
  199. #define KEY_VOLUMEUP 115
  200. #define KEY_POWER 116
  201. #define KEY_KPEQUAL 117
  202. #define KEY_KPPLUSMINUS 118
  203. #define KEY_PAUSE 119
  204. #define KEY_F21 120
  205. #define KEY_F22 121
  206. #define KEY_F23 122
  207. #define KEY_F24 123
  208. #define KEY_KPCOMMA 124
  209. #define KEY_LEFTMETA 125
  210. #define KEY_RIGHTMETA 126
  211. #define KEY_COMPOSE 127
  212. #define KEY_STOP 128
  213. #define KEY_AGAIN 129
  214. #define KEY_PROPS 130
  215. #define KEY_UNDO 131
  216. #define KEY_FRONT 132
  217. #define KEY_COPY 133
  218. #define KEY_OPEN 134
  219. #define KEY_PASTE 135
  220. #define KEY_FIND 136
  221. #define KEY_CUT 137
  222. #define KEY_HELP 138
  223. #define KEY_MENU 139
  224. #define KEY_CALC 140
  225. #define KEY_SETUP 141
  226. #define KEY_SLEEP 142
  227. #define KEY_WAKEUP 143
  228. #define KEY_FILE 144
  229. #define KEY_SENDFILE 145
  230. #define KEY_DELETEFILE 146
  231. #define KEY_XFER 147
  232. #define KEY_PROG1 148
  233. #define KEY_PROG2 149
  234. #define KEY_WWW 150
  235. #define KEY_MSDOS 151
  236. #define KEY_COFFEE 152
  237. #define KEY_DIRECTION 153
  238. #define KEY_CYCLEWINDOWS 154
  239. #define KEY_MAIL 155
  240. #define KEY_BOOKMARKS 156
  241. #define KEY_COMPUTER 157
  242. #define KEY_BACK 158
  243. #define KEY_FORWARD 159
  244. #define KEY_CLOSECD 160
  245. #define KEY_EJECTCD 161
  246. #define KEY_EJECTCLOSECD 162
  247. #define KEY_NEXTSONG 163
  248. #define KEY_PLAYPAUSE 164
  249. #define KEY_PREVIOUSSONG 165
  250. #define KEY_STOPCD 166
  251. #define KEY_RECORD 167
  252. #define KEY_REWIND 168
  253. #define KEY_PHONE 169
  254. #define KEY_ISO 170
  255. #define KEY_CONFIG 171
  256. #define KEY_HOMEPAGE 172
  257. #define KEY_REFRESH 173
  258. #define KEY_EXIT 174
  259. #define KEY_MOVE 175
  260. #define KEY_EDIT 176
  261. #define KEY_SCROLLUP 177
  262. #define KEY_SCROLLDOWN 178
  263. #define KEY_KPLEFTPAREN 179
  264. #define KEY_KPRIGHTPAREN 180
  265. #define KEY_INTL1 181
  266. #define KEY_INTL2 182
  267. #define KEY_INTL3 183
  268. #define KEY_INTL4 184
  269. #define KEY_INTL5 185
  270. #define KEY_INTL6 186
  271. #define KEY_INTL7 187
  272. #define KEY_INTL8 188
  273. #define KEY_INTL9 189
  274. #define KEY_LANG1 190
  275. #define KEY_LANG2 191
  276. #define KEY_LANG3 192
  277. #define KEY_LANG4 193
  278. #define KEY_LANG5 194
  279. #define KEY_LANG6 195
  280. #define KEY_LANG7 196
  281. #define KEY_LANG8 197
  282. #define KEY_LANG9 198
  283. #define KEY_PLAYCD 200
  284. #define KEY_PAUSECD 201
  285. #define KEY_PROG3 202
  286. #define KEY_PROG4 203
  287. #define KEY_SUSPEND 205
  288. #define KEY_CLOSE 206
  289. #define KEY_UNKNOWN 220
  290. #define KEY_BRIGHTNESSDOWN 224
  291. #define KEY_BRIGHTNESSUP 225
  292. #define BTN_MISC 0x100
  293. #define BTN_0 0x100
  294. #define BTN_1 0x101
  295. #define BTN_2 0x102
  296. #define BTN_3 0x103
  297. #define BTN_4 0x104
  298. #define BTN_5 0x105
  299. #define BTN_6 0x106
  300. #define BTN_7 0x107
  301. #define BTN_8 0x108
  302. #define BTN_9 0x109
  303. #define BTN_MOUSE 0x110
  304. #define BTN_LEFT 0x110
  305. #define BTN_RIGHT 0x111
  306. #define BTN_MIDDLE 0x112
  307. #define BTN_SIDE 0x113
  308. #define BTN_EXTRA 0x114
  309. #define BTN_FORWARD 0x115
  310. #define BTN_BACK 0x116
  311. #define BTN_JOYSTICK 0x120
  312. #define BTN_TRIGGER 0x120
  313. #define BTN_THUMB 0x121
  314. #define BTN_THUMB2 0x122
  315. #define BTN_TOP 0x123
  316. #define BTN_TOP2 0x124
  317. #define BTN_PINKIE 0x125
  318. #define BTN_BASE 0x126
  319. #define BTN_BASE2 0x127
  320. #define BTN_BASE3 0x128
  321. #define BTN_BASE4 0x129
  322. #define BTN_BASE5 0x12a
  323. #define BTN_BASE6 0x12b
  324. #define BTN_DEAD 0x12f
  325. #define BTN_GAMEPAD 0x130
  326. #define BTN_A 0x130
  327. #define BTN_B 0x131
  328. #define BTN_C 0x132
  329. #define BTN_X 0x133
  330. #define BTN_Y 0x134
  331. #define BTN_Z 0x135
  332. #define BTN_TL 0x136
  333. #define BTN_TR 0x137
  334. #define BTN_TL2 0x138
  335. #define BTN_TR2 0x139
  336. #define BTN_SELECT 0x13a
  337. #define BTN_START 0x13b
  338. #define BTN_MODE 0x13c
  339. #define BTN_THUMBL 0x13d
  340. #define BTN_THUMBR 0x13e
  341. #define BTN_DIGI 0x140
  342. #define BTN_TOOL_PEN 0x140
  343. #define BTN_TOOL_RUBBER 0x141
  344. #define BTN_TOOL_BRUSH 0x142
  345. #define BTN_TOOL_PENCIL 0x143
  346. #define BTN_TOOL_AIRBRUSH 0x144
  347. #define BTN_TOOL_FINGER 0x145
  348. #define BTN_TOOL_MOUSE 0x146
  349. #define BTN_TOOL_LENS 0x147
  350. #define BTN_TOUCH 0x14a
  351. #define BTN_STYLUS 0x14b
  352. #define BTN_STYLUS2 0x14c
  353. #define KEY_MAX 0x1ff
  354. /*
  355.  * Relative axes
  356.  */
  357. #define REL_X 0x00
  358. #define REL_Y 0x01
  359. #define REL_Z 0x02
  360. #define REL_HWHEEL 0x06
  361. #define REL_DIAL 0x07
  362. #define REL_WHEEL 0x08
  363. #define REL_MISC 0x09
  364. #define REL_MAX 0x0f
  365. /*
  366.  * Absolute axes
  367.  */
  368. #define ABS_X 0x00
  369. #define ABS_Y 0x01
  370. #define ABS_Z 0x02
  371. #define ABS_RX 0x03
  372. #define ABS_RY 0x04
  373. #define ABS_RZ 0x05
  374. #define ABS_THROTTLE 0x06
  375. #define ABS_RUDDER 0x07
  376. #define ABS_WHEEL 0x08
  377. #define ABS_GAS 0x09
  378. #define ABS_BRAKE 0x0a
  379. #define ABS_HAT0X 0x10
  380. #define ABS_HAT0Y 0x11
  381. #define ABS_HAT1X 0x12
  382. #define ABS_HAT1Y 0x13
  383. #define ABS_HAT2X 0x14
  384. #define ABS_HAT2Y 0x15
  385. #define ABS_HAT3X 0x16
  386. #define ABS_HAT3Y 0x17
  387. #define ABS_PRESSURE 0x18
  388. #define ABS_DISTANCE 0x19
  389. #define ABS_TILT_X 0x1a
  390. #define ABS_TILT_Y 0x1b
  391. #define ABS_MISC 0x1c
  392. #define ABS_MAX 0x1f
  393. /*
  394.  * Misc events
  395.  */
  396. #define MSC_SERIAL 0x00
  397. #define MSC_MAX 0x07
  398. /*
  399.  * LEDs
  400.  */
  401. #define LED_NUML 0x00
  402. #define LED_CAPSL 0x01
  403. #define LED_SCROLLL 0x02
  404. #define LED_COMPOSE 0x03
  405. #define LED_KANA 0x04
  406. #define LED_SLEEP 0x05
  407. #define LED_SUSPEND 0x06
  408. #define LED_MUTE 0x07
  409. #define LED_MISC 0x08
  410. #define LED_MAX 0x0f
  411. /*
  412.  * Autorepeat values
  413.  */
  414. #define REP_DELAY 0x00
  415. #define REP_PERIOD 0x01
  416. #define REP_MAX 0x01
  417. /*
  418.  * Sounds
  419.  */
  420. #define SND_CLICK 0x00
  421. #define SND_BELL 0x01
  422. #define SND_MAX 0x07
  423. /*
  424.  * IDs.
  425.  */
  426. #define ID_BUS 0
  427. #define ID_VENDOR 1
  428. #define ID_PRODUCT 2
  429. #define ID_VERSION 3
  430. #define BUS_PCI 0x01
  431. #define BUS_ISAPNP 0x02
  432. #define BUS_USB 0x03
  433. #define BUS_HIL                 0x04
  434. #define BUS_ISA 0x10
  435. #define BUS_I8042 0x11
  436. #define BUS_XTKBD 0x12
  437. #define BUS_RS232 0x13
  438. #define BUS_GAMEPORT 0x14
  439. #define BUS_PARPORT 0x15
  440. #define BUS_AMIGA 0x16
  441. #define BUS_ADB 0x17
  442. #define BUS_I2C 0x18
  443. /*
  444.  * Structures used in ioctls to upload effects to a device
  445.  * The first structures are not passed directly by using ioctls.
  446.  * They are sub-structures of the actually sent structure (called ff_effect)
  447.  */
  448. struct ff_replay {
  449. __u16 length; /* Duration of an effect */
  450. __u16 delay; /* Time to wait before to start playing an effect */
  451. };
  452. struct ff_trigger {
  453. __u16 button; /* Number of button triggering an effect */
  454. __u16 interval; /* Time to wait before an effect can be re-triggered */
  455. };
  456. struct ff_shape {
  457. __u16 attack_length; /* Duration of attack */
  458. __s16 attack_level; /* Level at beginning of attack */
  459. __u16 fade_length; /* Duration of fade */
  460. __s16 fade_level; /* Level at end of fade */
  461. };
  462. /* FF_CONSTANT */
  463. struct ff_constant_effect {
  464. __s16 level; /* Strength of effect */
  465. __u16 direction; /* Direction of effect (see periodic effects) */
  466. struct ff_shape shape;
  467. };
  468. /* FF_SPRING of FF_FRICTION */
  469. struct ff_interactive_effect {
  470. /* Axis along which effect must be created. If null, the field named direction
  471.  * is used
  472.  * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
  473.  */
  474. __u16 axis;
  475. __u16 direction;
  476. __s16 right_saturation; /* Max level when joystick is on the right */
  477. __s16 left_saturation;  /* Max level when joystick in on the left */
  478. __s16 right_coeff; /* Indicates how fast the force grows when the
  479.    joystick moves to the right */
  480. __s16 left_coeff; /* Same for left side */
  481. __u16 deadband; /* Size of area where no force is produced */
  482. __s16 center; /* Position of dead dead zone */
  483. };
  484. /* FF_PERIODIC */
  485. struct ff_periodic_effect {
  486. __u16 waveform; /* Kind of wave (sine, square...) */
  487. __u16 period;
  488. __s16 magnitude; /* Peak value */
  489. __s16 offset; /* Mean value of wave (roughly) */
  490. __u16 phase; /* 'Horizontal' shift */
  491. __u16 direction; /* Direction. 0 deg -> 0x0000
  492.      90 deg -> 0x4000 */
  493. struct ff_shape shape;
  494. };
  495. /*
  496.  * Structure sent through ioctl from the application to the driver
  497.  */
  498. struct ff_effect {
  499. __u16 type;
  500. /* Following field denotes the unique id assigned to an effect.
  501.  * It is set by the driver.
  502.  */
  503. __s16 id;
  504. struct ff_trigger trigger;
  505. struct ff_replay replay;
  506. union {
  507. struct ff_constant_effect constant;
  508. struct ff_periodic_effect periodic;
  509. struct ff_interactive_effect interactive;
  510. } u;
  511. };
  512. /*
  513.  * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
  514.  * access the bitmap.
  515.  */
  516. #define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
  517. #define FF_BTN_OFFSET 0x00
  518. /*
  519.  * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
  520.  */
  521. #define FF_ABS(x) ((x) + FF_ABS_OFFSET)
  522. #define FF_ABS_OFFSET 0x40
  523. /*
  524.  * Force feedback effect types
  525.  */
  526. #define FF_RUMBLE 0x50
  527. #define FF_PERIODIC 0x51
  528. #define FF_CONSTANT 0x52
  529. #define FF_SPRING 0x53
  530. #define FF_FRICTION 0x54
  531. /*
  532.  * Force feedback periodic effect types
  533.  */
  534. #define FF_SQUARE 0x58
  535. #define FF_TRIANGLE 0x59
  536. #define FF_SINE 0x5a
  537. #define FF_SAW_UP 0x5b
  538. #define FF_SAW_DOWN 0x5c
  539. #define FF_CUSTOM 0x5d
  540. /*
  541.  * Set ff device properties
  542.  */
  543. #define FF_GAIN 0x60
  544. #define FF_AUTOCENTER 0x61
  545. #define FF_MAX 0x7f
  546. #ifdef __KERNEL__
  547. /*
  548.  * In-kernel definitions.
  549.  */
  550. #include <linux/sched.h>
  551. #include <linux/devfs_fs_kernel.h>
  552. #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
  553. #define BIT(x) (1UL<<((x)%BITS_PER_LONG))
  554. #define LONG(x) ((x)/BITS_PER_LONG)
  555. struct input_dev {
  556. void *private;
  557. int number;
  558. char *name;
  559. unsigned short idbus;
  560. unsigned short idvendor;
  561. unsigned short idproduct;
  562. unsigned short idversion;
  563. unsigned long evbit[NBITS(EV_MAX)];
  564. unsigned long keybit[NBITS(KEY_MAX)];
  565. unsigned long relbit[NBITS(REL_MAX)];
  566. unsigned long absbit[NBITS(ABS_MAX)];
  567. unsigned long mscbit[NBITS(MSC_MAX)];
  568. unsigned long ledbit[NBITS(LED_MAX)];
  569. unsigned long sndbit[NBITS(SND_MAX)];
  570. unsigned long ffbit[NBITS(FF_MAX)];
  571. int ff_effects_max;
  572. unsigned int keycodemax;
  573. unsigned int keycodesize;
  574. void *keycode;
  575. unsigned int repeat_key;
  576. struct timer_list timer;
  577. int abs[ABS_MAX + 1];
  578. int rep[REP_MAX + 1];
  579. unsigned long key[NBITS(KEY_MAX)];
  580. unsigned long led[NBITS(LED_MAX)];
  581. unsigned long snd[NBITS(SND_MAX)];
  582. int absmax[ABS_MAX + 1];
  583. int absmin[ABS_MAX + 1];
  584. int absfuzz[ABS_MAX + 1];
  585. int absflat[ABS_MAX + 1];
  586. int (*open)(struct input_dev *dev);
  587. void (*close)(struct input_dev *dev);
  588. int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
  589. int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
  590. int (*erase_effect)(struct input_dev *dev, int effect_id);
  591. struct input_handle *handle;
  592. struct input_dev *next;
  593. };
  594. struct input_handler {
  595. void *private;
  596. void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
  597. struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
  598. void (*disconnect)(struct input_handle *handle);
  599. struct file_operations *fops;
  600. int minor;
  601. struct input_handle *handle;
  602. struct input_handler *next;
  603. };
  604. struct input_handle {
  605. void *private;
  606. int open;
  607. struct input_dev *dev;
  608. struct input_handler *handler;
  609. struct input_handle *dnext;
  610. struct input_handle *hnext;
  611. };
  612. void input_register_device(struct input_dev *);
  613. void input_unregister_device(struct input_dev *);
  614. void input_register_handler(struct input_handler *);
  615. void input_unregister_handler(struct input_handler *);
  616. int input_open_device(struct input_handle *);
  617. void input_close_device(struct input_handle *);
  618. devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
  619. void input_unregister_minor(devfs_handle_t handle);
  620. void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
  621. #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
  622. #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
  623. #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
  624. #endif
  625. #endif