📄 cmdtbl.c
字号:
/* cmdtbl.c:
* This is the command table used by the monitor.
*
* General notice:
* This code is part of a boot-monitor package developed as a generic base
* platform for embedded system designs. As such, it is likely to be
* distributed to various projects beyond the control of the original
* author. Please notify the author of any enhancements made or bugs found
* so that all may benefit from the changes. In addition, notification back
* to the author will allow the new user to pick up changes that may have
* been made by other users after this version of the code was distributed.
*
* Note1: the majority of this code was edited with 4-space tabs.
* Note2: as more and more contributions are accepted, the term "author"
* is becoming a mis-representation of credit.
*
* Original author: Ed Sutter
* Email: esutter@lucent.com
* Phone: 908-582-2351
*/
#include "config.h"
#include "tfs.h"
#include "tfsprivate.h"
#include "cli.h"
#include "genlib.h"
#include "xcmddcl.h"
#define ULVLCMD "ulvl"
#if INCLUDE_CAST
extern int Cast(int, char **);
extern char *CastHelp[];
#endif
#if INCLUDE_BBC
extern int BbcCmd(int, char **);
extern char *BbcHelp[];
#endif
#if INCLUDE_BOARDINFO
extern int BinfoCmd(int, char **);
extern char *BinfoHelp[];
#endif
#if INCLUDE_UNZIP
extern int Unzip(int, char **);
extern char *UnzipHelp[];
#endif
#if INCLUDE_MEMTRACE
extern int MtraceCmd(int, char **);
extern char *MtraceHelp[];
#endif
#if INCLUDE_IGMP
extern int Igmp(int, char **);
extern char *IgmpHelp[];
#endif
#if INCLUDE_GDB
extern int Gdb(int, char **);
extern char *GdbHelp[];
#endif
#if INCLUDE_MALLOC
extern int Heap(int, char **), Reg(int, char **);
extern char *HeapHelp[], *RegHelp[];
#endif
extern int Reg(int, char **);
extern char *RegHelp[];
#if INCLUDE_MEMCMDS
extern int Dm(int, char **), Pm(int, char **), Cm(int, char **);
extern int Sm(int, char **), Fm(int, char **), Mt(int, char **);
extern char *DmHelp[], *PmHelp[], *CmHelp[];
extern char *SmHelp[], *FmHelp[], *MtHelp[];
#endif
#if INCLUDE_PROFILER
extern int Prof(int, char **);
extern char *ProfHelp[];
#endif
#if INCLUDE_STRACE
extern int Strace(int, char **);
extern char *StraceHelp[];
#endif
#if INCLUDE_PIO
extern int Pio(int, char **);
extern char *PioHelp[];
#endif
#if INCLUDE_LINEEDIT
extern int History(int, char **);
extern char *HistoryHelp[];
#endif
#if INCLUDE_EDIT
extern int Edit(int, char **);
extern char *EditHelp[];
#endif
#if INCLUDE_DISASSEMBLER
extern int Dis(int, char **);
extern char *DisHelp[];
#endif
#if INCLUDE_SYSLOG
extern int SyslogCmd(int, char **);
extern char *SyslogHelp[];
#endif
#if INCLUDE_TFSSCRIPT
extern int If(int, char **), Exit(int, char **), Goto(int, char **);
extern int Gosub(int, char **), Return(int, char **), Item(int, char **);
extern char *IfHelp[], *GotoHelp[], *GosubHelp[], *ItemHelp[];
extern char *ReturnHelp[], *ExitHelp[];
extern int Read(int, char **), Echo(int, char **), Sleep(int, char **);
extern char *ReadHelp[], *EchoHelp[], *SleepHelp[];
#endif
#if INCLUDE_TFSCLI
extern int Tfs(int, char **);
extern char *TfsHelp[];
#endif
#if INCLUDE_SHELLVARS
extern int Set(int, char **);
extern char *SetHelp[];
#endif
#if INCLUDE_XMODEM
extern int Xmodem(int, char **);
extern char *XmodemHelp[];
#endif
#if INCLUDE_TFTP
extern int Tftp(int, char **);
extern char *TftpHelp[];
#endif
#if INCLUDE_DHCPBOOT
extern int Dhcp(int, char **);
extern char *DhcpHelp[];
#endif
#if INCLUDE_ETHERNET
extern int Arp(int, char **), Dhcp(int, char **), Ether(int, char **);
extern int Tftp(int, char **), Icmp(int, char **);
extern char *ArpHelp[], *EtherHelp[], *IcmpHelp[];
#endif
#if INCLUDE_FLASH
//extern int FlashCmd(int, char **);
//extern char *FlashHelp[];
#endif
#if INCLUDE_IDE
extern int Ide(int, char **);
extern char *IdeHelp[];
#endif
#if INCLUDE_SIF_FLASH
extern int Sflash(int,char **);
extern char *SflashHelp[];
#endif
#if INCLUDE_NOR_FLASH_S29GL128M90 || INCLUDE_NOR_FLASH_S29GL064A90
extern int Nflash(int,char **);
extern char *NflashHelp[];
#endif
#if INCLUDE_DOWN_UP
//extern int Update(int,char **);
//extern char *UpdateHelp[];
extern int UpdateQV(int,char **);
extern char *UpdateQVHelp[];
extern int UpQV(int,char **);
extern char *UpQVHelp[];
extern int StartLinux(int,char **);
extern char *StartLinuxHelp[];
extern int Setip(int,char **);
extern char *SetipHelp[];
#endif
#if INCLUDE_SETCMD
//shunzi add it to config cmdline
extern int Setcmd(int, char **);
extern char *SetcmdHelp[];
#endif
extern int Help(int, char **), Reset(int, char **);
extern int Ulvl(int, char **), Version(int, char **);
extern int Call(int, char **);
extern char *HelpHelp[], *ResetHelp[], *UlvlHelp[];
extern char *VersionHelp[], *CallHelp[];
struct monCommand cmdlist[] = {
#if INCLUDE_ETHERNET
{ "arp", Arp, ArpHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_BBC
{ "bbc", BbcCmd, BbcHelp, 0 },
#endif
#if INCLUDE_BOARDINFO
{ "brdinfo", BinfoCmd, BinfoHelp, 0 },
#endif
{ "call", Call, CallHelp, CMDFLAG_NOMONRC },
#if INCLUDE_CAST
{ "cast", Cast, CastHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "cm", Cm, CmHelp, 0 },
#endif
#if INCLUDE_DHCPBOOT
{ "dhcp", Dhcp, DhcpHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_DISASSEMBLER
{ "dis", Dis, DisHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "dm", Dm, DmHelp, 0 },
#endif
#if INCLUDE_TFSSCRIPT
{ "echo", Echo, EchoHelp, 0 },
#endif
#if INCLUDE_EDIT
{ "edit", Edit, EditHelp, 0 },
#endif
#if INCLUDE_ETHERNET
{ "ether", Ether, EtherHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_TFSSCRIPT
{ "exit", Exit, ExitHelp, 0 },
#endif
#if INCLUDE_FLASH
// { "flash", FlashCmd, FlashHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "fm", Fm, FmHelp, 0 },
#endif
#if INCLUDE_GDB
{ "gdb", Gdb, GdbHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_TFSSCRIPT
{ "gosub", Gosub, GosubHelp, 0 },
{ "goto", Goto, GotoHelp, 0 },
#endif
#if INCLUDE_MALLOC
{ "heap", Heap, HeapHelp, 0 },
#endif
{ "help", Help, HelpHelp, 0 },
{ "?", Help, HelpHelp, 0 },
#if INCLUDE_LINEEDIT
{ "history", History, HistoryHelp, 0 },
#endif
#if INCLUDE_ETHERNET
{ "icmp", Icmp, IcmpHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_IDE
{ "ide", Ide, IdeHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_IGMP
{ "igmp", Igmp, IgmpHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_TFSSCRIPT
{ "if", If, IfHelp, 0 },
#endif
#if INCLUDE_TFSSCRIPT
{ "item", Item, ItemHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "mt", Mt, MtHelp, 0 },
#endif
#if INCLUDE_MEMTRACE
{ "mtrace", MtraceCmd, MtraceHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "pm", Pm, PmHelp, 0 },
#endif
#if INCLUDE_PROFILER
{ "prof", Prof, ProfHelp, 0 },
#endif
#if INCLUDE_TFSSCRIPT
{ "read", Read, ReadHelp, 0 },
#endif
#if INCLUDE_STRACE
{ "reg", Reg, RegHelp, 0 },
#endif
{ "reset", Reset, ResetHelp, 0 },
#if INCLUDE_TFSSCRIPT
{ "return", Return, ReturnHelp, 0 },
#endif
#if INCLUDE_SHELLVARS
{ "set", Set, SetHelp, 0 },
#endif
#if INCLUDE_TFSSCRIPT
{ "sleep", Sleep, SleepHelp, 0 },
#endif
#if INCLUDE_MEMCMDS
{ "sm", Sm, SmHelp, 0 },
#endif
#if INCLUDE_STRACE
{ "strace", Strace, StraceHelp, 0 },
#endif
#if INCLUDE_SYSLOG
{ "syslog", SyslogCmd, SyslogHelp, CMDFLAG_NOMONRC },
#endif
{ ULVLCMD, Ulvl, UlvlHelp, 0 },
#if INCLUDE_TFTP
{ "tftp", Tftp, TftpHelp, CMDFLAG_NOMONRC },
#endif
#if INCLUDE_TFSCLI
{ "tfs", Tfs, TfsHelp, 0 },
#endif
#if INCLUDE_UNZIP
{ "unzip", Unzip, UnzipHelp, 0 },
#endif
#if INCLUDE_XMODEM
{ "xmodem", Xmodem, XmodemHelp, 0 },
#endif
{ "version", Version, VersionHelp, 0 },
#if INCLUDE_SIF_FLASH
{ "sflash", Sflash, SflashHelp, 0},
#endif
#if INCLUDE_DOWN_UP
{ "setip", Setip, SetipHelp, 0},
#endif
#if INCLUDE_SETCMD
{ "setcmd", Setcmd, SetcmdHelp, 0},
#endif
#if INCLUDE_NOR_FLASH_S29GL128M90 || INCLUDE_NOR_FLASH_S29GL064A90
{ "nflash", Nflash, NflashHelp, 0},
#endif
#if INCLUDE_UPDATE
// { "update", Update, UpdateHelp, 0},
{ "updateqv", UpdateQV, UpdateQVHelp, 0},
{ "upqv", UpQV, UpQVHelp, 0},
{ "startlinux", StartLinux, StartLinuxHelp, 0},
#endif
//{ "bootlinux" Bootlinux}
#include "xcmdtbl.h" /* For non-generic commands that are */
/* specific to a particular target. */
{ 0,0,0,0 },
};
/* cmdUlvl[]:
* This table stores one char per command that contains that command's
* user level. The default user level of all commands is 0, but can
* be re-defined by the ulvl -c command.
*/
char cmdUlvl[(sizeof(cmdlist)/sizeof(struct monCommand))];
/* setCmdUlvl():
* The incoming string is a command name followed by a comma and a user
* level (ranging from 0 thru 4).
* Return 0 if pass, 1 if new level was user-level rejected, -1 if error.
*/
int
setCmdUlvl(char *cmdlvl, int verbose)
{
extern char *appcmdUlvl;
extern struct monCommand *appCmdlist;
struct monCommand *cptr;
int newlevel, idx, pass, doall;
char *comma, *lvlptr, buffer[32], *cmdandlevel;
/* Make a copy of the incoming string so that we can
* modify it...
*/
if (strlen(cmdlvl) > (sizeof(buffer)-1))
goto showerr;
strcpy(buffer,cmdlvl);
cmdandlevel = buffer;
/* First verify that the comma is in the string... */
comma = strchr(cmdandlevel,',');
if (!comma)
goto showerr;
/* Retrieve and verify the new level to be assigned... */
newlevel = atoi(comma+1);
if ((newlevel < MINUSRLEVEL) || (newlevel > MAXUSRLEVEL))
goto showerr;
*comma = 0;
/* Don't allow adjustment of the ulvl command itself. It must be
* able to run as user level 0 all the time...
*/
if (!strcmp(cmdandlevel,ULVLCMD)) {
printf("Can't adjust '%s' user level.\n",ULVLCMD);
return(-1);
}
if (appCmdlist) {
pass = 0;
cptr = appCmdlist;
lvlptr = appcmdUlvl;
}
else {
pass = 1;
cptr = cmdlist;
lvlptr = cmdUlvl;
}
/* If the command string is "ALL" then we set all commands
* to the requested level.
*/
if (!strcmp(cmdandlevel,"ALL"))
doall = 1;
else
doall = 0;
while(pass < 2) {
if ((cptr == cmdlist) && (cmdandlevel[0] == '_'))
cmdandlevel++;
/* Find the command in the table that is to be adjusted... */
for(idx=0;cptr->name;cptr++,idx++) {
if (doall || (!strcmp(cmdandlevel,cptr->name))) {
/* Even with doall set, we don't want to touch
* the ULVLCMD level...
*/
if (doall && !strcmp(cptr->name,ULVLCMD))
continue;
/* If the command's user level is to be lowered, then the
* current monitor userlevel must be at least as high as the
* command's current user level...
*/
if ((newlevel < lvlptr[idx]) && (getUsrLvl() < lvlptr[idx])) {
if (verbose)
printf("User-level access denied: %s\n",cmdandlevel);
return(1);
}
lvlptr[idx] = newlevel;
if (!doall)
return(0);
}
}
cptr = cmdlist;
lvlptr = cmdUlvl;
pass++;
}
if (doall)
return(0);
showerr:
if (verbose)
printf("Input error: %s\n",cmdlvl);
return(-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -