mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-02 22:28:45 +00:00
Merge pull request #4 from CrazyBloo/libSceRtc-dev
fix mac and linux builds, const for UNIX_EPOCH
This commit is contained in:
commit
ee867bd1ee
2 changed files with 11 additions and 19 deletions
|
@ -168,7 +168,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick(OrbisRtcTick* pTick) {
|
||||||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||||
|
|
||||||
if (returnValue == 0) {
|
if (returnValue == 0) {
|
||||||
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
} else {
|
} else {
|
||||||
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentClock(OrbisRtcDateTime* pTime, int timeZone) {
|
||||||
|
|
||||||
if (returnValue == 0) {
|
if (returnValue == 0) {
|
||||||
OrbisRtcTick clockTick;
|
OrbisRtcTick clockTick;
|
||||||
clockTick.tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
clockTick.tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
|
|
||||||
sceRtcTickAddMinutes(&clockTick, &clockTick, timeZone);
|
sceRtcTickAddMinutes(&clockTick, &clockTick, timeZone);
|
||||||
sceRtcSetTick(pTime, &clockTick);
|
sceRtcSetTick(pTime, &clockTick);
|
||||||
|
@ -214,19 +214,9 @@ int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime(OrbisRtcDateTime* pTime) {
|
||||||
// calculate total timezone offset for converting UTC to local time
|
// calculate total timezone offset for converting UTC to local time
|
||||||
uint64_t tzOffset = -(timeZone.tz_minuteswest - (timeZone.tz_dsttime * 60));
|
uint64_t tzOffset = -(timeZone.tz_minuteswest - (timeZone.tz_dsttime * 60));
|
||||||
|
|
||||||
returnValue = sceKernelClockGettime(0, &clocktime);
|
|
||||||
if (returnValue >= 0) {
|
if (returnValue >= 0) {
|
||||||
OrbisRtcTick newTick;
|
OrbisRtcTick newTick;
|
||||||
newTick.tick =
|
sceRtcGetCurrentTick(&newTick);
|
||||||
((unsigned __int64)((unsigned __int128)(clocktime.tv_nsec *
|
|
||||||
(signed __int128)2361183241434822607LL) >>
|
|
||||||
64) >>
|
|
||||||
63) +
|
|
||||||
((signed __int64)((unsigned __int128)(clocktime.tv_nsec *
|
|
||||||
(signed __int128)2361183241434822607LL) >>
|
|
||||||
64) >>
|
|
||||||
7) +
|
|
||||||
1000000 * clocktime.tv_sec + 62135596800000000LL;
|
|
||||||
sceRtcTickAddMinutes(&newTick, &newTick, tzOffset);
|
sceRtcTickAddMinutes(&newTick, &newTick, tzOffset);
|
||||||
sceRtcSetTick(pTime, &newTick);
|
sceRtcSetTick(pTime, &newTick);
|
||||||
}
|
}
|
||||||
|
@ -247,7 +237,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick(OrbisRtcTick* pTick) {
|
||||||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||||
|
|
||||||
if (returnValue == 0) {
|
if (returnValue == 0) {
|
||||||
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
} else {
|
} else {
|
||||||
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
@ -265,7 +255,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentNetworkTick(OrbisRtcTick* pTick) {
|
||||||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||||
|
|
||||||
if (returnValue == 0) {
|
if (returnValue == 0) {
|
||||||
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
} else {
|
} else {
|
||||||
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +273,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick(OrbisRtcTick* pTick) {
|
||||||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||||
|
|
||||||
if (returnValue == 0) {
|
if (returnValue == 0) {
|
||||||
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
} else {
|
} else {
|
||||||
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
@ -301,7 +291,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentTick(OrbisRtcTick* pTick) {
|
||||||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||||
|
|
||||||
if (returnValue >= 0) {
|
if (returnValue >= 0) {
|
||||||
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + 0xdcbffeff2bc000;
|
pTick->tick = clocktime.tv_nsec / 1000 + clocktime.tv_sec * 1000000 + UNIX_EPOCH_TICKS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SCE_OK;
|
return SCE_OK;
|
||||||
|
@ -563,7 +553,7 @@ int PS4_SYSV_ABI sceRtcSetTime_t(OrbisRtcDateTime* pTime, time_t llTime) {
|
||||||
newTick.tick = llTime * 1000000;
|
newTick.tick = llTime * 1000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
newTick.tick += 0xdcbffeff2bc000;
|
newTick.tick += UNIX_EPOCH_TICKS;
|
||||||
sceRtcSetTick(pTime, &newTick);
|
sceRtcSetTick(pTime, &newTick);
|
||||||
|
|
||||||
return SCE_OK;
|
return SCE_OK;
|
||||||
|
|
|
@ -19,6 +19,8 @@ constexpr int ORBIS_RTC_DAYOFWEEK_THURSDAY = 4;
|
||||||
constexpr int ORBIS_RTC_DAYOFWEEK_FRIDAY = 5;
|
constexpr int ORBIS_RTC_DAYOFWEEK_FRIDAY = 5;
|
||||||
constexpr int ORBIS_RTC_DAYOFWEEK_SATURDAY = 6;
|
constexpr int ORBIS_RTC_DAYOFWEEK_SATURDAY = 6;
|
||||||
|
|
||||||
|
constexpr int64_t UNIX_EPOCH_TICKS = 0xdcbffeff2bc000;
|
||||||
|
|
||||||
struct OrbisRtcTick {
|
struct OrbisRtcTick {
|
||||||
uint64_t tick;
|
uint64_t tick;
|
||||||
};
|
};
|
||||||
|
@ -48,7 +50,7 @@ int PS4_SYSV_ABI sceRtcFormatRFC3339PreciseLocalTime(char* pszDateTime,
|
||||||
const OrbisRtcTick* pTickUtc);
|
const OrbisRtcTick* pTickUtc);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick(OrbisRtcTick* pTick);
|
int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick(OrbisRtcTick* pTick);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentClock(OrbisRtcDateTime* pTime, int timeZone);
|
int PS4_SYSV_ABI sceRtcGetCurrentClock(OrbisRtcDateTime* pTime, int timeZone);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime(OrbisRtcDateTime* pTick);
|
int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime(OrbisRtcDateTime* pTime);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick(OrbisRtcTick* pTick);
|
int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick(OrbisRtcTick* pTick);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentNetworkTick(OrbisRtcTick* pTick);
|
int PS4_SYSV_ABI sceRtcGetCurrentNetworkTick(OrbisRtcTick* pTick);
|
||||||
int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick(OrbisRtcTick* pTick);
|
int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick(OrbisRtcTick* pTick);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue