📄 ctc.c
字号:
goto ProcessLine_syntax;
}
if ( pParser->TMCons.dwWindowSize == 0 )
{
pParser->TMCons.fUseWindowSize = FALSE;
}
else
{
pParser->TMCons.fUseWindowSize = TRUE;
}
pParser->wState = CMD_WAIT;
break;
/*
commands for in | out | err redirection
*/
case SI_CMD :
pParser->wState = SI_FILENAME;
break;
case SI_FILENAME :
if ( pParser->TMCons.fRedirectedStdin )
//if ( pParser->CmdSIParam.fFlag )
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdOut Alread Redirected\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
}
/*
if ( ( pParser->CmdSIParam.dwFile = (DWORD)open ( szToken,
_O_BINARY | O_RDONLY ) ) == 0xffffffff )
goto ProcessLine_iofail;
pParser->CmdSIParam.fFlag = TRUE;
*/
strcpy ( pParser->TMCons.szFilenameStdin, szToken );
pParser->TMCons.fRedirectedStdin = TRUE;
pParser->wState = CMD_WAIT;
break;
case EI_CMD :
if ( pParser->TMCons.fRedirectedStdin )
//if ( pParser->CmdSIParam.fFlag )
{
//close ( pParser->CmdSIParam.dwFile );
//pParser->CmdSIParam.fFlag = FALSE;
pParser->TMCons.fRedirectedStdin = FALSE;
}
else
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdIn Not Redirected\r\n");
}
pParser->wState = CMD_WAIT;
break;
case SO_CMD :
pParser->wState = SO_FILENAME;
break;
case SO_FILENAME :
if ( pParser->TMCons.fRedirectedStdout )
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdOut Alread Redirected\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
}
strcpy ( pParser->TMCons.szFilenameStdout, szToken );
pParser->TMCons.fRedirectedStdout = TRUE;
pParser->wState = CMD_WAIT;
break;
case EO_CMD :
if ( pParser->TMCons.fRedirectedStdout )
{
pParser->TMCons.fRedirectedStdout = FALSE;
}
else
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdOut Not Redirected\r\n");
}
pParser->wState = CMD_WAIT;
break;
case SE_CMD :
pParser->wState = SE_FILENAME;
break;
case SE_FILENAME :
if ( pParser->TMCons.fRedirectedStderr )
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdErr Alread Redirected\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
}
strcpy ( pParser->TMCons.szFilenameStderr, szToken );
pParser->TMCons.fRedirectedStderr = TRUE;
pParser->wState = CMD_WAIT;
break;
case EE_CMD :
if ( pParser->TMCons.fRedirectedStderr )
{
pParser->TMCons.fRedirectedStderr = FALSE;
}
else
{
(*pParser->WriteStr) ( pParser->pDevice,
"\r\nTMMon : ERROR : StdErr Not Redirected\r\n");
}
pParser->wState = CMD_WAIT;
break;
/*
Read the DMA memory on the PC
*/
case RL_CMD :
pParser->wState = RL_ADDRESS;
break;
case RL_ADDRESS :
if ( IsValidHex ( szToken, 8 ) == FALSE )
{
goto ProcessLine_syntax;
}
if ( sscanf( szToken,"%x", &pParser->dwAddress ) != 1)
{
goto ProcessLine_syntax;
}
if ( ( pParser->dwAddress < halGetDMABase(pParser->pTMHW) ) ||
( pParser->dwAddress > ( halGetDMABase(pParser->pTMHW) +
halGetDMALen(pParser->pTMHW) ) ) )
{
goto ProcessLine_range;
}
pParser->wState = RL_LENGTH;
break;
case RL_LENGTH :
if ( sscanf( szToken,"%x", &pParser->dwLength ) != 1)
{
goto ProcessLine_syntax;
}
if ( pParser->dwLength > halGetDMALen(pParser->pTMHW) )
{
goto ProcessLine_range;
}
for ( pParser->dwLinesWritten = 0, dwMemIdx = 0 ;
dwMemIdx < pParser->dwLength ; )
{
pParser->szOutputString[0] = 0;
sprintf ( szTempString, "\r\n%08x :", pParser->dwAddress );
strcat ( pParser->szOutputString, szTempString );
for ( dwScrIdx = 0 ;
((dwMemIdx < pParser->dwLength ) &&
(dwScrIdx < 0x4)) ;
dwScrIdx++, dwMemIdx+= 4, pParser->dwAddress += 4 )
{
dwValue = *(PDWORD)((PBYTE)halGetDMALin(pParser->pTMHW) +
( pParser->dwAddress - halGetDMABase(pParser->pTMHW)) );
sprintf ( szTempString, " %08x", dwValue );
strcat ( pParser->szOutputString, szTempString );
}
//strcat (pParser->szOutputString , "\r\n" );
pParser->WriteStr ( pParser->pDevice, pParser->szOutputString );
// stop the screen from scrolling.
ScreenScroll ( pParser );
} //for
pParser->wState = CMD_WAIT;
break;
default :
pParser->WriteStr(pParser->pDevice,
"\r\nERROR : Not yet implemented");
pParser->wState = CMD_WAIT;
break;
}
}
return TRUE;
ProcessLine_iofail :
(*pParser->WriteStr) ( pParser->pDevice, "\r\nTMMon : ERROR : File Opening Failed\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
ProcessLine_range :
(*pParser->WriteStr) ( pParser->pDevice, "\r\nTMMon : ERROR : Out of SDRAM | MMIO Range\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
ProcessLine_syntax :
(*pParser->WriteStr) ( pParser->pDevice, "\r\nTMMon : ERROR : Command Syntax\r\n");
pParser->wState = CMD_WAIT;
return TRUE;
}
/*----------------------------------------------------------------------------
FUNC ScreenScroll
----------------------------------------------------------------------------*/
BOOL ScreenScroll ( PVOID pContext )
{
CHAR bChar;
PPARSER pParser = (PPARSER)pContext;
if ( pParser->dwScreenSize == 0 )
return FALSE;
if ( pParser->dwLinesWritten++ > pParser->dwScreenSize )
{
pParser->WriteStr ( pParser->pDevice,"\r\n:>");
pParser->ReadChar ( pParser->pDevice, &bChar, 1);
//pParser->WriteStr ( pParser->pDevice, "\b\b" );
pParser->dwLinesWritten = 0 ;
return TRUE;
}
return FALSE;
}
VOID main ( int argc, char *argv[] )
{
PCOMM_OBJECT pComm = NULL;
PCONS_OBJECT pCons = NULL;
PCOMM_VTBL pCommVtbl;
PCONS_VTBL pConsVtbl;
CHAR bChar = 0;
CHAR szTemp[MAX_STRING];
PPARSER pParser = &Parser;
// required for processing arguments
WORD wIdxArg;
BOOL fSerial = FALSE;
DWORD dwBaud = 0 ;
DWORD dwPort = 0 ;
BOOL fBatch = FALSE;
DWORD dwWaitTimeOut = 0;
DWORD dwWindowLines = 0;
WORD wCount = 0 ;
TMSTD_VERSION_INFO Version;
DWORD dwIdx;
HANDLE hCRTServer;
HANDLE Stdin, Stdout, Stderr;
fprintf ( stderr,
"\r\nTriMedia Monitor - (c)Philips Semiconductors Version [%d.%d.%d]",
verGetFileMajorVersion (),
verGetFileMinorVersion (),
verGetFileBuildVersion () );
fprintf ( stderr,
"\r\n[%s %s] : \"help\" for cmds | \"TMMon -?\" for cmd line args",
__DATE__, __TIME__ );
//initize the parser data structre
pParser->fSerial = FALSE;
pParser->wState = CMD_WAIT;
pParser->pTMHW = &TMHW;
pParser->dwScreenSize = 0;
// pParser->fExitDebugger = FALSE;
pParser->fTraceIntoFile = FALSE;
pParser->fServerLoaded = FALSE;
pParser->ProgramState = PROG_STATE_NOTINIT;
// initialize the command parameter structures
//pParser->CmdSIParam.fFlag = FALSE;
//pParser->CmdSEParam.fFlag = FALSE;
//pParser->CmdSOParam.fFlag = FALSE;
pParser->TMCons.fRedirectedStdin = FALSE;
pParser->TMCons.fRedirectedStdout = FALSE;
pParser->TMCons.fRedirectedStderr = FALSE;
pParser->TMCons.fUseWindowSize = FALSE;
pParser->TMCons.fIgnoreTMCons = FALSE;
pParser->TMCons.fUseTMMonWindow = FALSE;
pParser->CmdLDParam.dwCountArg = 0;
pParser->CmdLDParam.dwIdxArgStr = 0;
/*
process the command line arguments here
*/
for ( wIdxArg = 1; wIdxArg < argc ; wIdxArg++ )
{
if( argv[wIdxArg][0] != '-' )
{
goto main_argerr;
}
switch ( toupper ( argv[wIdxArg][1]) )
{
case 'C' :
pParser->TMCons.fUseTMMonWindow = TRUE;
break;
case 'S' :
if ( fSerial )
{
goto main_argerr;
}
fSerial = TRUE;
// no arguments
break;
case 'P' :
if ( ! fSerial && ( dwPort != 0) )
{
goto main_argerr;
}
sscanf(&argv[wIdxArg][2], "%d", &dwPort );
if ( ( dwPort < 1 ) || ( dwPort > 3 ) )
{
goto main_argerr;
}
break;
case 'B' :
if ( ! fSerial && ( dwBaud != 0) )
{
goto main_argerr;
}
sscanf(&argv[wIdxArg][2], "%d", &dwBaud );
if ( ( dwBaud < 110 ) || ( dwBaud > 115200 ) )
{
goto main_argerr;
}
break;
case 'A' :
fprintf ( stderr,
"\nAuthor Tilakraj Roy : troy@trimedia.scs.philips.com\n");
break;
case 'R' : // si se so
if ( ( wIdxArg + 1 ) == argc )
goto main_argerr;
switch ( toupper ( argv[wIdxArg][2] ) )
{
case 'I' :
if ( argv[wIdxArg + 1][0] == '-' )
{
goto main_argerr;
}
/*
if ( ( pParser->CmdSIParam.dwFile =
(DWORD)open ( argv[++wIdxArg],
_O_BINARY | O_RDONLY ) ) == 0xffffffff )
goto main_iofail;
*/
pParser->TMCons.fRedirectedStdin = TRUE;
strcpy ( pParser->TMCons.szFilenameStdin, argv[++wIdxArg] );
//pParser->CmdSIParam.fFlag = TRUE;
break;
case 'O' :
if ( argv[wIdxArg + 1][0] == '-' )
{
goto main_argerr;
}
/*
if ( ( pParser->CmdSOParam.dwFile =
(DWORD)open ( argv[++wIdxArg],
_O_BINARY | _O_CREAT | _O_TRUNC | _O_WRONLY ) ) ==
0xffffffff )
goto main_iofail;
pParser->CmdSOParam.fFlag= TRUE;
*/
pParser->TMCons.fRedirectedStdout = TRUE;
strcpy ( pParser->TMCons.szFilenameStdout, argv[++wIdxArg] );
break;
case 'E' :
if ( argv[wIdxArg + 1][0] == '-' )
{
goto main_argerr;
}
/*
if ( ( pParser->CmdSEParam.dwFile =
(DWORD)open ( argv[++wIdxArg],
_O_BINARY | _O_CREAT | _O_TRUNC | _O_WRONLY ) ) ==
0xffffffff )
goto main_iofail;
pParser->CmdSEParam.fFlag = TRUE;
*/
pParser->TMCons.fRedirectedStderr = TRUE;
strcpy ( pParser->TMCons.szFilenameStderr, argv[++wIdxArg] );
break;
default :
goto main_argerr;
}
case 'E' : // el eb
break;
case 'G' : // program name arguments ...
if ( ( wIdxArg + 1 ) == argc )
goto main_argerr;
fBatch = TRUE;
strcpy (
pParser->CmdLDParam.szExecutableFile, argv[++wIdxArg] );
for ( wIdxArg, dwIdx = 0 ; wIdxArg < argc ; dwIdx++, wIdxArg++ )
{
if ( ( pParser->CmdLDParam.dwIdxArgStr + strlen(argv[wIdxArg]))
> MAX_STRING )
{
fprintf ( stderr,
"\r\nTMMon : WARNING : Argument Buffer Overflow : Truncating ....");
}
strcpy (
&pParser->CmdLDParam.ArgumentBuffer[pParser->CmdLDParam.dwIdxArgStr],
argv[wIdxArg] );
pParser->CmdLDParam.ArgumentPtr[pParser->CmdLDParam.dwCountArg] =
&pParser->CmdLDParam.ArgumentBuffer[pParser->CmdLDParam.dwIdxArgStr];
pParser->CmdLDParam.dwIdxArgStr += ( strlen ( argv[wIdxArg] ) + 1) ;
pParser->CmdLDParam.dwCountArg++;
}
break;
case 'T' :
if ( dwWaitTimeOut != 0 )
{
goto main_argerr;
}
sscanf(&argv[wIdxArg][2], "%d", &dwWaitTimeOut );
if ( ( dwWaitTimeOut <= 0 ) || ( dwWaitTimeOut > 0x7fffffff ) )
{
goto main_argerr;
}
break;
case 'W' :
if ( dwWindowLines != 0 )
{
goto main_argerr;
}
sscanf(&argv[wIdxArg][2], "%d", &dwWindowLines );
if ( ( dwWindowLines <= 50) || ( dwWindowLines >= 999 ) )
{
fprintf ( stderr,
"\r\nERROR : TMMon WindowSize Out of Range : valid renage is 50 <-> 999\r\n");
goto main_argerr;
}
break;
case '?':
default :
fprintf ( stderr,
"\r\n\r\nusage : TMMon [-c] [-wWindowSize] [-s -pPortNumber -bBaudRate] [-re StdErrLogName] [-ro StdOutLogName] [-ri StdInFileName] [-tWaitTimeOut] [-g ExecutableName Arguments ...]\r\n");
goto main_prehalexit;
}
}
if ( dwWaitTimeOut == 0 )
dwWaitTimeOut = 100;
if ( fSerial )
{
if ( dwPort == 0 )
dwPort = 2;
if ( dwBaud == 0 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -