| Index: third_party/hidapi/README.txt
|
| diff --git a/third_party/hidapi/README.txt b/third_party/hidapi/README.txt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b4e7c0e0dacc6aa3411d016147ab0ee938529a78
|
| --- /dev/null
|
| +++ b/third_party/hidapi/README.txt
|
| @@ -0,0 +1,339 @@
|
| + 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
|
|
|