| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- 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-libusb.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/signal11/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
|