网站制作公司 沈阳,注册公司网上申请,做配音任务的网站,网站301做下背光驱动模型也是基于HDF框架开发的#xff0c;整个框架如下#xff1a; 现在以RK3568为例#xff0c;来看看PWM背光整个驱动#xff0c;这里使用的是PWM占空比控制的背光#xff0c;默认基于hdf的pwm驱动已经OK#xff01;
需要注意的是#xff1a;这里是基于HDF实现的…背光驱动模型也是基于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相关的驱动接口如PwmOpenPwmSetConfig等
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南北向开发技术可以前往主页查找更多鸿蒙技术分布如下略缩图 高清完整版可前往主页或思信。附文档