我试图了解xhci_urb_enqueue()
如何弄清楚转发控制请求的端点地址是什么。从代码中,它调用ep_index = xhci_get_endpoint_index(&urb->ep->desc)
来获得ep_index,它最终使用epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK
来确定端点地址。
我的理解是,获得device/configuration/interface /endpoint descriptors
的控制请求仅由ep0应答,并且在主机向设备发出Set_Address/Set_configuration
之后,从那一点起,所有控制请求都应发送到实际的端点地址在端点描述符中提到。
我的问题是:
在收到Set_configuration请求后,USB设备是否应该启动端点?
在上述设置阶段如何设置epd->bEndpointAddress
?何时设置?
答案 0 :(得分:0)
我发现ep_index
是根据从描述符读取的设备驱动程序/ XHCI进行更改的。在设置阶段,仅将控制请求传递到USB设备,因此ep_index
始终为0 (urb_pipetype(urb) == PIPE_CONTROL)
,这基于USB协议设计。设置阶段完成后,ep_index
始终会为批量/整数传输请求(urb_pipetype(urb) == PIPE_BULK | PIPE_INTERRUPT
返回正确的端点索引。