📄 shell.c
字号:
}
}
else
{ /* state == STATE_WORD */
if(*c == ' ')
{
*c = '\0';
state = STATE_WHITESPACE;
}
}
c++;
}
*argc = i;
#undef STATE_WHITESPACE
#undef STATE_WORD
}
/*******************************************************************************************************/
int GetCmdMatche(char *cmdline)
{
int i;
int cmdlen = strlen(cmdline);
for(i=0; CMD_INNER[i].cmd!=NULL; i++)
{
if(cmdlen != strlen(CMD_INNER[i].cmd))
continue;
if(strncmp(CMD_INNER[i].cmd, cmdline, cmdlen)==0)
return i;
}
/* for(i=0; CMD_INNER[i].cmd!=NULL; i++)
{
if(strlen(cmdline)!=strlen(CMD_INNER[i].cmd))
continue;
if(strncmp(CMD_INNER[i].cmd, cmdline, strlen(CMD_INNER[i].cmd))==0)
return i;
}*/
return -1;
}
/*******************************************************************************************************/
int Help(int argc, char *argv[])
{
int i;
for(i=0; CMD_INNER[i].cmd!=NULL; i++)
{
if(CMD_INNER[i].hlp!=NULL)
{
printf("%-8s ------ %s\n", CMD_INNER[i].cmd, CMD_INNER[i].hlp);
}
}
return 0;
}
/*******************************************************************************************************/
int ShowSysClock(int argc, char *argv[])
{
int i, j;
SysClock clk[4];
i = GetSysClock(clk);
if(i>3)
{
puts("Get System Clock Fail\n");
return -1;
}
for(j=0; j<i; j++)
{
printf("%s clock is %dHz\n",
clk[j].name,
clk[j].freq);
}
return 0;
}
/******************************************************************************/
/******************************************************************************
【功能说明】RTC 即时时钟支持函数
******************************************************************************/
#ifdef RTC_TIMER_SUPPORT
/*******************************************************************************************************/
int ShowTime(void)
{
char * cmdline = "time /t";
int argc;
char *argv[MAX_ARGS];
ParseArgs(cmdline, &argc, argv);
return GetTime(argc, argv);
}
/*******************************************************************************************************/
int GetTime(int argc, char *argv[])
{
char *str;
char data[MAX_CMD_LEN];
int i, error = 0;
unsigned int hour, min, sec;
RtcGetTime(&SysTime);
if(argc < 2)
{
printf("Current time is %2x:%02x:%02x\n",
SysTime.hour,
SysTime.min,
SysTime.sec);
input_time:
error = 0;
printf("Input new time(hh:mm:ss): ");
ReadLine(data);
if(strlen(data) == 0)
return 0;
str = data;
}
else
{
str = argv[1];
if(!strncmp(str, "/t", 3))
{
printf("Current time is %2x:%02x:%02x\n",
SysTime.hour,
SysTime.min,
SysTime.sec);
return 0;
}
}
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
hour = strtobcd(str);
if(hour>0x23||error)
{
printf("hour error!\n");
goto input_time;
}
str += i+1;
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
min = strtobcd(str);
if(min>0x59||error)
{
printf("minute error!\n");
goto input_time;
}
str += i+1;
i = 0;
if(str[++i]!=0)
if(str[++i]!=0)
error = 1;
str[i] = 0;
sec = strtobcd(str);
if(sec>0x59||error)
{
printf("second error!\n");
goto input_time;
}
SysTime.hour = hour;
SysTime.min = min;
SysTime.sec = sec;
RtcSetTime(&SysTime);
//printf("Set ");
//GetTime(0, NULL);
return 0;
}
/*******************************************************************************************************/
int ShowDate(void)
{
char * cmdline = "date /t";
int argc;
char *argv[MAX_ARGS];
ParseArgs(cmdline, &argc, argv);
return GetDate(argc, argv);
}
/*******************************************************************************************************/
int GetDate(int argc, char *argv[])
{
int i, error = 0;
char *str;
char data[MAX_CMD_LEN];
unsigned int year, month, day;
RtcGetTime(&SysTime);
if(argc < 2)
{
printf("Current date is %x-%x-%x [%s]\n",
SysTime.year,
SysTime.month,
SysTime.day,
WeekDay[(SysTime.weekday-1U)%7U]);
error_date:
error = 0;
printf("Input new date(yyyy-mm-dd):");
ReadLine(data);
if(strlen(data) == 0)
return 0;
str = data;
}
else
{
str = argv[1];
if(!strncmp(str, "/t", 3))
{
printf("Current date is %x-%x-%x [%s]\n",
SysTime.year,
SysTime.month,
SysTime.day,
WeekDay[(SysTime.weekday-1U)%7U]);
return 0;
}
}
if(str[4]!='-')
{
error = 1;
}
str[4]=0;
year = strtobcd(str);
if((year<0x2000)||(year>0x2099)||error)
{
printf("year error!\n");
goto error_date;
}
str += 5;
i = 0;
if(str[++i]!='-')
if(str[++i]!='-')
error = 1;
str[i] = 0;
month = strtobcd(str);
if((month-1)>0x11||error)
{
printf("month error!\n");
goto error_date;
}
str += i+1;
i = 0;
if(str[++i]!=0)
if(str[++i]!=0)
error = 1;
str[i] = 0;
day = strtobcd(str);
if((day-1)>0x30||error)
{
printf("day error!\n");
goto error_date;
}
SysTime.year = year;
SysTime.month = month;
SysTime.day = day;
RtcSetDay(&SysTime);
return 0;
}
/*******************************************************************************************************/
int SetWeek(int argc, char *argv[])
{
unsigned int i;
int error = 0;
if(argc<2)
error = 1;
i = strtodec(argv[1], 1);
if((i-1)>6) //0-1 = 0xffffffff
error = 1;
if(!error)
{
SysTime.weekday = i; //1~7
RtcSetWeek(&SysTime);
//printf("Set to %s\n", WeekDay[i-1]);
GetDate(0, NULL);
}
else
{
printf("Please enter a number to set weekday\n");
for(i=1; i<=7; i++)
{
printf("%d : %s\n", i, WeekDay[i-1]);
}
}
return 0;
}
#endif
/******************************************************************************
【功能说明】设置系统时钟支持函数
******************************************************************************/
#ifdef SET_SYSCLK_SUPPORT
int ChgSysClk(int argc, char *argv[])
{
printf("This function is for adjust system running clock!!!\n");
ShowSysClock(0, NULL);
if(!SetSysClock())
{
GetSysClockPara(Env.clk_para);
TimerInit(TIMER_FREQ);
SerialChgBaud(Env.baud);
Delay(100);
ShowSysClock(0, NULL);
}
return 0;
}
#endif
/*****************************************************************************/
int ChgBaudRate(int argc, char *argv[])
{
int i;
for(i=0; BaudSet[i]; i++)
printf("%d : %d\n", i, BaudSet[i]);
printf("Please enter choice : ");
while(1)
{
int ch = getch();
if(ch<='6'||ch>='0')
{
Env.baud = BaudSet[ch-'0'];
printf("Baud rate set to : %d\nPress any key to continue\n", Env.baud);
i = 0x4000;
while(i--); //wait transmit end
SerialChgBaud(Env.baud);
getch();
break;
}
}
return 0;
}
/*****************************************************************************/
/******************************************************************************
【功能说明】网络下载支持函数
******************************************************************************/
#ifdef TFTP_DOWNLOAD_SUPPORT
int SetIpAddr(int argc, char *argv[])
{
int i = 0, j = 0, z = 0, argcLen = 0, err = 0;
int is_add = 0, is_gate = 0;
char *str;
char ch = '.';
U32 ip_add[4];
U32 ip_gate[4];
argcLen = argc;
if(argc < 2)
{
printf("IP address : %u.%u.%u.%u\nIP MASK : %u.%u.%u.%u\nIP GATE : %u.%u.%u.%u\n",
(Env.nic_cfg.ip>>24)&0xff,
(Env.nic_cfg.ip>>16)&0xff,
(Env.nic_cfg.ip>>8)&0xff,
Env.nic_cfg.ip&0xff,
(Env.nic_cfg.mask>>24)&0xff,
(Env.nic_cfg.mask>>16)&0xff,
(Env.nic_cfg.mask>>8)&0xff,
Env.nic_cfg.mask&0xff,
(Env.nic_cfg.gate>>24)&0xff,
(Env.nic_cfg.gate>>16)&0xff,
(Env.nic_cfg.gate>>8)&0xff,
Env.nic_cfg.gate&0xff);
return 0;
}
else if(argc > 5)
{
printf("Usage : ipcfg [-a ip_addr] [-g ip_gate] \n-a is setup ip address\n-g is steup ip gate\n");
//printf("Usage : ipcfg [-a ip_addr] [-g ip_gate] \n\
// -a is setup ip address\n\
// -g is steup ip gate\n");
return - 1;
}
// str = argv[1];
/* for(j=0; j<4; j++)
{
if(j==3)
ch = 0;
i = 0;
if(str[++i]!=ch)
if(str[++i]!=ch)
if(str[++i]!=ch)
err = 1;
str[i] = 0;
ip[j] = strtodec(str, i);
if((ip[j]>=255)||err)
{
printf("IP address error\n");
return -1;
}
str += i+1;
}*/
if(strncmp(argv[1], "-a", 3) &&
strncmp(argv[1], "-g", 3))
{
err = 3;
}
else
{
for(z = 1; z < argcLen;z++)
{
ch = '.';
str = argv[z];
if(!strncmp(str, "-a", 3))
{
z++;
if(z == argcLen)
{
err = 3;
break;
}
str = argv[z];
for(j=0; j<4; j++)
{
if(j==3)
ch = 0;
i = 0;
if(str[++i]!=ch)
{
if(str[++i]!=ch)
{
if(str[++i]!=ch)
{
err |= 1;
if(!strncmp(str, "-g", 3))
{
err = 3;
}
break;
}
}
}
str[i] = 0;
ip_add[j] = strtodec(str, i);
if(ip_add[j]>=255)
{
err |= 1;
break;
}
str += i+1;
}
if((err && 1) == 0)
{
is_add = 1;
}
}
else if(!strncmp(str, "-g", 3))
{
z++;
if(z == argcLen)
{
err = 3;
break;
}
str = argv[z];
for(j=0; j<4; j++)
{
if(j==3)
ch = 0;
i = 0;
if(str[++i]!=ch)
{
if(str[++i]!=ch)
{
if(str[++i]!=ch)
{
err |= 2;
if(!strncmp(str, "-a", 3))
{
err = 3;
}
break;
}
}
}
str[i] = 0;
ip_gate[j] = strtodec(str, i);
if(ip_gate[j]>=255)
{
err |= 2;
break;
}
str += i+1;
}
if((err && 2) == 0)
{
is_gate = 1;
}
}
else
{
err = 3;
break;
}
}
}
if(err)
{
if(err == 3) //使用帮助
{
printf("Usage : ipcfg [-a ip_addr] [-g ip_gate] \n-a is setup ip address\n-g is steup ip gate\n");
}
else
{
if((err && 2) == 2) //IP 路由错误
{
printf("IP GATE error\n");
}
if((err && 1) == 1)//IP 地址错误
{
printf("IP address error\n");
}
}
//printf("Usage : ipcfg [-a ip_addr] [-g ip_gate] \n\
// -a is setup ip address\n\
// -g is steup ip gate\n");
return -1;
}
if(is_add)
{
Env.nic_cfg.ip = (ip_add[0]<<24)|(ip_add[1]<<16)|(ip_add[2]<<8)|ip_add[3];
}
if(is_gate)
{
Env.nic_cfg.gate = (ip_gate[0]<<24)|(ip_gate[1]<<16)|(ip_gate[2]<<8)|ip_gate[3];
}
printf("IP address : %u.%u.%u.%u\nIP MASK : %u.%u.%u.%u\nIP GATE : %u.%u.%u.%u\n",
(Env.nic_cfg.ip>>24)&0xff,
(Env.nic_cfg.ip>>16)&0xff,
(Env.nic_cfg.ip>>8)&0xff,
Env.nic_cfg.ip&0xff,
(Env.nic_cfg.mask>>24)&0xff,
(Env.nic_cfg.mask>>16)&0xff,
(Env.nic_cfg.mask>>8)&0xff,
Env.nic_cfg.mask&0xff,
(Env.nic_cfg.gate>>24)&0xff,
(Env.nic_cfg.gate>>16)&0xff,
(Env.nic_cfg.gate>>8)&0xff,
Env.nic_cfg.gate&0xff);
//printf("Set IP address : %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
return 0;
}
int LoadFromNet(int argc, char *argv[])
{
if(argc<2)
download_addr = DFT_DOWNLOAD_ADDR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -