我正在使用 C++ 和 libusb-win32 尝试与商业USB设备进行通信……我对 USB 编程了解不多,但我想通过使用嗅探器程序向我知道的设备发送一些命令。libusb-win32 看起来不错,但它看起来只能在使用libusb驱动程序的设备上使用。我想在具有 Windows usbccgp.sys 提供的驱动程序“USB 复合设备”驱动程序的设备上使用它......甚至可能吗?如果没有,我该怎么做?我只需要发送一些控制传输
1416 次
2 回答
1
目前这是不可能的。libusb 是围绕 Linux 驱动程序模型设计的,其中复合设备被系统视为单个设备。Windows 将复合设备视为多个单独的设备 - 每个接口的父复合设备和子设备。
因此,如果不先将父驱动程序更改为 libusb 支持的驱动程序,libusb 就无法访问子设备。可以完成,但该设备将无法与供应商提供的软件一起使用。
于 2018-04-27T07:53:11.777 回答
0
如果您想与商业设备通信,您需要联系制造商并了解是否有通过他们的驱动程序发布的该设备的接口。大多数制造商无法与产品中的通用控制请求进行交互。可能存在未记录的 IOCTL,但您需要再次与他们合作以获取此信息。
如果您只想挂接设备并向其发送控制请求,则需要将制造商的驱动程序替换为 libusb 驱动程序。这里的问题是,虽然您可以使用设备,但它可能无法按照您想要的方式运行,除非您欺骗制造商所做的事情(例如,设备可能期望一些供应商特定的通信来让设备准备好与主机交互) . 如果您确实看到问题,那么您可以通过一些硬件分析器查看 USB 线路来对供应商特定的协议进行逆向工程。
阅读USB Complete,它是对 USB 协议的一个很好的介绍,将帮助您更多地了解 USB 设备和您的主机 PC 之间发生的事情。
于 2014-03-31T15:19:22.990 回答