最后就是第三个基本点,usb_start_wait_urb函数,将前面历经千辛万苦创建和初始化的urb提交给咱们的usb core,让它移交给特定的主机控制器驱动进行处理,然后等待HCD回馈的结果,如果等待的时间超过了预期的限度,它不会再等,它也在drivers/usb/core/message.c里定义。 定义了一个struct api_context 结构体。api_cont...
51CTO博客已为您找到关于usb start wait urb的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及usb start wait urb问答内容。更多usb start wait urb相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
第二个基本点:usb_fill_control_urb函数,初始化一个控制urb,urb被创建之后,使用之前必须要正确的初始化。 第三个基本点:usb_start_wait_urb函数,将urb提交给咱们的usb core,以便分配给特定的主机控制器驱动进行处理,然后默默的等待处理结果,或者超时。 既然是核心结构体,代码的注释贴上来怎么看都不过分。 kref,u...
该驱动的结构体类型为struct hc_driver,其中的成员(*urb_enqueue)最为重要,它是主控制器HCD将数据包urb传向USB设备的核心实现函数,之前已经提到,协议层里最主要的函数usb_control_msg()最终就会回调主控制器的(*urb_enqueue)。 usb_control_msg() => usb_internal_control_msg() => usb_start_wait_urb() ...
The usb_submit_urb() call modifies urb->interval to the implemented interval value that is less than or equal to the requested interval value. IfISO_ASAPscheduling is used, urb->start_frame is also updated. For each entry you have tospecify the data offset for this frame(base is transfer...
URB初始化完成之后,USBD开始通过usb_start_wait_urb()提交urb请求(它调用usb_submit_urb来真正的发送URB请求),添加completition函数。 接下来,从message.c传到主机控制器(hcd.c),开始真正的usb_hcd_submit_urb()。此时,根据是否为根集线器,进入不同的工作队列。
hub_irq() --> usb_submit_urb()usb_start_wait_urb()--> usb_submit_urb() 一旦urb被USB驱动程序正确地创建和初始化后,就可以递交到USB核心以发送到USB设备了。如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb...
客户端驱动程序(对于复合设备上的接口)启用远程唤醒的接口(IRP_MN_WAIT_WAKE),必须使用空闲请求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 机制选择性地暂停设备。 有关远程唤醒的信息,请参阅: USB 设备的远程唤醒 等待/唤醒操作概述 Windows 操作系统的版本确定非复合设备的驱动程序启用选择性挂起的方式。
客户端驱动程序(对于复合设备上的接口)启用远程唤醒的接口(IRP_MN_WAIT_WAKE),必须使用空闲请求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 机制选择性地暂停设备。 有关远程唤醒的信息,请参阅: USB 设备的远程唤醒 等待/唤醒操作概述 Windows 操作系统的版本确定非复合设备的驱动程序启用选择性挂起的方式。
24. int start_frame; /*等时传输中用于设置或返回初始帧*/ 25. int number_of_packets; /*等时传输中等时缓冲区数据 */ 26. int interval; /* urb被轮询到的时间间隔(对中断和等时urb有效) */ 27. int error_count; /* 等时传输错误数量 */ ...