The host periodically polls the device's interrupt IN endpoint during operation. When the device has data to send it forms a report and sends it as a reply to the poll token. Common devices such as keyboards and mice send reports that are compliant with standards set by the USB Implementers Forum (USB-IF). When a vendor makes a custom USB HID class device, the reports formed by the device need to match the report description given during enumeration and the driver installed on the host system. In this way it is possible for the USB HID class to be extremely flexible. USB HID API There are two levels of APIs related to USB HID: the USB level and the operating system level. At the USB level, there is a protocol for devices to announce their capabilities and the operating system to parse the data it gets. The operating system then offers a higher-level view to applications, which do not need to include support for individual devices but for classes of devices. This abstraction layer allows a game to work with any USB controller, for example, even ones created after the game. See also USB On-The-Go (OTG) References External links USB.org: the homepage of the USB Implementers Forum, Inc. USB in a Nutshell USB-IF HID Tools: the USB-IF's page devoted to human interface devices, includes all approved documentation Lakeview Research HID Page: a collection of articles about, and example code for USB HID devices. PC System Guides: Microsoft's PC System specifications (e.g. PC '97, PC '98) USB