📄 kslib.c
字号:
}
/*
* 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 + -