注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

usb_device结构体解析  

2012-10-14 19:33:48|  分类: 狂轰滥炸USB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


struct usb_device {
int devnum;  //设备号,即在USB总线上的地址
char devpath[16]; //设备ID字符串
u32 route;            
enum usb_device_state state; //设备的状态,此时处于configured状态而不是attached状态
enum usb_device_speed speed;  //表示设备是高速/全速/低速

struct usb_tt *tt; //事务传输信息,用于低速/全速设备,以及高速hub
int ttport; //usb设备在tt hub上的port

unsigned int toggle[2]; 0代表IN端口,1代表OUT端口

struct usb_device *parent; //代表hub,除非你是root hub
struct usb_bus *bus;     //设备所属的usb总线
struct usb_host_endpoint ep0; //端口0

struct device dev; //通用设备

struct usb_device_descriptor descriptor; //usb设备描述符,对应usb协议
struct usb_host_bos *bos;
struct usb_host_config *config; //设备所对应的所有配置

struct usb_host_config *actconfig;  //当前活跃的配置
struct usb_host_endpoint *ep_in[16]; //IN端点数据
struct usb_host_endpoint *ep_out[16];//OUT端点数组

char **rawdescriptors;

unsigned short bus_mA; //目前可从总线获得
u8 portnum; 
u8 level;//usb hub的数量

unsigned can_submit:1; //urb可以被提交
unsigned persist_enabled:1;
unsigned have_langid:1;
unsigned authorized:1; //授权
unsigned authenticated:1;
unsigned wusb:1; //无线usb设备
unsigned lpm_capable:1; //设备支持lpm
unsigned usb2_hw_lpm_capable:1;
unsigned usb2_hw_lpm_enabled:1;
int string_langid;  //字符串的语言ID

/* static strings from the device */
char *product; //产品ID
char *manufacturer; //厂家ID
char *serial;//序列号

struct list_head filelist;//为着被设备而打开的usb文件系统的文件列表
#ifdef CONFIG_USB_DEVICE_CLASS
struct device *usb_classdev;
#endif
#ifdef CONFIG_USB_DEVICEFS
struct dentry *usbfs_dentry; //usb文件系统的目录入口
#endif

int maxchild; //hub的接口
struct usb_device **children; //接在hub上的usb设备

u32 quirks;
atomic_t urbnum; //对整个设备来说被提交的urb的个数

unsigned long active_duration;//活跃时间

#ifdef CONFIG_PM
unsigned long connect_time; //usb设备首次连接时间

unsigned do_remote_wakeup:1;//远程唤醒使能
unsigned reset_resume:1; //复位代替重启
#endif
struct wusb_dev *wusb_dev;
int slot_id;
enum usb_device_removable removable; //设备可在物理上被移除

};


//usb设备描述符

struct usb_device_descriptor {
__u8 bLength;//本描述符的size
__u8 bDescriptorType;//描述符的类型,这里是设备描述符DEVICE
__u16 bcdUSB;//指明usb的版本,比如usb2.0

//0:每一个接口都指定自己的类,每个接口独立操作

//1:某些接口对应同一个类,接口不能独立操作

__u8 bDeviceClass;
__u8 bDeviceSubClass;
__u8 bDeviceProtocol;//指定协议
__u8 bMaxPacketSize0;//端点0对应的最大包大小
__u16 idVendor;//厂家ID
__u16 idProduct;//产品ID
__u16 bcdDevice;//设备的发布号
__u8 iManufacturer;//字符串描述符中厂家ID的索引
__u8 iProduct; //字符串描述符中产品ID的索引
__u8 iSerialNumber;//字符串描述符中设备序列号的索引
__u8 bNumConfigurations;//可能的配置的数目
} __attribute__ ((packed));

  评论这张
 
阅读(3737)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017