⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell.c

📁 arm7 s3c44b0x开发板fs44b的bios启动源代码及使用说明 下载方法等
💻 C
📖 第 1 页 / 共 4 页
字号:
			}
		}
		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 + -