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

📄 cgtm900.cpp

📁 华为GPRSGTM900的类
💻 CPP
📖 第 1 页 / 共 5 页
字号:
{
    INT8U i=0;
   i=QueSmCnt();
   if(i)
  {
   do{
       clr_msg(i);
      i--;
      }
      while(i);
   }//删除短信
	
}

void CGtm900::  delay(INT8U x)
{
    INT8U i,j;
    for(i=0;i<x;i++)
    {
        for(j=0;j<120;j++);
    }
}


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


INT8U CGtm900::binbcd8_to_ascii(INT8U bcdbin,INT8U *buffer)
{
    
    INT8U   const  ascTable[17] = {"0123456789"};
    INT8U *tmp_p = buffer;
    INT8U temp;
    
    INT8U i, pos;
    pos=0;
    temp=bcdbin;
    i=temp/100;
    if(i)
    { 
      temp=temp%100;
      tmp_p[pos++]=ascTable[i];
    }
    i=temp/10;
    if(i)
    {
     temp=temp%10;
     tmp_p[pos++]=ascTable[i];
    }
    else if(pos!=0)
         {
          tmp_p[pos++]=ascTable[0];
         }
     tmp_p[pos++]=ascTable[temp];
     return pos;
  }
  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

INT8U CGtm900::ascii_to_binbcd8(INT8U len,INT8U *buffer)
{
 
    INT8U *tmp_p = buffer;
    INT8U temp,binbcd=0;
    INT8U templen;
    INT8U i=0;
    templen=len;
    if(templen>3)
    { 
      templen=3;
      templen-=1;
      binbcd=tmp_p[i++]-'0';
      binbcd*=100;
         
     }
     
    if(templen==2)
    {
     templen-=1;
     temp=tmp_p[i++]-'0';
     temp=temp*10;
     binbcd+=temp;
        
    }
    binbcd+=tmp_p[i++]-'0';
    return binbcd;
    

}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

INT16U CGtm900::ascii_to_binbcd16(INT8U len,INT8U *buffer)
{
 
    INT8U *tmp_p = buffer;
    INT16U temp,binbcd=0;
    INT8U templen;
    INT8U i=0;
    templen=len;
    if(templen>5)
    { 
      templen=5;
      templen-=1;
      binbcd=tmp_p[i++]-'0';
      binbcd*=10000;
         
     }
     
    if(templen==4)
    {
     templen-=1;
     temp=tmp_p[i++]-'0';
     temp=temp*1000;
     binbcd+=temp;
        
    }
     if(templen==3)
    {
     templen-=1;
     temp=tmp_p[i++]-'0';
     temp=temp*100;
     binbcd+=temp;
        
    }
    if(templen==2)
    {
     templen-=1;
     temp=tmp_p[i++]-'0';
     temp=temp*10;
     binbcd+=temp;
        
    }
    binbcd+=tmp_p[i++]-'0';
    return binbcd;
    
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址 
// 输  入:  
//          
// 输  出: 解码地址
//            
// 全局变量: 无
// 调用模块: 
//   调用类:
//创 建  人: 杨虎岳
//日     期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

INT8U CGtm900::binbcd16_to_ascii(INT16U bcdbin,INT8U *buffer)
{
    
    INT8U   const  ascTable[17] = {"0123456789"};
    INT8U *tmp_p = buffer;
    INT16U temp;
    
    INT8U i, pos;
    pos=0;
    temp=bcdbin;
   i=temp/10000;
    if(i)
    { 
      temp=temp%10000;
      tmp_p[pos++]=ascTable[i];
    }
    i=temp/1000;
    if(i)
    {
     temp=temp%1000;
     tmp_p[pos++]=ascTable[i];
    }
    else if(pos!=0)
         {
          tmp_p[pos++]=ascTable[0];
         }
    i=temp/100;     
   if(i)
    {
     temp=temp%100;
     tmp_p[pos++]=ascTable[i];
    }
    else if(pos!=0)
         {
          tmp_p[pos++]=ascTable[0];
         }
    i=temp/10 ;   
    if(i)
    {
     temp=temp%10;
     tmp_p[pos++]=ascTable[i];
    }
    else if(pos!=0)
         {
          tmp_p[pos++]=ascTable[0];
         }
     tmp_p[pos++]=ascTable[temp];
     return pos;
  }
  
  //--------------------------------------
//收到什么,显示什么
//--------------------------------------
/*void  CGtm900::view_rec(void)//收到什么,显示什么
{   
    CUART1 uart1;
	INT8U i ,j;
	if(rec_count>0)
	{
		for(i=0;i<rec_count;i++)
		{
			uart1.SendByte(rs232_data[i]);
			//while(!TI);
			//TI=0;
		}
		write_at_crlf();
		for(j=0;j<50;j++)
		{
		  wait_for_ack(5); //等待回复帧
		  if(rec_count>0) break;
		  
		 }
	}
}*/
//--------------------------------------
//收到IP地址后,确认IP
//--------------------------------------
/*void  CGtm900::ack_msgIP()//收到IP地址后,确认IP
{
	INT8U i,j;
	clr_at_rxbuf(); //清除接收at信息
	write_msg_addr();
	write_at_crlf();
	for(i=0;i<100;i++)
	 {
	  wait_for_ack(10);
	  if(rec_count) break;
	  }
	for(i=0;i<ip_addr_count;i++)
	{
		uart.SendByte(ip_addr[i]);
	
	}
	uart.SendByte(0x1a);
	
	write_at_crlf();
	i=0;
	do
	{
		clr_at_rxbuf(); //清除接收at信息
		for(j=0;j<5;j++)
		{
		  wait_for_ack(100); //等待回复帧
		  if(rec_count>0) break;
		  
		 }
		check_OK();	//是否是OK,产生b_ackOK
		i+=1;
		if(i>10) break;
	}while(!b_ackOK);
}
*/
//--------------------------------------
//返回是否是+CMGS: 86
//--------------------------------------
void  CGtm900::check_cmgs()	//返回是否是+CMGS: 86
{
	INT8U i;
	get_fse(0x0a,1,' ',1);//从第1个换行符,到第1个空格符
	b_ackOK=1;
	i=0;	//判断CTMI头
	do
	{
		if(rs232_data[char_sta+i]!=at_ack_cmgs[i])
		b_ackOK=0;
		i+=1;
	}while (at_ack_cmgs[i]!=0);
}

INT8U CGtm900:: decode_pdu_frame(unsigned char *rcvd_message,INT8U len, unsigned char *user_data)
{
	unsigned char user_data_len = 0;
	int i = 0;
	INT8U templen;
	//INT8U temp;
	INT8U tempbuf[255];
	templen=len;
    if(templen<2)
     return FALSE;
	/* 用户地址长度 */
	user_data_stru.addr_len = rcvd_message[0];
	user_data_len += 1;
	/* 用户地址类型 */
	user_data_stru.addr_type = rcvd_message[1];
	user_data_len += 1;
    if(user_data_len +user_data_stru.addr_len-1>templen)
     return FALSE;
	/* 将bcd码字节内前后两部分翻转 */
	for(i = 0; i < user_data_stru.addr_len - 1; ++i) {
		user_data_stru.short_msg_centre_num[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));
	}
	
	
	user_data_len += user_data_stru.addr_len - 1;
   if(user_data_len +3>templen)
     return FALSE;
	/* tp中的各相参数 */
	user_data_stru.tp_msg = rcvd_message[user_data_len];
	user_data_len += 1;
	/* 对方地址长度 */
	user_data_stru.dest_msg_len = rcvd_message[user_data_len];
	user_data_len += 1;
	/* 对方地址类型 */
	user_data_stru.dest_msg_type = rcvd_message[user_data_len];
	user_data_len += 1;
    if(user_data_len +user_data_stru.dest_msg_len+1>templen)
     return FALSE;
	/* 将bcd码字节内前后两部分翻转 */
	//for(i = 0; i < (int)((user_data_stru.dest_msg_len + 1) / 2); ++i) 
	//{
		//user_data_stru.dest_msg_centre_num[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));	
	//}
	for(i = 0; i < (int)((user_data_stru.dest_msg_len + 1) / 2); ++i)
	user_data_stru.dest_msg_centre_num[i] =rcvd_message[i + user_data_len];
	user_data_len += (int)((user_data_stru.dest_msg_len + 1) / 2);
   if(user_data_len +10>templen)
     return FALSE;
	/* 协议标识符 */
	user_data_stru.tp_protc_ident = rcvd_message[user_data_len];
	user_data_len += 1;
	/* 编码方式 */
	user_data_stru.tp_data_coding_sche = rcvd_message[user_data_len];
	
	user_data_len += 1;
	/* 时间戳 */
	for(i = 0; i < 7; ++i) {
		user_data_stru.timeid[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));
	}
	user_data_len += 7;
	/* 用户数据长度 */
	user_data_stru.tp_usr_data_len = rcvd_message[user_data_len];
	user_data_len += 1;
	 
	
	/*switch(user_data_stru.tp_data_coding_sche)
	 {
	  case 0x00:
	            if(user_data_len +(user_data_stru.tp_usr_data_len*7/8)>templen)//有一个的误差,可能溢出
                  return FALSE;
                 temp=gsmDecode7bit(&rcvd_message[user_data_len],templen-user_data_len,tempbuf);
                 if(temp>user_data_stru.tp_usr_data_len)
                   temp=user_data_stru.tp_usr_data_len;
                  
                  if((tempbuf[2]==0x68)||(tempbuf[3]==0xFE))
                   { 
                     temp-=2;
                     user_data_stru.smsseq[0]=tempbuf[0];
                     user_data_stru.smsseq[1]=tempbuf[1];
                     BufToBuf(user_data,&tempbuf[2],temp);
                     user_data_stru.tp_usr_data_len=temp;
                    }
                 else 
                    {
                     user_data_stru.tp_usr_data_len=ascii_2_hex(tempbuf,tempbuf, temp);
                      temp=user_data_stru.tp_usr_data_len-2;
                     user_data_stru.smsseq[0]=tempbuf[0];
                     user_data_stru.smsseq[1]=tempbuf[1];
                     BufToBuf(user_data,&tempbuf[2],temp);
                     user_data_stru.tp_usr_data_len=temp;
                    }
                 //BufToBuf(user_data,tempbuf,temp);
	            break;
	  case 0x04:
	           if((user_data_len+user_data_stru.tp_usr_data_len-1)>templen)
                  return FALSE;
                if((rcvd_message[user_data_len+2]=='6')&&(rcvd_message[user_data_len+3]=='8'))
                  {temp=user_data_stru.tp_usr_data_len;
                   user_data_stru.tp_usr_data_len=ascii_2_hex(rcvd_message + user_data_len,tempbuf, temp);
                   temp-=2;
                   user_data_stru.smsseq[0]=tempbuf[0];
                   user_data_stru.smsseq[1]=tempbuf[1];
                   BufToBuf(user_data,&tempbuf[2],temp);
                   user_data_stru.tp_usr_data_len=temp;
                  }
                else
                {
                  user_data_stru.smsseq[0]=rcvd_message[ user_data_len];
                   user_data_stru.smsseq[1]=rcvd_message[ user_data_len+1];
	             BufToBuf(user_data, rcvd_message + user_data_len+2, user_data_stru.tp_usr_data_len-2);
	             user_data_stru.tp_usr_data_len-=2;
	            }
	            break;
	  case 0x08:
               if((user_data_len +user_data_stru.tp_usr_data_len)>templen)
                  return FALSE;
	           for(i=0;i<user_data_stru.tp_usr_data_len/2;i++)
	            user_data[i]=rcvd_message[ user_data_len+2*i+1];
	           user_data_stru.tp_usr_data_len/=2;
	           if((user_data[0]!=0x68)&&(user_data[0]!=0xFE))
	              { temp=user_data_stru.tp_usr_data_len;
	                user_data_stru.tp_usr_data_len=ascii_2_hex(user_data,user_data, temp);
	              }
	            break;
	   default: break;
	 
	 }
	 */
	// if(user_data_stru.tp_data_coding_sche==0x04)
	// {
	 BufToBuf(tempbuf, rcvd_message + user_data_len+2, user_data_stru.tp_usr_data_len-2);
	 user_data_stru.tp_usr_data_len-=2;
	 user_data_stru.smsseq[0]=rcvd_message[user_data_len];
     user_data_stru.smsseq[1]=rcvd_message[user_data_len+1];
	 if(tempbuf[0]!=0x68)
	 {for(i=user_data_len;i<templen;i++)
	   if(rcvd_message[i]==0x68) break;
	    BufToBuf(tempbuf, rcvd_message +i, templen-i);
	    user_data_stru.tp_usr_data_len=templen-i;
	    user_data_stru.smsseq[0]=rcvd_message[i-2];
        user_data_stru.smsseq[1]=rcvd_message[i-1];
	 }
	 BufToBuf(user_data,tempbuf,user_data_stru.tp_usr_data_len);
	// }
	// else
	//  return FALSE;
	/* 用户数据内容 */
	
	//user_data_len += user_data_stru.tp_usr_data_len;
	/* 编码方式 */
	/* 传出用户数据 */
	//BufToBuf(user_data, user_data_stru.usr_data, user_data_stru.tp_usr_data_len);
	/* 返回用户数据长度 */
	if(user_data_stru.tp_usr_data_len>255)
	  return FALSE;
	return (user_data_stru.tp_usr_data_len);
}


/*INT8U CGtm900:: encode_pdu_frame(unsigned char *source_data, 
					 unsigned char source_len, 
					 unsigned char *dest_data)
{
	unsigned char dest_data_len = 0;
	unsigned char dest_temp[256];
	unsigned char temp_len = 0;
	//CParameterTianJin  pa;
	INT8U smscenter[8];
	INT8U i;
	
	INT8U temp;
	INT8U temp1;

	memset(dest_

⌨️ 快捷键说明

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