cdma voice call 通話過程涉及模塊分析

Voice Software Architecture

MSM 8996平台为了支持多模语音,新设计了Voice Agent、Voice Adapter、IMS Voice Adapter三个模块,在qxdm 中合称为Voice Recognition模块。具体的框图因版权问题,略。

语音数据传输路径

语音在手机系统经过三个处理器,第一是应用处理器即kernel所在部分,即PCM driver所在部分;第二是aDSP,应用数字信号系统,即Vocoder所在部分;第三部分是mDSP,即我们常说的modem基带数字信号系统,即Protocol 协议所在部分。

即:PCM Vocoder Prtotocol

ADSP Core Voice Driver Stream Rx/Tx(0x1804/0x1805) 即Vocoder Packet 是原始的音频PCM数据经ADSP encode/decode 之后,它通过APR 方式在aDSP和mDSP之间以及aDSP 和HLOS之间传递。

语音传输过程中主要模块

从高通8996平台代码实现的角度可以分析出,涉及到的模块如下:

Call Manager:cmxcall.c

Digital Call Processing:mccdma.c

Voice Recognition:cva_module.c,vagent.c,vs_voc.c

APR Modem :VSS_IMVM_CMD_,VSS_IVOCPROC_CMD_

QDSP6:VfrDriver.cpp

Multiplex Sublayer:muxmdsp.c,rxctraffic.c,txctraffic.c,muxvoc.c

cdma voice call 通话过程涉及模块分析

流程分析

首先从QMI 来分析

看看主叫发起的request,response以及indication。

cdma voice call 通话过程涉及模块分析

如果通话断开,会有另一个voice call status indication 上报,会话状态进入CALL_STATE_END状态,断开的原因由call_end_reason 字段说明。如果由用户主动断开,此字段赋值为"call_end_reason = CALL_END_CAUSE_CLIENT_END ",如果为非正常释放,则为其他值,如下就是由网络断开的indication上报,在这个时间点附近去跟踪Call Manager,Digital Call Processing等模块log打印,一般可以找到释放的原因说明。

cdma voice call 通话过程涉及模块分析

再从CDMA信令来分析

在前向信道和反向信道上各有两条信令。

cdma voice call 通话过程涉及模块分析

再从Call Manager分析

过滤关键字"START cmxcall_mc_rpt_proc|EVENT_CM_CALL_EVENT_| CM= CallEnd",可以看到CM 模块中呼叫有关的事件(cm.h中定义)。一通主叫电话拨出到接听再到结束,发生如下事件:

cdma voice call 通话过程涉及模块分析

接通之后,从无线协议层中解出Vocoder packet 数据, modem VSS 通过APR 发送VSS_IMVM_CMD_MODEM_STOP_VOICE命令通知LPASS/ADSP (低功耗音频处理子系统,属于另一个处理器)的MVM模块有Vocoder packet语音数据据包要发送,通话断开之后,则发送VSS_IMVM_CMD_MODEM_STOP_VOICE 告知ADSP已经无Vocoder packet发送。

cdma voice call 通话过程涉及模块分析

从APR modem(0x14D0)、APR ADSP(0x14D2)、QDSP6分析

Ref doc:

kba-180312233407_2_how_to_debug_no_voice_issue_in_call

Filter Key word:

VSS_IMVM_CMD_START_VOICE|VSS_IMVM_CMD_MODEM_START_VOICE|VSS_IMVM_CMD_STOP_VOICE| VSS_IMVM_CMD_MODEM_STOP_VOICE

| VSS_ISTREAM_EVT_READY

When call setup, ADSP send stream ready event to modem,Check if VSS_ISTREAM_EVT_READY is send to Modem from ADSP。

cdma voice call 通话过程涉及模块分析

During the voice call,VFR INT(属于DSP的中断函数) 每20ms被唤醒一次去传输UL/DL voice packet。

cdma voice call 通话过程涉及模块分析

如果没有包传输,UE出现通话无声现象,此时log中会有以下打印:

If following log is preset, it means UL has no voice.

VDS had nothing to deliver //UL packet loss

If following log is present, it means DL has no voice.

Vdec pkt not available for decoding //DL packet loss

下面截图中,过滤到"VDS had nothing to deliver" ,说明有上行数据丢失,即上行无声问题:

cdma voice call 通话过程涉及模块分析

在VSS_IMVM_CMD_MODEM_START_VOICE 和VSS_IMVM_CMD_MODEM_STOP_VOICE 命令之间,modem 和adsp 之间会有Vocoder Packet语音包的exchange:

cdma voice call 通话过程涉及模块分析

高通msm8996 平台设计在modem和aDSP之间设计有voice api接口。

从Digital Call Processing(0x1002)分析

Filter key words:

cdma.end_reason| CC index|Release Order|Sent STOP Request to Audio| Voice Adapter

从基站收到release order后,要拆除业务信道,release MVS,不再从MUX 接收Frame!

cdma voice call 通话过程涉及模块分析

从Multiplex Sublayer(0x1006)分析

Filter key words:

voice processing|Service Connection

通话断开后,modem协议栈上不再有语音数据析出,以下LOG针对的是cdma通话,此时MUX 不再与MVS之间有数据的收发!

cdma voice call 通话过程涉及模块分析

从QDSP6 (0x8500)分析

一旦VSS_ISTREAM_EVT_READY 从APR ADSP发送给APR Modem,上/下行语音开始发送。

cdma voice call 通话过程涉及模块分析

从Voice Recognition(0x0017)分析

Filter key words:

VSS_ISTREAM_EVT_READY received| VSS_ISTREAM_EVT_NOT_READY received

在modem 侧,从下行方向来看,从1x/G/W/T协议栈取下来的语音数据,交给voice adapter处理(cva_module.c),cva_onex_vocoder_dl_cb 回调函数被调用。


分享到:


相關文章: