跳转至

VoLTE 基础与通话验证

本文档面向在 DiTing 主控平台上集成 Hi2131E VoLTE 能力的开发者,介绍系统架构、整机通话验证、主控侧公开 RIL 接口、AT 命令以及 VoLTE NV 配置。Hi2131E 固件和 IMS 核心能力以二进制形式交付;开发者通过公开接口和协议进行集成,不修改闭源实现。


VoLTE 开发背景知识

VoLTE架构说明

VoLTE(Voice over LTE,长期演进语音承载)是3GPP标准定义的,基于IMS网络的LTE语音解决方案。通过IMS网络,移动运营商不仅可以无缝的继承传统的语音、短消息业务,还可以将语音通话与丰富的增强功能相整合,提供多样化的服务。本章节描述VoLTE场景下主控芯片和Hi2131E芯片如何实现软件及硬件的二次开发,以最终完成通话业务。

Hi2131E作为支持4G Cat1的Modem蜂窝芯片,提供4G入网数传能力。主控芯片作为穿戴芯片,可提供语音编解码的处理能力。二者配合成为的VoLTE终端,如图1所示。

图 1 VoLTE系统架构图

VoLTE系统架构图

IMS协议栈(VoLTE基础功能的协议栈)主体代码位于主控芯片,Hi2131E侧支持4G入网功能。和Hi2131E之间存在UART通路和SPI数据传输通路,UART通路传输芯片间的控制指令,SPI通路传输芯片间的数据信息。

表 1 VoLTE系统模块描述

组件名称

归属

说明

IMS协议栈

主控芯片

通过“libims.a”文件,集成编译在主控芯片 SDK版本中。

RIL接口

主控芯片

需要通过主控芯片侧RIL头文件调用。

VoLTE相关AT命令

Hi2131E

VoLTE相关AT命令功能,需要通过接入Hi2131E侧的UART串口才可进行发送。

当前VoLTE终端提供的自能力如表2所示。

表 2 IMS子系统模块划分

VoLTE功能分类

说明

基本音频呼叫

支持

有卡紧急呼叫

支持

呼叫方式

支持Precondition资源预留

短信主被叫

支持

语音编解码

仅支持AMR-WB(mode-set=0-8)编解码

彩铃/漫游

支持(IMS网络需支持)。

SRVCC

不支持,仅支持4G网络,无法切换回落。

呼叫转移

不支持

呼叫保持

不支持

三方会议

不支持

开发规范和约束

仅在主控芯片的diting版本下支持和Hi2131E芯片的对接调试。

公开接口与闭源边界

组成 交付方式 开发边界
主控侧 RIL 接口 公开头文件 应用可调用公开接口完成设备、USIM、网络、通话、短信和升级控制
IMS 核心能力 预编译 libims.a 由标准目标链接,不提供内部源码,不进行源码走读或二次修改
Hi2131E Modem 预烧录/固件包 通过 AT 协议和主控 RIL 通路使用,不提供 Hi2131E 侧二次开发接口
主控适配与状态服务 社区 SDK 源码 可用于理解初始化、AT 转发和状态查询,不代表开放 IMS 内部实现

本章的“快速跑通”基于标准 diting-community 目标已集成的 VoLTE 通路完成整机验证,覆盖主控构建、单板连接和通话流程。

关键接口列表

主控侧通过以下 RIL 接口使用 VoLTE 能力,接口声明见公开头文件。

接口 用途
ril_at_cmd_sync_get_info 同步发送 AT 命令并获取响应
ril_register_at_reply_callback 注册异步 AT 响应回调
ril_get_is_usim_in_position 查询 USIM 在位状态
ril_get_radio_ims_reg 查询 IMS 注册状态
ril_set_call_orig_req 发起语音呼叫
ril_set_call_mt_accept_req 接听来电
ril_set_auto_answer 设置自动接听
ril_set_call_rel_req 结束当前呼叫

快速跑通 VoLTE 通话

功能说明与流程

VoLTE 整体交付包含 Hi2131E Modem 和主控侧软件两个部分,通过 UART、SPI、GPIO 等通路建立通信。当前社区版本中,Hi2131E 功能及 AT 命令已经随设备固件提供,开发者构建主控侧 diting-community 目标并完成整机连线、USIM 鉴权和运营商 IMS 注册后,即可验证主叫、被叫和挂断流程。

VoLTE通话流程

准备工作

  • 使用支持 VoLTE 的 DiTing 版本和已经烧录匹配固件的 Hi2131E。
  • 安装可通过核心网鉴权且已开通 VoLTE 的 USIM,并连接天线。
  • 按“DiTing 单板外接连线说明”连接供电、主控调试口和 Hi2131E AT/日志口。
  • 直接连接 Hi2131E AT 口时,可按本文的 AT 流程发送命令;从 Hi3322 AT 口转发时,使用 AT+IMSAUTOTEST=<2131E AT命令>。转发命令返回的外层 OK 只表示主控已受理,Hi2131E 的实际响应需要查看异步回调日志。

编译构建

主控侧版本编译

在已初始化一站式 CLI 环境的 PowerShell 中执行:

fbb set-target pack_diting_community
fbb build --clean
fbb flash -f "$env:FBB_SDK_DIR\output\3322\fwpkg\diting-community.fwpkg" --chip 3322 -d --timeout 180
fbb monitor --port COM3 --baud 750000

COM3 替换为实际 UART2 日志端口。构建完成后,主控固件包位于 <FBB_SDK_DIR>/output/3322/fwpkg/diting-community.fwpkg。标准目标已经包含 VoLTE、IMS Cat1 通道和 AT 转发配置,无需为本文修改 CMake。

Hi2131E侧版本编译

当前版本中,Hi2131E单板不提供二次开发界面和接口,功能接口和AT命令均已实现。软件版本已经烧录至单板中,直接使用即可。

DiTing单板外接连线说明

现DiTing单板已将主控芯片与Hi2131E芯片整合在同一单板上,以下对该单板外接串口小板以及连线进行说明。

表 1 DiTing单板外接连线说明

DiTing单板模块

连接外设

说明

HSUART

串口小板

HSUART1、2、3分别连接串口小板TX、RX、GND。

负责主控芯片版本烧录。

UART2

串口小板

UART2的1、2、3分别连接串口小板TX、RX、GND。

负责AT口打印。

USB

Micro USB线

负责Hi2131E的烧录以及AT日志。

USB-C

USB TYPE C

电源线。

VoLTE拨号通话流程

Hi2131E为实现正常的入网功能,需要一张可通过核心网鉴权的USIM卡。

通过AT命令拨打电话

AT命令模块在Hi2131E侧,通过在Hi2131E侧调用相关AT命令,可以实现VoLTE通话。

AT命令通话流程

主叫:

  1. 开机。

    AT+CFUN=1

    预期返回:OK

  2. 发起注册。

    AT+CGATT=1

    预期返回:OK

    IMSSRVSTATUS:0,2(请参见“IMS服务状态更新指示:+IMSSRVSTATUS”章节。)

  3. 拨打电话。

    ATDxxx;

    预期返回:OK

    +ORIG: 1,0(请参见“发起语音呼叫指示:+ORIG”章节。)

    +CALLSTATE: 1,0,1(请参见“呼叫状态上报:+CALLSTATE”章节。)

    +CALLSTATE: 1,1,1(收到网侧100trying)

    +CONF: 1(请参见“UE收到网络指示:+CONF”章节。)

    +CHANNELINFO: 0,1(请参见“主动上报语音带宽信息:+CHANNELINFO”章节。)

    说明: 无带内音信息,需本地回铃音上报。此时需要自己制作铃声。

    +CALLSTATE: 1,2,1(收到180ringing。)

    IRING(请参见“来电指示:IRING”章节。)

    +CALLSTATE: 1,3,1(收到invite 200OK,呼叫已经接通。)

    +CONN: 1,0(请参见“呼叫接通指示:+CONN”章节。)

  4. 挂断电话。

    ATH

    预期返回:OK

    +CALLSTATE: 1,4,1(通话结束)

    +CEND: 1,100,0(请参见“通话结束指示:+CEND”章节。)

被叫

  1. 开机。

    AT+CFUN=1

    预期返回:OK

  2. 发起注册。

    AT+CGATT=1

    预期返回:OK

    IMSSRVSTATUS:0,2(请参见“IMS服务状态更新指示:+IMSSRVSTATUS”章节。)

  3. 接听。

    手动接听:ATA(请参见“接听来电:A”章节。)

    自动接听:ATS0=x(请参见“设置自动接听:S0”章节。)

    预期返回:OK

    说明: 自动接听命令建议在注册成功后执行,也可以在开机后执行。 手动接听则是在收到有来电提示(+CALLSTATE: 1,5,1)后执行。

  4. 挂断电话。

    ATH

    预期返回:OK

    +CALLSTATE: 1,4,1(通话结束)

    +CEND: 1,100,0

通过RIL接口拨打电话

RIL接口存在于主控芯片侧,通过在调用相关RIL接口,可以实现VoLTE通话。

主叫:

  1. 开机。

    调用ril_at_cmd_sync_get_info接口(请参见“同步AT命令发送”章节)。

    说明: AT命令:AT+CFUN=1 预期返回结果:OK

  2. 注册入网。

    调用ril_at_cmd_sync_get_info接口。

    说明: AT命令:AT+CGATT=1 预期返回结果:OK IMSSRVSTATUS:0,2

  3. 拨打电话。

    调用ril_set_call_orig_req接口(请参见“拨打电话”章节)。

  4. 挂断电话。

    调用ril_set_call_rel_req接口(请参见“挂断电话”章节)。

被叫:

  1. 开机。

    调用ril_at_cmd_sync_get_info接口(请参见“同步AT命令发送”章节)。

  2. 注册入网。

    调用ril_at_cmd_sync_get_info接口。

  3. 手动接听。

    调用ril_set_call_mt_accept_req接口(请参见“手动接听电话”章节)。

  4. 自动接听。

    调用ril_set_auto_answer接口(请参见“设置自动接听”章节)。

  5. 挂断电话。

    调用ril_set_call_rel_req接口(请参见“挂断电话”章节)。