1、问题背景
切换双卡数据开关,无法切换成功,且单机必现该问题
2、问题分析
搜索Log发现相关拨号无法建立成功,返回0x1671,无法建立PDN连接。
相关拨号上层未下发相关AT命令,属于上层报错,并非网络问题,相关具体在代码RtcDataController.cpp的函数enqueueForPreferredDataMode中上报。
其中RFX_STATUS_KEY_SLOT_ALLOW表示当前RILD当前DDS,如果是当前DDS,这个SETUP_DATA_CALL下发到RILD的下一层,否者直接返回错误。那说明当前DDS没有更新,导致了问题。
对比正常切换和异常切换的Log分析。
正常Log
异常Log
异常Log在切换DDS时实际是没有切换的
从Log可以看到虽然上层都下发了> SET_PREFERRED_DATA_MODEM,
并且RILD都回复了< SET_PREFERRED_DATA_MODEM 但是实际DDS确没有切换。相关切换流程总结如下。
红色框为问题出现的地方。查看相关代码
红色框为问题出现的地方。查看相关代码
说明mOnDemandQueue请求中还有相关请求在处理,导致无法下发切换DDS。最终在框架层发现如下异常请求,包名为“com.tencent.android.qqdownloader”,但是请求的能力没有Internet能力,只有BANDWITH和PRIORITIZE_LATENCY能力。卸载相关APP后问题恢复。
3、对比测试
发现5G手机发现无此问题,原因在于5G modem支持有区别
相关代码区别在于EDataSimSupported是支持的,在5G平台
相关AT命令如下
4、解决方案
针对无APN相关的请求不要放入相关队列。
由于 PRIORITIZE_LATENCY PRIORITIZE_BANDWIDTH 与5G切片强相关,建议修改是加上5G能力判断。
5、延展验证
抓取MTK 副卡发彩信流程
0x1671实际为MTK设计的流程,当SETUP_DATA_CALL请求存在时,不允许相关DDS下发切换。如果只是临时的报错,可以忽略,如果一直上报错误,需要check相关拨号逻辑。