SceRtc: Difference between revisions
Devnoname120 (talk | contribs) (Swapped Module <-> Library, see revision 1.1 under "Revision History" of "Vita SDK specifications" (https://wiki.henkaku.xyz/vita/File:Vita_SDK_specifications.pdf)) |
|||
(79 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
Real Time Clock. | |||
== Module == | == Module == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version | ! Version !! World !! Privilege | ||
|- | |- | ||
| | | 0.931.010-3.740.011 || Non-secure || Kernel | ||
|} | |} | ||
Line 17: | Line 18: | ||
! Version !! Name !! World !! Visibility !! NID | ! Version !! Name !! World !! Visibility !! NID | ||
|- | |- | ||
| | | 0.920-3.740.011 || [[SceRtc#SceRtcForDriver|SceRtcForDriver]] || Non-secure || Kernel || 0x0351D827 | ||
|- | |||
| 0.931.010-3.740.011 || [[SceRtc#SceRtc|SceRtc]] || Non-secure || User || 0x3503487E | |||
|} | |||
== Types == | |||
<source lang="C"> | |||
typedef struct SceRtcTickBase { // size is 0x28-bytes | |||
SceRtcTick tick_src_0; | |||
SceRtcTick tick_dst_0; | |||
int unk_0x10; | |||
int unk_0x14; | |||
int tick_flags_0; | |||
int unk_0x1C; | |||
int unk_0x20; | |||
int unk_0x24; | |||
} SceRtcTickBase; | |||
// internal use. From SceRtc_data + 0x38 | |||
typedef struct SceRtcTickContext { // size is 0x140-bytes | |||
SceRtcTickBase current_secure_tick; | |||
SceRtcTickBase current_retained_network_tick; | |||
SceRtcTickBase current_tool_secure_tick; | |||
SceRtcTickBase current_gps_tick; | |||
SceRtcTickBase current_debug_network_tick; | |||
SceRtcTickBase unk_tick_5; | |||
SceRtcTickBase unk_tick_6; | |||
SceRtcTickBase unk_tick_7; | |||
} SceRtcTickContext; | |||
</source> | |||
== Information == | |||
If some ticks in rtc are lower than the constant set in SceRtc, those ticks are set to 0. | |||
constant list per fw. | |||
{| class="wikitable" | |||
|- | |||
! Version !! date | |||
|- | |||
| 1.00 - 1.67 || 2011/08/01 | |||
|- | |||
| 1.80 || 2012/06/01 | |||
|- | |||
| 2.00 - 2.xx || 2012/09/01 | |||
|- | |||
| 2.50 - 3.00 || 2013/01/01 | |||
|- | |||
| 3.30 || 2014/01/01 | |||
|- | |- | ||
| | | 3.50 - 3.74 || 2015/01/01 | ||
|} | |} | ||
== SceRtcForDriver == | == SceRtcForDriver == | ||
=== sceRtcCompareTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.920-3.740.011 || 0x0EBB3F12 | |||
|} | |||
Returns 0 if tick_1 == tick_2, -1 if tick_1 < tick_2 and 1 else. | |||
<source lang="C">int sceRtcCompareTickForDriver(const SceRtcTick *tick_1, const SceRtcTick *tick_2);</source> | |||
=== sceRtcConvertLocalTimeToUtcForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xAD2F3544 | |||
|} | |||
=== sceRtcConvertUtcToLocalTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xC6E03DD4 | |||
|} | |||
=== sceRtcFormatRFC2822ForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xBA3415F8 | |||
|} | |||
=== sceRtcFormatRFC2822LocalTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x1F7FC209 | |||
|} | |||
=== sceRtcFormatRFC3339ForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xD32AC698 | |||
|} | |||
<source lang="C">int sceRtcFormatRFC3339ForDriver(char *pszDateTime, const SceRtcTick *utc, int iTimeZoneMinutes);</source> | |||
=== sceRtcFormatRFC3339LocalTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x35925318 | |||
|} | |||
=== sceRtcGetAccumulativeTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x0A86FB04 | |||
|} | |||
=== sceRtcGetAlarmTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xC838275A | |||
|} | |||
=== sceRtcGetCurrentAdNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x3E3C09A0 | |||
|} | |||
=== sceRtcGetCurrentClockForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xA930CD1A | |||
|} | |||
=== sceRtcGetCurrentClockLocalTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x7DC0DF93 | |||
|} | |||
=== sceRtcGetCurrentDebugNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xC141632A | |||
|} | |||
=== sceRtcGetCurrentGpsTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xF69B610F | |||
|} | |||
=== sceRtcGetCurrentNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xF1517B38 | |||
|} | |||
If the current NetworkTick is less than 2015/01/01, the system will ignore the registry setting and update the NetworkTick from the internet. | |||
<source lang="C">int sceRtcGetCurrentNetworkTickForDriver(SceRtcTick *tick);</source> | |||
=== sceRtcGetCurrentRetainedNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x40B4BCFF | |||
|} | |||
=== sceRtcGetCurrentTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xDEC408D4 | |||
|} | |||
=== sceRtcGetCurrentSecureTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.03-3.60 || 0x401C0954 | |||
|} | |||
If the current SecureTick is less than 2015/01/01, it sets 0xDDDEF8B3A14000(1980/01/01 00:00:00 UTC) to the Secure Tick and returns error code 0x80251002. | |||
<source lang="C">int sceRtcGetCurrentSecureTickForDriver(SceRtcTick *tick);</source> | |||
=== sceRtcConvertTickToDateTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.03-3.60 || 0x42A0DFCB | |||
|} | |||
This is a guessed name. | |||
Maybe reverse function of [[#sceRtcConvertDateTimeToTickForDriver]]. | |||
Used with the result of [[#sceRtcGetCurrentSecureTickForDriver]]. Used by [[SceCoredump]], [[SceSblGcAuthMgr]]. | |||
<source lang="C">int sceRtcConvertTickToDateTimeForDriver(SceDateTime *dst, SceRtcTick *src);</source> | |||
=== sceRtcTickAddMinuteForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x0F9E02EF | |||
|} | |||
This is guessed name. | |||
Converts a time into a SceRtcTick for use e.g. with [[#sceRtcConvertTickToDateTimeForDriver]]. | |||
<source lang="C">int sceRtcTickAddMinuteForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 seconds);</source> | |||
=== SceRtcForDriver_DE9F4515 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xDE9F4515 | |||
|} | |||
It does: <code>src * 1000000 + 0xdcbffeff2bc000</code> so src is maybe of type SceRtcTick or just a time in microseconds. | |||
<source lang="C">int SceRtcForDriver_DE9F4515(SceDateTime* dst, SceUInt32 src);</source> | |||
=== sceRtcConvertDateTimeToTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990.000-3.740.011 || 0xF139E359 | |||
|} | |||
This is a guessed name. | |||
Maybe reverse function of [[#sceRtcConvertTickToDateTimeForDriver]]. | |||
<source lang="C">int sceRtcConvertDateTimeToTickForDriver(SceDateTime* src, SceRtcTick *dst);</source> | |||
=== sceRtcConvertDateTimeToUnixTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x497B5DC9 | |||
|} | |||
This is a guessed name. | |||
Used by [[SceCoredump]]. | |||
<source lang="C">int sceRtcConvertDateTimeToUnixTimeForDriver(const SceDateTime *src, SceUInt64 *dst);</source> | |||
=== sceRtcSetCurrentAuxTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990.000-3.740.011 || 0xA7236656 | |||
|} | |||
<source lang="C">int sceRtcSetCurrentAuxTickForDriver(SceRtcTick *tick);</source> | |||
=== sceRtcGetLastAdjustedTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x8A987573 | |||
|} | |||
=== sceRtcGetLastReincarnatedTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x3D614A9A | |||
|} | |||
=== sceRtcGetSecureAlarmTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xBD53731C | |||
|} | |||
=== sceRtcSynchronizeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60-3.74 || 0xA2D280B4 | |||
|} | |||
Initializes SceRtc internal flags. | |||
<source lang="C">int sceRtcSynchronizeForDriver(void);</source> | |||
=== SceRtcForDriver_ABA035B7 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xABA035B7 | |||
|} | |||
Reset all SceRtc internal flags to 0. | |||
Returns 0. | |||
<source lang="C">int SceRtcForDriver_ABA035B7(void);</source> | |||
=== sceRtcGetCurrentToolSecureTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990-3.60 || 0xA0D7899A | |||
|} | |||
This is a guessed name. | |||
Used on Tool only. Used when checking DevKit activation license expire date. | |||
Creates a tick using [[SceKernelThreadMgr#sceKernelGetSystemTimeWideForDriver]]. | |||
<source lang="C">int sceRtcGetCurrentToolSecureTickForDriver(SceRtcTick *pTick);</source> | |||
=== sceRtcIsAlarmedForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xCD295F0C | |||
|} | |||
=== sceRtcIsSecureAlarmedForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xE39F2ABE | |||
|} | |||
=== sceRtcRegisterCallbackForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x5220870D | |||
|} | |||
=== sceRtcRegisterSecureAlarmCallbackForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xCF84DFC0 | |||
|} | |||
=== sceRtcSetAlarmTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xD610C646 | |||
|} | |||
=== sceRtcSetConfForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xACFE5A9F | |||
|} | |||
=== sceRtcSetCurrentDebugNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xAAB6053F | |||
|} | |||
=== sceRtcSetCurrentNetworkTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x162E486E | |||
|} | |||
=== sceRtcSetCurrentSecureTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x7D431C87 | |||
|} | |||
=== sceRtcSetCurrentTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x70A78CD2 | |||
|} | |||
=== sceRtcSetSecureAlarmTickForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x8333790D | |||
|} | |||
=== sceRtcUnregisterCallbackForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x9546C68B | |||
|} | |||
=== sceRtcUnregisterSecureAlarmCallbackForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xEDDC2325 | |||
|} | |||
=== sceRtcTickAddSecondForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.931-3.60 || 0x9C8AF264 | |||
|} | |||
This is guessed name. | |||
Adds time (in second) to a time structure (in nanosecond). | |||
<source lang="C">int sceRtcTickAddSecondForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 seconds);</source> | |||
=== SceRtcForDriver_CE51C2A1 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.931-3.60 || 0xCE51C2A1 | |||
|} | |||
Adds time (in microseconds) to a time structure (in nanosecond). | |||
<source lang="C">int SceRtcForDriver_CE51C2A1(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 microseconds);</source> | |||
=== sceRtcTickAddMicroSecondForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0xA82AC5B3 | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcTickAddMicroSecondForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 microseconds);</source> | |||
=== sceRtcTickAddDayForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x0CB72FAF | |||
|} | |||
This is guessed name. | |||
Used by [[SceCompat#sceCompatSetUpdateState]]. | |||
<source lang="C">int sceRtcTickAddDayForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 days);</source> | |||
=== SceRtcForDriver_FFD7A04F === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xFFD7A04F | |||
|} | |||
Used indirectly by [[SceProcessmgr#sceKernelLibcTime]]. | |||
=== SceRtcForDriver_9097EF0D === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x9097EF0D | |||
|} | |||
Used indirectly by [[SceProcessmgr]]. | |||
=== SceRtcForDriver_0F800878 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x0F800878 | |||
|} | |||
Used indirectly by [[SceProcessmgr]]. | |||
<source lang="C">int SceRtcForDriver_0F800878(SceUInt32 year, SceUInt32 month, SceUInt32 day)</source> | |||
=== sceRtcIsValidDateTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0xADF63D7C | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcIsValidDateTimeForDriver(const SceDateTime *pDateTime);</source> | |||
=== sceRtcConvertDateTimeToFatTimeForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0x09AF419B | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcConvertDateTimeToFatTimeForDriver(const SceDateTime *pDateTime, SceUInt32 *pFatTime);</source> | |||
=== sceRtcTickAddWeekForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0x24209FBF | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcTickAddWeekForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 weeks);</source> | |||
=== sceRtcTickAddHourForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0x32E50C36 | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcTickAddHourForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 hours);</source> | |||
=== sceRtcGetOneSecondForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0x6965E5DF | |||
|} | |||
This is guessed name. | |||
<source lang="C">SceUInt32 sceRtcGetOneSecondForDriver(void);</source> | |||
=== sceRtcIsLeepYearForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0x6F96FAA5 | |||
|} | |||
This is guessed name. | |||
<source lang="C">SceBool sceRtcIsLeepYearForDriver(SceUInt32 year);</source> | |||
=== SceRtcForDriver_A1F41AE2 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0xA1F41AE2 | |||
|} | |||
<source lang="C">int SceRtcForDriver_A1F41AE2(SceRtcTick *pTick, const char *str);</source> | |||
=== SceRtcForDriver_BA14600F === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0xBA14600F | |||
|} | |||
It may be related to FILETIME on Windows. | |||
<source lang="C">int SceRtcForDriver_BA14600F(SceRtcTick *pDst, SceUInt64 a2);</source> | |||
=== sceRtcGetMonthDayCountForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.200.010 || 0xC2DC38D9 | |||
|} | |||
This is guessed name. | |||
<source lang="C">int sceRtcGetMonthDayCountForDriver(SceUInt32 year, SceUInt32 month);</source> | |||
== SceRtc == | == SceRtc == | ||
Line 31: | Line 680: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || | | 1.69-3.60 || 0x06F734FE | ||
|} | |} | ||
=== _sceRtcConvertLocalTimeToUtc === | === _sceRtcConvertLocalTimeToUtc === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 38: | Line 688: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || | | 1.69-3.60 || 0x0FC8AC41 | ||
|} | |} | ||
=== _sceRtcConvertUtcToLocalTime === | === _sceRtcConvertUtcToLocalTime === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 45: | Line 696: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x1E61DDA4 | | 1.69-3.60 || 0x1E61DDA4 | ||
|} | |} | ||
=== _sceRtcGetCurrentTick === | === _sceRtcGetCurrentTick === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 52: | Line 704: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x247EE33B | | 1.69-3.60 || 0x247EE33B | ||
|} | |} | ||
=== _sceRtcGetCurrentClock === | === _sceRtcGetCurrentClock === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 59: | Line 712: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x24947354 | | 1.69-3.60 || 0x24947354 | ||
|} | |} | ||
=== sceRtcGetAccumulativeTime === | === sceRtcGetAccumulativeTime === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 66: | Line 720: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x258BE8EC | | 1.69-3.60 || 0x258BE8EC | ||
|} | |} | ||
=== _sceRtcFormatRFC2822 === | === _sceRtcFormatRFC2822 === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 73: | Line 728: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x2CD6AC86 | | 1.69-3.60 || 0x2CD6AC86 | ||
|} | |} | ||
=== _sceRtcGetCurrentGpsTick === | === _sceRtcGetCurrentGpsTick === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 80: | Line 736: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x3BA820E5 | | 1.69-3.60 || 0x3BA820E5 | ||
|} | |} | ||
=== _sceRtcGetCurrentClockLocalTime === | === _sceRtcGetCurrentClockLocalTime === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 87: | Line 744: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x41A6C861 | | 1.69-3.60 || 0x41A6C861 | ||
|} | |} | ||
=== _sceRtcFormatRFC3339LocalTime === | === _sceRtcFormatRFC3339LocalTime === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 94: | Line 752: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x4836474D | | 1.69-3.60 || 0x4836474D | ||
|} | |} | ||
=== _sceRtcFormatRFC2822LocalTime === | === _sceRtcFormatRFC2822LocalTime === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 101: | Line 760: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x4C7ED349 | | 1.69-3.60 || 0x4C7ED349 | ||
|} | |} | ||
=== _sceRtcFormatRFC3339 === | === _sceRtcFormatRFC3339 === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 108: | Line 768: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0x7EE2CBEF | | 1.69-3.60 || 0x7EE2CBEF | ||
|} | |} | ||
=== _sceRtcGetCurrentRetainedNetworkTick === | === _sceRtcGetCurrentRetainedNetworkTick === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 115: | Line 776: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0xC17EA809 | | 1.69-3.60 || 0xC17EA809 | ||
|} | |} | ||
=== _sceRtcGetLastReincarnatedTick === | === _sceRtcGetLastReincarnatedTick === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 122: | Line 784: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0xE13D0FE5 | | 1.69-3.60 || 0xE13D0FE5 | ||
|} | |} | ||
=== _sceRtcGetLastAdjustedTick === | === _sceRtcGetLastAdjustedTick === | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 129: | Line 792: | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 || 0xEA157EC5 | | 1.69-3.60 || 0xEA157EC5 | ||
|} | |} | ||
=== _sceRtcGetCurrentAdNetworkTick === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0x76EFA8FE | |||
|} | |||
=== _sceRtcGetCurrentDebugNetworkTick === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 3.60 || 0xBF639B21 | |||
|} | |||
== How to get current time and date == | |||
Getting the current time and date involves [[Ernie#Syscon_Scratch_Pad|Syscon scratchpad]] and [[SceSyscon#sceSysconGetClockForDriver|Syscon command 0x11]]. Syscon command 0x11 returns twice the number of seconds Syscon has been running since its power on. Syscon scratchpad contains at offset 0x10 the timestamp when Syscon "started" running. It is stored in the following format: microseconds since 01/01/0001 and divided by 2^19. By adding those values together, the OS obtains the current time and date. | |||
In pseudocode: | |||
<source lang="python"> | |||
last_reincarnated_tick = syscon_read_scratchpad(offset=0x10, size=5) | |||
up_time_half_seconds = syscon_cmd_read(cmd=0x11, size=4) | |||
UTC = timedelta(microseconds=last_reincarnated_tick * (1<<19)) + datetime(1, 1, 1) + timedelta(seconds=up_time_half_seconds*2) | |||
</source> | |||
[[Category:ARM]] | |||
[[Category:Kernel]] | |||
[[Category:Modules]] | [[Category:Modules]] | ||
[[Category: | [[Category:Library]] |
Latest revision as of 15:54, 19 April 2025
Real Time Clock.
Module
Version | World | Privilege |
---|---|---|
0.931.010-3.740.011 | Non-secure | Kernel |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
0.920-3.740.011 | SceRtcForDriver | Non-secure | Kernel | 0x0351D827 |
0.931.010-3.740.011 | SceRtc | Non-secure | User | 0x3503487E |
Types
typedef struct SceRtcTickBase { // size is 0x28-bytes
SceRtcTick tick_src_0;
SceRtcTick tick_dst_0;
int unk_0x10;
int unk_0x14;
int tick_flags_0;
int unk_0x1C;
int unk_0x20;
int unk_0x24;
} SceRtcTickBase;
// internal use. From SceRtc_data + 0x38
typedef struct SceRtcTickContext { // size is 0x140-bytes
SceRtcTickBase current_secure_tick;
SceRtcTickBase current_retained_network_tick;
SceRtcTickBase current_tool_secure_tick;
SceRtcTickBase current_gps_tick;
SceRtcTickBase current_debug_network_tick;
SceRtcTickBase unk_tick_5;
SceRtcTickBase unk_tick_6;
SceRtcTickBase unk_tick_7;
} SceRtcTickContext;
Information
If some ticks in rtc are lower than the constant set in SceRtc, those ticks are set to 0.
constant list per fw.
Version | date |
---|---|
1.00 - 1.67 | 2011/08/01 |
1.80 | 2012/06/01 |
2.00 - 2.xx | 2012/09/01 |
2.50 - 3.00 | 2013/01/01 |
3.30 | 2014/01/01 |
3.50 - 3.74 | 2015/01/01 |
SceRtcForDriver
sceRtcCompareTickForDriver
Version | NID |
---|---|
0.920-3.740.011 | 0x0EBB3F12 |
Returns 0 if tick_1 == tick_2, -1 if tick_1 < tick_2 and 1 else.
int sceRtcCompareTickForDriver(const SceRtcTick *tick_1, const SceRtcTick *tick_2);
sceRtcConvertLocalTimeToUtcForDriver
Version | NID |
---|---|
3.60 | 0xAD2F3544 |
sceRtcConvertUtcToLocalTimeForDriver
Version | NID |
---|---|
3.60 | 0xC6E03DD4 |
sceRtcFormatRFC2822ForDriver
Version | NID |
---|---|
3.60 | 0xBA3415F8 |
sceRtcFormatRFC2822LocalTimeForDriver
Version | NID |
---|---|
3.60 | 0x1F7FC209 |
sceRtcFormatRFC3339ForDriver
Version | NID |
---|---|
3.60 | 0xD32AC698 |
int sceRtcFormatRFC3339ForDriver(char *pszDateTime, const SceRtcTick *utc, int iTimeZoneMinutes);
sceRtcFormatRFC3339LocalTimeForDriver
Version | NID |
---|---|
3.60 | 0x35925318 |
sceRtcGetAccumulativeTimeForDriver
Version | NID |
---|---|
3.60 | 0x0A86FB04 |
sceRtcGetAlarmTickForDriver
Version | NID |
---|---|
3.60 | 0xC838275A |
sceRtcGetCurrentAdNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0x3E3C09A0 |
sceRtcGetCurrentClockForDriver
Version | NID |
---|---|
3.60 | 0xA930CD1A |
sceRtcGetCurrentClockLocalTimeForDriver
Version | NID |
---|---|
3.60 | 0x7DC0DF93 |
sceRtcGetCurrentDebugNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0xC141632A |
sceRtcGetCurrentGpsTickForDriver
Version | NID |
---|---|
3.60 | 0xF69B610F |
sceRtcGetCurrentNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0xF1517B38 |
If the current NetworkTick is less than 2015/01/01, the system will ignore the registry setting and update the NetworkTick from the internet.
int sceRtcGetCurrentNetworkTickForDriver(SceRtcTick *tick);
sceRtcGetCurrentRetainedNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0x40B4BCFF |
sceRtcGetCurrentTickForDriver
Version | NID |
---|---|
3.60 | 0xDEC408D4 |
sceRtcGetCurrentSecureTickForDriver
Version | NID |
---|---|
1.03-3.60 | 0x401C0954 |
If the current SecureTick is less than 2015/01/01, it sets 0xDDDEF8B3A14000(1980/01/01 00:00:00 UTC) to the Secure Tick and returns error code 0x80251002.
int sceRtcGetCurrentSecureTickForDriver(SceRtcTick *tick);
sceRtcConvertTickToDateTimeForDriver
Version | NID |
---|---|
1.03-3.60 | 0x42A0DFCB |
This is a guessed name.
Maybe reverse function of #sceRtcConvertDateTimeToTickForDriver.
Used with the result of #sceRtcGetCurrentSecureTickForDriver. Used by SceCoredump, SceSblGcAuthMgr.
int sceRtcConvertTickToDateTimeForDriver(SceDateTime *dst, SceRtcTick *src);
sceRtcTickAddMinuteForDriver
Version | NID |
---|---|
3.60 | 0x0F9E02EF |
This is guessed name.
Converts a time into a SceRtcTick for use e.g. with #sceRtcConvertTickToDateTimeForDriver.
int sceRtcTickAddMinuteForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 seconds);
SceRtcForDriver_DE9F4515
Version | NID |
---|---|
3.60 | 0xDE9F4515 |
It does: src * 1000000 + 0xdcbffeff2bc000
so src is maybe of type SceRtcTick or just a time in microseconds.
int SceRtcForDriver_DE9F4515(SceDateTime* dst, SceUInt32 src);
sceRtcConvertDateTimeToTickForDriver
Version | NID |
---|---|
0.990.000-3.740.011 | 0xF139E359 |
This is a guessed name.
Maybe reverse function of #sceRtcConvertTickToDateTimeForDriver.
int sceRtcConvertDateTimeToTickForDriver(SceDateTime* src, SceRtcTick *dst);
sceRtcConvertDateTimeToUnixTimeForDriver
Version | NID |
---|---|
3.60 | 0x497B5DC9 |
This is a guessed name.
Used by SceCoredump.
int sceRtcConvertDateTimeToUnixTimeForDriver(const SceDateTime *src, SceUInt64 *dst);
sceRtcSetCurrentAuxTickForDriver
Version | NID |
---|---|
0.990.000-3.740.011 | 0xA7236656 |
int sceRtcSetCurrentAuxTickForDriver(SceRtcTick *tick);
sceRtcGetLastAdjustedTickForDriver
Version | NID |
---|---|
3.60 | 0x8A987573 |
sceRtcGetLastReincarnatedTickForDriver
Version | NID |
---|---|
3.60 | 0x3D614A9A |
sceRtcGetSecureAlarmTickForDriver
Version | NID |
---|---|
3.60 | 0xBD53731C |
sceRtcSynchronizeForDriver
Version | NID |
---|---|
3.60-3.74 | 0xA2D280B4 |
Initializes SceRtc internal flags.
int sceRtcSynchronizeForDriver(void);
SceRtcForDriver_ABA035B7
Version | NID |
---|---|
3.60 | 0xABA035B7 |
Reset all SceRtc internal flags to 0.
Returns 0.
int SceRtcForDriver_ABA035B7(void);
sceRtcGetCurrentToolSecureTickForDriver
Version | NID |
---|---|
0.990-3.60 | 0xA0D7899A |
This is a guessed name.
Used on Tool only. Used when checking DevKit activation license expire date.
Creates a tick using SceKernelThreadMgr#sceKernelGetSystemTimeWideForDriver.
int sceRtcGetCurrentToolSecureTickForDriver(SceRtcTick *pTick);
sceRtcIsAlarmedForDriver
Version | NID |
---|---|
3.60 | 0xCD295F0C |
sceRtcIsSecureAlarmedForDriver
Version | NID |
---|---|
3.60 | 0xE39F2ABE |
sceRtcRegisterCallbackForDriver
Version | NID |
---|---|
3.60 | 0x5220870D |
sceRtcRegisterSecureAlarmCallbackForDriver
Version | NID |
---|---|
3.60 | 0xCF84DFC0 |
sceRtcSetAlarmTickForDriver
Version | NID |
---|---|
3.60 | 0xD610C646 |
sceRtcSetConfForDriver
Version | NID |
---|---|
3.60 | 0xACFE5A9F |
sceRtcSetCurrentDebugNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0xAAB6053F |
sceRtcSetCurrentNetworkTickForDriver
Version | NID |
---|---|
3.60 | 0x162E486E |
sceRtcSetCurrentSecureTickForDriver
Version | NID |
---|---|
3.60 | 0x7D431C87 |
sceRtcSetCurrentTickForDriver
Version | NID |
---|---|
3.60 | 0x70A78CD2 |
sceRtcSetSecureAlarmTickForDriver
Version | NID |
---|---|
3.60 | 0x8333790D |
sceRtcUnregisterCallbackForDriver
Version | NID |
---|---|
3.60 | 0x9546C68B |
sceRtcUnregisterSecureAlarmCallbackForDriver
Version | NID |
---|---|
3.60 | 0xEDDC2325 |
sceRtcTickAddSecondForDriver
Version | NID |
---|---|
0.931-3.60 | 0x9C8AF264 |
This is guessed name.
Adds time (in second) to a time structure (in nanosecond).
int sceRtcTickAddSecondForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 seconds);
SceRtcForDriver_CE51C2A1
Version | NID |
---|---|
0.931-3.60 | 0xCE51C2A1 |
Adds time (in microseconds) to a time structure (in nanosecond).
int SceRtcForDriver_CE51C2A1(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 microseconds);
sceRtcTickAddMicroSecondForDriver
Version | NID |
---|---|
3.200.010 | 0xA82AC5B3 |
This is guessed name.
int sceRtcTickAddMicroSecondForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt64 microseconds);
sceRtcTickAddDayForDriver
Version | NID |
---|---|
3.60 | 0x0CB72FAF |
This is guessed name.
Used by SceCompat#sceCompatSetUpdateState.
int sceRtcTickAddDayForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 days);
SceRtcForDriver_FFD7A04F
Version | NID |
---|---|
3.60 | 0xFFD7A04F |
Used indirectly by SceProcessmgr#sceKernelLibcTime.
SceRtcForDriver_9097EF0D
Version | NID |
---|---|
3.60 | 0x9097EF0D |
Used indirectly by SceProcessmgr.
SceRtcForDriver_0F800878
Version | NID |
---|---|
3.60 | 0x0F800878 |
Used indirectly by SceProcessmgr.
int SceRtcForDriver_0F800878(SceUInt32 year, SceUInt32 month, SceUInt32 day)
sceRtcIsValidDateTimeForDriver
Version | NID |
---|---|
3.200.010 | 0xADF63D7C |
This is guessed name.
int sceRtcIsValidDateTimeForDriver(const SceDateTime *pDateTime);
sceRtcConvertDateTimeToFatTimeForDriver
Version | NID |
---|---|
3.200.010 | 0x09AF419B |
This is guessed name.
int sceRtcConvertDateTimeToFatTimeForDriver(const SceDateTime *pDateTime, SceUInt32 *pFatTime);
sceRtcTickAddWeekForDriver
Version | NID |
---|---|
3.200.010 | 0x24209FBF |
This is guessed name.
int sceRtcTickAddWeekForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 weeks);
sceRtcTickAddHourForDriver
Version | NID |
---|---|
3.200.010 | 0x32E50C36 |
This is guessed name.
int sceRtcTickAddHourForDriver(SceRtcTick *pDst, const SceRtcTick *pSrc, SceUInt32 hours);
sceRtcGetOneSecondForDriver
Version | NID |
---|---|
3.200.010 | 0x6965E5DF |
This is guessed name.
SceUInt32 sceRtcGetOneSecondForDriver(void);
sceRtcIsLeepYearForDriver
Version | NID |
---|---|
3.200.010 | 0x6F96FAA5 |
This is guessed name.
SceBool sceRtcIsLeepYearForDriver(SceUInt32 year);
SceRtcForDriver_A1F41AE2
Version | NID |
---|---|
3.200.010 | 0xA1F41AE2 |
int SceRtcForDriver_A1F41AE2(SceRtcTick *pTick, const char *str);
SceRtcForDriver_BA14600F
Version | NID |
---|---|
3.200.010 | 0xBA14600F |
It may be related to FILETIME on Windows.
int SceRtcForDriver_BA14600F(SceRtcTick *pDst, SceUInt64 a2);
sceRtcGetMonthDayCountForDriver
Version | NID |
---|---|
3.200.010 | 0xC2DC38D9 |
This is guessed name.
int sceRtcGetMonthDayCountForDriver(SceUInt32 year, SceUInt32 month);
SceRtc
_sceRtcGetCurrentNetworkTick
Version | NID |
---|---|
1.69-3.60 | 0x06F734FE |
_sceRtcConvertLocalTimeToUtc
Version | NID |
---|---|
1.69-3.60 | 0x0FC8AC41 |
_sceRtcConvertUtcToLocalTime
Version | NID |
---|---|
1.69-3.60 | 0x1E61DDA4 |
_sceRtcGetCurrentTick
Version | NID |
---|---|
1.69-3.60 | 0x247EE33B |
_sceRtcGetCurrentClock
Version | NID |
---|---|
1.69-3.60 | 0x24947354 |
sceRtcGetAccumulativeTime
Version | NID |
---|---|
1.69-3.60 | 0x258BE8EC |
_sceRtcFormatRFC2822
Version | NID |
---|---|
1.69-3.60 | 0x2CD6AC86 |
_sceRtcGetCurrentGpsTick
Version | NID |
---|---|
1.69-3.60 | 0x3BA820E5 |
_sceRtcGetCurrentClockLocalTime
Version | NID |
---|---|
1.69-3.60 | 0x41A6C861 |
_sceRtcFormatRFC3339LocalTime
Version | NID |
---|---|
1.69-3.60 | 0x4836474D |
_sceRtcFormatRFC2822LocalTime
Version | NID |
---|---|
1.69-3.60 | 0x4C7ED349 |
_sceRtcFormatRFC3339
Version | NID |
---|---|
1.69-3.60 | 0x7EE2CBEF |
_sceRtcGetCurrentRetainedNetworkTick
Version | NID |
---|---|
1.69-3.60 | 0xC17EA809 |
_sceRtcGetLastReincarnatedTick
Version | NID |
---|---|
1.69-3.60 | 0xE13D0FE5 |
_sceRtcGetLastAdjustedTick
Version | NID |
---|---|
1.69-3.60 | 0xEA157EC5 |
_sceRtcGetCurrentAdNetworkTick
Version | NID |
---|---|
3.60 | 0x76EFA8FE |
_sceRtcGetCurrentDebugNetworkTick
Version | NID |
---|---|
3.60 | 0xBF639B21 |
How to get current time and date
Getting the current time and date involves Syscon scratchpad and Syscon command 0x11. Syscon command 0x11 returns twice the number of seconds Syscon has been running since its power on. Syscon scratchpad contains at offset 0x10 the timestamp when Syscon "started" running. It is stored in the following format: microseconds since 01/01/0001 and divided by 2^19. By adding those values together, the OS obtains the current time and date.
In pseudocode:
last_reincarnated_tick = syscon_read_scratchpad(offset=0x10, size=5)
up_time_half_seconds = syscon_cmd_read(cmd=0x11, size=4)
UTC = timedelta(microseconds=last_reincarnated_tick * (1<<19)) + datetime(1, 1, 1) + timedelta(seconds=up_time_half_seconds*2)