📄 5112udp.c
字号:
#include <reg530.h>
#include <d-com.h>
#include <intrins.h>
void main( void )
{
unsigned char data i,k;
unsigned int data j;
unsigned char *p;
bit b;
TA=0xaa;
TA=0x55;
EWT=0;
init_cpu();
watchdog();
// init_watchdog(0x03);
clear_ram();
DSP_STAT=0;
DSP_LINK=0;
DSP_CALL=0;
DSP_SEND=0;
DSP_RCV=0;
RST_5112=1;
waitinit=1;
RST_5112=0;
settimer(13);
for ( i = 0 ; i < 24 ; i++ ) wait(150);
DSP_RCV=1;
for ( i = 0 ; i < 24 ; i++ ) wait(150);
DSP_SEND=1;
for ( i = 0 ; i < 24 ; i++ ) wait(150);
DSP_STAT=1;
for ( i = 0 ; i < 24 ; i++ ) wait(150);
DSP_LINK=1;
for ( i = 0 ; i < 24 ; i++ ) wait(150);
TA=0xaa;
TA=0x55;
EWT=1;
init_watchdog(0x00);
waitinit=0;
init_sys();
init_5112();
settimer(0);
issend_to_server=1;
settimer(10);
while(1)
{
j++;
if ( j > 2000)
{
watchdog();
j=0;
}
if ( request_ppp == 1 | run == 0 )
{
killtimer(3);
DSP_LINK=1;
DSP_CALL=1;
if ( run == 1 )
{
smsindex=0;
hangup();
DSP_RCV=1;
DSP_SEND=0;
for ( k = 0 ; k < 12 ; k++ )
{
wait(100);
wait(100);
wait(100);
wait(100);
DSP_RCV=~DSP_RCV;
DSP_SEND=~DSP_RCV;
}
DSP_RCV=1;
DSP_SEND=1;
if ( smsindex != 0 ) sm_prog();
}
b=0;
i=0;
while( !b )
{
b=call();
if ( b ) break;
i++;
if ( i >= 5 )
{
while(1)
{
}
}
if ( i > 1 )
{
//hangup();
gsm_poweroff();
RST_5112=1;
wait(100);
wait(100);
wait(100);
RST_5112=0;
for ( k = 0 ; k < 150 ; k++ ) wait(100);
reset_5112();
}
else
{
for ( k = 0 ; k < 60 ; k++ ) wait(100);
}
}
request_ppp=0;
run=1;
}
if ( ! timer3 ) settimer(3);
if ( request_reset )
{
hangup();
gsm_poweroff();
while(1)
{
;
}
}
if ( rcv_set == 1 )//save socket set
{
p=&sockset[0];
i=x_server_port;
x_write(i,p,2);//write server port
p=&sockset[2];
i=x_server_addr;
x_write(i,p,4);//write server port
if (( rcv_data0 == 0 ) & (send_com0_finish == 1 ))
{
sendsetack();
DSP_SEND=0;
settimer(11);
rcv_set=0;
killtimer(0);//display for set socket ok
b=DSP_CALL;
DSP_STAT=1;
DSP_LINK=1;
DSP_CALL=1;
DSP_SEND=1;
DSP_RCV=1;
wait(150);
wait(150);
DSP_STAT=0;
DSP_LINK=0;
DSP_CALL=0;
DSP_SEND=0;
DSP_RCV=0;
wait(150);
wait(150);
DSP_STAT=1;
DSP_LINK=1;
DSP_CALL=1;
DSP_SEND=1;
DSP_RCV=1;
DSP_CALL=b;
settimer(0);
}
}
if ( request_send_ack_to_server == 1 )
{
if (( rcv_data0 == 0 ) & (send_com0_finish == 1 ))
{
resetconnect();
sendack();
DSP_SEND=0;
settimer(11);
request_send_ack_to_server=0;
}
}
else
{
if ( request_send_data_to_server == 1)
{
timer10_reg=0;
if (( rcv_data0 == 0 ) & (send_com0_finish == 1 ))
{
resetconnect();
send_data();
request_send_data_to_server=0;
}
}
else
{
if ( request_send_chk_to_server == 1 )
{
if (( rcv_data0 == 0 ) & (send_com0_finish == 1 ))
{
resetconnect();
sendchk();
DSP_SEND=0;
settimer(11);
request_send_chk_to_server=0;
}
}
}
}
}
}
///////////////////////////////
//
//NAME: reset_5112
//DESCRIPTION: reset wavecom and 5112 for call fail
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void reset_5112(void)
{
TR2=0;
TH2=0xff; // ffb8 for 9600 ffdc for 19200 fff4 for 57600 for 22.1184MHz
TL2=0xb8;
RCAP2H=0xff;
RCAP2L=0xb8;
TR2=1;
init_5112();
}
///////////////////////////////
//
//NAME: gsm_poweroff
//DESCRIPTION: power off gsn
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void gsm_poweroff(void)
{
unsigned char i;
DSP_SEND=0;
DSP_RCV=0;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x39;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x03;
send_ctr_com0_buf[4]=0x7e;
send_data0=0;
send_ctr_com0_len=5;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
ack=0;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
sm=1;
send_ctr_com0_buf[0]='A';//send power off command to wavecom
send_ctr_com0_buf[1]='T';
send_ctr_com0_buf[2]='+';
send_ctr_com0_buf[3]='C';
send_ctr_com0_buf[4]='P';
send_ctr_com0_buf[5]='O';
send_ctr_com0_buf[6]='F';
send_ctr_com0_buf[7]=0x0d;
send_data0=0;
send_ctr_com0_len=8;
send_com0_cnt=0;
send_com0_finish=0;
rcv_cnt0=0;
send_buf0[2]=0;
send_buf0[3]=0;
TI=1;
while ( ! send_com0_finish )
{
;
}
send_com0_finish=0;
i=0;
while (1)
{
if ( ( send_buf0[2] == 'O' ) & ( send_buf0[3] == 'K' ) ) break;
else
{
wait(100);
i++;
if ( i > 150 ) break;
}
}
for ( i = 0 ; i < 10 ; i++ ) wait(100);
sm=0;
rcv_cnt0=0;
rcv_7d=0;
rcv_data0=0;
rcv_command=0;
com0tocom1=0;
rcv_data_len=0;
chk_add=0;
send_to_com1_addr=0;
request_send_ack_to_server=0;
rcv_chk_cnt=0;
rcv_to_send_com1_addr=0;
receive_5112=0;
DSP_SEND=1;
DSP_RCV=1;
}
///////////////////////////////
//
//NAME: sm_prog
//DESCRIPTION: short message program for set socket
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void sm_prog(void)
{
unsigned int addr, itemp;
unsigned char i,chtemp,ch;
unsigned char *p;
bit set,reset;
reset=0;
set=0;
sm=1;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x39;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x03;
send_ctr_com0_buf[4]=0x7e;
send_data0=0;
send_ctr_com0_len=5;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
ack=0;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
DSP_SEND=0;
DSP_RCV=0;
while( smsindex )
{
send_ctr_com0_buf[0]='A';//read short message
send_ctr_com0_buf[1]='T';
send_ctr_com0_buf[2]='+';
send_ctr_com0_buf[3]='C';
send_ctr_com0_buf[4]='M';
send_ctr_com0_buf[5]='G';
send_ctr_com0_buf[6]='R';
send_ctr_com0_buf[7]='=';
if ( smsindex > 9 )
{
ch=smsindex/10;
ch=ch+0x30;
send_ctr_com0_buf[8]=ch;
ch=smsindex-(smsindex/10)*10+0x30;
send_ctr_com0_buf[9]=ch;
chtemp=10;
}
else
{
send_ctr_com0_buf[8]=smsindex+0x30;
chtemp=9;
}
send_ctr_com0_buf[chtemp]=0x0d;
chtemp++;
send_data0=0;
send_ctr_com0_len=chtemp;
send_com0_cnt=0;
send_com0_finish=0;
rcv_cnt0=0;
TI=1;
while ( ! send_com0_finish )
{
;
}
wait(150);
wait(150);
wait(150);
for ( addr = 0 ; addr < (rcv_cnt0-6) ; addr++ )
{
if (( send_buf0[addr] == 'F') & ( send_buf0[addr+1] == 'F') & ( send_buf0[addr+2] == 'A') & ( send_buf0[addr+3] == 'A') & ( send_buf0[addr+4] == '5') & ( send_buf0[addr+5] == '5') )
{
itemp=addr+18;
if (( send_buf0[itemp] == '5') & ( send_buf0[itemp+1] == '5') & ( send_buf0[itemp+2] == 'A') & ( send_buf0[itemp+3] == 'A') & ( send_buf0[itemp+4] == 'F') & ( send_buf0[itemp+5] == 'F') )
{
addr=addr+6;
if (( send_buf0[addr] == 'R') & ( send_buf0[addr+1] == 'E') & ( send_buf0[addr+2] == 'S') & ( send_buf0[addr+3] == 'E') & ( send_buf0[addr+4] == 'T'))
{
reset=1;
}
else
{
for ( i = 0 ; i < 6 ; i++ )
{
chtemp=send_buf0[addr];
chtemp=chtemp & 0x0f;
ch=chtemp<<4;
addr++;
chtemp=send_buf0[addr];
chtemp=chtemp & 0x0f;
ch=chtemp | ch;
sockset[i]=ch;
addr++;
}
p=&sockset[0];
i=x_server_port;
x_write(i,p,2);//write server port
p=&sockset[2];
i=x_server_addr;
x_write(i,p,4);//write server port
set=1;
}
for ( i = smsindex ; i > 0 ; i -- ) //delete other all short messages
{
send_ctr_com0_buf[0]='A';//delete short message
send_ctr_com0_buf[1]='T';
send_ctr_com0_buf[2]='+';
send_ctr_com0_buf[3]='C';
send_ctr_com0_buf[4]='M';
send_ctr_com0_buf[5]='G';
send_ctr_com0_buf[6]='D';
send_ctr_com0_buf[7]='=';
if ( i > 9 )
{
ch=i/10;
ch=ch+0x30;
send_ctr_com0_buf[8]=ch;
ch=i-(i/10)*10+0x30;
send_ctr_com0_buf[9]=ch;
chtemp=10;
}
else
{
send_ctr_com0_buf[8]=i+0x30;
chtemp=9;
}
send_ctr_com0_buf[chtemp]=0x0d;
chtemp++;
send_data0=0;
send_ctr_com0_len=chtemp;
send_com0_cnt=0;
send_com0_finish=0;
rcv_cnt0=0;
TI=1;
while ( ! send_com0_finish )
{
;
}
wait(150);
wait(150);
DSP_SEND=1;
DSP_RCV=1;
wait(150);
wait(150);
DSP_SEND=0;
DSP_RCV=0;
wait(150);
wait(150);
wait(150);
}
while ( reset )
{
;
}
break;
}
}
}
if ( ! set )
{
send_ctr_com0_buf[0]='A';//delete short message
send_ctr_com0_buf[1]='T';
send_ctr_com0_buf[2]='+';
send_ctr_com0_buf[3]='C';
send_ctr_com0_buf[4]='M';
send_ctr_com0_buf[5]='G';
send_ctr_com0_buf[6]='D';
send_ctr_com0_buf[7]='=';
if ( smsindex > 9 )
{
ch=smsindex/10;
ch=ch+0x30;
send_ctr_com0_buf[8]=ch;
ch=smsindex-(smsindex/10)*10+0x30;
send_ctr_com0_buf[9]=ch;
chtemp=10;
}
else
{
send_ctr_com0_buf[8]=smsindex+0x30;
chtemp=9;
}
send_ctr_com0_buf[chtemp]=0x0d;
chtemp++;
send_data0=0;
send_ctr_com0_len=chtemp;
send_com0_cnt=0;
send_com0_finish=0;
rcv_cnt0=0;
TI=1;
while ( ! send_com0_finish )
{
;
}
wait(150);
wait(150);
DSP_SEND=1;
DSP_RCV=1;
wait(150);
wait(150);
DSP_SEND=0;
DSP_RCV=0;
wait(150);
wait(150);
wait(150);
smsindex--;
}
else
{
killtimer(0);//display for set socket ok
DSP_STAT=1;
DSP_LINK=1;
DSP_CALL=1;
DSP_SEND=1;
DSP_RCV=1;
wait(150);
wait(150);
DSP_STAT=0;
DSP_LINK=0;
DSP_CALL=0;
DSP_SEND=0;
DSP_RCV=0;
wait(150);
wait(150);
DSP_STAT=1;
DSP_LINK=1;
DSP_CALL=1;
DSP_SEND=1;
DSP_RCV=1;
settimer(0);
break;
}
}
send_ctr_com0_buf[0]='&';
send_ctr_com0_buf[1]='&';
send_ctr_com0_buf[2]='&';
send_data0=0;
send_ctr_com0_len=3;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
while ( ! send_com0_finish )
{
;
}
for ( i = 0 ; i < 15 ; i ++ ) wait(100);
sm=0;
rcv_cnt0=0;
rcv_7d=0;
rcv_data0=0;
rcv_command=0;
com0tocom1=0;
rcv_data_len=0;
chk_add=0;
send_to_com1_addr=0;
request_send_ack_to_server=0;
rcv_chk_cnt=0;
rcv_to_send_com1_addr=0;
receive_5112=0;
DSP_SEND=1;
DSP_RCV=1;
}
///////////////////////////////
//
//NAME: conver receive chk to int
//DESCRIPTION: conver receive chk to int
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
unsigned int conver_chk(unsigned char *p)
{
unsigned int data dt,itemp;
unsigned char data addr;
if ( p[2] == 0x56 )
{
dt=p[3] ^ 0x20;
addr=1;
}
else
{
dt=p[3];
addr=2;
}
addr--;
if ( p[addr]==0x56)
{
itemp=p[addr+1] ^ 0x20;
itemp=itemp<<8;
dt=dt+itemp;
}
else
{
itemp=p[addr+1];
itemp=itemp<<8;
dt=dt+itemp;
}
return(dt);
}
///////////////////////////////
//
//NAME: sendsetack
//DESCRIPTION: send set ack data to server
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void sendsetack(void)
{
unsigned char *p;
unsigned char addr,i;
unsigned int chk;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x35;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x11;
send_ctr_com0_buf[4]=0x55;
send_ctr_com0_buf[5]=0x00;
send_ctr_com0_buf[6]=0x00;
send_ctr_com0_buf[7]=0x05;
p=conver(eid);//conver eid
for ( i = 0 ; i < p[0] ; i++ ) send_ctr_com0_buf[8+i]=p[i+1];
addr=8+p[0];
chk=p[(p[0]+1)];
chk=chk<<8;
chk=chk+p[(p[0]+2)];
send_ctr_com0_buf[addr]=0x06;
chk=chk+6;
addr++;
p=conver(chk);//conver chk
for( i = 0 ; i < p[0] ; i++ )
{
send_ctr_com0_buf[addr]=p[i+1];
addr++;
}
send_ctr_com0_buf[addr]=0x55;
addr++;
send_ctr_com0_buf[addr]=0x7e;
addr++;
send_data0=0;
send_ctr_com0_len=addr;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
ack=0;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
}
///////////////////////////////
//
//NAME: sendack
//DESCRIPTION: send ack data to server
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void sendack(void)
{
unsigned char *p;
unsigned char addr,i;
unsigned int chk;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x35;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x11;
send_ctr_com0_buf[4]=0x55;
send_ctr_com0_buf[5]=0x00;
send_ctr_com0_buf[6]=0x00;
send_ctr_com0_buf[7]=0x05;
p=conver(eid);//conver eid
for ( i = 0 ; i < p[0] ; i++ ) send_ctr_com0_buf[8+i]=p[i+1];
addr=8+p[0];
chk=p[(p[0]+1)];
chk=chk<<8;
chk=chk+p[(p[0]+2)];
send_ctr_com0_buf[addr]=0x04;
chk=chk+4;
addr++;
p=conver(chk);//conver chk
for( i = 0 ; i < p[0] ; i++ )
{
send_ctr_com0_buf[addr]=p[i+1];
addr++;
}
send_ctr_com0_buf[addr]=0x55;
addr++;
send_ctr_com0_buf[addr]=0x7e;
addr++;
send_data0=0;
send_ctr_com0_len=addr;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
ack=0;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
}
///////////////////////////////
//
//NAME: sendchk
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -