Android 背光流程小结
现在使用aidl方式:
/hardware/interfaces/light/aidl/android/hardware/light/ILights.aidl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package android.hardware.light;
import android.hardware.light.HwLightState;
import android.hardware.light.HwLight;
/**
* Allows controlling logical lights/indicators, mapped to LEDs in a
* hardware-specific manner by the HAL implementation.
*/
@VintfStability
interface ILights {
/**
* Set light identified by id to the provided state.
*
* If control over an invalid light is requested, this method exists with
* EX_UNSUPPORTED_OPERATION. Control over supported lights is done on a
* device-specific best-effort basis and unsupported sub-features will not
* be reported.
*
* @param id ID of logical light to set as returned by getLights()
* @param state describes what the light should look like.
*/
void setLightState(in int id, in HwLightState state);
/**
* Discover what lights are supported by the HAL implementation.
*
* @return List of available lights
*/
HwLight[] getLights();
}
|
/vendor/sprd/interfaces/lights/Android.bp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
cc_binary {
name: "vendor.sprd.hardware.lights-service",
relative_install_path: "hw",
init_rc: ["lights.rc"],
vintf_fragments: ["lights.xml"],
vendor: true,
shared_libs: [
"libbase",
"libbinder_ndk",
"android.hardware.light-ndk_platform",
"liblog",
],
srcs: [
"lights.cpp",
"main.cpp",
],
}
filegroup {
name: "lights-hal-srcs",
srcs: [
"lights.cpp",
],
}
|
androidgroup04@androidgroup04:~/disk00/Isaac/MOCORDROIDR_Trunk_UMS512/Codebase/out/target/product/ums512_1h10$ find -iname "*vendor.sprd.hardware.lights-service*"
./vendor/bin/hw/vendor.sprd.hardware.lights-service
./obj/EXECUTABLES/vendor.sprd.hardware.lights-service_intermediates
./obj/EXECUTABLES/vendor.sprd.hardware.lights-service_intermediates/vendor.sprd.hardware.lights-service
./archive_symbols/symbols.vendor/vendor/bin/hw/vendor.sprd.hardware.lights-service
./symbols/vendor/bin/hw/vendor.sprd.hardware.lights-service
/vendor/sprd/interfaces/lights/lights.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include "lights.h"
namespace aidl {
namespace android {
namespace hardware {
namespace light {
using ::aidl::android::hardware::light::BnLights;
using ::aidl::android::hardware::light::HwLight;
using ::aidl::android::hardware::light::HwLightState;
using ::aidl::android::hardware::light::ILights;
using ::aidl::android::hardware::light::LightType;
using ::aidl::android::hardware::light::FlashMode;
#define TOUCH_SUSPEND "/sys/touchscreen/ts_suspend
... ...
ScopedAStatus Lights::setLightState(int id, const HwLightState& state) {
if (!(0 <= id && id < availableLights.size())) {
ALOGE("Light id:%d does not exist.\n", id);
return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
}
HwLight const& light = availableLights[id];
int ret = 0;
switch (light.type) {
case LightType::BACKLIGHT:
ret = setLightBacklight(state);
break;
case LightType::KEYBOARD:
ret = setLightKeyboard(state);
break;
case LightType::BUTTONS:
ret = setLightButtons(state);
break;
case LightType::NOTIFICATIONS:
ret = setLightLedsNotifications(state);
break;
case LightType::ATTENTION:
ret = setLightLedsAttention(state);
break;
case LightType::BATTERY:
ret = setLightLedsNotifications(state);
break;
}
if (ret)
ALOGE("%s light type:%d fail:%d", __func__, light.type, ret);
return ScopedAStatus::ok();
}
} // namespace light
} // namespace hardware
} // namespace android
} // namespace aidl
|
/vendor/sprd/interfaces/lights/lights.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/*light nodes*/
struct led leds[NUM_LEDS] = {
... ...
[LCD_BACKLIGHT] = {
.brightness = {
"/sys/class/backlight/sprd_backlight/brightness",
-1},
},
... ...
};
int Lights::setLightBacklight(const HwLightState& state) {
int err = 0;
int brightness = rgbToBrightness(state);
if (NULL == leds[LCD_BACKLIGHT].brightness.filename) {
ALOGE("func:%s, unsupported light!\n", __func__);
return -EINVAL;
}
pthread_mutex_lock(&g_lock);
err = write_int(&leds[LCD_BACKLIGHT].brightness, brightness);
if ((err >= 0) && (!!brightness != !!last_backlight)) {
if (!!brightness) {
write_string(&leds[TS_SUSPEND].ts_suspend, "0");
write_string(&leds[LCD_DDR_VOTE].ddr_vote, "lcdon");
write_string(&leds[LCD_DDR_VOTE].ddr_unvote, "lcdoff");
} else {
write_string(&leds[TS_SUSPEND].ts_suspend, "1");
write_string(&leds[LCD_DDR_VOTE].ddr_vote, "lcdoff");
write_string(&leds[LCD_DDR_VOTE].ddr_unvote, "lcdon");
}
last_backlight = brightness;
}
pthread_mutex_unlock(&g_lock);
return err;
}
|
=================================================================
10.sprd背光流程相关推荐
- Android 10 拨打电话流程
接续上一章节,理解Android 10 拨打电话流程 packages/apps/Dialer/java/com/android/dialer/dialpadview/DialpadFragment. ...
- Android原生调节屏幕背光流程
Android 5.1调节背光流程 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. https://mp.csdn.net/mdeditor/ ...
- 9 pcb螺丝焊盘打很多小孔_PCB板设计的10个基本设计流程
PCB板设计需要提供信息: (1)原理图:一种完整的电子文档格式,可以生成正确的网表(网表); (2)机械尺寸:提供定位装置的具体位置和方向识别,以及特定高度限位位置区域的识别; (3) BOM清单: ...
- Android7.1 控制背光流程
背光调节通信图,如下 如论上层哪里控制背光,上图部分是共用的流程,每次设置一个新的背光值,都会从上一个背光值开始,在RampAnimator.java以计算出的步长调整背光到目标背光值,因此是一个渐变 ...
- android 自动背光闪烁,Android 背光流程小结
android背光控制小结,从上到下: ----android---- DisplayPowerController.java--> DisplayPowerState.java:SCREEN_ ...
- Android 10 设置壁纸流程
---------------------------------------------------------------------------------------------------- ...
- 我记录网站综合系统 -- 技术原理解析[10:PermissionChecker流程]
源代码位置:\Web\Mvc\Processors:PermissionChecker.cs Config -> wojilu.Web.Mvc.CoreHandler.ProcessReques ...
- windows 10 开启远程控制流程
目录 1. 打开允许远程控制 2 .关闭防火墙 3. 允许没有密码的用户远程访问 1. 打开允许远程控制 2 .关闭防火墙 3. 允许没有密码的用户远程访问 运行 gpedit.msc
- [RK3288][Android6.0] PWM backlight 驱动流程小结
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背光的亮暗通过pwm控制,驱动在文件pwm-rockchip.c中,这里不做描述. dts各个配置参数 ...
最新文章
- [JavaWeb基础] 007.Struts2的配置和简单使用
- oneshot单样本学习笔记
- python需要php吗-PHP会被Python取代吗?
- 2020-10-13 四元数用法(不讲原理,只讲计算规则)
- Sql—表格的建立,删除,数据的建立与删除-总结篇
- 从0到1 | 0基础/转行如何用3个月搞定机器学习
- 【python】集合的定义与操作
- Mark Cuban投资组合中60%为BTC,30%为ETH
- 13_新闻客户端界面搭建
- OD使用教程10 - 调试篇10|解密系列
- 在那里可以下载jar包?
- 计算机旅游网站毕业论文,旅游网站的设计与实现
- Anylogic学习--------选项列表
- stokes方程matlab,Navier-Stokes matlab 238万源代码下载- www.pudn.com
- 算法渐近性质分析_神奇宝贝解释的渐近分析:深入研究复杂性分析
- [zt]再谈QQ自动登陆器:提供C#源码下载(下)
- mysql定时任务每天凌晨三点钟醒来_linux cron 下的定时执行工具使用技巧
- 项目经理应该如何制定项目进度计划?
- Android使用Startup和Lifecycle打造一个单独的测试module
- Argo-DCS数据传输笔记
热门文章
- 小程序 设置小程序打开聊天中的素材
- 女程序员们的结婚要求
- 【Flocking算法】海王的鱼塘是怎样炼成的
- Mybatis中 if 语句使用空格问题
- IT人看十四主星代表
- 泰坦尼克号幸存者的预测
- 求知方面无妨多一点,生活方面无妨省一点
- SQL优化:Hive---distribute by 防止数据倾斜
- 【规范】万字集大成的HDLFPGA学习和规范
- kafka添加安全验证配置