Android 开放附件协议和 MTP

Android Open Accessory Protocol and MTP

我正在做一个项目,我们的嵌入式系统同时支持 Android 开放附件协议和 USB MTP。我们遇到了一个问题,当与 Android 设备建立 AOAP 会话时 USB MTP 不起作用。我基本上迷路了,我不知道是否有可能让两者同时工作。 谁能告诉我,是否可以同时激活 USB MTP 和 AOA 会话? 另外,我正在寻找 AOA 2.0 规范?我们目前有来自第三方的 AOA 堆栈。 我从哪里可以获得 AOA 规范? 谢谢。

由于内部 USB 协议结构,不可能同时有两个 USB 会话。像 android phones 这样的 USB 设备可以实现多个设备 classes,比如大容量存储 class、RNDIS 主机(CDC class)……通常这些设备 class 是 在接口级别 上定义的。如果您使用 linux 检查 lsusb -v 的输出以查看哪些接口可用以及哪些接口处于活动状态。

在 USB 协议中,只能激活一个接口(afaik!)。这就是为什么在网络共享(CDC class,在接口级别定义)时无法访问 phone 内存(大容量存储 class)或使用 ADB(ADB 接口)的原因,你有之前切换界面。您可以做的是通过代码切换接口,但是主机必须卸载内核模块/驱动程序并加载新的内核模块/驱动程序,即如果您从 MTP USB 接口切换到 AOAP USB 接口。

一般来说,在 USB 协议中,任何通信都是由主机设备(在本例中为附件)发起的,如果您切换设备上的 USB 接口,主机必须做出反应并加载合适的内核模块/驱动程序,请参阅http://www.beyondlogic.org/usbnutshell/usb5.shtml。也许检查附件加载了哪些内核模块/驱动程序