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

📄 cgtm900.cpp

📁 华为GPRSGTM900的类
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			
			i=rs232_data[char_sta]-'0';
		}
		else
		{
			i=rs232_data[char_sta]-'0';
			i*=10;
			i+=rs232_data[char_sta+1]-'0';
			
		}	
		if(i>10) i=1;
		return i;
	}
	return FALSE;
	
	
}

//检查是否关机--------------
INT8U  CGtm900::check_ipcloseout(INT16U templen)
{
	INT16U i=0;
	INT8U j=0;
	INT16U len;
	len=templen;
	
	
	while(i<len)
	//get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
	{
	 
	 while(i<len) 
	 {
	   
	   if(rs232_data[i]=='%') break;
	   i++;
	 }
	 j=0;	//
	 while (at_ack_ipclose[j]!=0&&i<len)
	  {
		if(rs232_data[i]!=at_ack_ipclose[j])
		{   
			break;
		}
		i++;
		j++;
	  }
	  if(j>7) return TRUE;
	  i++;
	 }
	return FALSE;
	//}

}

////////////////////////////////////
INT8U  CGtm900::check_ring(INT16U templen)	//返回是否是%CPRI: 1,2
{
	INT16U i=0;
	INT8U j=0;
	INT16U len;
	len=templen;
	
	
	while(i<len)
	//get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
	{
	 
	 while(i<len) 
	 {
	   
	   if(rs232_data[i]=='R') break;
	   i++;
	 }
	 j=0;	//
	 while (at_ack_ring[j]!=0&&i<len)
	  {
		if(rs232_data[i]!=at_ack_ring[j])
		{   
			break;
		}
		i++;
		j++;
	  }
	  if(j>3) return TRUE;
	  i++;
	 }
	return FALSE;
	//}
}
//检查是否关机--------------
INT8U  CGtm900::check_ipclose(void)
{
	INT8U i;
	//b_ackOK=1;
	//b_ackOK=0;
	//if(rec_count)
	//{
	b_ackOK=1;
	//b_conOK=0;
	get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
	i=0;	//
	do
	{
		if(rs232_data[char_sta+i]!=at_ack_ipclose[i])
		{
			b_ackOK=0;
			//b_conOK=1;
		}
		i+=1;
	}while (at_ack_ipclose[i]!=0);
	return b_ackOK;
	//}

}
//--------------
INT8U  CGtm900::check_ipsend()
{
	INT8U i;
	
	for(i=0;i<20;i++)
	 { 
	  wait_for_ack(1);//
	  if(rec_count) break;
	 }
	 b_ackOK=0;
	if(rec_count)
	{
	b_ackOK=1;	
	get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
	i=0;
//
	do
	{
		if(rs232_data[char_sta+i]!=at_ack_ipsend[i])
		b_ackOK=0;
		i+=1;
	}while (at_ack_ipsend[i]!=0);
	}
	
	return b_ackOK;

}
//--------------

//--------------------------------------
//返回是否是+CMTI: "SM",检查是否是新短信,返回的是短信条数
//--------------------------------------
INT8U  CGtm900::check_cmti(INT8U len)	//返回是否是+CMTI: "SM",1
{
	INT8U i;
	rec_count=len;
	get_fse(0x0a,1,' ',1);//从第1个换行符,到第1个空格符
	//INT8U b_ackCMTI=1;
	i=0;	//判断CTMI头
	do
	{
		if(rs232_data[char_sta+i]!=at_ack_cmti[i])
		//b_ackCMTI=0;
		return FALSE;
		i+=1;
	}while (at_ack_cmti[i]!=0);
	//新短信条数存储号
	//if(b_ackCMTI)
	//{
	    i=0;//用着短信条数
		get_fse(',',1,0x0a,2);//从第1个','符,到第2个换行符
		if(char_end==char_sta+2)
		{
			//read_numh=rs232_data[char_sta]; //2C 31 0D 0A<-char_end
			//read_numl=rs232_data[char_sta+1];
			i=rs232_data[char_sta]-'0'; //2C 31 0D 0A<-char_end
			i*=10;
			i+=rs232_data[char_sta+1]-'0';
			
		}
		else if(char_end==char_sta+1)
		{
			//read_numh='0'; //2C 31 0D 0A<-char_end
			//read_numl=rs232_data[char_sta];
			i=rs232_data[char_sta]-'0';
		}
		
		return i;
		//return TRUE;
	//}
	
	//else return FALSE;
	
}

//--------------------------------------
//返回是否是%CPRI: 1,2
//--------------------------------------
INT8U  CGtm900::check_cpri(INT8U len)	//返回是否是%CPRI: 1,2
{
	INT8U i;
	 rec_count=len;
	get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
	//b_ackCPRI=1;
	i=0;	//判断CPRI头
	do
	{
		if(rs232_data[char_sta+i]!=at_ack_cpri[i])
		//b_ackCPRI=0;
		return FALSE;
		i+=1;
	}while (at_ack_cpri[i]!=0);
	return TRUE;
	//cpri_time=0;	
}

//--------------------------------------
//返回是否是%IPDATA:26,"68999999999999680e019c1116"
//--------------------------------------
INT8U  CGtm900::check_ipdata(INT16U len)	//返回是否是%IPDATA:"abcdefg"
{
	INT16U i,j;
	INT8U templen;
	INT8U b_ackIPDATA=TRUE;
	rec_count=len;
	i=0;	//判断IPDATA
	do
	{
		if(rs232_data[i]!=at_ack_ipdata[i])
		b_ackIPDATA=FALSE;
		i+=1;
	}while (at_ack_ipdata[i]!=0);
	if(!b_ackIPDATA)
	{
		b_ackIPDATA=1;
		get_fse(0x0a,1,0x0a,2);
		i=char_sta;
		j=0;
		do
		{
			if(rs232_data[i]!=at_ack_ipdata[j])
			b_ackIPDATA=0;
			i+=1;
			j+=1;
		}while (at_ack_ipdata[j]!=0);
	}

	if(!b_ackIPDATA)
	{
		b_ackIPDATA=1;
		get_fse(0x0a,2,0x0a,3);
		i=char_sta;
		j=0;
		do
		{
			if(rs232_data[i]!=at_ack_ipdata[j])
			b_ackIPDATA=0;
			i+=1;
			j+=1;
		}while (at_ack_ipdata[j]!=0);
	}
	if(!b_ackIPDATA)
	{
		b_ackIPDATA=1;
		get_fse(0x0a,3,0x0a,4);
		i=char_sta;
		j=0;
		do
		{
			if(rs232_data[i]!=at_ack_ipdata[j])
			b_ackIPDATA=0;
			i+=1;
			j+=1;
		}while (at_ack_ipdata[j]!=0);
	}
	if(!b_ackIPDATA)
	{
		b_ackIPDATA=1;
		get_fse(0x0a,4,0x0a,5);
		i=char_sta;
		j=0;
		do
		{
			if(rs232_data[i]!=at_ack_ipdata[j])
			b_ackIPDATA=0;
			i+=1;
			j+=1;
		}while (at_ack_ipdata[j]!=0);
	}
	/////////////////////////////////
	if(b_ackIPDATA)////返回是否是%IPDATA:26,"68999999999999680e019c1116"
	{
		get_fse('"',1,'"',2);	//从第1个'"'符,到第2个'"'符
		templen=ascii_2_hex(&rs232_data[char_sta],rs232_data,char_end-char_sta+1);
		return templen;

	}
	
	return FALSE;
}

//--------------------------------------
//连接服务器,只在短信方式中调用。因为直接是ASICC字符不用直接转换
//--------------------------------------
void  CGtm900::connect_IP()//连接服务器
{
	clr_at_rxbuf(); //清除接收at信息
	tab_sp=at_cmd_ipopen;	//at%ipopen="tcp","218.17.105.150",6000
	write_at_cmd();
	uart.SendNByte(ip_addr,ip_addr_count);
	write_at_crlf();

}

//--------------------------------------
//%ETCPIP:1,"10.206.219.123",,"211.136.20.203","211.136.20.203"
//连接服务器,只在短信方式中调用。因为直接是ASICC字符不用直接转换
//--------------------------------------
/*void  CGtm900::SaveLocal_IP(void)//连接服务器
{ 
 INT8U i=0,j=0,l=0,m=0;
 INT8U k=0;
 INT8U tempcnt;
 // INT8U GLocalIp[LOCALIPLEN];
  INT8U temp;
  INT16U temp16;
  //CParameterTianJin ip;
	clr_at_rxbuf(); //清除接收at信息
	tab_sp=at_cmd_localip;	//at%ipopen="tcp","218.17.105.150",6000
	write_at_cmd();
	write_at_crlf();
	while(!rec_count)
	{for(i=0;i<20;i++)
	 { 
	  wait_for_ack(10);//
	  if(rec_count) break;
	 }
	}
  if(rec_count)
  { 
	    get_fse('"',1,'"',2);//从第3个"符,到第4个"符
	 if(char_end>char_sta)
    {tempcnt=char_end-char_sta;
	   for(i=0;i<tempcnt+2;i++) //保存回复地址
		{
			ip_addr[i]=rs232_data[char_sta+i] ;
		}
	
  //前三个IP地址
  i=0;
  for(m=0;m<3;m++)
  {
   //j=i; 
   k=0;
   temp=0;
   while((ip_addr[i++]!='.')&&(i<tempcnt)) k++;
   j=i-2;
   // temp+=ip_addr[j-(--k)]-'0';
   while(k!=0)
   {
    temp*=10;
    temp+=ip_addr[j-(--k)]-'0';
   }
    GLocalIp[l++]=temp;   
  }
  
  //第四个IP地址
   k=0; 
   temp=0;
    while((ip_addr[i++]!='"')&&(i<tempcnt+2)) k++;
   j=i-2;  
   //temp+=ip_addr[j-(--k)]-'0';
   while(k!=0)
   {
    temp*=10;
    temp+=ip_addr[j-(--k)]-'0';
   }
   GLocalIp[l++]=temp;
  ip. Write(LOCALIPADD,GLocalIp,LOCALIPLEN);
	
	
	
  }
  } 
}*/
//--------------------------------------
//断开服务器
//--------------------------------------
void  CGtm900::close_IP()//断开服务器
{

	clr_at_rxbuf(); //清除接收at信息
	tab_sp=at_cmd_ipclose;	//at%ipclose
	write_at_cmd();
	write_at_crlf();
}
//--------------------------------------
//连接服务器OK/ERR
//--------------------------------------
/*void  CGtm900::ack_msgOE()//连接服务器OK/ERR
{
	INT8U i;
	INT8U  saveip[5]={"save"};
	if(GComMode!=SleepMode)
	  get_fse(0x0a,1,0x0a,2);
	write_msg_addr();
	write_at_crlf();
	for(i=0;i<5;i++)
	 {
	  wait_for_ack(10);
	  if(rec_count) break;
	  }
   if(GComMode==SleepMode)
     uart.SendNByte(saveip,4);
    else
    {
	 for(i=char_sta;i<char_end;i++)
	 {
		uart.SendByte(rs232_data[i]);
		
	 }
	}
	uart.SendByte(0x1a);
	
	write_at_crlf();

	clr_at_rxbuf(); 

	wait_for_ack(12);
}
*/

//--------------------------------------
//写回复短信的地址
//--------------------------------------
void  CGtm900::write_msg_addr() //写回复短信的地址
{
	
	tab_sp=at_cmd_cmgs;
	write_at_cmd();

	uart.SendByte('"');
	uart.SendNByte(ack_addr,13);
	uart.SendByte('"');
	uart.SendByte(';');
	
}

//------------------------------
void  CGtm900::clr_msg(INT8U j) //删除短信
{
	  INT8U i;
	  INT8U read_numh,read_numl;
	  i=j;
	  read_numh=i/10;
	  read_numh+='0';
	  read_numl=i%10;
	  read_numl+='0';
	//do
	//{
    	clr_at_rxbuf(); //清除接收at信息
		if ((read_numl!='0')||(read_numh!='0'))  
		{
		tab_sp=at_cmd_cmgd;
		write_at_cmd(); //发送CMGD,删除短信
		if(read_numh>'0')//有短信的条数高字节
		{
			
			uart.SendByte(read_numh);
			
		}
		uart.SendByte(read_numl);//有短信的条数,低字节
		
		write_at_crlf();//
		for(i=0;i<25;i++)
		{
		  wait_for_ack(10); //等待回复帧
		  if(rec_count>0) break;
		  
		 }
		
		if(rec_count)
		{
			read_numl-=1;
			if((read_numl<'0')&&(read_numh>'0'))
			{
				read_numl='9';
				read_numh-=1;
			}
		}
	}
	
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: clr_all_msg()
// 功能描述: 删除所用短信 
// 输  入:  
//          
// 输  出: 
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void  CGtm900::clr_all_msg(void) //删除短信

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -