首页> 中国专利> 一种实现android移动设备与USB OTG主机通讯的方法

一种实现android移动设备与USB OTG主机通讯的方法

摘要

本发明公开了一种实现android移动设备与USB?OTG主机通讯的方法,其通过合并Android?Open?Accessory?Protocol协议和Android?Debug?Bridge接口协议,并在固件程序中智能判断手机支持的OTG连接方式,根据判断结果选择对应的协议进行连接。本方案能够覆盖市面上所有的安卓手机设备,并且也降低了对外设的电气化要求。

著录项

  • 公开/公告号CN104572564A

    专利类型发明专利

  • 公开/公告日2015-04-29

    原文格式PDF

  • 申请/专利权人 上海动联信息技术股份有限公司;

    申请/专利号CN201510016220.8

  • 发明设计人 胡永刚;沈勇坚;王翔平;

    申请日2015-01-13

  • 分类号G06F13/42(20060101);

  • 代理机构31224 上海天翔知识产权代理有限公司;

  • 代理人刘常宝

  • 地址 201203 上海市浦东新区张江高科技园区晨晖路88号2号楼2401室

  • 入库时间 2023-12-18 08:30:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-04-20

    授权

    授权

  • 2015-05-27

    实质审查的生效 IPC(主分类):G06F13/42 申请日:20150113

    实质审查的生效

  • 2015-04-29

    公开

    公开

说明书

技术领域

本发明涉及移动设备通讯技术,具体涉及android移动设备与USB OTG主机通讯的技术。

背景技术

由于移动市场的兴起,现在人们对手机的使用性和安全性需求正在变得越来越多样,一些专业的外部设备不仅可以利用手机的便携性提升其使用空间,更可以满足用户的安全性需要,其手机外设的市场前景十分广阔。随着手机的不断升级进步,外设与手机已经可以不需要通过pc来进行连接,而是可以直接进行有线和无线的连接,来实现通讯的目的。

android手机目前已经有支持作为OTG主设备的手机出现,但是从演化来看,以前的大部分手机受到电源的限制,还是只能支持手机作为OTG从设备,

在确定USB方案后,不难发现安卓的USB方案现存两种:

一,通过android系统的Android Debug Bridge调试接口,使用其ADB daemon的tcp forward功能,可以实现基于tcp socket的主从设备通信。

ADB方案的好处有:

1,ADB damon程序原生与安卓系统中,因此从理论上说。只要是安卓系统,均存在ADB程序,只要用户打开了调试接口,即可启动ADB daemon进程,此时外设即可通过tcp socket与之建立通讯。

2,ADB于上层app之间也是通过tcp通讯,通讯相对比较简单。

但是ADB方案对于比较老版本(4.0以下)的支持比较好,对于4.2.2以上版本,无法稳定可靠的支持。为此安卓推出了secure adb来对主设备进行RSA签名,由于生成RSA秘钥对及进行RSA加密对硬件的性能要求显著,因此对于外设不易实现。

二、通过android 3.1版本提供的Android Open Accessory Protocol协议进行连接。AOA协议是android在3.1版本上引入的新的外设协议,3.1以上版 本内置jar包支持此协议,对于2.3.6-3.0版本,可以提供add-on lib进行支持。

使用AOA方案的好处有:

1,AOA原生支持android3.1以上版本;

2,application API层提供usb.accessory API套件,编写app来管理标准外设变得非常容易;

3,可以对app进行xml-filter设置,当android系统检测到有AOA外设接入后,会自动搜索已经安装的app,如果匹配成功,可自动启动app;如果没有找到匹配,可以打开外设设置的URL,引导用户去网站下载相应的app。

由上可知,现有的ADB方案和AOA方案都只能够兼容相应版本的android系统移动设备,无法实现对所有android移动设备的支持。

发明内容

针对现有android移动设备与USB OTG主机之间通讯所存在的问题,本发明的目的在于提供一种能够兼容所有android移动设备的USB OTG主机通讯方案。

为了达到上述目的,本发明采用如下的技术方案:

一种实现android移动设备与USB OTG主机通讯的方法,所述方法在固件程序中合并Android Open Accessory Protocol协议和Android Debug Bridge接口协议,并在固件程序中智能判断手机支持的OTG连接方式,根据判断结果选择对应的协议进行连接。

在本方案的优选方案中,所述方法中在应用程序根据Android Open Accessory Protocol协议和Android Debug Bridge接口协议内置形成支持两种连接协议的连接方式。

进一步的,所述固件程序连接USB OTG主机的过程如下:

(1)设备接入后,固件程序发起USB连接,枚举USB描述符;

(2)完成USB枚举后,发起AOA协议连接,尝试打开accessory mode模式,如果打开失败,延长reset时间,并重复尝试;

(3)在所有尝试失败以后,reset设备,然后通过ADB协议发起ADB连接,指导连接成功。

进一步的,所述应用程序连接USB OTG主机的过程如下:

(11)应用程序启动后,首先通过usb.usbmanager获取AOA协议的accessory类列表,如果手机固件程序能支持AOA协议,则此List表,即accessory类列表,中包含有效的设备ID,可以直接通过ID进行通信;

(12)若List表为空,则建立socket server并监听端口,等待adbd的socket连接。

本方案通过固件对设备的判断,可以智能选择两种连接方式进行OTG连接并进行通讯,最大限度的兼容了android设备的多样性,并且由于android4.2设备需要进行RSA鉴权,需要极大的运算要求,故采用AOA协议可以规避鉴权操作,减少了对外界设备的要求。

具体实施方式

为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面进一步阐述本发明。

本发明为了实现对安卓的支持最大化以及连接可靠性,本发明将AOA协议和ADB接口协议在固件程序中合并,并在固件程序中智能判断手机支持的OTG连接方式,根据判断结果选择对应的协议进行连接。

由此,该固件程序实现手机连接USB OTG设备的过程如下:

(a)设备插入后,开始进行USB设备枚举过程;

(b)枚举完成后,首先进行AOA协议连接; 

(c)如果连接失败,设置reset时间,重启设备,进行最多3次尝试;

(d)若连接成功,开始以AOA协议进行通信;若不成功,则继续;

(e)开始ADB连接,发送host请求;

(f)若连接成功,以ADB协议开始通信;若不成功,则连接失败。

针对一般的手机应用程序(APP),基于上述的AOA协议和ADB接口协议合并的方案,在应用程序中内置形成支持两种连接协议的连接方式。

据此,应用程序连接USB OTG设备的过程如下:

(a)当满足AOA协议的设备插入手机,运行于手机上的android系统将自动识别并启动对应的应用,在APP中初始化部分,首先通过新建 UsbAccessory对象与外设进行连接,如果连接成功,则通过Usb Accessory对象进行通信;

(b)如果连接不成功,则尝试ADB连接,通过ADB的转发功能,建立socket client端、端口4567,对server发起socket连接;若连接成功,则ADB通道建立,使用socket通信;

(c)若socket建立超时(如超过20秒),则协议不支持,返回连接失败。

基于上述两种方案,可以覆盖市面上所有的安卓手机设备,并且也降低了对外设的电气化要求。

在具体实现时,为了实现对安卓系列手机的全兼容,可选取MCU外接设备作为OTG master,手机作为从设备的方案。在连接时,包括固件程序连接和应用程序连接两种。

其中,固件程序连接USB OTG主机的过程如下:

(1)设备接入后,固件程序检测到设备插入信号之后立即发起USB连接,枚举USB描述符,具体包括设备描述符、配置描述符、接口描述符和端点描述符,这里的描述符指设备的信息特征。

(2)完成USB枚举后,发起AOA协议连接,尝试打开accessory mode模式,如果打开失败,延长reset时间,并重复尝试。

该步骤进行AOA协议连接的具体过程如下:

(21)首先判断手机是否处于accessory模式:如果是,则可以直接通信;如果不是,继续;

(22)发送getProtocol指令,获取硬件支持的版本信息;

(23)发送getInfo指令,获取硬件设备信息,如:manufacturer name、model name、description、version、URI、serial number等;

(24)发送startup指令,激活手机的accessory模式;

(25)激活完成以后,检查手机是否处于accessory模式,具体方式可以为:查看手机PID是否为0x2D00或者0x2D01,VID是否为googleID:0x18D1;

(26)尝试打开accessory mode模式,如果打开失败,延长reset时间,该reset时间是指USB总线复位时间,并重复尝试,转到步骤a。

(3)在所有尝试失败以后,reset设备,然后通过ADB协议发起ADB连 接,指导连接成功。

该步骤在实现ADB连接时,由固件程序建立一个端口为4567的socket server来接受APP中client的连接请求,具体步骤如下:

(a)MCU先向手机发送host connect请求,手机如果回了connect device信号,则建立了ADB连接;

(b)然后主机打开一个4567的端口,手机端会回一个OK的信号;

(c)连接成功,等待client端connect请求。

基于上述方案,完成固件程序连接USB OTG主机后,运行于手机中的应用程序连接USB OTG主机的过程如下:

(11)应用程序启动后,首先通过usb.usbmanager获取AOA协议的accessory类列表,如果手机固件程序能支持AOA协议,则此List表中包含有效的设备ID,可以直接通过ID进行通信。

该步骤中,获取accessory类列表时,由于com.android.usb.usbmanager包里有接口获取到的连接到手机的AOA协议的外设列表,此列表包含了当前连接到手机的所有AOA设备,获取到此列表,可以通过UsbAccessory对象对设备进行操作。

该步骤中,手机固件程序通过发送getProtocol命令,根据getProtocol命令的格式来获取到当前连接设备支持的AOA版本。

这里需要说明的,List表为前述通过usbmanager获取到的accessory类列表,其在app中表示为一个List列表。这里的设备ID为ProductID,一般为0x2D00或者0x2D01,即表示该设备已进入accessory模式;若进入accessory模式的设备可以通过usbAccessory对象中的instream和outstream成员对象进行流数据的输入输出。

(12)若List表为空,则建立socket server并监听端口,等待adbd的socket连接。

该步骤中,通过调用List.size()函数来确定List表是否为空,如果为0则表示空,此时说明没有AOA设备,下一步将通过ADB的socker方式来尝试连接。

其中,建立监听端口由APP代码完成,通过socket标准API建立一个4567 的server,并监听是否有连接到端口4567的client请求,该请求由adbd发出。

这里的adbd为android debug bridge deamon,是安卓手机内置的调试驻守程序,其开机即启动并常驻内存中,负责对手机进行操作。

可见,本方案通过固件对设备的判断,可以智能选择两种连接方式进行OTG连接并进行通讯,最大限度的兼容了android设备的多样性;同时采用AOA协议可以规避鉴权操作,减少了对外界设备的要求。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号