Skip to content
mcuee edited this page Jun 25, 2023 · 24 revisions

Welcome to the HIDAPI wiki!

For cross platform communication with HID devices, libusb project recommends HIDAPI.

HIDAPI versioning

HIDAPI follows (at least tries to) the Semantic Versioning scheme. Even though we're still at version 0.x.y - we're doing our best to keep backward compatibility across releases.

Various related projects and repositories

libusb -- https://github.com/libusb/libusb/wiki

Original version of hidapi -- https://github.com/signal11/hidapi

hidapi fork with an hid report parser based on the above old version of hidapi -- https://github.com/supercollider/hidapi

hidapitester command line tool based on HIDAPI -- https://github.com/todbot/hidapitester

hidpytoy: GUI tool based on HIDAPI -- https://github.com/todbot/hidpytoy

Python binding for HIDAPI cython-hidapi -- https://github.com/trezor/cython-hidapi

nodejs binding -- https://github.com/node-hid/node-hid.git

Rust binding -- https://github.com/ruabmbua/hidapi-rs

Single header C++23 wrapper -- https://github.com/acdemiralp/hid.hpp

Java binding -- https://github.com/gary-rowe/hid4java

QT wrapper for HIDAPI -- https://github.com/simonmeaden/qhidapi

Ruby binding -- https://rubygems.org/gems/hidapi/

C++ wrapper -- https://github.com/sensics/HIDAPIpp

.NET binding -- https://github.com/badcel/HidApi.Net.git and https://github.com/alexgubanow/hidapiw

Go binding -- https://github.com/sstallion/go-hid

WIP Kotlin Native binding -- https://git.sr.ht/~z3ntu/kotlin-native-hidapi

Free Pascal bindings for HIDAPI -- https://github.com/dioannidis/HIDAPI.pas

Erlang binding (requires a fork version of hidapi) -- https://github.com/tonyrog/hid

FAQ

hidapi is not thread-safe in general. How to use hidapi in multithreaded application?

How to use hidapi with unrooted Android devices

HIDAPI Windows backend limitation

WinAPI requires that the buffer passed to WriteFile (underlying implementation of hid_write) is large-enugh to hold the largest report (the size of larger report is reported by WinAPI as well, and used by hidapi). And, apparently, it doesn't return how many actual bytes are sent to the device.

Links to platform specific HID information

Windows HID Transport

https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-transports

https://github.com/MicrosoftDocs/windows-driver-docs/blob/staging/windows-driver-docs-pr/hid/hid-transports.md

Linux HID transport and hidraw

https://github.com/torvalds/linux/blob/master/Documentation/hid/hid-transport.rst

https://github.com/torvalds/linux/blob/master/Documentation/hid/hidraw.rst