MTK之Socket篇-----基于cmnet

注:本人博文整理至CSDN以方便查阅,源博文位于EDN


首先确认能否正确读到存储在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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值