usbredir-0.7内容详解(三)

来源:互联网 发布:linux 建网站 编辑:程序博客网 时间:2024/05/17 22:54

usbredir-0.7内容详解(三)

这一小结主要将iso,interrupt,bulk的数据包的控制包

usb_redir_start_iso_stream

usb_redir_header.type:    usb_redir_start_iso_streamusb_redir_header.length:  sizeof(usb_redir_start_iso_stream_header)struct usb_redir_start_iso_stream_header {    uint8_t endpoint;//端点    uint8_t pkts_per_urb;//每个urb含有的包数目    uint8_t no_urbs;//urb个数}/*usb-guest发送这个包开始接收指定的端点的iso流。这个函数分配额no_urbs 个urb,每个urb包含 pkts_per_urb个包/帧,对于iso输入端点这些urb将会里被被提交到设备,对于iso输出端点usb-host将会等待直到它已经接收到(pkts_per_urb * no_urbs / 2)个包去填充到它的缓冲里面,在提接地一个urb之前*/

usb_redir_stop_iso_stream

usb_redir_header.type:    usb_redir_stop_iso_streamusb_redir_header.length:  sizeof(struct usb_redir_start_iso_stream_header)struct usb_redir_stop_iso_stream_header {    uint8_t endpoint;//端点}/* usb-guest发送这个包去停止指定端点上的iso流。这个将会取消待定的urb,冲刷掉usb-host的buffer并且释放所有的相关的资源。注意在发送完这个包后,usb-guest仍然可以可以接收来自一个端点内部isoc的isoc数据包,因为一些数据包已经存在在传输管道内了。*/

usb_redir_iso_stream_status

usb_redir_header.type:    usb_redir_iso_stream_statususb_redir_header.length:  sizeof(usb_redir_iso_stream_status_header)struct usb_redir_iso_stream_status_header {    uint8_t status;//状态    uint8_t endpoint;//端点}/*usb-host发送这个包去回应usb-guest发送的一个usb_redir_start_iso_stream 或者 usb_redir_stop_iso_stream 包。注意对于一个输出iso流开始的成功状态,仅仅是指所有的buffer被成功分配,直到充足的包被缓冲实际的流才会被开始。注意在iso'输出流中含有一个错误的情况下,usb-host也会要求发送这个包,查看usb_redir_iso_packet。如果流被恶意停止允许usb-guest侦测状态,而流是被除usb_redir_stop_iso_stream以外的任何原因所停止的,usb-host将会一直报告usb_redir_stall状态*/

usb_redir_start_interrupt_receiving

usb_redir_header.type:    usb_redir_start_interrupt_receivingusb_redir_header.length:  sizeof(usb_redir_start_interrupt_receiving_header)struct usb_redir_start_interrupt_receiving_header {    uint8_t endpoint;}/*usb-guest发送这个包开始接收指定的端点的中断。这个功能仅仅是为了“Input” 中断端点,输入中断端点需要按时间依次轮巡,否则可能会丢失数据,因此对于输入中断端点usb-host对提交和重新提交的urb需要留意。当usb-host接收到这个包后,usb-host将会开始一个中断传输到这个端点,使用的是来自描述符的interval(间隔)和maxPacketSize。当这个传输完成时,usb-host将会发送一个usb_redir_interrupt_packet到usb-guest,并重新提交这个urb。 */

usb_redir_stop_interrupt_receiving

usb_redir_header.type:    usb_redir_stop_interrupt_receivingusb_redir_header.length:  sizeof(struct usb_redir_start_interrupt_receiving_header)struct usb_redir_stop_interrupt_receiving_header {    uint8_t endpoint;}/*usb-guest可以发送这个包停止指定端点上的中断接收,这将取消正在待定填充的urb。usb-guest在发送这个包后仍然可以接收一些usb_redir_interrupt_packet包,因为一些数据包可能已经存在在传输管道内部了。*/

usb_redir_interrupt_receiving_status

usb_redir_header.type:    usb_redir_interrupt_receiving_statususb_redir_header.length:  sizeof(usb_redir_interrupt_receiving_status_header)struct usb_redir_interrupt_receiving_status_header {    uint8_t status;    uint8_t endpoint;}/*usb-host发送这个包去回应usb-guest发送的usb_redir_start_interrupt_receiving或者usb_redir_stop_interrupt_receiving包注意当在重新提交一个中断urb发生错误时也会要求usb-host发送这个状态包。如果流被恶意停止允许usb-guest侦测状态,而流是被除usb_redir_stop_interrupt_receiving以外的任何原因所停止的,usb-host将会一直报告usb_redir_stall状态*/

usb_redir_alloc_bulk_streams

usb_redir_header.type:    usb_redir_alloc_bulk_streamsusb_redir_header.length:  sizeof(usb_redir_alloc_bulk_streams_header)struct usb_redir_alloc_bulk_streams_header {    uint32_t endpoints; /* bitmask indicating on which eps to alloc streams */    uint32_t no_streams;}/*usb-guest发送这个包要求usb-host分配ID,使得usb-guest可以在端点位掩码所指定的这些端点上可以最多使用no_streams个流ID。位掩码所指定的端点是位号码(0-32),这与 在usb_redir_ep_info_header所使用的号码相同。*/

usb_redir_free_bulk_streams

usb_redir_header.type:    usb_redir_free_bulk_streamsusb_redir_header.length:  sizeof(usb_redir_free_bulk_streams_header)
struct usb_redir_free_bulk_streams_header {    uint32_t endpoints; /* bitmask indicating on which eps to free streams *///需要释放流的端点位掩码}
/*这个包是usb-guest发向usb-host,用来清除位掩码指定的端点之前开辟的bulk流空间*/

usb_redir_bulk_streams_status

usb_redir_header.type:    usb_redir_bulk_streams_statususb_redir_header.length:  sizeof(usb_redir_bulk_streams_status_header)struct usb_redir_bulk_streams_status_header {    uint32_t endpoints; /* bitmask indicating eps this status message is for *///指定端点的位掩码    uint32_t no_streams;    uint8_t status;}/*这个包是usb-host发送回usb-guest的用于回应usb_redir_alloc_bulk_streams 或者 usb_redir_free_bulk_streams 包。对于包usb_redir_alloc_bulk_streams 回应的no_streams,将会对应no_streams个usb_redir_alloc_bulk_streams包被通过。usb-host是不被允许返回少于要求的streams。
对于usb_redir_free_bulk_streams 包所回应的no_streams为0。在回应usb_redir_alloc_bulk_streams 成功后,usb-guest可能设置stream的id为1通过no_streams。*/

usb_redir_start_bulk_receiving

usb_redir_header.type:    usb_redir_start_bulk_receivingusb_redir_header.length:  sizeof(usb_redir_start_bulk_receiving_header)struct usb_redir_start_bulk_receiving_header {    uint32_t stream_id;    uint32_t bytes_per_transfer;    uint8_t endpoint;      uint8_t no_transfers;}/*usb-guest 发送这个包启动从bulk端点读取缓存。在usb-host在接收到这个包后将会提交<span style="font-family: Arial, Helvetica, sans-serif;">no_transfers个bulk(每一个transfer中含有</span><span style="font-family: Arial, Helvetica, sans-serif;">bytes_per_transfer位),到usb-device指定的端点。</span><span style="font-family: Arial, Helvetica, sans-serif;"></span>在一个transfer完成时,usb-host将会发送一个含有接收到数据的<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_buffered_bulk_packet 包,并且立即重新提交完成的transfer。</span>注意<span style="font-family: Arial, Helvetica, sans-serif;">bytes_per_transfer 一定为端点</span><span style="font-family: Arial, Helvetica, sans-serif;">max_packet_size的倍数。</span><span style="font-family: Arial, Helvetica, sans-serif;"></span>注意这个包仅仅在usb-host含有<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_cap_bulk_receiving 能力时才会被发送。</span>*/

usb_redir_stop_bulk_receiving

usb_redir_header.type:    usb_redir_stop_bulk_receivingusb_redir_header.length:  sizeof(usb_redir_stop_bulk_receiving_header)struct usb_redir_stop_bulk_receiving_header {    uint32_t stream_id;    uint8_t endpoint;}/*usb-guest发送这个包停止指定端点的bulk接收。这将会取消所有正在挂起等待的transfers。注意usb-guest任然会接收<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_bulk_packet在发送了这个包后,因为一些数据可能已经存在在传输的管道内部。</span><pre name="code" class="cpp">注意这个包仅仅在usb-host含有<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_cap_bulk_receiving 能力时才会被发送。</span>
*/

usb_redir_bulk_receiving_status

usb_redir_header.type:    usb_redir_bulk_receiving_statususb_redir_header.length:  sizeof(usb_redir_bulk_receiving_status_header)struct usb_redir_bulk_receiving_status_header {    uint32_t stream_id;    uint8_t endpoint;    uint8_t status;}/*这包是usb-host发送回应<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_start_bulk_receiving 或者 usb_redir_stop_bulk_receiving 包。</span>注意在重新提交bulk transfer出现错误时,这个包也会被usb-hos发送。允许usb-guest检测是否stream被不利停止,usb-host将汇聚i一直报告<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_stall 状态如果stream被其他原因停止(除非是</span><span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_stop_interrupt_receiving造成的停止</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span><span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="cpp">注意这个包仅仅在usb-guest含有<span style="font-family: Arial, Helvetica, sans-serif;">usb_redir_cap_bulk_receiving 能力时才会被发送。</span>

*/


1 0
原创粉丝点击