📄 tftp_test.c
字号:
/*********************************************************************************************
* File: tftp_test.c
* Author: Embest
* Desc: network test application
* History:
*
*********************************************************************************************/
#include "2410lib.h"
/*------------------------------------------------------------------------------------------*/
/* external variables */
/*------------------------------------------------------------------------------------------*/
extern unsigned long server_ip;
extern unsigned long local_ip;
/*------------------------------------------------------------------------------------------*/
/* static global variables */
/*------------------------------------------------------------------------------------------*/
static unsigned char sector_buf[64*1024];
/*********************************************************************************************
* name: dhcp_test
* func: Dhcp test
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void dhcp_test()
{
uart_printf("\n Ethernet DCHP Protocol Test Example\n");
NicInit();
NetInit();
uart_printf("\n Waiting DHCP server to Respond.\n");
DhcpQuery();
uart_printf("\nReceive DHCP Message from server %d.%d.%d.%d",
(char)(server_ip>>0),
(char)(server_ip>>8),
(char)(server_ip>>16),
(char)(server_ip>>24));
uart_printf("\nConfig local ip address %d.%d.%d.%d\n",
(char)(local_ip>>0),
(char)(local_ip>>8),
(char)(local_ip>>16),
(char)(local_ip>>24));
#ifdef BOARDTEST
sprintf(§or_buf, "%d.%d.%d.%d",
(char)(server_ip>>0),
(char)(server_ip>>8),
(char)(server_ip>>16),
(char)(server_ip>>24));
print_lcd(195,170,0x1c,"DHCP Server:");
print_lcd(195,180,0x1c,§or_buf);
sprintf(§or_buf, "%d.%d.%d.%d\n",
(char)(local_ip>>0),
(char)(local_ip>>8),
(char)(local_ip>>16),
(char)(local_ip>>24));
print_lcd(195,190,0x1c,"Set Board IP:");
print_lcd(195,200,0x1c,§or_buf);
#endif
uart_printf(" end.\n");
}
/*********************************************************************************************
* name: tftp_test
* func: Tftp test
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void tftp_test()
{
char* pData;
unsigned long write_addr;
char input_string[64];
char tmp_ip[4] = {0,0,0,0};
int tmp,len,i,j,num=0;
int b10 =0; int b100 =0; int flag=0;
NicInit();
NetInit();
//uart_printf("\n S/s -- DHCP IP addr\n");
uart_printf(" D/d -- Default IP addr(192.192.192.200)\n");
uart_printf(" Y/y -- Input New IP addr\n");
uart_printf(" Press a key to continue ... %c \n",i = uart_getch());
switch(i)
{
case 'Y':
case 'y':
uart_printf(" Please input IP address(xxx.xxx.xxx.xxx) then press ENTER:\n");
uart_getstring(&input_string);
for( i = 0;((i <16)&(input_string[i] != '\0')); i++)
if(input_string[i] == '.') num +=1;
if(num != 3) flag = 1;
else
{
num = i - 1; j =0;
for( i = num; i >= 0; i--)
{
if(input_string[i] != '.' )
{
if((input_string[i] < '0' | input_string[i] > '9')) flag = 1;
else
{
tmp = (input_string[i] - 0x30);
if (b100) { tmp *=100; b10 =0; }
if (b10) { tmp *= 10; b100 =1;}
b10 = 1;
if(tmp < 256) tmp_ip[j] += tmp; else local_ip = 0x4dc0c0c0;
}
}else { j++; b10 =0; b100 =0;}
}
}
if(!flag)
local_ip = ((tmp_ip[0]<<24))+((tmp_ip[1]<<16))+((tmp_ip[2]<<8))+tmp_ip[3];
else
{
uart_printf("\nIP address error (xxx.xxx.xxx.xxx)!\n");
return;
}
break;
case 'S':
case 's':
DhcpQuery();
break;
case 'D':
case 'd':
default:
local_ip = 0xc8c0c0c0; // config local ip 192.192.192.200
break;
}
uart_printf("\n Set local ip %d.%d.%d.%d\n",
local_ip&0x000000FF,(local_ip&0x0000FF00)>>8,
(local_ip&0x00FF0000)>>16,(local_ip&0xFF000000)>>24);
uart_printf("\nPress any key to exit ...\n");
for( ; ; )
{
if(uart_getkey())
break;
pData = (char *)TftpRecv(&len);
if( (pData == 0) || (len <= 0) )
continue;
write_addr = (pData[0])+(pData[1]<<8)+(pData[2]<<16)+(pData[3]<<24);
pData = pData + sizeof(long);
len -= 4;
if((*pData == 'E')&&(*(pData+1) == 'N')&&(*(pData+2) == 'D')) //run
{
MakeAnswer();
return;
}
else if((*pData == 'R')&&(*(pData+1) == 'U')&&(*(pData+2) == 'N')) //run
{
MakeAnswer();
extern void (*run) (void); // implement in 44blib.c
run = (void *)write_addr;
(*run)(); // jump the new address to run
}
if(write_addr >= 0x30100000 && write_addr < 0x37fffc00)
{
memcpy((void *)write_addr, pData, len);
}
else if(FlashID(write_addr))
{
int write_ptr, offset_ptr, write_len, sector_size;
char *data_ptr;
data_ptr = pData;
write_ptr = write_addr;
while(write_ptr < write_addr+len)
{
sector_size = FlashSectorBackup(write_ptr, sector_buf);
offset_ptr = (write_ptr & ~(0 - sector_size));
write_len = sector_size - offset_ptr;
if(write_len > len - (write_ptr - write_addr))
write_len = len - (write_ptr - write_addr);
memcpy(§or_buf[offset_ptr], data_ptr, write_len);
FlashEraseSector(write_ptr);
FlashProgram(write_ptr & (0 - sector_size), sector_buf, sector_size);
data_ptr += write_len;
write_ptr += write_len;
}
}
else
{
continue;
}
if(memcmp((void *)write_addr, pData, len) == 0)
MakeAnswer();
}
uart_printf(" end.\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -