最近一直在弄离职的东西,有点烦,这里我们介绍下android framework中对backlight的处理,这里我们先介绍下framework中的native层。
首先我们要知道android中lightService对光的控制有很多,比如说提示灯,键盘背光,lcd背光,还有闪光灯等等各种光源设备,这边我们只关注lcd backlight,代码位置:
framework/base/services/jni/com_android_server_LightsService.cpp
之前介绍过很多jni中的东西,不了解的可以先去参考:
http://blog.csdn.net/zhangjie201412/article/details/7296966
http://blog.csdn.net/zhangjie201412/article/details/7238202
咱还是先来研究研究jni代码吧,首先是注册函数:
so easy,一看就知道中间那么一大串我们只要关系backlight相关的就可以了,因为这边我们只有backlight,别的啥都没有,首先这里调用了
hw_get_module函数去获得HAL层中的模块,这里应该是default.goldfish.light.so文件,然后就可以使用这个动态库中的方法了。调用相应的get_device函数:
这个更简单就是调用了methods中的open函数,在上篇中的HAL中有定义,咱还是来分析下,
这里还是做了一些初始化的动作,把brightness的路径保存下来,把HAL中的方法的回调函数都挂起来,别的也没做什么。
然后是我们的第二个方法finalize_native函数,这里就是调用了close函数就不多说了,最后是set_light函数
简单来说就是调用了HAL中的set_light函数,这里面逻辑其实很简单,我们要知道和了解的就是一个流程,如果想自己模仿着写代码的话,最重要的还是要熟悉里面的一些结构体,还有就是java中是如何调用的,jni和hal我个人认为其实都是起承上启下的作用,所以写代码的时候不要孤立的去写,多看看上层和下层。
---------------------------------------------------------------------
下面我们会介绍到framework中的LightService是如何管理的。