找回密码
 赶紧注册吧

QQ登录

只需一步,快速开始

查看: 2541|回复: 0
打印 上一主题 下一主题

control only [复制链接]

注意:1、各网友务必提高交友安全意识,不要轻易参加非天府交友网官方举办的见面交友活动,以防酒托,饭托或引发其他危险;请详细阅读《天府交友网服务条款》和《免责申明》!

Rank: 3Rank: 3

升级  66.67%

跳转到指定楼层
楼主
发表于 2011-10-24 03:46:44 |只看该作者 |倒序浏览
相关的主题文章:

  
   怎么可能这样的呀
  
   美国身为世界第一大黄金贮备国
  
     小猫钓鱼做法
  
   不晓得你曾经流过多少泪
  
   更沁人肺腑值得咱们去咀嚼
  

在内核中的USB代码跟USB设备进行通信,应用的是Urb(USB request block)。Urb能够看成是一个USB的驱动和USB 的endpoint通讯的桥梁。有两种方法
Control EndPoint
       usb_complete_t complete;     /* (in) completion routine */
       int interval;                   /* (modify) transfer interval (INT/ISO) */
       int actual_length;           /* (return) actual transfer length */

struct urb
...*/
当Urb被创建并且初始化完成之后就可以通过usb_submit_urb提交给Usb core 了
struct urb *usb_alloc_urb(int iso_packets, int mem_flags);
       void *transfer_buffer;           /* (in) associated data buffer */
       struct usb_device *dev;        /* (in) pointer to associated device */
Isochronous EndPoint
       int bandwidth;               /* bandwidth for INT/ISO request */
usb_unlink_urb这个函数在返回到调用者之前不等候这个 urb 完整停滞。由于要完全结束一个Urb,必需要USB core可能睡眠当前过程。当然,Urb的transfer_flags须要一个URB_ASYNC_UNLINK。
;
       int error_count;             /* (return) number of ISO errors */
Interrupt EndPoint
       /* public, documented fields in the urb that can be used by drivers */

void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context);
       struct list_head urb_list; /* list pointer to all active urbs */
       int status;               /* (return) non-ISO status */
void usb_fill_int_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context, int interval);
       struct usb_iso_packet_descriptor iso_frame_desc[0];   /* (in) ISO ONLY */
2、  分配一个Endpoint,因为Endpoint有四品种型,所以在调配的时候也有4个方式:

       dma_addr_t setup_dma;        /* (in) dma addr for setup_packet */
一个Urb的性命周期
       void *hcpriv;                /* private data for host controller */
Urb的定义如下
       int start_frame;             /* (modify) start frame (ISO) */
       u8 reject;               /* submissions will fail */
4、  当Urb实现数据传输义务后,开释该Urb

       spinlock_t lock;             /* lock for the URB */
3、  通过USB装备驱动程序,提交给USB core
       unsigned int pipe;          /* (in) pipe information */
       void *context;               /* (in) context for completion */

通过int usb_kill_urb(struct urb *urb); 或者int usb_unlink_urb(struct urb *urb);来释放Urb。usb_kill_urb经常在设备从体系中移除的时候使用,终止该Urb的生命周期
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0

使用道具 举报

※为保护您的个人隐私,防止被恶意盗用,在论坛中不得留下手机、QQ、邮箱等联系方式,否则将被屏蔽!,若有需要,请发送站内消息
您需要登录后才可以回帖 登录 | 赶紧注册吧

关于我们|网站地图|帮助中心|商务合作|法律声明|诚聘英才|联系我们| 时尚 娱乐 成都婚庆公司 网站制作天府星空
Copyright © 2010-2011 天府交友(Www.Tflove.Com)版权所有