使用控制请求可沿控制管道向下启动消息传输。您可以手动设置传输,如下所示。也可以使用 usb_pipe_ctrl_xfer_wait(9F) 包装函数设置并发送同步传输。
客户机驱动程序必须初始化 ctrl_bmRequestType、 ctrl_bRequest、ctrl_wValue、 ctrl_wIndex 和 ctrl_wLength 字段,如 USB 2.0 规范中所述。
必须将请求的 ctrl_data 字段初始化为指向数据缓冲区。将一个正值作为缓冲区 len 传递时,usb_alloc_ctrl_req(9F) 函数将初始化此字段。当然,还必须初始化缓冲区以便进行任何外发传输。在所有情况下,完成传输时,客户机驱动程序必须释放请求。
可以对多个控制请求进行排队。排队的请求中可以包括同步请求和异步请求。
ctrl_timeout 字段定义等待要被处理的请求的最长时间,但不包括在队列中的等待时间。此字段适用于同步和异步请求。ctrl_timeout 字段中指定的值以秒为单位。
如果出现异常,ctrl_exc_cb 字段接受要调用的函数的地址。usb_ctrl_request(9S) 手册页中指定了此异常处理程序的参数。异常处理程序的第二个参数是 usb_ctrl_req_t 结构。通过将请求结构作为参数传递,异常处理程序可以检查该请求的 ctrl_completion_reason 和 ctrl_cb_flags 字段,以确定最佳恢复操作。
USB_ATTRS_ONE_XFER 和 USB_ATTRS_ISOC_* 标志对所有控制请求而言都是无效属性。USB_ATTRS_SHORT_XFER_OK 标志仅对主机绑定的请求有效。