找了一个鼠标的报告描述符,如下:
code char MouseReportDescriptor[52] = {
2. //通用桌面设备
3. 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
4. //鼠标
5. 0x09, 0x02, // USAGE (Mouse)
6. //集合
7. 0xa1, 0x01, // COLLECTION (Application)
8. //指针设备
9. 0x09, 0x01, // USAGE (Pointer)
10. //集合
11. 0xa1, 0x00, // COLLECTION (Physical)
12. //按键
13. 0x05, 0x09, // USAGE_PAGE (Button)
14. //使用最小值1
15. 0x19, 0x01, // USAGE_MINIMUM (Button 1)
16. //使用最大值3。1表示左键,2表示右键,3表示中键
17. 0x29, 0x03, // USAGE_MAXIMUM (Button 3)
18. //逻辑最小值0
19. 0x15, 0x00, // LOGICAL_MINIMUM (0)
20. //逻辑最大值1
21. 0x25, 0x01, // LOGICAL_MAXIMUM (1)
22. //数量为3
23. 0x95, 0x03, // REPORT_COUNT (3)
24. //大小为1bit
25. 0x75, 0x01, // REPORT_SIZE (1)
26. //输入,变量,数值,绝对值
27. //以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键
28. //bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0
29. 0x81, 0x02, // INPUT (Data,Var,Abs)
30. //填充5个bit,补足一个字节
31. 0x95, 0x01, // REPORT_COUNT (1)
32. 0x75, 0x05, // REPORT_SIZE (5)
33. 0x81, 0x03, // INPUT (Cnst,Var,Abs)
34. //用途页为通用桌面
35. 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
36. //用途为X
37. 0x09, 0x30, // USAGE (X)
38. //用途为Y
39. 0x09, 0x31, // USAGE (Y)
40. //用途为滚轮
41. 0x09, 0x38, // USAGE (Wheel)
42. //逻辑最小值为-127
43. 0x15, 0x81, // LOGICAL_MINIMUM (-127)
44. //逻辑最大值为+127
45. 0x25, 0x7f, // LOGICAL_MAXIMUM (127)
46. //大小为8个bits
47. 0x75, 0x08, // REPORT_SIZE (8)
48. //数量为3个,即分别代表x,y,滚轮
49. 0x95, 0x03, // REPORT_COUNT (3)
50. //输入,变量,值,相对值
51. 0x81, 0x06, // INPUT (Data,Var,Rel)
52. //关集合
53. 0xc0, // END_COLLECTION
54. 0xc0 // END_COLLECTION
55. };
不理解的地方如下:
1.COLLECTION我知道是一个集合的开始,但是我不知道使用集合的作用是什么。
2.上面的报告描述符里面有两个集合一个是COLLECTION (Application),另外一个是COLLECTION (Physical)。描述符里必须要用集合?用集合和不用集合有什么区别。
3.描述符里面第19行和第43行都是逻辑最小值,为什么要写两个??
|