📄 ir.c
字号:
//else if (__wcurr1 == __wcurr2) __wcurr = __wcurr1;
NIC_CR1 = CR_Stop|CR_Page0;//return to page 0
NIC_CR = CR_Start;
while (__wcurr != NextPacket)
{
point = NextPacket*256;
for (i=0;i<240;i++)
{
NIC_RECV_BUFFER[i] = *point;
point ++;
}
/*for (i=0;i<4;i++)
{
NIC_RECV_BUFFER[i] = *point;
point ++;
}
PacketLength = NIC_RECV_BUFFER[2] + NIC_RECV_BUFFER[3]*256;
for (i=4;i<(PacketLength+4);i++)
{
NIC_RECV_BUFFER[i] = *point;
point ++;
if (point == RPSTOP*256) point = RPSTART*256;
}*/
/*
NextPacket = NIC_RECV_BUFFER[1];
if (NextPacket == RPSTART) NIC_BNRY = RPSTOP-1;
else NIC_BNRY = NextPacket-1;
*/
if ( (NIC_RECV_BUFFER[4] == 0xFF)
&&(NIC_RECV_BUFFER[5] == 0xFF)
&&(NIC_RECV_BUFFER[6] == 0xFF)
&&(NIC_RECV_BUFFER[7] == 0xFF)
&&(NIC_RECV_BUFFER[8] == 0xFF)
&&(NIC_RECV_BUFFER[9] == 0xFF)
&&(NIC_RECV_BUFFER[16] == 0x08)
&&(NIC_RECV_BUFFER[17] == 0x06) )
{
//ARP
if ( (NIC_RECV_BUFFER[42] == IPADDRESS[0])&&
(NIC_RECV_BUFFER[43] == IPADDRESS[1])&&
(NIC_RECV_BUFFER[44] == IPADDRESS[2])&&
(NIC_RECV_BUFFER[45] == IPADDRESS[3])&&
(NIC_RECV_BUFFER[24] == 0x00 )&&
(NIC_RECV_BUFFER[25] == 0x01 ) )
{
if ( (NIC_RECV_BUFFER[32] == IPADDRESS[0])&&
(NIC_RECV_BUFFER[33] == IPADDRESS[1])&&
(NIC_RECV_BUFFER[34] == IPADDRESS[2])&&
(NIC_RECV_BUFFER[35] == IPADDRESS[3]) )
{
// XmitPoint = __wxmitcurr*XMIT_NUMBER;
// __wxmitcurr ++;
// if (__wxmitcurr > XMIT_STOP) __wxmitcurr = XMIT_START;
// for (i=0;i<6;i++)
// NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[10+i];
//ARPCOL();
NIC_TPSTART = TPSTART;
//destination address
NIC_XMIT_BUFFER[0] = NIC_RECV_BUFFER[10];
NIC_XMIT_BUFFER[1] = NIC_RECV_BUFFER[11];
NIC_XMIT_BUFFER[2] = NIC_RECV_BUFFER[12];
NIC_XMIT_BUFFER[3] = NIC_RECV_BUFFER[13];
NIC_XMIT_BUFFER[4] = NIC_RECV_BUFFER[14];
NIC_XMIT_BUFFER[5] = NIC_RECV_BUFFER[15];
}
else
{
//XmitPoint = __wxmitcurr*XMIT_NUMBER;
//__wxmitcurr ++;
//if (__wxmitcurr > XMIT_STOP) __wxmitcurr = XMIT_START;
//for (i=0;i<6;i++)
// NIC_XMIT_RING[XmitPoint+i] = 0xFF;
//ARPACK();
NIC_TPSTART = TPSTART;
//destination address
NIC_XMIT_BUFFER[0] = 0xFF;
NIC_XMIT_BUFFER[1] = 0xFF;
NIC_XMIT_BUFFER[2] = 0xFF;
NIC_XMIT_BUFFER[3] = 0xFF;
NIC_XMIT_BUFFER[4] = 0xFF;
NIC_XMIT_BUFFER[5] = 0xFF;
}
//for (i=6;i<12;i++)
// NIC_XMIT_RING[XmitPoint+i] = MACADDRESS[i-6];
//source address
NIC_XMIT_BUFFER[6] = MACADDRESS[0];
NIC_XMIT_BUFFER[7] = MACADDRESS[1];
NIC_XMIT_BUFFER[8] = MACADDRESS[2];
NIC_XMIT_BUFFER[9] = MACADDRESS[3];
NIC_XMIT_BUFFER[10] = MACADDRESS[4];
NIC_XMIT_BUFFER[11] = MACADDRESS[5];
//for (i=12;i<20;i++)
// NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i+4];
//port
NIC_XMIT_BUFFER[12] = NIC_RECV_BUFFER[16];
NIC_XMIT_BUFFER[13] = NIC_RECV_BUFFER[17];
NIC_XMIT_BUFFER[14] = NIC_RECV_BUFFER[18];
NIC_XMIT_BUFFER[15] = NIC_RECV_BUFFER[19];
NIC_XMIT_BUFFER[16] = NIC_RECV_BUFFER[20];
NIC_XMIT_BUFFER[17] = NIC_RECV_BUFFER[21];
NIC_XMIT_BUFFER[18] = NIC_RECV_BUFFER[22];
NIC_XMIT_BUFFER[19] = NIC_RECV_BUFFER[23];
//NIC_XMIT_RING[XmitPoint+20] = 0x00;
//NIC_XMIT_RING[XmitPoint+21] = 0x02;
NIC_XMIT_BUFFER[20] = 0x00;
NIC_XMIT_BUFFER[21] = 0x02;
//for (i=22;i<28;i++)
// NIC_XMIT_RING[XmitPoint+i] = MACADDRESS[i-22];
//source MAC address
NIC_XMIT_BUFFER[22] = MACADDRESS[0];
NIC_XMIT_BUFFER[23] = MACADDRESS[1];
NIC_XMIT_BUFFER[24] = MACADDRESS[2];
NIC_XMIT_BUFFER[25] = MACADDRESS[3];
NIC_XMIT_BUFFER[26] = MACADDRESS[4];
NIC_XMIT_BUFFER[27] = MACADDRESS[5];
//for (i=28;i<32;i++)
// NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i+14];
//source IP address
NIC_XMIT_BUFFER[28] = NIC_RECV_BUFFER[42];
NIC_XMIT_BUFFER[29] = NIC_RECV_BUFFER[43];
NIC_XMIT_BUFFER[30] = NIC_RECV_BUFFER[44];
NIC_XMIT_BUFFER[31] = NIC_RECV_BUFFER[45];
//for (i=32;i<42;i++)
// NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i-6];
//destination MAC and IP address
NIC_XMIT_BUFFER[32] = NIC_RECV_BUFFER[26];
NIC_XMIT_BUFFER[33] = NIC_RECV_BUFFER[27];
NIC_XMIT_BUFFER[34] = NIC_RECV_BUFFER[28];
NIC_XMIT_BUFFER[35] = NIC_RECV_BUFFER[29];
NIC_XMIT_BUFFER[36] = NIC_RECV_BUFFER[30];
NIC_XMIT_BUFFER[37] = NIC_RECV_BUFFER[31];
NIC_XMIT_BUFFER[38] = NIC_RECV_BUFFER[32];
NIC_XMIT_BUFFER[39] = NIC_RECV_BUFFER[33];
NIC_XMIT_BUFFER[40] = NIC_RECV_BUFFER[34];
NIC_XMIT_BUFFER[41] = NIC_RECV_BUFFER[35];
//start xmit
NIC_TBCNT0 = 0x00;
NIC_TBCNT1 = 0x01;
NIC_CR = CR_Start|CR_Xmit;
//CHECK_XMIT();
}
}
else if ( (NIC_RECV_BUFFER[4] == MACADDRESS[0]) //MAC ADDRESS IP DATAGRAM
&&(NIC_RECV_BUFFER[5] == MACADDRESS[1])
&&(NIC_RECV_BUFFER[6] == MACADDRESS[2])
&&(NIC_RECV_BUFFER[7] == MACADDRESS[3])
&&(NIC_RECV_BUFFER[8] == MACADDRESS[4])
&&(NIC_RECV_BUFFER[9] == MACADDRESS[5])
&&(NIC_RECV_BUFFER[16] == 0x08)
&&(NIC_RECV_BUFFER[17] == 0x00) )
{
if ( (NIC_RECV_BUFFER[34] == IPADDRESS[0])&&
(NIC_RECV_BUFFER[35] == IPADDRESS[1])&&
(NIC_RECV_BUFFER[36] == IPADDRESS[2])&&
(NIC_RECV_BUFFER[37] == IPADDRESS[3])&&
(NIC_RECV_BUFFER[PC_SENCITY] == 'S')&&
(NIC_RECV_BUFFER[PC_SENCITY+1] == 'E')&&
(NIC_RECV_BUFFER[PC_SENCITY+2] == 'N')&&
(NIC_RECV_BUFFER[PC_SENCITY+3] == 'C')&&
(NIC_RECV_BUFFER[PC_SENCITY+4] == 'I')&&
(NIC_RECV_BUFFER[PC_SENCITY+5] == 'T')&&
(NIC_RECV_BUFFER[PC_SENCITY+6] == 'Y') )
{
switch (NIC_RECV_BUFFER[PC_COMMAND])
{
case R_INIT:
if ( (NIC_RECV_BUFFER[10]!=PC_MACADDRESS[0])||
(NIC_RECV_BUFFER[11]!=PC_MACADDRESS[1])||
(NIC_RECV_BUFFER[12]!=PC_MACADDRESS[2])||
(NIC_RECV_BUFFER[13]!=PC_MACADDRESS[3])||
(NIC_RECV_BUFFER[14]!=PC_MACADDRESS[4])||
(NIC_RECV_BUFFER[15]!=PC_MACADDRESS[5])||
(NIC_RECV_BUFFER[30]!=PC_IPADDRESS[0])||
(NIC_RECV_BUFFER[31]!=PC_IPADDRESS[1])||
(NIC_RECV_BUFFER[32]!=PC_IPADDRESS[2])||
(NIC_RECV_BUFFER[33]!=PC_IPADDRESS[3]) )
{
PC_MACADDRESS[0] = NIC_RECV_BUFFER[10];
PC_MACADDRESS[1] = NIC_RECV_BUFFER[11];
PC_MACADDRESS[2] = NIC_RECV_BUFFER[12];
PC_MACADDRESS[3] = NIC_RECV_BUFFER[13];
PC_MACADDRESS[4] = NIC_RECV_BUFFER[14];
PC_MACADDRESS[5] = NIC_RECV_BUFFER[15];
PC_IPADDRESS[0] = NIC_RECV_BUFFER[30];
PC_IPADDRESS[1] = NIC_RECV_BUFFER[31];
PC_IPADDRESS[2] = NIC_RECV_BUFFER[32];
PC_IPADDRESS[3] = NIC_RECV_BUFFER[33];
CHECKSUM_UDP();
//__bwrite_pcipmac = TRUE;
}
//__wcommand = R_INIT;
UDP(R_INIT);
break;
case R_HELLO:
//__wcommand = R_HELLO;
UDP(R_HELLO);
break;
case R_READMETER:
//__wcommand = R_READMETER;
UDP(R_READMETER);
break;
case R_ALARM_ACK:
//__bsend = FALSE;
//ALARM_BUFFER[0] = 0x00;
//ALARM_BUFFER[1] = 0x00;
//ALARM_BUFFER[2] = 0x00;
//ALARM_BUFFER[3] = 0x00;
//__werror = NET_ERROR + 1;
break;
case R_CANCEL_ACK:
//__bsend = FALSE;
//__werror = NET_ERROR + 1;
break;
case R_CONTROL:
//CONTROL[0] = NIC_RECV_BUFFER[PC_COMMAND+32];
//CONTROL[1] = NIC_RECV_BUFFER[PC_COMMAND+33];
//CONTROL[2] = NIC_RECV_BUFFER[PC_COMMAND+34];
//CONTROL[3] = NIC_RECV_BUFFER[PC_COMMAND+35];
//#ifdef IO_CONTROL
//if (CONTROL[0]&0x01) __sbtxen = 0;
//else __sbtxen = 1;
//if (CONTROL[0]&0x02) __sbrx = 0;
//else __sbrx = 1;
//if (CONTROL[0]&0x04) __sbtx = 0;
//else __sbtx = 1;
//#endif
UDP(R_CONTROL);
break;
case R_MODIFY1:
//__wcommand = R_MODIFY1;
//METER0.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+1]*65536 + NIC_RECV_BUFFER[PC_COMMAND+2]*256 + NIC_RECV_BUFFER[PC_COMMAND+3];
//METER0.WRITE = 0xff;
UDP(R_MODIFY1);
break;
case R_MODIFY2:
//__wcommand = R_MODIFY2;
//METER1.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+4]*65536 + NIC_RECV_BUFFER[PC_COMMAND+5]*256 + NIC_RECV_BUFFER[PC_COMMAND+6];
//METER1.WRITE = 0xff;
UDP(R_MODIFY2);
break;
case R_MODIFY3:
//__wcommand = R_MODIFY3;
//METER2.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+7]*65536 + NIC_RECV_BUFFER[PC_COMMAND+8]*256 + NIC_RECV_BUFFER[PC_COMMAND+9];
//METER2.WRITE = 0xff;
UDP(R_MODIFY3);
break;
case R_MODIFY4:
//__wcommand = R_MODIFY4;
//METER3.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+10]*65536 + NIC_RECV_BUFFER[PC_COMMAND+11]*256 + NIC_RECV_BUFFER[PC_COMMAND+12];
//METER3.WRITE = 0xff;
UDP(R_MODIFY4);
break;
case R_MODIFY5:
//__wcommand = R_MODIFY5;
//METER4.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+13]*65536 + NIC_RECV_BUFFER[PC_COMMAND+14]*256 + NIC_RECV_BUFFER[PC_COMMAND+15];
//METER4.WRITE = 0xff;
UDP(R_MODIFY5);
break;
case R_MODIFY6:
//__wcommand = R_MODIFY6;
//METER5.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+16]*65536 + NIC_RECV_BUFFER[PC_COMMAND+17]*256 + NIC_RECV_BUFFER[PC_COMMAND+18];
//METER5.WRITE = 0xff;
UDP(R_MODIFY6);
break;
case R_MODIFY7:
//__wcommand = R_MODIFY7;
UDP(R_MODIFY7);
break;
case R_MODIFY8:
//__wcommand = R_MODIFY8;
UDP(R_MODIFY8);
break;
case R_W_METER_NUM:
//__wcommand = R_W_METER_NUM;
//__wmeterquantity = NIC_RECV_BUFFER[PC_COMMAND+1];
//METER0.TYPE = NIC_RECV_BUFFER[PC_COMMAND+2];
//METER1.TYPE = NIC_RECV_BUFFER[PC_COMMAND+3];
//METER2.TYPE = NIC_RECV_BUFFER[PC_COMMAND+4];
//METER3.TYPE = NIC_RECV_BUFFER[PC_COMMAND+5];
//METER4.TYPE = NIC_RECV_BUFFER[PC_COMMAND+6];
//METER5.TYPE = NIC_RECV_BUFFER[PC_COMMAND+7];
//__bwrite_meter_num = TRUE;
UDP(R_W_METER_NUM);
break;
case R_R_METER_NUM:
//__wcommand = R_R_METER_NUM;
UDP(R_R_METER_NUM);
break;
case R_W_METER:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -