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

📄 sms.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            
       case CheckSMS_ModemPowerOff:  
       	    /*GPRSPowerOff( );
       	    StartTickNum = clock( );
            State_of_CheckSMS = CheckSMS_ModemPowerOn;          	
            if(GetKPState==LOCK)  printf("step8 running\n"); 
            break;*/ 

       case CheckSMS_ModemPowerOn:
       	    /*if( RcvIsTimeOut(100)|| !GPRSPowerIsOn( ) ) 
            {
       	        GTimeOut=200;
       	        i = GPRSPowerOn( );
       	        if(GetKPState==LOCK) printf("i = %d\n",i);
                if( GPRSPowerIsOn( ) ) State_of_CheckSMS = CheckSMS_InitUARTCOM2;          
                if(GetKPState==LOCK) printf("step9 running\n"); 
                break;  
            }
            else break;*/

       case CheckSMS_InitUARTCOM2:
       	    /*InitUART( COM2, 2 ,0 );
            InstallISR( COM2 );	
            State_of_CheckSMS = CheckSMS_Idle; 
            if(GetKPState==LOCK) printf("step10 running\n"); 
            break;*/  
                                                  
       case CheckSMS_Idle: 
       	    if( RcvIsTimeOut(20) ) 
       	    {
       	    	  State_of_CheckSMS = CheckSMS_START; 
       	        num = retries; 	
       	    }   
           	break;   	                   
                
   }  
///////////////////////////////////////////////////////////////    
   return 0;    //返回值=0:处理未完成
}
  	   
  	   

int ConvertUDStr( char* InStr, char* OutStr )
{
   int i, m, n, l, k;
   unsigned char byte1, byte2;
   l = strlen(InStr);
   m = l/8;
   n = l%8;
   k = 0;
   for( l=0; l<m; l++ )
      {
      for( i=0; i<7; i++ )
	 {
	 byte1 = InStr[l*8+i]>>i;
	 byte2 = InStr[l*8+i+1]<<(7-i);
	 byte1 = byte1|byte2;
	 sprintf( &OutStr[k],"%02x", (unsigned int)byte1 );
	 k+=2;
	 }
      }
   for(i=0; i<n; i++ )
      {
      byte1 = InStr[m*8+i]>>i;
      if( i==n-1)  byte2 = 0;
      else         byte2 = InStr[m*8+i+1]<<(7-i);
      byte1 = byte1|byte2;
      sprintf( &OutStr[k],"%02x", (unsigned int)byte1 );
      k+=2;
      }
   OutStr[k] = '\0';

   return strlen(InStr);
}

void ConvertPhoneNumber( char* InStr, char* OutStr )
{
   int i, i1, i2;
   i1 = strlen( InStr );
   i2 = i1%2;
   i1 = i1/2;
   for( i=0; i<i1; i++ )
      {
      OutStr[2*i] = InStr[2*i+1];
      OutStr[2*i+1] = InStr[2*i];
      }
   if( i2!=0 )
      {
      OutStr[2*i] = 'f';
      OutStr[2*i+1] = InStr[2*i];
      OutStr[2*i+2] = '\0';
      }
}

void ToPhoneNumber( char* InStr, char* OutStr )
{
   int i, i1, i2;
   i1 = strlen( InStr )/2;
   for( i=0; i<i1; i++ )
      {
      OutStr[2*i] = InStr[2*i+1];
      OutStr[2*i+1] = InStr[2*i];
      if( (OutStr[2*i+1] == 'f')||(OutStr[2*i+1] == 'F') )
	 {
	 OutStr[2*i+1] = '\0';
	 }
      }
}

void ToTime( char* InStr, char* OutStr )
{
   int i, i1, i2;
   i1 = strlen( InStr )/2;
   OutStr[0] = '2';
   OutStr[1] = '0';
   for( i=0, i2=2; i<i1; i++ )
      {
      OutStr[i2] = InStr[2*i+1];
      i2++;
      OutStr[i2] = InStr[2*i];
      i2++;
      if( i<i1-1 )
	 {
	 OutStr[i2] = '-';
	 i2++;
	 }
      }
   OutStr[i2] = '\0';
}

int GetRcvMSG( char* Str )
{
   int i, i1=0, i2, len;
   len = strlen(ReturnStr);
   for( i=4; i<len; i++ )
      {
      if( ReturnStr[i-1]=='n' )
	 {
	 strncpy( str, &ReturnStr[i], 2 );
	 sscanf( str, "%2x", &i1 );
	 i += 2*(i1+1);
	 i+=2;
	 strncpy( str, &ReturnStr[i], 2 );
	 sscanf( str, "%2x", &i1 );
	 if( (i1%2)!=0 )  i1++;
	 i+=4;
	 strncpy( str, &ReturnStr[i], i1 );
	 i += i1;
	 break;
	 }
      }
   ToPhoneNumber( str, str1 );
   i+=2;
   strncpy( str, &ReturnStr[i], 2 );
   sscanf( str, "%2x", &i1 );
   i+=2;
   strncpy( str, &ReturnStr[i], 14 );
   str[14] = '\0';
   ToTime( str, str2 );
   i+=16;
   for(i2=0;;i++)
      {
      str[i2] = ReturnStr[i];
      i2++;
      str[i2] = '\0';
      if( strncmpi( &ReturnStr[i+1], "rn", 2 )==0 )    break;
      }
   if( i1==0)    i2 = Bit8ToStr( str, Str );
   else          i2 = Bit16ToStr( str, Str );
   strcpy( str, Str );
   sprintf( Str, "%s From:%s Time:%s", str, str1, str2 );
   return i2;
}

int Bit8ToStr( char* InStr, char* OutStr )
{
   int i, i1, m, n, l;
   unsigned char byte1, byte2;
   char Str[200];
   l = strlen( InStr )/2;
   strcpy( Str, InStr );
   for( i=0,i1=0; i<l; i++ )
      {
      strncpy( OutStr, &Str[i1], 2 );
      OutStr[2] = '\0';
      //str[i] = atoi( str1 );
      sscanf( OutStr, "%2x", &str[i] );
      i1 +=2;
      }
   str[i] = '\0';
   m = strlen(str)/7;
   //n = strlen(str)%7;
   n = l-m*7;
   for(i=0; i<m; i++)
      {
      for(i1=0; i1<8; i1++ )
	 {
	 if( i1==0 )
	    OutStr[i*8+i1] = str[i*7+i1]&0x7f;
	 else if( i1==7 )
	    OutStr[i*8+i1] = (str[i*7+i1-1]>>1)&0x7f;
	 else
	    {
	    byte1 = str[i*7+i1]<<i1;
	    byte2 = str[i*7+i1-1]>>(8-i1);
	    OutStr[i*8+i1] = (byte1|byte2)&0x7f;
	    }
	 }
      }
   for( i1=0; i1<n; i1++ )
      {
      if( i1==0 )
	 OutStr[i*8+i1] = str[i*7+i1]&0x7f;
      else
	 {
	 byte1 = str[i*7+i1]<<i1;
	 byte2 = str[i*7+i1-1]>>(8-i1);
	 OutStr[i*8+i1] = (byte1|byte2)&0x7f;
	 }
      }
   OutStr[i*8+i1] = '\0';

   return strlen(OutStr);
}

int Bit16ToStr( char* InStr, char* OutStr )
{
   int i, i1, len;
   unsigned int ii;
   char ts[4];
   len = strlen( InStr );
   for( i=0, i1=0; i<len-4; )
      {
      if( (InStr[i]=='0')&&(InStr[i+1]=='0') )
	 {
	 strncpy( ts, &InStr[i+2], 2 );
	 ts[2] = '\0';
	 sscanf( ts, "%2x", &ii );
	 ii = ii&0x00ff;
	 OutStr[i1] = (char)ii;
	 i1++;
	 }
      else  break;
      i += 4;
      }
   OutStr[i1] = '\0';
   return strlen(OutStr);
}


int GetMSGList( struct RcvSMSInfo* Info )
{
   int i, i1, i2, len, State;
   len = strlen(ReturnStr);
   for( i=0, i1=0, State=0; i<len-7; i++ )
      {
      if( State==0 )
	 {
	 if( strncmpi( &ReturnStr[i], "+CMGL: ", 7 )==0 )
	    {
	    strncpy( str, &ReturnStr[i+7], 3 );
	    str[3] = '\0';
	    Info[i1].Index = atoi( str );
	    State = 1;
	    }
	 }
      if( State==1 )
	 {
	 if( strncmpi( &ReturnStr[i], "rn", 2 )==0 )
	    {
	    i +=2;
	    strncpy( str, &ReturnStr[i], 2 );
	    sscanf( str, "%2x", &i2 );
	    i += 2*(i2+2);
	    strncpy( str, &ReturnStr[i], 2 );
	    sscanf( str, "%2x", &i2 );
	    if( (i2%2)!=0 )  i2++;
	    i+=4;
	    strncpy( str, &ReturnStr[i], i2 );
	    i += i2;
	    ToPhoneNumber( str, Info[i1].From );
	    i1++;
	    State = 0;
	    }
	 }
      }
   return i1;
}

int GPRSPowerOff( )
{
   int i;
   i = SEND( "AT^SMSO\r" );
   i = CHECK( 2, "OKrn" );
   return i;
}

⌨️ 快捷键说明

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