2023年12月18日发(作者:声音景)
协议概述
基于AOA协议实现Android终端USB通信方式称为配件模式。此模式下,与Android终端通信的另一端设备称为Android配件,两者都必须支持AOA协议。在USB通信过程中,Android终端充当USB从机,Android配件充当USB主机并为总线供电。Android配件需具有USB主控制器功能并移植有AOA协议。配件内置USBEmbeddedHost端,可以为Android手机供电,并且识别Android手机,建立数据通道。使得配件成为一个简化版的PCHost端。?配件还必须提供500毫安在5V供电电源。
图1-1USB配件模式框图
协议工作过程
图2-1AOA协议整体交互图
1.配件端等待手机连接。
2.手机接入配件。
3.配件通过USB驱动的控制通道(0通道,端点0)获取手机的vendorID与productID。
4.配件分析获取的vendorID是否为0x18D1,以及productID是否为0x2D01,0x2D02,0x2D03或0x2D04。如果均符合,则说件现在手机已经是配件模式,可以按照配件模式的要求直接重新配置USB端点和接口。否则启动尝试进入配件模式流程。
5.确定手机已经进入配件模式,重新枚举USB设备,手机重新进行USB协商。
6.按照配件模式重新配置USB端点和接口,建立配件模式的数据通道。
图2-1启动配件模式交互流程
尝试启动配件模式交互流程:
1.配件发送序号51的USB请求报文,手机收到后查询自己的AOA协议版本,发送响应报文给配件。
精心整理
2.配件校验协议版本号,目前为1或2,其他的均为不支持。
3.配件发送序号52的USB请求报文,通过Index字段携带配件自身信息,包括制造商,型号,版本,设备描述,序列号,URI等。手机根据这些信息启动响应的APP。
4.配件发送序号53的USB请求报文,切换USB模式,主要是根据切换vendorID和productID。
5.重新枚举USB设备,准备建立AOA数据通道。
参考:AndroidOpenAccessory协议分析与开发
的设备握手过程
绝大多数Android设备,在缺省情况下都不挂载Accessory驱动;在Accessory与Android设备建立USB连接时;Accessory会通过握手协议查询该设备是否为Android设备且具有AOA支持,如果获得正确应答,Accessory会向Android设备发出切换到AOA模式的请求,Android设备会执行请求,将USB切换到AOA模式;在这个过程中,USB连接会出现一次逻辑插拔,USBHost一端会重新枚举设备。
在握手过程中,Accessory会向Android提供AOA约定的描述信息,其中有三个信息是Android系统用于绑定Accessory设备与App的;分别是:manufacturer、model、version。Android系统根据这三个字符串匹配相应的App。
如果系统内无任何App可以匹配Accessory设备发来的握手信息;则Android设备会弹出一个对话框,向用户提供Accessory设备发送过来的描述信息和URL信息,用户可以点击URL访问它指向的Web页面。
如果系统内有App可以匹配Accessory设备发来的握手信息;则Android会弹出一个对话框询问用户是否立刻启动该App;如果用户选择OK则启动该App;同时该对话框提供一个勾选框,勾选之后每次Accessory设备连接后会自动启动该App;应该要求用户勾选该对话框,否则App启动后向USBManager获取Accessory设备后可能因为Permission问题无法打开文件描述符建立通讯连接。
参考:
精心整理
4.注意
是0x2D00保留给支持附件模式的Android设备。0x2D01保留用于支持附件模式以及Android调试桥(ADB)协议的设备,第二个接口为ADB并且具有两个批量端点。如果要在计算机上模拟附件,可以使用这些端点来调试附件应用程序。一般来说,不要使用此接口,除非附件在设备上实现传输到ADB。
0x2D00具有一个拥有两个批量端点的接口,用于输入和输出通信的。
0x2D01具有两个接口,每个接口具有两个批量端点,用于输入和输出通信。第一个接口处理标准通信,第二个接口处理ADB通信。要使用接口,请找到第一个批量输入和输出端点,使用SET_CONFIGURATION(0x09)设备请求将设备配置设置为1,然后使用端点进行通信。
目前不支持同时进行的AOA和MTP(MediaTransferProtocol,媒体传输协议)连接。要从AOA切换到MTP,附件必须首先断开USB设备(物理上或电气上等效的方式),然后使用MTP重新连接。
AOAPID说明:
版本
AOAv1
ProductID
0x2D00
0x2D01
通信模式
accessory
accessory+adb
说明
提供与Android应用程序通信的两个批量端点。
用于附件开发时的调试。仅当用户在Android设备设置中启用了USB调试功能时才可用。
AOAv2
精心整理
0x2D02
0x2D03
0x2D04
0x2D05
audio
audio+adb
accessory+audio
accessory+audio+adb
用于将音频从Android设备传输到附件。
2023年12月18日发(作者:声音景)
协议概述
基于AOA协议实现Android终端USB通信方式称为配件模式。此模式下,与Android终端通信的另一端设备称为Android配件,两者都必须支持AOA协议。在USB通信过程中,Android终端充当USB从机,Android配件充当USB主机并为总线供电。Android配件需具有USB主控制器功能并移植有AOA协议。配件内置USBEmbeddedHost端,可以为Android手机供电,并且识别Android手机,建立数据通道。使得配件成为一个简化版的PCHost端。?配件还必须提供500毫安在5V供电电源。
图1-1USB配件模式框图
协议工作过程
图2-1AOA协议整体交互图
1.配件端等待手机连接。
2.手机接入配件。
3.配件通过USB驱动的控制通道(0通道,端点0)获取手机的vendorID与productID。
4.配件分析获取的vendorID是否为0x18D1,以及productID是否为0x2D01,0x2D02,0x2D03或0x2D04。如果均符合,则说件现在手机已经是配件模式,可以按照配件模式的要求直接重新配置USB端点和接口。否则启动尝试进入配件模式流程。
5.确定手机已经进入配件模式,重新枚举USB设备,手机重新进行USB协商。
6.按照配件模式重新配置USB端点和接口,建立配件模式的数据通道。
图2-1启动配件模式交互流程
尝试启动配件模式交互流程:
1.配件发送序号51的USB请求报文,手机收到后查询自己的AOA协议版本,发送响应报文给配件。
精心整理
2.配件校验协议版本号,目前为1或2,其他的均为不支持。
3.配件发送序号52的USB请求报文,通过Index字段携带配件自身信息,包括制造商,型号,版本,设备描述,序列号,URI等。手机根据这些信息启动响应的APP。
4.配件发送序号53的USB请求报文,切换USB模式,主要是根据切换vendorID和productID。
5.重新枚举USB设备,准备建立AOA数据通道。
参考:AndroidOpenAccessory协议分析与开发
的设备握手过程
绝大多数Android设备,在缺省情况下都不挂载Accessory驱动;在Accessory与Android设备建立USB连接时;Accessory会通过握手协议查询该设备是否为Android设备且具有AOA支持,如果获得正确应答,Accessory会向Android设备发出切换到AOA模式的请求,Android设备会执行请求,将USB切换到AOA模式;在这个过程中,USB连接会出现一次逻辑插拔,USBHost一端会重新枚举设备。
在握手过程中,Accessory会向Android提供AOA约定的描述信息,其中有三个信息是Android系统用于绑定Accessory设备与App的;分别是:manufacturer、model、version。Android系统根据这三个字符串匹配相应的App。
如果系统内无任何App可以匹配Accessory设备发来的握手信息;则Android设备会弹出一个对话框,向用户提供Accessory设备发送过来的描述信息和URL信息,用户可以点击URL访问它指向的Web页面。
如果系统内有App可以匹配Accessory设备发来的握手信息;则Android会弹出一个对话框询问用户是否立刻启动该App;如果用户选择OK则启动该App;同时该对话框提供一个勾选框,勾选之后每次Accessory设备连接后会自动启动该App;应该要求用户勾选该对话框,否则App启动后向USBManager获取Accessory设备后可能因为Permission问题无法打开文件描述符建立通讯连接。
参考:
精心整理
4.注意
是0x2D00保留给支持附件模式的Android设备。0x2D01保留用于支持附件模式以及Android调试桥(ADB)协议的设备,第二个接口为ADB并且具有两个批量端点。如果要在计算机上模拟附件,可以使用这些端点来调试附件应用程序。一般来说,不要使用此接口,除非附件在设备上实现传输到ADB。
0x2D00具有一个拥有两个批量端点的接口,用于输入和输出通信的。
0x2D01具有两个接口,每个接口具有两个批量端点,用于输入和输出通信。第一个接口处理标准通信,第二个接口处理ADB通信。要使用接口,请找到第一个批量输入和输出端点,使用SET_CONFIGURATION(0x09)设备请求将设备配置设置为1,然后使用端点进行通信。
目前不支持同时进行的AOA和MTP(MediaTransferProtocol,媒体传输协议)连接。要从AOA切换到MTP,附件必须首先断开USB设备(物理上或电气上等效的方式),然后使用MTP重新连接。
AOAPID说明:
版本
AOAv1
ProductID
0x2D00
0x2D01
通信模式
accessory
accessory+adb
说明
提供与Android应用程序通信的两个批量端点。
用于附件开发时的调试。仅当用户在Android设备设置中启用了USB调试功能时才可用。
AOAv2
精心整理
0x2D02
0x2D03
0x2D04
0x2D05
audio
audio+adb
accessory+audio
accessory+audio+adb
用于将音频从Android设备传输到附件。