4、HID的特定请求
除了USB设备的11个标准请求外,HID规范另外还定义了6个HID特定控制请求。所有的HID设备都必须支持Get_Report请求,同时支持启动的设备必须支持Get_Protocol请求和Set_Protocol请求,其他的请求是可选择的。如果设备没有中断输出端点,此设备需要支持Get_Report请求来从主机读取数据。
在控制传输的设置阶段的数据包中的8个字节中的第一字节bmRequestType的编码含义参阅第6章中的USB标准请求。第2个字节bRequest定义请求的内容。wValue因请求的不同而不同。wIndex指明HID所在的接口。
表4-1 HID特定的请求
bmRequestType |
bRequest (值) |
wValue |
wIndex |
wLength |
数据阶段 |
1 01 00001b |
Get_Report (1) |
报表类型,报表ID |
接口 |
报表长度 |
报表 |
0 01 00001b |
Set_Report (9) |
报表类型,报表ID |
接口 |
报表长度 |
报表 |
1 01 00001b |
Get_Idle (2) |
0,报表ID |
接口 |
1 |
闲置时间 |
0 01 00001b |
Set_Idle (10) |
闲置时间,报表ID |
接口 |
0 |
无 |
1 01 00001b |
Get_Protocol (3) |
0 |
接口 |
1 |
0: 启动协议 1: 报表协议 |
0 01 00001b |
Set_Protocol (11) |
0: 启动协议 1: 报表协议 |
接口 |
0 |
无 |
4.1 Get_Report请求
Get_Report的作用是启用主机使用控制传输,来从设备读取数据。
在使用时wValue字段的高字节是报表类型,1表示Input报表,2表示Output报表,3表示Feature报表。wValue的低字节是报表的Report ID,如果没有定义Report ID,该字节为设0。
在携带请求的控制传输的数据阶段,HID设备回传指定的报表内容。
HlD规范不建议使用该请求获得未经定时的数据,这样的数据建议使用中断输入管道获得。
该请求用来取得在主机初始化设备时的特征项目状态和其他信息。使用开机协议的主机可以使用此请求来获得按键或鼠标数据。
4.2 Set_Report请求
Set_Report请求的参数含义和Get_Report一样,但Set_Report请求的数据方向与Get_Report相反,在后面的数据阶段,主机传送报表到HID设备,这样的输出报表可以用于复位设备的控制,复位产生的效果取决于对应的控制的类型是相对(Reletive)的还是绝对(Absolute)的。
4.3 Set_Idle请求
Set_Idle请求的作用是静默一个在中断输入管道的特定的报表,直到一个发生一个相关的事件或过去了规定的时间,当数据从上一个报表后没有改变时,可以通过限制中断输入端点的报表频率来节省传输带宽。HID设备不是必需支持此请求。
wValue字段的高字节是设置的闲置时间,是报表之间的最大间隔时间。该字节为0表示闲置时间为无限长,在这种情况下,设备只有在报表数据有改变时才传送报表,否则设备传回一个NAK。
wValue字段的低字节指示此请求应用的报表的Report ID。如果低字节是0,此请求应用到设备的所有输入报表。
闲置时间以4ms为单位,范围在4ms~1020ms之间。如果报表的数据自从上一次报表后有改变,或是接收到一个请求,设备会传送一个报表。
如果报表的数据没有改变,而且从上一次报表后过去的时间自尚未达到规定的闲置时间,设备会传回一个NAK。如果报表的数据没有改变,而且持续时间已经达到的闲置时间,设备会传送一个报表。
闲置时间设置为0表示无限长的闲置时间,设备只有在报表的数据有改变时才会传送一个报表,对于其他的中断输入请求则是传回NAK。
在检测HID设备时,Wndows的HID驱动程序会试图将闲置时间设置成0。如果HID设备不支持此请求,主机会收到传回的Stall。
4.4 Get_Idle请求
Get_Idle请求的作用是过的设备的当前闲置时间,在数据阶段,HID设备回传一个字节的闲置时间值。
4.5 Get_Protocol请求
Get_Protocol请求的作用是主机获取设备目前作用的是启动协议还是报表协议。
在数据阶段中设备回传的1个字节信息包中的数据值为0表示启动协议,为1表示报表协议。
启动设备必需支持该请求。
4.6 Set_Protocol请求
Set_Protocol的作用是主机指定设备使用启动协议或报表协议。
在数据阶段中主机传送的1个字节信息包中的数据值为0表示指定启动协议,为1表示指定报表协议。
启动设备必需支持该请求。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|