📄 5112udp.c
字号:
//DESCRIPTION: send link test data
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void sendchk(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]=0x01;
chk++;
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: resetconnect
//DESCRIPTION: close socket and re-set socket set
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void resetconnect(void)
{
// unsigned char temp;
// unsigned char *p;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x31;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x04;
send_ctr_com0_buf[4]=0x0c;
send_ctr_com0_buf[5]=0x7e;
send_data0=0;
send_ctr_com0_len=6;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
ack=0;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x33;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x0b;
send_ctr_com0_buf[4]=0x1f;//my port = 8000
send_ctr_com0_buf[5]=0x40;
send_ctr_com0_buf[6]=sockset[0];
send_ctr_com0_buf[7]=sockset[1];
send_ctr_com0_buf[8]=sockset[2];
send_ctr_com0_buf[9]=sockset[3];
send_ctr_com0_buf[10]=sockset[4];
send_ctr_com0_buf[11]=sockset[5];
send_ctr_com0_buf[12]=0x7e;
ack=0;
send_data0=0;
send_ctr_com0_len=13;
send_com0_cnt=0;
send_com0_finish=0;
TI=1; //set socket
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
}
///////////////////////////////
//
//NAME: conver
//DESCRIPTION: conver chk or send id or eid from unsigned int to send format
//CALL:
//INPUT:
//OUTPUT:*p[0]=data len,p[1~len]=data,p[len+1,+2]=add
//
///////////////////////////////
unsigned char * conver(unsigned int dt)
{
unsigned char *p;
unsigned char data convbuf[9];
unsigned char data ch,addr,s55;
unsigned int chk;
ch=(unsigned char )(dt & 0xff);
s55=0;
chk=0;
if (( ch == 0x55 )|( ch == 0x56 ))
{
convbuf[5]=0x56;
chk=0x56;
convbuf[6]=ch ^ 0x20;
chk=chk+convbuf[6];
addr=4;
s55++;
}
else
{ chk=ch;
if (( ch == 0x7d )|( ch == 0x7e ))
{
convbuf[5]=0x7d;
convbuf[6]=ch ^ 0x20;
addr=4;
}
else
{
convbuf[6]=ch;
addr=5;
}
}
ch=(unsigned char )(dt>>8);
addr--;
if (( ch == 0x55 )|( ch == 0x56 ))
{
convbuf[addr]=0x56;
chk=chk+0x56;
convbuf[addr+1]=ch ^ 0x20;
chk=chk+convbuf[addr+1];
s55++;
}
else
{ chk=chk+ch;
if (( ch == 0x7d )|( ch == 0x7e ))
{
convbuf[addr]=0x7d;
convbuf[addr+1]=ch ^ 0x20;
}
else
{
addr++;
convbuf[addr]=ch;
}
}
addr--;
ch=2-s55;
for( s55 = 0 ; s55 < ch ; s55++ )
{
convbuf[addr]=0;
addr--;
}
convbuf[8]=chk & 0xff;
chk=chk>>8;
convbuf[7]=chk & 0xff;
convbuf[addr]=6-addr;
p=&convbuf[addr];
return(p);
}
///////////////////////////////
//
//NAME: hangup
//DESCRIPTION: break internet
//CALL:
//INPUT:
//OUTPUT:
//
///////////////////////////////
void hangup(void)
{
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x31;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x04;
send_ctr_com0_buf[4]=0x10;
send_ctr_com0_buf[5]=0x7e;
send_data0=0;
send_ctr_com0_len=6;
send_com0_finish=0;
ack=0;
send_com0_cnt=0;
TI=1;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
phy_err=0;
settimer(12);
DSP_RCV=1;
DSP_SEND=0;
while( ! phy_err )
{
wait(100);
wait(100);
DSP_RCV=~DSP_RCV;
DSP_SEND=~DSP_RCV;
}
DSP_RCV=1;
DSP_SEND=1;
phy_err=0;
killtimer(12);
}
///////////////////////////////
//
//NAME: call
//DESCRIPTION: call isp num
//CALL:
//INPUT:
//OUTPUT:call ok =1; call error =0;
//
///////////////////////////////
bit call(void)
{
unsigned char recall,i;
settimer(2);
run=0;
recall=0;
ack=0;
while(1)
{
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x31;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x04;
send_ctr_com0_buf[4]=0x01;
send_ctr_com0_buf[5]=0x7e;
send_data0=0;
send_ctr_com0_len=6;
send_com0_finish=0;
ack=0;
ppp_err=0;
ppp_ok=0;
send_com0_cnt=0;
TI=1;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
while (!( ppp_ok | ppp_err ))
{
if ( ! timer7 ) settimer(7);
wait(150);
}
killtimer(7);
if ( ppp_ok )
{
killtimer(2);
DSP_CALL=0;
ppp_err=0;
ppp_ok=0;
return(1);
}
else
{
recall++;
if ( recall > 1 )
{
killtimer(2);
DSP_CALL=1;
ppp_err=0;
ppp_ok=0;
return (0);
}
else
{
for ( i = 0 ; i < 120 ; i++ ) wait(100);
}
}
}
}
///////////////////////////////
//
//NAME: send_data
//DESCRIPTION: send data to equ from modem
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void send_data(void)
{
unsigned int data len,itemp,chk;
unsigned char data ch,addr;
unsigned char *p;
if ( com1_rcv_len != 0 )
{
DSP_SEND=0;
settimer(5);
ES1=0;
ES0=0;
com0_send_addr=com1_rcv_addr_hand;
com0_send_len=com1_rcv_len;
chk=rcv_equ_chk;
if ( com0_send_len > 512 )
{
com0_send_len=512;
com1_rcv_len= com1_rcv_len-512;
com1_rcv_addr_hand=com1_rcv_addr_hand+512;
send_7d_cnt=0;
if ( rcv_7d_cnt != 0 )
{
for ( len = 0 ; len < 512 ; len++ )
{ itemp=len+com0_send_addr;
if ( itemp > (SEND_BUF_MAX-1) ) itemp=itemp-SEND_BUF_MAX;
if ( send_buf0[itemp] == 0x7d ) send_7d_cnt++;
if ( send_7d_cnt == rcv_7d_cnt )break;
}
rcv_7d_cnt= rcv_7d_cnt-send_7d_cnt;
itemp=com0_send_addr+511;
if ( send_buf0[itemp] == 0x7d )
{
com0_send_len--;
com1_rcv_len++;
com1_rcv_addr_hand--;
rcv_7d_cnt++;
send_7d_cnt--;
}
}
}
else
{
com1_rcv_addr_hand=com1_rcv_addr_hand+com1_rcv_len;
send_7d_cnt=rcv_7d_cnt;
com1_rcv_len=0;
rcv_7d_cnt=0;
rcv_equ_chk=0;
}
send_com0_cnt=0;
if ( com1_rcv_addr_hand > (SEND_BUF_MAX-1) ) com1_rcv_addr_hand=com1_rcv_addr_hand-SEND_BUF_MAX;
ES1=1;
ES0=1;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x35;
len=com0_send_len-send_7d_cnt+21;//5112 len
itemp=len & 0xff00;
itemp=itemp>>8;
send_ctr_com0_buf[2]=(unsigned char)itemp;
itemp=len & 0xff;
ch=( unsigned char )itemp;
if (( ch == 0x7d ) | ( ch == 0x7e ))
{
send_ctr_com0_buf[3]=0x7d;
send_ctr_com0_buf[4]=ch ^ 0x20;
addr=5;
}
else
{
send_ctr_com0_buf[3]=ch;
addr=4;
}
send_ctr_com0_buf[addr]=0x55;
addr++;
len=len-12;//send data len
itemp=len & 0xff;
ch=(unsigned char)itemp;
if (( ch == 0x55 ) | ( ch == 0x56 ))
{
itemp=len & 0xff00;
itemp=itemp>>8;
ch=(unsigned char)itemp;
send_ctr_com0_buf[addr]=ch;
addr++;
send_ctr_com0_buf[addr]=0x56;
addr++;
itemp=len & 0xff;
ch=(unsigned char)itemp ^ 0x20;
send_ctr_com0_buf[addr]=ch;
addr++;
}
else
{
if (( ch == 0x7d ) | ( ch == 0x7e ))
{
send_ctr_com0_buf[addr]=0x00;
addr++;
itemp=len & 0xff00;
itemp=itemp>>8;
ch=(unsigned char)itemp;
send_ctr_com0_buf[addr]=ch;
addr++;
send_ctr_com0_buf[addr]=0x7d;
addr++;
itemp=len & 0xff;
ch=(unsigned char)itemp ;
ch=ch ^ 0x20;
send_ctr_com0_buf[addr]=ch;
addr++;
}
else
{
send_ctr_com0_buf[addr]=0x00;
addr++;
itemp=len & 0xff00;
itemp=itemp>>8;
ch=(unsigned char)itemp;
send_ctr_com0_buf[addr]=ch;
addr++;
itemp=len & 0xff;
ch=(unsigned char)itemp ;
send_ctr_com0_buf[addr]=ch;
addr++;
}
}
p=conver(eid);
for ( ch = 0 ; ch < p[0] ; ch++ )
{
send_ctr_com0_buf[addr] = p[ch+1];//eid
addr++;
}
ch=p[0]+1;
itemp=p[ch];
itemp=itemp<<8;
ch++;
itemp=itemp+p[ch];
chk=chk+itemp;
send_ctr_com0_buf[addr]=0x00;//type:send data
addr++;
p=conver(sendid);
sendid++;
for ( ch = 0 ; ch < p[0] ; ch++ )
{
send_ctr_com0_buf[addr] = p[ch+1];//send id
addr++;
}
ch=p[0]+1;
itemp=p[ch];
itemp=itemp<<8;
ch++;
chk=chk+itemp+p[ch];
send_ctr_com0_len=addr;
send_com0_finish=0;
send_data0=0;
send_com0_cnt=0;
TI=1;
while ( !send_com0_finish )
{
;
}
send_com0_finish=0;
send_data0=1;
send_com0_cnt=0;
TI=1;
while ( !send_com0_finish )
{
;
}
send_com0_finish=0;
addr=0;
p=conver(chk);
for ( ch = 0 ; ch < p[0] ; ch++ )
{
send_ctr_com0_buf[addr] = p[ch+1];//send id
addr++;
}
send_ctr_com0_buf[addr]=0x55;
addr++;
send_ctr_com0_buf[addr]=0x7e;
addr++;
send_ctr_com0_len=addr;
send_data0=0;
ack=0;
send_com0_cnt=0;
send_com0_finish=0;
TI=1;
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
}
}
///////////////////////////////
//
//NAME: init_5112
//DESCRIPTION: set e5112
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void init_5112(void)
{
unsigned char addr,i,len,temp;
unsigned char *p;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x2f;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x04;
send_ctr_com0_buf[4]=0x08;//fffd:115200 fffa:57600 ffee:19200 for 11.0592MHz
i=0xff; //ffb8 for 9600 ffdc for 19200 fff4 for 57600 for 22.1184MHz
addr=0xf4;
send_ctr_com0_buf[5]=0x7e;
send_data0=0;
send_ctr_com0_len=6;
send_com0_finish=0;
ack=0;
send_com0_cnt=0;
TI=1; //set 5112 to cpu
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
TR2=0;
TH2=i; // set cpu baud :cpu to 5112
TL2=addr;
RCAP2H=i;
RCAP2L=addr;
TR2=1;
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x32;
send_ctr_com0_buf[2]=0x00;
addr=5;
temp=x_isp_num;
p=x_read(temp,16);
for ( i = 0 ; i < 16 ; i++ )
{
if ( p[i] != 0x00 ) send_ctr_com0_buf[i+addr]=p[i];
else break;
}
send_ctr_com0_buf[4]=i;
addr=addr+i;
len=addr;
addr++;
temp=x_isp_name;
p=x_read(temp,16);
for ( i = 0 ; i < 16 ; i++ )
{
if ( p[i] == 0x00) break;
else send_ctr_com0_buf[addr+i]=p[i];
}
send_ctr_com0_buf[len]=i;
addr=addr+i;
len=addr;
addr++;
temp=x_isp_password;
p=x_read(temp,16);
for ( i = 0 ; i < 16 ; i++ )
{
if ( p[i] == 0x00 ) break;
else send_ctr_com0_buf[addr+i]=p[i];
}
send_ctr_com0_buf[len]=i;
send_ctr_com0_buf[addr+i]=0x7e;
send_ctr_com0_buf[3]=addr+i-1;
ack=0;
send_data0=0;
send_ctr_com0_len=send_ctr_com0_buf[3]+2;
send_com0_cnt=0;
send_com0_finish=0;
TI=1; //set 5112 isp set
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
watchdog();
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x33;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x0b;
temp=x_my_port;
p=x_read(temp,2);
send_ctr_com0_buf[4]=p[0];
send_ctr_com0_buf[5]=p[1];
temp=x_server_port;
p=x_read(temp,2);
send_ctr_com0_buf[6]=p[0];
send_ctr_com0_buf[7]=p[1];
temp=x_server_addr;
p=x_read(temp,4);
send_ctr_com0_buf[8]=p[0];
send_ctr_com0_buf[9]=p[1];
send_ctr_com0_buf[10]=p[2];
send_ctr_com0_buf[11]=p[3];
send_ctr_com0_buf[12]=0x7e;
ack=0;
send_data0=0;
send_ctr_com0_len=13;
send_com0_cnt=0;
send_com0_finish=0;
TI=1; //set socket
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
send_ctr_com0_buf[0]=0x7e;
send_ctr_com0_buf[1]=0x30;
send_ctr_com0_buf[2]=0x00;
send_ctr_com0_buf[3]=0x04;
send_ctr_com0_buf[4]=0x09;
send_ctr_com0_buf[5]=0x7e;
ack=0;
send_data0=0;
send_ctr_com0_len=6;
send_com0_cnt=0;
send_com0_finish=0;
TI=1; //set modem baud
settimer(9);
while ( !ack )
{
;
}
killtimer(9);
ack=0;
}
///////////////////////////////
//
//NAME: settimer
//DESCRIPTION: set timer
//CALL:
//INPUT:ch
//OUTPUT:NONE
//
///////////////////////////////
void settimer( unsigned char ch)
{
switch ( ch )
{
case 0:
timer0=1;
timer0_reg=0;
break;
case 1:
timer1=1;
timer1_reg=0;
break;
case 2:
timer2=1;
timer2_reg=0;
break;
case 3:
timer3=1;
timer3_reg=0;
break;
case 4:
timer4=1;
timer4_reg=0;
break;
case 5:
timer5=1;
timer5_reg=0;
break;
case 6:
timer6=1;
timer6_reg=0;
break;
case 7:
timer7=1;
timer7_reg=0;
break;
case 8:
timer8=1;
timer8_reg=0;
break;
case 9:
timer9=1;
timer9_reg=0;
break;
case 10:
timer10=1;
timer10_reg=0;
break;
case 11:
timer11=1;
timer11_reg=0;
break;
case 12:
timer12=1;
timer12_reg=0;
break;
case 13:
timer13=1;
timer13_reg=0;
break;
default:
break;
}
}
///////////////////////////////
//
//NAME: killtimer
//DESCRIPTION: set timer
//CALL:
//INPUT:ch
//OUTPUT:NONE
//
///////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -