Android7.1 控制背光流程

背光调节通信图,如下
在这里插入图片描述
如论上层哪里控制背光,上图部分是共用的流程,每次设置一个新的背光值,都会从上一个背光值开始,在RampAnimator.java以计算出的步长调整背光到目标背光值,因此是一个渐变的过程。

所有调节背光都是PowerManagerService.java调用DisplayManagerService.java的requestPowerState函数。

Android7.1 背光初始化
在这里插入图片描述
总结


  1. android背光控制,没有背光曲线;
  2. 背光频率根据硬件电路设计确认,硬件提供;
  3. 调节背光值得最大值和最小值,确保当在最大值或最小值时,满足屏背光电压电流要求
  4. 开机动画阶段背光值不是存在于数据库中,因此开机动画阶段背光值不是launcher起来后的背光值,背光值分为三个阶段的值:
    a、boot阶段的背光值
    b、system_server初始化时的默认值,配置在frameworks\base\packages\SettingsProvider\res\values\defaults.xml中
    c、launcher起来应用设置的背光值,从数据库中取值,若新升级的系统,也是从frameworks\base\packages\SettingsProvider\res\values\defaults.xml获取初值。
    d、若三个阶段的默认值不同,开机过程会出现背光变化或黑屏。
  5. 在背光范围未调好时,初值配置不合理,开机过程会出现黑屏(实际未黑屏,只是亮度太低)
  6. 根据硬件测量屏背光的电流电压值,调整背光的最大值、最小值,配置在android\frameworks\base\core\res\res\values\config.xml中,分别为:config_screenBrightnessSettingMinimum、config_screenBrightnessSettingMaximum

全志a40i背光调试


1、设置默认值、最小值、最大值
代码位置:android\frameworks\base\core\java\android\os\PowerManager.java

public int getMinimumScreenBrightnessSetting() {
//return mContext.getResources().getInteger(
// com.android.internal.R.integer.config_screenBrightnessSettingMinimum);
//=====keven modify 2014-04-15=
int sysmin = mContext.getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMinimum);
int limitmin = SystemProperties.getInt(“ro.yj.minbrightness”,0); //modify by momkey for ro.yj.minbrightness
return limitmin == 0 ? sysmin : limitmin;
//=====keven modify 2014-04-15=
}

/**

  • Gets the maximum supported screen brightness setting.
  • The screen may be allowed to become dimmer than this value but
  • this is the maximum value that can be set by the user.
  • @hide
    */
    public int getMaximumScreenBrightnessSetting() {
    //return mContext.getResources().getInteger(
    // com.android.internal.R.integer.config_screenBrightnessSettingMaximum);
    //=====keven modify 2014-04-15=
    int sysmax = mContext.getResources().getInteger(
    com.android.internal.R.integer.config_screenBrightnessSettingMaximum);
    //int limitmax = SystemProperties.getInt(“ro.bright.limitmax”,0);
    int limitmax = SystemProperties.getInt(“ro.yj.maxbrightness”,0);//modify by momkey for ro.yj.maxbrightness
    return limitmax == 0 ? sysmax : limitmax;
    //=====keven modify 2014-04-15=
    }

/**

  • Gets the default screen brightness setting.
  • @hide
    */
    public int getDefaultScreenBrightnessSetting() {
    ////////////modify by momkey start for ro.yj.defaultbrightness///////////
    int YJint = 0;
    YJint = SystemProperties.getInt(“ro.yj.defaultbrightness”, 0);
    if(YJint > 0) {
    System.out.printf(“ro.yj.defaultbrightness is %d\n”, YJint);
    return YJint;
    }
    ////////////modify by momkey end for ro.yj.defaultbrightness////////////
    return mContext.getResources().getInteger(
    com.android.internal.R.integer.config_screenBrightnessSettingDefault);
    }
    最小值最大值控制最小最大占空比,使不超过屏支持范围

默认值需要修改属性配置和config.xml,否则开机是开机动画阶段亮度和正常启动后亮度不同

2、sys_config.fex配置
lcd_pwm_used = 1
lcd_pwm_ch = 0
lcd_pwm_freq = 20
lcd_pwm_pol = 1
lcd_pwm_max_limit = 250

重点:lcd_pwm_freq
该值并不是实际的背光芯片频率,该值和硬件设计的电路有关,根据硬件设计实际测量设定

发布了93 篇原创文章 · 获赞 12 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/mcsbary/article/details/103171671