下面这个报告描述符是USB鼠标报告描述符,比起键盘的来说要简单些。
它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,
0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标
上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节
表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。
- code char MouseReportDescriptor[52] = {
- //通用桌面设备
- 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
- //鼠标
- 0x09, 0x02, // USAGE (Mouse)
- //集合
- 0xa1, 0x01, // COLLECTION (Application)
- //指针设备
- 0x09, 0x01, // USAGE (Pointer)
- //集合
- 0xa1, 0x00, // COLLECTION (Physical)
- //按键
- 0x05, 0x09, // USAGE_PAGE (Button)
- //使用最小值1
- 0x19, 0x01, // USAGE_MINIMUM (Button 1)
- //使用最大值3。1表示左键,2表示右键,3表示中键
- 0x29, 0x03, // USAGE_MAXIMUM (Button 3)
- //逻辑最小值0
- 0x15, 0x00, // LOGICAL_MINIMUM (0)
- //逻辑最大值1
- 0x25, 0x01, // LOGICAL_MAXIMUM (1)
- //数量为3
- 0x95, 0x03, // REPORT_COUNT (3)
- //大小为1bit
- 0x75, 0x01, // REPORT_SIZE (1)
- //输入,变量,数值,绝对值
- //以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键
- //bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0
- 0x81, 0x02, // INPUT (Data,Var,Abs)
- //填充5个bit,补足一个字节
- 0x95, 0x01, // REPORT_COUNT (1)
- 0x75, 0x05, // REPORT_SIZE (5)
- 0x81, 0x03, // INPUT (Cnst,Var,Abs)
- //用途页为通用桌面
- 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
- //用途为X
- 0x09, 0x30, // USAGE (X)
- //用途为Y
- 0x09, 0x31, // USAGE (Y)
- //用途为滚轮
- 0x09, 0x38, // USAGE (Wheel)
- //逻辑最小值为-127
- 0x15, 0x81, // LOGICAL_MINIMUM (-127)
- //逻辑最大值为+127
- 0x25, 0x7f, // LOGICAL_MAXIMUM (127)
- //大小为8个bits
- 0x75, 0x08, // REPORT_SIZE (8)
- //数量为3个,即分别代表x,y,滚轮
- 0x95, 0x03, // REPORT_COUNT (3)
- //输入,变量,值,相对值
- 0x81, 0x06, // INPUT (Data,Var,Rel)
- //关集合
- 0xc0, // END_COLLECTION
- 0xc0 // END_COLLECTION
- };
通过对上面的报告分析,我们知道报告返回4个字节,没有报告ID。如果鼠标左键按下,
则返回01 00 00 00(十六进制值),如果右键按下,则返回02 00 00 00,如果中键按下,
则返回04 00 00 00,如果三个键同时按下,则返回07 00 00 00。如果鼠标往右移动则
第二字节返回正值,值越大移动速度越快。其它的类推。
这里只对报告描述符做一个简单的介绍,更详细的资料请参看USB HID协议以及HID Usage Tables,
可以从Http://www.usb.org下载。
根据这个实际设计的USB键盘和USB鼠标:
USB键盘:
http://computer00.21ic.org/user1/2198/archives/2007/36484.html
http://www.ednchina.com/blog/computer00/20134/message.aspx
USB鼠标:
http://computer00.21ic.org/user1/2198/archives/2007/36520.html
http://www.ednchina.com/blog/computer00/20135/message.aspx
温馨提示:
百合电子工作室有一个关于USB开发方面的开源项目-Easy USB 51 Programer,整个开发过程写得非常详细,不防参考一下,您还可以进入她的论坛参与此项目的讨论。