我在嵌入式设备上运行这个 ( http://www.linux-usb.org/gadget/usb.c ) Gadget FS 用户模式驱动程序。
当我将它连接到 Windows 时,这些是GET_DESCRIPTOR
我收到的设置请求: 80 06 03 03 09 04 ff 00 80 06 00 03 00 00 ff 00 80 06 02 03 09 04 ff 00 80 06 03 03 09 04 ff 00 80 06 00 03 00 00 ff 00 80 06 02 03 09 04 ff 00
`bmRequestType`: 0x80 Device-to-host transfer direction
`bRequest`: 0x06 GET_DESCRIPTOR
`wValueH` : 0x03 Descriptor Type 'String'
`wValueL` : Descriptor Index
`wIndex` : 0x04 0x09 Language ID "US-English" for Descriptor Types "String", 0x00 for others
`wLength` : Length of the requested descriptor
这些是我连接设备时来自 Linux 主机的设置请求。80 06 00 03 00 00 ff 00 80 06 02 03 09 04 ff 00 80 06 01 03 09 04 ff 00 80 06 03 03 09 04 ff 00 80 06 ee 03 00 00 00 04
最后一个使我的 GadgetFS 实现停滞不前。描述符类型为 3,这意味着请求了“字符串”类型的描述符,但未wIndex
提供语言 ID (0x00 0x00)。此外,描述符索引是 0xEE,但为什么您会有 238 个字符串描述符用于设备?还要注意请求描述符的长度:0x0400 (1024)。
这是我使用的处理设置请求的驱动程序实现 (linux-usb.org) 的代码摘录:
case USB_REQ_GET_DESCRIPTOR: //0x06
if (setup->bRequestType != USB_DIR_IN) //USB_DIR_IN = 0x80
goto stall;
switch (value >> 8) // wValueH: Descriptor Type
{
case USB_DT_STRING: // 0x03 Type = "String"
{
tmp = value & 0x0ff; // wValueL : Descriptor Index
struct usb_gadget_strings strings = {
0x0409, /* "en-us" */
m_aUsbStringtab
};
index = 0x0409
if (tmp != 0 && index != strings.language) //This makes it STALL when connected to a linux
goto stall;
如果有人可以帮助我,我将不胜感激!