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

📄 kslib.c

📁 S3C4510B的例程
💻 C
📖 第 1 页 / 共 3 页
字号:
}

/*
 * 	Function :  ListOfCmd
 *	Description : List of Command line interface Command
 */
U32 ListOfCmd(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd)
{
	int index ;

	if (argc == 2)
		HelpCmdLi(1,NULL,NULL) ; 
	else
	{
		for (index = 0 ; index < MAX_NUMOF_COMMAND ; index++) 
		{
			Print("%-10s",gDiagCmdTable[index].cmd_name);
			if (index%6 == 5) Print("\r") ;
		}
		Print("\n") ;
	}

	return NO_ERROR;
}

/*
 * 	Function :  HelpCmdLi
 *	Description : Help of Command line interface 
 */
U32 HelpCmdLi(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd)
{
	int index ;

	Print("\n ===========================================================") ;
	Print("\r        SNDS Command line interface HELP     ") ;
	Print("\r ===========================================================") ;
	for (index = 0 ; index < MAX_NUMOF_COMMAND ; index++) 
	{
		Print("\r %-10s :  ",gDiagCmdTable[index].cmd_name);
		Print("%s ",gDiagCmdTable[index].cmd_help);
	}
	Print("\r ===========================================================\n") ;
	return NO_ERROR;
}

/*
 * 	Function :  MCopyCli, MFillCli,MDumpCli,MSearchCli
 *	Description : Memory Copy, Memory Fill, Memory Dump & Search 
 */
U32 MCopyCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32  src, dst,size ;
	U32 *lsrc, *ldst ;
	U16 *hsrc, *hdst ;
	U8  *bsrc, *bdst ;
	U8 bytesize ;

	if((argc != 5))
	{
		PrintHelpMessage("mc");
		Print("Useage: mc <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;
		return NO_ERROR;
	}		

	bytesize = (U8)*argv[1] ;
	src  = hexstrtohex(argv[2], sizeofstr(argv[2]));
	dst  = hexstrtohex(argv[3], sizeofstr(argv[3]));
	size = hexstrtohex(argv[4], sizeofstr(argv[4]));

	if (bytesize == MSIZE_BYTE)
		{
		bsrc  = (U8 *)src ;
		bdst  = (U8 *)dst ;
		bcopy(bsrc, bdst, size) ;
		}
	else if (bytesize == MSIZE_HALF)
		{
		hsrc  = (U16 *)src ;
		hdst  = (U16 *)dst ;
		scopy(hsrc, hdst, size) ;
		}
	else if (bytesize == MSIZE_LONG) 
		{
		lsrc  = (U32 *)src ;
		ldst  = (U32 *)dst ;
		wcopy(lsrc, ldst, size) ;
		}
	else Print("Useage: mc <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;

	return NO_ERROR;
}

U32 MFillCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32 *src, cnt, pattern ;

	if((argc != 4))
	{
		PrintHelpMessage("mf");
		Print("Useage: mf <TargetAddr> <Size> <Pattern> \n") ;
		return NO_ERROR;
	}		

	src = (U32 *)hexstrtohex(argv[1], sizeofstr(argv[1]));
	cnt = hexstrtohex(argv[2], sizeofstr(argv[2]));
	pattern = hexstrtohex(argv[3], sizeofstr(argv[3]));
	
	while(cnt--) *src++ = pattern ;

	return NO_ERROR;
}

U32 MDumpCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32 *base,*end,baseptr,size ;

	if((argc != 3))
	{
		PrintHelpMessage("md");
		Print("Useage: md <TargetAddr> <Size> \n") ;
		return NO_ERROR;
	}		

	baseptr  = hexstrtohex(argv[1], sizeofstr(argv[1]));
	base = (U32 *)baseptr ;
	size = hexstrtohex(argv[2], sizeofstr(argv[2]));
	end  = (U32 *)(baseptr + size) ;
	Print("\n $$ Memory Dump from 0x%x to 0x%x",base,end) ;

	MemDump(base, end);

	Print("\n") ;

	return NO_ERROR;
}

U32 MSearchCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32 *src,*dst,pattern ;
	int cnt ;

	if((argc != 4))
	{
	PrintHelpMessage("search");
	Print("Useage: search <SrcAddr> <DestinAddr> <SearchPattern> \n") ;
	return NO_ERROR;
	}		

	src  = (U32 *)hexstrtohex(argv[1], sizeofstr(argv[1]));
	dst  = (U32 *)hexstrtohex(argv[2], sizeofstr(argv[2]));
	pattern  = hexstrtohex(argv[3], sizeofstr(argv[3]));

	cnt = (int)(dst - src) ;

	Print("\n $$ Search 0x%x, from 0x%x to 0x%x \n", \
		pattern, src,dst) ;

	while(cnt--) 
	{
	if (*src == pattern) 
		Print("\r Searched at 0x%x",src) ;
		src++ ;
	}

	Print("\n") ;

	return NO_ERROR;
}

U32 MCompCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32  src, dst,size ;
	U32 *lsrc, *ldst ;
	U16 *hsrc, *hdst ;
	U8  *bsrc, *bdst ;
	U8 bytesize ;

	if((argc != 5))
	{
	PrintHelpMessage("mc");
	Print("Useage: compare <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;
	return NO_ERROR;
	}		

	bytesize = (U8)*argv[1] ;
	src  = hexstrtohex(argv[2], sizeofstr(argv[2]));
	dst  = hexstrtohex(argv[3], sizeofstr(argv[3]));
	size = hexstrtohex(argv[4], sizeofstr(argv[4]));

	if (bytesize == MSIZE_BYTE)
		{
		bsrc  = (U8 *)src ;
		bdst  = (U8 *)dst ;
		if (!bcomp(bsrc, bdst, size))
			{
			Print("\r $$$ Byte Compare FAIL !!!\n") ;
			return NO_ERROR;
			} 
		}
	else if (bytesize == MSIZE_HALF)
		{
		hsrc  = (U16 *)src ;
		hdst  = (U16 *)dst ;
		if (!scomp(hsrc, hdst, size))
			{
			Print("\r $$$ Short Compare FAIL !!!\n") ;
			return NO_ERROR;
			} 
		}
	else if (bytesize == MSIZE_LONG) 
		{
		lsrc  = (U32 *)src ;
		ldst  = (U32 *)dst ;
		if (!wcomp(lsrc, ldst, size))
			{
			Print("\r $$$ Word Compare FAIL !!!\n") ;
			return NO_ERROR;
			} 
		}
	else Print("Useage: compare <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;
	Print("\n $$$ Compare OK !\n") ;

	return NO_ERROR;
}


U32 MemTestCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
        U32 *src;    // Memory source address
        U32 *dst;    // Memory destination address
        U32 tsize;   // Memory Test size
        int lsize;   // memory test loop size

	if((argc != 5))
	{
	PrintHelpMessage("memtest");
	Print("Useage: memtest <SrcAddr> <DestinAddr> <Size> <LoopCount>\n") ;
	return NO_ERROR;
	}		

	ClearLcdDisplay() ;
	lPrint("MEM Test ..") ;

	src   = (U32 *)hexstrtohex(argv[1], sizeofstr(argv[1]));
	dst   = (U32 *)hexstrtohex(argv[2], sizeofstr(argv[2]));
	tsize = hexstrtohex(argv[3], sizeofstr(argv[3]));
	lsize = strtoint(argv[4], sizeofstr(argv[4]));

	Print("\r - Source Memory Location      : 0x%08x",src) ;
	Print("\r - Destination Memory Location : 0x%08x",dst) ;
	Print("\r - Memory Test Size            : 0x%08x",tsize) ;
	Print("\r - Memory Test Loop Count      : %d\r",lsize) ;

        if ( !MemTest(src,dst,tsize,lsize) ) 
		{
		Print("\n $$$ Memory Test Fail !!!") ;
		lPrint("FAIL.") ;
		}
	else 
		{
		Print("\n $$$ Memory Test Success !!! ") ;
		lPrint("Ok.") ;
		}

	Print("\n") ;
	return NO_ERROR;
}

U32 DmaTestCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
        U32 src;    // DMA source address
        U32 dst;    // DMA destination address
        U32 tsize;  // DMA Test size
        int lsize;  // DMA test loop size

	if((argc != 5))
	{
	PrintHelpMessage("dmatest");
	Print("Useage: dmatest <SrcAddr> <DestinAddr> <Size> <LoopCount>\n") ;
	return NO_ERROR;
	}		

	ClearLcdDisplay() ;
	lPrint("DMA Test ..") ;
        GdmaReset(0); 
        GdmaReset(1); 
        GdmaIntEnable(0);
        GdmaIntEnable(1);

	src   = hexstrtohex(argv[1], sizeofstr(argv[1]));
	dst   = hexstrtohex(argv[2], sizeofstr(argv[2]));
	tsize = hexstrtohex(argv[3], sizeofstr(argv[3]));
	lsize = strtoint(argv[4], sizeofstr(argv[4]));

	Print("\r - Source Memory Location      : 0x%08x",src) ;
	Print("\r - Destination Memory Location : 0x%08x",dst) ;
	Print("\r - DMA Test Size               : 0x%08x",tsize) ;
	Print("\r - DMA Test Loop Count         : %d\r",lsize) ;

        if ( !DmaAutoTest(src,dst,tsize,lsize) ) 
		{
		Print("\n $$$ DMA Test FAIL !!!") ;
		lPrint("FAIL.") ;
		}
	else 
		{
		Print("\n $$$ DMA Test PASS !!! ") ;
		lPrint("Ok.") ;
		}

        GdmaIntDisable(0);
        GdmaIntDisable(1);
	Print("\n") ;
	return NO_ERROR;
}

U32 DCopyCli(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32  src, dst,size ;
	U8 bytesize ;

	if((argc != 5))
	{
		PrintHelpMessage("dcopy");
		Print("Useage: dcopy <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;
		return NO_ERROR;
	}		

        GdmaReset(0); 
        GdmaIntEnable(0);

	bytesize = (U8)*argv[1] ;
	src  = hexstrtohex(argv[2], sizeofstr(argv[2]));
	dst  = hexstrtohex(argv[3], sizeofstr(argv[3]));
	size = hexstrtohex(argv[4], sizeofstr(argv[4]));

	if (bytesize == MSIZE_BYTE)
		dcopy(src, dst, size,TxBYTE) ;
	else if (bytesize == MSIZE_HALF)
		dcopy(src, dst, size,TxHWORD) ;
	else if (bytesize == MSIZE_LONG) 
		dcopy(src, dst, size,TxWORD) ;
	else Print("Useage: dcopy <b/h/l> <SrcAddr> <DestinAddr> <Size> \n") ;

        GdmaIntDisable(0);
	Print("\n") ;

	return NO_ERROR;
}

U32 CacheCmdLi(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd) 
{
	U32  Reg, n ;

	if((argc < 2))
	{
	PrintHelpMessage("cache");
	Print("Useage: cache <on/off/conf> <4/8>\n") ;
	return NO_ERROR;
	}		

	n = hexstrtohex(argv[2], sizeofstr(argv[2]));

	if (!str_ncmp(argv[1],"on",sizeofstr(argv[1]))) 
		{
        	SYSCFG &= ~STALL; 	// Stall Disable
        	SYSCFG |= WRITE_BUFF;  	// Write Buffer Enable
     		SYSCFG &= ~CACHE;      	// Disable cache before 
					// cache mode change  
     		Reg = (~CACHE_MODE & SYSCFG); // clear previous CM bit
		// Cache Mode Change
		if (n==4) 
        		Reg |= (CACHE_MODE & (0<<4)); 
		else if (n==8) 
        		Reg |= (CACHE_MODE & (1<<4)); 
      		SYSCFG = Reg;
     		CacheFlush();   // Tag ram clear before cache enable
	        SYSCFG |= CACHE; 
		}

	else if (!str_ncmp(argv[1],"off",sizeofstr(argv[1]))) 
		{
        	SYSCFG &= ~WRITE_BUFF;  // Write Buffer Enable
     		SYSCFG &= ~CACHE;      	// Disable cache before 
     		Reg = (~CACHE_MODE & SYSCFG); // clear previous CM bit
		// Cache Mode Change
        	Reg |= (CACHE_MODE & (2<<4)); 
      		SYSCFG = Reg;
		}
	else if (!str_ncmp(argv[1],"conf",sizeofstr(argv[1]))) 
			CacheConfig() ;
	
	
	Print("\n") ;
	return NO_ERROR;
}

/*
 * 	Function :  MacCmdLi
 *	Description : MAC Test Program for Command Line 
 */
U32 MacCmdLi(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd)
{
	
	//U8 *FirstTestMode, *SecondTestMode ;
	char *maccmd[] = {"loop","rx","tx","capture","show","addr","help"} ;
	U32 cmdindex ;

	if((argc < 2))
	{
		PrintHelpMessage("mac");
		return NO_ERROR;
	}		

	ClearLcdDisplay() ;
	lPrint("MAC Test ..") ;
	for (cmdindex =0 ; cmdindex < 7 ; cmdindex++)
	{
		if (!str_ncmp(maccmd[cmdindex],argv[1],sizeofstr(argv[1]))) 
					break ;
	}

	switch (cmdindex)
	{
	case 0 : // Loop Test
		if (!str_ncmp(argv[2],"all",sizeofstr(argv[2]))) 
			MacAllLoopBack() ;
		else if (!str_ncmp(argv[2],"internal",sizeofstr(argv[2]))) 
			MacInternalLoopBack() ;
		else if (!str_ncmp(argv[2],"phy",sizeofstr(argv[2]))) 
			{
			PhyNoColLoopBack() ;
			PhyColLoopBack() ;
			}
		else if (!str_ncmp(argv[2],"ether",sizeofstr(argv[2]))) 
			InterruptLoopBackTest() ;
		else if (!str_ncmp(argv[2],"poll",sizeofstr(argv[2]))) 
			MacPollLoopBack(); 
		break ;
	case 1 : // Rx
		RxMacFrame() ; break ;
	case 2 : // Tx
		if (!str_ncmp(argv[2],"single",sizeofstr(argv[2]))) 
			SingleTransfer(); 
		else if (!str_ncmp(argv[2],"multi",sizeofstr(argv[2]))) 
			Eth_Multi_Transmit() ; 
		else if (!str_ncmp(argv[2],"control",sizeofstr(argv[2]))) 
			ControlFrameTransfer(); 
		break ;
	case 3 : // Capture
		if (!str_ncmp(argv[2],"all",sizeofstr(argv[2]))) 
				CaptureAllRxFrame() ; 
		else if (!str_ncmp(argv[2],"my",sizeofstr(argv[2]))) 
				CaptureMyRxFrame() ; 
		else if (!str_ncmp(argv[2],"broad",sizeofstr(argv[2]))) 
				CaptureBroadFrame() ; 
		else if (!str_ncmp(argv[2],"control",sizeofstr(argv[2]))) 
				CaptureCntlFrame() ; 
		else if (!str_ncmp(argv[2],"destin",sizeofstr(argv[2]))) 
				CaptureMatchedDest() ; 
		break ;
	case 4 : // Show
		ShowRecevedFrameData() ; break ;
		break ;
	case 5 : // MAC Physical Address Setup
		if (!str_ncmp(argv[2],"read",sizeofstr(argv[2]))) 
				MacAddrRead() ;
		else if (!str_ncmp(argv[2],"write",sizeofstr(argv[2]))) 
				MacAddrWrite() ;
		break ;
	case 6 : // MAC Help
		Print("\nUseage: mac <Cmd 1> <Cmd 2>") ;
		Print("\r<Cmd 1>") ;
		Print("\r 1. loop    : MAC Loopback test function") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) all : internal,phy loopback test") ;
		Print("\r       2) internal : MAC internal loopback test") ;
		Print("\r       3) phy : MAC-to-PHY loopback test") ;
		Print("\r       4) ether : loopback by physical ethernet cable") ;
		Print("\r       5) poll : Polling Mode loopback test") ;
		Print("\r 2. rx      : receive MAC frame and display by one packet") ;
		Print("\r 3. tx      : transfer MAC frame") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) single : Transfer single frame") ;
		Print("\r       2) multi : Transfer single frame ") ;
		Print("\r       3) control : Transfer control frame") ;
		Print("\r 4. capture : Capture received MAC frame and store") ;
		Print("\r              you can show received frame by [show] command") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) all : Capture all frame") ;
		Print("\r       2) my : Capture my mac address frame ") ;
		Print("\r       3) broad : Capture broadcast frame") ;
		Print("\r       4) control : Capture control frame") ;
		Print("\r       5) destin : Capture matched destination address frame");
		Print("\r 5. show    : Showing captured frame") ;
		Print("\r 6. addr    : MAC Address change and view in IIC EEPROM") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) read  : Read MAC Address") ;
		Print("\r       2) write : Write MAC Address") ;
		Print("\r 7. help    : this message") ;
		break ;
	default  : 
		Print("\r Invalid MAC test item is selected") ; 
		break ;
	}


	Print("\n") ;
	return NO_ERROR;
}

/*
 * 	Function :  HdlcCmdLi
 *	Description : Hdlc Test Program for Command Line 
 */
U32 HdlcCmdLi(U8 argc, char (*argv)[MAX_LENGTHOF_ARGS],CMDPOOL *pCmd)
{
	
	//char *hdlccmd[] = {"loop","rx","tx","capture","show","addr","help"} ;
	char *hdlccmd[] = {"reg","loop","dma","capture","show","addr","help"} ;
	char *hdlcchannel[] = {"a","b"} ;
	U32 cmdindex ;
	U32 channel;

	if((argc < 2))
	{
		PrintHelpMessage("hdlc");
		return NO_ERROR;
	}		

	ClearLcdDisplay() ;
	lPrint("HDLC Test ..") ;
	for (cmdindex =0 ; cmdindex < 7 ; cmdindex++)
	{
		if (!str_ncmp(hdlccmd[cmdindex],argv[1],sizeofstr(argv[1]))) 
					break ;
	}
	for (channel =0 ; channel < 2 ; channel++)
	{
		if (!str_ncmp(hdlcchannel[channel],argv[2],sizeofstr(argv[2]))) 
					break ;
	}

	switch (cmdindex)
	{
	case 0 : // register set
		if (!str_ncmp(argv[2],"reg",sizeofstr(argv[2]))) {
			if (!str_ncmp(argv[3],"a",sizeofstr(argv[3]))) 
				RegSetDiag(HDLCA) ;
			else if (!str_ncmp(argv[3],"b",sizeofstr(argv[3]))) 
				RegSetDiag(HDLCB) ;
		}
		break ;

	case 1 : // Loop Test
		if (!str_ncmp(argv[2],"internal",sizeofstr(argv[2]))) 
			if (!str_ncmp(argv[3],"a",sizeofstr(argv[3]))) 
				HdlcInternalLoopback(HDLCA,10) ;
			else if (!str_ncmp(argv[3],"b",sizeofstr(argv[3]))) 
				HdlcInternalLoopback(HDLCB,10) ;
		break ;
	case 2 : // DMA
		//HDMA_Test(channel);
		break ;
	case 3 : // Capture
		break ;
	case 4 : // Show
		break ;
	case 5 : // HDLC Station Address Setup
		break ;
	case 6 : // HDLC Help
		Print("\nUseage: hdlc <Cmd 1> <Cmd 2>") ;
		Print("\r<Cmd 1>") ;
		Print("\r 1. loop    : HDLC Loopback test function") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) all : All HDLC loopback test") ;
		Print("\r       2) internal : HDLC internal loopback test") ;
		Print("\r 2. rx      : receive HDLC frame and display by one packet") ;
		Print("\r 3. tx      : transfer HDLC frame") ;
		Print("\r    <Cmd 2> ") ;
		Print("\r       1) single : Transfer single frame") ;
		Print("\r       2) multi : Transfer single frame ") ;
		Print("\r 4. capture : Capture received HDLC frame and store") ;
		Print("\r              you can show received frame by [show] command") ;
		Print("\r 5. show    : Showing captured frame") ;
		Print("\r 6. addr    : HDLC Address change and view in IIC EEPROM") ;
		Print("\r 7. help    : this message") ;
		break ;

⌨️ 快捷键说明

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