http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/
1. Item
Report descriptors 是由 item 组合起来的, item 有多种类型
2. usage_page与 usage
在一个描述符中,首先要设置一个 Usage_page, 然后某些的usage才能被设置. 在官方文档中鼠标的例子中, 首先设置USAGE_PAGE (Generic Desktop), 然后才能使用 USAGE (Mouse). 当设置了 USAGE_PAGE (Button),然后才能使用USAGE_MINIMUM and USAGE_MAXIMUM指定不同的button,USAGE_PAGE就像一个命名空间,规定了其中哪些 USAGE 可以使用
3. collections
Collections用来组合你的数据, 相当于多个 usage page 的集合,一个collection并不对应 一条report, 只有 Input, Output, Feature
4. Report ID
被用来区分同一终端发不出的不同的 report, 当Report descriptors中有多个collection时,每一个 collection 前都要加一个report id用以区分
5. Logical Minimum 与 Logical Maximum
用来定义变量范围, 0~1 可以代表开关, -127-128 可以代表坐标范围
6. Usage Minimum 与 Usage Maximum
定义和一个数组关联的 Usage 的起始和末尾, 比如
USAGE_PAGE (Button)
USAGE_MINIMUM (1)
USAGE_MAXIMUM (3)
用来表示三个 button
7. Input、Output、Feature
8. report size 与 report count
Report size 一个usage使用几个bit
Report count 连续几个 usage