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

嵌入式Linux

开发平台:

Unix_Linux

  1. README for Linux device driver for the IBM "C-It" USB video camera
  2. INTRODUCTION:
  3. This driver does not use all features known to exist in
  4. the IBM camera. However most of needed features work well.
  5. This driver was developed using logs of observed USB traffic
  6. which was produced by standard Windows driver (c-it98.sys).
  7. I did not have data sheets from Xirlink.
  8. Video formats:
  9.       128x96  [model 1]
  10.       176x144
  11.       320x240 [model 2]
  12.       352x240 [model 2]
  13.       352x288
  14. Frame rate: 3 - 30 frames per second (FPS)
  15. External interface: USB
  16. Internal interface: Video For Linux (V4L)
  17. Supported controls:
  18. - by V4L: Contrast,  Brightness, Color, Hue
  19. - by driver options: frame rate, lighting conditions, video format,
  20.                      default picture settings, sharpness.
  21. SUPPORTED CAMERAS:
  22. IBM "C-It" camera, also known as "Xirlink PC Camera"
  23. The device uses proprietary ASIC (and compression method);
  24. it is manufactured by Xirlink. See http://www.xirlink.com/
  25. http://www.ibmpccamera.com or http://www.c-itnow.com/ for
  26. details and pictures.
  27. The Linux driver was developed with camera with following
  28. model number (or FCC ID): KSX-XVP510. This camera has three
  29. interfaces, each with one endpoint (control, iso, iso). This
  30. type of cameras is referred to as "model 1". These cameras are
  31. no longer manufactured.
  32. Xirlink now manufactures new cameras which are somewhat different.
  33. In particular, following models [FCC ID] belong to that category:
  34. XVP300 [KSX-X9903]
  35. XVP600 [KSX-X9902]
  36. XVP610 [KSX-X9902]
  37. (see http://www.xirlink.com/ibmpccamera/ for updates, they refer
  38. to these new cameras by Windows driver dated 12-27-99, v3005 BETA)
  39. These cameras have two interfaces, one endpoint in each (iso, bulk).
  40. Such type of cameras is referred to as "model 2". They are supported
  41. (with exception of 352x288 native mode).
  42. Quirks of Model 2 cameras:
  43. -------------------------
  44. Model 2 does not have hardware contrast control. Corresponding V4L
  45. control is not used at the moment. It may be possible to implement
  46. contrast control in software, at cost of extra processor cycles.
  47. This driver provides 352x288 mode by switching the camera into
  48. quasi-352x288 RGB mode (800 Kbits per frame) essentially limiting
  49. this mode to 10 frames per second or less, in ideal conditions on
  50. the bus (USB is shared, after all). The frame rate
  51. has to be programmed very conservatively. Additional concern is that
  52. frame rate depends on brightness setting; therefore the picture can
  53. be good at one brightness and broken at another! I did not want to fix
  54. the frame rate at slowest setting, but I had to move it pretty much down
  55. the scale (so that framerate option barely matters). I also noticed that
  56. camera after first powering up produces frames slightly faster than during
  57. consecutive uses. All this means that if you use videosize=2 (which is
  58. default), be warned - you may encounter broken picture on first connect;
  59. try to adjust brightness - brighter image is slower, so USB will be able
  60. to send all data. However if you regularly use Model 2 cameras you may
  61. prefer videosize=1 which makes perfectly good I420, with no scaling and
  62. lesser demands on USB (300 Kbits per second, or 26 frames per second).
  63. The camera that I had also has a hardware quirk: if disconnected,
  64. it needs few minutes to "relax" before it can be plugged in again
  65. (poorly designed USB processor reset circuit?)
  66. Model 2 camera can be programmed for very high sensitivity (even starlight
  67. may be enough), this makes it convenient for tinkering with. The driver
  68. code has enough comments to help a programmer to tweak the camera
  69. as s/he feels necessary.
  70. WHAT YOU NEED:
  71. - A supported IBM PC (C-it) camera (model 1 or 2)
  72. - A Linux box with USB support (2.3/2.4; 2.2 w/backport may work)
  73. - A Video4Linux compatible frame grabber program such as xawtv.
  74.   
  75. HOW TO COMPILE THE DRIVER:
  76. You need to compile the driver only if you are a developer
  77. or if you want to make changes to the code. Most distributions
  78. precompile all modules, so you can go directly to the next
  79. section "HOW TO USE THE DRIVER".
  80. The driver consists of two files in usb/ directory:
  81. ibmcam.c and ibmcam.h These files are included into the
  82. Linux kernel build process if you configure the kernel
  83. for CONFIG_USB_IBMCAM. Run "make xconfig" and in USB section
  84. you will find the IBM camera driver. Select it, save the
  85. configuration and recompile.
  86. HOW TO USE THE DRIVER:
  87. I recommend to compile driver as a module. This gives you an
  88. easier access to its configuration. The camera has many more
  89. settings than V4L can operate, so some settings are done using
  90. module options.
  91. Typically module is installed with command 'modprobe', like this:
  92. # modprobe ibmcam framerate=1
  93. Alternatively you can use 'insmod' in similar fashion:
  94. # insmod /lib/modules/2.x.y/usb/ibmcam.o framerate=1
  95. Module can be inserted with camera connected or disconnected.
  96. The driver can have options, though some defaults are provided.
  97. Driver options: (* indicates that option is model-dependent)
  98. Name            Type            Range [default] Example
  99. --------------  --------------  --------------  ------------------
  100. debug           Integer         0-9 [0]         debug=1
  101. flags           Integer         0-0xFF [0]      flags=0x0d
  102. framerate       Integer         0-6 [2]         framerate=1
  103. hue_correction  Integer         0-255 [128]     hue_correction=115
  104. init_brightness Integer         0-255 [128]     init_brightness=100
  105. init_contrast   Integer         0-255 [192]     init_contrast=200
  106. init_color      Integer         0-255 [128]     init_color=130
  107. init_hue        Integer         0-255 [128]     init_hue=115
  108. lighting        Integer         0-2* [1]        lighting=2
  109. sharpness       Integer         0-6* [4]        sharpness=3
  110. videosize       Integer         0-2* [2]        videosize=1
  111. Options for Model 2 only:
  112. Name            Type            Range [default] Example
  113. --------------  --------------  --------------  ------------------
  114. init_model2_rg  Integer         0..255 [0x70]   init_model2_rg=128
  115. init_model2_rg2 Integer         0..255 [0x2f]   init_model2_rg2=50
  116. init_model2_sat Integer         0..255 [0x34]   init_model2_sat=65
  117. init_model2_yb  Integer         0..255 [0xa0]   init_model2_yb=200
  118. debug           You don't need this option unless you are a developer.
  119.                 If you are a developer then you will see in the code
  120.                 what values do what. 0=off.
  121. flags           This is a bit mask, and you can combine any number of
  122.                 bits to produce what you want. Usually you don't want
  123.                 any of extra features this option provides:
  124.                 FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
  125.                                            VIDIOCSYNC ioctls without failing.
  126.                                            Will work with xawtv, will not
  127.                                            with xrealproducer. Default is
  128.                                            not set.
  129.                 FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
  130.                 FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
  131.                                            magic meaning to developers.
  132.                 FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
  133.                                            useful only for debugging.
  134.                 FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
  135.                 FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
  136.                                            it was received from the camera.
  137.                                            Default (not set) is to mix the
  138.                                            preceding frame in to compensate
  139.                                            for occasional loss of Isoc data
  140.                                            on high frame rates.
  141.                 FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
  142.                                            prior to use; relevant only if
  143.                                            FLAGS_SEPARATE_FRAMES is set.
  144.                                            Default is not to clean frames,
  145.                                            this is a little faster but may
  146.                                            produce flicker if frame rate is
  147.                                            too high and Isoc data gets lost.
  148. framerate       This setting controls frame rate of the camera. This is
  149.                 an approximate setting (in terms of "worst" ... "best")
  150.                 because camera changes frame rate depending on amount
  151.                 of light available. Setting 0 is slowest, 6 is fastest.
  152.                 Beware - fast settings are very demanding and may not
  153.                 work well with all video sizes. Be conservative.
  154. hue_correction  This highly optional setting allows to adjust the
  155.                 hue of the image in a way slightly different from
  156.                 what usual "hue" control does. Both controls affect
  157.                 YUV colorspace: regular "hue" control adjusts only
  158.                 U component, and this "hue_correction" option similarly
  159.                 adjusts only V component. However usually it is enough
  160.                 to tweak only U or V to compensate for colored light or
  161.                 color temperature; this option simply allows more
  162.                 complicated correction when and if it is necessary.
  163. init_brightness These settings specify _initial_ values which will be
  164. init_contrast   used to set up the camera. If your V4L application has
  165. init_color      its own controls to adjust the picture then these
  166. init_hue        controls will be used too. These options allow you to
  167.                 preconfigure the camera when it gets connected, before
  168.                 any V4L application connects to it. Good for webcams.
  169. init_model2_rg  These initial settings alter color balance of the
  170. init_model2_rg2 camera on hardware level. All four settings may be used
  171. init_model2_sat to tune the camera to specific lighting conditions. These
  172. init_model2_yb  settings only apply to Model 2 cameras.
  173. lighting        This option selects one of three hardware-defined
  174.                 photosensitivity settings of the camera. 0=bright light,
  175.                 1=Medium (default), 2=Low light. This setting affects
  176.                 frame rate: the dimmer the lighting the lower the frame
  177.                 rate (because longer exposition time is needed). The
  178.                 Model 2 cameras allow values more than 2 for this option,
  179.                 thus enabling extremely high sensitivity at cost of frame
  180.                 rate, color saturation and imaging sensor noise.
  181. sharpness       This option controls smoothing (noise reduction)
  182.                 made by camera. Setting 0 is most smooth, setting 6
  183.                 is most sharp. Be aware that CMOS sensor used in the
  184.                 camera is pretty noisy, so if you choose 6 you will
  185.                 be greeted with "snowy" image. Default is 4. Model 2
  186.                 cameras do not support this feature.
  187. videosize       This setting chooses one if three image sizes that are
  188.                 supported by this driver. Camera supports more, but
  189.                 it's difficult to reverse-engineer all formats.
  190.                 Following video sizes are supported:
  191.                 videosize=0     128x96  (Model 1 only)
  192.                 videosize=1     176x144
  193.                 videosize=2     352x288
  194.                 videosize=3     320x240 (Model 2 only)
  195.                 videosize=4     352x240 (Model 2 only)
  196.                 The last one (352x288) is the native size of the sensor
  197.                 array, so it's the best resolution camera (Model 1) can
  198.                 yield. The best resolution of Model 2 is 176x144, and
  199.                 larger images are produced by stretching the bitmap.
  200.                 Choose the image size you need. The smaller image can
  201.                 support faster frame rate. Default is 352x288.
  202. WHAT NEEDS TO BE DONE:
  203. - The box freezes if camera is unplugged after being used (OHCI).
  204.   Workaround: remove usb-ohci module first.
  205. - On occasion camera (model 1) does not start properly (xawtv reports
  206.   errors), or camera produces negative image (funny colors.)
  207.   Workaround: reload the driver module. Reason: [1].
  208. - The button on the camera is not used. I don't know how to get to it.
  209.   I know now how to read button on Model 2, but what to do with it?
  210. [1]
  211. - Camera reports its status back to the driver; however I don't know
  212.   what returned data means. If camera fails at some initialization
  213.   stage then something should be done, and I don't do that because
  214.   I don't even know that some command failed. This is mostly Model 1
  215.   concern because Model 2 uses different commands which do not return
  216.   status (and seem to complete successfully every time).
  217. VIDEO SIZE AND IMAGE SIZE
  218. Camera produces picture X by Y pixels. This is camera-specific and can be
  219. altered by programming the camera accordingly. This image is placed onto
  220. larger (or equal) area W by H, this is V4L image. At this time the driver
  221. uses V4L image size (W by H) 352x288 pixels because many programs (such
  222. as xawtv) expect quite specific sizes and don't want to deal with arbitrary,
  223. camera-specific sizes. However this approach "hides" real image size, and
  224. application always sees the camera as producing only 352x288 image. It is
  225. possible to change the V4L image size to 128x96, and then if camera is
  226. switched to 128x96 mode then xawtv will correctly accept this image size. But
  227. many other popular sizes (such as 176x144) will not be welcomed. This is the
  228. reason why all camera images are at this time placed onto 352x288 "canvas",
  229. and size of that canvas (V4L) is reported to applications. It will be easy
  230. to add options to control the canvas size, but it will be application-
  231. specific because not all applications are ready to work with variety of
  232. camera-specific sizes.
  233. CREDITS:
  234. The code is based in no small part on the CPiA driver by Johannes Erdfelt,
  235. Randy Dunlap, and others. Big thanks to them for their pioneering work on that
  236. and the USB stack.