-
struct usb_device_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 __le16 bcdUSB;//USB版本号 __u8 bDeviceClass;//USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型 //0x00不是在设备描述符中定义的,如HID __u8 bDeviceSubClass;//usb分配的子类代码,同上,值由USB规定和分配的 __u8 bDeviceProtocol;//USB分配的设备协议代码,同上 __u8 bMaxPacketSize0;//端点0的最大包的大小 __le16 idVendor;//厂商编号 __le16 idProduct;//产品编号 __le16 bcdDevice;//设备出厂编号 __u8 iManufacturer;//描述厂商字符串的索引 __u8 iProduct;//描述产品字符串的索引 __u8 iSerialNumber;//描述设备序列号字符串的索引 __u8 bNumConfigurations;//可能的配置数量 } __attribute__ ((packed)); struct usb_config_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 __le16 wTotalLength;//配置所返回的所有数量的大小 __u8 bNumInterfaces;//此配置所支持的接口数量 __u8 bConfigurationValue;//Set_Configuration命令需要的参数值 __u8 iConfiguration;//描述该配置的字符串的索引值 __u8 bmAttributes;//供电模式的选择 __u8 bMaxPower;//设备从总线提取的最大电流 } __attribute__ ((packed)); struct usb_interface_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 __u8 bInterfaceNumber;//接口的编号 __u8 bAlternateSetting;//备用的接口描述符编号 __u8 bNumEndpoints;//该接口使用端点数,不包括端点0 __u8 bInterfaceClass;//接口类型 __u8 bInterfaceSubClass;//接口子类型 __u8 bInterfaceProtocol;//接口所遵循的协议 __u8 iInterface;//描述该接口的字符串索引值 } __attribute__ ((packed)); struct usb_endpoint_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 __u8 bEndpointAddress;//端点地址及输入输出属性 __u8 bmAttributes;//端点的传输类型属性 __le16 wMaxPacketSize;//端点收、发的最大包的大小 __u8 bInterval;//主机查询端点的时间间隔 /* NOTE: these two are _only_ in audio endpoints. */ /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ __u8 bRefresh; __u8 bSynchAddress; } __attribute__ ((packed)); struct usb_string_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 __le16 wData[1]; /* UTF-16LE encoded */ } __attribute__ ((packed));
【作者】
张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.