

The report descriptor can define where in a report an application can find the current state of the mouse's left button. For example, a usage is defined for the left button of a mouse.

These HID usage tables contain a list with descriptions of Usages, which describe the intended meaning and use of a particular item described in the report descriptor. The USB-IF working group publishes HID usage tables that are part of the report descriptors that describe what HID devices are allowed to do. There are three report types: Report typeĭata sent from the HID device to the application, typically when the state of a control changes.ĭata sent from the application to the HID device, for example to the LEDs on a keyboard.ĭata that can be manually read and written, and are typically related to configuration information.Įach top level collection defined in a report descriptor can contain zero or more reports of each type. ReportsĪpplications and HID devices exchange data through reports. The report descriptor describes the format and meaning the data that the device supports. Reports are the actual data that is exchanged between a device and a software client. HID consists of two fundamental concepts, a report descriptor, and reports. Third-party, vendor-specific transports are also allowed via custom transport drivers. Details on currently supported transports can be found in HID Transports Supported in Windows. The specification for HID over USB was ratified by the USB-IF in 1996 and support over additional transports followed soon after. It was designed for low latency, low bandwidth devices but with flexibility to specify the rate in the underlying transport. HID began with USB but was designed to be bus-agnostic. Many hardware vendors also use HID for their proprietary devices. HID devices today include a broad range of devices such as alphanumeric displays, bar code readers, volume controls on speakers/headsets, auxiliary displays, sensors and many others.

HID provided support for these "boot mode" devices while adding support for hardware innovation through extensible, standardized and easily-programmable interfaces. Hardware innovation required either overloading data in an existing protocol or creating non-standard hardware with its own specialized driver. Prior to HID, devices could only utilize strictly-defined protocols for mice and keyboards. Human Interface Devices (HID) is a device class definition to replace PS/2-style connectors with a generic USB driver to support HID devices such as keyboards, mice, game controllers, and so on.
