usbredir-0.7内容详解(三)

QEMU+SPICE+USBredir详细编译步骤 在linux系统下(包括CentOS、Ubuntu等)编译QEMU和SPICE协议,使其支持USB重定向。 立即下载

usbredir-0.7内容详解(三)

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

usb_redir_start_iso_stream

usb_redir_header.type:    usb_redir_start_iso_stream
usb_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_stream
usb_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_status
usb_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_receiving
usb_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_receiving
usb_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_status
usb_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_streams
usb_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_streams
usb_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_status
usb_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_receiving
usb_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_receiving
usb_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_status
usb_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>

*/



spice usbredir usb重定向功能,源码已经经过mingw编译,生成可用的lib和dll spice usb重定向库已经过mingw编译完成,生成了lib和dll,可供vs使用 立即下载

相关推荐

Ren’py教程《从入门到精通》

Ren’py是什么?Ren'py是一款用于制作视觉小说、冒险游戏、galgame的游戏制作工具,被来自世界各地的数千名创作者使用。Ren'py的名字由Ren’ai和Python混合而成,而Python也是Ren'py所使用的环境语言。Ren'py可以帮助你使用文字、图像和声音来讲述在计算机和移动设备上运行的交互式故事。这些既可以是视觉小说,也可以是生活模拟游戏。易于学习的脚本语言允许 任何人都可以有效地编写大型视觉小说,而它的Python 脚本足以应对复杂的 模拟游戏。

2302_77140651的博客 1万+

usbredir client设计实现

介绍 关于usbredir client功能的描述,可以参考文档《usbredir client 功能说明书》,这个文档,分析了在不同操作系统平台,如何实现这个功能。 跨平台支持 基于不同操作系统平台Windows和Linux,对于支持分门别类众多的usb外设,重定向都会用到libusb这个库来访问usb设备,也可以说重定向usb设备的驱动程序是基于libusb实现的。在仔细分析阅读了lib

somyjun的专栏 4618

SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验

阿里开源语音大模型:语音识别效果和性能强于 Whisper,还能检测掌声、笑声、咳嗽等

u010522887的专栏 4万+

usbredir-0.7内容详解(一)

在spice源码中难免会遇到usb重定向的问题,现在最新的usb重定向的版本是:usb重定向协议0.7版本(USB redirection protocol version 0.7)

hubbybob1专栏 4256

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9931

halcon C++编程 第4讲 HObject/HImage Mat相互转换(tcy)

网上有很多相互转换程序,但并不知那个正确,本文对相互转换后的结果和原对象比较是否相同判断转换是否正确。经测试ok.本文包括转换代码及测试是否相同。 1.转换程序: /************************************ HObject转为Mat:time:2021/3/16 V1.0 *************************************/ cv::Mat HalconClass::HObjectToMat(const HalconCpp::HObject&..

tcy-阿春 4936

usbredir学习

usbredir 最初是为与 Spice 配合使用而创建的,但该协议和 usbredirhost 完全独立于 Spice,它们也可以用于创建 VNC 扩展,以便通过 VNC 连接将 USB 设备重定向到 QEMU 虚拟机。可以发现,原来导出的设备重新被attach进去了,此时lsusb又可以看到该设备了,设备又回到本地了。一个实现 usbredir 连接中 usb-host端的库,这是实际usb设备所连接的一端。被导出的设备被reset掉了,本地lsusb是看不到这个设备了,设备从本地导出了。

czw 1449

Linux -- 图形界面配置Samba;system-config-samba工具

图形界面配置Samba6.6.1 system-config-sambasystem-config-samba是Red Hat公司专门为Samba服务器管理编写的图形界面的管理工具,通过system-config-samba几乎可以完成对Samba服务器的所有配置,所以在只希望通过Samba服务器实现一些简单的资源共享时,system-config-samba是一个不错的选...

weixin_33695450的博客 2201

usbredir-0.7内容详解(二)

usbredir-0.7内容详解(二)usb_redir_interface_info/***************************************** usb_redir_header.type: usb_redir_interface_info usb_redir_header.length: sizeof(usb_redir_interface_info_heade

hubbybob1专栏 1737

SAP PS 收入确认方法配置清单(成本推导收入 / 项目进度推导收入)

摘要:本文详细介绍了SAPPS模块中两种收入确认方法的配置流程:成本推导收入(成本比例法)和项目进度推导收入(里程碑法)。通过事务码OKG1-OKG5等关键配置步骤,分别实现基于累计成本比例和里程碑完成权重的收入确认逻辑。文章对比了两种方法的适用场景和管控要点:成本法适用于成本与进度强相关的项目,需严控预计总成本;进度法则依赖明确的里程碑验收。同时提供了落地建议,包括项目类型绑定、数据校验和变更管控等最佳实践,为SAPPS系统收入确认功能实施提供完整指导。

金牌架构师 953

【肌电处理】肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率【含Matlab源码 3386期】

肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 826

SPICE USBREDIR学习笔记系列(一):USBREDIR Channel初始化

Spice Server中USBREDIR Channel初始化 首先,USBREDIR在QEMU中是一个虚拟设备而存在的。QEMU启动时将初始化该设备,为建立USB Redirect Channel做准备。 其模块定义于:hw/usb/redirect.c: static const TypeInfo usbredir_dev_info = { .name = TYPE_USB_REDIR, .parent = TYPE_USB_DEVICE, .

xiongyee的博客 1701

你学Simulink--基于储能系统的建模与仿真场景:飞轮储能系统在电网调频中的作用仿真

本文详细介绍了利用Simulink+Simscape搭建飞轮储能系统(FESS)电网调频仿真模型的全过程。主要内容包括:系统工作原理及调频作用分析,基于Simulink的模块化建模步骤(飞轮、电机/发电机、功率电子接口等组件搭建),调频控制策略实现(频率检测、功率指令生成和模式切换),以及仿真参数设置与结果分析方法。该模型可有效模拟FESS在电网频率调节中的快速响应特性,为新能源存储和智能电网研究提供重要仿真工具,同时可通过参数优化和算法改进进一步提升系统性能。

xiaoheshang_123的博客 169

关于SPICE协议的usbredir总结

用SPICE协议来进行USB透传的介绍,在SPICE官网上有:https://www.spice-space.org/usbredir.html 总结一些自己的使用心得: 在libvirt.xml创虚机时,Linux系统均可使用xhci的USB模式: &lt;controller type="usb" index="0" model="nec-xhci"/&gt; 而Window...

wingforlearn的专栏 5497

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

virt viewer Usbredir USB重定向

virt viewer Usbredir USB重定向 编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的。 virt viewer对spice-gtk的依赖关系,可以从virt viewer的configure结果...

weixin_34099526的博客 124

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

USB 重定向库usbredir的移植到Android下使用的方法总结

转载注明:http://blog.csdn.net/hubbybob1/article/details/78063443 这篇文章类似于libusb的Android下的移植,方法相通但是注意点不一样,(libusb1.0在android内的移植和使用方法 )首先下载usbredir库: https://www.spice-space.org/download/usbredir/ 或者 htt

hubbybob1专栏 2652

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

usbredir client 功能说明书

什么是usb重定向? usb redirection协议,定义了重定向一台机器上的usb设备的各种控制数据报文到另一台机器(或者虚拟机)规范,协议规范里定义了两个角色,通常物理usb设备挂载的机器可以称为源主机(usb redirection协议也称为usb-host),虚拟usb设备挂载的机器可以成为目的主机(usb redirection协议也称为usb-guest),源主机和目的主机的通信

somyjun的专栏 3686

[Spice-devel] usbredir for Windows Client

Hello, I have been scouring the internet for information on how to do this. I've successfully installed a Windows 7 VM using Virt-manager, and can connect to it with the spice client under Arch Lin...

weixin_34419326的博客 316

spice/qemu--usbredir(续)

在spice/qemu--usbredir(3)中,安装好usbredir有一些bug,U盘,usb光驱无法使用,只能使用key之类。 今天重新看了看,做了以下一些处理: 在host上目录/etc/qemu下编辑ich9-ehci-uhci.cfg文件: [device "ehci"] driver = "ich9-usb-ehci1" addr = "1d.7" mult

4053
上一篇: libusb1.0在android内的移植和使用方法
下一篇: 两种简单的方法修改Android系统下的系统默认时间
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值