📄 usbdescriptor.txt
字号:
描述符
表11-3. 描述符表
描述符类型 描述
设备 描述整个设备
配置 描述设备的一个配置
接口 描述配置中的一个接口
端点 描述接口中的一个端点
串 一个Unicode串,该串用自然语言描述设备、配置、接口,或端点
电源配置 描述电源管理能力
接口电源 描述function的电源管理能力
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
设备描述符
typedef struct _USB_DEVICE_DESCRIPTOR {
UCHAR bLength; //bLength域应等于18
UCHAR bDescriptorType; // bDescriptorType域应等于1以指出该结构是一个设备描述符
USHORT bcdUSB; //包含该描述符遵循的USB规范的版本号(以BCD编码)。
UCHAR bDeviceClass;
UCHAR bDeviceSubClass;
UCHAR bDeviceProtocol;
UCHAR bMaxPacketSize0; //默认控制端点(端点0)上的数据包容量的最大值.
USHORT idVendor; //指定厂商代码
USHORT idProduct; //厂商专用的产品标识
USHORT bcdDevice; //指出设备的发行版本号(0x0100对应版本1.0)。
UCHAR iManufacturer; //述设备生产厂商
UCHAR iProduct; //产品
UCHAR iSerialNumber; //序列号
UCHAR bNumConfigurations; //指出该设备能实现多少种配置
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
USB设备类代码
符号名 类代码 描述
USB_DEVICE_CLASS_RESERVED 0 指出类代码存在于接口描述符中
USB_DEVICE_CLASS_AUDIO 1 操作模拟或数字音频、语音、和其它与声音相关的数字设备
USB_DEVICE_CLASS_COMMUNICATIONS 2 电讯设备,如调制解调器、电话、应答机,等等
USB_DEVICE_CLASS_HUMAN_INTERFACE 3 人类接口设备,如键盘、鼠标、麦克风,等等
USB_DEVICE_CLASS_MONITOR 4 显示器
USB_DEVICE_CLASS_PHYSICAL_INTERFACE 5 含有实时物理反馈的人类接口设备,如力反馈游戏杆
USB_DEVICE_CLASS_POWER 6 执行电源管理的人类接口设备,如电池、充电器,等等
USB_DEVICE_CLASS_PRINTER 7 打印机
USB_DEVICE_CLASS_STORAGE 8 大容量存储设备,如磁盘和CD-ROM
USB_DEVICE_CLASS_HUB 9 USB hubs
USB_DEVICE_CLASS_VENDOR_SPECIFIC 255 厂商定义的设备类
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
UCHAR bLength; //值为9
UCHAR bDescriptorType; //值为2
USHORT wTotalLength; //该配置描述符长度加上该配置内所有接口和端点描述符长度的总和
UCHAR bNumInterfaces; //该配置有多少个接口
UCHAR bConfigurationValue; //该配置的索引值,第一个配置描述符的索引为1
UCHAR iConfiguration;//一个可选的串描述符索引,此值为0表明该配置没有串描述符。
UCHAR bmAttributes; //含描述该配置中设备电源和其它特性的的位掩码
UCHAR MaxPower; //指出要从USB总线上获取的最大电流量
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
接口描述符
typedef struct _USB_INTERFACE_DESCRIPTOR {
UCHAR bLength; //值为9
UCHAR bDescriptorType; //值为4
UCHAR bInterfaceNumber; //索引值,用在SET_INTERFACE控制事务中以指定要激活的接口
UCHAR bAlternateSetting; //索引值,用在SET_INTERFACE控制事务中以指定要激活的接口
UCHAR bNumEndpoints; //指出该接口有多少个端点
UCHAR bInterfaceClass; //接口提供的功能
UCHAR bInterfaceSubClass; //接口提供的功能
UCHAR bInterfaceProtocol;//接口提供的功能
UCHAR iInterface; //iInterface是一个串描述符的索引,0表示该接口无描述串。
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
端点描述符
typedef struct _USB_ENDPOINT_DESCRIPTOR {
UCHAR bLength; //值为7
UCHAR bDescriptorType; //值为5
UCHAR bEndpointAddress; //域编码端点的方向性和端点号
UCHAR bmAttributes; //低两位指出端点的类型
USHORT wMaxPacketSize; //值指出该端点在一个事务中能传输的最大数据量
UCHAR bInterval; //用于指定循检间隔时间的bInterval域,时间单位为毫秒
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
串描述符
设备、配置、端点描述符都可以包含一个指向人类可读串的指针。串本身以USB串描述符的形式保存在设
备中,串字符使用Unicode编码。
typedef struct _USB_STRING_DESCRIPTOR {
UCHAR bLength; //根据串数据长度可变
UCHAR bDescriptorType; //值应为3
WCHAR bString[1]; //包含串数据本身
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -