📄 net.cpp
字号:
** name: WNetDial
** function: 拨号连接,从移动网络取得IP地址
** parameter: PARAM 拨号参数:APN
** ret:
** modify:
** comment: 如果卡要求密码,则需要在此函数前调用WNetUidPwd()设置相应的PIN/密;
********************************************************************************/
unsigned char WNetLink(unsigned char *PARAM)
{
return gNet.WNetLink(PARAM);
}
/*******************************************************************************
** name: WNetConnect
** function: 与应用服务器建立网络连接
** parameter: DIP:应用服务器的ip地址; Dport:应用服务器的ip端口号
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetConn(unsigned char *DIP, unsigned char * DPORT)
{
return gNet.WNetConn(DIP, DPORT);
}
/*******************************************************************************
** name: WNetTxd
** function: 把数据发送到网络
** parameter: buff:数据发送内容; len:发送长度
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetTxd(unsigned char *buff,unsigned short len)
{
return gNet.WNetTxd(buff,len);
}
/*******************************************************************************
** name: WNetRxd
** function: 接受数据
** parameter: buff:接收到的内容; len;接收数据的长度; Ms:等待超时值
** ret:
** modify:
** comment:
********************************************************************************/
unsigned int WNetRxd(unsigned char *buff,unsigned short *len,unsigned short MS)
//unsigned short WNetRxd(unsigned char *buff,unsigned short *len,unsigned short MS)
{
return gNet.WNetRxd(buff,len,MS);
}
/*******************************************************************************
** name: WNetCloseConn
** function: 关闭与应用服务器的连接
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCloseConn(void)
{
return gNet.WNetCloseConn();
}
/*******************************************************************************
** name: WNetCloseLink
** function: 断开网络连接
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCloseLink(void)
{
return gNet.WNetCloseLink();
}
/*******************************************************************************
** name: WNetCheckSim
** function: 检测SIM卡是否存在
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCheckSim(void)
{
return gNet.WNetCheckSim();
}
/*******************************************************************************
** name: WNetCheckSignal
** function: 取得本地GSM信号强度值
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCheckSignal(void)
{
return gNet.WNetCheckSignal();
}
/*******************************************************************************
** name: WNetCheckLink
** function: 与网络连接状态查询
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCheckLink(void)
{
return gNet.WNetCheckLink();
}
/*******************************************************************************
** name: WNetCheckConn
** function: 与应用服务器连接状态查询
** parameter: none
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetCheckConn(void)
{
return gNet.WNetCheckConn();
}
/*******************************************************************************
** name: WNetUidPwd
** function: 输入个人UID及PWD
** parameter:
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetUidPwd(unsigned char *UID,unsigned char *PWD)
{
return gNet.WNetUidPwd(UID, PWD);
}
/*******************************************************************************
** name: WNetGetVer
** function: 取得模块软件版本号;
** parameter:
** ret:
** modify:
** comment:
********************************************************************************/
unsigned char WNetGetVer(unsigned char *ver)
{
return gNet.WNetGetVer(ver);
}
#endif
/*******************************************************************************
** name: bp_GPRS_SetupCSCA
** function: 设置服务中心号码
** parameter: *Number --- 号码字符串
** ret: 1--成功 0--失败
** modify:
** comment:
********************************************************************************/
unsigned char bp_GPRS_SetupCSCA(char *Number)
{
unsigned char pos,cRet;
pos = 0;
memset(cmd,0,50);
memcpy(cmd+pos,"AT+CSCA=\"",9);
pos += 9;
memcpy(cmd+9,Number,strlen(Number));
pos += strlen(Number);
cmd[pos] = '"';
pos += 1;
cmd[pos] = '\r';
pos += 1;
if (pos >= 50)
//return ERR_LENGTH_NUMBER;
return 0xe1;
CdmaSendPck(cmd,strlen(cmd));
cRet = CdmaRcvPck(rsp,50,9000,1);
if (cRet)
return TRUE;
else
// delay_1ms(200);
return FALSE;
}
#if 0
/*******************************************************************************
** name: bp_GPRS_DelMessage
** function: 删除某条已读短信
** parameter: none
** ret: 1 -- 成功 0 -- 失败
** modify:
** comment: 删除短信为最近阅读的短信
********************************************************************************/
unsigned char bp_GPRS_DelSMS(void)
{
//列举序列号
unsigned char re,i,pos;
re = bp_GPRS_SMSCout(2);
#ifdef CMDOUT
DebugPrint("re is %x\r\n",(int)re);
#endif
if (re == 0)
return FALSE;
//开始删除
memset(cmd,0,100);
pos = 0;
memcpy(cmd+pos,"AT+CMGD=",8);
pos += 8;
for(i=0; i<(LEN_UNREAD_INDEX/2); i++)
{
if(unReadIndex[i][0] != 0)
break;
}
if (i == (LEN_UNREAD_INDEX/2))
return FALSE; //没有短信息
if (unReadIndex[i][0] == 0x20) {
cmd[pos] = unReadIndex[i][1];
pos++;
} else {
memcpy(cmd+pos,unReadIndex[i],2);
pos += 2;
}
memcpy(cmd+pos,"\r\n",2);
pos += 2;
cmd[pos] = 0;
CdmaSendPck(cmd,strlen(cmd));
re = CdmaRcvPck(rsp,100,3000,0);
if (strstr(rsp,"OK"))
return TRUE;
else
return FALSE;
}
/*******************************************************************************
** name: bp_GPRS_SMSCout
** function: 检查短信个数
** parameter: mode 短信类型 0--未读短信 1--所有短信 2--已读短信
** ret: re 返回短信个数
** modify:
** comment: 对于已发送短信、未发送短信不做查询,
********************************************************************************/
unsigned char bp_GPRS_SMSCout(unsigned char mode)
{
unsigned char re, msgbuf[1024]; //512
unsigned char xdata *sPo;
char *Rs;
if (mode > 2)
return 0xff;
memset(unReadIndex,0,LEN_UNREAD_INDEX);
memset(msgbuf,0,1024);
switch (mode)
{
case 0:
#ifdef MOTO_GPRS
CdmaSendPck("AT+MMGL=\"REC UNREAD\"\r",21);
#endif
#ifdef HUAWEI_GPRS
CdmaSendPck("AT%MGL=\"REC UNREAD\"\r", 20);
#endif
re = MsgRcvPck(msgbuf,3072);
if (re==0 || re==0xff)
return 0xff;
break;
case 1:
CdmaSendPck("AT+CPMS?\r",9);
re = MsgRcvPck(msgbuf,3072);
if (re == 0)
return 0xff;
sPo = msgbuf;
Rs = strstr(sPo,"SM"); //有些格式不一致,会造成读卡错误
Rs = Rs + 4;
re = atol((char *)Rs);
#ifdef CMDOUT
DebugPrint("rs :%s\r\n",Rs);
DebugPrint("re: %x\r\n",(int)re);
DebugPrint("sPo: %s\r\n",sPo);
#endif
return re;
case 2:
#ifdef MOTO_GPRS
CdmaSendPck("AT+MMGL=\"REC READ\"\r",19);
#endif
#ifdef HUAWEI_GPRS
CdmaSendPck("AT%MGL=\"REC READ\"\r",18);
#endif
re = MsgRcvPck(msgbuf,3072);
if (re == 0) {
#ifdef CMDOUT
DebugPrint("unread re is %d\r\n",(int)re);
#endif
return 0xff;
}
break;
}
re = 0;
sPo = msgbuf;
while (1)
{
Rs = strstr(sPo,"MGL:");
if (Rs == GPRS_NULL) {
return re;
} else {
sPo = Rs + 6;
Rs = strstr(sPo,",");
memcpy(unReadIndex[re],Rs-2,2);
re++;
}
}
}
/*******************************************************************************
** name: bp_GPRS_URMessage
** function: 阅读一条未读短信西
** parameter: dat -- 短信内容
** ret:
** modify:
** comment:
********************************************************************************/
//读一条未读的短信息
unsigned int bp_GPRS_ReadSMS(char *dat)
{
char *Res,*Res1;
unsigned char *sPo;
unsigned int pos,pos1;
unsigned char i,iii;
unsigned int sum;
unsigned char temp;
unsigned short ret,len;
unsigned char *p,*q;
unsigned char msgbuf[256];
pos = 0;
memset(rsp,0,200);
memcpy(rsp+pos,"AT+CMGR=",8);
pos += 8;
for (i=0; i<(LEN_UNREAD_INDEX/2); i++)
{
if (unReadIndex[i][0] != 0)
break;
}
if (i == (LEN_UNREAD_INDEX/2))
return 0; //没有短信息
if (unReadIndex[i][0] == 0x20)
{
rsp[pos] = unReadIndex[i][1];
pos++;
} else {
memcpy(rsp+pos,unReadIndex[i],2);
pos += 2;
}
memcpy(rsp+pos,"\r\n",2);
pos += 2;
rsp[pos] = 0;
CdmaSendPck(rsp,strlen(rsp));
//ret = CdmaRcvPck(msgbuf,500,1);
ret = CdmaRcvPck(msgbuf,256,9000,1);
if (!ret)
return FALSE;
sPo = msgbuf,
Res = strstr(sPo,"+CMGR"); ////
if (Res == GPRS_NULL)
return 0;
sPo = Res+5;
Res = strstr(sPo,"\x0d\x0a");
if (Res == GPRS_NULL)
return 0;
sPo = Res+2;
Res1 = strstr(sPo,"\x0d\x0a");
if (Res1 == GPRS_NULL)
return 0;
memset(rsp,0,200);
pos = Res1-Res-2;
len = pos/2;
AsciiToHex(sPo,rsp,pos);
pos = 0;
pos1 = 0;
dat[pos] = 'D';
pos += 1;
dat[pos] = '+';
pos += 1;
//目标地址码
pos1 = 2;
p = strstr(msgbuf,",");
if (p == NULL)
return FALSE;
p += 5;
q = strstr(p,",");
if (p == NULL)
return FALSE;
memcpy(dat+pos,p,q-p-1);
pos += (q-p)-1;
//恢复地址
dat[pos] = 'T';
pos++;
dat[pos] = '+';
pos++;
q++;
p = strstr(q,"\"");
if(p == NULL)
return FALSE;
p++;
q = strstr(p,",");
if (p == NULL)
return FALSE;
memcpy(dat+pos,p,q-p);
pos += (q-p);
//用户信息
dat[pos] = 'M';
pos++;
pos1++;
pos1 = 0;
iii = len;
sum = uni2gb((unsigned short *)rsp+pos1, dat+pos, (int)iii);
temp = pos;
pos += sum+2;
dat[pos] = 0;
f_cs = 0;
f_cs2 = 0;
rf_cs = 0;
TDA8007cs = 0;
return pos;
}
/*******************************************************************************
** name: WNetSendCmd
** function: 发送命令函数
** parameter: cmd 发送命令 rsp 接受返回数据
** ret: 1--失败 0--成功
** modify:
** comment:
********************************************************************************/
unsigned char WNetSendCmd(unsigned char *cmd,unsigned char *rsp)
{
unsigned char ret;
int len;
len = strlen((char*)cmd);
if (len==0 || len>100)
return 0xff;
if (cmd[strlen((char *)cmd)-1] != '\r')
return 0xff;
ret = CdmaSendPck(cmd,strlen((char*)cmd));
if (!ret)
return 0xff;
ret = CdmaRcvPck(rsp,64,1,0);
#ifdef CMDOUT
DebugPrint("cmd return is %s\r\n", rsp);
#endif
if (!ret) //不作“OK”判断,因为有些命令没返回
return 0xff;
return 0x00;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -