您现在的位置是:主页 > USB2.0规范 >
USB设备语言ID-索引为0的字符串索引
发布时间:2022-12-31 10:09:20所属栏目:USB2.0规范 已帮助人编辑作者:【USB接口百科】
对于如设备描描述符等相关的描述符,都会有一些字符串索引。主机通过GET_DESCRIPTOR获取对应的字符串索引内容,可以获取这些关于设备的一些描述符信息。如对于设备描述符的iManufacturer,iProduct和iSerialNumber。
我们又知道,当对于某些设备没有与之对应的字符串时,我们只需要将这些字符串索引的值设为0即可。
但是,我们通过抓包分析的时候,特别是在设备在枚举的时候,设备端会收到一个GET_DESCRIPTOR的请求,描述符的类型为3即字符串类型,并且该字符串的索引为0。
前面我们已经知道,对于不需要含有字符串索引的描述符,特别是接口描述符中的iInterface字段,常常将其置为0,那么为什么还会收到这样的请求呢?
其实,当主机向设备发送获取字符串索引为0的字符串类型时,这并不表示要获取索引为0的字符串,而是表示获取的是语言ID.
语言ID描述符的数据结构建如下:
偏移量/字节 | 字段 | 大小/字节 | 说明 | |
---|---|---|---|---|
0 | bLength | 1 | 该描述符的总长度 | |
1 | bDescriptorType | 1 | 描述符的类型,这里为3 | |
2 | wLANGUAGEID[0] | 2 | 第一个语言ID 的编号 | |
… | ||||
2*n+2 | wLANGUAGEID[n] | 2 | 第n+1个语言ID的编号 |
一般情况下,我们使用的语言ID为0409,且只支持这一种语言ID.
如我们这里提供的示例如下:
BYTE usbzhLangageId[4] =
{
0x04, //字符串长度
0x03, //字符串类型
0x09, //0X0409为美式英语的语言ID
0x04
}
如我们当为中文时,可以将语言ID设为0x0804
BYTE usbzhLangageId[4] =
{
0x04, //字符串长度
0x03, //字符串类型
0x04, //0x0804表示简体中文
0x08
}
某USB手柄的字符串描述符通过USBTREEVIEW抓取如下:
-------------------- String Descriptors -------------------
------ String Descriptor 0 ------
bLength : 0x04 (4 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language ID[0] : 0x0409 (English - United States)
Data (HexDump) : 04 03 09 04 ....
------ String Descriptor 1 ------
bLength : 0x0C (12 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "ZhiXu"
Data (HexDump) : 0C 03 5A 00 68 00 69 00 58 00 75 00 ..Z.h.i.X.u.
------ String Descriptor 2 ------
bLength : 0x16 (22 bytes)
bDescriptorType : 0x03 (String Descriptor)
Language 0x0409 : "Controller"
Data (HexDump) : 16 03 43 00 6F 00 6E 00 74 00 72 00 6F 00 6C 00 ..C.o.n.t.r.o.l.
6C 00 65 00 72 00 l.e.r.
更多的语言ID可参见:http://www.cppblog.com/ally-zheng-2009/articles/98570.html
以上就是USB接口百科为您提供USB设备语言ID-索引为0的字符串索引的解读,本文章链接: http://www.usb-hub.cn/usb20gf/42295.html 欢迎分享转载,更多婚礼相关资讯请前往USB2.0规范
上一篇:USB 字符串描述符
下一篇:USB 描述符分类及关系