embedded - 即时更改 USB 配置/接口;由设备发起
问题描述
我正在开发一个 USB MIDI 设备,它将用作无线系统的接收器。该设备将通过无线电模块与发射器进行双向通信,发射器是在 USB 主机模式下运行的单独硬件。
接收器将插入 PC。插入发射器的 MIDI 设备需要在 PC 上显示为 MIDI 端口。由于发射器支持 USB 集线器,因此可以插入多个设备。
我不能 100% 满足两个要求:
1.) PC端的MIDI端口名称需要反映插入发射器的USB设备提供的名称,以便清楚该端口用于哪个设备。
2.) 当设备从发射器插入/拔出时,PC 上的一组 MIDI 端口需要更新。这是问题的症结所在:有没有办法更新设备启动的可用 USB 接口/MIDI 插孔?
这样做的蛮力方法是在接收器从发送器接收到发生更改的消息时完全重置接收器(在重置时,接收器将轮询发送器以查找当前设备并在主机时提供更新的信息PC 重新枚举)。
发送器/接收器硬件均基于 PIC32MZ MCU(无 RTOS)。我很擅长编写 USB 代码来让主机/接收器端做任何事情。问题在于如何在 USB 协议级别上做到这一点。
另外,要明确一点:发送器/接收器通信将是一个自组织协议,接收器将自行设置其所有 USB 配置数据;这个想法不是试图通过无线链路无缝枚举设备。
解决方案
要在 PC 上显示端口名称,只需将 USB 描述符字符串复制到发送器即可。
USB 设备更改其配置的唯一方法是重置自身,就好像它已被拔出一样,并让主机重新枚举它。因此,防止多个设备相互干扰的唯一方法是在接收器上安装多个(虚拟)USB 设备。如果您的硬件不支持这一点,那么您将无法避免重置。
推荐阅读
- python - 索引与 Python 2D 列表匹配的列的总和
- twincat - 我可以在 TwinCAT 中 gitignore .tmcRefac 和 .tpr 文件吗?
- ethereum - 创建像煎饼交换一样的交换/交换时出错(JSON RPC 错误)
- visual-studio - Visual Studio 2022:整个编辑器中的粗体字体
- next.js - 如何解决 Next.js 中间件不工作?
- javascript - 您如何配置 HERE Maps Javascript 以自动设置所需的缩放值?
- performance - 我收到一个令牌错误,但在脚本中令牌正在通过并且 API 正在失败
- segmentation-fault - 使用堆栈时出现分段错误,但使用堆时可以正常工作?
- apache-spark - 我们可以使用 spark from_json 来解析联合类型的字段吗?
- regex - 正则表达式来挑选单词/字符之间的关键信息