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