📄 acomm.c
字号:
out_call = 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( ) ;
return ;
}
}
}
void I_clock(uchar tem)
{
//watchdog( );
SI=(bit)(tem&0x80);
SCL=1;
sample=SO;
SCL=0;
}
uchar ReadStatus()
{
uchar i_data=0x05;
uchar i;
uchar tem;
P10Enable=0;
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
o2=0;
for(i=0;i<8;i++)
{
o2=o2<<1;I_clock(0xff);
o2=(uchar)(sample)|o2;
}
CS=1;
tem=o2;
return(o2);
P10Enable=1;
}
void EnableWrite( )
{
uchar i_data=0x06;
uchar i;
uchar tem;
while((ReadStatus( )&0x01)==0x01);
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
CS=1;
}
void DisableWrite( )
{
uchar i_data=0x04;
uchar i;
uchar tem;
while((ReadStatus( )&0x01)==0x01);
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
CS=1;
}
void WriteStatus(uchar set )
{
uchar i_data=0x01;
uchar i;
P10Enable=0;
while(ReadStatus( )&0x01==0x01);
EnableWrite( );
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
for(i=0;i<8;i++)
{
I_clock(set);
set=set<<1;
}
CS=1;
DisableWrite( );
P10Enable=1;
}
void ReadData(uint addr,uint lenth,uchar * arrd)
{
uchar i_data=0x03;
uchar i; uint j;
uchar * p;
while(ReadStatus( )&0x01==0x01);
p=(uchar *)(& addr); /*p[0] is high byte of addr*/
if(p[0]&0x01==0x01) /* just if the high half sector,bit3=1 */
i_data=i_data|0x08;
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
i_data=p[1];
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
for(j=0;j<lenth;j++)
{
o2=0;
for(i=0;i<8;i++)
{
o2=o2<<1;
I_clock(0xff);
o2=(uchar)(sample)|o2;
}
arrd[j]=o2;
//sendtest(o2);
}
CS=1;
}
void WritePageData(uint addr,uchar * arr )
{
uchar i_data=0x02;
uchar i; uchar j;
uchar tem;
uchar * p;
p=(uchar *)(& addr); /*p[0] is high byte of addr*/
if(p[0]&0x01==0x01) /* just if the high half sector,bit3=1 */
i_data=i_data|0x08;
if(p[1]&0x0f!=0){rtxd("not a page address,try again");return;}
while(ReadStatus( )&0x01==0x01);
EnableWrite( );
CS=0;
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
i_data=p[1];
for(i=0;i<8;i++)
{
I_clock(i_data );
i_data=i_data<<1;
}
for(j=0;j<16;j++)
{
tem=arr[j];
for(i=0;i<8;i++)
{
I_clock(tem);
tem=tem<<1;
}
//arr[j]=o2;
}
CS=1;
DisableWrite( );
}
void Set_view(uchar num,uchar * source)
{
uint addr;
CS=1;
P10Enable=0;
addr=strlen(source);
source[addr]=0;
addr=(uint)(((uint)num-0x40)<<4);
WritePageData(addr,source);
P10Enable=1;
}
uchar Get_view(uchar num,uchar * target)
{
uint addr;
CS=1;
P10Enable=0;
addr=(uint)(((uint)num-0x40)<<4);
ReadData(addr,16,target);
P10Enable=1;
}
void Rcv_answer( )
{
uchar a,b,c,coma[20],smsc[20],dest[20],sms[180],send[200] ;
uint i,j ;
while( 1 )
{
while( 1 )
{
a = readtest( &b ) ;
if( a )
{
testproc[testp] = b ;
if( testp < (TSTP-1) )
testp++ ;
if( b == 0x0a )
break ;
}
else
return ;
}
testp=0;
}
}
void ProcessDTMF( )
{
uchar a,b,c,coma[20],smsc[20],dest[20],sms[180],send[200] ;
uint i,j ;
while( 1 )
{
while( 1 )
{
a = readgps( &b ) ;
if( a )
{
gpsproc[gpsp] = b ;
if( gpsp < (GPSP-1) )
gpsp++ ;
if( b == '#' )
break ;
}
else
return ;
}
gpsproc[gpsp] = 0 ;
rtxd( gpsproc ) ;
if( ( gpsproc[0] == '0' )&&( gpsproc[1] == '4' )&&( autohand == 1 ) )
{ stop_car = 1 ;
SendDTMF( "22" ) ;
}
else if( ( gpsproc[0] == '0' )&&( gpsproc[1] == '5' )&&( autohand == 1 ) )
{ lock_door = 1 ;
SendDTMF( "22" ) ;
}
else if( ( gpsproc[0] == '0' )&&( gpsproc[1] == '8' )&&( autohand == 1 ) )
{ stop_car = 0 ;
SendDTMF( "22" ) ;
}
else if( ( gpsproc[0] == '0' )&&( gpsproc[1] == '9' )&&( autohand == 1 ) )
{ lock_door = 0 ;
SendDTMF( "22" ) ;
}
gpsp=0;
}
}
void Processtelephone( )
{
uchar xdata temp_set[400];
uchar i,a,b ;
uchar a1,b1 ;
uint n,c ;
uchar line1 ;
if( hasphone == 0 )
return ;
strcpy( temp_set,"ATDT" ) ;
strcat( temp_set,telephone ) ;
strcat( temp_set,";" ) ;
stringsendgsm( temp_set ) ;
out_call = 1 ;
while(1)
{ timer_0 = 2000 ;
gsmp = 0;
while( timer_0 )
{ a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
sendtest(b );
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
while( 1 )
{
a1 = readtel(&b1) ;
if( a1 )
{
telproc[telpp] = b1 ;
sendtest( b1 ) ;
if( telpp < (TELP-1) )
telpp++ ;
if( b1 == 0x0a )
{
line1 = 1 ;
break ;
}
}
else
{
line1 = 0 ;
break ;
}
}
if(line1==1)
{
if( ( telproc[0] == 'T' ) && ( telproc[1] == 'T' ) && ( telproc[2] == 'L') && ( telproc[3] == '8'))
{
if( at_talk == 1 )
stringsendgsm( "AT+CHUP" ) ;
else
stringsendgsm( "AT+CHLD=0" ) ;
at_talk = 0 ;
while(1)
{
timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
break ;
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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( ) ;
}
}
line1=0 ;
telpp=0 ;
l_tail = l_head ;
}
}
if( !timer_0 )
{
out_call = 0 ;
break ;
}
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
out_call = 0 ;
at_talk = 1 ;
if( needsms == 1 )
{ count = 20 ;
send_time = send_etime ;
timer_2 = 0 ;
}
break ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
{
out_call = 0 ;
break ;
}
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( ) ;
break ;
}
}
hasphone = 0 ;
}
void Rcv_Telecom(void)
{
uchar a,b ;
uint len ,len1, len2,i ,j;
uchar xdata dialno[50],dialat[50],seth[10],setno[50],ch ;
while( 1 )
{
while( 1 )
{
a = readtel(&b) ;
if( a )
{
telproc[telpp] = b ;
sendtest( b ) ;
if( telpp < (TELP-1) )
telpp++ ;
if( b == 0x0a )
break ;
}
else
return ;
}
if( ( telproc[0] == 'T' ) && ( telproc[1] == 'T' ) && ( telproc[2] == 'L') && ( telproc[3] == '5'))
{
if( in_call == 1 )
{
stringsendgsm( "ATA" ) ;
while(1)
{ timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{ a = readgsm( &b ) ;
if( a )
{ gsmproc[gsmp] = b ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{
at_talk = 1 ;
break ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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( ) ;
}
in_call = 0 ;
}
}
else if( ( telproc[0] == 'T' ) && ( telproc[1] == 'T' ) && ( telproc[2] == 'L') && ( telproc[3] == '3') )
{
Get_view( telproc[4]+0x17,dialno ) ;
strcpy( dialat,"TTL6" ) ;
strcat( dialat,dialno ) ;
sendtelstr( dialat ) ;
}
else if( ( telproc[0] == 'T' ) && ( telproc[1] == 'T' ) && ( telproc[2] == 'L') && ( telproc[3] == '8') )
{
if( at_talk == 1 )
stringsendgsm( "AT+CHUP" ) ;
else
stringsendgsm( "AT+CHLD=0" ) ;
at_talk = 0 ;
listen_alm = 0 ;
while(1)
{
timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{
a = readgsm( &b ) ;
if( a )
{
gsmproc[gsmp] = b ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
break ;
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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( ) ;
}
}
else if( ( telproc[0] == 'T' ) && ( telproc[1] == 'T' ) && ( telproc[2] == 'L') && ( telproc[3] == '9') )
{
if( in_call == 1 )
{
stringsendgsm( "ATA" ) ;
while(1)
{ timer_0 = 100 ;
gsmp = 0;
while( timer_0 )
{ a = readgsm( &b ) ;
if( a )
{ gsmproc[gsmp] = b ;
if( gsmp < (GSMP-1) )
gsmp++ ;
if( b == 0x0a )
break ;
}
}
if( !timer_0 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
{ at_talk = 1 ;
break ;
}
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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( ) ;
}
in_call = 0 ;
}
else if( at_talk == 0 )
{
for ( i = 0 ; i < telpp-6 ; i++ )
dialno[ i ] = telproc[ i + 4 ] ;
dialno[i] = 0 ;
strcpy( telephone,dialno ) ;
rtxd( telephone ) ;
if( telephone[0] == '*' )
{
hasphone = 0 ;
if( ( telephone[1] >='0' )&&( telephone[1] <='9' )&&( telephone[2] >='0' )&&( telephone[2] <='9' ) )
{
substr( dialno,seth,1,2 ) ;
ch = atoi( seth ) + 'F' ;
substr( dialno,setno,4,strlen( dialno ) -4 ) ;
Set_view( ch,setno ) ;
sendtelstr( "TTL1" ) ;
}
else if ( telephone[1] == '*' )
{
SetState[2] = '1' ;
Set_view( 'Z',SetState ) ;
sendtelstr( "TTL1" ) ;
}
}
else if( telephone[0] == '#' )
{
hasphone = 0 ;
if( ( telephone[1] >='0' )&&( telephone[1] <='9' )&&( telephone[2] >='0' )&&( telephone[2] <='9' ) )
{
substr( dialno,seth,1,2 ) ;
ch = atoi( seth ) + 'F' ;
Get_view( ch,setno ) ;
strcpy( dialno,"TTL6" ) ;
strcat( dialno,setno ) ;
sendtelstr( dialno ) ;
}
else if ( telephone[1] == '#' )
{
SetState[2] = '0' ;
Set_view( 'Z',SetState ) ;
sendtelstr( "TTL1" ) ;
}
}
else
hasphone = 1 ;
}
}
else
{
if( at_talk == 1 )
{
strcpy( dialno,"AT+VTS=\"" ) ;
dialno[8] = telproc[0] ;
dialno[9] = 0 ;
strcat( dialno,"\",1" ) ;
stringsendgsm( dialno ) ;
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 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
break ;
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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( ) ;
}
}
}
telpp=0 ;
}
}
void SendDTMF( uchar *s )
{
uint i,len ;
uchar dialno[50],a,b ;
len = strlen( s ) ;
if( len > 29 )
return ;
Setgsm( "AT+VTD=1" ) ;
// for( i=0;i<len;i++ )
{
strcpy( dialno,"AT+VTS=\"" ) ;
strcat( dialno,s ) ;
strcat( dialno,"\"" ) ;
stringsendgsm( dialno ) ;
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 )
break ;
else if( ( gsmproc[0] == 'O' ) && ( gsmproc[1] == 'K' ) )
break ;
else if( ( gsmproc[0] == 'E' ) && ( gsmproc[1] == 'R' ) )
break ;
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 ProcessCommand( void )
{
if( ( stop_car == 1 )||( stop_carm == 1 )||( stop_carp == 1 ) )
{
P16 = 0 ;
}
else
P16 = 1 ;
if( ( lock_door == 1 )||( lock_doorm == 1 )||( lock_doorp == 1 ) )
{
P17 = 0 ;
}
else
P17 = 1 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -