1. 关键字

OpenHarmony 4.1 Release;熄屏;使能;vendor;telephony;modem;信号

2. 问题描述

2.1 运行环境

  • 开发板型号:开发者手机

  • 芯片:7885

  • 系统版本:OpenHarmony-4.1-Release(已该版本为基线)

  • 应用软件:modem适配so库,厂商modem闭源库

2.2 问题现象

信号显示为空。

2.3 复现步骤

1.开发板插入sim卡

2.开发板开机

3.查看信号强度显示

有概率出现信号强度显示为空

3. 流程图

3.1 主动上报

modem硬件--->modem服务--->riladapter--->coreserver--->UI

3.2 被动上报

上层发起请求,RIL下发request请求,请求信号数据

Modem上报response,回复信号数据

4. 流程分析

以被动上报为例,来分析信号强度的framework层代码流程

4.1 core_service

以被动上报为例

4.1.1 request请求下发

第479行:下发request请求,请求信号数据。

4.1.2 response回应

RIL把response数据上报到core_service层,代码如下

RIL上报RADIO_GET_SIGHAL_STRENGTH事件,事件映射处理函数RadioSignhalStrength(),如下

信号处理,调用signalInfo类的ProcessSignalIntensity()函数处理

ProcessSignalIntensity()函数处理信号数据。

第127行~第132行:判断信号数据是否存在

第127行~第132行:如果信号数据存在,就把信号数据放入容器中。然后给上层发送消息,通知上层更新信号数据。

NotifySignalInfoUpdated()函数,给上层发送通知,通知上层更新信号数据

发送请求,SendRequest,把更新信号的事件发送给state_registry模块处理。

4.2 state_registry

消息映射

收到sendrequest请求,解析请求的数据,并调用UpdateSignalInfo()函数。

UpdateSignalInfo()函数

获取权限,校验slotid是否合法。

查看状态注册的监听对象是否存在,如果存在,就把信号数据放入vec中,准备发送给UI层。

SendSignalInfoChanged()函数

发送消息,通知UI层,更新信号强度信息。

UI层收到这个通知后,会获取信号强度信息,并更新界面的信号强度显示。

5. 问题分析

在整个信号处理流程过程中,主要函数是ProcessSignalIntensity()函数。

比如主界面中,信号显示空

原因1:

信号结构中信号全部为空,下图中,流程无法进入第133行~第142行,就没有填充信号数据到signals容器。

原因2:

能进入133行,但更新数据时,第135行,没有找到数据内容,就没有填充signals容器中。导致信号数据signals容器为空。

第127行~第132行:判断信号数据是否存在

第127行~第132行:如果信号数据存在,就把信号数据放入容器中。然后给上层发送消息,通知上层更新信号数据。

6 知识分享

此问题在定位查找问题时,需要熟悉信号在程序中的流转,在流程中的每一个步骤中进行排查,这样就能定位出是流程中哪个环节中出现了问题。

Logo

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

更多推荐