7

我想用我的应用程序把我的电脑变成一个安卓配件。因此,这将不是专门的硬件,而是将手机切换到附件模式的 PC,从而在手机上启动与主机硬件相关联的一些 Java 应用程序并创建通信通道。

我找到了使用 libusb 在 Linux 上执行此操作的示例代码(以及一些 Java Android 应用程序)。它通过使用标准 VID 和 PID “打开”手机来工作。然后它发送一个打开附件模式的命令,以及模型、版本等元数据。

如果手机支持附件模式,它将断开连接并使用不同的 PID 重新枚举。示例代码然后检查它是否这样做并打开新设备。

但是,我试图让它在 Windows 上运行。我找到了一些 USB 库,例如LibUsbDotNet,但它们似乎都需要使用 WinUSB/libusb 驱动程序的设备。我使用 LibUsbDotNet 中的工具为我的手机生成 libusb 驱动程序,将其安装在旧的通用可移动驱动器上。但这意味着我现在无法将手机作为可移动驱动器访问,因此这不是解决方案。

有没有一种方法(最好是库)可以根据 VID 和 PID 打开任何连接的 USB 设备,然后向它发送一些原始命令?

之后,设备将使用不同的 PID 重新枚举,我可以使用它来创建自己的 WinUSB 驱动程序,所以这不是问题。我只需要通过/围绕默认驱动程序注入一些命令来打开附件模式。

(我更喜欢 .NET 解决方案,但任何 Windows 都可以,我可以编写自己的互操作包装器)

4

1 回答 1

0

我也在寻找类似的解决方案。我尝试了带有 libusb 的 Linux 版本,几乎没有任何问题,能够与设备通信。在 Windows 上搜索解决方案时,我尝试了许多 hack。如果需要在 ADK 模式下与设备通信,我需要发送几个供应商命令,现在我需要在大容量存储模式下连接时执行此操作。使用大容量存储驱动程序是不可能的。我试图获取连接的 USB 设备的节点句柄,看看是否可以发送供应商命令,但我只能提交 Get Descriptor 请求。所以我采用了丑陋的方法,用 libusb-win32 替换了大容量存储驱动程序,看看它可以做同样的事情,是的,它有效,但根本不是一个好的解决方案。

仍在搜索中..

于 2013-06-02T16:23:10.613 回答