AAL与CABC背光选择(两种方式控制背光):参考[FAQ05966]89平台支持BB端CABC(即AAL)或LCM端CABC方式控制背光,两种方式使用方法如下【BB端CABC(即AAL)】- 打开功能,向MTK申请patch,并在ProjectConfig.mk中打开MTK_AAL_SUPPORT = yes【LCM端CABC】- 对于Video Mode,ALPS.JB2.MP.V1.3(包括1.3)之前的版本,请向MTK申请patch- lcm driver中实现set_backlight接口- cust_leds.c(包括lk与kernel中的两支文件)设置如下
config_automatic_brightness_available 自动亮度调节控制开关
BRIGHTENING_LIGHT_HYSTERESIS ---变得更亮,只有达到比上个lux值高出这个百分比才认为是valid
DARKENING_LIGHT_HYSTERESIS ---变得更暗,只有比上个lux值低出这个百分比才认为是valid
truebool> 亮屏时是否重舍弃上次灭屏时的采集值。true 表示舍弃,这个时候采集
config_lightSensorWarmupTime 这个时间后
马上计算出当前环境值,波动性较大
false 表示重新根据BRIGHTENING_LIGHT_HYSTERESIS、DARKENING_LIGHT_HYSTERESIS计算满足阈值条件值,这样较平滑,需要花些时间才能调节到当前环境值。
0integer>
10000integer> 采样周期
250integer> light-sensor 采样率
4000
变亮持续时间
8000
变暗持续时间
private final SensorEventListener mLightSensorListener = new SensorEventListener() {
// Mediatek AAL support
private long mPrevLogTime = 0L;
private float mPrevLogLux = 0.0f;
@Override
public void onSensorChanged(SensorEvent event) {
if (DEBUG) Slog.d(TAG, "onSensorChanged: mLightSensorEnabled=" + mLightSensorEnabled +
", mAmbientLuxValid=" + mAmbientLuxValid);
if (mLightSensorEnabled) {
final long time = SystemClock.uptimeMillis();
final float lux = event.values[0];
handleLightSensorEvent(time, lux);
// Mediatek AAL support : long period and significant lux changed
if (time - mPrevLogTime >= 500L ||
mPrevLogLux * 1.2f <= lux || lux * 1.2f <= mPrevLogLux) {
if (DEBUG) Slog.d(TAG, "onSensorChanged: lux = " + lux);
mPrevLogTime = time;
mPrevLogLux = lux;
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Not used.
}
};
//light sensor 监听器
private boolean setLightSensorEnabled(boolean enable) {
if (enable != mLightSensorEnabled) {
Slog.d(TAG, "setLightSensorEnabled: enable=" + enable +
", mLightSensorEnabled=" + mLightSensorEnabled +
", mAmbientLuxValid=" + mAmbientLuxValid +
", mResetAmbientLuxAfterWarmUpConfig=" + mResetAmbientLuxAfterWarmUpConfig);
}
if (enable) {
if (!mLightSensorEnabled) {
mLightSensorEnabled = true;
mLightSensorEnableTime = SystemClock.uptimeMillis();
mSensorManager.registerListener(mLightSensorListener, mLightSensor,
mLightSensorRate * 1000, mHandler);
return true;
}
} else {
if (mLightSensorEnabled) {
mLightSensorEnabled = false;
mAmbientLuxValid = !mResetAmbientLuxAfterWarmUpConfig;
mRecentLightSamples = 0;
mAmbientLightRingBuffer.clear();
mInitialHorizonAmbientLightRingBuffer.clear();
mHandler.removeMessages(MSG_UPDATE_AMBIENT_LUX);
mSensorManager.unregisterListener(mLightSensorListener);
}
}
return false;
}
//注册light sensor,其中采样率 为
<
integer
name=
"config_autoBrightnessLightSensorRate"
>250
integer
>
//light sensor 监听到背光事件处理
final longtime = SystemClock.uptimeMillis();
final floatlux = event.values[0];
handleLightSenso