📄 shell.c
字号:
return;
/* convert all tabs into single spaces */
c = cmdline;
while(*c != '\0')
{
if(*c == '\t')
*c = ' ';
c++;
}
c = cmdline;
i = 0;
/* now find all words on the command line */
while(*c != '\0')
{
if(state == STATE_WHITESPACE)
{
if(*c != ' ')
{
argv[i] = c; //将argv[i]指向c
i++;
state = STATE_WORD;
}
}
else
{ /* state == STATE_WORD */
if(*c == ' ')
{
*c = '\0';
state = STATE_WHITESPACE;
}
}
c++;
}
*argc = i;
#undef STATE_WHITESPACE
#undef STATE_WORD
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int GetCmdMatche(char *cmdline)
{
int i;
for(i=0; CMD_INNER[i].cmd!=NULL; i++)
{
if(strncmp(CMD_INNER[i].cmd, cmdline, strlen(CMD_INNER[i].cmd))==0)
return i;
}
return -1;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int Help(int argc, char *argv[])
{
int i;
for(i=0; CMD_INNER[i].cmd!=NULL; i++)
{
if(CMD_INNER[i].hlp!=NULL)
{
Uart_Printf(CMD_INNER[i].cmd);
Uart_Printf(" ------ ");
Uart_Printf(CMD_INNER[i].hlp);
Uart_SendByte('\n');
}
}
return 0;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int GetParameter(char *str, int cnt)
{
int i, key;
i = 0;
while(1)
{
key = Uart_Getch();
if(key)
{
if(key == ENTER_KEY)
{
str[i] = 0;
return i;
}
else if(key == BACK_KEY && i>0)
{
i--;
Uart_Printf("\b \b");
}
else if(key == 0x1b)
{
Uart_Getch();
Uart_Getch();
}
else if(key>=0x20 && key<=0x7e && i<cnt)
{
str[i++] = key;
Uart_SendByte(key);
}
}
}
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int SysClock(int argc, char *argv[])
{
Uart_Printf("System is running @ %dHz\n", MCLK);
return 0;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int GetDate(int argc, char *argv[])
{
int i, error = 0;
char tmp[8];
char *str;
unsigned int year, month, day;
RtcGetTime(&SysTime);
Uart_Printf("Current date is %d-%x-%x %s\n", SysTime.year, SysTime.month, SysTime.day, WeekDay[SysTime.weekday]);
if(argc<2)
return 0;
str = argv[1];
for(i=0; i<5; i++)
tmp[i] = str[i];
if(tmp[4]!='-')
error = 1;
year = strtodec(str, 4);
if(year<2000||error)
{
Uart_Printf("year error!\n");
return 0;
}
str += 5;
i = 0;
if(str[++i]!='-')
if(str[++i]!='-')
error = 1;
str[i] = 0;
month = strtobcd(str);
if((month-1)>0x11||error)
{
Uart_Printf("month error!\n");
return 0;
}
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)
{
Uart_Printf("day error!\n");
return 0;
}
SysTime.year = year-2000;
SysTime.month = month;
SysTime.day = day;
RtcSetDay(&SysTime);
Uart_Printf("Set date %d-%2.2x-%2.2x %s\n", year, month, day, WeekDay[SysTime.weekday]);
return 1;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int SetWeek(int argc, char *argv[])
{
int i;
int error = 0;
if(argc<2)
error = 1;
i = strtodec(argv[1], 1);
if((i-1)>5)
error = 1;
if(!error)
{
SysTime.weekday = i;
RtcSetWeek(&SysTime);
Uart_Printf("Set to %s\n", WeekDay[i]);
}
else
{
Uart_Printf("Please enter weekday\n");
Uart_Printf("0 : Sunday\n");
Uart_Printf("1 : Monday\n");
Uart_Printf("2 : Tuesday\n");
Uart_Printf("3 : Wednesday\n");
Uart_Printf("4 : Thursday\n");
Uart_Printf("5 : Friday\n");
Uart_Printf("6 : Satday\n");
}
return 0;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int GetTime(int argc, char *argv[])
{
int i, error = 0;
char *str;
unsigned int hour, min, sec;
RtcGetTime(&SysTime);
Uart_Printf("Current time is %2.2x:%2.2x:%2.2x\n", SysTime.hour, SysTime.min, SysTime.sec);
if(argc>1)
{
str = argv[1];
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
hour = strtobcd(str);
if(hour>0x23||error)
{
Uart_Printf("hour error!\n");
return error;
}
str += i+1;
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
min = strtobcd(str);
if(min>0x59||error)
{
Uart_Printf("minute error!\n");
return error;
}
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)
{
Uart_Printf("second error!\n");
return error;
}
SysTime.hour = hour;
SysTime.min = min;
SysTime.sec = sec;
RtcSetTime(&SysTime);
Uart_Printf("Set time %x:%x:%x\n", hour, min, sec);
}
return error;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int ChgSysMclk(int argc, char *argv[])
{
int i, mdiv, pdiv, sdiv;
char tmp[4];
Uart_Printf("This function is for adjust system running clock!!!\n");
Uart_Printf("Current clock is %dHz\n", MCLK);
Uart_Printf("Please enter the PLL parameter to use, mdiv[0-255], pdiv[0-63], sdiv[0-3]\n");
Uart_Printf("mdiv: ");
if((mdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
Uart_Printf("\nget mdiv Error!\n");
return 0;
}
Uart_Printf("\npdiv: ");
if((pdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
Uart_Printf("\nget pdiv Error!\n");
return 0;
}
Uart_Printf("\nsdiv: ");
if((sdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
Uart_Printf("\nget sdiv Error!\n");
return 0;
}
Uart_Printf("\nYou set System clock mdiv = %d, pdiv = %d, sdiv = %d\n", mdiv, pdiv, sdiv);
i = 8000;
while(i--);
ChangePllValue(mdiv, pdiv, sdiv);
i = 8000;
while(i--);
Uart_Init(0,SERIAL_BAUD);
Uart_Printf("Current clock is %dHz\n", MCLK);
return 0;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int ChgBaudRate(int argc, char *argv[])
{
int i;
unsigned int BaudSet [6] = {4800, 9600, 19200, 38400, 57600, 115200};
for(i=0; i<6; i++)
Uart_Printf("%d : %d\n", i, BaudSet[i]);
Uart_Printf("Please enter choice : ");
while(1)
{
int ch = Uart_Getch();
if(ch<='6'||ch>='0')
{
SERIAL_BAUD = BaudSet[ch-'0'];
Uart_Printf("Baud rate set to : %d\nPress any key to continue\n", SERIAL_BAUD);
i = 0x4000;
while(i--); //wait transmit end
Uart_Init(0,SERIAL_BAUD);
Uart_Getch();
break;
}
}
return 0;
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
int SetIpAddr(int argc, char *argv[])
{
int i, j, err = 0;
char *str;
char ch = '.';
if(argc<2)
{
Uart_Printf("IP address : %u.%u.%u.%u\n", (IP_ADDRESS>>24)&0xff, (IP_ADDRESS>>16)&0xff, (IP_ADDRESS>>8)&0xff, IP_ADDRESS&0xff);
return 0;
}
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]<0||ip[j]>254||err)
{
Uart_Printf("IP address error\n");
return -1;
}
str += i+1;
}
Uart_Printf("Set IP address : %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
IP_ADDRESS = (ip[0]<<24)|(ip[1]<<16)|(ip[2]<<8)|ip[3];
locnode.ip = IP_ADDRESS;
ArpInit();
return 0;
}
/*
*************************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -