连接两个设备时是否可以使用 OTG 主机协商协议更改模式?

Is it possible to use OTG Host Negotiation Protocol to change modes while connecting two devices?

我有两个 android phone 用 OTG 电缆连接。显然,电缆迫使一个 phone 进入主机模式,另一个成为外围设备。我希望能够动态切换设备的 host/peripheral 状态而无需切换电缆,并且 OTG HNP 规范似乎表明这是可能的。我在这里找到了一些关于它的更多信息,但我不确定去哪里 - https://android.googlesource.com/kernel/msm/+/android-msm-bullhead-3.10-marshmallow-dr/Documentation/usb/msm_otg.txt

是的,这是可能的。很好地找到了非常技术性的文档。但是 Developer.android.com 站点和 USB.org 有更多关于实施的信息:

USB accessory and host modes are directly supported in Android 3.1 (API level 12) or newer platforms. USB accessory mode is also backported to Android 2.3.4 (API level 10) as an add-on library to support a broader range of devices. Device manufacturers can choose whether or not to include the add-on library on the device's system image. Link

据我所知,主机协商总是有利于像计算机这样的传统主机控制器。 Android 设备传统上是 USB 配件。但是,当您的集线器带有主机(如 PC)和插入的另一个附件时,就会出现非常复杂的情况。似乎没有办法解决关于哪个设备应该是主机的争议 Android 或电脑。例如,我将主机 PC 插入 Android 连接了 HUB 和千兆以太网加密狗的设备。我永远无法与加密狗建立连接。事实上,HNP 似乎从未发生过。

最后,文档似乎暗示Host负责操作USB Stream。看起来最有前途的是文档 Here,它确定了 USBEndpoint 的方向。