usb设备的连接流程,支持AOA

整体的逻辑流程
在这里插入图片描述
对应的代码和log 分析如下:

1,UsbDeviceManager.java 中监听 kernel 上报的 UEvent 事件,

这里 USB UEVENT: {SUBSYSTEM=misc, MAJOR=10, SEQNUM=2022, ACTION=change, ACCESSORY=START, DEVNAME=usb_accessory, MINOR=41, DEVPATH=/devices/virtual/misc/usb_accessory}

215      /*
216       * Listens for uevent messages from the kernel to monitor the USB state
217       */
218      private final class UsbUEventObserver extends UEventObserver {
   
219          @Override
220          public void onUEvent(UEventObserver.UEvent event) {
   
221              if (DEBUG) Slog.v(TAG, "USB UEVENT: " + event.toString());
222 
223              String state = event.get("USB_STATE");
224              String accessory = event.get("ACCESSORY");
225              if (state != null) {
   
226                  mHandler.updateState(state);
227              } else if ("START".equals(accessory)) {
   
228                  if (DEBUG) Slog.d(TAG, "got accessory start");
229                  startAccessoryMode();
230              }
231          }
232      }

2,进入startAccessoryMode

410      private void startAccessoryMode() {
   
411          if (!mHasUsbAccessory) return;
412 
413          mAccessoryStrings = nativeGetAccessoryStrings();
414          boolean enableAudio = (nativeGetAudioMode() == AUDIO_MODE_SOURCE);
415          // don't start accessory mode if our mandatory strings have not been set
416          boolean enableAccessory = (mAccessoryStrings != null &&
417                  mAccessoryStrings[UsbAccessory.MANUFACTURER_STRING] != null &&
418                  mAccessoryStrings[UsbAccessory.MODEL_STRING] != null);
419 
420          long functions = UsbManager.FUNCTION_NONE;
421          if (enableAccessory) {
   
422              functions |= UsbManager.FUNCTION_ACCESSORY;
423          }
424          if (enableAudio) {
   
425              functions |= UsbManager.FUNCTION_AUDIO_SOURCE;
426          }
427 
428          if (functions != UsbManager.FUNCTION_NONE) {
   
429 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值