充电指示灯的驱动文件是:leds-qti-tri-led.c
设备树中设备信息在:pmi632.dtsi里,可见led灯的硬件控制方式是pwm模式。
led_core.c中 led_set_brightness 去设置led亮度,这个函数会调用到具体的驱动leds-qti-tri-led.c中的qpnp_tri_led_set_brightness去设置亮度。
qpnp_tri_led_set_brightness在驱动注册的时候被绑定到brightness_set_blocking。
当 led_set_brightness 去设置led亮度的时候,将其委派到一个工作队列任务当中。队列任务去调用rightness_set_blocking,也就是qpnp_tri_led_set_brightness,去设置亮度。
lights.c 是HAL层访问底层的入口,ID为LIGHTS_HARDWARE_MODULE_ID。
文件将以lights.msm8953.so向上层提供接口。
https://blog.csdn.net/wangjun7121/article/details/88140862
android.hardware.light@2.0-service.rc
com_android_server_lights_LightsService.cpp
LightsService.java
SystemServiceManager.java
LightsService.java ----- 这里获得mLights
上层在BatteryService.java中定义灯 private Led mLed; // 定义Led
在BatteryService构造函数中获取Led灯 mLed = new Led(context, getLocalService(LightsManager.class)); // 获取Led
充电状态更新/电量变化时,更新灯的状态
update方法里 processValuesLocked(false); //处理新值
processValuesLocked主要做两件事情:
sendIntentLocked(); //发送电量的信息
mLed.updateLightsLocked(); //刷新灯的状态
updateLightsLocked是上层对Led的控制方式
这里是mBatteryLight也就是LIGHT_ID_BATTERY调用更新light。其实就是Led更新。
LIGHT_ID_BATTERY 和 底层的 LIGHT_ID_BATTERY对应上。