8.5.3耳麦拔插事件调用流程分析

目录

回顾

input系统方法


 

回顾

在前面的小节中,我们编写了一个驱动程序,模拟耳机的插拔事件,其可以上报耳机的拔插事件,并且修改了android的源代码,可以根据耳机的拔插事件,在状态栏上现实或者消除耳麦的图标,这节视频我们讲解耳麦插拔事件导致的程序调用流程。

前面提到过,有两种上报插拔事件的方式,一种是使用输入子系统,另外一种是使用swith dev(实质是使用uevent,通过网络上报事件),那么我们的anroid系统最终是使用哪种方式呢?我们可以去配置android系统,可以去配置frameworks/base/core/res/res/values/config.xml
文件,或者:
device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml
第二个文件会覆盖第一个文件,修改文件中的config_useDevInputEventForAudioJack变量,该值为true时使用input子系统, 为false时使用uevent机制。

下面是详细的调用流程:

 

input系统方法

我们先来讲解使用input子系统上报流程,后面再讲解uevent的调用流程:
1.input驱动上报
2.input系统上报给Audio系统。
3.Audio系统把事件发送给Activity(感兴趣的应用程序)
4.最终发送给某个APP(前面的小节为状态栏APP)

其上input系统是获取事件,然后上报事件,在输入子系统章节我们讲解过,有一个InputReader线程,存在成员EventHub,其会监测多个节点(使用poll机制),InputReader获得事件之后,发送给InputDispatcher线程,InputDispatcher程处理之后上报给InputManagerService,InputManagerService调用WiredAccessoryManager中CallBack(回调函数)函数,WiredAccessoryManager上报Andio系统了。

首先我们要确定CallBack函数,这样在输入子系统过得事件之后,才能进入音频子系统,根据时序图我们打开SystemServer.java文件:
 

private void startOtherServices() {
	// Listen for wired headset changes
    inputManager.setWiredAccessoryCallbacks(new WiredAccessoryManager(context, inputManager));
    	/*回调函数,当输入系统获得数据之后,调用callbacks函数*/
    	mWiredAccessoryCallbacks = callbacks;	

可以看到其中创建了一个WiredAccessoryManager对象,传递给inputManager.setWiredAccessoryCallbacks函数(设置回调函数)。

现在我们打开InputReader.cpp:

void InputReader::loopOnce() {
	/*获得事件,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值