input.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:16k
源码类别:

嵌入式Linux

开发平台:

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 BTN_MISC 0x100
  291. #define BTN_0 0x100
  292. #define BTN_1 0x101
  293. #define BTN_2 0x102
  294. #define BTN_3 0x103
  295. #define BTN_4 0x104
  296. #define BTN_5 0x105
  297. #define BTN_6 0x106
  298. #define BTN_7 0x107
  299. #define BTN_8 0x108
  300. #define BTN_9 0x109
  301. #define BTN_MOUSE 0x110
  302. #define BTN_LEFT 0x110
  303. #define BTN_RIGHT 0x111
  304. #define BTN_MIDDLE 0x112
  305. #define BTN_SIDE 0x113
  306. #define BTN_EXTRA 0x114
  307. #define BTN_FORWARD 0x115
  308. #define BTN_BACK 0x116
  309. #define BTN_JOYSTICK 0x120
  310. #define BTN_TRIGGER 0x120
  311. #define BTN_THUMB 0x121
  312. #define BTN_THUMB2 0x122
  313. #define BTN_TOP 0x123
  314. #define BTN_TOP2 0x124
  315. #define BTN_PINKIE 0x125
  316. #define BTN_BASE 0x126
  317. #define BTN_BASE2 0x127
  318. #define BTN_BASE3 0x128
  319. #define BTN_BASE4 0x129
  320. #define BTN_BASE5 0x12a
  321. #define BTN_BASE6 0x12b
  322. #define BTN_DEAD 0x12f
  323. #define BTN_GAMEPAD 0x130
  324. #define BTN_A 0x130
  325. #define BTN_B 0x131
  326. #define BTN_C 0x132
  327. #define BTN_X 0x133
  328. #define BTN_Y 0x134
  329. #define BTN_Z 0x135
  330. #define BTN_TL 0x136
  331. #define BTN_TR 0x137
  332. #define BTN_TL2 0x138
  333. #define BTN_TR2 0x139
  334. #define BTN_SELECT 0x13a
  335. #define BTN_START 0x13b
  336. #define BTN_MODE 0x13c
  337. #define BTN_THUMBL 0x13d
  338. #define BTN_THUMBR 0x13e
  339. #define BTN_DIGI 0x140
  340. #define BTN_TOOL_PEN 0x140
  341. #define BTN_TOOL_RUBBER 0x141
  342. #define BTN_TOOL_BRUSH 0x142
  343. #define BTN_TOOL_PENCIL 0x143
  344. #define BTN_TOOL_AIRBRUSH 0x144
  345. #define BTN_TOOL_FINGER 0x145
  346. #define BTN_TOOL_MOUSE 0x146
  347. #define BTN_TOOL_LENS 0x147
  348. #define BTN_TOUCH 0x14a
  349. #define BTN_STYLUS 0x14b
  350. #define BTN_STYLUS2 0x14c
  351. #define KEY_MAX 0x1ff
  352. /*
  353.  * Relative axes
  354.  */
  355. #define REL_X 0x00
  356. #define REL_Y 0x01
  357. #define REL_Z 0x02
  358. #define REL_HWHEEL 0x06
  359. #define REL_DIAL 0x07
  360. #define REL_WHEEL 0x08
  361. #define REL_MISC 0x09
  362. #define REL_MAX 0x0f
  363. /*
  364.  * Absolute axes
  365.  */
  366. #define ABS_X 0x00
  367. #define ABS_Y 0x01
  368. #define ABS_Z 0x02
  369. #define ABS_RX 0x03
  370. #define ABS_RY 0x04
  371. #define ABS_RZ 0x05
  372. #define ABS_THROTTLE 0x06
  373. #define ABS_RUDDER 0x07
  374. #define ABS_WHEEL 0x08
  375. #define ABS_GAS 0x09
  376. #define ABS_BRAKE 0x0a
  377. #define ABS_HAT0X 0x10
  378. #define ABS_HAT0Y 0x11
  379. #define ABS_HAT1X 0x12
  380. #define ABS_HAT1Y 0x13
  381. #define ABS_HAT2X 0x14
  382. #define ABS_HAT2Y 0x15
  383. #define ABS_HAT3X 0x16
  384. #define ABS_HAT3Y 0x17
  385. #define ABS_PRESSURE 0x18
  386. #define ABS_DISTANCE 0x19
  387. #define ABS_TILT_X 0x1a
  388. #define ABS_TILT_Y 0x1b
  389. #define ABS_MISC 0x1c
  390. #define ABS_MAX 0x1f
  391. /*
  392.  * Misc events
  393.  */
  394. #define MSC_SERIAL 0x00
  395. #define MSC_MAX 0x07
  396. /*
  397.  * LEDs
  398.  */
  399. #define LED_NUML 0x00
  400. #define LED_CAPSL 0x01
  401. #define LED_SCROLLL 0x02
  402. #define LED_COMPOSE 0x03
  403. #define LED_KANA 0x04
  404. #define LED_SLEEP 0x05
  405. #define LED_SUSPEND 0x06
  406. #define LED_MUTE 0x07
  407. #define LED_MISC 0x08
  408. #define LED_MAX 0x0f
  409. /*
  410.  * Autorepeat values
  411.  */
  412. #define REP_DELAY 0x00
  413. #define REP_PERIOD 0x01
  414. #define REP_MAX 0x01
  415. /*
  416.  * Sounds
  417.  */
  418. #define SND_CLICK 0x00
  419. #define SND_BELL 0x01
  420. #define SND_MAX 0x07
  421. /*
  422.  * IDs.
  423.  */
  424. #define ID_BUS 0
  425. #define ID_VENDOR 1
  426. #define ID_PRODUCT 2
  427. #define ID_VERSION 3
  428. #define BUS_PCI 0x01
  429. #define BUS_ISAPNP 0x02
  430. #define BUS_USB 0x03
  431. #define BUS_ISA 0x10
  432. #define BUS_I8042 0x11
  433. #define BUS_XTKBD 0x12
  434. #define BUS_RS232 0x13
  435. #define BUS_GAMEPORT 0x14
  436. #define BUS_PARPORT 0x15
  437. #define BUS_AMIGA 0x16
  438. #define BUS_ADB 0x17
  439. #define BUS_I2C 0x18
  440. /*
  441.  * Structures used in ioctls to upload effects to a device
  442.  * The first structures are not passed directly by using ioctls.
  443.  * They are sub-structures of the actually sent structure (called ff_effect)
  444.  */
  445. struct ff_replay {
  446. __u16 length; /* Duration of an effect */
  447. __u16 delay; /* Time to wait before to start playing an effect */
  448. };
  449. struct ff_trigger {
  450. __u16 button; /* Number of button triggering an effect */
  451. __u16 interval; /* Time to wait before an effect can be re-triggered */
  452. };
  453. struct ff_shape {
  454. __u16 attack_length; /* Duration of attack */
  455. __s16 attack_level; /* Level at beginning of attack */
  456. __u16 fade_length; /* Duration of fade */
  457. __s16 fade_level; /* Level at end of fade */
  458. };
  459. /* FF_CONSTANT */
  460. struct ff_constant_effect {
  461. __s16 level; /* Strength of effect */
  462. __u16 direction; /* Direction of effect (see periodic effects) */
  463. struct ff_shape shape;
  464. };
  465. /* FF_SPRING of FF_FRICTION */
  466. struct ff_interactive_effect {
  467. /* Axis along which effect must be created. If null, the field named direction
  468.  * is used
  469.  * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
  470.  */
  471. __u16 axis;
  472. __u16 direction;
  473. __s16 right_saturation; /* Max level when joystick is on the right */
  474. __s16 left_saturation;  /* Max level when joystick in on the left */
  475. __s16 right_coeff; /* Indicates how fast the force grows when the
  476.    joystick moves to the right */
  477. __s16 left_coeff; /* Same for left side */
  478. __u16 deadband; /* Size of area where no force is produced */
  479. __s16 center; /* Position of dead dead zone */
  480. };
  481. /* FF_PERIODIC */
  482. struct ff_periodic_effect {
  483. __u16 waveform; /* Kind of wave (sine, square...) */
  484. __u16 period;
  485. __s16 magnitude; /* Peak value */
  486. __s16 offset; /* Mean value of wave (roughly) */
  487. __u16 phase; /* 'Horizontal' shift */
  488. __u16 direction; /* Direction. 0 deg -> 0x0000
  489.      90 deg -> 0x4000 */
  490. struct ff_shape shape;
  491. };
  492. /*
  493.  * Structure sent through ioctl from the application to the driver
  494.  */
  495. struct ff_effect {
  496. __u16 type;
  497. /* Following field denotes the unique id assigned to an effect.
  498.  * It is set by the driver.
  499.  */
  500. __s16 id;
  501. struct ff_trigger trigger;
  502. struct ff_replay replay;
  503. union {
  504. struct ff_constant_effect constant;
  505. struct ff_periodic_effect periodic;
  506. struct ff_interactive_effect interactive;
  507. } u;
  508. };
  509. /*
  510.  * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
  511.  * access the bitmap.
  512.  */
  513. #define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
  514. #define FF_BTN_OFFSET 0x00
  515. /*
  516.  * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
  517.  */
  518. #define FF_ABS(x) ((x) + FF_ABS_OFFSET)
  519. #define FF_ABS_OFFSET 0x40
  520. /*
  521.  * Force feedback effect types
  522.  */
  523. #define FF_RUMBLE 0x50
  524. #define FF_PERIODIC 0x51
  525. #define FF_CONSTANT 0x52
  526. #define FF_SPRING 0x53
  527. #define FF_FRICTION 0x54
  528. /*
  529.  * Force feedback periodic effect types
  530.  */
  531. #define FF_SQUARE 0x58
  532. #define FF_TRIANGLE 0x59
  533. #define FF_SINE 0x5a
  534. #define FF_SAW_UP 0x5b
  535. #define FF_SAW_DOWN 0x5c
  536. #define FF_CUSTOM 0x5d
  537. /*
  538.  * Set ff device properties
  539.  */
  540. #define FF_GAIN 0x60
  541. #define FF_AUTOCENTER 0x61
  542. #define FF_MAX 0x7f
  543. #ifdef __KERNEL__
  544. /*
  545.  * In-kernel definitions.
  546.  */
  547. #include <linux/sched.h>
  548. #include <linux/devfs_fs_kernel.h>
  549. #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
  550. #define BIT(x) (1UL<<((x)%BITS_PER_LONG))
  551. #define LONG(x) ((x)/BITS_PER_LONG)
  552. struct input_dev {
  553. void *private;
  554. int number;
  555. char *name;
  556. unsigned short idbus;
  557. unsigned short idvendor;
  558. unsigned short idproduct;
  559. unsigned short idversion;
  560. unsigned long evbit[NBITS(EV_MAX)];
  561. unsigned long keybit[NBITS(KEY_MAX)];
  562. unsigned long relbit[NBITS(REL_MAX)];
  563. unsigned long absbit[NBITS(ABS_MAX)];
  564. unsigned long mscbit[NBITS(MSC_MAX)];
  565. unsigned long ledbit[NBITS(LED_MAX)];
  566. unsigned long sndbit[NBITS(SND_MAX)];
  567. unsigned long ffbit[NBITS(FF_MAX)];
  568. int ff_effects_max;
  569. unsigned int keycodemax;
  570. unsigned int keycodesize;
  571. void *keycode;
  572. unsigned int repeat_key;
  573. struct timer_list timer;
  574. int abs[ABS_MAX + 1];
  575. int rep[REP_MAX + 1];
  576. unsigned long key[NBITS(KEY_MAX)];
  577. unsigned long led[NBITS(LED_MAX)];
  578. unsigned long snd[NBITS(SND_MAX)];
  579. int absmax[ABS_MAX + 1];
  580. int absmin[ABS_MAX + 1];
  581. int absfuzz[ABS_MAX + 1];
  582. int absflat[ABS_MAX + 1];
  583. int (*open)(struct input_dev *dev);
  584. void (*close)(struct input_dev *dev);
  585. int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
  586. int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
  587. int (*erase_effect)(struct input_dev *dev, int effect_id);
  588. struct input_handle *handle;
  589. struct input_dev *next;
  590. };
  591. struct input_handler {
  592. void *private;
  593. void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
  594. struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
  595. void (*disconnect)(struct input_handle *handle);
  596. struct file_operations *fops;
  597. int minor;
  598. struct input_handle *handle;
  599. struct input_handler *next;
  600. };
  601. struct input_handle {
  602. void *private;
  603. int open;
  604. struct input_dev *dev;
  605. struct input_handler *handler;
  606. struct input_handle *dnext;
  607. struct input_handle *hnext;
  608. };
  609. void input_register_device(struct input_dev *);
  610. void input_unregister_device(struct input_dev *);
  611. void input_register_handler(struct input_handler *);
  612. void input_unregister_handler(struct input_handler *);
  613. int input_open_device(struct input_handle *);
  614. void input_close_device(struct input_handle *);
  615. devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
  616. void input_unregister_minor(devfs_handle_t handle);
  617. void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
  618. #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
  619. #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
  620. #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
  621. #endif
  622. #endif