如果你想修改MTK的AAL自动背光调整相关的内容,那么根据情况,可能需要涉及如下文件:
这是Android L版本的,对于新的版本文件名字,mtk可能作调整。
主要涉及的文件是:
1)cust_aal.cpp
2)DisplayPowerController.java
3)AutomaticBrightnessController.java
4)libaal.so MTK的AAL自动背光调整服务用到的库
5)具体硬件driver的 pwm led。
6)另外,除了cust_aal.cpp和als驱动的实现get als的方法,可以通过als转换来影响亮度外,即als raw data 改为als value, 16段折线拟合。参见代码cm36652.c的cm36652_read_als()获取raw als data,然后cm36652_get_als_value()根据cust_aal.cpp的.als_level[], .als_value[],来返回als转换后的als sensor值,进而影响AAL service的背光走向。 新的驱动架构中,.als_level[], .als_value[]是在.dts文件中描述。
请注意,原来的驱动,对als_level和als_value只是区间内的值都是als_value[i]这种固定值,而不是区间内做线性拟合值,所以需要修改,参见我在mt6753中的cm3232.c中对cm3232_get_als_value()函数的修改。
另外setting的亮度条的亮度设置也可以影响AAL service设置背光的亮度。 从而达到提高亮度、降低亮度等目的。应用接口是Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 和Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,systemBrightness);
所以MTK的AAL service的根据环境光亮度调节还是很丰富的,满足大部分需求。
即als_level和als_value描述的是raw_als到als的映射曲线,进而影响亮度调节。
而setting影响此映射曲线的倍数系数(当然最小值仍然是0亮度,最大值仍然是亮度255(8bit)/1023(10bit)),即相当于选择了不同的映射曲线,即曲线偏亮还是偏暗。
float value = Settings.System.getFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0, UserHandle.USER_CURRENT);
Settings.System.putFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adj, UserHandle.USER_CURRENT);
adj的值从-1到1的取值范围。
以及:
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mPower = IPowerManager.Stub.asInterface(ServiceManager.getService(“power”));
mPower.setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(adj); 实现。具体参考代码BrightnessController.java
8)关于als调节背光的响应速度:
其实,另外从代码DisplayPowerController.java的构造函数的代码实现来看,可以看出,几个config.xml配置值也影响相应的亮度。
例如:
config_autoBrightnessLevels[]和config_autoBrightnessLcdBacklightValues[],影响的是light sensor上报的.als_value(注意不是.als_level)时,对应的lux,与level[n]和value[m]之间的关系。即也是lux和亮度值之间的曲线范围。
另外注意screenBrightne***angeMinimum值的取值。
config_screenBrightnessSettingDefault值
另外还有一些scale计算。
另外注意config_autoBrightnessLightSensorRate值。
涉及的主要参数是:
BRIGHTNESS_RAMP_RATE_BRIGHTEN 从 BRIGHTNESS_RAMP_RATE_SLOW调为fast,即从40变为200。 目前使用150
BRIGHTNESS_RAMP_RATE_DARKEN 从 BRIGHTNESS_RAMP_RATE_SLOW调为fast,即从40变为200。目前使用150
选为fast
AMBIENT_LIGHT_HORIZON 从10000,调为1000 即als sensor的稳定系数。
BRIGHTENING_LIGHT_DEBOUNCE 从4000, 调为500,新代码改为mBrighteningLightDebounceConfig,此值参见DisplayPowerController.java中com.android.internal.R.integer.config_autoBrightnessBrighteningLightDebounce。即config.xml的值。
DARKENING_LIGHT_DEBOUNCE 从8000, 调为500,新代码改为mDarkeningLightDebounceConfig
BRIGHTENING_LIGHT_DEBOUNCE和DARKENING_LIGHT_DEBOUNCE这两个变量表示,framework发现als亮度发生变化后,需要多久才会启动AAL去做PWM调节。值越低,表示亮度越敏感。
SCREEN_DIM_MINIMUM_REDUCTION 从10变为2,减少最小步幅,可以减少跳变的感觉。
新版本代码还有一个BRIGHTNESS_ADJUSTMENT_SAMPLE_DEBOUNCE_MILLIS, 从10000ms改为1000。
那么结果是,从探测到要变到变完,1.5秒以内就完成。所以还是比较快的。
另外AAL service往下设置的初始值在cust_aal.cpp中的InitBrightness中设置。
这个值从0到1023,即8bit的255变为10bit的1023
9)由于CABC还会影响到背光的变化,所以调整亮度曲线时,可以根据需求关闭CABC、CABL。
在project的cust_aal.cpp中, 添加int InitFunction = 4; // 0: all off, 2: cabc, 4: dre
具体请参考我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
我的新的更多优惠的打包课程链接如下:
https://edu.51cto.com/sd/0a9d4
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。