VoLTE NV 与集成验证
VoLTE相关NV
VoLTE支持的NV配置,均存在Hi2131E上,可以通过Hi2131E的DebugKits工具对这些NV进行配置修改,建议VoLTE相关的NV全部保持默认值配置。
定义路径
- 公共配置文件:匹配版本的 Hi2131E NV 配置包中的
common.json。 - Hi2131E 独有配置文件:同一配置包中的
acore_ims.json。 - 客户自定义配置文件:同一配置包中的
customer.json。
上述文件用于说明 Hi2131E 侧的 NV 配置布局。已交付设备可通过与固件版本匹配的 DebugKits 查看和配置 NV;除明确允许修改的字段外,建议保持默认值。
定义约束
-
用户新定义的module_id应位于1~255之间。
-
用户新定义的module_id应按顺序编号,避免重复。
模块说明
参数 |
说明 |
|---|---|
模块 ID |
31 |
模块名 |
IMSA |
模块描述 |
IMS适配层 |
模块类型 |
Custom |
模块Key
IMS_SIP_CONFIG |
|
|---|---|
Key ID |
0x5001 |
Key 状态 |
alive |
Key 描述 |
IMS NV配置。 |
结构类型 |
#define IMS_PARM_STRING_SIZE 129
#define NUM_TWO_SIZE 2
typedef enum {
IMS_PARM_URI_FORMAT_TYPE_DEFAULT = 0, /* default */
IMS_PARM_URI_FORMAT_TYPE_SIP, /* sip */
IMS_PARM_URI_FORMAT_TYPE_TEL, /* tel */
IMS_PARM_URI_BUTT = 0xFF,
} ims_parm_uri_format_type;
typedef enum {
IMS_PARM_TRANSPORT_TYPE_UDP = 0,
IMS_PARM_TRANSPORT_TYPE_TCP,
IMS_PARM_TRANSPORT_TYPE_BUTT = 0xFF,
} ims_parm_transport_type;
typedef struct {
ims_parm_transport_type transport_type;
ims_parm_uri_format_type uri_format;
uint8_t header_compact_enabled;
uint8_t forking_flag;
uint32_t server_port;
uint32_t timer_sip_reg_value;
uint32_t subs_reg_expires;
uint32_t rsv1;
uint32_t rsv2;
uint32_t rsv3;
uint32_t rsv4;
uint32_t sip_socket_keep_alive_value;
int8_t user_agent[IMS_PARM_STRING_SIZE];
int8_t timer_reg;
int8_t sms_format_timer_dereg[NUM_TWO_SIZE];
uint32_t tcp_threshold;
} ims_parm_sip;
|
默认值 |
transport_type =IMS_PARM_TRANSPORT_TYPE_UDP
uri_format =IMS_PARM_URI_FORMAT_TYPE_DEFAULT
header_compact_enabled =0
forking_flag =0(不支持修改)
server_port =5060
timer_sip_reg_value =600000
subs_reg_expires =2000
rsv1 =16000(不支持修改)
rsv2 =17000(不支持修改)
rsv3 =128000(不支持修改)
rsv4 =128000(不支持修改)
sip_socket_keep_alive_value =0(不支持修改)
user_agent[IMS_PARM_STRING_SIZE] ={0}(不支持修改)
timer_reg =0(不支持修改)
sms_format_timer_dereg[NUM_TWO_SIZE] ={2,0}(不支持修改)
tcp_threshold =16500
|
备注 |
- |
IMS_PARM_VOIP |
|
|---|---|
Key ID |
0x5002 |
Key 状态 |
alive |
Key 描述 |
IMS VoIP配置。 |
结构类型 |
typedef enum {
IMS_PARM_SESSION_REFRESH_TYPE_UAC = 0x00, /* Client Refresh */
IMS_PARM_SESSION_REFRESH_TYPE_UAS, /* Server Refresh */
IMS_PARM_SESSION_REFRESH_TYPE_BUTT = 0xFF,
} ims_parm_session_refresh_type;
typedef enum {
IMS_PARM_SESSION_REFRESH_METHOD_UPDATE = 0x00, /* Update */
IMS_PARM_SESSION_REFRESH_METHOD_REINVITE, /* Reinvite */
IMS_PARM_SESSION_REFRESH_METHOD_BUTT = 0xFF,
} ims_parm_session_refresh_method;
typedef struct {
uint8_t session_timer_enabled;
uint8_t pre_condition_enable;
ims_parm_session_refresh_type session_refresh_type;
ims_parm_session_refresh_method session_refresh_method;
uint16_t session_expires;
uint8_t rtp_inactive_timer[2];
} ims_parm_voip;
|
默认值 |
session_timer_enabled =1(不支持修改)
pre_condition_enable =1
session_refresh_type =IMS_PARM_SESSION_REFRESH_TYPE_UAC(不支持修改)
session_refresh_method =IMS_PARM_SESSION_REFRESH_METHOD_UPDATE(不支持修改)
session_expires =1800(不支持修改)
rtp_inactive_timer[2] ={10,1}(不支持修改)
|
备注 |
- |
IMS_PARM_VOIP_CODE |
|
|---|---|
Key ID |
0x5003 |
Key 状态 |
alive |
Key 描述 |
IMS VoIP语音编码配置。 |
结构类型 |
typedef enum {
IMS_PARM_AUDIO_CAP_AMR_NB_AND_WB = 0x00, /* AMR-NB and AMR-WB (AMR-NB preferred) */
IMS_PARM_AUDIO_CAP_AMR_WB_AND_NB, /* AMR-WB and AMR-NB (AMR-WB preferred) */
IMS_PARM_AUDIO_CAP_AMR_NB, /* AMR-NB */
IMS_PARM_AUDIO_CAP_AMR_WB, /* AMR-WB */
IMS_PARM_AUDIO_CAP_EVS_AND_AMR_NB_AND_WB, /* AMR-NB and AMR-WB and EVS (EVS preferred) */
IMS_PARM_AUDIO_CAP_EVS = 5,
IMS_PARM_AUDIO_CAP_TYPE_BUTT
} ims_parm_audio_cap;
typedef enum {
IMS_PARM_AUDIO_CODE_MODE_OCTECT_ALIGN = 0x00, /* Octet-aligned Mode */
IMS_PARM_AUDIO_CODE_MODE_BAND_EFFICIENT, /* Bandwidth-Efficient Mode */
IMS_PARM_AUDIO_CODE_MODE_EF_AND_OC, /* bandwidth-efficient and octet-aligned Mode */
IMS_PARM_AUDIO_CODE_MODE_OC_AND_EF, /* octet-aligned and bandwidth-efficient Mode */
IMS_PARM_AUDIO_CODE_TYPE_BUTT
} ims_parm_audio_code_mode;
typedef struct {
ims_parm_audio_cap comm_audio_cap;
uint8_t set_nb_amr_mode_flag;
uint8_t set_wb_amr_mode_flag;
ims_parm_audio_cap nr_audio_cap;
uint32_t nb_amr_mode_set;
uint32_t wb_amr_mode_set;
ims_parm_audio_code_mode nb_amr_audio_code_mode;
ims_parm_audio_code_mode wb_amr_audio_code_mode;
uint16_t ptimer_value;
uint8_t video_resolution; // 以下参数为保持和IMS一致
uint8_t h264_level;
uint8_t video_fps;
uint8_t cvo_flag;
uint32_t video_bitrate;
} ims_parm_voip_code;
|
默认值 |
comm_audio_cap =IMS_PARM_AUDIO_CAP_AMR_WB_AND_NB set_nb_amr_mode_flag =0 set_wb_amr_mode_flag =0 nr_audio_cap =IMS_PARM_AUDIO_CAP_AMR_NB_AND_WB nb_amr_mode_set =0 wb_amr_mode_set =0 nb_amr_audio_code_mode =IMS_PARM_AUDIO_CODE_MODE_EF_AND_OC wb_amr_audio_code_mode =IMS_PARM_AUDIO_CODE_MODE_EF_AND_OC ptimer_value =20 video_resolution =0 h264_level =1 video_fps =30 cvo_flag =0 video_bitrate =640000 |
备注 |
不支持修改。 |
IMS_PARM_SS_CONF |
|
|---|---|
Key ID |
0x5004 |
Key 状态 |
alive |
Key 描述 |
IMS VoIP语音编码配置。 |
结构类型 |
#define IMS_PARM_STRING_SIZE 129
typedef struct {
uint8_t conf_factory_uri[IMS_PARM_STRING_SIZE];
uint8_t reject_with_486[3];
} ims_parm_ss_conf;
|
默认值 |
conf_factory_uri ={0}
reject_with_486 ={0}
|
备注 |
不支持修改。 |
IMS_PARM_SS_SECURITY |
|
|---|---|
Key ID |
0x5005 |
Key 状态 |
alive |
Key 描述 |
IMS IPSEC配置。 |
结构类型 |
typedef struct {
uint8_t null;
uint8_t aes;
uint8_t des;(不支持修改)
uint8_t rsv[1];
} ealgo_capability;
typedef struct {
uint8_t md5;(不支持修改)
uint8_t sha;
uint8_t rsv[2];
} algo_capability;
typedef struct {
uint8_t srtp_flag;(不支持修改)
uint8_t sock_support_linger[3];(不支持修改)
ealgo_capability ealgo;
algo_capability algo;
} ims_parm_security;
|
默认值 |
srtp_flag =0
sock_support_linger[3] ={2,0,0}
ealgo ={1,0,0,{0}}
algo ={0,1,{0,0}}
|
备注 |
- |
IMS_PARM_MEDIA |
|
|---|---|
Key ID |
0x5006 |
Key 状态 |
alive |
Key 描述 |
IMS媒体配置。 |
结构类型 |
typedef struct {
uint8_t dtx_enable;
uint8_t rsv[3];
} ims_parm_media;
|
默认值 |
dtx_enable = 1
rsv[3] ={0}
|
备注 |
不支持修改。 |
IMS_PARM_UE_CAPABILITY |
|
|---|---|
Key ID |
0x5007 |
Key 状态 |
alive |
Key 描述 |
IMS UE能力配置。 |
结构类型 |
typedef struct {
uint8_t reserved0;
uint8_t reserved1;
uint8_t reserved2;
uint8_t reserved3;
uint8_t reserved4;
uint8_t reserved5;
uint8_t reserved6;
uint8_t reserved7;
uint8_t reserved8;
uint8_t reserved9;
uint8_t reserved10;
uint8_t reserved11;
uint8_t reserved12;
uint8_t reserved13;
uint8_t reserved14;
uint8_t reserved15;
} uint8_nv_stru;
typedef struct {
uint16_t reserved0;
uint16_t reserved1;
uint16_t reserved2;
uint16_t reserved3;
uint16_t reserved4;
uint16_t reserved5;
uint16_t reserved6;
uint16_t reserved7;
} uint16_nv_stru;
typedef struct {
uint32_t reserved0;
uint32_t reserved1;
uint32_t reserved2;
uint32_t reserved3;
uint32_t reserved4;
uint32_t reserved5;
uint32_t reserved6;
uint32_t reserved7;
} uint32_nv_stru;
typedef struct {
uint8_t rsp_sip_timeout;
uint8_t image_attr_flag;
uint8_t att_feature_flag;
uint8_t vdf_switch;
uint8_t keep_alive_flag;
uint8_t ipsec_flag;
uint8_t rsv[2];
uint8_nv_stru uint8_nv_para[16];
uint16_nv_stru uint16_nv_para[16];
uint32_nv_stru uint32_nv_para[8];
} ims_parm_ue_capability;
|
默认值 |
rsp_sip_timeout =0
image_attr_flag =0
att_feature_flag =0
vdf_switch =0
keep_alive_flag =1
ipsec_flag =0
rsv[2] ={0}
uint8_nv_para[16]
={{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}}
uint16_nv_para[16] ={0}
uint32_nv_para[8] ={{0, 0, 0, 0, 64, 536870912, 0, 0}, {0}, {0}, {0}, }, {0}, {0}, {0}}
|
备注 |
仅支持ipsec_flag。 |
IMS_PARM_SIP_TIMER |
|
|---|---|
Key ID |
0x5008 |
Key 状态 |
alive |
Key 描述 |
IMS SIP定时器配置。 |
结构类型 |
typedef struct {
uint32_t timer_t1_value;
uint32_t timer_t2_value;
uint32_t timer_t4_value;
uint32_t timer_ta_value;
uint32_t timer_tb_value;
uint32_t timer_tc_value;
uint32_t timer_td_value;
uint32_t timer_te_value;
uint32_t timer_tf_value;
uint32_t timer_tg_value;
uint32_t timer_th_value;
uint32_t timer_ti_value;
uint32_t timer_tj_value;
uint32_t timer_tk_value;
} ims_parm_sip_timer;
|
默认值 |
timer_t1_value =2000 timer_t2_value =16000 timer_t4_value =17000 timer_ta_value =2000 timer_tb_value =128000 timer_tc_value =200000 timer_td_value =200000 timer_te_value =2000 timer_tf_value =128000 timer_tg_value =2000 timer_th_value =128000 timer_ti_value =17000 timer_tj_value =128000 timer_tk_value =128000 |
备注 |
不支持修改。 |
IMS_NV_EMERGENCY_URN |
|
|---|---|
Key ID |
0x5009 |
Key 状态 |
alive |
Key 描述 |
IMS紧急呼叫URN。 |
结构类型 |
#define EMC_CATEGOTY_URN_SIZE 6
#define EMC_URN_SIZE 65
typedef struct {
uint8_t category;
uint8_t urn[EMC_URN_SIZE];
uint8_t rsv[2];
} ims_emc_category_urn;
typedef struct {
ims_emc_category_urn emc_cat_urn[EMC_CATEGOTY_URN_SIZE];
} ims_nv_emergency_urn;
|
默认值 |
{0} |
备注 |
不支持修改。 |
IMS_PARM_STRING_SWITCH_VALUE |
|
|---|---|
Key ID |
0x500A |
Key 状态 |
alive |
Key 描述 |
IMS字符串配置。 |
结构类型 |
#define IMS_PARM_STRING_SIZE 129
typedef struct {
char phone_context[IMS_PARM_STRING_SIZE];
char phone_context_impu[IMS_PARM_STRING_SIZE];
char dislay_name[IMS_PARM_STRING_SIZE];
uint8_t rsv[1];
} ims_parm_string_switch_value;
|
默认值 |
{0} |
备注 |
当前流程不使用该字段。 |
IMSA_NV_IMS_CTRL |
|
|---|---|
Key ID |
0x500B |
Key 状态 |
alive |
Key 描述 |
IMSA参数配置。 |
结构类型 |
typedef struct {
uint8_t single_cause_num; // 临时被禁原因数量
uint8_t single_cause_list[IMSA_NV_MAX_TEMP_PDN_SINGLE_CAUSE_NUM]; // 临时被禁列表
} imsa_nv_pdn_temp_rej_cause_list;
typedef struct {
uint8_t single_cause_num; // 永久被禁原因数量
uint8_t single_cause_list[IMSA_NV_MAX_PERM_PDN_SINGLE_CAUSE_NUM]; // 永久被禁列表
} imsa_nv_pdn_perm_rej_cause_list;
typedef struct {
uint8_t temp_forb_feature_flag; // 临时被禁特性控制开关
uint8_t perm_forb_feature_flag; // 永久被禁特性控制开关
uint8_t rsv[2];
imsa_nv_pdn_temp_rej_cause_list pdn_temp_rej_cause_list; // PDN临时被拒原因值列表
imsa_nv_pdn_perm_rej_cause_list pdn_perm_rej_cause_list; // pdn永久被拒原因值列表
} imsa_pdn_rej_forbidden_ctrl;
typedef struct {
uint32_t max_time; // RFC5626计算重试时间时的maxtime,单位:s
uint32_t base_time; // RFC5626计算重试时间时的basetime,单位:s
uint32_t retry_period; // 注册失败后周期性重试时间间隔,单位:s
uint32_t save_retry_times; // 保存NV配置的IMS注册失败重新尝试次数,0表示无限次尝试
imsa_pdn_rej_forbidden_ctrl pdn_rej_forb_ctrl; // 承载被拒控制模块
} imsa_nv_ims_ctrl;
|
默认值 |
max_time =1800 base_time =30 retry_period =0 save_retry_times =5 pdn_rej_forb_ctrl =[18, [8, 26, 27, 29, 30, 31, 32, 34, 38, 54, 95, 96, 97, 98, 99, 100, 101, 111, 0, 0, 0, 0, 0]], [2, [28, 33, 0, 0, 0, 0, 0]] |
备注 |
- |
IMSA_NV_IMS_CONFIG |
|
|---|---|
Key ID |
0x500C |
Key 状态 |
alive |
Key 描述 |
IMSA参数配置。 |
结构类型 |
typedef struct {
uint8_t user_info_flag;
uint8_t auth_type;
uint8_t esim_switch;
uint8_t attach_for_ims;
char impi[128];
char impu[128];
char domain[128];
char pass_word[128];
} imsa_nv_ims_config;
|
默认值 |
{0} |
备注 |
attach_for_ims默认值为0,设置为1表示ue入网时使用ims上下文。 PCT用例3GPP TS 34.229-1 19.5.9和3GPP TS 36.523-1 9.2.1.1.28需将attach_for_ims设置为1。 |
IMSA_UE_CAP |
|
|---|---|
Key ID |
0x500D |
Key 状态 |
alive |
Key 描述 |
IMSA UE能力配置。 |
结构类型 |
typedef struct {
uint8_t voice_call_on_ims_support_flag; // IMS语音使能项,1:支持,0:不支持
uint8_t sms_on_ims_support_flag; // IMS短信使能项,1:支持,0:不支持
int16_t call_rsrp_threhold; // 呼叫门限值
uint32_t res_ready_timer_len; // 资源预留定时器时长(2500~3000)
} imsa_ue_cap;
|
默认值 |
voice_call_on_ims_support_flag =1 sms_on_ims_support_flag =1 call_rsrp_threhold =-120 res_ready_timer_len =2500 |
备注 |
- |
IMS_PCSCF_DISCOVERY_POLICY |
|
|---|---|
Key ID |
0x500E |
Key 状态 |
alive |
Key 描述 |
IMSA NV配置PCSCF地址。 |
结构类型 |
#define IMSA_NV_IPV4_ADDR_LEN 4
#define IMSA_NV_IPV6_ADDR_LEN 16
typedef struct {
uint32_t bit_op_prim_pcscf_addr : 1;
uint32_t bit_op_sec_pcscf_addr : 1; // 如果bitOpSecPcscfAddr为1,bitOpPrimPcscfAddr也必须为1
uint32_t bit_op_spare : 30;
uint8_t prim_pcscf_addr[IMSA_NV_IPV4_ADDR_LEN];
uint8_t sec_pcscf_addr[IMSA_NV_IPV4_ADDR_LEN];
} imsa_nv_pdp_ipv4_pcscf;
typedef struct {
uint32_t bit_op_prim_pcscf_addr : 1;
uint32_t bit_op_sec_pcscf_addr : 1; // 如果bitOpSecPcscfAddr为1,bitOpPrimPcscfAddr也必须为1
uint32_t bit_op_spare : 30;
uint8_t prim_pcscf_addr[IMSA_NV_IPV6_ADDR_LEN];
uint8_t sec_pcscf_addr[IMSA_NV_IPV6_ADDR_LEN];
} imsa_nv_pdp_ipv6_pcscf;
typedef struct {
imsa_pcscf_discovery_policy pcscf_discover_policy; // P-CSCF获取策略
uint8_t rsv[3];
imsa_nv_pdp_ipv4_pcscf ipv4_pcscf; // 承载IPv4 P-CSCF信息
imsa_nv_pdp_ipv6_pcscf ipv6_pcscf; // 承载IPv6 P-CSCF信息
} imsa_nv_pcscsf_discovery_policy;
|
默认值 |
pcscf_discover_policy =IMSA_PCSCF_DISCOVERY_POLICY_PCO
rsv[3] ={0}
ipv4_pcscf ={0}
ipv6_pcscf ={0}
|
备注 |
不支持修改。 |
IMS_SIP_PORT |
|
|---|---|
Key ID |
0x500F |
Key 状态 |
alive |
Key 描述 |
IMS注册端口范围。 |
结构类型 |
typedef struct {
uint16_t ims_min_port;
uint16_t ims_max_port;
} ims_sip_port;
|
默认值 |
ims_min_port =5000 ims_max_port =32000 |
备注 |
不支持修改。 |
IMS_COMM_PARA_CONFIG |
|
|---|---|
Key ID |
0x5010 |
Key 状态 |
alive |
Key 描述 |
IMS语音端口号范围。 |
结构类型 |
typedef struct {
uint32_t speech_start;
uint32_t speech_end;
uint32_t video_start;
uint32_t video_end;
} ims_comm_para_config;
|
默认值 |
{0} |
备注 |
当前流程不使用该字段。 |
IMSA_NV_CALL_IMS_CCWA_CTRL_MODE |
|
|---|---|
Key ID |
0x5011 |
Key 状态 |
alive |
Key 描述 |
- |
结构类型 |
typedef enum {
IMSA_CALL_CCWA_CTRL_BY_NW = 0,
IMSA_CALL_CCWA_CTRL_BY_UE = 1,
IMSA_CALL_CCWA_CTRL_MODE_BUTT = 0xFF,
} imsa_call_ccwa_ctrl_mode;
typedef enum {
IMSA_CALL_CCWAI_MODE_DISABLE = 0,
IMSA_CALL_CCWAI_MODE_ENABLE = 1,
IMSA_CALL_CCWAI_MODE_BUTT = 0xFF,
} imsa_call_ccwai_mode;
typedef struct {
imsa_call_ccwa_ctrl_mode ccwa_ctrl_mode;
imsa_call_ccwai_mode ccwai_mode;
uint8_t rsv[2];
} imsa_nv_call_ims_ccwa_ctrl_mode;
|
默认值 |
ccwa_ctrl_mode =IMSA_CALL_CCWA_CTRL_BY_UE
ccwai_mode =IMSA_CALL_CCWAI_MODE_ENABLE
rsv[2] ={0}
|
备注 |
不支持修改。 |
基于公开接口集成自己的业务
业务状态机
应用层只组织公开接口的调用顺序和业务状态,不接触 IMS 或 Hi2131E 内部实现。推荐按以下阶段设计:
- 调用
ril_get_is_usim_in_position检查 USIM 是否在位。 - 使用
ril_at_cmd_sync_get_info发送AT+CFUN=1和AT+CGATT=1,确认 Modem 功能和网络附着请求已受理。 - 调用
ril_get_radio_ims_reg或根据+IMSSRVSTATUS上报确认 IMS 已注册。 - 主叫时调用
ril_set_call_orig_req;被叫时根据产品交互选择ril_set_call_mt_accept_req或ril_set_auto_answer。 - 根据
+CALLSTATE、+CONF、+CONN、+CHANNELINFO和+CEND更新界面、铃音和音频状态。 - 通话结束时调用
ril_set_call_rel_req,并清理应用层通话资源。
异常与恢复设计
- 每个同步接口都检查返回值,并同时判断 AT 响应内容;接口调用成功不等于网络侧业务成功。
- 为 USIM 不在位、未附着、IMS 未注册、拨号失败、对端释放和网络释放分别设计状态分支。
- 对异步 AT 转发,区分主控桥接命令的
OK与 Hi2131E 的真实响应,避免把“命令已受理”误判为“业务完成”。 - 在重试前查询当前注册和呼叫状态,限制重试次数,防止在网络不可用时持续拨号。
- 本地回铃音、蓝牙音频和扬声器音频属于主控媒体业务,按产品音频链路单独验证。
集成验证
至少完成以下验证并记录固件版本、运营商、USIM、信号和日志:
- 开机后 USIM 识别、网络附着和 IMS 注册成功。
- 主叫建立、振铃、接通、双向语音和本端挂断正常。
- 被叫提示、手动/自动接听、双向语音和对端挂断正常。
- 无卡、弱网、IMS 未注册、对端拒接和异常释放路径能返回到可再次呼叫的状态。
注意事项
- 仅主控芯片的
diting版本支持与 Hi2131E 对接调试。 - Hi2131E 不提供二次开发界面和内部源码;不要将预编译库、固件包或内部媒体测试包装层描述为社区可修改 Demo。
- 直接连接 Hi2131E AT 口与通过 Hi3322 AT 口转发是两条不同通路。经主控转发时必须使用
AT+IMSAUTOTEST=<命令>并查看异步响应。 - VoLTE 通话依赖有效 USIM、运营商 LTE/IMS 网络、正确天线和音频硬件。固件编译成功不能替代整机通话验证。
- 无带内音信息时,需要主控侧提供本地回铃音;自动接听建议在注册成功后设置。
- 功能支持范围以“VoLTE 系统模块描述”和能力表为准。SRVCC、呼转、呼叫保持和三方会议等不支持能力不得在应用中默认启用。
- VoLTE 相关 NV 属于交付配置,除明确允许修改的条目外保持默认值;标注“不支持修改”的配置不得改写。
- 日志级别、FOTA 包大小限制以及各 AT/NV 小节中的说明均属于运行约束,不能仅依据接口返回值忽略。
常见编译与运行错误
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 链接阶段找不到 IMS 符号 | 目标不是 diting-community,或预编译 libims.a 未按标准配置接入 |
使用标准目标构建,检查 src/interim_binary/3322/libs/volte/evb_standard/libims.a 是否存在,不修改无关 CMake |
主控 AT 口返回 OK,但业务无变化 |
AT+IMSAUTOTEST 的外层响应只表示转发请求已受理 |
查看 ims autotest at rsp 异步日志,确认 Hi2131E 的真实响应 |
| USIM 无法识别或无法附着 | USIM、卡座、天线、网络或账户能力不满足要求 | 检查 USIM 在位状态、鉴权能力、信号和运营商网络 |
| 已附着但不能拨号 | IMS 尚未注册或运营商未开通 VoLTE | 查询 ril_get_radio_ims_reg/+IMSSRVSTATUS,确认状态后再拨号 |
| 呼叫已接通但无声音 | 主控音频路由、编解码、扬声器/麦克风或蓝牙链路未就绪 | 分别验证呼叫控制和媒体链路,检查 +CHANNELINFO 与主控音频日志 |
| 指定补充业务无效 | 当前版本不支持该能力 | 核对能力表,不使用 SRVCC、呼转、保持或三方会议等未支持功能 |
| 升级包制作或升级失败 | 包大小、版本、签名或串口链路不满足要求 | 按本文 FOTA 接口限制及2131E FOTA升级包制作工具 用户指南逐项检查 |