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
- usbredir-0.7内容详解(三)
- usbredir-0.7内容详解(一)
- usbredir-0.7内容详解(二)
- spice/qemu--usbredir(3)
- spice/qemu--usbredir(续)
- usbredir client 功能说明书
- usbredir client设计实现
- Android 内容提供者(三)
- android自定义控件(三) 增加内容 自定义属性 format详解
- 第一、二、三范式的内容详解简单易懂
- android自定义控件(三) 增加内容 自定义属性 format详解
- .Net自动获取网页内容的三种方法详解
- android自定义控件(三) 增加内容 自定义属性 format详解
- android自定义控件(三) 增加内容 自定义属性 format详解
- android自定义控件(三) 增加内容 自定义属性 format详解
- spicy client usbredir 参数说明
- SpringMVC详解详解(三)
- Logger详解(三)
- Unity发布安卓包之后出现dll无法调用问题
- jQuery知识点简列
- GDB调试命令详解
- 解决jQuery和其他库的冲突
- sgu 298 差分约束(特定解)
- usbredir-0.7内容详解(三)
- VC 动态控制鼠标点击事件
- 关于开源,关于 GitHub, 关于 Android
- iptables详解
- 求圆上和谐点数
- 组合与继承
- 顺序表应用5:有序顺序表归并
- Canal之Client API
- 微信