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

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

USB相关结构体之struct usb_device  

2012-09-19 01:57:17|  分类: 韦东山视频第二轮 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
struct usb_device {
int devnum;     //设备号,也称设备地址
char devpath[16];
u32 route;
enum usb_device_state state; 
enum usb_device_speed speed; 

struct usb_tt *tt;
int ttport;

unsigned int toggle[2];

struct usb_device *parent;
struct usb_bus *bus;     //usb设备所在的总线
        //0号端口,可以双向传输
struct usb_host_endpoint ep0; //usb主机端口结构体,详见注释1

struct device dev;

struct usb_device_descriptor descriptor;//usb设备描述符,详见注释2
struct usb_host_bos *bos;
struct usb_host_config *config;

struct usb_host_config *actconfig; //配置结构体,详见注释3
         //由此我们看出usb最多支持33个端口,1个控制端口,16个输入端口,16个输出端口
struct usb_host_endpoint *ep_in[16];//输入端口
struct usb_host_endpoint *ep_out[16];//输出端口

char **rawdescriptors;

unsigned short bus_mA;
u8 portnum;
u8 level;

unsigned can_submit:1;
unsigned persist_enabled:1;
unsigned have_langid:1;
unsigned authorized:1;
unsigned authenticated:1;
unsigned wusb:1;
unsigned lpm_capable:1;
unsigned usb2_hw_lpm_capable:1;
unsigned usb2_hw_lpm_enabled:1;
int string_langid;

/* static strings from the device */
char *product;
char *manufacturer;
char *serial;

struct list_head filelist;
#ifdef CONFIG_USB_DEVICE_CLASS
struct device *usb_classdev;
#endif
#ifdef CONFIG_USB_DEVICEFS
struct dentry *usbfs_dentry;
#endif

int maxchild;
struct usb_device **children;

u32 quirks;
atomic_t urbnum;

unsigned long active_duration;

#ifdef CONFIG_PM
unsigned long connect_time;

unsigned do_remote_wakeup:1;
unsigned reset_resume:1;
#endif
struct wusb_dev *wusb_dev;
int slot_id;
enum usb_device_removable removable;
};

注释1:
struct usb_host_endpoint {
struct usb_endpoint_descriptor desc; //端口描述符,详见注释1-1
struct usb_ss_ep_comp_descriptor ss_ep_comp;
struct list_head urb_list;  //本端点的请求块的队列
void *hcpriv;
struct ep_device *ep_dev; /* For sysfs info */

unsigned char *extra;   /* Extra descriptors */
int extralen;
int enabled;
};

注释1-1:
struct usb_endpoint_descriptor {
__u8  bLength;
__u8  bDescriptorType;

__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));

注释2:
struct usb_device_descriptor {
__u8  bLength;
__u8  bDescriptorType;

__le16 bcdUSB;
__u8  bDeviceClass;
__u8  bDeviceSubClass;
__u8  bDeviceProtocol;
__u8  bMaxPacketSize0;//一次传输的最大数据量
__le16 idVendor;
__le16 idProduct;
__le16 bcdDevice;
__u8  iManufacturer;
__u8  iProduct;
__u8  iSerialNumber;
__u8  bNumConfigurations;
} __attribute__ ((packed));

注释3:
struct usb_host_config {
struct usb_config_descriptor desc; //配置描述符,详见注释3-1

char *string; /* iConfiguration string, if present */

         //接口代表一种功能,而配置是功能的组合
struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS];

/* the interfaces associated with this configuration,
* stored in no particular order */
struct usb_interface *interface[USB_MAXINTERFACES];

/* Interface information available even when this is not the
* active configuration */
struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];

unsigned char *extra;   /* Extra descriptors */
int extralen;
};

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

历史上的今天

评论

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

页脚

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