📄 acomm.c
字号:
}
Mold[messph].Source[len1+2] = 0 ;
}
// rtxd( Mold[messph].Source ) ;
if(len2/2*2==len2)
len=28+len2;
else
len=29+len2;
Mold[messph].year = ( ( ( PDU[len+1] & 0x0f )*10 ) + ( PDU[len] & 0x0f ) ) ;
Mold[messph].month = ( ( ( PDU[len+3] & 0x0f )*10 ) + ( PDU[len+2] & 0x0f ) ) ;
Mold[messph].date = ( ( ( PDU[len+5] & 0x0f )*10 ) + ( PDU[len+4] & 0x0f ) ) ;
Mold[messph].hour = ( ( ( PDU[len+7] & 0x0f )*10 ) + ( PDU[len+6] & 0x0f ) ) ;
Mold[messph].minute = ( ( ( PDU[len+9] & 0x0f )*10 ) + ( PDU[len+8] & 0x0f ) ) ;
Mold[messph].second = ( ( ( PDU[len+11] & 0x0f )*10 ) + ( PDU[len+10] & 0x0f ) ) ;
Mold[messph].year = ( ( PDU[43] & 0x0f ) << 4 ) | ( PDU[42] & 0x0f ) ;
Mold[messph].month = ( ( PDU[45] & 0x0f ) << 4 ) | ( PDU[44] & 0x0f ) ;
Mold[messph].date = ( ( PDU[47] & 0x0f ) << 4 ) | ( PDU[46] & 0x0f ) ;
Mold[messph].hour = ( ( PDU[49] & 0x0f ) << 4 ) | ( PDU[48] & 0x0f ) ;
Mold[messph].minute = ( ( PDU[51] & 0x0f ) << 4 ) | ( PDU[50] & 0x0f ) ;
Mold[messph].second = ( ( PDU[53] & 0x0f ) << 4 ) | ( PDU[52] & 0x0f ) ;
for(i=0;i<10;i++)
t[i]=PDU[len+i] ;
/*t[10] = PDU[52] ;
t[11] = PDU[53] ;*/
i = 0 ;
while( 1 )
{
PDU[i] = PDU[len+14+i] ;
if( PDU[i] == 0x0d )
break ;
i++ ;
}
PDU[i] = 0 ;
PDU2Text( PDU,pdutemp1 ) ;
ls=strlen(pdutemp1);
j=0;
for(i=0;i<ls;i++)
{
if(pdutemp1[i]<0x20)
{
pdutemp[j]=((pdutemp1[i])&0x0f)|(pdutemp1[i+1]<<4);
j++;
i++;
}
else
{ pdutemp[j]=pdutemp1[i];
j++;
}
}
pdutemp[j]=0;
// rtxd( pdutemp ) ;
strcpy( Mold[messph].context,pdutemp ) ;
messph++ ;
if( messph == MESSLEN )
messph = 0 ;
if( messpt == messph )
messpt++ ;
if( messpt == MESSLEN )
messpt = 0 ;
stop_state = WAKEUP ;
}
}
}
else if( ( gsmproc[0] == 'R' ) && ( gsmproc[1] == 'I' ) && ( gsmproc[2] == 'N' ) && ( gsmproc[3] == 'G' ) )
ProcessRing( ) ;
else if( ( gsmproc[0] == 'N' ) && ( gsmproc[1] == 'O' ) && ( gsmproc[2] == ' ' ) && ( gsmproc[3] == 'C' ) )
ProcessNoC( ) ;
}
}
void substr( char *s,char *d,uint start,uint n )
{
uint i ;
for(i=0;i<n;i++)
d[i]=s[i+start] ;
d[n]=0 ;
}
void Setcsca( void )
{
char i,a,b,j,zwtemp[50] ;
uint a1 ;
strcpy( zwtemp,"AT+CSCA=" ) ;
zwtemp[8] = '"' ;
if( smsc_code[0] == '+' )
zwtemp[9] = 0 ;
else
{
zwtemp[9] = '+' ;
zwtemp[10] = 0 ;
}
strcat( zwtemp,smsc_code ) ;
a1=strlen( zwtemp ) ;
zwtemp[a1++]='"' ;
zwtemp[a1]=0;
stringsendgsm(zwtemp);
while( 1 )
{
timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{ gsmproc[gsmp] = b ;
// sendtest( b ) ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
{
gsmerr++ ;
return ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
gsmerr=0 ;
return ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
{
gsmerr = 0 ;
return ;
}
else if( ( gsmproc[0] == 'R' ) && ( gsmproc[1] == 'I' ) && ( gsmproc[2] == 'N' ) && ( gsmproc[3] == 'G' ) )
ProcessRing( ) ;
else if( ( gsmproc[0] == 'N' ) && ( gsmproc[1] == 'O' ) && ( gsmproc[2] == ' ' ) && ( gsmproc[3] == 'C' ) )
ProcessNoC( ) ;
}
}
void Setgsm( uchar *s )
{
char i,a,b,j ;
stringsendgsm(s);
while( 1 )
{
timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
if( IN2 == 0 )
sendtest( b ) ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
{
gsmerr++ ;
return ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
gsmerr=0 ;
return ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
{
gsmerr = 0 ;
return ;
}
else if( ( gsmproc[0] == 'R' ) && ( gsmproc[1] == 'I' ) && ( gsmproc[2] == 'N' ) && ( gsmproc[3] == 'G' ) )
ProcessRing( ) ;
else if( ( gsmproc[0] == 'N' ) && ( gsmproc[1] == 'O' ) && ( gsmproc[2] == ' ' ) && ( gsmproc[3] == 'C' ) )
ProcessNoC( ) ;
}
}
void AddMout( uchar *v,uchar *m )
{
strcpy( Mout[moutph].target,v ) ;
strcpy( Mout[moutph].context,m ) ;
moutph++ ;
if( moutph == MOUTLEN )
moutph = 0 ;
if( moutpt == moutph )
moutpt++ ;
if( moutpt == MOUTLEN )
moutpt = 0 ;
}
void ProcessMessage( )
{
uint i,j,len,len2,m,n ;
uchar control_num ;
uchar control_snow[20] ; /* 当前的控制序号 */
uchar xdata Ptemp[150],Ptemp1[150],display[180] ;
uchar xdata temp_set[400];
uchar xdata disp[160] ;
uchar b,c ;
while( messpt != messph )
{
len = strlen(Mold[messpt].context) ;
if( (Mold[messpt].context[0]=='0')&&(Mold[messpt].context[1]=='0') )
{
substr( Mold[messpt].context,Mold[messpt].context,10,len-10) ;
len -= 10 ;
}
if( ( Mold[messpt].context[0] == 'A' ) && ( Mold[messpt].context[1] == 'A' ) )
AddMout( Mold[messpt].Source,"Answer!" ) ;
i = strcmp( Mold[messpt].Source,control_code ) ;
j = strcmp( Mold[messpt].Source,control_code_bak1 ) ;
m = strcmp( Mold[messpt].Source,control_code_bak2 ) ;
rtxd( control_code ) ;
rtxd( control_code_bak1 ) ;
rtxd( control_code_bak2 ) ;
rtxd( Mold[messpt].Source ) ;
if( ( i==0 )||( j==0 )||( m==0 ) )
{
if ( ( Mold[messpt].context[0] == 'R' ) && ( Mold[messpt].context[1] == 'A' ) )
{
SetState[0] = Mold[messpt].context[14] ;
Set_view( 'Z',SetState ) ;
}
if ( ( Mold[messpt].context[0] == 'R' ) && ( Mold[messpt].context[1] == 'G' ) )
{
SetState[1] = Mold[messpt].context[14] ;
Set_view( 'Z',SetState ) ;
}
if ( ( Mold[messpt].context[0] == 'R' ) && ( Mold[messpt].context[1] == 'R' ) )
{
SetState[2] = Mold[messpt].context[14] ;
Set_view( 'Z',SetState ) ;
}
if ( ( Mold[messpt].context[0] == 'R' ) && ( Mold[messpt].context[1] == 'C' ) )
{
SetState[5] = Mold[messpt].context[14] ;
Set_view( 'Z',SetState ) ;
}
if( ( Mold[messpt].context[0] == 'T' ) && ( Mold[messpt].context[1] == 'H' ) )
{
control_num = Mold[messpt].context[14] ;
len = strlen( Mold[messpt].context ) ;
substr( Mold[messpt].context,Ptemp1,15,len-15 ) ;
if( ( control_num != 'Y' )&&( control_num != 'X' )&&( control_num != 'Z' ) )
Set_view( control_num,Ptemp1 ) ;
if( control_num == 'A' )
strcpy( view_code,Ptemp1 ) ;
if( control_num == 'B' )
strcpy( control_code,Ptemp1 ) ;
if( control_num == 'C' )
strcpy( control_code_bak1,Ptemp1 ) ;
if( control_num == 'D' )
strcpy( control_code_bak2,Ptemp1 ) ;
if( control_num == 'E' )
strcpy( smsc_code,Ptemp1 ) ;
if( control_num == 'F' )
strcpy( listen_code,Ptemp1 ) ;
if( control_num == 'Q' )
strcpy( listen_code1,Ptemp1 ) ;
}
if( ( Mold[messpt].context[0] == 'T' ) && ( Mold[messpt].context[1] == 'P' ) )
{
len = strlen( Mold[messpt].context ) ;
substr( Mold[messpt].context,PERIOD_STR,14,len-14 ) ;
Set_view( 'W',PERIOD_STR ) ;
PERIOD = atol( PERIOD_STR )*100 ;
if( PERIOD == 0 )
PERIOD = 360000 ;
}
if( ( Mold[messpt].context[0] == 'T' ) && ( Mold[messpt].context[1] == 'T' ) )
{
len = strlen( Mold[messpt].context ) ;
trace_type = Mold[messpt].context[14] ;
if( len ==21 )
count = ( Mold[messpt].context[18] - 0x30 ) * 100 + ( Mold[messpt].context[19] - 0x30 ) * 10 + Mold[messpt].context[20] - 0x30 ;
else
count=20;
send_time = ( Mold[messpt].context[15] - 0x30 ) * 100 + ( Mold[messpt].context[16] - 0x30 ) * 10 + Mold[messpt].context[17] - 0x30 ;
if( send_time < 10 )
send_time = 10 ;
send_time = send_time * 100 ;
sendstate = CENTREWANT ;
timer_2 = 0;
}
}
messpt++ ;
if( messpt == MESSLEN )
messpt = 0 ;
}
}
void SendUntimed( void )
{
uchar gsm_send ;
uint i ;
if( moutpt != moutph )
{
gsm_send = ProcessSend( Mout[moutpt].target,Mout[moutpt].context ) ;
sendnum++ ;
if( ( gsm_send == 1 )||( sendnum >= 6 ) )
{
sendnum=0 ;
moutpt++ ;
if( moutpt == MOUTLEN )
moutpt = 0 ;
}
}
}
/*
uchar ProcessSend( uchar * target,uchar *senddata )
{
uchar xdata temp1[400] ;
uchar xdata PDU[400] ;
uchar b,a ;
uint i,ls ;
if( regist_state == '0' )
return 0 ;
if( IN2 == 0 )
{
rtxd( target ) ;
rtxd( senddata ) ;
}
ls = strlen( target ) ;
if( ls == 6 )
{
strcpy(PDU,Pdu_head1);
PDU[26] = target[1] ;
PDU[27] = target[0] ;
PDU[28] = target[3] ;
PDU[29] = target[2] ;
PDU[30] = target[5] ;
PDU[31] = target[4] ;
}
else
{
strcpy(PDU,Pdu_head2);
PDU[26] = target[1] ;
PDU[27] = target[0] ;
PDU[28] = target[3] ;
PDU[29] = target[2] ;
PDU[30] = target[5] ;
PDU[31] = target[4] ;
PDU[32] = target[7] ;
PDU[33] = target[6] ;
PDU[34] = target[9] ;
PDU[35] = target[8] ;
PDU[36] = 'F' ;
PDU[37] = target[10] ;
}
PDU[4] = smsc_code[1] ;
PDU[5] = smsc_code[0] ;
PDU[6] = smsc_code[3] ;
PDU[7] = smsc_code[2] ;
PDU[8] = smsc_code[5] ;
PDU[9] = smsc_code[4] ;
PDU[10] = smsc_code[7] ;
PDU[11] = smsc_code[6] ;
PDU[12] = smsc_code[9] ;
PDU[13] = smsc_code[8] ;
PDU[14] = smsc_code[11] ;
PDU[15] = smsc_code[10] ;
PDU[16] = 'F' ;
PDU[17] = smsc_code[12] ;
Text2PDU( senddata,temp1 ) ;
strcat( PDU,temp1 ) ;
stringsendgsm( atcmgs ) ;
timer_0 = 200 ;
while( 1 )
{
a = readgsm( &b ) ;
if( a == 1 )
{
if( IN2 == 0 )
sendtest(b);
if( b == '>' )
break ;
}
if ( timer_0 == 0 )
break ;
}
if( timer_0 != 0 )
{
ls = strlen( PDU ) ;
PDU[ls++] = 0x1a ;
PDU[ls] = 0 ;
for( i=0;i<ls;i++ )
sendgsm( PDU[i] ) ;
while( 1 )
{
timer_0 = 1000 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
if( IN2 == 0 )
sendtest( b ) ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
{
gsmerr++ ;
return 0 ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
gsmerr=0 ;
return 1 ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) && ( gsmproc[2] == 'R' ) && ( gsmproc[3] == 'O' ) && ( gsmproc[4] == 'R' ) )
{
return 0 ;
}
else if( ( gsmproc[0] == 'R' ) && ( gsmproc[1] == 'I' ) && ( gsmproc[2] == 'N' ) && ( gsmproc[3] == 'G' ) )
ProcessRing( ) ;
else if( ( gsmproc[0] == 'N' ) && ( gsmproc[1] == 'O' ) && ( gsmproc[2] == ' ' ) && ( gsmproc[3] == 'C' ) )
ProcessNoC( ) ;
}
}
}
*/
uchar ProcessSend( uchar * target,uchar *senddata )
{
uchar b,a,zwtemp[50] ;
uint i,ls ;
// if( regist_state == '0' )
// return 0 ;
rtxd( target ) ;
rtxd( senddata ) ;
Setcsca( ) ;
Setgsm( "AT+CMGF=1" ) ;
Setgsm( "AT+CSMP=17,11,0,0" ) ;
// Setgsm( "AT+CSMP=17,11,0,8" ) ; //Unicode
// Setgsm( "AT+CSMP=17,11,0,246" ) ;
strcpy( zwtemp,atcmgs ) ;
strcat( zwtemp,target ) ;
stringsendgsm( zwtemp ) ;
timer_0 = 200 ;
while( 1 )
{
a = readgsm( &b ) ;
if( a == 1 )
{
sendtest(b);
if( b == '>' )
break ;
}
if ( timer_0 == 0 )
break ;
}
if( timer_0 != 0 )
{
ls = strlen( senddata ) ;
senddata[ls++] = 0x1a ;
senddata[ls] = 0 ;
for( i=0;i<ls;i++ )
sendgsm( senddata[i] ) ;
while( 1 )
{
timer_0 = 1000 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
sendtest( b ) ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
{
gsmerr++ ;
return 0 ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
gsmerr = 0 ;
return 1 ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) && ( gsmproc[2] == 'R' ) && ( gsmproc[3] == 'O' ) && ( gsmproc[4] == 'R' ) )
{
return 0 ;
}
else if( ( gsmproc[0] == 'R' ) && ( gsmproc[1] == 'I' ) && ( gsmproc[2] == 'N' ) && ( gsmproc[3] == 'G' ) )
ProcessRing( ) ;
else if( ( gsmproc[0] == 'N' ) && ( gsmproc[1] == 'O' ) && ( gsmproc[2] == ' ' ) && ( gsmproc[3] == 'C' ) )
ProcessNoC( ) ;
}
}
}
void ProcessAlert( void )
{
/* 如果hand_alerm = HANDTIME,紧急报警 */
if( ( hand_alerm >= HANDTIME ) && ( hand_alm == 0 ) )
{
send_time = send_etime ;
sendstate = HALERT ;
hand_alm = 1 ;
count = 50 ;
timer_2 = 0 ;
// hsent = 0 ;
stop_state = WAKEUP ;
AddMout( view_code,"SOS!!!" ) ;
}
/* 如果alermed=100,报警器被触发,door_state=100,在点火 */
if( ( alermed == 100 )&&( fire_state == 100 )&&( !alm2 ) )
{
send_time = send_etime ;
sendstate = FIREALERT ;
alm2 = 1 ;
timer_2 = 0 ;
count = 10 ;
stop_state = WAKEUP ;
AddMout( view_code,"InValid Fired" ) ;
}
else if( alermed == 0 )
alm2 = 0 ;
/* 如果alermed=100,报警器被触发,door_state=100,门被打开 */
if( ( alermed == 100 )&&( door_state == 100 )&&( !alm3 ) )
{
send_time = send_etime ;
sendstate = DOORALERT ;
alm3 = 1 ;
timer_2 = 0 ;
count = 10 ;
stop_state = WAKEUP ;
AddMout( view_code,"InValid Open Door" ) ;
}
else if( alermed == 0 )
alm3 = 0 ;
/* 如果alermed=100,报警器被触发,换醒终端 */
if( ( alermed == 100 )&&( !alm7 ) )
{
stop_state = WAKEUP ;
stop_carm = 1 ;
lock_doorm = 1 ;
alm7 = 1 ;
if( ( !alm3 )&&( !alm2 ) )
AddMout( view_code,"Car Shock" ) ;
}
else if( alermed == 0 )
{
stop_carm = 0 ;
lock_doorm = 0 ;
alm7 = 0 ;
}
/* 如果remove_state=100,防拆开关触发 */
if( ( remove_state == 100 )&&( !alm4 ) )
{
send_time = send_etime ;
sendstate = REMOVEALERT ;
alm4 = 1 ;
timer_2 = 0 ;
count = 10 ;
stop_state = WAKEUP ;
}
else if( remove_state == 0 )
alm4 = 0 ;
/* 如果v12_state=100,电源故障 */
if( ( v12_state == 100 )&&( !alm5 ) )
{
send_time = send_etime ;
sendstate = POWERALERT ;
alm5 = 1 ;
timer_2 = 0 ;
count = 10 ;
stop_state = WAKEUP ;
}
else if( v12_state == 0 )
alm5 = 0 ;
/* 如果wire_state=100,紧急按钮故障 */
if( ( wire_state == 100 )&&( !alm6 ) )
{
send_time = send_etime ;
sendstate = WIREALERT ;
alm6 = 1 ;
timer_2 = 0 ;
count = 10 ;
stop_state = WAKEUP ;
AddMout( view_code,"SOS ERR" ) ;
}
else if( wire_state == 0 )
alm6 = 0 ;
alm = alm1 | alm2 | alm3 | alm4 | alm5 | alm6 ;
}
void ProcessListen( )
{
uchar xdata temp_set[200],listen_phone[30] ;
uchar i,a,b,len ;
uint n,c ;
if( at_talk || ( ( !hand_alm ) && ( !alm ) ) )
return ;
if( hand_alm )
Get_view( 'F',listen_phone ) ;
else
Get_view( 'Q',listen_phone ) ;
len = strlen( listen_phone ) ;
strcpy( temp_set,"ATDT" ) ;
/* if( len < 11 )
{
for( i=0;i<number_LAC;i++ )
if( MY[i].LAC==Nowlacn )
break ;
if( i!= number_LAC )
strcat( temp_set,MY[i].QH ) ;
else
strcat( temp_set,"020" ) ;
}*/
strcat( temp_set,listen_phone ) ;
strcat( temp_set,";" ) ;
stringsendgsm( temp_set ) ;
out_call = 1 ;
while(1)
{
timer_0 = 2500 ;
gsmp = 0;
while( timer_0 )
{ a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
if( IN2 == 0 )
sendtest( b );
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
{
out_call = 0 ;
return ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
out_call = 0 ;
autohand = 1 ;
at_talk = 1 ;
listen_alm = 1 ;
hand_alm = 0 ;
return ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -