注:个人收集和理解所书,有误处请指出,转载请注明出处
首先确认能否正确读到存储在NVRAM中的data account。调用DataAccountReadyCheck(SendReq),SendReq为回调函数,如果正确读到data account便会执行函数SendReq。
这里以接入点为cmnet作为例子。
#define CMWAP_ACCOUNT_ID (14)……………………①
#define CMNET_ACCOUNT_ID (11)……………………②
① ②的值可以通过在custom\common\pluto_mmi\Nvram_common_custpack.c中的数组
COMMON_NVRAM_EF_ABM_PS_PROFILE_DEFAULT找到对应的值,例如:CHINA MOBILE, cmnet。当然这项在MTK release出来的版本中并不一定会有,但是你可以自己添加。
分析:0x02,序号,也就是上边所定义的ACCOUNT_ID。那为什么我们用的是11,而不是2呢?这个序号是这样得到的,等于③CUSTOM_DEFINED_MAX_CSD_PROFILE_NUM + ④NVRAM_EF_ABM_GPRS_PROFILE_IDX,其中③是指CSD的个数,他具体值可以在文件custom\common\Custom_data_account.h找到。④就是对应GPRS的那个索引值,就是前面所说的0x02。关于data account的配置可以看Data_Account_Configuration_Guide.pdf文件。0x11,GSM网络名,这里设置为“CHINA MOBILE GPRS”,这个只是在手机界面上显示的标识GSM网的名字,可以自由设置。接着是用户名、密码、DNS。再到APN,“cmnet”,及APN长度0x05……
0x02, 0x11, 0x00, 0x00,
0x43, 0x48, 0x49, 0x4e, 0x41, 0x20, 0x4d, 0x4f, 0x42, 0x49, 0x4c, 0x45, 0x20, 0x47, 0x50, 0x52,
0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Name
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // user name
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // password
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // dns
0x00, 0x00, 0x00, 0x00, // secondary dns
0x63, 0x6d, 0x6e, 0x65, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // apn
0x05, // apn_len
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //provurl
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //napid
0x00, //account_type
0x00, //read_only
0x02, // dcomp_algo: SND_NO_DCOMP
0x02, // hcomp_algo: SND_NO_DCOMP
0x21, // pdp_type: IPV4_ADDR_TYPE
0x01, // pdp_addr_len: NULL_PDP_ADDR_LEN
0x00, 0x00, 0x00, 0x00, // pdp_addr_val
0x00, // reserved
以cmnet连接服务器为例
⑴ 创建Socket ID,soc_create,如果返回值大于0说明创建成功
⑵设置Socket响应消息MSG_ID_APP_SOC_NOTIFY_IND的钩子函数SocketNotify
在SocketNotify中响应的消息有
SOC_READ //接收来自服务器的信息soc_recv
SOC_WRITE //向服务器发送消息soc_send
SOC_CONNECT //成功连接服务器
SOC_CLOSE //关闭Socket
⑶设置Socket模式
val = 1;
soc_setsockopt(g_socket_id, SOC_NBIO, &val, sizeof(val);
val = SOC_READ | SOC_WRITE | SOC_CLOSE | SOC_CONNECT;
soc_setsockopt(g_socket_id, SOC_ASYNC, &val, sizeof(val));
如果是IP直连
⑷soc_connect,返回的正常值为SOC_WOULDBLOCK
如果是域名解析连接
⑷soc_gethostbyname,返回的正常值为SOC_WOULDBLOCK
设置域名解析结果MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND的钩子函数,在该函数中判断是否正确解析了域名即app_soc_get_host_by_name_ind_struct *dns_ind->result 为 TRUE。如果解析成功,便用解析得到的IP连接服务器,调用soc_connect,返回的正常值为SOC_WOULDBLOCK。
如果连接成功会得到SOC_CONNECT消息。
⑸关闭Socket,soc_close
文章评论(0条评论)
登录后参与讨论