鸿蒙南向开发—PWM背光(OpenHarmony技术)

背光驱动模型也是基于HDF框架开发的,整个框架如下:

现在以RK3568为例,来看看PWM背光整个驱动,这里使用的是PWM占空比控制的背光,默认基于hdf的pwm驱动已经OK!

需要注意的是:这里是基于HDF实现的PWM和PWM背光,所以Linux内核里面原生的PWM和PWM背光相关配置需要关闭

hcs

device_info

CODE
display :: host {hostName = "display_host";device_pwm_bl :: device {device0 :: deviceNode {policy = 0;priority = 95;preload = 0;moduleName = "PWM_BL";deviceMatchAttr = "pwm_bl_dev";}}device_backlight :: device {device0 :: deviceNode {policy = 2;priority = 90;preload = 0;permission = 0660;moduleName = "HDF_BL";serviceName = "hdf_bl";}}
}

config

lcd_config.hcs

CODE
root {backlightConfig {pwmBacklightConfig {match_attr = "pwm_bl_dev";pwmDevNum = 1;pwmMaxPeriod = 25000;backlightDevName = "hdf_pwm";minBrightness = 0;defBrightness = 127;maxBrightness = 255;}}
}

源码分析

PWM_BL驱动

PWM_BL驱动(pwm_bl.c)加载后在初始化时主要做了如下几个工作:

//初始化相关PWM模块,主要包括打开相应pwm模块,从hcs获取pwm的配置,并更新配置,
//主要调用pwm相关的驱动接口,如PwmOpen,PwmSetConfig等
ret = BlPwmDevInit(object, blPwmDev);//注册Backlight设备,具体实现在后面的HDF_BL驱动,这里最重要的就是注册的操作函数集 g_blDevOps,后面有展开 
blDev = RegisterBlDev(blPwmDev->name, &blPwmDev->props, &g_blDevOps, blPwmDev);//更新Backlight状态
if (UpdateBacklightState(blDev, FB_POWER_ON) != HDF_SUCCESS) {HDF_LOGE("%s: UpdateBacklightState fail", __func__);
}//更新Backlight亮度
if (UpdateBrightness(blDev, blPwmDev->props.defBrightness) != HDF_SUCCESS) {HDF_LOGE("%s: UpdateBrightness fail", __func__);
}

g_blDevOps函数集,里面只有一个更新亮度的操作函数,该函数会调用更底层的pwm的HDF驱动接口去更新PWM的占空比,从而控制背光的亮度,具体如下:

static int32_t BlPwmUpdateBrightness(struct BacklightDev *blDev, uint32_t brightness)
{int32_t ret;uint32_t duty;struct BlPwmDev *blPwmDev = NULL;blPwmDev = ToBlDevPriv(blDev);if (blPwmDev == NULL) {HDF_LOGE("%s blPwmDev is null", __func__);return HDF_FAILURE;}if (blPwmDev->props.maxBrightness == 0) {HDF_LOGE("%s maxBrightness is 0", __func__);return HDF_FAILURE;}if (brightness == 0) {return PwmDisable(blPwmDev->pwmHandle);}duty = (brightness * blPwmDev->config.period) / blPwmDev->props.maxBrightness;ret = PwmSetDuty(blPwmDev->pwmHandle, duty);if (ret != HDF_SUCCESS) {HDF_LOGE("%s: PwmSetDuty failed, ret %d", __func__, ret);return HDF_FAILURE;}return PwmEnable(blPwmDev->pwmHandle);
}static struct BacklightOps g_blDevOps = {.updateBrightness = BlPwmUpdateBrightness,
};

HDF_BL驱动

HDF_BL驱动(hdf_bl.c)功能主要有2大块:

对外提供IoService的 Dispatch 接口

主要涉及到一些对外命令的处理,包括:

static BlCmdHandle g_blDevCmdHandle[] = {HdfGetMinBrightness,    /*获取最小亮度*/HdfGetCurrBrightness,   /*获取当前亮度*/HdfGetDefBrightness,    /*获取默认亮度*/HdfGetMaxBrightness,    /*获取最大亮度*/HdfGetBlDevList,        /*获取背光设备列表*/HdfSetBrightness,       /*设置亮度*/};

RegisterBlDev()函数实现

主要是 BlDevManager 和 BacklightDev 的内存分配,赋值等,这里就略过了。

本文主要是对鸿蒙南向开发当中的部分技术解析,更多的鸿蒙OpenHarmony南北向开发技术可以前往主页查找,更多鸿蒙技术分布如下:(略缩图)

高清完整版可前往主页或思信。附文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329081.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适合前后端开发的可视化编辑器(拖拽控件)

分享一个面向研发人群使用的前后端分离的低代码软件——JNPF。 JNPF与市面上其他的低代码(轻流、宜搭、微搭、简道云、轻流、活字格等等),后者更倾向于非编程人员使用,让业务线人员自行构建应用程序。而 JNPF 这款低代码产品是面向…

pyfolio工具结合backtrader分析量化策略组合,附源码+问题分析

pyfolio可以分析backtrader的策略,并生成一系列好看的图表,但是由于pyfolio直接install的稳定版有缺陷,开发版也存在诸多问题,使用的依赖版本都偏低,试用了一下之后还是更推荐quantstats。 1、安装依赖 pip install …

C++学习笔记——友元及重载运算符

目录 一、友元 1.1声明友元函数 1.2声明友元类 二、运算符重载 2.1重载加号运算符 2.2重载流插入运算符 三、一个简单的银行管理系统 四、 详细的介绍 一、友元 在 C 中,友元是一个函数或类,它可以访问另一个类的私有成员或保护成员。通常情况下…

浅析观察者模式在Java中的应用

观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(D…

Docker部署 SRS rtmp/flv流媒体服务器

一、介绍 SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端…

Springboot进行多环境配置的2种方式

本文来说下Springboot使用Spring Profile和Maven Profile进行多环境配置 文章目录 概述Spring Profile多环境主配置文件与不同环境的配置文件 Maven ProfileProfile配置资源过滤 Spring Profile与Maven Profile具体使用 概述 原因 在实际的项目上,一般会分三种环境d…

端云协同,Akamai 与快手联合落地 QUIC 提升海外用户视频体验

10月10日,负责支持和保护数字化体验且深受全球企业信赖的解决方案提供商阿卡迈技术公司( Akamai Technologies, Inc.,以下简称:Akamai )( NASDAQ:AKAM )携手全球领先的短视频记录和分享平台快手(HK:1024)通过全面落地 …

静态网页设计——环保网(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1BC4y1v7ZY/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

我与nano实验室交流群

感兴趣的同学、朋友可以加入群聊共同学习聊天哦。 主要是工训赛、电赛、光电、集成电路等等,会分享一些开源代码,博主自己做的项目,自己画的PCB等等,包含但不限于STM32、K210、V831、机器视觉,机械臂,ROS&a…

Python爬虫获取百度的图片

一. 爬虫的方式: 主要有2种方式: ①ScrapyXpath (API 静态 爬取-直接post get) ②seleniumXpath (点击 动态 爬取-模拟) ScrapyXpath XPath 是 Scrapy 中常用的一种解析器,可以帮助爬虫定位和提取 HTML 或 XML 文档中的数据。 Scrapy 中使用 …

09.简单工厂模式与工厂方法模式

道生一,一生二,二生三,三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动,我们在感慨SU7充满土豪气息的保时捷设计的同时,也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

广义零样本学习综述的笔记

1 Title A Review of Generalized Zero-Shot Learning Methods(Farhad Pourpanah; Moloud Abdar; Yuxuan Luo; Xinlei Zhou; Ran Wang; Chee Peng Lim)【IEEE Transactions on Pattern Analysis and Machine Intelligence 2022】 2 conclusion Generali…