@case分析-MTK平台低于15%电量,手电筒不亮

case分析

1.电量15%以上时,手电筒打开,其功能正常打开,log分析如下:
08-30 15:12:07.721481 834 1126 I FlashHal: setOnOff(): type(1), enable(1), scenario(0).
08-30 15:12:07.721527 834 1126 I FlashHal: setFlashOn(): duty(0), timeout(0), lt duty(0), lt timeout(0).
08-30 15:12:07.721689 834 1126 I StrobeDrvFlashlight: setDuty(): duty(0).
08-30 15:12:07.721799 834 1126 I StrobeDrvFlashlight: setTimeOutTime(): (0 ms).
08-30 15:12:07.721867 834 1126 I StrobeDrvFlashlight: setOnOff(): enable(1).
此log分析,setDuty()即会直接ioctl kernel层进行如下log
<7>[ 1179.455732] (5)[1126:HwBinder:834_2]flashlight: _flashlight_ioctl: FLASH_IOC_SET_DUTY(0,0,0): 0
<6>[ 1179.455745] (5)[1126:HwBinder:834_2]flashlights_led191: led191_ioctl: FLASH_IOC_SET_DUTY(0): 0
进而使得手电筒使用正常.

2.电量10%-15%之间,手电筒打开,其功能没有反应,其代码路径/vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/common/flash_mgr/flasg_hal.cpp
log分析如下:
08-31 17:43:24.861403 680 680 I FlashHal: setOnOff(): type(1), enable(1), scenario(0).
08-31 17:43:24.861443 680 680 I FlashHal: setFlashOn(): duty(0), timeout(0), lt duty(0), lt timeout(0).
08-31 17:43:24.861470 680 680 I FlashHal: setFlashOn(): is low power. //此情况会直接return,不会在ioctl set duty到下层

3.电量10%以下时候,手电筒开关打开,其弹出提示框“电量显示不足,无法使用闪光灯”
其main log分析,没有找到hal层相关的flashlight关键字log信息,kernel 无flashlight相关log信息,故分析在上层时候,已经在低于10%电量的时候,提示信息弹出,即无法再流向HAL 层及底层。

更改方法

1.HAL 层,当电量低于15%时,针对setflashon()时候会直接走return的操作,其结果使得无法ioctl set duty到kernel层
2.Kernel层,当电量低于15%时,会直接将flashlight enable由1(开)变为0(关),进而导致手电筒无法功能正常 修改方案即为 注释掉HAL层的 return 和kernel层的enable置0操作

备注

  1. 从合理性来说,任何低电模式下强行使得flash电量的修改方式都不是很合理,因为flash电量会抽很大的电量,会瞬间掉电,存在很多不确定的影响。所以才会有这种低电量保护机制。

  2. MTK平台—kernel层电量级别的判断,是否只存在了15%以上和15%以下两种电量级别的判断
    答 是的,目前底层就是用过使用默认的电池低电量level来做判断的,默认的低电level就是15%这个值;

  3. 若要使10%-15%电量之间不走low power的流程时,从而使得手电筒在10%-15%之间功能正常,对此问题如何修改,此修改是否整个系统其他影响!
    答 如果需要在10%-15%区间内正常打闪,需要修改flashlight下的driver层对应的代码来取消低电的限制,具体的路径 /kernel-4.9/drivers/misc/mediatek/flashlight/flashlight-corc.c 的 fl_enable()函数;之所以在低电量下默认关闭闪光灯,是因为打开闪光灯所需的电流很大,在低电量下继续打开闪光灯可能会造成设备瞬间断电关机,造成客户认为设备出现问题等现象问题。

  4. 分析手电筒的低电压设置这块函数,flashlight-corc.c 文件中的pt_is_low函数
    答 a) 入参是手电筒这块的电压级别,其中的if判断条件是power的级别(MTK这块分为0(>15%电量)或1(<15%电 量));
    b) 其a)中的入参根据flashlight_init函数中的callback pt_low_bat_callback进行设置,与判断条件这块进行关联;

  5. Log分析

<7>[ 231.959812] (6)[6798:HwBinder:804_3]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1 //表明手电筒ioctl 打开
<6>[ 231.960174] (6)[6798:HwBinder:804_3]flashlight: fl_enable: Failed to enable since pt(0,1,0), pt strict(1) // 使能手电筒,因为低于15%电量,所以使能失败
<6>[ 231.960185] (6)[6798:HwBinder:804_3]flashlights_led191: led191_ioctl: FLASH_IOC_SET_ONOFF(0): 0 //表明手电筒ioctl具体的关闭
此log的情况导致15%电量以下,其手电筒不会亮,其原因就是先ioctl 1,后enable 0,所以具体的led ioctl就为0了,导致关闭了。
其SET_ONOFF就是控制这手电筒开关的情况,0表示关,1表示开。

<7>[ 1179.455732] (5)[1126:HwBinder:834_2]flashlight: _flashlight_ioctl: FLASH_IOC_SET_DUTY(0,0,0): 0
<6>[ 1179.455745] (5)[1126:HwBinder:834_2]flashlights_led191: led191_ioctl: FLASH_IOC_SET_DUTY(0): 0
<7>[ 1179.455765] (5)[1126:HwBinder:834_2]flashlights_led191: led191_ioctl: FLASH_IOC_SET_DUTY : 0
其代表的是duty表示的是闪光灯亮的电流,其值为0时,会让其亮。(另一case中照相机中录像下开闪光灯,闪光灯亮一下就灭?-08-27 12:38:26.238580 840 840 I StrobeDrvFlashlight: setDuty(): duty(6).其修改方法是flash_custom.cpp中cust_getTorchDuty函数里的if(level==1)分支中*duty的值 原来是6,现在改为0。目前还不太清楚这块的原因

flashlight tuning相关知识

Flashlight driver相关所做的事情三个方面:

  1. 开关
  2. Duty 电流控制
  3. Timeout 持续时间 (闪光灯)

引脚 torch_en_pin1或torch_en_pin0或flash_en_pin1或flash_en_pin0,直接置高低电平。
依据g_flash_channel_idx判断torch(0)或flash(1) 。两种模式,手电筒还是闪光灯。

Flash_custom.cpp文件 控制闪光灯开关的地方
---》其中的cust_isDualFlashSupport函数,若支持双层闪光灯的话,则返回1,否则为0.
Flash_tuning_custom.cpp 设置duty的number和一些timeout
-----》其中的cust_getFlashProjectPara函数中,para.dutyNum的值即为kernel中duty有效的数组值
Flash_tuning_custom_cct.cpp 设置一些mode的duty,
------》例 af,torch,flash等。
  1. 以下截图是Flash_tuning_custom.cpp文件中的一个

注 :文章有不足之处,抱歉

flashlight中手电筒低于15%电量不亮相关推荐

  1. 电量百分百亮绿灯,其余充电电量均为红灯。电量低于15闪红灯三秒一次。搜网灯没网时候绿灯快闪,有网了做呼吸灯五秒一次,呼吸灯可广播控制打开关闭。判断是否连上网。

    frameworks/ base/services/core/java/com/android/server/BatteryService.java 电量百分百亮绿灯,其余充电电量均为红灯: publ ...

  2. MacBook Pro 中/英大写键盘灯不亮 解决方法

    MacBook Pro 中/英大写键盘灯不亮 解决方法 解决方法: 解决方法: [系统偏好配置]→[键盘]→[输入法]→ 不勾选[使用"中/英"键切换"美国"输 ...

  3. 《JavaScript权威指南第7版》第15章 Web浏览器中的JavaScript 15.1 15.2 15.3

    第15章 Web浏览器中的JavaScript 15.1 网络编程基础 15.1.1 HTML script 标签中的JavaScript 模块 指定脚本类型 脚本运行时:异步和延迟 按需加载脚本 1 ...

  4. android 手电筒电量低于15%,Android 手电筒(最强适配版)

    网上很多手电筒的代码,然后整理了下 使用:不停的调用onAndoff就能开和关手电筒 isopen是开关状态,比如你可以用他来判断手电是否打开. 可以看到使用了单例模式和线程同步,原因是你只有一个灯泡 ...

  5. 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!

    作者 | 程序员客栈 来源 | 程序员客栈(ID:proginnwx) 根据中国互联网络信息中心(CNNIC)近日发布第 44 次<中国互联网络发展状况统计报告>.截至 2019 年 06 ...

  6. 首次公开!2020年中国程序员薪资调查报告,近一半程序员单身、年薪低于 15 万,别被脉脉和知乎带偏了!...

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  7. python中常见的15中面试题

    下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块.每一个问题都可以扩充为一个教程,如果可能的话.某些问题甚至会涉及多个领域. 我之前还没有出过和这些题 ...

  8. js数组获取index_通过事例重温一下 JS 中 常见的15 种数组操作(备忘清单),收藏...

    数组是 JS 中广泛使用的数据结构.数组对象提供了大量有用的方法,如array. forEach().array.map()等来操作数组. 在实战中,我经常对数组可能的操作和相应采用哪个更好的方法不知 ...

  9. 《强化学习》中的第15章:神经科学

    前言: 本次笔记对<强化学习(第二版)>第十五章进行概括性描述. 本次笔记内容依旧很少.神经科学是拓展部分,书上已经尽量将所举例子语言简化. 小结 大脑收益系统相关的神经通路很复杂,且没有 ...

最新文章

  1. Android Handler介绍
  2. 2021年春季学期-信号与系统-第十二次作业参考答案-第六小题
  3. python股票数据预处理_Python股票处理之六_数据预处理A
  4. Web服务之四:httpd虚拟主机
  5. pyecharts第六节、水球图
  6. 设计——主观理想路径
  7. intern cookie 纠结之二
  8. C++多线程强制终止
  9. SpringBoot注解@Component、Repository、Service、Controller的含义
  10. 拓端tecdat|Matlab马尔可夫区制转换动态回归模型估计GDP增长率
  11. 06-Docker数据管理实践
  12. springCloud使用redis报错,Could not resolve type id xxxxx(类全路径名) into a subtype
  13. linux shell中各种分号和括号,Linux Shell中各种分号和括号#的用法总结
  14. QT 如何在背景图中将部分区域设置为透明
  15. Apollo算法阅读之基于Sqp的Referenceline全局参考路线优化(含源码)
  16. java file文件大小_Java实现获取文件大小的几种方法
  17. Camera ITS当中的test_lens_shading_and_color_uniformity测试
  18. 服务交付服务规范十要素
  19. python 操作键盘,鼠标 。我这个是自动企业微信加好友的,源码可以修改成别的。挺好使!
  20. 虚拟机过se vmp检测

热门文章

  1. window下命令行启动程序
  2. Quaternion
  3. 车企出海异常拥挤,瞄准欧洲不再仅盯亚非拉?
  4. html添加密码输入框,HTML input password密码输入框简介说明
  5. nextTrick的作用
  6. 关于微信卡券与代金券的一些事
  7. 浪漫优雅-现代简约风设计
  8. Python编程(廖雪峰)笔记
  9. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
  10. python excel 截图_法律行业python高级案例——网络侵权自动化批量取证