📄 set_rtc.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 + -