USB framework层源码分析

USB framework层源码分析(一)

因为之前做过一段时间的USB上层,想着不能光研究,不总结,在这里记录一下,让自己以后也能回忆一下青葱岁月。

和其他系统应用类似,USB的启动也是在SystemServer那边拉起来;需要注意的是startService是通过反射机制创建实例并启动Service的,这里不做赘述;

           if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
          		  || mPackageManager.hasSystemFeature(
           		 PackageManager.FEATURE_USB_ACCESSORY)
          		  || isEmulator) {
          		  // Manage USB host and device support
         		   traceBeginAndSlog("StartUsbService");
       		     mSystemServiceManager.startService(USB_SERVICE_CLASS);
     		       traceEnd();
           }

之后在UsbService那边初始化USB的关键类,在我看来,比较重要的是以下几个类:
UsbDeviceManager.java //在我看来这是最重要的一个类了,它是USB上层和底层交互的具体实现类
UsbHostManager.java //当设备作为host端时的管理类
UsbPortManager.java //UsbPort相关信息的管理类,例如mode、powerRole、DataRole等
UsbManager.java //提供给外部调用Usb相关方法的管理类

UsbDeviceManager.java

这里简单介绍下host和device的区别,一般使用usb时我们的手机都是作为device端的,像我们连接电脑,去使用adb、mtp、共享网络等;但是我们也可以通过otg线(现在也有两边都是typec口的线)连接键盘、鼠标、以及别人的手机(emmm,有一次出去玩就靠这个从基友的手机上充电续命);
而UsbDeviceManager就是手机作为device端时的一个重要类;
原生的andoird设备usb启动流程如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值