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适配中,底层接口适配的问题,在定位查找问题时,需要在流程中的每一个步骤进行排查,这样就能快递定位那个流程中出现了问题。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐