| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							
- There are two implementations of HIDAPI for Linux. One (hid.c) uses the
 
- Linux hidraw driver, and the other (hid-libusb.c) uses libusb. Which one you
 
- use depends on your application. Complete functionality of the hidraw
 
- version depends on patches to the Linux kernel which are not currently in
 
- the mainline. These patches have to do with sending and receiving feature
 
- reports. The libusb implementation uses libusb to talk directly to the
 
- device, bypassing any Linux HID driver. The disadvantage of the libusb
 
- version is that it will only work with USB devices, while the hidraw
 
- implementation will work with Bluetooth devices as well.
 
- To use HIDAPI, simply drop either hid.c or hid-libusb.c into your
 
- application and build using the build parameters in the Makefile.
 
- By default, on Linux, the Makefile in this directory is configured to use
 
- the libusb implementation. To switch to the hidraw implementation, simply
 
- change hid-libusb.c to hid.c in the Makefile.
 
- Libusb Implementation notes
 
- ----------------------------
 
- For the libusb implementation, libusb-1.0 must be installed. Libusb 1.0 is
 
- different than the legacy libusb 0.1 which is installed on many systems.  To
 
- install libusb-1.0 on Ubuntu and other Debian-based systems, run:
 
- 	sudo apt-get install libusb-1.0-0-dev
 
- Hidraw Implementation notes
 
- ----------------------------
 
- For the hidraw implementation, libudev headers and libraries are required to
 
- build hidapi programs.  To install libudev libraries on Ubuntu,
 
- and other Debian-based systems, run:
 
- 	sudo apt-get install libudev-dev
 
- On Redhat-based systems, run the following as root:
 
- 	yum install libudev-devel
 
- Unfortunately, the hidraw driver, which the linux version of hidapi is based
 
- on, contains bugs in kernel versions < 2.6.36, which the client application
 
- should be aware of.
 
- Bugs (hidraw implementation only):
 
- -----------------------------------
 
- On Kernel versions < 2.6.34, if your device uses numbered reports, an extra
 
- byte will be returned at the beginning of all reports returned from read()
 
- for hidraw devices. This is worked around in the libary. No action should be
 
- necessary in the client library.
 
- On Kernel versions < 2.6.35, reports will only be sent using a Set_Report
 
- transfer on the CONTROL endpoint. No data will ever be sent on an Interrupt
 
- Out endpoint if one exists. This is fixed in 2.6.35. In 2.6.35, OUTPUT
 
- reports will be sent to the device on the first INTERRUPT OUT endpoint if it
 
- exists; If it does not exist, OUTPUT reports will be sent on the CONTROL
 
- endpoint.
 
- On Kernel versions < 2.6.36, add an extra byte containing the report number
 
- to sent reports if numbered reports are used, and the device does not
 
- contain an INTERRPUT OUT endpoint for OUTPUT transfers.  For example, if
 
- your device uses numbered reports and wants to send {0x2 0xff 0xff 0xff} to
 
- the device (0x2 is the report number), you must send {0x2 0x2 0xff 0xff
 
- 0xff}. If your device has the optional Interrupt OUT endpoint, this does not
 
- apply (but really on 2.6.35 only, because 2.6.34 won't use the interrupt
 
- out endpoint).
 
 
  |