在USB中,字符串描述符是可选的,也便是归于可有可无的人物,USB并没有强制规则有必要有,可是一般产品是有的,至少能阐明生产厂家、产品信息等等,要不然这个产品看谁还敢用。
假如设备没有字符串描述符,那么在设备描述符、装备描述符、接口描述符等处的字符串索引值有必要为0,要不然在枚举过程中,USB主时机测验去获取字符串描述符,而刚好你又没有,那么枚举就会失利,所以有必要指定为0。
字符串描述符运用UNICODE编码,能够支撑多种言语,所以字符串描述符首先要指定言语ID,言语ID代码能够参阅这个网站:http://www.usb.org/developers/docs/USB_LANGIDs.pdf,例如:简体中文的ID值为0x0804,美式英语ID值为0x0409。
言语ID字符串描述符结构界说如下:
在枚举过程中,USB主时机向USB设备发送GET_DESCRIPTOR恳求,一起wValue字段高字节为描述符类型,字符串描述符的类型为0x03,低字节为字符串描述符索引值,关于言语ID的索引为0,其它字符串描述符索引由设备描述符指定,wIndex字段为言语ID。
字符串描述符结构界说如下:
bLength为描述符长度,bDescriptorType为描述符类型,字符编码一致选用UNICODE编码,UNICODE选用两个字节字节表明一个字符,假如是英语字符的话,那就很简单了,直接在ASCII码前面补上一个为0x00的字节数据就组成UNICODE编码了,假如是其它言语的话,网上有许多的UN%&&&&&%ODE编码转化东西,能够直接拿来运用就行了。
最终补上我的USB鼠标字符串描述符信息。
言语ID信息:
厂商字符串描述符如下:
我在Virtual Box中捕获的信息,所以厂商字符串为VirtualBox。
产品字符串描述符信息如下: