安卓USB开发教程 <五> 安卓 AOA 1.0
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_VENDOR request: 51 value: 0 index: 0 data: protocol version number (16 bits little endian sent from thedevice to the accessory)
2. 如果设备返回支持的协议版本,则向设备发送带有标识字符串信息的控制请求。该信息允许设备确定适合配件的应用(或者向用户呈现 URL 若不存在适合的应用)。控制请求位于端点0(对于每个字符串 ID),具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 52 value: 0 index: string ID data zero terminated UTF8 string sent from accessory to device
支持以下字符串ID,每个字符串的最大为256字节(必须以 \ 0 为零终止)。
manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
3. 发送控制请求,要求设备以配件模式启动。控制请求在端点0上具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: 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,然后使用端点进行通信。
安卓USB开发教程 <五> 安卓 AOA 1.0相关推荐
- 安卓USB开发教程 五 安卓 AOA 1.0
Android Open Accessory Protocol 1.0(AOA 协议 1.0) Android USB 配件必须遵从 Android Open Accessory(AOA)协议,该协议 ...
- 安卓USB开发教程 四 安卓 AOA
Android 开放性配件协议(AOA) Android 开放性配件协议(AOA)支持允许外部 USB 硬件(Android USB 配件)与工作在配件模式下的 Android 设备进行交互.当处于配 ...
- 安卓USB开发教程 六 安卓 AOA 2.0
Android Open Accessory Protocol 2.0 目录 Detecting AOAv2 support Audio support HID support Interoperab ...
- 安卓USB开发教程 一 USB Host 与 Accessory
安卓通过两种模式:USB Accessory 与 USB Host 模式支持多种 USB 外设与安卓 USB 配件(实现安卓配件协议的硬件).在 USB 配件模式下,外部 USB 硬件充当 USB 主 ...
- 安卓USB开发教程 三 USB Accessory
USB Accessory(配件模式) USB 配件模式允许用户连接专为 Android 设备设计的 USB 主机硬件.配件必须遵守 Android Accessory Development Kit ...
- 安卓USB开发教程 二 USB Host
USB Host(主机模式) 当 Android 设备处于 USB 主机模式时,它充当 USB 主机,为总线供电,并枚举连接的 USB 设备.Android 3.1 及更高版本支持 USB 主机模式. ...
- 安卓rom开发教程!安卓工程师跳槽经验分享,吐血整理
背景 经常有网友在知乎问答提两个问题:"现在学习移动开发还有前景吗?""开发还有什么可以研究的?".网友回复:"现在还学移动开发?如同49年加入国军! ...
- 【安卓USB开发】让手机与物联网设备鹊桥相会
安卓USB开发详解 一.前言 1.是什么 2.为什么 3.怎么做 二.简析USB 1.外部总线标准 2.主从结构星型拓扑 3.自.总供电模式 4.OTG 5.数据传输模式 6.小结 三.安卓USB开发 ...
- Android APP 快速开发教程(安卓)
Android APP 快速开发教程(安卓) 前言 本篇博客从开发的角度来介绍如何开发一个Android App,需要说明一点是,这里只是提供一个如何开发一个app的思路,并不会介绍很多技术上的细节, ...
最新文章
- python 16进制转10进制, 8进制转10进制, 2进制转10进制的方法
- hfss13.0安装教程
- java byte(字节_【原创】Java中Byte字节流处理的自定义方法库2
- Laravel 实现定时任务
- android 骨骼动画库,cocos creator spine骨骼动画组件使用
- Centos6的VSFTP服务器配置使用教程
- Java 解决跨域问题
- IDEA项目 let报错爆红
- 文具用品分类html,中国商品分类.doc
- app/bootstrap.php.cache : failed to open stream: No such file or directory
- jquery中的live()方法
- nginx try_files
- 二级c语言编程题库100题,计算机二级C语言编程题库100题(70页)-原创力文档
- 51单片机(AT89S52)设计简单计算器(4位加减乘除)
- 高中计算机学科关于德育的论文,浅析如何在信息技术教学中实现德育教育
- Cisco交换机与路由器登陆密码破解(保存原配置)
- linux关机卡屏,Ubuntu关机卡住无法关机的解决方法
- Rust游戏引擎Bevy初探
- CSS学习之圆、半圆、四分之一圆以及三角形的创建
- python,list元素倒置