The report descriptor is requested by the OS @ enumeration. This is the only way the OS should know its customs and associated identifiers for reports and bit / byte locations. There are more details than this, but all the information there is used to use the devices and whether they are inputs, outputs or functions. Inputs are usage data / data sent to the device. Outputs are usage data / data output from the device. Features are functions that can be read and installed; setFeature and getFeature.
Report descriptors can and often contain input, output, and function data mixed in one report descriptor.
See the @ 6.2.2 Report Descriptor section in “Defining a Device Class for User Interface Devices (HIDs)” @ usb.org, and also see sample report descriptors in the same document to get an idea of how it works.
edit: What I said correctly concerns: "Report descriptors can and often contain input, output, and functions mixed in one report descriptor." Oleg Mazurov said that this is not true. I think it is misleading "report descriptors" with "report identifiers".
rebar source share