• Android USB分析


    先下一个定论,常规来讲,所有作slave的android设备都是配件,作为主机的android设备还是叫Host。此外还有usb tethering支持的radnis功能以及ncm功能,这两个是网络相关的usb应用,使用usb模拟网卡。其中radnis属于上网能力,有配套的iptables;ncm属于局域网功能,仅支持点对点通信。

    配件模式

    作为配件模式,需要监听广播ACTION_USB_ACCESSORY_ATTACHED和ACTION_USB_ACCESSORY_DEATTACHED,这里有一个问题。android设备目前默认是支持AOA的,但是作为配件的android设备在插入android设备后并不会收到ACTION_USB_ACCESSORY_ATTACHED,仅仅作为Host的usb主设备可以收到。

    参考代码:

    AccessoryDisplay/source/src/com/android/accessorydisplay/source/SourceActivity.java
    AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/SinkActivity.java

    Usb从设备通过监听/devices/virtual/misc/usb_accessory的uevent时间确认是否开启配件模式。

    这个设计原理可以这么想,作为usb主机刚开始我仅仅知道有一个设备通过usb和我连接在一起,底层默认支持配件,但是主机上层并不知道。对于主机来讲我只知道一个usb设备和我连接了,但是具体他是什么成分我并不关心,但是用户使用的目标app往往是清楚的,所以app会引导用户开启配件模式。

    总结

    USB复杂的东西大多在bsp这部分,从上电到全速、高速、低速几种方式的认证以及设备树的枚举过程。对于framework而言,实现的东西比较少。

  • 相关阅读:
    Linux shell 脚本学习
    cocos入门7:cocos creator 中的ui系统
    sed编辑器
    服务器常用端口号及作用
    传统企业如何实现数字化转型?这套方法论超实用!
    算法第六节
    调试平衡小车过程中间遇到的问题
    【21天学习挑战赛】快速排序
    云原生【Docker】—— 认识 Docker、Docker 与虚拟机对比、Docker 组件
    设置渐变边框色
  • 原文地址:https://blog.csdn.net/shanbl_linux_android/article/details/133859181