连续按电源键最终都会亮屏问题分析
1 关键字 连续按;电源键 2 问题描述 设备型号:XXXXX 系统版本:OpenHarmony 3.2 Release 代码版本:XXXXXX 问题现象:在熄屏状态下,连续快速按遥控器上的电源键,不论按了多少次,最终设备屏幕都会被点亮。 3 问题原因 3.1 正常机制 在熄屏状态下&a
1 关键字
连续按;电源键
2 问题描述
设备型号:XXXXX
系统版本:OpenHarmony 3.2 Release
代码版本:XXXXXX
问题现象:在熄屏状态下,连续快速按遥控器上的电源键,不论按了多少次,最终设备屏幕都会被点亮。
3 问题原因
3.1 正常机制
在熄屏状态下,连续快速点击遥控上的电源键,如若点击次数是奇数,如1次,3次,5次...设备屏幕被正常点亮;如若点击次数是偶数,如2次,4次,6次...设备屏
幕应该还是熄屏,不应该被点亮。
3.2 异常机制
在熄屏状态下,连续快速点击遥控上的电源键,不论点击按键多少次,最后设备屏幕都是被点亮的状态。
4 解决方案
通过HDMI外接时,使用不带屏保机制的显示屏。
5 定位过程
5.1 先根据现象,不管按键多少次,最后都是亮屏现象,那初步判断是否在连续快速按键过程中:1、事件只响应了一次? 2、还是在这个过程中, 是熄屏、亮屏
的状态流程不对?根据这2个初步怀疑,抓取一份连续按键4次的日志;
5.2 从上面可以看出key事件进行了4次响应,4次按键按下,4次按键抬起;跟着代码流程查看亮屏和熄屏的接口;
void PowerMgrService::HandlePowerKeyUp() { ........... ........... if (this->IsScreenOn()) { this->SuspendDevice(now, SuspendDeviceType::SUSPEND_DEVICE_REASON_POWER_BUTTON, false); } else { this->WakeupDevice(now, WakeupDeviceType::WAKEUP_DEVICE_POWER_BUTTON, REASON_POWER_KEY); } }
熄屏SuspendDevice接口继续调用SuspendDeviceInner做进一步处理 ;
唤醒亮屏WakeupDevice继续调用WakeupDeviceInner 做进一步处理 ;
5.3 在继续分析上面的2个接口,查看当前的状态是否正确,通过代码和日志分析,流程与中间状态没有问题,同时这2个接口也主要是做一个状态的赋值,没有其他的多余操作;
上面4次按键操作:
2次亮屏:
2次熄屏:
5.4 而且可以看出,响应的时间上,也是正确的;
5.5 那么通过现有的分析,基本可以排除直接由于电源按键操作的问题了,继续分析;
5.6 将硬件驱动接口的信息打印,看其接收到的状态信息是否与按键事件一致;
5.7 发现驱动接口与HDI层的状态不一致,那么至此可初步知道该问题是由于设备状态不一致导致的,那么这个状态还有什么其他操作或者流程改变了熄屏和亮屏
的状态吗?继续查看日志;
5.8 可以看出,除了key事件处理,还触发了plug in事件 ;然后与产品显示驱动对接,发现其在hdmirx触发事件其流程会调用了以下接口,打开了hdmi;
5.9 由于我们是没有进行操作hdmi的,只是通过hdmi接口连接电脑显示屏,那么就初步可分析指导,当前电脑显示屏是具有hdmirx功能的;然后接入TV屏和电视屏进行操作,现象正常;
5.10 TV屏或者电视屏才是我们当前产品的实际场景,电脑显示屏的屏保及显示机制导致自动调用了HDMI接口,才出现上面的问题。最终分析得出是由于我们的显
示环境问题。
6 知识分享
电源模块与按键事件、display、state_machine之间是有比较复杂关系的;可通过电源唤醒或者熄屏一个点的流程,了解当前设计框架上的一个面。
更多推荐
所有评论(0)