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

Linux/Unix编程

开发平台:

Unix_Linux

  1.   Linux Input drivers v1.0
  2.        (c) 1999-2001 Vojtech Pavlik <vojtech@suse.cz>
  3.      Sponsored by SuSE
  4.     $Id: input.txt,v 1.5 2001/06/06 11:05:33 vojtech Exp $
  5. ----------------------------------------------------------------------------
  6. 0. Disclaimer
  7. ~~~~~~~~~~~~~
  8.   This program is free software; you can redistribute it and/or modify it
  9. under the terms of the GNU General Public License as published by the Free
  10. Software Foundation; either version 2 of the License, or (at your option)
  11. any later version.
  12.   This program is distributed in the hope that it will be useful, but
  13. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  14. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  15. more details.
  16.   You should have received a copy of the GNU General Public License along
  17. with this program; if not, write to the Free Software Foundation, Inc., 59
  18. Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19.   Should you need to contact me, the author, you can do so either by e-mail
  20. - mail your message to <vojtech@suse.cz>, or by paper mail: Vojtech Pavlik,
  21. Simunkova 1594, Prague 8, 182 00 Czech Republic
  22.   For your convenience, the GNU General Public License version 2 is included
  23. in the package: See the file COPYING.
  24. 1. Introduction
  25. ~~~~~~~~~~~~~~~
  26.   This is a collection of drivers that is designed to support all input
  27. devices under Linux. However, in the current kernels, although it's
  28. possibilities are much bigger, it's limited to USB devices only. This is
  29. also why it resides in the drivers/usb subdirectory.
  30.   The center of the input drivers is the input.o module, which must be
  31. loaded before any other of the input modules - it serves as a way of
  32. communication between two groups of modules:
  33. 1.1 Device drivers
  34. ~~~~~~~~~~~~~~~~~~
  35.   These modules talk to the hardware (for example via USB), and provide
  36. events (keystrokes, mouse movements) to the input.o module.
  37. 1.2 Event handlers
  38. ~~~~~~~~~~~~~~~~~~
  39.   These modules get events from input.o and pass them where needed via
  40. various interfaces - keystrokes to the kernel, mouse movements via a
  41. simulated PS/2 interface to GPM and X and so on.
  42. 2. Simple Usage
  43. ~~~~~~~~~~~~~~~
  44.   For the most usual configuration, with one USB mouse and one USB keyboard,
  45. you'll have to load the following modules (or have them built in to the
  46. kernel):
  47. input.o
  48. mousedev.o
  49. keybdev.o
  50. usbcore.o
  51. usb-[uo]hci.o
  52. hid.o
  53.   After this, the USB keyboard will work straight away, and the USB mouse
  54. will be available as a character device on major 13, minor 63:
  55. crw-r--r--   1 root     root      13,  63 Mar 28 22:45 mice
  56.   This device, has to be created, unless you use devfs, in which case it's
  57. created automatically. The commands to do that are:
  58. cd /dev
  59. mkdir input
  60. mknod input/mice c 13 63
  61.   After that you have to point GPM (the textmode mouse cut&paste tool) and
  62. XFree to this device to use it - GPM should be called like:
  63. gpm -t ps2 -m /dev/input/mice
  64.   And in X:
  65. Section "Pointer"
  66.     Protocol    "ImPS/2"
  67.     Device      "/dev/input/mice"
  68.     ZAxisMapping 4 5
  69. EndSection
  70.   When you do all of the above, you can use your USB mouse and keyboard.
  71. 3. Detailed Description
  72. ~~~~~~~~~~~~~~~~~~~~~~~
  73. 3.1 Device drivers
  74. ~~~~~~~~~~~~~~~~~~
  75.   Device drivers are the modules that generate events. The events are
  76. however not useful without being handled, so you also will need to use some
  77. of the modules from section 3.2.
  78. 3.1.1 hid.c
  79. ~~~~~~~~~~~
  80.   Hid.c is the largest and most complex driver of the whole suite. It
  81. handles all HID devices, and because there is a very wide variety of them,
  82. and because the USB HID specification isn't simple, it needs to be this big.
  83.   Currently, it handles USB mice, joysticks, gamepads, steering wheels
  84. keyboards, trackballs and digitizers.
  85.  However, USB uses HID also for monitor controls, speaker controls, UPSs,
  86. LCDs and many other purposes.
  87.  The monitor and speaker controls should be easy to add to the hid/input
  88. interface, but for the UPSs and LCDs it doesn't make much sense. For this,
  89. the hiddev interface was designed. See Documentation/usb/hiddev.txt
  90. for more information about it.
  91.   The usage of the hid.o module is very simple, it takes no parameters,
  92. detects everything automatically and when a HID device is inserted, it
  93. detects it appropriately.
  94.   However, because the devices vary wildly, you might happen to have a
  95. device that doesn't work well. In that case #define DEBUG at the beginning
  96. of hid.c and send me the syslog traces.
  97. 3.1.2 usbmouse.c
  98. ~~~~~~~~~~~~~~~~
  99.   For embedded systems, for mice with broken HID descriptors and just any
  100. other use when the big hid.c wouldn't be a good choice, there is the
  101. usbmouse.c driver. It handles USB mice only. It uses a simpler HIDBP
  102. protocol. This also means the mice must support this simpler protocol. Not
  103. all do. If you don't have any strong reason to use this module, use hid.c
  104. instead.
  105. 3.1.3 usbkbd.c
  106. ~~~~~~~~~~~~~~
  107.   Much like usbmouse.c, this module talks to keyboards with a simpplified
  108. HIDBP protocol. It's smaller, but doesn't support any extra special keys.
  109. Use hid.c instead if there isn't any special reason to use this.
  110. 3.1.4 wacom.c
  111. ~~~~~~~~~~~~~
  112.   This is a driver for Wacom Graphire and Intuos tablets. Not for Wacom
  113. PenPartner, that one is handled by the HID driver. Although the Intuos and
  114. Graphire tablets claim that they are HID tablets as well, they are not and
  115. thus need this specific driver.
  116. 3.1.5 iforce.c
  117. ~~~~~~~~~~~~~~~
  118.   A driver for I-Force joysticks and wheels, both over USB and RS232. 
  119. It includes ForceFeedback support now, even though Immersion Corp. considers
  120. the protocol a trade secret and won't disclose a word about it.
  121. 3.2 Event handlers
  122. ~~~~~~~~~~~~~~~~~~
  123.   Event handlers distrubite the events from the devices to userland and
  124. kernel, as needed.
  125. 3.2.1 keybdev.c
  126. ~~~~~~~~~~~~~~~
  127.   Keybdev is currently a rather ugly hack that translates the input events
  128. into architecture-specific keyboard raw mode (Xlated AT Set2 on x86), and
  129. passes them into the handle_scancode function of the keyboard.c module. This
  130. works well enough on all architectures that keybdev can generate rawmode on,
  131. other architectures can be added to it.
  132.   The right way would be to pass the events to keyboard.c directly, best if
  133. keyboard.c would itself be an event handler. This is done in the input
  134. patch, available on the webpage mentioned below.
  135. 3.2.2 mousedev.c
  136. ~~~~~~~~~~~~~~~~
  137.   Mousedev is also a hack to make programs that use mouse input work. It
  138. takes events from either mice or digitizers/tablets and makes a PS/2-style
  139. (a la /dev/psaux) mouse device available to the userland. Ideally, the
  140. programs could use a more reasonable interface, for example evdev.c
  141.   Mousedev devices in /dev/input (as shown above) are:
  142. crw-r--r--   1 root     root      13,  32 Mar 28 22:45 mouse0
  143. crw-r--r--   1 root     root      13,  33 Mar 29 00:41 mouse1
  144. crw-r--r--   1 root     root      13,  34 Mar 29 00:41 mouse2
  145. crw-r--r--   1 root     root      13,  35 Apr  1 10:50 mouse3
  146. ...
  147. ...
  148. crw-r--r--   1 root     root      13,  62 Apr  1 10:50 mouse30
  149. crw-r--r--   1 root     root      13,  63 Apr  1 10:50 mice
  150. Each 'mouse' device is assigned to a single mouse or digitizer, except the last
  151. one - 'mice'. This single character device is shared by all mice and
  152. digitizers, and even if none are connected, the device is present.  This is
  153. useful for hotplugging USB mice, so that programs can open the device even when
  154. no mice are present.
  155.   CONFIG_INPUT_MOUSEDEV_SCREEN_[XY] in the kernel configuration are the size
  156. of your screen (in pixels) in XFree86. This is needed if you want to use
  157. your digitizer in X, because it's movement is sent to X via a virtual PS/2
  158. mouse and thus needs to be scaled accordingly. These values won't be used if
  159. you use a mouse only.
  160.   Mousedev will generate either PS/2, ImPS/2 (Microsoft IntelliMouse) or
  161. ExplorerPS/2 (IntelliMouse Explorer) protocols, depending on what the program
  162. reading the data wishes. You can set GPM and X to any of these. You'll need
  163. ImPS/2 if you want to make use of a wheel on a USB mouse and ExplorerPS/2 if you
  164. want to use extra (up to 5) buttons. 
  165. 3.2.3 joydev.c
  166. ~~~~~~~~~~~~~~
  167.   Joydev implements v0.x and v1.x Linux joystick api, much like
  168. drivers/char/joystick/joystick.c used to in earlier versions. See
  169. joystick-api.txt in the Documentation subdirectory for details.  As soon as
  170. any joystick is connected, it can be accessed in /dev/input on:
  171. crw-r--r--   1 root     root      13,   0 Apr  1 10:50 js0
  172. crw-r--r--   1 root     root      13,   1 Apr  1 10:50 js1
  173. crw-r--r--   1 root     root      13,   2 Apr  1 10:50 js2
  174. crw-r--r--   1 root     root      13,   3 Apr  1 10:50 js3
  175. ...
  176. And so on up to js31.
  177. 3.2.4 evdev.c
  178. ~~~~~~~~~~~~~
  179.   Evdev is the generic input event interface. It passes the events generated
  180. in the kernel straight to the program, with timestamps. The API is still
  181. evolving, but should be useable now. It's described in section 5.
  182.   This should be the way for GPM and X to get keyboard and mouse mouse
  183. events. It allows for multihead in X without any specific multihead kernel
  184. support. The event codes are the same on all architectures and are hardware
  185. independent.
  186.   The devices are in /dev/input:
  187. crw-r--r--   1 root     root      13,  64 Apr  1 10:49 event0
  188. crw-r--r--   1 root     root      13,  65 Apr  1 10:50 event1
  189. crw-r--r--   1 root     root      13,  66 Apr  1 10:50 event2
  190. crw-r--r--   1 root     root      13,  67 Apr  1 10:50 event3
  191. ...
  192. 3. Contacts
  193. ~~~~~~~~~~~
  194.   This effort has it's home page at:
  195. http://www.suse.cz/development/input/
  196. You'll find both the latest HID driver and the complete Input driver there
  197. as well as information how to access the CVS repository for latest revisions
  198. of the drivers.
  199.   There is also a mailing list for this:
  200. majordomo@atrey.karlin.mff.cuni.cz
  201. Send "subscribe linux-input" to subscribe to it.
  202. 4. Verifying if it works
  203. ~~~~~~~~~~~~~~~~~~~~~~~~
  204.   Typing a couple keys on the keyboard should be enough to check that a USB
  205. keyboard works and is correctly connected to the kernel keyboard driver.
  206.   Doing a cat /dev/input/mouse0 (c, 13, 32) will verify that a mouse is also
  207. emulated, characters should appear if you move it.
  208.   You can test the joystick emulation with the 'jstest' utility, available
  209. in the joystick package (see Documentation/joystick.txt).
  210.   You can test the event devics with the 'evtest' utitily available on the
  211. input driver homepage (see the URL above).
  212. 5. Event interface
  213. ~~~~~~~~~~~~~~~~~~
  214.   Should you want to add event device support into any application (X, gpm,
  215. svgalib ...) I <vojtech@suse.cz> will be happy to provide you any help I
  216. can. Here goes a description of the current state of things, which is going
  217. to be extended, but not changed incompatibly as time goes:
  218.   You can use blocking and nonblocking reads, also select() on the
  219. /dev/input/eventX devices, and you'll always get a whole number of input
  220. events on a read. Their layout is:
  221. struct input_event {
  222. struct timeval time;
  223. unsigned short type;
  224. unsigned short code;
  225. unsigned int value;
  226. };
  227.   'time' is the timestamp, it returns the time at which the event happened.
  228. Type is for example EV_REL for relative momement, REL_KEY for a keypress or
  229. release. More types are defined in include/linux/input.h.
  230.   'code' is event code, for example REL_X or KEY_BACKSPACE, again a complete
  231. list is in include/linux/input.h.
  232.   'value' is the value the event carries. Either a relative change for
  233. EV_REL, absolute new value for EV_ABS (joysticks ...), or 0 for EV_KEY for
  234. release, 1 for keypress and 2 for autorepeat.