SIM 开发指导_Rev1.3
修订记录
版本 |
日期 |
作者 |
修订内容 |
|---|---|---|---|
Rev1.0 |
23-09-14 |
YPP |
创建文档 |
Rev1.1 |
24-03-25 |
sxx |
更改文档名称 |
Rev1.2 |
24-10-25 |
LJZ |
修改文档格式 |
Rev1.3 |
25-04-18 |
ZH |
增加系列常见问题 |
1 简介
本文档主要介绍 LTE-EC71X OpenCPU SIM API 函数详解,API 位于 components/kernel/lierda_api/liot_sim/liot_sim.h 文件。
2 API 函数概览
函数 |
说明 |
|---|---|
|
获取 SIM 卡的 IMSI |
|
获取 SIM 卡的 ICCID |
|
获取 SIM 卡本机号码 |
|
获取 SIM 卡缓存状态信息 |
3 API 函数详解
3.1 liot_sim_get_imsi
该函数用于获取 SIM 卡的 IMSI。
函数
liot_sim_errcode_e liot_sim_get_imsi(uint8_t nSim, char *imsi, size_t imsiLen)
参数
nSim:
[In] 所用的 SIM 卡,范围:0~1。
imsi:
[Out] SIM 卡的 IMSI,字符串。
imsiLen:
[In] IMSI 数组的长度。
返回值
详见第 3.1.1 章。
3.1.1 liot_sim_errcode_e
SIM API 执行结果错误码。
typedef enum
{
LIOT_SIM_SUCCESS = 0,
LIOT_SIM_EXECUTE_ERR = 1 | LIOT_SIM_ERRCODE_BASE,
LIOT_SIM_MEM_ADDR_NULL_ERR,
LIOT_SIM_INVALID_PARAM_ERR,
LIOT_SIM_NO_MEMORY_ERR,
LIOT_SIM_SEMAPHORE_CREATE_ERR = 5 | LIOT_SIM_ERRCODE_BASE,
LIOT_SIM_SEMAPHORE_TIMEOUT_ERR,
LIOT_SIM_NOT_INSERTED_ERR,
LIOT_SIM_CFW_IMSI_GET_REQUEST_ERR,
LIOT_SIM_CFW_IMSI_GET_RSP_ERR,
LIOT_SIM_CFW_ICCID_GET_REQUEST_ERR = 10 | LIOT_SIM_ERRCODE_BASE,
LIOT_SIM_CFW_PHONE_NUM_GET_REQUEST_ERR,
LIOT_SIM_CFW_PHONE_NUM_GET_RSP_NULL_ERR,
LIOT_SIM_CFW_STATUS_GET_REQUEST_ERR,
LIOT_SIM_CFW_PIN_ENABLE_REQUEST_ERR,
LIOT_SIM_CFW_PIN_DISABLE_REQUEST_ERR = 15 | LIOT_SIM_ERRCODE_BASE,
LIOT_SIM_CFW_PIN_RevERIFY_REQUEST_ERR,
LIOT_SIM_CFW_PIN_CHANGE_REQUEST_ERR,
LIOT_SIM_CFW_PIN_UNBLOCK_REQUEST_ERR,
LIOT_SIM_OPERATION_NOT_ALLOWED_ERR,
LIOT_PBK_NOT_EXIT_ERR = 100 | LIOT_SIM_ERRCODE_BASE,
LIOT_PBK_NOT_INIT_ERR,
LIOT_PBK_ITEM_NOT_FOUND_ERR,
} liot_sim_errcode_e;
参数
参数 |
描述 |
|---|---|
LIOT_SIM_SUCCESS |
执行成功 |
LIOT_SIM_EXECUTE_ERR |
执行失败 |
LIOT_SIM_MEM_ADDR_NULL_ERR |
参数地址为空 |
LIOT_SIM_INVALID_PARAM_ERR |
参数无效 |
LIOT_SIM_NO_MEMORY_ERR |
申请内存失败 |
LIOT_SIM_SEMAPHORE_CREATE_ERR |
创建信号量失败 |
LIOT_SIM_SEMAPHORE_TIMEOUT_ERR |
等待信号量超时 |
LIOT_SIM_NOT_INSERTED_ERR |
未插卡 |
LIOT_SIM_CFW_IMSI_GET_REQUEST_ERR |
请求获取 IMSI 号失败 |
LIOT_SIM_CFW_IMSI_GET_RSP_ERR |
响应获取 IMSI 号失败 |
LIOT_SIM_CFW_ICCID_GET_REQUEST_ERR |
请求获取 ICCID 号失败 |
LIOT_SIM_CFW_PHONE_NUM_GET_REQUEST_ERR |
请求获取本机号码失败 |
LIOT_SIM_CFW_PHONE_NUM_GET_RSP_NULL_ERR |
本机号码为空 |
LIOT_SIM_CFW_STATUS_GET_REQUEST_ERR |
请求获取卡状态失败 |
LIOT_SIM_CFW_PIN_ENABLE_REQUEST_ERR |
请求卡 PIN 码使能失败 |
LIOT_SIM_CFW_PIN_DISABLE_REQUEST_ERR |
请求卡 PIN 码去使能失败 |
LIOT_SIM_CFW_PIN_VERIFY_REQUEST_ERR |
请求 PIN 码验证失败 |
LIOT_SIM_CFW_PIN_CHANGE_REQUEST_ERR |
请求卡 PIN 码更改失败 |
LIOT_SIM_CFW_PIN_UNBLOCK_REQUEST_ERR |
请求卡 PIN 码解锁失败 |
LIOT_SIM_OPERATION_NOT_ALLOWED_ERR |
操作不被允许 |
LIOT_PBK_NOT_EXIT_ERR |
卡 PBK 未退出 |
LIOT_PBK_NOT_INIT_ERR |
卡 PBK 未初始化 |
LIOT_PBK_ITEM_NOT_FOUND_ERR |
卡 PBK item 未找到 |
3.2 liot_sim_get_iccid
该函数用于获取 SIM 卡的 ICCID。
函数
liot_sim_errcode_e liot_sim_get_iccid(uint8_t nSim, char *iccid, size_t iccidLen)
参数
nSim:
[In] 所用的 SIM 卡,范围:0~1。
iccid:
[Out] SIM 卡的 ICCID,字符串。
imsiLen:
[In] iccid 数组的长度。
返回值
详见第 3.1.1 章。
3.3 liot_sim_get_phonenumber
该函数用于获取 SIM 卡本机号码。
函数
liot_sim_errcode_e liot_sim_get_phonenumber(uint8_t nSim, char *phonenumber, size_t phonenumberLen)
参数
nSim:
[In] 所用的 SIM 卡,范围:0~1。
phonenumber:
[Out] SIM 卡本机号码,字符串。
phonenumberLen:
[In] phonenumber 数组的长度。
返回值
详见第 4.1.1 章。
3.4 liot_sim_get_card_status
该函数用于获取 SIM 卡缓存状态信息。
函数
liot_sim_errcode_e liot_sim_get_card_status(uint8_t nSim, liot_sim_status_e *cardStatus)
参数
nSim:
[In] 所用的 SIM 卡,范围:0~1。
cardStatus:
[Out] 详见第 3.4.1 章。
返回值
详见第 4.1.1 章。
3.4.1 liot_sim_status_e
SIM 卡状态。
typedef enum
{
LIOT_SIM_STATUS_READY = 0,
LIOT_SIM_STATUS_PIN1_READY,
LIOT_SIM_STATUS_SIMPIN,
LIOT_SIM_STATUS_SIMPUK,
LIOT_SIM_STATUS_PHONE_TO_SIMPIN,
LIOT_SIM_STATUS_PHONE_TO_FIRST_SIMPIN = 5,
LIOT_SIM_STATUS_PHONE_TO_FIRST_SIMPUK,
LIOT_SIM_STATUS_SIMPIN2,
LIOT_SIM_STATUS_SIMPUK2,
LIOT_SIM_STATUS_NETWORKPIN,
LIOT_SIM_STATUS_NETWORKPUK = 10,
LIOT_SIM_STATUS_NETWORK_SUBSETPIN,
LIOT_SIM_STATUS_NETWORK_SUBSETPUK,
LIOT_SIM_STATUS_PROVIDERPIN,
LIOT_SIM_STATUS_PROVIDERPUK,
LIOT_SIM_STATUS_CORPORATEPIN = 15,
LIOT_SIM_STATUS_CORPORATEPUK,
LIOT_SIM_STATUS_NOSIM,
LIOT_SIM_STATUS_PIN1BLOCK,
LIOT_SIM_STATUS_PIN2BLOCK,
LIOT_SIM_STATUS_PIN1_DISABLE = 20,
LIOT_SIM_STATUS_SIM_PRESENT,
LIOT_SIM_STATUS_UNKNOW,
} liot_sim_status_e;
参数
常见参数 |
描述 |
|---|---|
LIOT_SIM_STATUS_READY |
状态已就绪 |
LIOT_SIM_STATUS_SIMPIN |
等待验证 PIN 码 |
LIOT_SIM_STATUS_SIMPUK |
等待验证 PUK 码 |
LIOT_SIM_STATUS_SIMPIN2 |
等待验证 PIN2 码 |
LIOT_SIM_STATUS_SIMPUK2 |
等待验证 PUK2 码 |
LIOT_SIM_STATUS_NOSIM |
未插卡 |
LIOT_SIM_STATUS_UNKNOW |
未知状态 |
4 代码示例
示例代码参考 examples/demo/src/demo_sim.c 文件。如下运行结果则说明获取所有信息正常:
5 常见问题
5.1 是否支持 SIM 卡热插拔
支持,软件上需要用户自己用 WAKEUP 脚检测拔插卡动作,然后调用appSetSIMHotSwapNotify 函数去通知协议栈走插拔卡流程。
5.2 EC718 是否支持双 SIM 卡?
支持。双卡单待,SIM2 只支持 1.8V 卡。
5.3 EC718 是否支持海外运营商的 APN LIST?
可以。 说明如下:
1 、随卡匹配特性为用户可定制特性,若用户需要使用,则需要在 psdial_plmn_param.h 文 件 中 , 打 开
FEATURE_PER_PLMN_ENABLE 宏(默认是未定义的,目的是节省 flash 和 RAM);
2、随卡配置功能受 NV 控制,默认不使能。在第一次开机后,需要使用 AT+ECCFG=“AutoApn”,1 命令使能该特性,若不需要使用该功能,使用 AT+ECCFG=“AutoApn”,0 命令去使能该特性。
3、由于全球 plmn 非常多,目前我们只提供部分常用 PLMN 的配置信息,后续客户需要使用的 PLMN 信息如果不在当前表中,
可以自行补充(客户可以定制 psdial_plmn_param.c 文件中的参数);
4、当前的 plmn 配置信息占用 AP 空间较大,客户也可以对 PLMN 表适当进行剪裁;
5、打开后增加 20K+ flash,<1K RAM 空间
