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
該值並不是實際的背光芯片頻率,該值和硬件設計的電路有關,根據硬件設計實際測量設定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章