耳机插入时间

这篇博客详细介绍了在Android系统中,当耳机插入时的处理流程,从adb shell查看开始,经过EventHub.cpp、SwitchInputMapper、InputDispatcher到com_android_server_input_InputManagerService.cpp。接着回调到java层的InputManagerService.java和WiredAccessoryManager.java,最终调用AudioService.java的setWiredDeviceConnectionState方法,实现设备连接状态的更新,并向底层APS设置以及发送设备连接意图。
摘要由CSDN通过智能技术生成

adb shell 查看

P55Nxt:/dev/input # getevent
add device 1: /dev/input/event8
  name:     "xxx-skua-snd-card Headset Jack"
add device 2: /dev/input/event7
  name:     "xxx-skua-snd-card Button Jack"
add device 3: /dev/input/event4
  name:     "qpnp_pon"
add device 4: /dev/input/event3
  name:     "accelerometer"
add device 5: /dev/input/event2
  name:     "proximity"
add device 6: /dev/input/event1
  name:     "stk3x1x-ls"
could not get driver version for /dev/input/mice, Not a typewriter
add device 7: /dev/input/event5
  name:     "elan"
add device 8: /dev/input/event0
  name:     "msg28xx"
add device 9: /dev/input/event6  
  name:     "gpio-keys"

 

130|P55Nxt:/dev/input # getevent -l event8
EV_SW        SW_HEADPHONE_INSERT  00000000
EV_SW        SW_MICROPHONE_INSERT 00000000
EV_SW        SW_JACK_PHYSICAL_INS 00000000
EV_SYN       SYN_REPORT           00000000
EV_SW        SW_HEADPHONE_INSERT  00000001
EV_SW        SW_MICROPHONE_INSERT 00000001
EV_SW        SW_JACK_PHYSICAL_INS 00000001
EV_SYN       SYN_REPORT           00000000

 

流程:

跟key键 或者 触摸事件一样通过dev/input上传

EventHub.cpp

 
getEvents
 ->scanDevicesLocked
   ->scanDirLocked("/dev/input");
     ->openDeviceLocked

 

 

 

SwitchInputMapper

void SwitchInputMapper::sync(nsecs_t when) {
    if (mUpdatedSwitchMask) {
        uint32_t updatedSwitchValues = mSwitchValues & mUpdatedSwitchMask;
        NotifySwitchArgs args(when, 0, updatedSwitchValues, mUpdatedSwitchMask);
        getListener()->notifySwitch(&args);

        mUpdatedSwitchMask = 0;
    }
}
notifySwitch(&args);

        mUpdatedSwitchMask = 0;
    }
}

 

InputDispatcher

 

void InputDispatcher::notifySwitch(const NotifySwitchArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
    ALOGD("notifySwitch - eventTime=%lld, policyFlags=0x%x, switchValues=0x%08x, switchMask=0x%08x",
            args->eventTime, args->policyFlags,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值