Android系统服务之LightsService实现架构

来源:互联网 发布:c语言随机数 编辑:程序博客网 时间:2024/05/21 11:07

1.Android灯的种类

Android原生设计了8种灯,分别为LCD背光灯、键盘灯、Button灯、电池灯、消息通知灯、重视灯、蓝牙灯、Wifi灯。

这些在LightsService中有定义,定义如下: 
static final int LIGHT_ID_BACKLIGHT = 0; //LCD
背光灯

static final int LIGHT_ID_KEYBOARD = 1; //键盘灯

static final int LIGHT_ID_BUTTONS = 2; //Button

static final int LIGHT_ID_BATTERY = 3; //电池灯

static final int LIGHT_ID_NOTIFICATIONS = 4; //消息通知灯

static final int LIGHT_ID_ATTENTION = 5;//重视灯

static final int LIGHT_ID_BLUETOOTH = 6; //蓝牙灯

static final int LIGHT_ID_WIFI = 7;//Wifi

Android目前只用到了前面6种灯,蓝牙和Wifi灯暂未应用。

2.灯系统结构

Android灯系统用于统一控制系统中的各个光源,基本上是一个用于输出控制的系统。


3.灯系统框架

灯系统之下而上,包含了如下框架层次:

3.1驱动程序:特定硬件平台灯系统的驱动程序,可以使用Linux中的LED驱动程序实现。

3.2硬件抽象层,灯系统硬件抽象层接口路径为:

代码路径:hardware/libhardware/include/hardware/lights.h

这是一个Android中标准的硬件模块。

3.3本地类

代码路径:

frameworks/base/services/jni/com_android_server_LightsService.cpp

这个类调用硬件抽象层,也同时提供了JNI的接口。

3.4 JAVA

代码路径:

frameworks/base/services/java/com/android/server/LightsService.java

LightsService.java通过调用,LightsServiceJNI来实现com.android.server包中的LightsService类。

这个类不是平台的API,被Android系统JAVA框架中的其他一些部分调用(如notificationService等)。

4.灯系统框架图


灯系统的硬件抽象层是一个Android中标准的硬件模块,接口在hardware/libhardware/include/hardware/目录中的lights.h文件中定义。

struct light_state_t {

unsigned int color; /*光源的颜色 */

int flashMode; /* Flash的模式、开关时间 */

int flashOnMS;

int flashOffMS;

int brightnessMode; /*亮度模式 */

};

struct light_device_t {

 struct hw_device_t common;

 int (*set_light)(struct light_device_t* dev, /*设置光源 */

 struct light_state_t const* state);

};

 灯系统的主要特点是需要为每一个光源实现一个设备light_device_t

灯系统模块的函数,也就是Android中标准打开模块的函数hw_module_methods_t中的open()需要通过参数返回一个light_device_t类型的指针。

这个指针表示的是一个光设备,在模块的打开函数中指定的名称来确定得到哪一个设备。

灯系统的硬件抽象层实现后,将生成名称为liblights.default.so的动态库,放置在目标文件系统/system/lib/hw目录中。



原创粉丝点击