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

📄 oal_test.c

📁 WinCE5.0BSP for Renesas SH7770
💻 C
📖 第 1 页 / 共 2 页
字号:
//
//  Copyright(C) Renesas Technology Corp. 2002-2005. All rights reserved.
//
// OAL Test for ITS-DS7
//
// FILE     : OAL_TEST.C
// CREATED  : 2002.06.27
// MODIFIED : 2005.02.22
// AUTHOR   : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY  : 
//            2003.06.20
//            - Created release code.
//            2004.02.09
//            - Added parameter.
//            2004.04.09
//            - Added invalid time check.
//            2004.09.01
//            - Created release code for WCE5.0.
//            2005.02.22
//            - Modified restore localtime.
//

#include <windows.h>
#include <winbase.h>
#include <pkfuncs.h>
#include <types.h>
#include <ceddk.h>
#include <PCIReg.h>
#include <halether.h>
#include <Iltiming.h>
#include <Nkintr.h>

#define NELEMS(a) (sizeof(a)/sizeof((a)[0]))
#define MRCHECK(r,str,label)\
    if ((r != MMSYSERR_NOERROR)) { RETAILMSG(1, (TEXT(#str) TEXT(" failed. mr=%08x\r\n"), r)); mr = r; goto label;}

void	RTC_test(void);
void	KernelIoControl_test(void);

#define TEST_ALL			0
#define TEST_RTC			1
#define TEST_KERNELIO		2
#define TEST_QP_COUNTER		3
#define TEST_QP_FREQUENCY	4
#define TEST_GETTICKCOUNT	5
#define TEST_GETIDLETIME	6
#define TEST_MAX			7

PTSTR name_text[TEST_MAX][3] =
{
{TEXT("all"), NULL, NULL},
{TEXT("rtc"), TEXT("RTC"), NULL},
{TEXT("kio"), TEXT("KernelIoControl"), NULL},
{TEXT("qpc"), TEXT("QueryPerformanceCounter"), NULL},
{TEXT("qpf"), TEXT("QueryPerformanceFrequency"), NULL},
{TEXT("gtc"), TEXT("GetTickCount"), NULL},
{TEXT("git"), TEXT("GetIdleTime"), NULL}
};

PTSTR usage_text[] =
{
    TEXT("usage:\r\n"),
    TEXT("       -n <testname>    Execute OAL Test\r\n"),
    TEXT("             rtc        RTC Test\r\n"),
    TEXT("             kio        Kernel IoControl Test\r\n"),
    TEXT("             qpc        QueryPerformanceCounter Test\r\n"),
    TEXT("             qpf        QueryPerformanceFrequency Test\r\n"),
    TEXT("             gtc        GetTickCount Test\r\n"),
    TEXT("             git        GetIdleTime Test\r\n"),
    TEXT("             all        All Test\r\n"),
    TEXT("       -?               help\r\n"),
};

void
Usage(void)
{ int i;

    for (i = 0; i < NELEMS(usage_text); i++) {
        RETAILMSG(1, (usage_text[i]));
    }
}

int WINAPI
WinMain (
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
    LPWSTR lpCmdLine,
	int nCmdShow
	)
{
	int				i,j;
//	LARGE_INTEGER	test;
	PTSTR pOption;
	TCHAR ws[] = TEXT(" \t");
	int errors = 0;
	PTSTR pParameter;
	int bTest[TEST_MAX];

	for(i=0;i<TEST_MAX;i++) bTest[i]=1;

    // parse the command line
    for (pOption = _tcstok(lpCmdLine, ws); pOption != NULL; pOption = _tcstok(NULL, ws)) {
        if (pOption[0] != '/' && pOption[0] != '-') {
            RETAILMSG(1, (TEXT("Unrecognized argument %s\r\n"), pOption));
            errors++;
            continue;
        }
        pParameter = _tcstok(NULL, ws);
        if (pParameter == NULL) {
            RETAILMSG(1, (TEXT("Missing parameter to option %s\r\n"), pOption));
        }
        switch (pOption[1]) {
        case 'n':
			for(i=0; i<TEST_MAX; i++){
				if(name_text[i][0]==NULL) continue;
				for(j=0; j<3; j++){
					if(name_text[i][j]==NULL) continue;
					if(_tcscmp(pParameter ,name_text[i][j]) == 0) break;
				}
				if(j<3) break;
			}
			switch(i){
			case TEST_RTC:
			case TEST_KERNELIO:
			case TEST_QP_COUNTER:
			case TEST_QP_FREQUENCY:
			case TEST_GETTICKCOUNT:
			case TEST_GETIDLETIME:
				for(j=1;j<TEST_MAX;j++) bTest[j]=((j==i) ? 1 : 0);
				break;
			case TEST_ALL:
				for(j=1;j<TEST_MAX;j++) bTest[j]=1;
				break;
			default:
				RETAILMSG(1, (TEXT("Unknown test name %s\r\n"), pParameter));
				errors++;
				break;
			}
            break;

        case '?':
        case 'h':
            Usage();
            errors++;
            break;

        default:
            RETAILMSG(1, (TEXT("Unrecognized option %s\r\n"), pOption));
            errors++;
            break;
        }
    }

    if (errors > 0) {
        // we've already issued complaint, now just exit
        return -1;
    }

	RETAILMSG(1, (TEXT("+OAL test\r\n")));

	// RTC Test
	if(bTest[TEST_RTC]){
		RTC_test();
	}

	// Kernel IoControl Test
	if(bTest[TEST_KERNELIO]){
		KernelIoControl_test();
	}

/*----------------------------------------------
	// QueryPerformanceCounter Test
	if(bTest[TEST_QP_COUNTER]){
		for( i = 0; i < 10; i++ ){
			if( QueryPerformanceCounter( &test ) == TRUE ){
				RETAILMSG(1, (TEXT("QueryPerformanceCounter QuadPart[%08x]\r\n"),test.QuadPart));
			}
			else{
				RETAILMSG(1, (TEXT("QueryPerformanceCounter Error[%d]\r\n"),GetLastError()));
			}
			Sleep(1000);
		}
	}

	// QueryPerformanceFrequency Test
	if(bTest[TEST_QP_FREQUENCY]){
		if( QueryPerformanceFrequency( &test ) == TRUE ){
			RETAILMSG(1, (TEXT("QueryPerformanceFrequency HighPart[%08x] LowPart[%08x]\r\n"),test.HighPart,test.LowPart));
		}
		else{
			RETAILMSG(1, (TEXT("QueryPerformanceFrequency Error[%d]\r\n"),GetLastError()));
		}
	}

	// GetTickCount Test
	if(bTest[TEST_GETTICKCOUNT]){
		for( i = 0; i < 10; i++ ){
			RETAILMSG(1, (TEXT("GetTickCount[%08x]\r\n"),GetTickCount()));
			Sleep(1000);
		}
	}

	// GetIdleTime Test
	if(bTest[TEST_GETIDLETIME]){
		for( i = 0; i < 10; i++ ){
			DWORD dwStartTick;
			DWORD dwIdleSt;
			DWORD dwStopTick;
			DWORD dwIdleEd;
			DWORD PercentIdle;

			dwStartTick = GetTickCount();
			dwIdleSt = GetIdleTime();
			Sleep(1000);
			dwStopTick = GetTickCount();
			dwIdleEd = GetIdleTime();
			PercentIdle = (DWORD)((100*(dwIdleEd - dwIdleSt)) / (dwStopTick - dwStartTick));
			RETAILMSG(1, (TEXT("GetIdleTime[%d,%d] Tick[%d,%d] PercentIdle[%d]\r\n"),
				dwIdleSt,dwIdleEd, dwStartTick,dwStopTick,
				PercentIdle));
		}
	}
----------------------------------------------*/

	RETAILMSG(1, (TEXT("-OAL test\r\n")));
	return 0;
}

//
// RTC Test
//
void	RTC_test()
{
	BOOL		ret;
	SYSTEMTIME	time;
	SYSTEMTIME	saveTime;

	RETAILMSG(1, (TEXT("+RTC_test\r\n")));

	memset( &time, 0, sizeof(time) );

	// Get Time
	GetLocalTime( &time );
	RETAILMSG(1, (TEXT("GetLocalTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));
	memcpy(&saveTime, &time, sizeof(time));

	// Set Time 2003/09/10 12:34:56
	time.wYear   = 2003;
	time.wMonth  = 9;
	time.wDay    = 10;
	time.wHour   = 12;
	time.wMinute = 34;
	time.wSecond = 56;
	RETAILMSG(1, (TEXT("SetLocalTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));
	ret = SetLocalTime( &time );
	if( !ret ){
		RETAILMSG(1, (TEXT("NG:SetLocalTime Error[%d]\r\n"),GetLastError()));
	}

	// Get Time
	GetLocalTime( &time );
	RETAILMSG(1, (TEXT("GetLocalTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));

	// invalid time check
	// Set Time 1999/01/01 00:00:00
	time.wYear   = 1999;
	time.wMonth  = 1;
	time.wDay    = 1;
	time.wHour   = 0;
	time.wMinute = 0;
	time.wSecond = 0;
	RETAILMSG(1, (TEXT("SetLocalTime invalid time[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));
	ret = SetLocalTime( &time );
	if( !ret ){
		RETAILMSG(1, (TEXT("OK:SetLocalTime Error[%d]\r\n"),GetLastError()));
	}
	else{
		RETAILMSG(1, (TEXT("NG:SetLocalTime Success\r\n")));
	}

	// Set Time 2100/01/01 00:00:00
	time.wYear   = 2100;
	time.wMonth  = 1;
	time.wDay    = 1;
	time.wHour   = 0;
	time.wMinute = 0;
	time.wSecond = 0;
	RETAILMSG(1, (TEXT("SetLocalTime invalid time[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));
	ret = SetLocalTime( &time );
	if( !ret ){
		RETAILMSG(1, (TEXT("OK:SetLocalTime Error[%d]\r\n"),GetLastError()));
	}
	else{
		RETAILMSG(1, (TEXT("NG:SetLocalTime Success\r\n")));
	}

	// restore time
	RETAILMSG(1, (TEXT("Restore LocalTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,saveTime.wYear
															,saveTime.wMonth
															,saveTime.wDay
															,saveTime.wHour
															,saveTime.wMinute
															,saveTime.wSecond ));
	ret = SetLocalTime( &saveTime );

	RETAILMSG(1, (TEXT("-RTC_test\r\n")));
}

//
// Kernel IoControl Test
//
void	KernelIoControl_test()
{
	BOOL		ret;
	int			i;
	DWORD		p1, p3;
	BYTE		p2[128];
	PDEVICE_ID	pDeviceID;
	PIP_INFO	pIPInfo;
	CacheInfo	cache;
//	SYSTEMTIME	time;
//	ILTIMING_MESSAGE ITM;
	DEVICE_LOCATION pDevLoc;

	RETAILMSG(1, (TEXT("+KernelIoControl_test\r\n")));

	//
	// IOCTL_HAL_GET_CACHE_INFO
	//
	p1 = 0;
	memset( p2, 0, sizeof(p2) );
	p3 = 0;
	ret = KernelIoControl(	IOCTL_HAL_GET_CACHE_INFO,
							&p1,
							sizeof(p1),
							&cache,
							sizeof(CacheInfo),
							&p3	);
	if( ret == TRUE ){
		RETAILMSG(1, (TEXT(" KernelIoControl(IOCTL_HAL_GET_CACHE_INFO)\r\n")));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1Flags [%08x]\r\n"),cache.dwL1Flags));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1ICacheSize [%08x]\r\n"),cache.dwL1ICacheSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1ICacheLineSize [%08x]\r\n"),cache.dwL1ICacheLineSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1ICacheNumWays [%08x]\r\n"),cache.dwL1ICacheNumWays));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1DCacheSize [%08x]\r\n"),cache.dwL1DCacheSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1DCacheLineSize [%08x]\r\n"),cache.dwL1DCacheLineSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL1DCacheNumWays [%08x]\r\n"),cache.dwL1DCacheNumWays));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2Flags [%08x]\r\n"),cache.dwL2Flags));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2ICacheSize [%08x]\r\n"),cache.dwL2ICacheSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2ICacheLineSize [%08x]\r\n"),cache.dwL2ICacheLineSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2ICacheNumWays [%08x]\r\n"),cache.dwL2ICacheNumWays));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2DCacheSize [%08x]\r\n"),cache.dwL2DCacheSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2DCacheLineSize [%08x]\r\n"),cache.dwL2DCacheLineSize));
		RETAILMSG(1, (TEXT(" KernelIoControl:dwL2DCacheNumWays [%08x]\r\n"),cache.dwL2DCacheNumWays));
	}
	else{
		RETAILMSG(1, (TEXT(" KernelIoControl(IOCTL_HAL_GET_CACHE_INFO Error[%x]\r\n"),GetLastError()));
	}


	//
	// IOCTL_HAL_GET_DEVICE_INFO (SPI_GETPLATFORMTYPE)
	//
	p1 = SPI_GETPLATFORMTYPE;
	memset( p2, 0, sizeof(p2) );
	p3 = 0;
	ret = KernelIoControl(	IOCTL_HAL_GET_DEVICE_INFO,
							&p1,
							sizeof(p1),
							p2,
							sizeof(p2),
							&p3	);
	if( ret == TRUE ){
		RETAILMSG(1, (TEXT(" KernelIoControl(IOCTL_HAL_GET_DEVICE_INFO:SPI_GETPLATFORMTYPE) [%s]\r\n"),p2));
	}
	else{
		RETAILMSG(1, (TEXT(" KernelIoControl(IOCTL_HAL_GET_DEVICE_INFO:SPI_GETPLATFORMTYPE) Error[%x]\r\n"),GetLastError()));
	}

	//
	// IOCTL_HAL_GET_DEVICE_INFO (SPI_GETOEMINFO)
	//
	p1 = SPI_GETOEMINFO;
	memset( p2, 0, sizeof(p2) );
	p3 = 0;
	ret = KernelIoControl(	IOCTL_HAL_GET_DEVICE_INFO,
							&p1,
							sizeof(p1),
							p2,
							sizeof(p2),
							&p3	);
	if( ret == TRUE ){
		RETAILMSG(1, (TEXT(" KernelIoControl(IOCTL_HAL_GET_DEVICE_INFO:SPI_GETOEMINFO) [%s]\r\n"),p2));

⌨️ 快捷键说明

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