📄 mtest.c
字号:
inregs.h.ah=0x04; // AH=04 send_pkt()
inregs.x.cx=length; // CX= packet length
segregs.ds= _FP_SEG (sb); // DS:SI send buffer
inregs.x.si= _FP_OFF (sb);
_int86x (packet_isr, &inregs, &outregs, &segregs);
return (!outregs.x.cflag);
}
// ********************************
int wait_packet_received(char *p, char *q,char *RxBufferInUse, int *RxDataLength)
{
int i;
char *tmp1,*tmp2;
tmp1=q;
tmp2=p;
if (*RxBufferInUse!=2) // if return= 0 No Receive!
return 0; // = 1 Receive Length Error!
// = 2 Receive Data Error!
*RxBufferInUse=0; // = 3 Receive Success
if(*RxDataLength != p_len)
return 1;
p=p+12;
q=q+12;
for(i=12;i<*RxDataLength;i++)
if(*p++ != *q++){
return 2;
}
// for(i=0;i<1520;i++)
// *(tmp1+i)=0xff;
return 3;
}
// ********************************
int ppong_test(int times)
{
int key_value, try_counter, sent1, sent2, i, rtn, times1;
int tmp=-1,count1=-1,count2=0;
char string[10];
time_t ltime;
struct tm *newtime;
p_len=60;
// p_len=1514;
for(times1=0;times1<10;times1++)
{ // pre test
send_pkt(packet_isr2,p_len,send_buffer2);
for(i=0;i<1000;i++)
{ //at most 1000ms
rtn=wait_packet_received(send_buffer2, RxBuffer1, &RxBufferInUse1 ,&RxDataLength1);
if(rtn==3)
{
send_pkt(packet_isr1,p_len,send_buffer1);
break;
}
Delay10us(100);
}
Delay10us(100);
for(i=0;i<1000;i++)
{ //at most 1000ms
rtn=wait_packet_received(send_buffer1, RxBuffer2, &RxBufferInUse2 ,&RxDataLength2);
if(rtn==3)
{
break;
}
Delay10us(100);
}
if(rtn==3) break;
}
while(TRUE)
{
Delay10us(10);
// client
sent2=FALSE;
for(try_counter=0; try_counter<10; try_counter++)
if(send_pkt(packet_isr2,p_len,send_buffer2))
{
sent2=TRUE;
break;
}
if (sent2) // if return= 0 No Receive!
tx_count2++; // = 1 Receive Length Error!
else // = 2 Receive Data Error!
tx_lost2++; // = 3 Receive Success
//server
for(i=0;i<100000;i++)
{ //at most 100ms
rtn=wait_packet_received(send_buffer2, RxBuffer1, &RxBufferInUse1 ,&RxDataLength1);
if(rtn ==1)
{
rx_lost1++;
break;
}
if(rtn ==2)
{
rx_lost1++;
break;
}
if(rtn == 3)
{
sent1=FALSE;
rx_count1++;
for(try_counter=0; try_counter<10; try_counter++)
if(send_pkt(packet_isr1,p_len,send_buffer1))
{
sent1=TRUE;
break;
}
if(sent1)
tx_count1++;
else
tx_lost1++;
break;
}
Delay10us(10);
}
if(rtn == 0 && i==100000)
{
rx_lost1++;
}
Delay10us(1);
// client
for(i=0;i<100000;i++)
{ //at most 100ms
rtn=wait_packet_received(send_buffer1, RxBuffer2, &RxBufferInUse2 ,&RxDataLength2);
if(rtn != 0)
if(rtn ==1)
{
rx_lost2++;
break;
}
else
if(rtn ==2)
{
rx_lost2++;
break;
}
else
{
rx_count2++;
break;
}
else
Delay10us(10);
}
if(rtn == 0 && i==100000)
{
rx_lost2++;
}
p_len ++;
if(p_len>1514)
{
p_len=60;
prepare_send_buffer(send_buffer1,SERVER);
prepare_send_buffer(send_buffer2,CLIENT);
}
// time(<ime);
// newtime=localtime(<ime);
// if(newtime->tm_sec!=tmp || ((tx_count2+tx_lost2)>=TEST_COUNT*times) || (rx_lost2)>=ERROR_COUNT)
// if( ((tx_count2+tx_lost2) >= TEST_COUNT*times) || (rx_lost2)>=ERROR_COUNT)
//count1++;
//if (count1 >=10)
// count1=0;
//if ( count1 == 0 )
// {
// tmp=newtime->tm_sec; // if second change or
/*
count1++; // test end
if(count1>=60)
{ // print data
count1=0;
count2++;
}
if(count2>=60)
{
count2=0;
}
*/
_settextwindow(1,1,25,80);
_settextcolor(WHITE);
sprintf(string,"%6lu",tx_count2);
_settextposition(15,21);
_outtext(string);
sprintf(string,"%6lu",rx_count2);
_settextposition(16,21);
_outtext(string);
sprintf(string,"%6lu",tx_count1);
_settextposition(10,61);
_outtext(string);
sprintf(string,"%6lu",rx_count1);
_settextposition(11,61);
_outtext(string);
// }
if((tx_count2+tx_lost2)>=TEST_COUNT*times || rx_lost2>=ERROR_COUNT)
break;
}
if (tx_count2==rx_count2)
return 0;
else
return 1;
}
// ********************************
int init_card1_drv(void)
{
int try=0;
while(TRUE){
packet_isr1 = search_packet_driver_vector(1);
if(packet_isr1 !=0){
sprintf (str,"Found packet driver entry at 0x%02X.", packet_isr1);
print_msg(YELLOW, str);
break;
}
else if(try==0){
print_msg(RED, "Warning : No packet driver entry found between 0x60-0x80.");
print_msg(YELLOW,"Try to load Server packet driver. ");
system("e100bpkt 0x60 >nul");
try++;
}
else{
print_msg(RED, "Error : Server packet driver load ERROR !!");
error_code=0x12;
return 2;
}
}
if(!set_access_type(packet_isr1,&packet_handle1,receive_handler1) ) {
print_msg(RED, "ERROR-2: Card1 cannot register as a protocol stack.");
error_code=0x13;
return 3;
}
if(!get_address(packet_isr1,packet_handle1,(char *)ether_id1)) {
print_msg(RED, "ERROR-4: Card1 cannot get the NIC Ethernet address.");
error_code=0x14;
return 4;
}
if(!set_rcv_mode(packet_isr1, packet_handle1,3)) {
print_msg(RED, "ERROR-5: Card1 cannot set the NIC receive mode.");
error_code=0x15;
return 5;
}
return 0;
}
// ********************************
int init_card2_drv(void)
{
_setbkcolor(BLUE);
print_msg(GREEN,"Loading client packet driver ...........");
if(system("mtdpkt 0x61 100full >nul")!=0){
print_msg(RED_L,"Load client packet driver FAIL !!!");
return 1;
}
packet_isr2 = search_packet_driver_vector(2);
if(packet_isr2 !=0){
print_msg(GREEN,"Driver loaded success!!");
sprintf (str,"Found packet driver entry at 0x%2X.", packet_isr2);
print_msg(YELLOW,str);
}
else{
print_msg(RED,"Driver loaded fial!!");
print_msg(RED, "Error: No packet driver entry found between 0x60-0x80.");
error_code=0x22;
return 2;
}
if(!set_access_type(packet_isr2,&packet_handle2,receive_handler2) ) {
print_msg(RED, "Error: Card2 cannot register as a protocol stack.");
error_code=0x23;
return 3;
}
if(!get_address(packet_isr2,packet_handle2,(char *)ether_id2)) {
print_msg(RED, "Error : Card2 cannot get the NIC Ethernet address.");
error_code=0x24;
return 4;
}
if(!set_rcv_mode(packet_isr2, packet_handle2,3)) {
print_msg(RED, "Error : Card2 cannot set the NIC receive mode.");
error_code=0x25;
return 5;
}
return 0;
}
int release_drv(int x)
{
if (!release_type(packet_isr1, packet_handle1)) {
print_msg(RED, "Card1 ERROR-3: cannot deregister a protocol stack.");
return 3;
}
if (!release_type(packet_isr2, packet_handle2)) {
print_msg(RED, "Card2 ERROR-3: cannot deregister a protocol stack.");
return 3;
}
print_msg(GREEN,"Release server and client packet driver ....");
system("mtdpkt -u 0x61 > nul");
system("e100bpkt -u >nul");
print_OX(x);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -