⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moto.cpp

📁 采用cb平台开以
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	
	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 + -