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

📄 cli_cmd.c

📁 在freescale 的ne64上开发的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	position+=sizeof(localmachine.defgw)/2;

	/*write trap-server addr&port 5*3words*/
	for(i=0;i<5;i++)
	{
		memcpy((UINT8 *)(buffer+position),&(gTrapServer[i].addr),4);
		position+=sizeof(gTrapServer[i].addr)/2;
		memcpy((UINT8 *)(buffer+position),&(gTrapServer[i].port),2);
		position+=sizeof(gTrapServer[i].port)/2;
	}

	/*write manager vid*/
	memcpy((UINT8 *)(buffer+position),&manager_first_vid,2);
	position++;
	memcpy((UINT8 *)(buffer+position),&manager_second_vid,2);
	position++;
	/*write snmp community 5*8.5words*/
	for(i=0;i<5;i++)
	{
		memcpy((UINT8 *)(buffer+position),gCommunity[i].name,sizeof(gCommunity[i].name));
		position+=sizeof(gCommunity[i].name)/2;
		memcpy((UINT8 *)(buffer+position),&(gCommunity[i].ability),1);
		position++;
		
	}
#endif	
	buffer[position++]=(UINT16)('@'<<8 |'@');
	buffer[position++]=(UINT16)('@'<<8 |'@');
	
	Flash_Write_Block(buffer,WRITEADDR,position);
}

void write_file_cmd(void)
{
	UINT8 key;

	printf("  Save the configuration! Continue?(y/n) [y]");
	waitInput=1;
	/*key=TERM_Read();*/key=TERMIO_GetChar();
	init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);
	if(key=='y' || key=='Y' || key=='\n' || key=='\r')
	{
		if(cli_reset==1)
		{
			return;
		}
	}
	else
	{
		printf("\n\r");
		return;
	}
	printf("\n\r");
	
	sys_cfg_save();
}

void erase_file_cmd(void)
{		
	UINT16 *addr;
	UINT16 buffer[2];
	UINT8 key;

	printf("  Erase the configuration! Continue?(y/n) [y]");
	waitInput=1;
	/*key=TERM_Read();*/key=TERMIO_GetChar();
	init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);				
	if(key=='y' || key=='Y' || key=='\n' || key=='\r')
	{
		if(cli_reset==1)
		{
			return;
		}
	}
	else
	{
		printf("\n\r");
		return;
	}
	printf("\n\r");
	
	Flash_Erase_Sector(WRITEADDR);/*erase sector*/	
	addr = WRITEADDR;
	memset((UINT8 *)buffer,0,4);
	Flash_Write_Block(buffer,WRITEADDR,2);
}


void reboot_cmd(void)
{
	UINT8 key = 0;

	printf("  WARNING:System will reboot! Continue?(y/n) [y]");
	waitInput=1;
	/*key=TERM_Read();*/key=TERMIO_GetChar();
	init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);	
	if(key=='y' || key=='Y' || key=='\n' || key=='\r')
	{
		if(cli_reset==0)
		{
			printf("\n\r  System Rebooting,Please wait...\n\r");
			hwReboot();
		}
	}
	printf("\n\r");
}


UINT32 valid_input_number(UINT8 *str,UINT16 minVal,UINT16 maxVal,UINT16 *num)
{
	UINT8 len;		
	UINT16 tmp;
	UINT32 i;
	if(*str==0)
	{
		*num=0;
		return;
	}
	if((*str=='0')&&((*(str+1)=='x')||(*(str+1)=='X')))/*hex*/
	{
		if((strlen(str) > 6) || (strlen(str) < 3))
		{
			printf("  %%Invalid input :%s\n\r",str);
			return 0;
		}
		len = (strlen(str)-2);
		*num = 0;
		for(i=2;i<(len+2);i++)
		{
			if((*(str+i)>='0')&&(*(str+i)<='9'))
			{
				tmp = (*(str+i)-'0');
				tmp <<= ((len+1-i)*4);
				*num += tmp;				
			}
			else if((*(str+i)>='a')&&(*(str+i)<='f'))
			{
				tmp = (*(str+i)-'a'+10);
				tmp <<= ((len+1-i)*4);
				*num += tmp;
			}
			else if((*(str+i)>='A')&&(*(str+i)<='F'))
			{
				tmp = (*(str+i)-'A'+10);
				tmp <<= ((len+1-i)*4);
				*num += tmp;
			}
			else
			{
				printf("  %%Invalid input :%s\n\r",str);
				return 0;
			}					
		}		
	}
	else /*int*/
	{		
		for(i=0;i<strlen(str);i++)
		{
			if( (*(str+i) >'9') || (*(str+i)<'0'))
			{
				printf("  %%Invalid input :%s\n\r",str);
				return 0;
			}
		}
		i=atoi(str);		
		*num=(UINT16)i;
	}
	
	if(*num>maxVal)
	{
		printf("  %%Invalid input :%s,max value is %u\n\r",str,maxVal);
		return 0;
	}
	else if(*num<minVal)
	{
		printf("  %%Invalid input :%s,min value is %u\n\r",str,minVal);
		return 0;
	}
	return 1;
}

UINT8 ConvertOneByte(UINT8 oldByte)
{
	UINT8 newByte=0;
	UINT32 i=0;
	
	for(i=0;i<=7;i++)
	{
		if( oldByte & (0x01<<i) )
			newByte |= (0x80>>i);
	}
	return newByte;	
}

UINT32 listToString(UINT8 *list,UINT8 listLen,UINT8 *string)
{
	UINT8 i;
	UINT8 str[8];
	UINT8 start=0,end=0;
	UINT8 index;
	UINT8 flag=-1;
	for(i=0;i<listLen*8;i++)
	{
		if(bitListTst(list,i)>0)
		{
			index=i+1;
			if(start<=0)
			{
				start=index;
				end=index;
				sprintf(str,"%d",start);
				strcat(string,str);
			}
			if(index-end>1)
			{
				if(end>start)
				{
					sprintf(str,"-%d",end);
					strcat(string,str);
				}
				start=index;
				end=index;
				sprintf(str,",%d",index);
				strcat(string,str);
			}
			else
				end=index;
			flag=0;
		}
	}
	if(end>start)
	{
		sprintf(str,"-%d",end);
		strcat(string,str);
	}
	return flag;
}

UINT8 valid_port_list(UINT8 *portstr,UINT8 *portlist)
{
	UINT8 *temp=portstr;
	UINT8 port,i;
	UINT8 from=1;
	UINT8 to=1;
	UINT8 fsm=0;/*status machine----0:start
					1:last character is ","
					2:last character is "-"
				    3:last character is number*/
	while(temp!=NULL && *temp!='\0')
	{
		switch(*temp)
		{
		case ',':
			if(fsm==3)
			{
				bitListSet(portlist,port-1);				
			}
			else
			{
				printf("  %%Invalid input :%s\n\r",portstr);
				return 0;
			}
			fsm=1;
			temp++;
			break;
		case '-':
			if(fsm!=3)
			{
				printf("  %%Invalid input :%s\n\r",portstr);
				return 0;
			}
			temp++;
			fsm=2;
			break;
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			port=atoi(temp);			
			if(port>MAX_PORT)
			{
				printf("  %%Invalid input :%s\n\r",portstr);
				return 0;
			}
			if(port>=10)
				temp+=2;
			else
				temp++;
			if(fsm==2)
			{
				to=port;
				if(from>to)
				{
					printf("  %%Invalid input :%s\n\r",portstr);
					return 0;
				}
				else
				{					
					for(i=from;i<=to;i++)
					{
						bitListSet(portlist,i-1);
					}
				}
			}
			else if(fsm==0 || fsm==1)
			{				
				bitListSet(portlist,port-1);				
				from=port;
			}
			else
			{
				printf("  %%Invalid input :%s\n\r",portstr);
				return 0;
			}
			fsm=3;
			break;
		default:
			printf("  %%Invalid input :%s\n\r",portstr);
			return 0;
			break;
		}
	}
	return 1;
}

UINT8 valid_mac_addr(UINT8* mac_str)
{     
     	UINT8 i;     
     	INT8 last_dot_place=-1;
     	UINT8 dot_number=0;    
    
     	if(strlen(mac_str)!=MAX_MAC_ADDR_LENTH)    
          	return 0; 
     
     	for(i=0;i<strlen(mac_str);i++)
     	{
        	if( (mac_str[i]==SEPERATE_CHAR_2 || mac_str[i]==SEPERATE_CHAR_1) && (i-last_dot_place)==3)
        	{
        		last_dot_place=i;
                 	dot_number++;
         	}
     		if((mac_str[i] !=SEPERATE_CHAR_2) && (mac_str[i] !=SEPERATE_CHAR_1) && ( ( mac_str[i]>'F'  || mac_str[i] <'A') && 
                           (mac_str[i] >'f' || mac_str[i]<'a') 
                           && (mac_str[i]<'0' || mac_str[i] >'9') )  )         
              		return 0;             
      	}      
    	if(dot_number!=MAX_DOT_NUMBER)
           	return 0;  
     	return 1;
}      

UINT8 mac_strtohex(UINT8*mac_str,UINT8* mac_hex)
{           
       mac_hex[0]=16*chartoint(mac_str[0])+chartoint(mac_str[1]);
       mac_hex[1]=16*chartoint(mac_str[3])+chartoint(mac_str[4]);
       mac_hex[2]=16*chartoint(mac_str[6])+chartoint(mac_str[7]);
       mac_hex[3]=16*chartoint(mac_str[9])+chartoint(mac_str[10]);
       mac_hex[4]=16*chartoint(mac_str[12])+chartoint(mac_str[13]);
       mac_hex[5]=16*chartoint(mac_str[15])+chartoint(mac_str[16]);  
       return 1;       
}

UINT32 chartoint(UINT8 x)
{ 
	UINT32 value=0;         
	
	switch(x)
	{
		case 'A':
		case 'B':
		case 'C':
		case 'D':
		case 'E':
		case 'F':
  	   		value=x-'A'+10;
			break;
		case 'a':
		case 'b':
		case 'c':
		case 'd':
		case 'e':
		case 'f':
  	   		value=x-'a'+10;
			break;	    
	      	case '0':
 	      	case '1':
		case '2':
       	case '3':
       	case '4':
       	case '5':
       	case '6':
       	case '7':
       	case '8':
       	case '9':
               	value=x-'0';
               	break;
       	default:           	
       	  	break;      
     	}
     	return value;
}

UINT8 rmtManageChk(void)
{
	if(rmtCfgFlag)
	{
		printf("  %%Failed because managed by local device\n\r");
		return TRUE;
	}
	return FALSE;
}

void show_version_cmd(void)
{	
	printf("  SoftWare Version : V1.3\n\r");
	printf("  HardWare Version : V0.%d\n\r",localHWVersion);
	printf("  Copyright 2000-2006 FiberHome Networks\n\r");
}

void show_system_cmd(void)
{
	UINT8 port,byte;
	UINT8 *addr;
	UINT16 word;

	if(localDTEType == OL100CR_X4X_V5)
		printf("  Device Type: OL100CR-X4X-V5\n\r");
	else
		printf("  Device Type: OL100CR-GE-XXX-XXX-V5\n\r");

	printf("  Device Mac Address: %02X:%02X:%02X:%02X:%02X:%02X\n\r",hard_addr[0],
		hard_addr[1],hard_addr[2],hard_addr[3],hard_addr[4],hard_addr[5]);

	addr=MACRADDR;
	addr+=10;
	byte=*addr++;
	if(byte!='F')
		return;
	byte=*addr++;
	if(byte!='X')
		return;

	for(port=1;port<=MAX_PORT;port++)
	{
		printf("  Device Port %d Information\n\r",port);
		if((port==1)&&(localDTEType==OL100CR_X4X_V5))
		{
			printf("    Type: Twisted-pair Port\n\r");
			printf("    Physical Connector: RJ45\n\r");
			addr += 10;
		}
		else
		{
			printf("    Type: ");
			byte=*addr++;
			if(byte==1)
				printf("Double-fiber Port\n\r");
			else if(byte==2)				
				printf("Single-fiber port\n\r");
			else
				printf("Unknown Type\n\r");
			addr++;
			byte=*addr++;
			printf("    Physical Connector: ");
			switch(byte)
			{
				case 1:
					printf("SC Connector\n\r");
					break;
				case 2:
					printf("FC Connector\n\r");
					break;
				case 3:
					printf("ST Connector\n\r");
					break;
				case 4:
					printf("LC Connector\n\r");
					break;
				default:
					printf("Unknown\n\r");
					break;
			}
			addr++;
			addr+=2;
			byte=*addr++;
			word=(UINT16)(byte<<8);
			byte=*addr++;
			word+=byte;
			addr-=7;
			byte=*addr++;
			printf("    TX Wavelength: ");
			if((word==0xffff)||(word==0))
			{
				printf("Unknown Wavelength\n\r");
			}
			else
			{
				switch(byte)
				{
					case 1:
						printf("Multi-mode %d nm\n\r",word);
						break;
					case 2:
						printf("Single-mode %d nm\n\r",word);
						break;
					case 3:
						printf("CWDM Wavelength %d nm\n\r",word);
						break;
					default:
						printf("Unknown Wavelength\n\r");
						break;
				}
			}
			addr+=6;
			byte=*addr++;
			word=(UINT16)(byte<<8);
			byte=*addr++;
			word+=byte;
			addr-=9;
			byte=*addr++;
			printf("    RX Wavelength: ");
			if((word==0xffff)||(word==0))
			{
				printf("Unknown Wavelength\n\r");
			}
			else
			{
				switch(byte)
				{
					case 1:
						printf("Multi-mode %d nm\n\r",word);
						break;
					case 2:
						printf("Single-mode %d nm\n\r",word);
						break;
					case 3:
						printf("CWDM Wavelength %d nm\n\r",word);
						break;
					default:
						printf("Unknown Wavelength\n\r");
						break;
				}
			}
			addr+=2;
			byte=*addr++;
			word=(UINT16)(byte<<8);
			byte=*addr++;
			word+=byte;
			if((word==0xffff)||(word==0))
				printf("    Transmit Distance: Unknown\n\r");
			else
				printf("    Transmit Distance: %d %s\n\r",word,(word>120)?"m":"Km");
			addr+=4;
		}
	}
}

void show_log_cmd(void)
{	
	UINT8 i;
	
	printf("  System run %d years %d days %d hours %d minutes %d seconds.\n\r",sysRunYear,sysRunDay,sysRunHour,sysRunMin,sysRunSec);

	if(sysLogCurrent == 0)
		i = SYS_LOG_MAX - 1;
	else
		i = sysLogCurrent - 1;
	
	for(;;)
	{
		if(sysLog[i][0]!=0)
			printf("  %s\n\r",&sysLog[i][0]);

		if(i==sysLogCurrent)
			break;
		
		if(i==0)
			i = SYS_LOG_MAX - 1;
		else
			i -= 1;
	}
}

void hostname_cmd()
{
	if(strlen(cmd[1])>15)
	{
		printf("  %%hostname must be less than 15 characters\n\r");
		return;
	}
	strcpy(hostname,cmd[1]);
	return;
}

void password_cmd()
{
	if(strlen(cmd[1])>7)
	{
		printf("  %%password must be less than 8 characters\n\r");
		return;		
	}
	strcpy(password,cmd[1]);
	return;	
}

void port_shutdown_cmd(void)
{
	UINT8 ports[MAX_PORT/2];
	UINT8 i;

	if(rmtManageChk()==TRUE)
		return;
	
	for(i=0;i<MAX_PORT/2;i++)
		ports[i]=0;
	if(valid_port_list(cmd[1],ports)==0)
		return;
	for(i=1;i<=MAX_PORT;i++)
	{
		if(bitListTst(ports,i-1)==1)
		{
			if(hwSetPortStat(i,0)==ERROR)
			{
				//printf("  %%Failed to shutdown port %d\n\r",i);
				continue;
			}
		}
	}
}

void port_no_shutdown_cmd(void)
{
	UINT8 ports[MAX_PORT/2];
	UINT8 i;

	if(rmtManageChk()==TRUE)
		return;
	
	for(i=0;i<MAX_PORT/2;i++)
		ports[i]=0;
	if(valid_port_list(cmd[1],ports)==0)
		return;
	for(i=1;i<=MAX_PORT;i++)
	{
		if(bitListTst(ports,i-1)==1)
		{
			if(hwSetPortStat(i,1)==ERROR)
			{
				//printf("  %%Failed to no-shutdown port %d\n\r",i);
				continue;
			}
		}
	}
}

void show_if_cmd(void)
{
	UINT8 port;
	UINT8 u8Val;
	UINT16 u16Val=0;
	
	printf("*********Interface Infomation************\n\r");
	printf(" Port ");
	printf("Admin ");	
	printf("Link ");
	printf("Cur-Dplx/Spd  ");	
	printf("Cfg-Auto/Dplx/Spd  ");
	printf("FlowCtrl ");	
	printf("TxRateLmt \n\r");
		
	for(port=1;port<=MAX_PORT;port++)
	{
		printf(" %d    ",port);
		u8Val=1;
		hwGetPortStat(port, &u8Val);
		if(u8Val==0)			
			printf("Down  ");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -