打印

如何通过Send_Report、Get_Report类请求发送HID报告

[复制链接]
7665|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Jerric|  楼主 | 2010-7-23 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《圈圈教你玩USB》P112倒数第二段:“报告里面……。通常,输入报告通过中断输入端点返回,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。当然,不管设备是否具有中断输出端点(中断输入端点是必须的),主机都可以通过获取报告和设置报告的请求从端点0来获取或发送报告。”
疑问1:既然主机可以通过端点0以Get_Report 与Send_Report的方式来获取与发送,那怎么“中断输入端点是必须的”呢
疑问2:蓝字部分好像是在说:当有中断输出端点时,报告是通过中断输出端点出,只有在没有中断输出端点时才通过控制端点0发出;但最后一句又说“不管设备是否具有中断输出端点,主机都可以通过获取报告和设置报告的请求从端点0来获取或发送报告”。
我想意思应该是“当没有中断输出端点时就用控制端点0发出报告,当有中断输出端点时,既可通过中断输出端点发出报告,也可通过控制端点0发出报告”吧!圈圈你说是不?
那么,下面就以圈圈的“MyUsbHid”为例来说说如何通过Send_Report、Get_Report类请求发送HID报告吧!
实验目标:更改“MyUsbHid”程序,Device使用中断输入端点1发送报告到Host,Host通过“Send_Report”的方式输出报告到Device。
1、将“MyUsbHid”Copy一份出来。
2、将“接口描述符”中的“bNumEndpoints字段”更改为0x01,因为我只用一个中断输入端点。
3、将“输出端点描述符”全部删除。
4、将PID也改改,就用0x0106吧。
OK,先改成这样,烧程序到板子看看是什么结果先!
看看下面的串口打印信息:
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x06 0x01 0x00 0x01 0x01 0x02
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区9字节。
0x09 0x02 0x29 0x00 0x01 0x01 0x00 0x80 0x32
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。
写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x03 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品序列号)。
写端点0缓冲区16字节。
0x16 0x03 0x32 0x00 0x30 0x00 0x30 0x00 0x38 0x00 0x2D 0x00 0x30 0x00 0x37 0x00
USB端点0输入中断。
写端点0缓冲区6字节。
0x2D 0x00 0x31 0x00 0x39 0x00
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区16字节。
0x09 0x02 0x29 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x00 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x1B 0x00 0x07 0x05 0x81 0x03 0x10
USB端点0输入中断。
写端点0缓冲区9字节。
0x00 0x0A 0x00 0x00 0x00 0x00 0x00 0x00 0x00
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。
写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x02 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品描述)。
写端点0缓冲区16字节。
0x36 0x03 0x0A 0x30 0x08 0x57 0x08 0x57 0x59 0x65 0x60 0x4F 0xA9 0x73 0x55 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x53 0x00 0x42 0x00 0x0B 0x30 0x4B 0x4E 0x28 0x75 0x37 0x62 0xEA 0x81 0x9A 0x5B
USB端点0输入中断。
写端点0缓冲区16字节。
0x49 0x4E 0x84 0x76 0x55 0x00 0x53 0x00 0x42 0x00 0x20 0x00 0x48 0x00 0x49 0x00
USB端点0输入中断。
写端点0缓冲区6字节。
0x44 0x00 0xBE 0x8B 0x07 0x59
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。
写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x02 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品描述)。
写端点0缓冲区16字节。
0x36 0x03 0x0A 0x30 0x08 0x57 0x08 0x57 0x59 0x65 0x60 0x4F 0xA9 0x73 0x55 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x53 0x00 0x42 0x00 0x0B 0x30 0x4B 0x4E 0x28 0x75 0x37 0x62 0xEA 0x81 0x9A 0x5B
USB端点0输入中断。
写端点0缓冲区16字节。
0x49 0x4E 0x84 0x76 0x55 0x00 0x53 0x00 0x42 0x00 0x20 0x00 0x48 0x00 0x49 0x00
USB端点0输入中断。
写端点0缓冲区6字节。
0x44 0x00 0xBE 0x8B 0x07 0x59
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区0字节。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x06 0x01 0x00 0x01 0x01 0x02
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区9字节。
0x09 0x02 0x29 0x00 0x01 0x01 0x00 0x80 0x32
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x29 0x00
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区16字节。
0x09 0x02 0x29 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x00 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x1B 0x00 0x07 0x05 0x81 0x03 0x10
USB端点0输入中断。
写端点0缓冲区9字节。
0x00 0x0A 0x00 0x00 0x00 0x00 0x00 0x00 0x00
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00
USB标准输出请求:设置配置。
写端点0缓冲区0字节。
USB端点0输入中断。

设置配置后就无法再枚举下去了……
把学习板拔下,再插回去试试……
结果:
********************************************************************
******       《圈圈教你玩USB》之 用户自定义的USB HID设备      ******
******                      AT89S52 CPU                       ******
******                  建立日期:Jul 19 2010                 ******
******                   建立时间:21:52:04                   ******
******                    作者:电脑圈圈                      ******
******                    欢迎访问作者的                      ******
******           USB专区:
http://group.**/93/       ******
******      BLOG1:
http://www.**/blog/computer00    ******
******                BLOG2:
http://computer00.21ic.org       ******
******          打开上位机应用软件,然后按K1-K8分别进行测试   ******
********************************************************************
Your D12 chip's ID is: 0x1012. ID is correct! CongratulaTIons!

断开USB连接。
连接USB。
USB总线复位。
USB总线挂起。

无法枚举……
再来一次:
********************************************************************
******       《圈圈教你玩USB》之 用户自定义的USB HID设备      ******
******                      AT89S52 CPU                       ******
******                  建立日期:Jul 19 2010                 ******
******                   建立时间:21:52:04                   ******
******                    作者:电脑圈圈                      ******
******                    欢迎访问作者的                      ******
******           USB专区:
http://group.**/93/       ******
******      BLOG1:
http://www.**/blog/computer00    ******
******                BLOG2:
http://computer00.21ic.org       ******
******          打开上位机应用软件,然后按K1-K8分别进行测试   ******
********************************************************************
Your D12 chip's ID is: 0x1012. ID is correct! Congratulations!

断开USB连接。
连接USB。
USB总线复位。
USB总线挂起。

还是无法枚举……
插个U盘上来看看……
结果:插上去的U盘一点反应也没有!所有的USB口都一样,什么东东插上去都不枚举了……
只有重启电脑了……
“开始”—>“关机”—>“重新启动”……
等……
再等……
再再等……
再再再等……
…………………………
电脑无法关机啦……
各位,这是怎么回事?
如何才能通过Send_Report、Get_Report类请求发送HID报告呢?
圈圈!圈圈!!圈圈!!!……圈圈去哪了?

(附上更改后的程序,各位研究研究!)

MyUsbHid.rar

102.56 KB

相关帖子

沙发
Jerric|  楼主 | 2010-7-25 13:07 | 只看该作者
自己顶:o

使用特权

评论回复
板凳
553716434| | 2012-6-1 17:25 | 只看该作者
我要了        e。。。。。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

128

帖子

4

粉丝