📄 sms.cpp
字号:
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 + -