?? load.c
字號:
#if !BASIC_BIOS
#include <stdio.h>
#include "bios.h"
#include "cli.h"
#include "rtc.h"
#include "uart.h"
#include "xmodem.h"
static CommandNode CLI_NAME_LOAD =
{
"load", // node command hint pointer
"加載類", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
NULL // node command value
};
static CommandNode CLI_NAME_PROG =
{
"program", // node command hint pointer
"加載程序", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
NULL // node command value
};
static CommandNode CLI_NAME_PROGTFTP =
"tftp", // node command hint pointer
"網口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_IP, // node type
CLI_LOADTFTP // node command value
};
static CommandNode CLI_NAME_PROGNAME =
{
"filename", // node command hint pointer
"文件名稱", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_STRING, // node type
NULL // node command value
};
static CommandNode CLI_NAME_PROGXMODEM =
{
"xmodem", // node command hint pointer
"串口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADXMODEM // node command value
};
static CommandNode CLI_NAME_PATCH =
{
"patch", // node command hint pointer
"加載補丁", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
NULL // node command value
};
static CommandNode CLI_NAME_PATTFTP =
{
"tftp", // node command hint pointer
"網口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_IP, // node type
CLI_LOADPATTFTP // node command value
};
/*
static CommandNode CLI_NAME_PATNAME =
{
"filename", // node command hint pointer
"文件名稱", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_STRING, // node type
NULL // node command value
};
*/
static CommandNode CLI_NAME_PATXMODEM =
{
"xmodem", // node command hint pointer
"串口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADPATXMODEM // node command value
};
/*
static CommandNode CLI_NAME_TO =
{
"to", // node command hint pointer
"加載地址", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_HEX, // node type
NULL // node command value
};
*/
static CommandNode CLI_NAME_BASIC =
{
"basic-bios", // node command hint pointer
"基本BIOS", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
NULL // node command value
};
static CommandNode CLI_NAME_EXTEND =
{
"extend-bios", // node command hint pointer
"擴展BIOS", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
NULL // node command value
};
static CommandNode CLI_NAME_BASICXMODEM =
{
"xmodem", // node command hint pointer
"串口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADBASICXMODEM // node command value
};
static CommandNode CLI_NAME_BASICTFTP =
{
"tftp", // node command hint pointer
"網口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADBASICTFTP // node command value
};
static CommandNode CLI_NAME_EXTENDXMODEM =
{
"xmodem", // node command hint pointer
"串口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADECTENDXMODEM // node command value
};
static CommandNode CLI_NAME_EXTENDTFTP =
{
"tftp", // node command hint pointer
"網口加載", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_KEY, // node type
CLI_LOADEXTENDTFTP // node command value
};
/*
static CommandNode CLI_NAME_EXTENDNAME =
{
"filename", // node command hint pointer
"文件名稱", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_STRING, // node type
NULL // node command value
};
static CommandNode CLI_NAME_BASICNAME =
{
"filename", // node command hint pointer
"文件名稱", // node command help pointer
NULL, // node current input buffer pointer
NULL, // down leaf pointer
NULL, // right leaf pointer
COMMAND_TYPE_STRING, // node type
NULL // node command value
};
*/
CommandNode *CLI_LoadTftp[] =
{
&CLI_NAME_LOAD, // load
&CLI_NAME_PROG, // program
&CLI_NAME_PROGTFTP, // tftp
&CLI_NAME_PROGNAME, // filename
NULL
};
CommandNode *CLI_LoadXmodem[] =
{
&CLI_NAME_LOAD, // load
&CLI_NAME_PROG, // program
&CLI_NAME_PROGXMODEM, // xmodem
NULL
};
CommandNode *CLI_LoadPatTftp[] =
{
&CLI_NAME_LOAD, // load
&CLI_NAME_PATCH, // patch
&CLI_NAME_PATTFTP, // tftp
&CLI_NAME_PROGNAME, // filename
NULL
};
CommandNode *CLI_LoadPatXmodem[] =
{
&CLI_NAME_LOAD, // load
&CLI_NAME_PATCH, // patch
&CLI_NAME_PATXMODEM, // xmodem
NULL
};
CommandNode *CLI_LoadBasicBiosXmodem[] =
{
&CLI_NAME_LOAD,
&CLI_NAME_BASIC,
&CLI_NAME_BASICXMODEM,
NULL
};
CommandNode *CLI_LoadBasicBiosTftp[] =
{
&CLI_NAME_LOAD,
&CLI_NAME_BASIC,
&CLI_NAME_BASICTFTP,
&CLI_NAME_PROGNAME,
NULL
};
CommandNode *CLI_LoadExtendBiosXmodem[] =
{
&CLI_NAME_LOAD,
&CLI_NAME_EXTEND,
&CLI_NAME_EXTENDXMODEM,
NULL
};
CommandNode *CLI_LoadExtendBiosTftp[] =
{
&CLI_NAME_LOAD,
&CLI_NAME_EXTEND,
&CLI_NAME_EXTENDTFTP,
&CLI_NAME_PROGNAME,
NULL
};
void CLI_LoadProc( unsigned char key )
{
switch( key )
{
case CLI_LOADTFTP:
CLI_LoadProgTftpProc();
break;
case CLI_LOADXMODEM:
CLI_LoadProgXmodemProc();
break;
case CLI_LOADPATTFTP:
CLI_LoadPatchTftpProc();
break;
case CLI_LOADPATXMODEM:
CLI_LoadPatchXmodemProc();
break;
case CLI_LOADBASICXMODEM:
CLI_LoadBasicXmodemProc();
break;
case CLI_LOADBASICTFTP:
CLI_LoadBasicTftpProc();
break;
case CLI_LOADECTENDXMODEM:
CLI_LoadExtendXmodemProc();
break;
case CLI_LOADEXTENDTFTP:
CLI_LoadExtendTftpProc();
break;
default:
break;
}
}
void CLI_LoadProgXmodemProc( void )
{
unsigned long size = 0;
UART_Printf("\r\n");
size = XMODEM_Load( (unsigned char*)SDRAM_BUFFER_ADDR, FLASH_PROGRAM_SIZE );
UART_Printf( "\r\nDownload 0X%X (%d) bytes to address 0X%X",
(int)size, (int)size, SDRAM_BUFFER_ADDR );
BurnFlash( (unsigned short*)FLASH_PROGRAM_START_ADDR, (unsigned short*)SDRAM_BUFFER_ADDR, size );
}
void CLI_LoadPatchXmodemProc( void )
{
}
void CLI_LoadBasicXmodemProc( void )
{
unsigned long size = 0;
UART_Printf("\r\n");
size = XMODEM_Load( (unsigned char*)SDRAM_BUFFER_ADDR, FLASH_BASIC_BIOS_SIZE );
UART_Printf( "\r\nDownload 0X%X (%d) bytes to address 0X%X",
(int)size, (int)size, SDRAM_BUFFER_ADDR );
BurnFlash( (unsigned short*)FLASH_BASIC_BIOS_ADDR, (unsigned short*)SDRAM_BUFFER_ADDR, size );
}
void CLI_LoadExtendXmodemProc( void )
{
unsigned long size = 0;
UART_Printf("\r\n");
size = XMODEM_Load( (unsigned char*)SDRAM_BUFFER_ADDR, FLASH_EXTEND_BIOS_SIZE );
UART_Printf( "\r\nDownload 0X%X (%d) bytes to address 0X%X",
(int)size, (int)size, SDRAM_BUFFER_ADDR );
BurnFlash( (unsigned short*)FLASH_EXTEND_BIOS_ADDR, (unsigned short*)SDRAM_BUFFER_ADDR, size );
}
void CLI_LoadProgTftpProc( void )
{
}
void CLI_LoadPatchTftpProc( void )
{
}
void CLI_LoadBasicTftpProc( void )
{
}
void CLI_LoadExtendTftpProc( void )
{
}
unsigned long CLI_LoadToRam( unsigned char *p )
{
unsigned long i,size = 0;
unsigned char sec, data, start = 0;
struct reltime time;
RTC_GetTime( &time );
sec = time.second;
UART_Printf( "\r\n1. BIN Download" );
UART_Printf( "\r\n2. XModem Download" );
UART_Printf( "\r\nSelect one to proceed......." );
UART_Printf( "\b%d", BIOS_CLI_SECECT_TIME );
for( i = 0; i < BIOS_CLI_SECECT_TIME; )
{
RTC_GetTime( &time );
if( sec != time.second )
{
sec = time.second;
i++;
if( start == 0 )
{
UART_Printf( "\b%d", BIOS_CLI_SECECT_TIME-i );
}
}
if( UART_kbhit( COM0 ) )
{
data = (unsigned char)UART_getchar( COM0 );
}
else
{
continue;
}
if( start == 0 )
{
switch( data )
{
case '1':
UART_Printf( "\r\nYou have selected BIN download, please send file now.\r\n" );
size = CLI_LoadBin( p, 1048*1048 );
i = BIOS_CLI_SECECT_TIME;
break;
case '2':
UART_Printf( "\r\nYou have selected XModem download, please send file now.\r\n" );
size = XMODEM_Load( p, 1048*1048 );
i = BIOS_CLI_SECECT_TIME;
break;
}
}
}
if( size != 0 )
{
if( size == 0xffffffff )
{
UART_Printf( "\r\nDownload TOO large" );
}
else
{
UART_Printf( "\r\nDownload 0X%X (%d) bytes , address 0X%X to 0X%X",
size, size, p, p + size );
}
}
return size;
}
unsigned long CLI_LoadBin( unsigned char *start_addr, unsigned long dwAllowedMem )
{
unsigned long start = 0, size = 0;
unsigned char data, i, sec;
unsigned char *p = start_addr;
struct reltime time;
RTC_GetTime( &time );
sec = time.second;
UART_Printf( "%-2d", BIOS_CLI_CONFIRM_TIME );
for( i = 0; i < BIOS_CLI_CONFIRM_TIME; )
{
RTC_GetTime( &time );
if( sec != time.second )
{
sec = time.second;
i++;
if( start == 0 )
{
UART_Printf( "\b\b%-2d", BIOS_CLI_CONFIRM_TIME-i );
}
}
if( UART_kbhit( COM0 ) )
{
data = (unsigned char)UART_getchar( COM0 );
}
else
{
continue;
}
start = 1;
i = BIOS_CLI_CONFIRM_TIME - BIOS_CLI_TERM_TIME;
*p++ = data;
size++;
if( size >= dwAllowedMem )
{
return 0xffffffff;
}
if( size % 1024 == 0 )
{
UART_Printf(".");
}
}
return size;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -