The hid driver is a USBA (Solaris USB Architecture) compliant
client driver that supports the Human Interface Device Class (HID)
1.0 specification. The Human Interface Device (HID) class encompasses
devices controlled by humans to operate computer systems. Typical examples
of HID devices include keyboards, mice, trackballs, and joysticks. HID also
covers front-panel controls such as knobs, switches, and buttons. A USB
device with multiple interfaces may have one interface for audio and a HID
interface to define the buttons that control the audio.
The hid driver is general and primarily handles
the USB functionality of the device and generic HID functionality. For example,
HID interfaces are required to have an interrupt pipe for the device to send
data packets, and the hid driver opens the pipe to the
interrupt endpoint and starts polling. The hid driver is
also responsible for managing the device through the default control pipe.
In addition to being a USB client driver, the hid driver
is also a STREAMS driver so that modules may be pushed on top of it.
The HID specification is flexible, and HID devices dynamically describe
their packets and other parameters through a HID report descriptor. The HID
parser is a misc module that parses the HID report descriptor and creates
a database of information about the device. The hid driver
queries the HID parser to find out the type and characteristics of the HID
device. The HID specification predefines packet formats for the boot protocol
keyboard and mouse.