Android下USB Accessory的实现分析 (四)--- AOA上层分析

本文 接着前面的文章 《Android下USB Accessory的实现分析 (三)— Android Open AccessoryProtocol》

2.2 Android上层对USBAccessory设备的处理流程

下图是g_android.ko驱动检测到USB Accessory设备之后大致的处理流程:
Android下USB Accessory的实现分析 (四)--- AOA上层分析_第1张图片

  1. 首先g_android.ko驱动发现USB Accessory设备发送了“ACCESSORY_START”控制传输命令后,会发出一个UEVENT消息(“ACCESSORY=START”)。

  2. UsbDeviceMannager内部实现了一个UEventObserver类成员(mUEventObserver),会监测usb_accessory相关的UEVENT信息,当收到"ACCESSORY=START"信息时,

  3. 开始重新设置sys.usb.config属性,并由后台的property service进程执行由init.usb.rc文件所指定的设置动作,往“/sys/class/android_usb/android0/”路径下写入对应的配置信息。

  4. 配置完成后,“/sys/class/android_usb/android0/enable”文件会被写入“1”,Android设备切换打开USB Accessory功能接口,重新执行枚举动作。枚举完成后,再发出UEVENT信息“USB_STATE=CONFIGURED”。

  5. 接下来该UEVENT信息再次被mUEventObserver所监测到,并经过几次调用,最终由UsbSettingsManager发出定义为USB_ACCESSORY_ATTACHED的Intent。如果安装有相应的应用程序,则该Intent则会激活对应的Activity开始执行。

    Framework中相关的代码路径如下:
    
Ø   frameworks\base\services\java\com\android\server\usb
Ø   frameworks\base\packages\SystemUI\src\com\android\systemui\usb
Ø   frameworks\base\services\jni\ com_android_server_UsbDeviceManager.cpp

Android对外提供的Accessory设备编程接口见如下package:

"com.android.future.usb"
"android.hardware.usb"

对应的代码路径如下:

Ø   frameworks\base\libs\usb\src\com\android\future\usb
Ø   frameworks\base\core\java\android\hardware\usb

至于如何编写应用与Accessory设备交互,可参见:
http://developer.android.com/guide/topics/connectivity/usb/accessory.html

Google官方也提供了示例代码,在源代码包的如下路径:
Ø device\google\accessory\demokit\app\src\com\google\android\DemoKit

3. 小结

Android系统对USBAccessory设备的支持,为扩展Android平台的外围设备功能,吸引更多的硬件厂商和开发者开发出更多有趣和有创新意义的应用产品提供了机会,也会让整个Android阵营变得更加丰富多彩。
本文从USB功能驱动到Android Framework层对USB Accessory的整个工作流程作了大致的说明,希望有助于有兴趣的开发者更好地理解USB Accessory的工作原理和流程。





本文参考:
Android USB Accessory分析
Android USB通讯(完整版)

Android 使用 Usb Accessory 模式与 linux 下位机进行通信

https://blog.csdn.net/dyq1991/article/category/7249114

你可能感兴趣的:(Android,USB)