熄屏modem休眠失败问题
1 关键字 OpenHarmony 3.2 Release;熄屏;使能;vendor;telephony;modem;休眠 2 问题描述 2.1 运行环境 系统版本:OpenHarmony-3.2.3-Release(已该版本为基线) 应用软件:modem适配so库,modem闭源库 2.2 问题现象 熄屏时,查看modem的电流。 发现modem没有休眠,电流不达标。 2.3 测试步骤 1.开发
1 关键字
OpenHarmony 3.2 Release;熄屏;使能;vendor;telephony;modem;休眠
2 问题描述
2.1 运行环境
-
系统版本:OpenHarmony-3.2.3-Release(已该版本为基线)
-
应用软件:modem适配so库,modem闭源库
2.2 问题现象
熄屏时,查看modem的电流。
发现modem没有休眠,电流不达标。
2.3 测试步骤
1.开发板插入sim卡
2.开发板开机,按电源键,点亮屏幕
3.按电源键,熄屏
3 问题原因
modem电流不达标,应该是熄屏时,没有给modem下发休眠命令。
modem在休眠状态下,电流会低于正常工作电流。
4 定位过程
正确的流程是,电源熄屏--->tele收到熄屏消息--->tele下发休眠命令--->vendor下发休眠命令--->modem收到休眠命令,进入休眠
在熄屏休眠的流程中,每一个流程中加入打印,查看哪个流程出现了问题,导致休眠命令没有下发
4.1 收到熄屏事件
发生熄屏事件时,core_service模块中的OnReceiveEvent()函数收到熄屏事件
100行:亮屏消息
101行:收到亮屏消息,调用ProcessScreenDisplay()函数处理
103行:熄屏消息
104行:收到熄屏消息,调用ProcessScreenDisplay()函数处理
4.2 ProcessScreenDisplay()
53行:获取熄屏亮屏的状态。
54行:调用ProcessDeviceState()函数处理。
ProcessDeviceState()
4.3 SetDeviceState()
给ril层发送
182行:调用telRilManager的SetDeviceState()函数,给ril层下发休眠命令。
给ril层发送休眠命令,requestid是HREQ_NETWORK_SET_DEVICE_STATE
int32_t TelRilNetwork::SetDeviceState(
int32_t deviceStateType, bool deviceStateOn, const AppExecFwk::InnerEvent::Pointer &response)
{
return Request(TELEPHONY_LOG_FUNC_NAME, response, HREQ_NETWORK_SET_DEVICE_STATE,
&HDI::Ril::V1_0::IRil::SetDeviceState, deviceStateType, deviceStateOn);
}
查看ril模块的ReqSetDeviceState(),发现没有实现该接口。
ReqSetDeviceState()接口
5 解决方案
实现ReqSetDeviceState()接口,解决该问题。
6 验证
1.替换so
2.按电源键。熄屏
3.测量熄屏时的电流
可以看到,熄屏时电流为4.72mA,已经达标。
7 知识分享
此问题是modem适配中,底层接口适配的问题,在定位查找问题时,需要在流程中的每一个步骤进行排查,这样就能快递定位那个流程中出现了问题。
更多推荐
所有评论(0)