icfans

如何支持APN自适应功能

0
阅读(95) 评论(0)

[DESCRIPTION]
APNat+cgdcont=1,"IP","fsa"
APN
APN
[SOLUTION]来自半导体社区
目前国内联通移动一般不检查APN,也有个别情况会检查,与选择哪家设备厂家有关。
他们这样做的目的是为了提供更好的用户体验,争取用户,但是国外还是会检查APN。
如果要客制化实现APN自适应,需要完成两件事:
1. 根据插入的sim卡来获取对应的运营商的APN信息。
(1)设置一个全局数组,将世界上大部分的运营商的PLMN和APN信息都存放到这个数组里面。
这个数组的结构可以这样构建:
typedef struct
{
const void *plmn;
const kal_uint8 *APN;
} custom_dtcnt_prof_gprs_struct;
const custom_dtcnt_prof_gprs_struct g_config_account_gprs[] =
{
//CMCC
{
"46000, 46002, 46007",
(const kal_uint8*)"cmnet"
},
// CU GPRS
{
"46001",
(const kal_uint8*)"uninet"
},
}
(2)获取插入sim卡的PLMN。
可以在l4c_cphs_mmi_info_lind这个函数中获得,
void l4c_cphs_mmi_info_lind(kal_uint8 is_spn_valid, // SPN
kal_uint8 is_spn_RPLMN_required,
kal_uint8 *spn,
kal_uint8 is_opname_valid, // OPN
kal_uint8 *opname,
kal_uint8 is_sopname_valid, // sOPN
kal_uint8 *sopname,
kal_uint8 no_msisdn, // MSISDN
l4csmu_addr_struct msisdn[2],
kal_uint8 no_info_num, // Information Numbers
l4csmu_info_num_struct *info_num,
kal_uint8 is_valid_csp,
kal_uint8 *csp,
kal_uint8 is_puct_valid,
kal_uint8 *ef_puct,
kal_uint8 is_autolock_enable,
kal_uint8 autolock_result,
kal_uint8 autolock_remain,
kal_bool is_valid_ef_acting_hplmn,
kal_uint8 *ef_acting_hplmn,
kal_uint8 imsi[17],
kal_uint8 digits_of_mnc,
kal_bool is_usim){}
这个函数里面的执行代码部分为空,但是传进来的参数里包括imsi,您可以在这个函数中加入代码,从imsi获取PLMN并
保存。
2. 如果设置APN
如果没有L4的code,可以客制化AT+CGDCONT,将命令字符串中的“APN”栏位设置为获取到的APN,并将该字符串通过
custom_command_hdlr带出。
这里要注意客制化AT+CGDCONT返回处理完后,返回KAL_FALSE,这样可以再走MTK的AT+CGDCONT处理流程


来自半导体社区