我想知道是否有人可以帮忙,这有点专家的问题。我有一个应用程序,需要阅读和分析一些USB设备(不同时,他们每个运行在单独的测试,理论上可以在不同的机器上运行)。用自定义驱动程序替换Windows USB类驱动程序?
每个USB设备都基于USB HID类别,由不同的公司生产,这些USB设备都不是为在PC上运行而设计的,而是针对不同的平台,但是出于测试客户请求从PC运行测试应用程序的设备。
某些设备将启动,被windows识别,它将使用Windows内置的通用HID类驱动程序进行初始化和正确启动,然后设备将开始发送要测试的数据的正确数据包。
某些设备将启动,被Windows识别,它将尝试启动它们,但无法完全初始化它们,使它们处于半初始化状态。这很好,因为我可以使用我的Beagle协议分析器从真正的平台捕获初始化数据包,然后使用LibUSBDotNet库复制初始化序列中的剩余数据包,并让它们开始正确发送数据包。
我遇到的问题是一个特定的设备(虽然还有一些我还没有测试过,所以很可能其中的一个也可能会出现同样的问题)。问题在于Windows HID类驱动程序识别设备并尝试初始化并启动它,这可以在流行和设备开始发送数据之后生效。
问题是发送的数据与发送到真正平台(仅包含完整数据的子集)的数据不同。就好像Windows已经将设备初始化为不同的模式。
当我使用USB协议分析器从PC和正版平台捕获初始化数据包时,我发现Windows正在发送一些稍微不同的初始化数据包。一旦Windows已经启动设备,使用LibUSBDotNet重新发送正确的数据包似乎没有效果。
我的问题是,我需要停止尝试使用标准HID类驱动程序初始化设备的窗口,我试过在设备管理器中删除驱动程序,但它仍然初始化它(并且驱动程序在设备中奇迹般地重新分配经理)。我做了一些调查,并有可能的备选方案:
创建的Windows将分配给特定的VID特定的驱动程序/设备的PID,但是这并没有什么,然后我可以使用LibUSBDotNet发送正确从我自己的代码中初始化设备到设备。
使用类似了WinUSB来创建用于该设备的合适的驱动程序(或可能创建像1.
“死”驱动程序将具有特定VID驾驶员/ PID限定通过使用Windows优先于它的内置USB HID类驱动程序?如果没有,那么我会浪费我的时间沿着这条路线?
请注意,我的Mac初始化问题设备正确,我问客户的问题是否该应用程序可以为Mac开发,他们的答案令人沮丧的只有Windows。
我在编写适当的Windows驱动程序方面没有任何经验,尽管我有相当低的USB通话经验(所以部分不用太担心)。任何人都可以提出一个好的行动方案(在我可能浪费数周的时间来研究如何为PC写驱动程序,但仅仅发现我选择的行动方案不能满足我的要求)。
任何帮助或建议非常感谢。
感谢, 丰富
新增尝试以下建议后:
我使用LibUsbDotNet INF向导创建必要的文件和安装它们试图与这似乎工作 - 当然,该设备是现在作为libusb-win32设备出现在设备管理器中 - 而不是HID设备,关联的驱动程序是libusb驱动程序。即使这样做后,设备似乎仍然被初始化并开始发送错误类型的数据包,尽管现在这些数据包不再由类驱动程序处理并且丢失了。
我也遇到过Zadig,它有一个类似的WinUSB inf创建向导,这有完全一样的结果。
一位同事建议,它可能不是Windows本身,而是将设备切换到此模式,而不是设备识别它连接到Windows机器并切换到此模式。我怀疑是这样的,在这种情况下,我被困住了 - 有时间与客户进行另一次对话。
非常感谢您的帮助。
你可以提出这个问题更简洁吗?我怀疑很多人会阅读所有这些。 – 2012-01-30 09:43:44