我需要编写一个客户端 - 服务器应用程序,其中一个小型服务器放在USB小工具上,并与主机上的客户端应用程序通信。
我之前没有做过这类事情,但我已经完成了webapps,通常,它们都是使用lo
环回网络接口在本地机器上开发和调试的。这可能影响了我的思维方式,我正在寻找一种在我的机器上模拟USB主机和小工具的方法,这样我就可以在我的PC上完全构建应用程序的两端,然后再深入了解实际的小工具并获得事情进行着。
这是正确的方法吗?我意识到USB协议是不对称的,并且在here上找到了一些参考,但它似乎是最自然的方式。
如果这是正确的方式,我该如何从这样的事情开始,是否存在其他人可能发现的潜在问题,我可能会偶然发现这些问题?
我之前在谷歌搜索中找到的参考文献。有Linux内核模块(我的Ubuntu安装的一部分)似乎能够模拟主机和小工具端(分别是dummy_hcd和gadgetfs)。我的想法是简单地拥有像
这样的东西Host application (client) on PC <-> device file 0 <-> Loopback device <-> device file 1 <-> Gadget application (server) also on PC (will be moved to gadget).
答案 0 :(得分:5)
不要过度思考。
您不需要想要“环回”设备。
你是关于模拟USB主机的。您不需要创建花哨的USB环回设备或任何类似的愚蠢。
设计您的客户。
设计一个“通用”USB接口层,只需将请求传递给真正的USB设备驱动程序。不要编码。
编码USB接口层,模拟主机,而不是使用真正的USB设备。 它具有与通用USB接口相同的接口。这是一个合适的子类。 但是,它实际上并不使用USB设备驱动程序。相反,它就像它的行为 USB设备上的Web服务器。
显然,这不是一个完整的模拟。这足以让您测试您的客户端。 客户端必须与之交互的每个关键功能都用足够的罐头表示 您确定客户端有效的回复。
当您的客户端工作时,请编写真正传递请求的真实USB接口层 从客户端到设备。这是您将在生产中使用并进行集成 使用真正的USB设备进行测试。
您的客户端软件现在有两种配置 - 全部用软件处理:
真正的驱动力 - 用于生产。
模拟驱动程序 - 用于单元测试。
它不应该比这更复杂。而且,您现在可以使用模拟主机对整个客户端进行单元测试。
答案 1 :(得分:1)
虽然你在寻找技术上是可行的,但我会说它很难实现,因为它涉及创建一个模拟真实USB设备的USB驱动程序。
我可以推荐几种替代品。首先,您可以选择使用虚拟COM端口通过USB进行通信。可以使用简单的串行接口开发和测试主机软件。另一种解决方案是首先创建业务逻辑部分,使用软件模拟器对其进行测试,然后转移到硬件部分。
最后,如果您还不知道,请查看libusb库。
答案 2 :(得分:0)
我建议你让设备看起来像普通的USB网络适配器。 然后服务器就是Web服务器,用户不需要安装软件。 然后在你的电脑上进行测试就像你以前一样完全相同。
或者让它看起来像USB串行设备,并在其上放置一个SLIP链接(这很容易)
如果您真的需要一个奇怪的协议,请使用USB开发套件,就像微芯片USB PIC套件之一一样。然后编程目标系统并从主机PC运行。