signal信号显示代码分析(framework层)
1. 关键字 OpenHarmony 4.1Release;熄屏;使能;vendor;telephony;modem;信号 2. 问题描述 2.1 运行环境 开发板型号:开发者手机 芯片:7885 系统版本:OpenHarmony-4.1-Release(已该版本为基线)
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 知识分享
此问题在定位查找问题时,需要熟悉信号在程序中的流转,在流程中的每一个步骤中进行排查,这样就能定位出是流程中哪个环节中出现了问题。
更多推荐
所有评论(0)