本文主要是介绍MTK 6735平台 低电量强开闪光灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原本闪光灯低于15%电量将不开启,客户要求闪光灯5%电量均开启,需修改代码。上层查阅camera、flash相关代码,未发现低电压禁止闪光灯代码,交由驱动进行修改。
因没有做过类似修改,不知在何处修改,才可以修改限制电量。在网友中询问,有热心网友给出答案:MTK平台要在HAL层 flash_mgr_m.cpp文件中进行修改,isLow的那一段都注掉,需要修改4处:
按照此说法,在vendor目录下查找此文件,结果如下:
存在文件过多,询问过热心网友,得知只有core目录下代码起作用,故只查看 mtkcam/D1/core/featureio/pipe/aaa/flash_mgr/flash_mgr_m.cpp代码。
在此代码中搜索 isLowPower,发现如下:
跟踪 sendCommandRet 方法,其内部结构如下:
继续跟踪 sendCommandRet_nolock 方法,其内部结构如下:
跟踪查看代码,发现 其内部最终调用 ioctl 函数,调用到了驱动层,其余动作均在驱动层进行,调用 sendCommandRet 方法时,传入命令为FLASH_IOC_IS_LOW_POWER,在kernel中搜索该命令:
发现只在drivers/misc/mediatek/flashlight/src/mt6735/kd_flashlightlist.c 文件中有此命令存在,跟踪此代码:
发现此代码只是根据 gLowPowerPer 、 gLowPowerVbat 两个全局变量的类型,来返回对应值的。在此文件中搜索这两个变量,发现如下:
此两个函数会设置 gLowPowerPer 、 gLowPowerVbat 两个全局变量的值,跟踪此两个函数,发现在 flashlight_init 函数中发现两个函数被调用:
跟踪 register_low_battery_notify 函数,未发现有执行相关代码的函数,如下:
跟踪 register_battery_percent_notify 函数,未发现有执行相关代码的函数,如下:
发现,此函数是根据 g_battery_percent_stop 、g_battery_percent_level 两个来执行传入的函数的,在传入的函数中,会设置 gLowPowerVbat 变量,导致 ioct 函数执行到 FLASH_IOC_IS_LOW_POWER 命令时返回为1,关闭闪光灯。搜索 g_battery_percent_stop 、g_battery_percent_level 两个关键字,仅发现在 bat_percent_notify_handler 线程(drivers/misc/mediatek/power/mt6735/pmic.c)中,有如下代码:
此代码中,先获取ui电量百分比,然后与 BAT_PERCENT_LINIT 宏进行比较,再设置全局变量 g_battery_percent_level 的,怀疑 BAT_PERCENT_LINIT 宏为控制低压闪光灯是否开启的阀值,跟踪该宏,发现:
此值与目前闪光灯现象一致(电量低于15%不能开启闪光灯),故怀疑只需更改此值即可修改低压关闭闪光灯阀值。
将此值修改为5,编译版本进行验证,验证OK。
这篇关于MTK 6735平台 低电量强开闪光灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!