For simplicity's sake, this article will discuss the boot protocol only, for now at least. The boot protocol is much simpler, and follows standard structures for mice and keyboards. Report protocols are based on the concept of 'items,' and their structures are defined in report descriptors. Reports generally have two types, depending on the protocol type. USB HID devices communicate using interrupt transfers, as they don't always transfer data, but when they do, they require very fast response from the software as well as the data transferred is normally small. This protocol of course depends on the standard USB framework. When the host sends a report to the device, it normally contains commands for configuring the device, such as setting LEDs on a keyboard, for example. When a device sends a report to the host, it normally contains status change information, such as a keypress, mouse movement, etc. A report is a data structure that is sent to the host from the device, or can also be sent from the host to the device. USB HID devices are mainly based on two protocols: the report protocol and the boot protocol.