| 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 |