Awesome
Introduction
libhid is a cross-platform C++ library for interacting with USB Human Interface Devices.
Installation
git submodule
To use libhid as a submodule in your project's git repository:
git submodule add git://github.com/bfoz/libhid.git *path*
where path is the path to put the submodule (relative to your repository root). Then follow the instructions below for linking the library into your project.
Linking
Qt / qmake
Simply include libhid.pri
in your project's .pro
file. qmake will take care of the rest.
Alternatively, just add
SUBDIRS += libhid
to your project's .pro
file.
Example
Here is a simple example that finds a device by it's Product ID and Vendor ID, opens the device, and then sends a simple output report.
#include <hid.h>
HID::filter::And filters;
filters.push_back(new VendorID(VENDOR_ID));
filters.push_back(new ProductID(PRODUCT_ID));
HID::device_list devices = HID::find(&filters);
if( devices.size() )
{
HID::device_type& device = devices.front();
HID::buffer_type buffer;
device.output(REPORT_ID, buffer);
}
Devices can also be found using an enumerator object. The enumerator generates notifications whenever a device is added or removed and matches an optional filter (the same filter objects used by find()
). Here's a quick example…
#include <hid.h>
// Called when a device is added that matches the enumerator's filter
void matched(HID::enumerator_type* enumerator, HID::device_type* device, void* context)
{}
// Called when a matching device is removed
void removed(HID::enumerator_type* enumerator, HID::device_type* device, void* context)
{}
// Create a USB HID enumerator to watch for device events and dispatch them accordingly
HID::enumerator_type* enumerator = HID::enumerator();
enumerator->setMatchCallback(matched, &my_context);
enumerator->setRemovalCallback(removed, &my_context);