コード例 #1
0
ファイル: sceRtc.cpp プロジェクト: CrymsonZX/ppsspp
u32 sceRtcGetCurrentClock(u32 pspTimePtr, int tz)
{
	DEBUG_LOG(HLE, "sceRtcGetCurrentClock(%08x, %d)", pspTimePtr, tz);
	PSPTimeval tv;
	__RtcTimeOfDay(&tv);

	time_t sec = (time_t) tv.tv_sec;
	tm *utc = gmtime(&sec);
	if (!utc)
	{
		ERROR_LOG(HLE, "Date is too high/low to handle, pretending to work.");
		return 0;
	}

	utc->tm_isdst = -1;
	utc->tm_min += tz;
	rtc_timegm(utc); // Return gmt time with timezone offset.

	ScePspDateTime ret;
	__RtcTmToPspTime(ret, utc);
	ret.microsecond = tv.tv_usec;

	if (Memory::IsValidAddress(pspTimePtr))
		Memory::WriteStruct(pspTimePtr, &ret);

	hleEatCycles(1900);
	return 0;
}
コード例 #2
0
ファイル: sceRtc.cpp プロジェクト: CrymsonZX/ppsspp
u64 __RtcPspTimeToTicks(ScePspDateTime &pt)
{
	tm local;
	local.tm_year = pt.year - 1900;
	local.tm_mon = pt.month - 1;
	local.tm_mday = pt.day;
	local.tm_wday = -1;
	local.tm_yday = -1;
	local.tm_hour = pt.hour;
	local.tm_min = pt.minute;
	local.tm_sec = pt.second;
	local.tm_isdst = 0;

	time_t seconds = rtc_timegm(&local);
	u64 result = rtcMagicOffset + (u64) seconds * 1000000ULL;
	result += pt.microsecond;
	return result;
}
コード例 #3
0
ファイル: sceRtc.cpp プロジェクト: Bigpet/ppsspp
static u64 __RtcPspTimeToTicks(const ScePspDateTime &pt)
{
	tm local;
	__RtcPspTimeToTm(local, pt);

	s64 tickOffset = 0;
	while (local.tm_year < 70)
	{
		tickOffset -= rtc400YearTicks;
		local.tm_year += 400;
	}
	while (local.tm_year >= 470)
	{
		tickOffset += rtc400YearTicks;
		local.tm_year -= 400;
	}

	time_t seconds = rtc_timegm(&local);
	u64 result = rtcMagicOffset + (u64) seconds * 1000000ULL;
	result += pt.microsecond;
	return result + tickOffset;
}