Este artículo se basa en el análisis de código de la plataforma rk3128;
El proceso de control de la retroiluminación en el proceso de activación es el siguiente:
1, frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java
LightsManager final privado mLights
mLights = LocalServices.getService(LightsManager.class); //获得LightServer
mPowerState = new DisplayPowerState(mBlanker,
mLights.getLight(LightsManager.LIGHT_ID_BACKLIGHT ) ,
new ColorFade(Display.DEFAULT_DISPLAY)); \\Obtenga la instancia del servidor de luces e inicialice la estructura DisplayPowerState
mPowerState.setScreenState(estado); //Llama al método en la instancia de DisplayPowerState para controlar el brillo
PD: LightServer también proporciona otro control de luz, el siguiente es un ejemplo
mButtonLight = mLights.getLight(LightsManager.LIGHT_ID_BUTTONS);
mButtonLight.setBrightness(0);
2, frameworks/base/services/core/java/com/android/server/display/DisplayPowerState.java
/**
127 * Establece si la pantalla está encendida, apagada o dormida.
128 */
129 public void setScreenState(int state) { 130 if (mScreenState != state) { 131 if (DEBUG) { 132 Slog.d(TAG, "setScreenState: state=" + state); 133 } 134 135 mScreenState = estado; 136 mScreenReady = falso; 137 programarActualizarPantalla(); 138 } 139 }
De acuerdo con los diferentes estados de la pantalla, el método de configuración automática del interruptor de pantalla, incluida la configuración de brillo, etc., este artículo solo se enfoca en la configuración de brillo;
Después de actualizar el estado de mScreenState aquí, realice una serie de configuraciones a través del método scheduleScreenUpdate;
Llamada final: mBacklight.setBrightness(backlight); set // mBacklight es la instancia de Light obtenida arriba de mLights.getLight( LightsManager.LIGHT_ID_BACKLIGHT )
3, frameworks/base/services/core/java/com/android/server/lights/LightsService.java
La segunda parte llama a la clase interna clase final privada LightImpl extiende Light en este documento
public void setBrightness(brillo int);
Finalmente llame a la capa jni:
setLight_native(mNativePointer, mId, color, mode, onMS, offMS, brightMode);
4, marcos/base/servicios/core/jni/com_android_server_lights_LightsService.cpp
Obtenga módulos relacionados a través de hw_get_module( LIGHTS_HARDWARE_MODULE_ID , (hw_module_t const**)&module);
Finalmente llame a la interfaz devices->lights[light]->set_light(devices->lights[light], &state) de la capa hal para configurar la retroiluminación;
5. hardware/rockchip/liblights/lights.cpp (hal privado de Rockchip, busque por LIGHTS_HARDWARE_MODULE_ID )
Verifique el código correspondiente y finalmente llame a write_int (BACKLIGHT_PATH, bright); escriba en el archivo de retroiluminación en sysfs para configurar;
BACKLIGHT_PATH定义:#define BACKLIGHT_PATH "/sys/class/backlight/rk28_bl/brightness"
6. Luego, ingrese el controlador del kernel, para continuar
---------------------
Autor: lzpdz
Fuente: CSDN
Original: https://blog.csdn.net/lzpdz/article/details/52274759
Declaración de derechos de autor: Este artículo Artículo original para el autor, ¡adjunte el enlace de la publicación del blog para su reimpresión!
Análisis de contenido Por: CSDN, CNBLOG publicación de blog plug-in de reimpresión con un clic