📄 moto.cpp
字号:
return signum;
}
//检测网络是否在线,
//返回值 0x00 断线 0x01 在线
unsigned char M_NetCheckLink(void)
{
unsigned int ret,i;
unsigned char *p, *q;
unsigned char rxbuf[128];
memset(rxbuf,0,sizeof(rxbuf));
CdmaSendPck("at+mipcall?\r", 12);
for (i=0;i<CHECKNUM;i++)
{
ret = CdmaRcvPck(rxbuf, 128, 4*ONESEC, GPRS_COM);
if (!ret)
{
#ifdef _MOTO_CONN_
DebugPrint("\r\n M_NetCheckLink() timeout.");
#endif
return N_RESULT_RECVTIMEOUT;
}
p = (unsigned char*)strstr((char*)rxbuf,"+MIPCALL: 0");
if (p!=NULL) {
return N_RESULT_PPPCLOSED;
}
p = (unsigned char*)strstr((char *)rxbuf,"+MIPCALL: 1,");
q = (unsigned char*)strstr((char *)rxbuf,".");
if (p != NULL && q!=NULL) return N_RESULT_PPPOPENED;
else return N_RESULT_RECVINVALID;
}
return N_RESULT_RECVINVALID;
}
//检测TCP是否连接状态
//0x01 连接 0x00 无连接
unsigned char M_NetCheckConn(void)
{
unsigned int ret,i;
unsigned char *p;
unsigned char rxbuf[128];
memset(rxbuf,0,sizeof(rxbuf));
CdmaSendPck("AT+MIPOPEN?\r", 12);
for (i=0;i<CHECKNUM;i++)
{
ret = CdmaRcvPck(rxbuf, 128, 3*ONESEC, GPRS_COM);
if (!ret)
{
#ifdef _MOTO_CONN_
DebugPrint("\r\n M_NetCheckConn() timeout.");
#endif
return N_RESULT_RECVTIMEOUT;
}
p = (unsigned char *)strstr((char *)rxbuf, "MIPOPEN: 2,3,4");
if (p != NULL) return N_RESULT_TCPOPENED;
p = (unsigned char *)strstr((char *)rxbuf, "MIPOPEN: 1,2,3,4");
if (p!=NULL) return N_RESULT_TCPCLOSED;
ret=M_CheckResp(rxbuf);
if (ret!=N_RESULT_SUCCESS) return ret;
}
return N_RESULT_RECVINVALID;
}
//拨号连接TCP
//返回值 0x04:已经断线 0x01 拨号成功 0x02 0x03 拨号异常
unsigned char M_NetConn(unsigned char *DIP, unsigned char * DPORT)
{
unsigned int ret;
unsigned char *p;
unsigned char i,cnt;
unsigned long len;
unsigned char tmp[10],space[2];
unsigned char txbuf[128],rxbuf[128];
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
space[0]='\x22';
space[1]=0;
ret=M_NetCheckLink();
if ( ret!= N_RESULT_PPPOPENED)
{
return ret;
}
if (M_NetCheckConn() == N_RESULT_TCPOPENED)
{
return N_RESULT_SUCCESS;
//ret=M_NetCloseConn();
//if (ret!=N_RESULT_TCPCLOSED) return ret;
}
//////////////////////////////////////////////////////////////////////////
CdmaSendPck("AT+CGREG=1\r", 11);
ret = CdmaRcvPck(rxbuf, 64, 3*ONESEC, GPRS_COM);
if (!ret)
{
#ifdef _MOTO_CONN_
DebugPrint("\r\n CGREG timeout.");
#endif
return N_RESULT_RECVTIMEOUT;
}
//////////////////////////////////////////////////////////////////////////
cnt=rand()%255;
sprintf(tmp,"%d",cnt);
strcpy(txbuf,"at+mipopen=1");
strcat(txbuf,",");
strcat(txbuf,tmp);
strcat(txbuf,",");
strcat(txbuf,space);
strcat(txbuf,DIP);
strcat(txbuf,space);
strcat(txbuf,",");
strcat(txbuf,DPORT);
strcat(txbuf,",0");
strcat(txbuf,"\r");
strcat(txbuf,"\n");
len = strlen(txbuf);
CdmaSendPck(txbuf,len);
len=0;
for (i=0; i<CHECKNUM; i++)
{
ret = CdmaRcvPck(rxbuf,128, 5*ONESEC, GPRS_COM);
if (!ret)
{
#ifdef _MOTO_CONN_
DebugPrint("\r\n mipopen timeout.");
#endif
return N_RESULT_RECVTIMEOUT;
}
p = (unsigned char*)strstr((const char*)rxbuf,"+MIPOPEN: 1,1");
if (p != NULL)
return N_RESULT_SUCCESS;
ret=M_CheckResp(rxbuf);
if (ret!=N_RESULT_SUCCESS)
{
return ret;
}
p = (unsigned char*)strstr((const char*)rxbuf,"OK");
if (p == NULL)
return N_RESULT_NOTGETOK;
}
return N_RESULT_ERR;
//////////////////////////////////////////////////////////////////////////
}
//发送数据到网络
//0x01 正常 0x00 异常 0x05 掉线
unsigned char M_NetSend(unsigned char *buff,unsigned short len)
{
unsigned int ret;
unsigned char *p;
int i,j;
unsigned char txbuf[200],rxbuf[200];
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
lp_end=0;
lp_out=0;
ret=M_NetCheckConn();
if ( ret!=N_RESULT_TCPOPENED ) return ret; //return N_RESULT_GETSTAT; //连接断开
if(len<=1024)
{
for(i=0;i<len;i=i+40)
{
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
strcpy(txbuf,"at+mipsend=1,");
strcat(txbuf,"\x22\x0");
if((i+40)>=len)
{
ConvAscii((char *)buff+i,txbuf+14,len-i);
strcat((char *)txbuf,"\x22");
strcat((char *)txbuf,"\r");
strcat((char *)txbuf,"\x0");
CdmaSendPck((char *)txbuf,strlen(txbuf));
ret = CdmaRcvPck((char *)rxbuf,200,8*ONESEC,GPRS_COM);
if(!ret)return N_RESULT_RECVTIMEOUT;
else
{
p=(unsigned char*)strstr((char*)rxbuf,"+MIPSEND: 1,");
if(p==NULL) return N_RESULT_RECVINVALID;
}
}
else
{
ConvAscii(buff+i,txbuf+14,40);
strcat(txbuf,"\x22\x0");
strcat(txbuf,"\r");
strcat(txbuf,"\x0");
CdmaSendPck(txbuf,strlen(txbuf));
ret = CdmaRcvPck(rxbuf,200,8*ONESEC,GPRS_COM);
if(!ret)return N_RESULT_RECVTIMEOUT;
else
{
p=(unsigned char*)strstr((char*)rxbuf,"+MIPSEND: 1,");
if(p==NULL)return N_RESULT_RECVINVALID;
}
}
}
}
else
{
for(j=0;j<len;j=j+1024)
{
for(i=0;i<1024;i=i+40)
{
memset(rxbuf,0,sizeof(rxbuf));
memset(txbuf,0,sizeof(txbuf));
strcpy(txbuf,"at+mipsend=1,");
strcat(txbuf,"\x22\x0");
if((i+40)>=len)
{
ConvAscii(buff+i+512*j,txbuf+14,len-i);
strcat(txbuf,"\x22\x0");
strcat(txbuf,"\r");
strcat(txbuf,"\x0");
CdmaSendPck(txbuf,strlen(txbuf));
ret = CdmaRcvPck(rxbuf,200,8*ONESEC,GPRS_COM);
if(!ret)return N_RESULT_RECVTIMEOUT;
else
{
p=(unsigned char*)strstr((char*)rxbuf,"+MIPSEND: 1,");
if(p==NULL)return N_RESULT_RECVINVALID;
}
}
else
{
ConvAscii(buff+i+512*j,txbuf+14,40);
strcat(txbuf,"\x22\x0");
strcat(txbuf,"\r");
strcat(txbuf,"\x0");
CdmaSendPck(txbuf,strlen(txbuf));
ret = CdmaRcvPck(rxbuf,200,8*ONESEC,GPRS_COM);
if(!ret)return N_RESULT_RECVTIMEOUT;
else
{
p=(unsigned char*)strstr((char*)rxbuf,"+MIPSEND: 1,");
if(p==NULL) return N_RESULT_RECVINVALID;
}
}
}
}
}
memset(rxbuf,0,sizeof(rxbuf));
strcpy(txbuf,"at+mippush=1\r");
CdmaSendPck(txbuf,13);
ret = CdmaRcvPck(rxbuf,200,8*ONESEC,GPRS_COM);
if(!ret)return N_RESULT_RECVTIMEOUT;
else
{
p=(unsigned char*)strstr((char*)rxbuf,"+MIPPUSH:");
if(p==NULL) return N_RESULT_RECVINVALID;
}
return N_RESULT_SUCCESS;
}
//接受网络数据
unsigned int M_NetRcv(unsigned char *buff,unsigned short *len,unsigned short MS)
{
static unsigned char RcvBuf[2501]; //2008.03.12
unsigned char tmp[2501];
unsigned long i;
unsigned short nextlen;
unsigned int ret;
unsigned char *p,*q,*t;
unsigned char cnt;
cnt=0;
while(1)
{
if(lp_out!=lp_end)
{
if((lp_end-lp_out)<=*len)
{
memcpy(buff,RcvBuf+lp_out,lp_end-lp_out);
*len=lp_end-lp_out;
lp_end=0;
lp_out=0;
return N_RESULT_SUCCESS;
}
else
{
memcpy(buff,RcvBuf+lp_out,*len);
lp_out+=*len;
return N_RESULT_SUCCESS;
}
}
if(cnt!=0) return N_RESULT_ERR;
cnt++;
nextlen = 1;
lp_out = 0;
lp_end = 0;
t=tmp;
ret = CdmaRcvPck(tmp, 2500, MS, GPRS_COM);
if(!ret) return N_RESULT_RECVTIMEOUT;
while(nextlen)
{
//+MIPCLOSE: 1,0
p=(unsigned char*)strstr((char*)t,"+MIPRTCP");
if(p==NULL)
{
p=(unsigned char*)strstr((char*)t,"+MIPCLOSE");
if(p==NULL)
{
return N_RESULT_RECVTIMEOUT;
}
DebugPrint("服务器关闭了");
return N_RESULT_RECVTIMEOUT;
}
p=(unsigned char*)strstr((char*)t,",");
p++;
nextlen = atol(p);
q=(unsigned char*)strstr((char*)p,",");
if(q==NULL)
return N_RESULT_RECVTIMEOUT;
q=q+1;
p=(unsigned char*)strstr((char*)p,"\x0d\x0a");
if(p==NULL)
return N_RESULT_RECVTIMEOUT;
t = p+1;
i = strlen(q)-strlen(p);
if(!(i/2)) return 0x04;
// if((lp_end+i/2)>1024)
// return 0x05;
AsciiToHex(q,RcvBuf+lp_end,i);
lp_end+=i/2;
}
if(lp_end==0) return N_RESULT_ERR;
}
}
/*
//设置服务中心号码
unsigned char M_SetupCSCA(char *Number)
{
unsigned char cRet;
unsigned char txbuf[60],rxbuf[100];
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
strcpy(txbuf,"AT+CSCA=\"");
strcat(txbuf,Number);
strcat(txbuf,"\x22");
strcat(txbuf,"\r");
CdmaSendPck(txbuf,strlen(txbuf));
cRet = CdmaRcvPck(rxbuf,100,9000,GPRS_COM);
if (!cRet)
return 0xcf;
else
return 0x01;
}
//删除某条已读短信
unsigned char M_DelSMS(void)
{
//列举序列号
unsigned char re,i;
unsigned char txbuf[60],rxbuf[100];
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
re = M_SMSCout(2);
if (!re)
return 0x00;
//开始删除
strcpy(txbuf,"AT+CMGD=");
for(i=0; i<32; i++)
{
if(unReadIndex[i][0] != 0)
break;
}
if (i == 32)
return 0x00; //没有短信息
if (unReadIndex[i][0] == 0x20)
strcat(txbuf,unReadIndex[i][1]);
else
{
strcat(txbuf,unReadIndex[i][0]);
strcat(txbuf,unReadIndex[i][1]);
}
strstr(txbuf,"\r\n");
CdmaSendPck(txbuf,strlen(txbuf));
re = CdmaRcvPck(rxbuf,100,3000,GPRS_COM);
if (strstr(rxbuf,"OK"))
return 0x01;
else
return 0x00;
}
//检查短信个数 短信类型 0--未读短信 1--所有短信 2--已读短信
unsigned char M_SMSCout(unsigned char mode)
{
unsigned char re, msgbuf[1024]; //512
unsigned char *sPo;
unsigned char *Rs;
if (mode > 2)
return 0xff;
memset(unReadIndex,0,LEN_UNREAD_INDEX);
memset(msgbuf,0,1024);
switch (mode)
{
case 0:
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)
return 0xff;
sPo = msgbuf;
Rs = strstr(sPo,"SM"); //有些格式不一致,会造成读卡错误
Rs = Rs + 4;
re = atol((char *)Rs);
return re;
case 2:
re = MsgRcvPck(msgbuf,3072);
if (!re)
return 0xff;
break;
}
re = 0;
sPo = msgbuf;
while (1)
{
Rs = strstr(sPo,"MGL:");
if (Rs == NULL) {
return re;
} else {
sPo = Rs + 6;
Rs = strstr(sPo,",");
memcpy(unReadIndex[re],Rs-2,2);
re++;
}
}
}
//读一条未读的短信息
unsigned int M_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];
unsigned char txbuf[60],rxbuf[100];
memset(txbuf,0,sizeof(txbuf));
memset(rxbuf,0,sizeof(rxbuf));
strcpy(txbuf,"AT+CMGR=");
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)
{
strcat(txbuf,unReadIndex[i][1]);
}
else
{
strcat(txbuf,unReadIndex[i][0]);
strcat(txbuf,unReadIndex[i][1]);
}
strcat(txbuf,"\r\n");
CdmaSendPck(txbuf,strlen(txbuf));
ret = CdmaRcvPck(msgbuf,256,9000,GPRS_COM);
if (!ret)
return 0x00;
sPo = msgbuf;
Res = strstr(sPo,"+CMGR");
if (Res==NULL)
return 0x00;
sPo = Res+5;
Res = strstr(sPo,"\x0d\x0a");
if (Res==NULL)
return 0x00;
sPo = Res+2;
Res1 = strstr(sPo,"\x0d\x0a");
if (Res1==NULL)
return 0x00;
pos = Res1-Res-2;
len = pos/2;
AsciiToHex(sPo,rxbuf,pos);
pos = 0;
pos1 = 0;
dat[pos] = 'D';
pos += 1;
dat[pos] = '+';
pos += 1;
//目标地址码
pos1 = 2;
p = strstr(msgbuf,",");
if (p == NULL)
return 0x00;
p += 5;
q = strstr(p,",");
if (p == NULL)
return 0x00;
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;
return pos;
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -