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

📄 cgtm900.cpp

📁 华为GPRSGTM900的类
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/****************************************Copyright (c)**************************************************
**                                      终端产品
**             
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: CGtm900.cpp
**创   建   人: 杨虎岳
**最后修改日期: 2006年6月6日
**描        述: 华为GTM900的参数设置和短信处理
**调用全局变量:
**继 承 父 类:
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 王顺仁
** 版  本: v1.0
** 日 期: 2006年3月3日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
**修 定  人: 杨虎岳
**日     期: 2006年6月6日
**调用全局变量:
**继 承 父 类:
** 描 述:    转换成C++,并对多个地方进行了修改
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "class.h"
#include "task.h"
#include "parameterAdd.h"
#if(HUAWEI_M==1)
INT8U CGtm900:: GMoudleRstcnt=0;
INT8U const at_cmd_at[]={"AT"};	//测试串口 正常返回OK
INT8U const at_cmd_cpas[]={"AT+CPAS"};	//手机活动状态
INT8U const at_cmd_mso[]={"AT%MSO"};	//关机,无返回
INT8U const at_cmd_csq[]={"AT+CSQ"};	//信号强度 正常返回+CSQ:31,99
INT8U const at_cmd_ate0[]={"ATE0"};	//关闭回显 正常返回OK

INT8U const at_cmd_cscs[]={'A','T','+','C','S','C','S','=','"','H','E','X','"',0x00};
//初始化PDP,击活参数,正常返回OK
//INT8U const at_cmd_cgd[]=
//{'A','T','+','C','G','D','C','O','N','T','=','1',',','"','I','P','"',',','"','C','M','N','E','T','"',0x00};
INT8U const at_cmd_cgd[]=
{'A','T','+','C','G','D','C','O','N','T','=','1',',','"','I','P','"',',',0x00};
INT8U const at_cmd_etcp[]={"AT%ETCPIP"};//初始化TCPIP,正常返回OK
INT8U const at_cmd_iomode[]={"AT%IOMODE=1"};//设置用户数据接口,正常返回OK
INT8U const at_cmd_ipopen[]={'A','T','%','I','P','O','P','E','N','=','"','T','C','P','"',',',0x00};//???????打开一条TCP连接,正常返回CONNECT
INT8U const at_cmd_ipsend[]={"AT%IPSEND="};//发送数据到服务器,正常返回%IPSEND:1
INT8U const at_cmd_ipclose[]={"AT%IPCLOSE"};//断开服务器,正常返回OK
INT8U const at_ack_ipclose[]={"%IPCLOSE"};//返回%IPCLOSE
INT8U const at_ack_ipsend[]={"%IPSEND:"};//返回%IPSEND
INT8U const at_ack_ipdata[]={"%IPDATA"};//服务器发来的数据
INT8U const mode_reset[]={"AT-Command Interpreter ready"};//模块复位信号
//短信方式
INT8U const at_cmd_cnmi[]={"AT+CNMI=2,1"} ;//新短信提示,正常返回OK
INT8U const at_cmd_cpms[]={"AT+CPMS?"};	//显示当前短信存储载体设置
INT8U const at_cmd_cmgr[]={"AT+CMGR="} ;//读短信 正常返回短信内容
INT8U const at_cmd_cmgd[]={"AT+CMGD="} ;//删除短信 正常返回OK
//INT8U const at_cmd_cmgf[]={"AT+CMGF=1"} ;//设置短信模式为文本模式,正常返回OK
INT8U const at_cmd_cmgf[]={"AT+CMGF=0"} ;//设置短信模式为PDU,正常返回OK
INT8U const at_cmd_cmgs[]={"AT+CMGS="};//写短信,正常返回">"
INT8U const at_ack_cmti[]={"+CMTI:"};//新短信提示 +CMTI: "SM",1
INT8U const at_ack_cpms[]={"+CPMS:"};//短信载体显示//判断是否是短信
INT8U const at_ack_cpas[]={"+CPAS: 0"};//手机活动状态:准备就绪
INT8U const at_ack_cpri[]={"%CPRI:"};//有网络信号提示
INT8U const at_ack_cmgr[]={"+CMGR:"};//短信内容
INT8U const at_ack_cmgs[]={"+CMGS:"};//短信发送成功
INT8U const at_ack_cms321[]={"+CMS ERROR: 321"};//invalid memory index
INT8U const at_ack_error[]={"connect error"};
INT8U const at_ack_errn[]={"ERROR"};
INT8U const at_cmd_csca[]={"AT+CSCA?"};
INT8U const at_cmd_setcsca[]={"AT+CSCA="};
INT8U const at_ack_conerrn[]={"ERROR: 2"};
INT8U const at_ack_connect[]={"CONNECT"};
INT8U const at_ack_ring[]={"RING"};
//INT8U const at_ack_csq[]={"+CSQ: 99,99"};
INT8U const at_ack_csq[]={"+CSQ: "};
INT8U const hex2hl[]={"0123456789ABCDEF"};
INT8U const at_cmd_localip[]={"AT%ETCPIP?"};//查询本地IP
CGPIOOUT MokRcvfg(LED1IO);
/*
AT+CPMS?
<mem1> “SM” SIM卡消息存储器 
读取和删除消息时使用
“ME” ME消息存储器 
的存储器 
<mem2> “SM” SIM卡消息存储器 
存储和发送消息时使用
“ME” ME消息存储器 
的存储器 
<mem3> “SM” SIM卡消息存储器 
若没有建立到TE的路
“ME” ME消息存储器 
由,则将接收的消息存储
在该存储器 
<usedx> -- <memx>中当前消息的数量 
<totalx> -- <memx>中可存储的消息的数量 

*/
/*
%CPRI: 1,2
AT+CMGF=1
AT+CPMS?

+CPMS: "SM",1,20,"SM",1,20,"SM",1,20

OK
ATE0
at+csq


AT+Cmgr=1

+CMGR: "REC UNREAD","8613760465620",,"06/05/12,17:00:50+00",145,4,0,0,"8613800755500",145,24
Ip:"218.017.105.150",6000

OK
AT+CGDCONT=1,"IP","CMNET"
AT%ETCPIP
218.18.39.159
AT%IPOPEN="TCP","219.134.113.47",4777
AT%IPCLOSE
AT%IPSEND="11111111111111111111"
*/
 CGtm900::CGtm900(INT8U* buf)
{
  //CommonId=id;
 rs232_data=buf;


}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: GprsInit(void)
// 功能描述: GPRS初始化 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900:: GprsInit(void)
{ 
  INT8U temp=0;
  INT8U j=0;
  
 power_on();
  do
  {
   temp=InitAll();

   if(temp) return TRUE;
   j++;
    
  }while(GRestGprsFg&&j<1);
  return FALSE;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: CloseTcpIP(void)
// 功能描述: 关闭TCP连接,要等12秒
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900:: CloseTcpIP(void)
{
    INT8U i;
    close_IP();//这个要12秒才能返回OK
	for(i=0;i<20;i++)
	{
       clr_at_rxbuf(); //清除接收at信息
       wait_for_ack(100);
     if(rec_count)
     {
	   check_ipclose();
	   if(!b_ackOK)  check_OK();
       if(b_ackOK) 	return True;
	//clr_at_rxbuf(); //清除接收at信息
     }
    }

 return FALSE;

}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: InitTCPIP(void)
// 功能描述: 包括配置APN,进入TCPIP功能,打开TCPIP一条数据连接,三个功能项
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: Initconnect_IP()
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900:: InitTCPIP(void)//包括配置APN,进入TCPIP功能,打开TCPIP一条数据连接,三个功能项
{
     INT8U i=0;
     INT8U temp;
   write_at_ate0();
   //temp=8;
  temp=write_at_csq();//信号强度
   if(temp>4&&temp!=99)
  {
     i=0;
     
       write_at_cgd();//初始化PDP,配置APN,,击活参数,正常返回OK//如果不行复位模块5次
       if(rec_count==0) 
       return FALSE;
      //if(!b_ackOK)	{i++;}
      //}while((!b_ackOK)&&i<2);
     //选择16进制形式。现在不能用,华为的模块不能处理00
    
     //i=0;
        do
        {
         write_at_etcp();//初始化ETCP,正常返回OK
         if(rec_count==0) 
         return FALSE;
        if(!b_ackOK)	{i++;}
        }while((!b_ackOK)&&i<2);
             
        //SaveLocal_IP(); 
        temp=Initconnect_IP();
         if(temp==TRUE)
          {
              i=0;
            do//
            {
             write_at_iomode();//设置用户数据接口,正常返回OK
             if(rec_count==0)
              return FALSE;
             if(!b_ackOK)	{i++;}
            }//
              while((!b_ackOK)&&i<5);//
          }
    
    if(i>=5||(temp==FALSE))
    {
     return FALSE;
    }
    else
    {  

      return TRUE;

    }
  
  }
  return FALSE;
 
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: InitNote(void)
// 功能描述: 初始化短信模式设置在文本方式,并删除以前的短信。只能在上电时调用
// 输  入:  
//          
// 输  出: 
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900:: InitNote(void)
{
 INT8U i=0;
  write_at_ate0();
  do
  {
		write_at_cmgf();//设置短信模式txt
		if(!b_ackOK)	{i++;}
	//	view_rec();//收到什么,显示什么
  }while((!b_ackOK)&&i<2);
  if(i<2)
  {
     i=0;
     do
    {
		write_at_cnmi();//设置新短信提示
		if(!b_ackOK)	{i++;}
	//	view_rec();//收到什么,显示什么
    }while((!b_ackOK)&&i<2);
  
  }
 if(i<2)
 {
  
   return TRUE;
 }
 
 return FALSE;

}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: Initconnect_IP(void)
// 功能描述:连接TCP 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U  CGtm900::Initconnect_IP(void)//连接服务器
{
	INT8U i,j=0,m;
	 
	INT8U templen;
	
	INT16U tempport=0x00; 
	INT8U ipaddr[6];//={219,133,118,100,0x12,0xa9};//{218,18,141,21,0x12,0xa9};//61.141.250.201,4777 0x12,0xa9//61.141.250.201
	INT8U ip_addr_ascii[5];//9600,0x25,0x80
	ip.Read(PAP0F3ADD,6, ipaddr);
	

    //清除接收at信息
do{
    clr_at_rxbuf(); 
    //flag=FALSE;
	tab_sp=at_cmd_ipopen;	//at%ipopen="tcp","218.17.105.150",6000
	write_at_cmd();
	uart.SendByte('"');
	for(i=0;i<4;i++)
	{
    	templen=binbcd8_to_ascii(ipaddr[i],ip_addr_ascii);
    	uart.SendNByte(ip_addr_ascii,templen);
    	if(i<3) uart.SendByte('.');
    }
    uart.SendByte('"');
    uart.SendByte(',');
    tempport=ipaddr[5];
    tempport<<=8; 
    tempport|=ipaddr[4];    
    templen=binbcd16_to_ascii(tempport,ip_addr_ascii);
    uart.SendNByte(ip_addr_ascii,templen);
	write_at_crlf();
	for(m=0;m<120;m++)
		{
		   wait_for_ack(25); //等待回复帧20-30秒左右可以
		  if(rec_count>6) break;
		 
		 }
    if(rec_count==0)  return FALSE;
	check_connect();
	j++;
	if(b_ackOK)
	{
	 //initokled.clr();
	 OSTaskResume(TaskIPOKLedPro);
	 GOnNetFg=TRUE;
	 GOnHomeFg=FALSE;
	 return TRUE;
		
	}
	
	
	
 }while(j<2);
 
 GOnNetFg=FALSE;
 GOnHomeFg=FALSE;
	
	return FALSE;
	

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: GprsReset(void)
// 功能描述: 复位模块并初始化一些设置
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::GprsReset(void)
{
  CGPIOOUT gprsrst(GPRS_RST);
  INT8U temp=0;
   GMoudleRstcnt++;
   if(GMoudleRstcnt>5)
   {
    power_off();
    GMoudleRstcnt=0;
    temp=GprsInit();
    return temp;
   
   }
  else
  {
   gprsrst.clr();
   delay(0xff);
   gprsrst.set();
   GOnHomeFg=FALSE;
   GOnNetFg=FALSE;
   GRestGprsFg=FALSE;
   temp=InitAll();
   return temp;
   }
  // CloseTcpIP();
 
  
}
INT8U CGtm900::InitAll(void)
{
    INT8U temp;
    write_at_ate0();//close return disp
   
    GNoteOkFalg=InitNote();
   if(GNoteOkFalg)//????????????????????????????????????????????
  clr_all_msg();
    if(GComMode!=SleepMode)
    {
    temp=InitTCPIP();
    return temp;
     }
    else return GNoteOkFalg;
  
}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DealMsg(void)
// 功能描述: 当是IP址处理短信,,则重新连接 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/*INT8U CGtm900::DealMsg(void)//在read_msg()中调用
{
  INT8U i,j;
  //if(b_ackCMGR) //取得了新的IP地址,分析短信内容,并做相应处理
  //{
     // if(b_msgIP==0x01)
   // {
	//////////////////////////////////
if(GComMode!=SleepMode)
  {
	close_IP();//这个要12秒才能返回OK
	GOnNetFg=FALSE;
	GOnHomeFg=FALSE;
	for(i=0;i<40;i++)
	{
       clr_at_rxbuf(); //清除接收at信息
       wait_for_ack(25);
     if(rec_count)
     {
	   check_ipclose();

⌨️ 快捷键说明

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