读书人

android自动调节背阴

发布时间: 2013-10-11 14:52:39 作者: rapoo

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中的数组

If(mUseSoftwareAutoBrightness){mAutoBrightnessLevels = resources.getIntArray(com.android.internal.R.array.config_autoBrightnessLevels);mLcdBackLightValues = resources.getIntArray(com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);…}

注意values可以选择mLcdBackLightValues作为参数,这样就将配置表中的值转化为了系统中使用的值

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函数

调用

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

热点推荐