小孤蓝课堂开课拉,现在是实践时间!
bug很多!你很忙的!解不完,根本解不完!
今天的文章内含通用神器!
还是那句话,遇到问题先问是不是,先确认问题有效性,提高解问题效率要三步走:是不是?是什么?为什么?
BUG: DUT fails to initiate EM call (100) when APM is enable for Jio operator.
飞模关闭后马上拨打紧急电话100,无法拨通问题.
问题背景:必现问题、印度、MTK平台、Android 13
挂断问题是最常见的通话问题,好查不好解
问题思路:
1)检查挂断原因
2)针对挂断原因修改代码流程
1、检查AP侧挂断原因
通用神器:
这里有个诀窍,只要是通话问题,必须先捋清楚整个通话流程,确认好时间点,在哪里附近出问题,在log中列出整个通话流程。不同平台、不同Android版本、应用层(main_log)、框架层(radio_log)关键字有所不同。
例如,我这里用“UPDATECALLSTATE”关键字就赛选出了全部流程
结合问题发生的时间,我们看到,对上我列出来的通话流程中,有每次挂断的结点,这个结点能大大缩小问题范围。
本问题是连接类型的问题,所以要看断开结点附近的Log。
我找到每次挂机的原因都是因为这个“server unreachable”。
“无服务”的原因很多,MT号码未入网、手机卡套餐欠费、网络信号差等,所以下一步就是排查这些疑点。
(1).检查MT号码是否入网
检查紧急号码列表是否配置,可以看到,印度的100紧急号码已经配置。mtk平台紧急号码配置是在ecc_list.xml文件
(2)检查卡套餐
由于拨打的是紧急电话,所以与卡套餐无关。
(3)网络信号情况
从视频观察,当客户拨打在DUT关闭飞行模式后拨打电话,右上角的volte图标并未注册。但是REF上是已经注册的,所以我们猜测是网络问题原因需要检查modem log确认一下。
2、检查Modem侧挂断原因
DUT: 在 IMS注册之前就从AP获取到了ATD100命令,由于JIO运营商没有2/3G 网络并且当时 IMS 尚未注册,所以网络拒绝返回了无服务。
REF: 在 IMS 注册后从AP获取ATD100命令,所以正常发起了IMS域呼叫。
DUT和REF是同平台的项目,使用同一套流程为什么REF可以正常呼叫,而我们是无服务呢?
检查IMS服务注册状态,发现:
对比机退出飞行模式后后有11s的时间向服务器发送ATD100命令,但在DUT中,我们仅有3s的时间发送 ATD100 命令。这3s的时间里我们DUT没有注册上IMS,REF有11s的时间等待IMS注册上。
是流程衔接的问题,这涉及到整机性能、射频软硬件的配置,REF比我们快,多了整整8秒的时间注册IMS。整机性能、射频软硬件的配置我们无法把控,但是Tele能做的就是规避这类问题。
修改方案
因为紧急拨号的方式有PS、CSFB区别,所以只能针对某个运营商,其他的运营商不一定是用PS域
CS域、PS域不懂的可以看下我这篇《音频通话声音问题VM、PCM文件分析》文章第一节中有提到语音通话的演变过程。
这个项目上,针对JIO运营商在发送ATD命令之前,等待IMS注册上。
注意自己好好写,这里是伪代码,别傻乎乎乱抄