mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-04-22 04:24:44 +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);
|
||||
|
||||
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 {
|
||||
return ORBIS_RTC_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentClock(OrbisRtcDateTime* pTime, int timeZone) {
|
|||
|
||||
if (returnValue == 0) {
|
||||
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);
|
||||
sceRtcSetTick(pTime, &clockTick);
|
||||
|
@ -214,19 +214,9 @@ int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime(OrbisRtcDateTime* pTime) {
|
|||
// calculate total timezone offset for converting UTC to local time
|
||||
uint64_t tzOffset = -(timeZone.tz_minuteswest - (timeZone.tz_dsttime * 60));
|
||||
|
||||
returnValue = sceKernelClockGettime(0, &clocktime);
|
||||
if (returnValue >= 0) {
|
||||
OrbisRtcTick newTick;
|
||||
newTick.tick =
|
||||
((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;
|
||||
sceRtcGetCurrentTick(&newTick);
|
||||
sceRtcTickAddMinutes(&newTick, &newTick, tzOffset);
|
||||
sceRtcSetTick(pTime, &newTick);
|
||||
}
|
||||
|
@ -247,7 +237,7 @@ int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick(OrbisRtcTick* pTick) {
|
|||
int returnValue = Kernel::sceKernelClockGettime(Kernel::ORBIS_CLOCK_REALTIME, &clocktime);
|
||||
|
||||
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 {
|
||||
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);
|
||||
|
||||
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 {
|
||||
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);
|
||||
|
||||
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 {
|
||||
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);
|
||||
|
||||
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;
|
||||
|
@ -563,7 +553,7 @@ int PS4_SYSV_ABI sceRtcSetTime_t(OrbisRtcDateTime* pTime, time_t llTime) {
|
|||
newTick.tick = llTime * 1000000;
|
||||
}
|
||||
|
||||
newTick.tick += 0xdcbffeff2bc000;
|
||||
newTick.tick += UNIX_EPOCH_TICKS;
|
||||
sceRtcSetTick(pTime, &newTick);
|
||||
|
||||
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_SATURDAY = 6;
|
||||
|
||||
constexpr int64_t UNIX_EPOCH_TICKS = 0xdcbffeff2bc000;
|
||||
|
||||
struct OrbisRtcTick {
|
||||
uint64_t tick;
|
||||
};
|
||||
|
@ -48,7 +50,7 @@ int PS4_SYSV_ABI sceRtcFormatRFC3339PreciseLocalTime(char* pszDateTime,
|
|||
const OrbisRtcTick* pTickUtc);
|
||||
int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick(OrbisRtcTick* pTick);
|
||||
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 sceRtcGetCurrentNetworkTick(OrbisRtcTick* pTick);
|
||||
int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick(OrbisRtcTick* pTick);
|
||||
|
|
Loading…
Add table
Reference in a new issue