1 概述
本文重点分析Android系统服务之LightsService(光服务),Android光系统用来控制系统中的各个光源,实际上是一个输出控制系统。
跟其他Android系统中的硬件控制一样,都需要底层驱动的支持以及上层逻辑控制。LED灯的控制分为上层和底层代码两部分,
中间通过JNI来进行交互。Lights系统的结构如图1-1所示:
图 1-1 Lights系统框架图
Lights系统自下而上的框架层次:
驱动程序:特定硬件平台光系统的驱动程序,Android系统中主要是通过Linux中的LED驱动程序实现的。
硬件抽象层:光系统的硬件抽象层(HAL)定义了一个光设备的列表以及它们的相关属性的集合,
为上层应用提供一个统一的简单的查询硬件设备的接口,把复杂的查询逻辑转移到了应用程序之外,由HAL统一处理。
它通常并不提供对硬件的实际操作,对硬件的操作还是由应用程序来完成。
本地类:本地类调用硬件抽象层,也同时提供了JNI的接口给上层。
JAVA框架:Lights系统的上层实现,注意这个服务并不是平台的API,不能直接访问。它是一个本地服务,
只能被Android系统JAVA框架中的其他部分调用。
本文主要分析JAVA框架层以及硬件抽象层实现,下面将分别就不同层级的代码进行分析。
代码路径如下:
Framework路径: frameworks\base\services\core\java\com\android\server\lights
对应的JNI文件路径: frameworks\base\services\core\jni
下的com_android_server_lights_LightsService.cpp
HAL路径: hardware\qcom\display\liblight
驱动路径: kernel\drivers\leds