HID Terminal

HID Terminal

HID stands for Human Interface Device. This is an important class of devices that, as the name suggests, are used to facilitate interaction between humans and machines. The most well-known examples of such devices include keyboards, mices, and game controllers. Many other devices (card readers, LEDs, telephony devices, etc) also fall into the HID device class. When we talk about HID devices, we usually mean HID over USB or Bluetooth. Other interfaces such as Zigbee, I²C, or SPI could also be used, although it's much less common.

The IO Ninja HID plugin is a unique tool that allows you to conveniently perform direct low-level communications with HID devices.

All HID devices share a few special properties that make the HID class a very attractive design choice. First of all, HID devices require no vendor driver on Widnows. Driver development for Windows is a long and convoluted process — for HID devices, it can be skipped entirely.

Second, the operation of HID devices is very well-standardized. The categories and types of devices, structure of input and output reports, particular measurement units used to describe values in those reports, and so on and so forth — everything is well-defined in the master HID specification consisting primarly of two large documents, Device Class Definition for HID, and HID Usage Tables.

Finally, HID devices are self-descriptive. Each HID device must provide a so-called HID Report Descriptor — a block of data with encoded information about every possible report the device can send or receive.

As the engine for low-level HID communications, we use the industry-standard library hidapi. Therefore, you can think of the HID plugin as a convenient UI frontend to hidapi.

Input, Output, and Feature Reports

Taking advantage of the HID device's ability to describe itself via HID report descriptor, IO Ninja automatically parses all the input reports emitted by a device. As such, you will see not only the raw bytes of each report, but also the decoded human-readable representation of all the values contained in it.

In a similar fashion, all output and feature reports supported by a device generate UI forms to help you conveniently prepare reports before submitting them to a device. After an outbound HID report has been submitted, its raw bytes are added to the log — where, needless to say, are decoded into a human-readable representation, as well.