19,502
社区成员
发帖
与我相关
我的任务
分享
BOOL OALIoCtlHalInitRTC(
UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
UINT32 outSize, UINT32 *pOutSize
) {
BOOL rc = FALSE;
SYSTEMTIME *pTime = (SYSTEMTIME*)pInpBuffer;
OALMSG(OAL_IOCTL&&OAL_FUNC, (L"+OALIoCtlHalInitRTC(...)\r\n"));
if (pOutSize) {
*pOutSize = 0;
}
// Validate inputs
if (pInpBuffer == NULL || inpSize < sizeof(SYSTEMTIME)) {
NKSetLastError(ERROR_INVALID_PARAMETER);
OALMSG(OAL_ERROR, (
L"ERROR: OALIoCtlHalInitRTC: Invalid parameter\r\n"
));
goto cleanUp;
}
rc = OEMSetRealTime(pTime);//此函数调用了NKSystemTimeToFileTime(pTime, &fileTime)),不知道是不是这函数将时间设成了NKFIleTime了?
cleanUp:
OALMSG(OAL_IOCTL&&OAL_FUNC, (L"-OALIoCtlHalInitRTC(rc = %d)\r\n", rc));
return rc;
}
BOOL OEMSetRealTime(SYSTEMTIME *pTime)
{
BOOL rc = FALSE;
ULARGE_INTEGER time;
FILETIME fileTime;
BOOL enabled;
if(!pTime) goto cleanUp;
OALMSG(OAL_RTC&&OAL_FUNC, (
L"+OEMSetRealTime(%d/%d/%d %d:%d:%d.%03d)\r\n",
pTime->wYear, pTime->wMonth, pTime->wDay, pTime->wHour, pTime->wMinute,
pTime->wSecond, pTime->wMilliseconds
));
if((rc = NKSystemTimeToFileTime(pTime, &fileTime)))
{
// Convert time to miliseconds since Jan 1, 1601
time.LowPart = fileTime.dwLowDateTime;
time.HighPart = fileTime.dwHighDateTime;
time.QuadPart /= 10000;
enabled = INTERRUPTS_ENABLE(FALSE);
*g_pOALRTCTicks = time.QuadPart;
INTERRUPTS_ENABLE(enabled);
}
cleanUp:
OALMSG(OAL_RTC&&OAL_FUNC, (L"-OEMSetRealTime(rc = %d)\r\n", rc));
return rc;
}