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

📄 set_rtc.c

📁 WinCE5.0BSP for Renesas SH7770
💻 C
字号:
//
//  Copyright(C) Renesas Technology Corp. 2004. All rights reserved.
//
// Set RTC for ITS-DS7
//
// FILE     : SET_RTC.C
// CREATED  : 2004.04.27
// MODIFIED : 2004.09.01
// AUTHOR   : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY  : 
//            2004.09.01
//            - Created release code.
//              (based on RENESAS ITS-DS7 Source Kit Ver.1.0.2 for WCE4.2)
//

#include <windows.h>
#include <winbase.h>
#include <Nkintr.h>

#include "shx.h"
#include "sh7770.h"
#include "platform.h"
#include "ver_its_ds7.h"

#define NELEMS(a) (sizeof(a)/sizeof((a)[0]))

BOOL _SetRealTime(LPSYSTEMTIME);
void PrintLocalTime();

PTSTR usage_text[] =
{
    TEXT("usage:\r\n"),
    TEXT("     YYYY/MM/DD hh:mm:ss  set time\r\n"),
    TEXT("     -f                   set forced\r\n"),
    TEXT("     -g                   get time\r\n"),
    TEXT("     -h                   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;
	PTSTR pOption;
	TCHAR ws[] = TEXT(" /:\t");
	int errors = 0;

	BOOL		ret;
	SYSTEMTIME	time;
	SYSTEMTIME defst = {2000,1,0,1,0,0,0,0};	// RTC default
	BOOL		isForce=FALSE;

	memcpy( &time, &defst, sizeof(time) );
	i = 0;

	//2003/09/10 12:34:56 -> 2003 09 10 12 34 56

    // parse the command line
    for (pOption = _tcstok(lpCmdLine, ws); pOption != NULL; pOption = _tcstok(NULL, ws)) {
        if (_tcscmp(pOption, TEXT("-h")) == 0) {
            Usage();
            errors++;
            break;
        }
        if (_tcscmp(pOption, TEXT("-f")) == 0) {
			isForce=TRUE;
			continue;
		}
        if (_tcscmp(pOption, TEXT("-g")) == 0) {
			// Get Time
			PrintLocalTime();
            errors++;
            break;
        }

        switch (i) {
        case 0:		time.wYear   = (WORD)_ttoi(pOption);	i++;	break;
        case 1:		time.wMonth  = (WORD)_ttoi(pOption);	i++;	break;
        case 2:		time.wDay    = (WORD)_ttoi(pOption);	i++;	break;
        case 3:		time.wHour   = (WORD)_ttoi(pOption);	i++;	break;
        case 4:		time.wMinute = (WORD)_ttoi(pOption);	i++;	break;
        case 5:		time.wSecond = (WORD)_ttoi(pOption);	i++;	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("+RTC set\r\n")));

	// Get Time
	PrintLocalTime();

	// Set Time
	RETAILMSG(1, (TEXT("SetLocalTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,time.wYear
															,time.wMonth
															,time.wDay
															,time.wHour
															,time.wMinute
															,time.wSecond ));
	if(isForce){
		_SetRealTime( &time );
		Sleep(100);
	}
	else{
		ret = SetLocalTime( &time );
		if( !ret ){
			RETAILMSG(1, (TEXT("SetLocalTime Error[%d]\r\n"),GetLastError()));
		}
	}


	// Get Time
	PrintLocalTime();

	RETAILMSG(1, (TEXT("-RTC set\r\n")));
	return 0;
}

void PrintLocalTime()
{
	SYSTEMTIME	nowtime;

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

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

// set forced
BOOL _SetRealTime(
    LPSYSTEMTIME lpst									// @parm pointer to new time
)
{
	BOOL	bMode = SetKMode(TRUE);

//	DEBUGMSG(1, (TEXT("_SetRealTime[%04d/%02d/%02d %02d:%02d:%02d]\r\n")	,lpst->wYear
//															,lpst->wMonth
//															,lpst->wDay
//															,lpst->wHour
//															,lpst->wMinute
//															,lpst->wSecond ));

/*  not check value for error test
	// check value
	if ((lpst->wYear < 2000) ||
		(lpst->wYear > 2099) ||
		(lpst->wMonth < 1) ||
		(lpst->wMonth > 12) ||
		(lpst->wDay < 1) ||
		(lpst->wDay > 31) ||
		(lpst->wHour < 0) ||
		(lpst->wHour > 23) ||
		(lpst->wMinute < 0) ||
		(lpst->wMinute > 59) ||
		(lpst->wSecond < 0) ||
		(lpst->wSecond > 59)) {
		// Invalid time
		DEBUGMSG(1, (TEXT("Invalid time not set RTC. %04d/%02d/%02d %02d:%02d:%02d\r\n"),lpst->wYear
															,lpst->wMonth
															,lpst->wDay
															,lpst->wHour
															,lpst->wMinute
															,lpst->wSecond ));
		return FALSE;
	}
*/
	// Set Realtime data
	WRITE_REGISTER_USHORT(RTCYSET, lpst->wYear - 2000);	// Year
	WRITE_REGISTER_USHORT(RTCMSET, lpst->wMonth);		// Month
	WRITE_REGISTER_USHORT(RTCDSET, lpst->wDay);			// Day
	WRITE_REGISTER_USHORT(RTCHSET, lpst->wHour);		// Hour
	WRITE_REGISTER_USHORT(RTCMNSET,lpst->wMinute);		// Minute
	WRITE_REGISTER_USHORT(RTCSSET, lpst->wSecond * 32);	// Second

	// Start RTC in changed time
	WRITE_REGISTER_USHORT(RTCSTART, 0xffff);

	SetKMode(bMode);

	return TRUE;
}

⌨️ 快捷键说明

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