当前位置:操作系统 > 安卓/Android >>

android自动调节背光

这项功能涉及两个模块,光传感器和背光,光传感器采集周围环境的光感强度,上报给系统,系统通过PowerManagerService.java中设置背光值
 
1.powermanagerService 中实现自动调节背光
1.1 enableLightSensorLocked(Boolean enable){
         if(enable){
                   mSensorManager.registerListener(mLightListener,mLightSensor,xxx);
}
}
在handleLightSensorValue函数中进行处理。
1.2 mHandler.postDelayed(mAuoBrightnessTask,LIGHT_SENSOR_DELAY);
 
1.3调用 lightSensorChangedLocked(value,false);
1.4 调用
mScreenBrightnessAnimator.animateTo(lcdValue,value,SCREEN_BRIGHT_BIT,steps*NORMAL_FRAME_TIME_MS);
 
2配置lcd相关背光值
函数initInThread中获取config_autoBrightnessLevels中的数组
[html] 
If(mUseSoftwareAutoBrightness){  
    mAutoBrightnessLevels = resources.getIntArray(  
com.android.internal.R.array.config_autoBrightnessLevels);  
mLcdBackLightValues = resources.getIntArray(  
com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);  
…  
}  
 
注意values可以选择mLcdBackLightValues作为参数,这样就将配置表中的值转化为了系统中使用的值
[html]
getAutoBrightnessValue(SensorValue,int [] values){  
    for(i=0;i<mAutoBrightnessLevels.length;i++)  
{  
    If(SensorValue<mAutoBrightnessLevels[i])  
        Break;  
}  
Final int minval = values[0];  
Final int maxval = values[mAutoBrightnessLevels.length];  
  
}  
 
 
相关的数组定义在framework/base/core/res/res/values/config.xml
 
N个等级对应N+1个背光值,背光值应该满足0-255,背光系统节点
 
Sys/class/leds/lcd-backlight/brightness
 
3.上述分析可知:
作为光传感器获取的实际值通过驱动层上传到hal层,通过hal层poll到framework,为了减少配置文件调节可以在hal层或者kernel进行统一的映射,不会影响到自动调节背光的动画效果。
这样的好处就是多个项目时不必每次都去调节配置表。
例如:hal层中readEvents函数
调用
[html] 
indextoValue(size_t index) const  
{  
    Static const struct adcToLux{  
    Size_t adc_value;  
    Float lux_value;  
} adcToLux[] = {  
    {150,10.0},  
    {800,160},  
    {900,225},  
    {1000,320},  
    {1400,1280},  
};  
  
Return adcToLux[ARRAY_SIZE(adcToLux)-1].lux_value;  
}  
 
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,