VoLTE 接口与业务集成
文件结构与接口走读
交付文件与职责
| 文件或目录 | 作用 | 开发者是否修改 |
|---|---|---|
| /src/protocol/ims/include/ril_interface.h | 主控侧公开 RIL 类型和函数声明 | 应用按接口调用,不修改签名 |
| /src/protocol/ims/CMakeLists.txt | IMS 组件入口;缺少源码实现时转入预编译库配置 | 否 |
| /src/libs_url/3322/cmake/ims.cmake | 将预编译 IMS 库接入主控目标 | 否 |
| /src/interim_binary/3322/libs/volte/evb_standard/libims.a | IMS 闭源实现 | 否 |
| /src/middleware/utils/at/at_cat1_cmd/at/at_cat1.c | 主控 AT 口到 Hi2131E 的命令转发通路 | 通常不修改 |
| /src/middleware/chips/3322/modem_service/modem_service.c | 主控侧 Modem 状态查询和服务封装 | 按业务需要调用上层服务 |
| /src/build/config/target_config/3322/config.py | diting-community 的 VoLTE、IMS 通道和组件配置 |
使用标准目标,不为本文单独改动 |
| /src/tools/pkg/bin/3322/volte/Hi2131EV100.fwpkg | 随 SDK 交付的 Hi2131E 固件包 | 否 |
主控调用链

应用通过 ril_interface.h 调用主控侧公开接口;标准构建将 libims.a 链入固件,并初始化主控与 Hi2131E 之间的 UART/SPI 通路。本文后续接口表、AT 命令和 NV 内容用于说明公开交互面及交付配置,不展开闭源库或 Hi2131E 固件内部实现。
对外接口分类
表 1 RIL接口实现方式
一级菜单 |
二级菜单 |
描述 |
实现方式 |
|---|---|---|---|
设备信息 |
软件版本号 |
获取Modem的软件版本信息。 |
核内交互 |
IMEI设备识别码 |
获取Modem设备的识别码。 |
核内交互 |
|
(U)SIM卡信息 |
是否在位,Pin-block,Puk-block |
获取Modem (U)SIM卡是否在位的信息,Pin码和PUK码是否锁定状态。 |
核内交互 |
IMSI |
获取 (U)SIM卡的IMSI信息。 |
核内交互 |
|
本机号码显示 |
获取保存在 (U)SIM中的本机号码。 |
核内交互 |
|
驻网状态 |
是否驻网 |
获取终端是否已经驻网。 |
核内交互 |
显示运营商名称 |
获取终端驻网的运营商信息。 |
核内交互 |
|
是否IMS(VoLTE)驻网 |
获取终端是否IMS驻网信息。 |
核内交互 |
|
是否PDP驻网,显示当前IP地址 |
获取终端是否PDP驻网,并显示IP地址。 |
核内交互 |
|
手动搜网,并显示可选网络 |
触发手动搜网,并返回搜网结果。 |
核间通信 |
|
通话设置 |
通话自动接听开关 |
设置是否通话自动接听。 |
核间通信 |
拨打电话,如“10086” |
通知Modem进行拨打电话。 |
核间通信 |
|
短信设置 |
显示短信中心号码 |
获取短信中心号码。 |
核内交互 |
RIL相关接口
RIL相关接口存在于主控芯片 SDK 版本中,头文件:ril_interface.h
设备信息接口
获取软件版本号
函数原型:int32_t ril_get_software_version(char* ver, size_t size) 函数功能:获取Hi2131E软件版本号,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
ver |
出参 |
char* |
软件版本号,字符串格式。 |
size |
入参 |
size_t |
软件版本号长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E软件版本号接口处理成功。 |
>0 |
int32_t |
获取Hi2131E软件版本号接口处理失败。 |
获取IMEI设备识别号
函数原型:int32_t ril_get_imei(char* imei, size_t len) 函数功能:获取Hi2131E的IMEI号,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
imei |
出参 |
char* |
IMEI号,字符串格式。 |
len |
入参 |
size_t |
IMEI号长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E IMEI号函数接口处理成功。 |
>0 |
int32_t |
获取Hi2131E IMEI号函数接口处理失败。 |
设定VoLTE维测日志级别
函数原型:int32_t ril_set_user_log_level(ril_user_log_level level) 函数功能:设定VoLTE维测功能的日志级别。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
level |
入参 |
ril_user_log_level |
RIL_USER_LEVEL_NULL:关闭日志。 RIL_USER_LEVEL_INFO:打印INFO级别及更高级别日志。 RIL_USER_LEVEL_WARN:打印WARN级别及更高级别日志。 RIL_USER_LEVEL_ERROR:打印ERROR级别及更高级别日志。 RIL_USER_LEVEL_ALL:打印所有日志。 |
说明: 当前版本日志级别默认为RIL_USER_LEVEL_ERROR级别。
判断Hi2131E是否校准
函数原型:int32_t ril_get_if_ue_calibrated(bool *calibrate) 函数功能:获取当前Hi2131E是否已经校准。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
calibrate |
出参 |
bool* |
Hi2131E是否已经校准: true:Hi2131E已校准l; false:Hi2131E未校准。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E是否校准处理成功。 |
>0 |
int32_t |
获取Hi2131E是否校准处理失败。 |
获取基站UTC时间
函数原型:int32_t ril_get_utc_time(const char* utc_str, uint16_t size); 函数功能:获取当前基站UTC时间。
当前公开头文件将 utc_str 声明为 const char *,而 SDK 现有调用将该缓冲区用于接收时间字符串。集成此接口前应以所用 SDK 版本的头文件和实际适配结果为准,避免仅根据旧参数说明修改函数声明。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
utc_str |
出参 |
char* |
返回的UTC时间字符串。 |
size |
入参 |
uint16_t |
出参最大长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取UTC时间处理成功。 |
>0 |
int32_t |
获取UTC时间处理失败。 |
2131E异常信息回调
函数原型:void ril_register_sys_err_report_callback(respond_callback_t rsp_callback); 函数功能:注册回调函数,当2131E发生异常时上报异常原因。
回调函数:typedef int32_t (*respond_callback_t)(uint8_t* data, size_t len);
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
rsp_callback |
入参 |
respond_callback_t |
注册函数。 |
表 2 回调函数respond_callback_t说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
data |
入参 |
uint8_t* |
异常打印字符串(真实类型为char*)。 |
len |
入参 |
size_t |
异常打印字符串长度。 |
SIM卡信息接口
判断Hi2131E的SIM卡是否在位
函数原型:int32_t ril_get_is_usim_in_position(bool *status); 函数功能:获取Hi2131E的(U)SIM是否在位,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
bool* |
是否在位。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的SIM卡是否在位接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的SIM卡是否在位接口处理失败。 |
判断Hi2131E的SIM卡PIN码是否被锁
函数原型:int32_t ril_get_is_usim_pin_block(bool *status); 函数功能:获取Hi2131E的(U)SIM卡PIN码是否被锁,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
bool* |
true:PIN码被锁。 false:PIN码没有被锁。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡PIN码是否被锁接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡PIN码是否被锁接口处理失败。 |
判断Hi2131E的SIM卡PUK码是否被锁
函数原型:int32_t ril_get_is_usim_puk_block(bool *status); 函数功能:获取Hi2131E的(U)SIM卡PUK码是否被锁,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
bool* |
true:PUK码被锁。 false:PUK码没有被锁。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡PUK码是否被锁接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡PUK码是否被锁接口处理失败。 |
获取Hi2131E的SIM卡IMSI号
函数原型:int32_t ril_get_imsi(char* imsi, size_t len); 函数功能:获取Hi2131E的(U)SIM卡IMSI号,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
imsi |
出参 |
char* |
IMSI号,字符串格式。 |
len |
入参 |
size_t |
IMSI号长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡IMSI号接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡IMSI号接口处理失败。 |
获取Hi2131E的SIM卡msisdn
函数原型:int32_t ril_get_usim_msisdn(char* msisdn, size_t len); 函数功能:获取Hi2131E的(U)SIM卡msisdn信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
imsi |
出参 |
char* |
msisdn,字符串格式。 |
len |
入参 |
size_t |
msisdn长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理失败。 |
获取CCHO返回结果
函数原型:int32_t ril_get_ccho(char* ccho, size_t len, char* ccho_str, uint16_t str_len); 函数功能:获取Hi2131E的“AT+CCHO”命令返回结果。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
ccho |
出参 |
char* |
CCHO命令返回结果,字符串格式。 |
len |
出参 |
size_t |
CCHO命令返回结果长度。 |
ccho_str |
入参 |
char* |
CCHO命令。 |
str_len |
入参 |
uint16_t |
CCHO命令长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的“AT+CCHO”命令返回结果接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的“AT+CCHO”命令返回结果接口处理失败。 |
小区信息
查询当前小区信号状态
函数原型:int32_t ril_get_radio_signal_info(soc_ue_cell_radio_info *signal_info); 函数功能:获取Hi2131E的当前小区信号状态,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
signal_info |
出参 |
soc_ue_cell_radio_info* |
int16_t rsrp:参考信号接收功率。单位:1/10dB。 int16_t rsrq:参考信号接收质量。单位:1/10dB。 int16_t rssi:接收信号强度指示。单位:1/10dB。 int16_t snr:信噪比。单位:1/10dB。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理失败。 |
查询当前小区信息
函数原型:int32_t ril_get_ue_registration_status(soc_ue_cell_info *reg_status); 函数功能:获取Hi2131E的当前小区信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
reg_status |
出参 |
soc_ue_cell_info * |
uint8_t version bool primary_cell:0,搜索到的邻近小区;1,当前服务小区。 bool valid:0,无效;1,有效。 uint16_t pci:物理小区标识。范围:0~503。 uint32_t earfcn:E-UTRA绝对射频信道号。 int16_t rsrp:参考信号接收功率。单位:1/10dB。 int16_t rsrq:参考信号接收质量。单位:1/10dB。 int16_t rssi:接收信号强度指示。单位:1/10dB。 int16_t snr:信噪比。单位:1/10dB。 int16_t srxlev:小区选择接收电平值。单位:dB。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的(U)SIM卡msisdn信息接口处理失败。 |
查询邻区信息
函数原型:int32_t ril_get_ue_neighbor_cell_info(soc_ue_neighbor_info *neighbor_info); 函数功能:获取Hi2131E的临区信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
neighbor_info |
出参 |
soc_ue_neighbor_info * |
uint8_t neighbor_cell_num:邻区个数。 soc_ue_cell_info cell_info[10]:小区信息。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的临区信息接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的临区信息接口处理失败。 |
查询网络下行速率
函数原型:int32_t ril_get_network_dl_rate(uint32_t *dl_rate) 函数功能:获取Hi2131E当前网络下行速率信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
dl_rate |
出参 |
uint32_t * |
下行实际速率。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E当前网络下行速率信息成功。 |
>0 |
int32_t |
获取Hi2131E当前网络下行速率信息失败。 |
查询网络上行速率
函数原型:int32_t ril_get_network_ul_rate(uint32_t *ul_rate) 函数功能:获取Hi2131E当前网络上行速率信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
ul_rate |
出参 |
uint32_t * |
上行实际速率。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E当前网络上行速率信息成功。 |
>0 |
int32_t |
获取Hi2131E当前网络上行速率信息失败。 |
查询上行发数状态
函数原型:int32_t ril_get_network_ul_tx_stats(bool *status) 函数功能:获取Hi2131E上行发数状态,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
bool* |
true:当前处于发数状态; false:当前未处于发数状态。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E上行发数状态成功。 |
>0 |
int32_t |
获取Hi2131E上行发数状态失败。 |
驻网状态接口
获取驻网状态
函数原型:int32_t ril_get_radio_reg_status(uint8_t *status); 函数功能:获取Hi2131E的驻网状态,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
uint8_t* |
0:EMM detached。 1:EMM attached。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取Hi2131E的驻网状态接口处理成功。 |
>0 |
int32_t |
获取Hi2131E的驻网状态接口处理失败。 |
显示运营商信息
函数原型:int32_t ril_get_radio_operator_info(ril_operator_info *operator_info); 函数功能:显示Hi2131E的运营商信息,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
operator_info |
出参 |
ril_operator_info* |
运营商信息。 |
表 2 ril_operator_info结构体说明
字段 |
参数结构类型 |
说明 |
|---|---|---|
numeric |
char[20] |
数字格式的运营商信息。 |
name_short |
char[20] |
短字符串格式的运营商信息。 |
name_long |
char[20] |
长字符串格式的运营商信息。 |
表 3 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
显示运营商信息接口处理成功。 |
>0 |
int32_t |
显示运营商信息接口处理失败。 |
获取IMS驻网状态
函数原型:int32_t ril_get_radio_ims_reg(bool *status); 函数功能:获取IMS的驻网状态,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
status |
出参 |
bool* |
IMS注册状态。 true:已注册; false:未注册。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取IMS的驻网状态接口处理成功。 |
>0 |
int32_t |
获取IMS的驻网状态接口处理失败。 |
是否PDP驻网,显示IP地址
函数原型:int32_t ril_get_ue_addr(ril_ip_addr_info *ip_addr_info); 函数功能:获取PDP地址,核内交互(相当于执行:AT+CGPADDR)。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
ril_ip_addr_info |
出参 |
ril_ip_addr_info |
IP地址信息。 |
表 2 ril_ip_addr_info结构体说明
字段 |
参数结构类型 |
说明 |
|---|---|---|
ip_addr |
ip_addr_t [2] |
IP地址信息。 |
ip_num |
uint8_t |
IP数量。 |
表 3 ip_addr_t结构体说明
字段 |
参数结构类型 |
说明 |
|---|---|---|
u_addr |
union |
地址信息,联合体。 |
ip6 |
ip6_addr_t |
IPv6地址: u32_t addr[4]。 |
ip4 |
ip4_addr_t |
IPv4地址: u32_t addr。 |
type |
uint8_t |
IP地址类型。 |
表 4 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取PDP接口处理成功。 |
>0 |
int32_t |
获取PDP接口处理失败。 |
手动搜网,并显示可选网络
函数原型:int32_t ril_get_radio_search_start(void); 函数功能:获取在网络中搜索到的PLMN清单,核内交互(相当于执行:AT+COPS=?)。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
无 |
- |
- |
当前公开接口无入参。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
获取PLMN清单接口处理成功。 |
>0 |
int32_t |
获取PLMN清单接口处理失败。 |
设置快速休眠时间
函数原型:int32_t ril_set_fast_sleep_time(ril_set_fast_sleep_t fast_sleep); 函数功能:开启增强休眠功能后没有数传时快速进入idle态时间,单位ms,最小100ms。不建议设置时间小于1s,时间太短可能会导致数传失败。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
fast_sleep |
入参 |
ril_set_fast_sleep_t |
设置条件结构体。 |
表 2 ril_set_fast_sleep_t结构体说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
fast_sleep_switch |
入参 |
bool |
是否开启快速睡眠。 |
fast_sleep_time |
入参 |
uint32_t |
进入快速睡眠的时间,单位ms(默认5000ms)。 |
表 3 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
设置进入休眠的时间成功。 |
>0 |
int32_t |
设置进入休眠的时间失败。 |
通话接口
设置自动接听
函数原型:int32_t ril_set_auto_answer(uint8_t time_s); 函数功能:设置自动应答,核内交互(相当于执行:ATS0=)。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
time_s |
入参 |
uint8_t |
S0定时器时长。 0:关闭自动接听; 1~255:启动自动应答的时间,单位:s。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
设置自动接听接口处理成功。 |
>0 |
int32_t |
设置自动接听接口处理失败。 |
拨打电话
函数原型:int32_t ril_set_call_orig_req(const char* call_str); 函数功能:拨打电话,核内交互(相当于执行:ATDxxx;)。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
call_str |
入参 |
char* |
拨打的电话号码。 |
响应回调 |
- |
- |
当前公开函数仅接收号码字符串,不包含独立的回调参数。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
拨打电话接口处理成功。 |
>0 |
int32_t |
拨打电话接口处理失败。 |
手动接听电话
函数原型:int32_t ril_set_call_mt_accept_req(void); 函数功能:手动接听电话,核内交互(相当于执行:ATA)。
表 1 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
接听电话接口处理成功。 |
>0 |
int32_t |
接听电话接口处理失败。 |
挂断电话
函数原型:int32_t ril_set_call_rel_req(void); 函数功能:挂断电话,核内交互(相当于执行:ATH)。
表 1 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
挂断电话接口处理成功。 |
>0 |
int32_t |
挂断电话接口处理失败。 |
AT指令通道
Hi2131E侧AT命令遵循3GPP TS 27.007和27.005规范。
AT指令发送
函数原型:int32_t ril_at_cmd_exc(const char *str); 函数功能:执行AT命令,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
str |
入参 |
char* |
AT命令字符串。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行AT命令接口处理成功。 |
>0 |
int32_t |
执行AT命令接口处理失败。 |
同步AT命令发送
-
函数原型:int32_t ril_at_cmd_sync_get_info(const char *at_str, uint8_t *data, uint16_t size, uint32_t timeout);
函数功能:同步执行AT命令,核内交互。
表 1 参数说明
参数
参数描述类型
参数结构类型
说明
at_str
入参
char
AT命令字符串。
data
出参
uint8_t
AT命令返回的结果字符串。
size
入参
uint16_t
AT命令结果字符串的长度。
timeout
入参
uint32_t
同步执行AT命令超时时间。
表 2 返回值说明
返回值
参数结构类型
说明
0
int32_t
执行同步AT命令接口处理成功。
>0
int32_t
执行同步AT命令接口处理失败。
-
函数原型:int32_t ril_at_sync_multiple_get_info(const char *at_str, uint8_t *data, uint32_t size, uint32_t times, uint32_t timeout)
函数功能:同步执行AT命令,接收多条AT指令回复内容。
表 3 参数说明
参数
参数描述类型
参数结构类型
说明
at_str
入参
char
AT命令字符串。
data
出参
uint8_t
AT命令返回的结果字符串。
size
入参
uint32_t
AT命令结果字符串的长度。
times
入参
uint32_t
指定接收多少条AT命令执行回复结果。
timeout
入参
uint32_t
同步执行AT命令超时时间。
表 4 返回值说明
返回值
参数结构类型
说明
0
int32_t
执行同步AT命令接口处理成功。
>0
int32_t
执行同步AT命令接口处理失败。
AT命令注册回调
函数原型:void ril_register_at_reply_callback(respond_callback_t rsp_callback); 函数功能:向AT注册回调。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
rsp_callback |
入参 |
respond_callback_t |
回调函数: typedef int32_t (*respond_callback_t)(uint8_t* data, size_t len); |
短信接口
查询短信中心号码
函数原型:int32_t ril_get_sms_smsc(char* smsc, size_t len); 函数功能:查询当前短信地址。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
smsc |
出参 |
char* |
短信中心号码。 |
len |
入参 |
size_t |
smsc长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行查询短信中心号码接口处理成功。 |
>0 |
int32_t |
执行查询短信中心号码接口处理失败。 |
接收单条短信
函数原型:int32_t ril_ue_read_short_message(int8_t sms_index, uint8_t *sms_data, int16_t read_max_length); 函数功能:接收单条短信,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
sms_index |
入参 |
int8_t |
查询短信的索引。 |
sms_data |
出参 |
uint8_t * |
短信内容。 |
read_max_length |
入参 |
int16_t |
短信内容接收长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行接收单条短信接口处理成功。 |
>0 |
int32_t |
执行接收单条短信接口处理失败。 |
发送单条短信
函数原型:int32_t ril_ue_send_short_message(const char* number, const char *sms_data, uint16_t sms_len) 函数功能:发送单条短信,核内交互。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
number |
入参 |
const char* |
短信发送目的号码。 |
sms_data |
入参 |
const char* |
短信内容。 |
sms_len |
入参 |
uint16_t |
短信内容长度。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行发送单条短信接口处理成功。 |
>0 |
int32_t |
执行发送单条短信接口处理失败。 |
升级接口
Hi2131E升级包可参考2131E FOTA升级包制作工具 用户指南制作,通过ril升级接口,可实现Hi2131E芯片的版本更新、固件升级,升级流程:开始升级 -> 发送数据包1 -> 发送数据包2 -> 发送数据包n -> 结束升级。
须知: Hi2131E差分升级包大小不能大于350KByte。
开始升级通知
函数原型:int32_t ril_systerm_updated_start(void) 函数功能:升级开始通知,Hi2131E开启升级。
表 1 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行升级开始通知成功。 |
>0 |
int32_t |
执行升级开始通知失败。 |
升级完成通知
函数原型:int32_t ril_systerm_updated_end(void) 函数功能:升级完成通知,Hi2131E完成升级。
表 1 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行升级完成通知成功。 |
>0 |
int32_t |
执行升级完成通知失败。 |
发送升级包数据
函数原型:int32_t ril_systerm_updated_download_package(ril_upadated_package_t *upadated_package) 函数功能:发送升级包到Hi2131E。
表 1 参数说明
参数 |
参数描述类型 |
参数结构类型 |
说明 |
|---|---|---|---|
upadated_package |
入参 |
ril_upadated_package_t; |
download_type:当前固定为1,默认升级包数据保存到文件系统中。 Sn:序列号。应从0开始,每个数据包段递增1 Len:数据长度,应为32/64/128/256/512。 Crc:data段数据校验值crc8(数据包段中每个字节的xor8)。 Data:升级包数据。 |
表 2 返回值说明
返回值 |
参数结构类型 |
说明 |
|---|---|---|
0 |
int32_t |
执行升级包发送接口处理成功。 |
>0 |
int32_t |
执行升级包发送接口处理失败。 |
VoLTE相关AT命令
发起呼叫请求:D
命令描述
发起一个呼叫。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
D[<dial_string>][I][G][;] |
OK 错误情况: +CME ERROR: <err> |
atd13900000000; OK atd13900000000i; OK atd13900000000I; OK |
参数描述
参数 |
描述 |
|---|---|
<dial_string> |
字符串类型。呼叫号码。 |
[I] |
如果命令中带有I,表示在这次呼叫中禁止显示主叫号码; 如果命令中带有i,表示在这次呼叫中允许显示主叫号码。 |
[G] |
暂不支持。一般表示在这次呼叫中使能CUG补充业务。 |
接听来电:A
命令描述
接听当前的来电。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
A |
OK 错误情况: +CME ERROR: <err> |
ATA OK |
挂断电话:H
命令描述
挂断电话。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
H[<value>] |
OK 错误情况: +CME ERROR: <err> |
ATH OK |
参数描述
参数 |
描述 |
|---|---|
<value> |
整型值,仅支持取值为0。 取其他值时,响应结果均为ERROR。 |
设置自动接听:S0
命令描述
设置自动应答。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
S0=<n> |
OK 错误情况: +CME ERROR: <err> |
ATS0=5 OK |
S0? |
<CR><LF><n><CR><LF> <CR><LF>OK<CR><LF> |
ATS0? 5 OK |
S0=? |
<CR><LF>S0: (list of supported <n>s) <CR><LF> <CR><LF>OK<CR><LF> |
ATS0=? S0: (0-255) OK |
参数描述
参数 |
描述 |
|---|---|
<n> |
整型值,默认值为0。 0:关闭自动应答; 1~255:启动自动应答的时间,单位:s。 注:不同的核心网规定的振铃超时时间不同,设置的自动应答时间过长可能会导致核心网“Altering timeout”异常,从而拒绝呼叫。 IMS核心网网元通常配置被叫侧呼叫振铃超时定时器时长为60s,建议此命令配置时长不要超过该值。 |
查询当前呼叫信息:+CLCC
命令描述
列出当前所有的呼叫。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
+CLCC |
+CLCC: <id1>,<dir>,<stat>,<mode>,<mpty>[, <number>,<type>[,<alpha>]] <id2>,<dir>,<stat>,<mode>,<mpty>[, <number>,<type> ...... |
AT+CLCC +CLCC: 1,0,0,0,0,"888",129 OK |
+CLCC=? |
<CR><LF><n><CR><LF> <CR><LF>OK<CR><LF> |
AT+CLCC=? OK |
参数描述
参数 |
描述 |
|---|---|
<idx> |
整型值,呼叫标识。 |
<dir> |
整型值,呼叫方向。 0:主叫; 1:被叫。 |
<state> |
整型值,呼叫状态。 0:激活状态; 1:呼叫保持状态 2:主叫,拨号状态; 3:主叫,回铃音状态; 4:被叫,来电状态; |
<mode> |
整型值,呼叫模式。(当前仅支持语音呼叫模式。) 0:语音呼叫。 |
<mpty> |
整型值,多方通话状态。 0:不在多方通话中。 |
<number> |
字符串类型,电话号码。 主叫侧显示被叫号码,被叫侧显示主叫号码。 |
<type> |
号码地址类型,整型值。 129:普通号码; 145:国际号码(以“+”开头)。 |
查询IMS域注册状态:+CIREG
命令描述
查询当前IMS域网络注册状态以及设置状态上报方式。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
+CIREG=[<n>] |
OK 错误情况: +CME ERROR: <err> |
AT+CIREG=1 OK |
+CIREG? |
+CIREG: <n>,<reg_info>[,<ext_info>] 错误情况: +CME ERROR: <err> |
AT+CIREG? +CIREG:0,1,5(IMS已注册且支持语音和短信) OK |
+CIREG=? |
+CIREG: (list of supported <n>s) OK |
AT+CIREG=? +CIREG: (0-2) OK |
参数描述
参数 |
描述 |
|---|---|
<n> |
整型值,主动上报方式,默认值为0。 0:禁止+CIREGU的主动上报; 1:使能+CIREGU: <reg_info>的主动上报; 2:使能+CIREGU: <reg_info>[,<ext_info>]的主动上报。 |
<reg_info> |
整型值,注册状态。 0:未注册IMS网络; 1:已注册IMS网络。 |
<ext_info> |
整型值,IMS域能力值,取值范围[1,0xFFFFFFFF],每个bit位表示不同的能力。 1:RTP-based transfer of voice; 2:RTP-based transfer of text; 4:SMS using IMS functionality; 8:RTP-based transfer of video。 例如,等于5的时候,表示支持RTP-based transfer of voice和SMS using IMS functionality。 注:IMS已注册才显示该值 |
主动上报IMS域注册状态:+CIREGU
命令描述
主动上报当前IMS域网络注册状态,能否主动上报受+CIREG命令控制。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
- |
+CIREGU: <reg_info>[,<ext_info>] |
+CIREGU:1,5 OK |
参数描述
参数 |
描述 |
|---|---|
<reg_info> |
整型值,注册状态。 0:未注册IMS网络; 1:注册了IMS网络。 |
<ext_info> |
整型值,IMS域能力值,取值范围[1,0xFFFFFFFF],每个bit位表示不同的能力。 1: RTP-based transfer of voice; 2: RTP-based transfer of text; 4: SMS using IMS functionality; 8:RTP-based transfer of video。 例如,等于5时,表示支持RTP-based transfer of voice和SMS using IMS functionality。 |
查询IMS域的虚拟号码:+VOLTEIMPU
命令描述
该命令用于查询IMS域的IMPU信息以及虚拟号码。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
+VOLTEIMPU |
<CR><LF>OK<CR><LF> <CR><LF>+VOLTEIMPU: < IMPU>[,<Virtual_Number >]<CR><LF> 错误情况: <CR><LF>+CME ERROR: <err><CR><LF> |
AT+VOLTEIMPU +VOLTEIMPU: abcd,123456 OK |
+VOLTEIMPU? |
OK |
AT+VOLTEIMPU? OK |
+VOLTEIMPU=? |
OK |
AT+VOLTEIMPU=? OK |
参数描述
参数 |
说明 |
|---|---|
<IMPU> |
字符串类型,IMPU信息,取值范围0~128Byte。 |
<Virtual_Number> |
字符串类型,网络分配的虚拟电话号码,最大长度为127Byte。 |
IMS服务状态更新指示:+IMSSRVSTATUS
命令描述
IMS服务状态或者注册状态发生变化的主动上报。
命令语法
命令 |
示例 |
|---|---|
+IMSSRVSTATUS: <sms_srv_status>,<voip_srv_status> |
+IMSSRVSTATUS: 2,0 |
参数描述
参数 |
描述 |
|---|---|
<sms_srv_status> |
整型值,IMS短信的服务状态: 0:IMS SMS service is not available; 1:IMS SMS is in limited service; 2:IMS SMS is in full service。 |
<voip_srv_status> |
整型值,IMS VoIP的服务状态: 0:IMS VoIP service is not available; 1:IMS VoIP is in limited service; 2:IMS VoIP is in full service。 |
来电指示:IRING
命令描述
IMS域来电指示。
命令语法
命令 |
示例 |
|---|---|
IRING |
有IMS域来电 IRING。 |
发起语音呼叫指示:+ORIG
命令描述
主动上报命令,在用户发起电路域呼叫时,通知用户UE正在向网络发起呼叫。
命令语法
命令 |
示例 |
|---|---|
+ORIG: <call_id>,<call_type> |
UE向网络发起一个语音呼叫 +ORIG: 1,0。 |
参数描述
参数 |
说明 |
|---|---|
call_id |
整型值,呼叫ID。 |
call_type |
整型值,呼叫类型。 0:语音呼叫; 9:紧急呼叫。 |
UE收到网络指示:+CONF
命令描述
主动上报命令,通知用户发起呼叫后,UE收到了网络接通指示。
命令语法
命令 |
示例 |
|---|---|
+CONF: <call_id> |
UE收到网络接通指示 +CONF: 1。 |
参数描述
参数 |
说明 |
|---|---|
call_id |
整型值,呼叫ID。 |
呼叫接通指示:+CONN
命令描述
主动上报命令,当呼叫接通后,UE通知用户呼叫已经接通。
命令语法
命令 |
示例 |
|---|---|
+CONN:<call_id>, <call_type> |
语音呼叫已经接通 +CONN:1,0。 |
参数描述
参数 |
说明 |
|---|---|
call_id |
整型值,呼叫ID。 |
call_type |
整型值,呼叫类型。 0:语音呼叫; 9:紧急呼叫。 |
通话结束指示:+CEND
命令描述
主动上报命令,在通话结束后,UE通知用户通话结束原因和通话时长。
命令语法
命令 |
示例 |
|---|---|
+CEND: <call_id>, <duration>,<cause> |
通话结束 +CEND: 1,10,0 |
参数描述
参数 |
说明 |
|---|---|
call_id |
整型值,呼叫ID。 |
duration |
整型值,通话时长,单位:s。 |
cause |
整型值,呼叫错误原因值;如表1所示。 |
表 1 错误码说明
错误码 |
数值 |
说明 |
|---|---|---|
IMSA_CALL_CAUSE_SUCCESS |
0 |
正常挂断。 |
IMSA_CALL_CAUSE_IMSA_ERROR |
1 |
IMSA特殊无服务异常。IMSA_INTRA_CALL_SRV_STATUS_IND消息中no_srv_cause不是IMSA_CALL_NO_SRV_CAUSE_MEDIA_PDP_RELEASE、 IMSA_CALL_NO_SRV_CAUSE_SIP_PDP_ERR、IMSA_CALL_NO_SRV_CAUSE_REG_ERR、IMSA_CALL_NO_SRV_CAUSE_EMC_SIP_PDP_NO_PCSCF。 |
IMSA_CALL_CAUSE_IMSA_TCALL_TIMEOUT |
2 |
IMSA Tcall超时。 |
IMSA_CALL_CAUSE_IMSA_WAIT_RES_TIMEOUT |
3 |
等待资源预留成功定时器超时。 |
IMSA_CALL_CAUSE_IMS_EMC_REG_FAIL |
4 |
紧急注册失败引起紧急呼叫失败。 |
IMSA_CALL_CAUSE_IMS_INNER_ERROR |
5 |
IMS协议栈内部异常,IMS侧sip_status_code<100。 |
IMSA_CALL_CAUSE_IMSA_STRM_RTP_BREAK |
6 |
IMS侧sip_status_code=100。 |
IMSA_CALL_CAUSE_IMSA_IMS_ERROR |
7 |
IMS侧100<sip_status_code<300或者sip_status_code≥700。 |
IMSA_CALL_CAUSE_NOR_DIAL_ERROR |
8 |
IMSA普通呼叫dial请求创建失败。 |
IMSA_CALL_CAUSE_EMC_DIAL_ERROR |
9 |
IMSA紧急呼叫dial请求创建失败。 |
IMSA_CALL_CAUSE_SIGNAL_PDP_ERR |
10 |
默认承载被释放。 |
IMSA_CALL_CAUSE_MEDIA_PDP_ERR |
11 |
专有承载被释放。 |
300~700 |
300~700 |
IMS侧300≤sip_status_code<700。 |
呼叫状态上报:+CALLSTATE
命令描述
主动上报命令,呼叫过程中,主动上报呼叫状态的变化。
命令语法
命令 |
示例 |
|---|---|
+CALLSTATE: <call_id>, <state>,<domain> |
有IMS域来电 +CALLSTATE: 1,5,1 |
参数描述
参数 |
说明 |
|---|---|
call_id |
整型值,呼叫ID。 |
state |
整数型,指示对应call_id的呼叫状态。 0:Call originate(MO),向网络发起呼叫; 1:Call is Proceeding,呼叫发起,网络已经开始处理; 2:Alerting,振铃; 3:Connected,呼叫已经接通; 4:Released,呼叫被释放; 5:InComing,有来电; 6:Waiting,有一个等待的来电; 7:Hold,呼叫保持; 8:Retrieve,呼叫恢复。 |
domain |
整型值,语音电话的呼叫域。 0:CS域语音电话; 1:IMS域语音电话。 |
主动上报语音带宽信息:+CHANNELINFO
命令描述
主动上报命令,呼叫过程中,主动上报语音带宽的信息。
命令语法
命令 |
示例 |
|---|---|
+CHANNELINFO: <status>,<domain> |
IMS域语音电话,当前语音处于宽带语音时,主动上报 +CHANNELINFO: 2,1 |
参数描述
参数 |
说明 |
|---|---|
status |
整型值,语音信道的状态。 0:振铃,无带内音信息(本地回铃音上报); 1:带内音可用,窄带语音(网侧携带铃音); 2:带内音可用,宽带语音(网侧携带铃音)。 |
domain |
整型值,语音电话的呼叫域。 0:CS域语音电话(本产品无CS); 1:IMS域语音电话。 |
上报IMS注册失败原因:+IMSREGERR
命令描述
该命令用于上报IMS注册失败原因。
命令语法
命令 |
示例 |
|---|---|
+IMSREGERR: <err_type>, <err_code>,<sip_reason> |
通话结束 +IMSREGERR: 1,3, |
参数描述
参数 |
说明 |
|---|---|
err_type |
整型值,错误类型。 0:PDN建立失败; 1:IMS注册失败。 |
err_code |
整数型,失败原因值。 当err_type为0时:PDN建立失败原因。 当err_type为1时: 0:注册模块命令执行成功(不会出现); 1:注册模块命令执行失败; 2:网侧SIP拒绝,具体原因见sip_reason; 3:发送或接收SIP报文超时; 4:发送或接收SIP报文时,底层传输发生错误; 5:注册成功后,网侧发起的去注册; 6:没有可以再使用的注册地址对; 7:注册被禁止(暂时仅作预留,不会出现); 8:周期注册,被网侧拒绝; 300~700:IMS失败原因值。 |
sip_reason |
字符串值类型,网侧SIP消息拒绝携带的原因值。 |
IMS域被叫处理状态信息主动上报:+IMSMTRPT
命令描述
该命令用于上报IMSA开始处理被叫。
命令语法
命令 |
示例 |
|---|---|
+IMSMTRPT: <number>,<status>,<cause> |
IMSA开始处理被叫主动上报: +IMSMTRPT: +8618000009193,0,0 |
参数描述
参数 |
说明 |
|---|---|
number |
字符串,被叫来电号码。 |
status |
整型值,状态。 0:收到被叫,开始处理被叫过程; 1:被叫异常,未收到RING就结束。 |
cause |
整型值,呼叫错误原因值;如表1所示。 |
表 1 错误码说明
错误码 |
数值 |
说明 |
|---|---|---|
IMSA_CALL_CAUSE_SUCCESS |
0 |
正常挂断。 |
IMSA_CALL_CAUSE_IMSA_ERROR |
1 |
IMSA特殊无服务异常。IMSA_INTRA_CALL_SRV_STATUS_IND消息中no_srv_cause不是IMSA_CALL_NO_SRV_CAUSE_MEDIA_PDP_RELEASE,IMSA_CALL_NO_SRV_CAUSE_SIP_PDP_ERR,IMSA_CALL_NO_SRV_CAUSE_REG_ERR,IMSA_CALL_NO_SRV_CAUSE_EMC_SIP_PDP_NO_PCSCF。 |
IMSA_CALL_CAUSE_IMSA_TCALL_TIMEOUT |
2 |
IMSA Tcall超时。 |
IMSA_CALL_CAUSE_IMSA_WAIT_RES_TIMEOUT |
3 |
等待资源预留成功定时器超时。 |
IMSA_CALL_CAUSE_IMS_EMC_REG_FAIL |
4 |
紧急注册失败引起紧急呼叫失败。 |
IMSA_CALL_CAUSE_IMS_INNER_ERROR |
5 |
IMS协议栈内部异常,IMS侧sip_status_code<100。 |
IMSA_CALL_CAUSE_IMSA_STRM_RTP_BREAK |
6 |
IMS侧sip_status_code=100。 |
IMSA_CALL_CAUSE_IMSA_IMS_ERROR |
7 |
IMS侧100<sip_status_code<300或者sip_status_code≥700。 |
IMSA_CALL_CAUSE_NOR_DIAL_ERROR |
8 |
IMSA普通呼叫dial请求创建失败。 |
IMSA_CALL_CAUSE_EMC_DIAL_ERROR |
9 |
IMSA紧急呼叫dial请求创建失败。 |
IMSA_CALL_CAUSE_SIGNAL_PDP_ERR |
10 |
默认承载被释放。 |
IMSA_CALL_CAUSE_MEDIA_PDP_ERR |
11 |
专有承载被释放。 |
IMSA_CALL_CAUSE_EMM_EST_ERR |
12 |
EMM建链失败引起呼叫失败。 |
300~700 |
300~700 |
IMS侧300≤sip_status_code<700。 |
关闭IMS功能开关:+IMSSWITCH
命令描述
配置开启/关闭IMS协议栈。
命令语法
命令 |
返回结果 |
示例 |
|---|---|---|
+IMSSWITCH=[<n>] |
OK 错误情况: +CME ERROR: <err> |
AT+IMSSWITCH=1 OK |
+IMSSWITCH=? |
+IMSSWITCH: (list of supported <n>s) OK |
AT+IMSSWITCH=? +IMSSWITCH: (0-1) OK |
参数描述
参数 |
描述 |
|---|---|
<n> |
整型值,默认值为1。 0:关闭IMS协议栈; 1:打开IMS协议栈。 |