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

📄 ctc.c

📁 wince host 和 target PCI驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -