设备描述符通常在插入后最先被主机读取,每个设备都有且只有一个设备描述符
- struct _DEVICE_DESCRIPTOR_STRUCT
- {
- BYTE bLength;
- BYTE bDescriptorType;
- WORD bcdUSB;
- BYTE bDeviceClass;
- BYTE bDeviceSubClass;
- BYTE bDeviceProtocol;
- BYTE bMaxPacketSize0;
- WORD idVendor;
- WORD idProduct;
- WORD bcdDevice;
- BYTE iManufacturer;
- BYTE iProduct;
- BYTE iSerialNumber;
- BYTE bNumConfiguration;
- }
上面是关于设备描述符的相关结构体,下面来挨个介绍下它的含义。
bLength : 用来确定描述符的大小.固定值为0x12.也就是整个结构体占18个字节。
bDescriptorType : 设备描述符类型.固定为0x01.
bcdUSB : 这个就相当于usb的版本号.前面的bcd前缀代表使用的是BCD码表示。
bDeviceClass :bDeviceSubClass : bDeviceProtocol :
这三个分别代表设备类型,子类型,设备使用的协议,包含图像类、无线类、人机交互类、音频类等等,子类比如的音频控制、音频流等等,协议比如鼠标、键盘等
bMaxPacketSize0 : 端点0最大分组大小(只有8,16,32,64有效).
idVendor : 供应商ID.由USB协议分配,厂商需要缴纳一定费用才能申请
idProduct : 产品ID。
bcdDevice : 设备出产编码.由厂家自行设置.
iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符. 为0则表示没有.
iProduct : :产品描述符字符串索引.同上.
iSerialNumber : 设备序列号字符串索引.同上.
bNumConfigurations : 可能的配置数.定义设备以当前速度支持的配置数量
|