安卓USB开发教程 <五> 安卓 AOA 1.0
来源:互联网 发布:.手机域名有多少人注册 编辑:程序博客网 时间:2024/05/21 20:28
Android Open Accessory Protocol 1.0(AOA 协议 1.0)
Android USB 配件必须遵从 Android Open Accessory(AOA)协议,该协议定义了配件如何检测和建立与 Android 设备的通信。配件应执行以下步骤:
1. 等待并检测连接的设备
2. 确定设备的配件模式支持
3. 尝试以配件模式下启动设备(如果需要)
4. 如果设备支持 AOA,与设备建立通信
以下部分介绍如何实现这些步骤。
Note:在开发通过 USB 连接到 Android 设备的新配件时,请使用 AOAv2。
等待并检测连接的设备
配件应该连续检查连接的 Android 设备。连接设备时,配件应确定设备是否支持配件模式。
确定配件模式支持
当连接 Android 设备时,它可以是以下三种状态之一:
1. 支持 Android 配件模式,并已经处于配件模式。
2. 支持 Android 配件模式,但不处于配件模式。
3. 不支持 Android 配件模式。
在初始连接期间,附件应检查连接设备的 USB 设备描述符的厂商 ID 和产品 ID。厂商 ID 应该匹配 Google 的 ID(0x18D1)。如果设备已经处于配件模式,产品 ID 应为0x2D00 或 0x2D01,配件可以使用自己的通信协议通过批量传输端点 establish communication with the device(设备不需要在附件模式下启动)。
Note:0x2D00 保留给支持配件模式的 Android 设备。0x2D01保留用于支持配件模式的设备以及 Android Debug Bridge(ADB)协议,该协议显示了用于 ADB 协议的有两个批量端点的第二个接口。如果你正在计算机上模拟配件,可以使用这些端点来调试配件应用程序。通常,不要使用此接口,除非配件在设备上实现到 ADB 的传输。
如果 USB 设备描述符中发现的厂商 ID 或产品 ID 与预期值不匹配,则配件无法确定设备是否支持 Android 配件模式。配件应尝试以配件模式(详细说明如下)启动设备,以确定设备支持情况。
尝试从配件模式启动
如果厂商和产品 ID 与配件模式下的 Android 设备不相符,则配件无法辨别设备是否支持(支持但不处于)配件模式,或者设备是否不支持配件模式。这可能是因为支持配件模式(但不处于配件模式)的设备最初报告设备制造商厂商和产品 ID 而不是 AOA 厂商和产品 ID。
配件应尝试以配件模式启动设备,以确定设备是否支持该模式:
1. 发送 51 控制请求(“Get Protocol”)以确定设备是否支持 Android 配件协议。如果设备支持协议,则返回非零数字,表示支持的协议版本。控制请求在端点0上具有以下特征:
requestType: USB_DIR_IN | USB_TYPE_VENDORrequest: 51value: 0index: 0data: protocol version number (16 bits little endian sent from the device to the accessory)
2. 如果设备返回支持的协议版本,则向设备发送带有标识字符串信息的控制请求。该信息允许设备确定适合配件的应用(或者向用户呈现 URL 若不存在适合的应用)。控制请求位于端点0(对于每个字符串 ID),具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDORrequest: 52value: 0index: string IDdata zero terminated UTF8 string sent from accessory to device
支持以下字符串ID,每个字符串的最大为256字节(必须以 \ 0 为零终止)。
manufacturer name: 0model name: 1description: 2version: 3URI: 4serial number: 5
3. 发送控制请求,要求设备以配件模式启动。控制请求在端点0上具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDORrequest: 53value: 0index: 0data: none
完成这些步骤后,配件应等待连接的 USB 设备在配件模式下将其自身重新引入总线,然后重新枚举所连接的设备。如果设备成功切换到配件模式,则通过检查厂商和产品 ID 的算法determines accessory mode support 应该是正确的(例如,对应于Google的供应商和产品ID而不是设备制造商的ID)。如果 ID 正确,则配件移动至 establish communication with the device。
Note:AOA 当前不支持同时进行 AOA 和 MTP 连接。 要从 AOA 切换到 MTP,配件必须首先断开 USB 设备(物理上或电气上等效的方式),然后使用 MTP 重新连接。
如果任何步骤失败,配件确定设备不支持 Android 配件模式,并等待下一个设备连接。
建立与设备的通信
如果配件检测到处于配件模式的 Android 设备,则配件可以查询设备接口和端点描述符,以获取与设备通信的批量端点。
接口和批量端点的数量取决于产品 ID。 Android 设备有产品 ID:
1. 0x2D00 具有一个有两个批量端点的接口,用于输入和输出通信。
2. 0x2D01 具有两个接口,每个接口具有两个批量端点,用于输入和输出通信。 第一个接口处理标准通信,第二个接口处理 ADB 通信。 要使用接口,请找到第一个批量输入和输出端点,使用 SET_CONFIGURATION(0x09)设备请求将设备配置设置为 1,然后使用端点进行通信。
原文链接:https://source.android.com/devices/accessories/aoa
- 安卓USB开发教程 <五> 安卓 AOA 1.0
- 安卓USB开发教程 <四> 安卓 AOA
- 安卓USB开发教程 <六> 安卓 AOA 2.0
- 安卓USB开发教程 <一> USB Host 与 Accessory
- 安卓USB开发教程 <二> USB Host
- 安卓USB开发教程 <三> USB Accessory
- 安卓usb通讯
- 安卓 USB通信
- 安卓开发教程 - 搭建开发环境
- 安卓教程第一篇 认识安卓项目开发
- 安卓手机用USB连接电脑上网教程
- 安卓开发之多线程编程教程
- 安卓开发教程与资料
- 安卓开发环境搭建教程
- 惠州安卓手机应用开发教程
- 安卓开发全教程(汇总)
- 安卓传统蓝牙开发教程
- 安卓的蓝牙全面开发教程
- AGC 017D Game On Tree 博弈(Hackenbush删边)
- spring @value() 获取配置文件内容
- 走楼梯问题
- 监听软键盘 弹起 关闭
- VUE权威指南-第二章 数据绑定
- 安卓USB开发教程 <五> 安卓 AOA 1.0
- Hibernate中的Criteria
- 尺度空间理论
- mosquitto移植笔记
- shu 419 膜一下将带给你好运
- 利用xshell上传/下载文件
- Nodejs get获取远程服务器接口数据
- C++ 11 新特性noexpect
- 代码复用--Bootstrap模态框