1. 关键字

OpenHarmony 3.2modem;使能;vendor;芯片适配

  1. 问题描述

2.1 运行环境

--- 系统版本:OpenHarmony 3.2(以该版本为基线)

--- 应用软件:modem适配so库,厂商的modem开源库

 

2.2 问题现象

测试机主叫挂断通话后会在通话界面卡顿5-10秒才回到主页

 

2.3 测试步骤

1)插入sim卡,拨打电话。

2)电话拨通后,挂断电话。

3)挂断页面卡顿5-10s后才回主页。

 

  1. 问题原因

拨通电话后进行挂断操作,发现上层下发HangUp挂断指令到RilVendor层正式执行,延迟了5-10s的问题,主要原因是上层下发操作指令,到了RilVendor层其指令执行是“串行”,会排队向modem硬件层下发AT指令,而在HangUp挂断指令在RilVendor层执行之前,已被另外的ActivatePdpContext指令阻塞了,直到ActivatePdpContext指令执行完成后,RilVendor层才开始正式执行HangUp挂断指令,最终导致挂断延迟问题。

 

  1. 定位过程

 

4.1 电话执行流程

 

4.2 挂断电话的函数接口

(1)call_manager模块挂断操作的函数入口

(2)RilVendor模块挂断操作的函数入口

 ​​​​​​​​​​​​​​4.3 卡顿问题日志分析

(1)HangUp挂断指令,由cellular_call下发到core_service时(日志标识:“CellularCallConnectionCS::HangUpRequest start.”),其时间戳为15:03:17.157,而该HangUp挂断指令最终下到RilVendor层正式执行(日志标识:“ReqHangup AT+CHLD= or AT+CHUP Send Hangup Request to vendor ril........Start”),去执行的时间戳为15:03:27.113。而这两者时间间隔差了10s左右。

 (2)通过以上日志,进一步分析在HangUp指令下发后,这10s左右的时间,RilVendor层当时在进行什么操作。当cellular_call下发HangUp挂断指令到core_service时(15:03:17.157),此时RilVendor层正在处理ActivatePdpContext指令,而该ActivatePdpContext指令处理的起始时间为“15:03:14.226”,处理的结束时间为“15:03:27.072”。又因为RilVendor层处理指令过程为“串行”,由此发现HangUp指令在这个时间段内是被ActivatePdpContext指令,阻塞住了。等到ActivatePdpContext执行完成后,HangUp挂断指令才开始在RilVendor层去执行,而此时的时间戳已经为15:03:27.113,等到HangUp挂断指令在RilVendor层执行完成,此时的时间戳为15:03:27.326(日志标识:ReqHangup AT+CHLD= or AT+CHUP Send Hangup Request to vendor ril........End),由此可以看出HangUp挂断指令在RilVendor层执行耗时较少,用时正常。

ActivatePdpContext指令在RilVendor层执行起始时间日志:

ActivatePdpContext指令在RilVendor层执行终止时间日志:

 (3)结论:HangUp挂断操作出现卡顿5-10s问题,主要由于在HangUp指令在RilVendor层执行之前,已经被ActivatePdpContext指令给阻塞住了。

 

  1. 知识分享

此问题是modem适配中的底层硬件处理AT指令较慢导致的,同时还得熟悉下RilVendor层处理上层指令时为“串行”机制,定位过程中分析底层是否存在排队执行指令。

Logo

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

更多推荐