在Android中目前定义的lights有以下的几种。
/* * These light IDs correspond to logical lights, not physical. * So for example, if your INDICATOR light is in line with your * BUTTONS, it might make sense to also light the INDICATOR * light to a reasonable color when the BUTTONS are lit. */ #define LIGHT_ID_BACKLIGHT "backlight" #define LIGHT_ID_KEYBOARD "keyboard" #define LIGHT_ID_BUTTONS "buttons" #define LIGHT_ID_BATTERY "battery" #define LIGHT_ID_NOTIFICATIONS "notifications" #define LIGHT_ID_ATTENTION "attention"
每一种逻辑的灯的类型都有多种的物理硬件类型,如下所示:
---------------------------------------------------------------------------------
| Logical Light Type | Physical HardWare |
---------------------------------------------------------------------------------
| Backlight | Backlight LED, Trackball LED |
---------------------------------------------------------------------------------
| Keyboard | Keyboard LED |
---------------------------------------------------------------------------------
| Buttons | Button LED |
---------------------------------------------------------------------------------
| Battery | 3-color LED |
---------------------------------------------------------------------------------
| Notifications | 3-color LED,Trackball LED |
---------------------------------------------------------------------------------
| Attention | Trackball LED |
---------------------------------------------------------------------------------
backlight支持256等级亮度,0为关闭,255为最亮。但是这个也要根据实际的物理硬件来做不同的判断。
Attention通常是未接电话,这里也就是我们手机上的未接电话的设置;
Notifications通常有些应用会使用,比如短信,twitter等;
Battery灯通常是指示电池状态,是否低电,是否满电等;
适配层代码路径在
hardware/$(PROJECT)/liblights/lights.c
hardware/libhardware/include/hardware/lights.h
其中HAL层将所有的lights均作了处理。
lights在硬件上的实现方式有PMIC,PWM,GPIO,3-color led.
拿背光调节做例子。
背光亮度的调节主要分为几块:
boot,kernel,Start Sys, Suspend
在boot中的作用主要是体现在这些方面:关机充电时刷充电图片,刷boot时的图片;
kernel:刷开机图片;
------ HAL ---------
start sys: 系统开机动画等等是在这里实现;
suspend:休眠关闭背光,唤醒则重置为设置的背光亮度,这里可以看看powermanager service;
所以我们从开机到系统休眠看到的背光亮度依次为boot_set--->kernel_set---->Sys_set---->backlight_off_by_powermanager_service
Have Fun!