|          HIDAPI library for Windows, Linux, FreeBSD and Mac OS X | 
 |         ========================================================= | 
 |  | 
 | About | 
 | ====== | 
 |  | 
 | HIDAPI is a multi-platform library which allows an application to interface | 
 | with USB and Bluetooth HID-Class devices on Windows, Linux, FreeBSD, and Mac | 
 | OS X.  HIDAPI can be either built as a shared library (.so or .dll) or | 
 | can be embedded directly into a target application by adding a single source | 
 | file (per platform) and a single header. | 
 |  | 
 | HIDAPI has four back-ends: | 
 | 	* Windows (using hid.dll) | 
 | 	* Linux/hidraw (using the Kernel's hidraw driver) | 
 | 	* Linux/libusb (using libusb-1.0) | 
 | 	* FreeBSD (using libusb-1.0) | 
 | 	* Mac (using IOHidManager) | 
 |  | 
 | On Linux, either the hidraw or the libusb back-end can be used. There are | 
 | tradeoffs, and the functionality supported is slightly different. | 
 |  | 
 | Linux/hidraw (linux/hid.c): | 
 | This back-end uses the hidraw interface in the Linux kernel.  While this | 
 | back-end will support both USB and Bluetooth, it has some limitations on | 
 | kernels prior to 2.6.39, including the inability to send or receive feature | 
 | reports.  In addition, it will only communicate with devices which have | 
 | hidraw nodes associated with them.  Keyboards, mice, and some other devices | 
 | which are blacklisted from having hidraw nodes will not work. Fortunately, | 
 | for nearly all the uses of hidraw, this is not a problem. | 
 |  | 
 | Linux/FreeBSD/libusb (libusb/hid.c): | 
 | This back-end uses libusb-1.0 to communicate directly to a USB device. This | 
 | back-end will of course not work with Bluetooth devices. | 
 |  | 
 | HIDAPI also comes with a Test GUI. The Test GUI is cross-platform and uses | 
 | Fox Toolkit (http://www.fox-toolkit.org).  It will build on every platform | 
 | which HIDAPI supports.  Since it relies on a 3rd party library, building it | 
 | is optional but recommended because it is so useful when debugging hardware. | 
 |  | 
 | What Does the API Look Like? | 
 | ============================= | 
 | The API provides the the most commonly used HID functions including sending | 
 | and receiving of input, output, and feature reports.  The sample program, | 
 | which communicates with a heavily hacked up version of the Microchip USB | 
 | Generic HID sample looks like this (with error checking removed for | 
 | simplicity): | 
 |  | 
 | #ifdef WIN32 | 
 | #include <windows.h> | 
 | #endif | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include "hidapi.h" | 
 |  | 
 | #define MAX_STR 255 | 
 |  | 
 | int main(int argc, char* argv[]) | 
 | { | 
 | 	int res; | 
 | 	unsigned char buf[65]; | 
 | 	wchar_t wstr[MAX_STR]; | 
 | 	hid_device *handle; | 
 | 	int i; | 
 |  | 
 | 	// Initialize the hidapi library | 
 | 	res = hid_init(); | 
 |  | 
 | 	// Open the device using the VID, PID, | 
 | 	// and optionally the Serial number. | 
 | 	handle = hid_open(0x4d8, 0x3f, NULL); | 
 |  | 
 | 	// Read the Manufacturer String | 
 | 	res = hid_get_manufacturer_string(handle, wstr, MAX_STR); | 
 | 	wprintf(L"Manufacturer String: %s\n", wstr); | 
 |  | 
 | 	// Read the Product String | 
 | 	res = hid_get_product_string(handle, wstr, MAX_STR); | 
 | 	wprintf(L"Product String: %s\n", wstr); | 
 |  | 
 | 	// Read the Serial Number String | 
 | 	res = hid_get_serial_number_string(handle, wstr, MAX_STR); | 
 | 	wprintf(L"Serial Number String: (%d) %s\n", wstr[0], wstr); | 
 |  | 
 | 	// Read Indexed String 1 | 
 | 	res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); | 
 | 	wprintf(L"Indexed String 1: %s\n", wstr); | 
 |  | 
 | 	// Toggle LED (cmd 0x80). The first byte is the report number (0x0). | 
 | 	buf[0] = 0x0; | 
 | 	buf[1] = 0x80; | 
 | 	res = hid_write(handle, buf, 65); | 
 |  | 
 | 	// Request state (cmd 0x81). The first byte is the report number (0x0). | 
 | 	buf[0] = 0x0; | 
 | 	buf[1] = 0x81; | 
 | 	res = hid_write(handle, buf, 65); | 
 |  | 
 | 	// Read requested state | 
 | 	res = hid_read(handle, buf, 65); | 
 |  | 
 | 	// Print out the returned buffer. | 
 | 	for (i = 0; i < 4; i++) | 
 | 		printf("buf[%d]: %d\n", i, buf[i]); | 
 |  | 
 | 	// Finalize the hidapi library | 
 | 	res = hid_exit(); | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | If you have your own simple test programs which communicate with standard | 
 | hardware development boards (such as those from Microchip, TI, Atmel, | 
 | FreeScale and others), please consider sending me something like the above | 
 | for inclusion into the HIDAPI source.  This will help others who have the | 
 | same hardware as you do. | 
 |  | 
 | License | 
 | ======== | 
 | HIDAPI may be used by one of three licenses as outlined in LICENSE.txt. | 
 |  | 
 | Download | 
 | ========= | 
 | HIDAPI can be downloaded from github | 
 | 	git clone git://github.com/libusb/hidapi.git | 
 |  | 
 | Build Instructions | 
 | =================== | 
 |  | 
 | This section is long. Don't be put off by this. It's not long because it's | 
 | complicated to build HIDAPI; it's quite the opposite.  This section is long | 
 | because of the flexibility of HIDAPI and the large number of ways in which | 
 | it can be built and used.  You will likely pick a single build method. | 
 |  | 
 | HIDAPI can be built in several different ways. If you elect to build a | 
 | shared library, you will need to build it from the HIDAPI source | 
 | distribution.  If you choose instead to embed HIDAPI directly into your | 
 | application, you can skip the building and look at the provided platform | 
 | Makefiles for guidance.  These platform Makefiles are located in linux/ | 
 | libusb/ mac/ and windows/ and are called Makefile-manual.  In addition, | 
 | Visual Studio projects are provided.  Even if you're going to embed HIDAPI | 
 | into your project, it is still beneficial to build the example programs. | 
 |  | 
 |  | 
 | Prerequisites: | 
 | --------------- | 
 |  | 
 | 	Linux: | 
 | 	------- | 
 | 	On Linux, you will need to install development packages for libudev, | 
 | 	libusb and optionally Fox-toolkit (for the test GUI). On | 
 | 	Debian/Ubuntu systems these can be installed by running: | 
 | 	    sudo apt-get install libudev-dev libusb-1.0-0-dev libfox-1.6-dev | 
 |  | 
 | 	If you downloaded the source directly from the git repository (using | 
 | 	git clone), you'll need Autotools: | 
 | 	    sudo apt-get install autotools-dev autoconf automake libtool | 
 |  | 
 | 	FreeBSD: | 
 | 	--------- | 
 | 	On FreeBSD you will need to install GNU make, libiconv, and | 
 | 	optionally Fox-Toolkit (for the test GUI). This is done by running | 
 | 	the following: | 
 | 	    pkg_add -r gmake libiconv fox16 | 
 |  | 
 | 	If you downloaded the source directly from the git repository (using | 
 | 	git clone), you'll need Autotools: | 
 | 	    pkg_add -r autotools | 
 |  | 
 | 	Mac: | 
 | 	----- | 
 | 	On Mac, you will need to install Fox-Toolkit if you wish to build | 
 | 	the Test GUI. There are two ways to do this, and each has a slight | 
 | 	complication. Which method you use depends on your use case. | 
 |  | 
 | 	If you wish to build the Test GUI just for your own testing on your | 
 | 	own computer, then the easiest method is to install Fox-Toolkit | 
 | 	using ports: | 
 | 		sudo port install fox | 
 |  | 
 | 	If you wish to build the TestGUI app bundle to redistribute to | 
 | 	others, you will need to install Fox-toolkit from source.  This is | 
 | 	because the version of fox that gets installed using ports uses the | 
 | 	ports X11 libraries which are not compatible with the Apple X11 | 
 | 	libraries.  If you install Fox with ports and then try to distribute | 
 | 	your built app bundle, it will simply fail to run on other systems. | 
 | 	To install Fox-Toolkit manually, download the source package from | 
 | 	http://www.fox-toolkit.org, extract it, and run the following from | 
 | 	within the extracted source: | 
 | 		./configure && make && make install | 
 |  | 
 | 	Windows: | 
 | 	--------- | 
 | 	On Windows, if you want to build the test GUI, you will need to get | 
 | 	the hidapi-externals.zip package from the download site.  This | 
 | 	contains pre-built binaries for Fox-toolkit.  Extract | 
 | 	hidapi-externals.zip just outside of hidapi, so that | 
 | 	hidapi-externals and hidapi are on the same level, as shown: | 
 |  | 
 | 	     Parent_Folder | 
 | 	       | | 
 | 	       +hidapi | 
 | 	       +hidapi-externals | 
 |  | 
 | 	Again, this step is not required if you do not wish to build the | 
 | 	test GUI. | 
 |  | 
 |  | 
 | Building HIDAPI into a shared library on Unix Platforms: | 
 | --------------------------------------------------------- | 
 |  | 
 | On Unix-like systems such as Linux, FreeBSD, Mac, and even Windows, using | 
 | Mingw or Cygwin, the easiest way to build a standard system-installed shared | 
 | library is to use the GNU Autotools build system.  If you checked out the | 
 | source from the git repository, run the following: | 
 |  | 
 | 	./bootstrap | 
 | 	./configure | 
 | 	make | 
 | 	make install     <----- as root, or using sudo | 
 |  | 
 | If you downloaded a source package (ie: if you did not run git clone), you | 
 | can skip the ./bootstrap step. | 
 |  | 
 | ./configure can take several arguments which control the build. The two most | 
 | likely to be used are: | 
 | 	--enable-testgui | 
 | 		Enable build of the Test GUI. This requires Fox toolkit to | 
 | 		be installed.  Instructions for installing Fox-Toolkit on | 
 | 		each platform are in the Prerequisites section above. | 
 |  | 
 | 	--prefix=/usr | 
 | 		Specify where you want the output headers and libraries to | 
 | 		be installed. The example above will put the headers in | 
 | 		/usr/include and the binaries in /usr/lib. The default is to | 
 | 		install into /usr/local which is fine on most systems. | 
 |  | 
 | Building the manual way on Unix platforms: | 
 | ------------------------------------------- | 
 |  | 
 | Manual Makefiles are provided mostly to give the user and idea what it takes | 
 | to build a program which embeds HIDAPI directly inside of it. These should | 
 | really be used as examples only. If you want to build a system-wide shared | 
 | library, use the Autotools method described above. | 
 |  | 
 | 	To build HIDAPI using the manual makefiles, change to the directory | 
 | 	of your platform and run make. For example, on Linux run: | 
 | 		cd linux/ | 
 | 		make -f Makefile-manual | 
 |  | 
 | 	To build the Test GUI using the manual makefiles: | 
 | 		cd testgui/ | 
 | 		make -f Makefile-manual | 
 |  | 
 | Building on Windows: | 
 | --------------------- | 
 |  | 
 | To build the HIDAPI DLL on Windows using Visual Studio, build the .sln file | 
 | in the windows/ directory. | 
 |  | 
 | To build the Test GUI on windows using Visual Studio, build the .sln file in | 
 | the testgui/ directory. | 
 |  | 
 | To build HIDAPI using MinGW or Cygwin using Autotools, use the instructions | 
 | in the section titled "Building HIDAPI into a shared library on Unix | 
 | Platforms" above.  Note that building the Test GUI with MinGW or Cygwin will | 
 | require the Windows procedure in the Prerequisites section above (ie: | 
 | hidapi-externals.zip). | 
 |  | 
 | To build HIDAPI using MinGW using the Manual Makefiles, see the section | 
 | "Building the manual way on Unix platforms" above. | 
 |  | 
 | HIDAPI can also be built using the Windows DDK (now also called the Windows | 
 | Driver Kit or WDK). This method was originally required for the HIDAPI build | 
 | but not anymore. However, some users still prefer this method. It is not as | 
 | well supported anymore but should still work. Patches are welcome if it does | 
 | not. To build using the DDK: | 
 |  | 
 |    1. Install the Windows Driver Kit (WDK) from Microsoft. | 
 |    2. From the Start menu, in the Windows Driver Kits folder, select Build | 
 |       Environments, then your operating system, then the x86 Free Build | 
 |       Environment (or one that is appropriate for your system). | 
 |    3. From the console, change directory to the windows/ddk_build/ directory, | 
 |       which is part of the HIDAPI distribution. | 
 |    4. Type build. | 
 |    5. You can find the output files (DLL and LIB) in a subdirectory created | 
 |       by the build system which is appropriate for your environment. On | 
 |       Windows XP, this directory is objfre_wxp_x86/i386. | 
 |  | 
 | Cross Compiling | 
 | ================ | 
 |  | 
 | This section talks about cross compiling HIDAPI for Linux using autotools. | 
 | This is useful for using HIDAPI on embedded Linux targets.  These | 
 | instructions assume the most raw kind of embedded Linux build, where all | 
 | prerequisites will need to be built first.  This process will of course vary | 
 | based on your embedded Linux build system if you are using one, such as | 
 | OpenEmbedded or Buildroot. | 
 |  | 
 | For the purpose of this section, it will be assumed that the following | 
 | environment variables are exported. | 
 |  | 
 | 	$ export STAGING=$HOME/out | 
 | 	$ export HOST=arm-linux | 
 |  | 
 | STAGING and HOST can be modified to suit your setup. | 
 |  | 
 | Prerequisites | 
 | -------------- | 
 |  | 
 | Note that the build of libudev is the very basic configuration. | 
 |  | 
 | Build Libusb. From the libusb source directory, run: | 
 | 	./configure --host=$HOST --prefix=$STAGING | 
 | 	make | 
 | 	make install | 
 |  | 
 | Build libudev. From the libudev source directory, run: | 
 | 	./configure --disable-gudev --disable-introspection --disable-hwdb \ | 
 | 		 --host=$HOST --prefix=$STAGING | 
 | 	make | 
 | 	make install | 
 |  | 
 | Building HIDAPI | 
 | ---------------- | 
 |  | 
 | Build HIDAPI: | 
 |  | 
 | 	PKG_CONFIG_DIR= \ | 
 | 	PKG_CONFIG_LIBDIR=$STAGING/lib/pkgconfig:$STAGING/share/pkgconfig \ | 
 | 	PKG_CONFIG_SYSROOT_DIR=$STAGING \ | 
 | 	./configure --host=$HOST --prefix=$STAGING | 
 |  | 
 |  | 
 | Signal 11 Software - 2010-04-11 | 
 |                      2010-07-28 | 
 |                      2011-09-10 | 
 |                      2012-05-01 | 
 |                      2012-07-03 |