imx8背光控制原理

2024-06-17 07:32
文章标签 原理 控制 背光 imx8

本文主要是介绍imx8背光控制原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

backlight

参考文档

android lcd 背光控制流程

error

[ 1286.086494] vehicle_rpmsg virtio0.rpmsg-vehicle-channel.-1.1: rpmsg_send timeout!
[ 1286.086543] send message failed!
06-27 07:05:48.557  2595  2595 I CAR.POWER: send display brightness = 29
[ 1286.088031] this type is not correct!

Service rpmsg调用

  • packages/services/Car/service/src/com/android/car/hal/PowerHalService.java
    /*** Sets the display brightness for the vehicle.* @param brightness value from 0 to 100.*/
    public void sendDisplayBrightness(int brightness) {if (brightness < 0) {brightness = 0;} else if (brightness > 100) {brightness = 100;}try {mHal.set(VehicleProperty.DISPLAY_BRIGHTNESS, 0).to(brightness);           <--------- 修改Log.i(CarLog.TAG_POWER, "send display brightness = " + brightness);       <--------- 修改} catch (PropertyTimeoutException e) {Log.e(CarLog.TAG_POWER, "cannot set DISPLAY_BRIGHTNESS", e);}
    }
    
  • sendDisplayBrightness
    wugn@wugn:Car$ grep sendDisplayBrightness * -R
    service/src/com/android/car/hal/PowerHalService.java:    public void sendDisplayBrightness(int brightness) {
    service/src/com/android/car/systeminterface/DisplayInterface.java:                        mService.sendDisplayBrightness(percentBright);
    service/src/com/android/car/CarPowerManagementService.java:    public void sendDisplayBrightness(int brightness) {
    service/src/com/android/car/CarPowerManagementService.java:        mHal.sendDisplayBrightness(brightness);
    

HAL 调用

  • frameworks/base/services/core/jni/com_android_server_lights_LightsService.cpp
    static void processReturn(const Return<Status> &ret,Type type,const LightState &state) {if (!ret.isOk()) {ALOGE("Failed to issue set light command.");LightHal::disassociate();return;}switch (static_cast<Status>(ret)) {case Status::SUCCESS:break;case Status::LIGHT_NOT_SUPPORTED:ALOGE("Light requested not available on this device. %d", type);break;case Status::BRIGHTNESS_NOT_SUPPORTED:ALOGE("Brightness parameter not supported on this device: %d",state.brightnessMode);break;case Status::UNKNOWN:default:ALOGE("Unknown error setting light.");}
    }static void setLight_native(JNIEnv* /* env */,jobject /* clazz */,jint light,jint colorARGB,jint flashMode,jint onMS,jint offMS,jint brightnessMode) {if (!validate(light, flashMode, brightnessMode)) {return;}sp<ILight> hal = LightHal::associate();if (hal == nullptr) {return;}Type type = static_cast<Type>(light);LightState state = constructState(colorARGB, flashMode, onMS, offMS, brightnessMode);{android::base::Timer t;Return<Status> ret = hal->setLight(type, state);processReturn(ret, type, state);if (t.duration() > 50ms) ALOGD("Excessive delay setting light");}
    }
    
  • setLight_native()—>set_light (),对应调用的是set_light_backlight来设置背光
  • vendor/nxp-opensource/imx/lights/fsl_lights.c
    /*****************************************************************************/
    static int lights_device_open(const struct hw_module_t* module,const char* name, struct hw_device_t** device)
    {int status = -EINVAL;ALOGV("lights_device_open\n");if (!strcmp(name, LIGHT_ID_BACKLIGHT)) {struct light_device_t *dev;char value[PROPERTY_VALUE_MAX];FILE *file;dev = malloc(sizeof(*dev));/* initialize our state here */memset(dev, 0, sizeof(*dev));/* initialize the procs */dev->common.tag = HARDWARE_DEVICE_TAG;dev->common.version = 0;dev->common.module = (struct hw_module_t*) module;dev->common.close = light_close_backlight;dev->set_light = set_light_backlight;*device = &dev->common;property_get("hw.backlight.dev", value, DEF_BACKLIGHT_DEV);strcpy(path, DEF_BACKLIGHT_PATH);strcat(path, value);strcpy(max_path, path);strcat(max_path, "/max_brightness");strcat(path, "/brightness");file = fopen(max_path, "r");if (!file) {// free(dev);                                                                            <--------- 修改ALOGE("cannot open backlight file %s [%s]\n", max_path,strerror(errno));// return status;                                                                        <--------- 修改} else {fclose(file);}ALOGI("max backlight file is %s\n", max_path);ALOGI("backlight brightness file is %s\n", path);status = 0;}/* todo other lights device init */return status;
    }
    

这篇关于imx8背光控制原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068821

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工