PCV services: Difference between revisions
No edit summary |
|||
(88 intermediate revisions by 8 users not shown) | |||
Line 6: | Line 6: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || ShutdownSystem | | 0 || [[#ShutdownSystem]] | ||
|- | |- | ||
| 1 || RebootSystem | | 1 || [[#RebootSystem]] | ||
|- | |- | ||
| 2 || GetWakeupReason | | 2 || [[#GetWakeupReason]] | ||
|- | |- | ||
| 3 || GetShutdownReason | | 3 || [[#GetShutdownReason]] | ||
|- | |- | ||
| 4 || GetAcOk | | 4 || [[#GetAcOk]] | ||
|- | |- | ||
| 5 || | | 5 || [[#GetPowerEvent]] | ||
|- | |- | ||
| 6 || GetSleepButtonState | | 6 || [2.0.0-13.2.1] [[#GetSleepButtonState]] | ||
|- | |- | ||
| 7 || | | 7 || [2.0.0+] [[#GetPowerButtonEvent]] | ||
|- | |- | ||
| 8 || | | 8 || [2.0.0-9.2.0] [[#CreateWakeupTimer]] | ||
|- | |- | ||
| 9 || | | 9 || [2.0.0-9.2.0] [[#CancelWakeupTimer]] | ||
|- | |- | ||
| 10 || | | 10 || [2.0.0-9.2.0] [[#EnableWakeupTimerOnDevice]] | ||
|- | |||
| 11 || [3.0.0-9.2.0] [[#CreateWakeupTimerEx]] | |||
|- | |||
| 12 || [3.0.0-9.2.0] [[#GetLastEnabledWakeupTimerType]] | |||
|- | |||
| 13 || [3.0.0-9.2.0] [[#CleanAllWakeupTimers]] | |||
|- | |||
| 14 || [6.0.0+] [[#GetPowerButton]] | |||
|- | |||
| 15 || [10.0.0+] [[#SetUpRtcResetOnShutdown]] | |||
|} | |} | ||
== ShutdownSystem == | |||
No input/output. | |||
== RebootSystem == | |||
No input/output. | |||
== GetWakeupReason == | |||
No input. Returns an output u32. | |||
== GetShutdownReason == | |||
No input. Returns an output u32. | |||
== GetAcOk == | |||
No input. Returns an output bool. | |||
== GetPowerEvent == | |||
Takes an input [[#BoardPowerControlEventTarget|BoardPowerControlEventTarget]]. Returns an output Event handle. | |||
== GetSleepButtonState == | |||
No input. Returns an output [[#SleepButtonState|SleepButtonState]]. | |||
== GetPowerButtonEvent == | |||
Takes an input [[#EventTarget|EventTarget]]. Returns an output Event handle. | |||
== CreateWakeupTimer == | |||
Takes an input u64. Returns an output u32. | |||
== CancelWakeupTimer == | |||
Takes an input u32. No output. | |||
== EnableWakeupTimerOnDevice == | |||
No input. Returns an output bool '''IsEnabled''' and an output u64 '''Interval'''. | |||
[3.0.0+] Now returns an u32 and an u64. | |||
== CreateWakeupTimerEx == | |||
Takes two input u64s. Returns an output u32. | |||
== GetLastEnabledWakeupTimerType == | |||
No input. Returns an output u32. | |||
== CleanAllWakeupTimers == | |||
Takes an input u32. No output. | |||
== GetPowerButton == | |||
No input. Returns an output bool '''IsPushed'''. | |||
== SetUpRtcResetOnShutdown == | |||
No input/output. Enables an internal wakeup timer when calling [[#ShutdownSystem|ShutdownSystem]] or [[#RebootSystem|RebootSystem]]. | |||
= bpc:r = | = bpc:r = | ||
Line 36: | Line 96: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [[#GetRtcTime]] | ||
|- | |||
| 1 || [[#SetRtcTime]] | |||
|- | |- | ||
| | | 2 || [[#GetRtcResetDetected]] | ||
|- | |- | ||
| | | 3 || [2.0.0+] [[#ClearRtcResetDetected]] | ||
|- | |- | ||
| | | 4 || [3.0.0+] [[#SetUpRtcResetOnShutdown]] | ||
|} | |} | ||
== GetRtcTime == | |||
No input. Returns an output u64. | |||
== SetRtcTime == | |||
Takes an input u64. No output. | |||
== GetRtcResetDetected == | |||
No input. Returns an output bool. | |||
== ClearRtcResetDetected == | |||
No input/output. | |||
== SetUpRtcResetOnShutdown == | |||
No input/output. | |||
= bpc:c = | |||
This is "nn::bpc::IBoardPowerControlManager". | |||
[2.0.0+] This service was replaced by [[#bpc|bpc]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#ShutdownSystem]] | |||
|- | |||
| 1 || [[#RebootSystem]] | |||
|- | |||
| 2 || [[#GetWakeupReason]] | |||
|- | |||
| 3 || [[#GetShutdownReason]] | |||
|- | |||
| 4 || [[#GetAcOk]] | |||
|- | |||
| 5 || [[#GetPowerEvent]] | |||
|} | |||
= bpc:b = | |||
This is "nn::bpc::IPowerButtonManager". | |||
[2.0.0+] This service was merged into [[#bpc|bpc]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#GetSleepButtonState]] | |||
|- | |||
| 1 || [[#GetPowerButtonEvent]] | |||
|} | |||
= bpc:w = | |||
This is "nn::bpc::IWakeupConfigManager". | |||
[2.0.0+] This service was merged into [[#bpc|bpc]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#CreateWakeupTimer]] | |||
|- | |||
| 1 || [[#CancelWakeupTimer]] | |||
|- | |||
| 2 || [[#EnableWakeupTimerOnDevice]] | |||
|} | |||
= pcv = | = pcv = | ||
Line 54: | Line 181: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || SetPowerEnabled | | [1.0.0-7.0.1] 0 || [[#SetPowerEnabled]] | ||
|- | |||
| [1.0.0-7.0.1] 1 || [[#SetClockEnabled]] | |||
|- | |||
| [1.0.0-7.0.1] 2 || [[#SetClockRate]] | |||
|- | |||
| [1.0.0-7.0.1] 3 || [[#GetClockRate]] | |||
|- | |||
| [1.0.0-7.0.1] 4 || [[#GetState]] | |||
|- | |||
| [1.0.0-7.0.1] 5 || [[#GetPossibleClockRates]] | |||
|- | |||
| [1.0.0-7.0.1] 6 || [[#SetMinVClockRate]] | |||
|- | |- | ||
| 1 || | | [1.0.0-7.0.1] 7 || [[#SetReset]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 8 || [[#SetVoltageEnabled]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 9 || [[#GetVoltageEnabled]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 10 || [[#GetVoltageRange]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 11 || [[#SetVoltageValue]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 12 || [[#GetVoltageValue]] | ||
|- | |- | ||
| 7 || | | [1.0.0-7.0.1] 13 || [[#GetTemperatureThresholds]] | ||
|- | |- | ||
| | | [1.0.0-7.0.1] 14 || [[#SetTemperature]] | ||
|- | |- | ||
| | | [1.0.0-5.1.0] 15 || [[#Initialize]] | ||
|- | |- | ||
| | | [1.0.0-5.1.0] 16 || [[#IsInitialized]] | ||
|- | |- | ||
| | | [1.0.0-5.1.0] 17 || [[#Finalize]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 18 || [[#PowerOn]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 19 || [[#PowerOff]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 20 || [[#ChangeVoltage]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 21 || [[#GetPowerClockInfoEvent]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 22 || [[#GetOscillatorClock]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 23 || [[#GetDvfsTable]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 24 || [[#GetModuleStateTable]] | ||
|- | |- | ||
| | | [3.0.0-7.0.1] 25 || [[#GetPowerDomainStateTable]] | ||
|- | |- | ||
| | | 26 || [3.0.0+] [[#GetFuseInfo]] | ||
|- | |- | ||
| | | 27 || [5.0.0+] [[#GetDramId]] | ||
|- | |- | ||
| | | [6.0.0-7.0.1] 28 || [[#IsPoweredOn]] | ||
|- | |- | ||
| | | [6.0.0-7.0.1] 29 || [[#GetVoltage]] | ||
|} | |||
== SetPowerEnabled == | |||
Takes an input [[#Module|ModuleId]] and an input bool '''Enabled'''. No output. | |||
== SetClockEnabled == | |||
Takes an input [[#Module|ModuleId]] and an input bool '''Enabled'''. No output. | |||
== SetClockRate == | |||
Takes an input [[#Module|ModuleId]] and an input u32 '''ClockRateHz'''. No output. | |||
== GetClockRate == | |||
Takes an input [[#Module|ModuleId]]. Returns an output u32 '''ClockRateHz'''. | |||
== GetState == | |||
Takes an input [[#Module|ModuleId]]. Returns an output [[#ModuleState|ModuleState]]. | |||
== GetPossibleClockRates == | |||
Takes a type-0xA output buffer of [[#ClockRatesListType|ClockRatesListType]], an input [[#Module|ModuleId]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount''' and an output u32 '''OutRates'''. | |||
== SetMinVClockRate == | |||
Takes an input [[#Module|ModuleId]] and an input u32 '''ClockRateHz'''. No output. | |||
== SetReset == | |||
Takes an input [[#Module|ModuleId]] and an input bool '''Asserted'''. No output. | |||
== SetVoltageEnabled == | |||
Takes an input [[#PowerDomain|PowerDomain]] and an input bool '''Enabled'''. No output. | |||
== GetVoltageEnabled == | |||
Takes an input [[#PowerDomain|PowerDomain]]. Returns an output bool '''Enabled'''. | |||
== GetVoltageRange == | |||
Takes an input [[#PowerDomain|PowerDomain]]. Returns three output s32s '''MinVolt''', '''MaxVolt''' and '''StepVolt'''. | |||
== SetVoltageValue == | |||
Takes an input [[#PowerDomain|PowerDomain]] and an input s32 '''MicroVolt'''. No output. | |||
== GetVoltageValue == | |||
Takes an input [[#PowerDomain|PowerDomain]]. Returns an output s32 '''MicroVolt'''. | |||
== GetTemperatureThresholds == | |||
Takes a type-0xA output buffer of [[#TemperatureThreshold|TemperatureThreshold]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
== SetTemperature == | |||
Takes an input s32 '''TemperatureMilliC'''. No output. | |||
== Initialize == | |||
No input/output. | |||
== IsInitialized == | |||
No input. Returns an output bool. | |||
== Finalize == | |||
No input/output. | |||
== PowerOn == | |||
Takes an input [[#PowerControlTarget|PowerControlTarget]] and an input s32 '''MicroVolt'''. No output. | |||
== PowerOff == | |||
Takes an input [[#PowerControlTarget|PowerControlTarget]]. No output. | |||
== ChangeVoltage == | |||
Takes an input [[#PowerControlTarget|PowerControlTarget]] and an input s32 '''MicroVolt'''. No output. | |||
== GetPowerClockInfoEvent == | |||
No input. Returns an output Event handle. | |||
== GetOscillatorClock == | |||
No input. Returns an output u32. | |||
== GetDvfsTable == | |||
Takes two type-0xA output buffers and two input s32s. Returns an output s32 '''OutCount'''. | |||
[7.0.0+] The type-0xA output buffers were replaced with type-0x22 output buffers. | |||
== GetModuleStateTable == | |||
Takes a type-0xA output buffer of [[#ModuleState|ModuleState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer. | |||
== GetPowerDomainStateTable == | |||
Takes a type-0xA output buffer of [[#PowerDomainState|PowerDomainState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer. | |||
== GetFuseInfo == | |||
Takes a type-0xA output buffer and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
== GetDramId == | |||
No input. Returns an u32. | |||
== IsPoweredOn == | |||
Takes an input [[#PowerControlTarget|PowerControlTarget]]. Returns an output bool. | |||
== GetVoltage == | |||
Takes an input [[#PowerControlTarget|PowerControlTarget]]. Returns an output s32. | |||
= pcv:arb = | |||
This is "nn::pcv::IArbitrationManager". | |||
This service no longer exists in [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#ReleaseControl]] | ||
|} | |||
== ReleaseControl == | |||
Takes an input [[#Module|ModuleId]]. No output. | |||
= pcv:imm = | |||
This is "nn::pcv::IImmediateManager". | |||
This service no longer exists in [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[#SetClockRate]] | |||
|} | |} | ||
== | = clkrst, clkrst:i = | ||
These are "nn::clkrst::IClkrstManager" and "nn::clkrst::IImmediateManager". | |||
These were added with [8.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#OpenSession|OpenSession]] | ||
|- | |- | ||
| | | 1 || [[#GetTemperatureThresholds|GetTemperatureThresholds]] | ||
|- | |- | ||
| | | 2 || [[#NotifyTemperature|NotifyTemperature]] | ||
|- | |- | ||
| | | 3 || [[#GetClkrstStateTable|GetClkrstStateTable]] | ||
|- | |- | ||
| | | 4 || [[#GetClkrstStateTableUpdateEvent|GetClkrstStateTableUpdateEvent]] | ||
|- | |- | ||
| | | 5 || [[#GetClkrstStateTableCount|GetClkrstStateTableCount]] | ||
|- | |- | ||
| | | 6 || [15.0.0+] PrintClockTree | ||
|- | |- | ||
| | | 7 || [20.0.0+] | ||
|} | |||
== OpenSession == | |||
Takes an input [[#Module|DeviceCode]] and an input u32. Returns an [[#IClkrstSession]]. | |||
== NotifyTemperature == | |||
Takes an input float. No output. | |||
== GetClkrstStateTable == | |||
Takes a type-0xA output buffer of [[#ModuleState|ModuleState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer. | |||
== GetClkrstStateTableUpdateEvent == | |||
No input. Returns an output Event handle. | |||
== GetClkrstStateTableCount == | |||
No input. Returns 0x1A. | |||
== IClkrstSession == | |||
This is "nn::clkrst::IClkrstSession". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || EnableClock | ||
|- | |- | ||
| | | 1 || DisableClock | ||
|- | |- | ||
| | | 2 || AssertReset | ||
|- | |- | ||
| | | 3 || DeassertReset | ||
|- | |- | ||
| | | 4 || EnablePower | ||
|- | |- | ||
| | | 5 || DisablePower | ||
|- | |- | ||
| | | 6 || GetModuleState | ||
|- | |- | ||
| | | 7 || SetClockRate | ||
|- | |- | ||
| | | 8 || GetClockRate | ||
|- | |- | ||
| | | 9 || SetMinimumVoltageClockRate | ||
|- | |- | ||
| | | 10 || GetPossibleClockRates | ||
|- | |- | ||
| | | 11 || GetDvfsTable | ||
|- | |- | ||
| | | 12 || [14.0.0+] IsParentClock | ||
|- | |- | ||
| | | 13 || [14.0.0+] SetParentClock | ||
|- | |- | ||
| | | 14 || [18.0.0+] | ||
|- | |- | ||
| | | 15 || [18.0.0+] | ||
|} | |||
= clkrst:a = | |||
This is "nn::clkrst::IArbitrationManager". | |||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#ReleaseControl_2|ReleaseControl]] | ||
|} | |||
== ReleaseControl == | |||
Takes an input [[#Module|DeviceCode]]. No output. | |||
= rgltr = | |||
This is "nn::regulator::IRegulatorManager". | |||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#OpenSession_2|OpenSession]] | ||
|- | |- | ||
| | | 1 || [[#GetRegulatorStateTable|GetRegulatorStateTable]] | ||
|- | |- | ||
| | | 2 || [[#GetRegulatorStateTableUpdateEvent|GetRegulatorStateTableUpdateEvent]] | ||
|- | |- | ||
| | | 3 || [[#GetRegulatorStateTableCount|GetRegulatorStateTableCount]] | ||
|} | |||
== OpenSession == | |||
Takes an input [[#PowerDomain|DeviceCode]] and returns an [[#IRegulatorSession]]. | |||
== GetRegulatorStateTable == | |||
Takes a type-0xA output buffer of [[#PowerDomainState|PowerDomainState]] and an input s32 '''MaxCount'''. Returns an output s32 '''OutCount'''. | |||
[7.0.0+] The type-0xA output buffer was replaced with a type-0x22 output buffer. | |||
== GetRegulatorStateTableUpdateEvent == | |||
No input. Returns an output Event handle. | |||
== GetRegulatorStateTableCount == | |||
No input. Returns 0x3. | |||
== IRegulatorSession == | |||
This is "nn::regulator::IRegulatorSession". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || RequestOutput | ||
|- | |- | ||
| | | 1 || CancelOutputRequest | ||
|- | |- | ||
| | | 2 || IsOutputEnabled | ||
|- | |- | ||
| | | 3 || GetVoltageRangeInMicroVolt | ||
|- | |- | ||
| | | 4 || GetVoltageInMicroVolt | ||
|- | |- | ||
| | | 5 || RequestVoltageInMicroVolt | ||
|- | |- | ||
| | | 6 || CancelVoltageRequest | ||
|- | |- | ||
| | | 7 || [13.0.0+] [[#GetMinimumOffStateHoldTime|GetMinimumOffStateHoldTime]] | ||
|- | |- | ||
| | | 8 || [13.0.0+] [[#RequestMinimumOffStateHoldTime|RequestMinimumOffStateHoldTime]] | ||
|- | |- | ||
| | | 9 || [13.0.0+] [[#CancelMinimumOffStateHoldTimeRequest|CancelMinimumOffStateHoldTimeRequest]] | ||
|} | |||
=== GetMinimumOffStateHoldTime === | |||
No input. Returns an output u64. | |||
=== RequestMinimumOffStateHoldTime === | |||
Takes an input u64. No output. | |||
=== CancelMinimumOffStateHoldTimeRequest === | |||
No input/output. | |||
= rtc = | |||
This is "nn::rtc::IRtcManager". | |||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#GetTimeInSeconds|GetTimeInSeconds]] | ||
|- | |- | ||
| | | 1 || [[#SetTimeInSeconds|SetTimeInSeconds]] | ||
|- | |- | ||
| | | 2 || [[#SetResetOnShutdown|SetResetOnShutdown]] | ||
|- | |- | ||
| | | 3 || [[#GetResetDetected|GetResetDetected]] | ||
|- | |- | ||
| | | 4 || [[#ClearResetDetected|ClearResetDetected]] | ||
|- | |- | ||
| | | 10 || [10.0.0+] [[#EnableAlarm|EnableAlarm]] | ||
|- | |- | ||
| | | 11 || [10.0.0+] [[#DisableRtcAlarm|DisableRtcAlarm]] | ||
|- | |- | ||
| | | 12 || [18.0.0+] | ||
|- | |- | ||
| | | 13 || [18.0.0+] | ||
|} | |||
[20.0.0+] Cmd13 now takes a total of 4-bytes of input instead of 8-bytes and returns a total of 2-bytes of output. | |||
== GetTimeInSeconds == | |||
Same as [[#GetRtcTime|GetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001). | |||
== SetTimeInSeconds == | |||
Same as [[#SetRtcTime|SetRtcTime]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001). | |||
== SetResetOnShutdown == | |||
Takes an input bool '''DoReset''' and an input [[Bus_services#I2cDevice|DeviceCode]]. Similar to [[#SetUpRtcResetOnShutdown|SetUpRtcResetOnShutdown]], but this version assigns the provided boolean value on a per-client basis (instead of a global variable) and checks it when the current [[PSC_services#Power_Management_States|power state]] is '''ReadyShutdown'''. | |||
== GetResetDetected == | |||
Same as [[#GetRtcResetDetected|GetRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001). | |||
== ClearResetDetected == | |||
Same as [[#ClearRtcResetDetected|ClearRtcResetDetected]], but takes an input [[Bus_services#I2cDevice|DeviceCode]] ([[#bpc:r|bpc:r]] uses hardcoded value 0x3B000001). | |||
== EnableAlarm == | |||
Takes an input [[#Module|DeviceCode]], an input u32 '''RtcAlarmId''' (0 = RtcAlarm1, 1 = RtcAlarm2) and an u64 '''RtcAlarmTime'''. No output. | |||
== DisableAlarm == | |||
Takes an input [[#Module|DeviceCode]] and an input u32 '''RtcAlarmId''' (0 = RtcAlarm1, 1 = RtcAlarm2). No output. | |||
= time:u, time:a, time:s = | |||
This is "nn::timesrv::detail::service::IStaticService". | |||
[9.0.0+] These services were moved to [[Glue_services|Glue]] and [[PSC_services|PSC]]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#GetStandardUserSystemClock]] | ||
|- | |- | ||
| | | 1 || [[#GetStandardNetworkSystemClock]] | ||
|- | |- | ||
| | | 2 || [[#GetStandardSteadyClock]] | ||
|- | |- | ||
| | | 3 || [[#GetTimeZoneService]] | ||
|- | |- | ||
| | | 4 || [[#GetStandardLocalSystemClock]] | ||
|- | |- | ||
| | | 5 || [4.0.0+] [[#GetEphemeralNetworkSystemClock]] | ||
|- | |- | ||
| | | 20 || [6.0.0+] GetSharedMemoryNativeHandle | ||
|- | |- | ||
| | | 30 || [6.0.0+] GetStandardNetworkClockOperationEventReadableHandle | ||
|- | |- | ||
| | | 31 || [6.0.0+] GetEphemeralNetworkClockOperationEventReadableHandle | ||
|- | |- | ||
| | | 50 || [4.0.0+] SetStandardSteadyClockInternalOffset | ||
|- | |- | ||
| | | 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled | ||
|- | |- | ||
| | | 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled | ||
|- | |- | ||
| | | 102 || [5.0.0+] GetStandardUserSystemClockInitialYear | ||
|- | |- | ||
| | | 200 || [3.0.0+] IsStandardNetworkSystemClockAccuracySufficient | ||
|- | |- | ||
| | | 201 || [6.0.0+] GetStandardUserSystemClockAutomaticCorrectionUpdatedTime | ||
|- | |- | ||
| | | 300 || [4.0.0+] CalculateMonotonicSystemClockBaseTimePoint | ||
|- | |- | ||
| | | 400 || [4.0.0+] GetClockSnapshot | ||
|- | |- | ||
| | | 401 || [4.0.0+] GetClockSnapshotFromSystemClockContext | ||
|- | |- | ||
| | | 500 || [4.0.0+] CalculateStandardUserSystemClockDifferenceByUser | ||
|- | |- | ||
| | | 501 || [4.0.0+] CalculateSpanBetween | ||
|} | |||
== GetStandardUserSystemClock == | |||
No input. Returns an [[#ISystemClock]]. | |||
== GetStandardNetworkSystemClock == | |||
No input. Returns an [[#ISystemClock]]. | |||
== GetStandardSteadyClock == | |||
No input. Returns an [[#ISteadyClock]]. | |||
== GetTimeZoneService == | |||
No input. Returns an [[#ITimeZoneService]]. | |||
== GetStandardLocalSystemClock == | |||
No input. Returns an [[#ISystemClock]]. | |||
== GetEphemeralNetworkSystemClock == | |||
No input. Returns an [[#ISystemClock]]. | |||
== ISteadyClock == | |||
This is "nn::timesrv::detail::service::ISteadyClock". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#GetCurrentTimePoint]] | ||
|- | |- | ||
| | | 2 || [[#GetTestOffset]] | ||
|- | |- | ||
| | | 3 || [[#SetTestOffset]] | ||
|- | |- | ||
| | | 100 || [2.0.0+] [[#GetRtcValue]] | ||
|- | |- | ||
| | | 101 || [2.0.0+] [[#IsRtcResetDetected]] | ||
|- | |- | ||
| | | 102 || [2.0.0+] [[#GetSetupResultValue]] | ||
|- | |- | ||
| | | 200 || [3.0.0+] [[#GetInternalOffset]] | ||
|- | |- | ||
| 201 || [3.0.0-3.0.2] [[#SetInternalOffset]] | |||
|} | |} | ||
=== | === GetCurrentTimePoint === | ||
No input. Returns an output [[#SteadyClockTimePoint]]. | |||
=== GetTestOffset === | |||
No input. Returns an output [[#TimeSpanType]]. | |||
=== SetTestOffset === | |||
Takes an input [[#TimeSpanType]]. No output. | |||
=== GetRtcValue === | |||
No input. Returns an output s64. | |||
=== IsRtcResetDetected === | |||
No input. Returns an output u8 bool. | |||
=== GetSetupResultValue === | |||
No input. Returns an output u32. | |||
=== GetInternalOffset === | |||
No input. Returns an output [[#TimeSpanType]]. | |||
=== SetInternalOffset === | |||
Takes an input [[#TimeSpanType]]. No output. | |||
== ISystemClock == | |||
This is "nn::timesrv::detail::service::ISystemClock". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#GetCurrentTime]] | |||
|- | |- | ||
| | | 1 || [[#SetCurrentTime]] | ||
|- | |- | ||
| | | 2 || [[#GetSystemClockContext]] | ||
|- | |- | ||
| | | 3 || [[#SetSystemClockContext]] | ||
|- | |- | ||
| | | 4 || [9.0.0+] GetOperationEventReadableHandle | ||
|} | |||
=== GetCurrentTime === | |||
No input. Returns an output [[#PosixTime]]. | |||
=== SetCurrentTime === | |||
Takes an input [[#PosixTime]]. No output. | |||
=== GetSystemClockContext === | |||
No input. Returns an output [[#SystemClockContext]]. | |||
=== SetSystemClockContext === | |||
Takes an input [[#SystemClockContext]]. No output. | |||
== ITimeZoneService == | |||
This is "nn::timesrv::detail::service::ITimeZoneService". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || [[#GetDeviceLocationName]] | ||
|- | |- | ||
| | | 1 || [[#SetDeviceLocationName]] | ||
|- | |- | ||
| | | 2 || [[#GetTotalLocationNameCount]] | ||
|- | |- | ||
| | | 3 || [[#LoadLocationNameList]] | ||
|- | |- | ||
| | | 4 || [[#LoadTimeZoneRule]] | ||
|- | |- | ||
| | | 5 || [2.0.0+] [[#GetTimeZoneRuleVersion]] | ||
|- | |- | ||
| | | 6 || [5.0.0+] GetDeviceLocationNameAndUpdatedTime | ||
|- | |- | ||
| | | 100 || [[#ToCalendarTime]] | ||
|- | |- | ||
| | | 101 || [[#ToCalendarTimeWithMyRule]] | ||
|- | |- | ||
| | | 201 || [[#ToPosixTime]] | ||
|- | |- | ||
| 202 || [[#ToPosixTimeWithMyRule]] | |||
|} | |} | ||
=== GetDeviceLocationName === | |||
No input. Returns an output [[#LocationName]]. | |||
=== SetDeviceLocationName === | |||
Takes an input [[#LocationName]]. No output. | |||
=== GetTotalLocationNameCount === | |||
No input. Returns an output s32. | |||
=== LoadLocationNameList === | |||
Takes an input s32 LocationName_index and a type-0x6 output buffer for [[#LocationName]]. Returns an output s32 for total output entries. | |||
=== LoadTimeZoneRule === | |||
Takes an input [[#LocationName]] and a type-0x16 output buffer for [[#TimeZoneRule]]. No output. | |||
=== GetTimeZoneRuleVersion === | |||
No input. Returns an output [[#TimeZoneRuleVersion]]. | |||
=== ToCalendarTime === | |||
Takes an input [[#PosixTime]] and a type-0x15 input buffer for [[#TimeZoneRule]]. Returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]]. | |||
=== ToCalendarTimeWithMyRule === | |||
Takes an input [[#PosixTime]]. Returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]]. | |||
=== ToPosixTime === | |||
Takes an input [[#CalendarTime]], a type-0x15 input buffer for [[#TimeZoneRule]], an type-0xA output buffer for [[#PosixTime]] array.R eturns an output s32. | |||
=== ToPosixTimeWithMyRule === | |||
Takes an input [[#CalendarTime]], an type-0xA output buffer for [[#PosixTime]] array. Returns an output s32. | |||
= BoardPowerControlEventTarget = | |||
This is "nn::bpc::BoardPowerControlEventTarget". | |||
= SleepButtonState = | |||
This is "nn::bpc::SleepButtonState". | |||
= EventTarget = | |||
This is "nn::bpc::EventTarget". | |||
= Module = | |||
This is "nn::pcv::Module". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Name || DeviceCode || Rail | |||
|- | |||
| 0 || Cpu || 0x40000001 || VddCpu | |||
|- | |||
| 1 || Gpu || 0x40000002 || VddGpu | |||
|- | |||
| 2 || I2s1 || 0x40000003 || VddSoc | |||
|- | |||
| 3 || I2s2 || 0x40000004 || VddSoc | |||
|- | |||
| 4 || I2s3 || 0x40000005 || VddSoc | |||
|- | |||
| 5 || Pwm || 0x40000006 || VddSoc | |||
|- | |||
| 6 || I2c1 || 0x02000001 || VddSoc | |||
|- | |||
| 7 || I2c2 || 0x02000002 || VddSoc | |||
|- | |||
| 8 || I2c3 || 0x02000003 || VddSoc | |||
|- | |||
| 9 || I2c4 || 0x02000004 || VddSoc | |||
|- | |||
| 10 || I2c5 || 0x02000005 || VddSoc | |||
|- | |||
| 11 || I2c6 || 0x02000006 || VddSoc | |||
|- | |||
| 12 || Spi1 || 0x07000000 || VddSoc | |||
|- | |||
| 13 || Spi2 || 0x07000001 || VddSoc | |||
|- | |||
| 14 || Spi3 || 0x07000002 || VddSoc | |||
|- | |||
| 15 || Spi4 || 0x07000003 || VddSoc | |||
|- | |||
| 16 || Disp1 || 0x40000011 || VddSoc | |||
|- | |||
| 17 || Disp2 || 0x40000012 || VddSoc | |||
|- | |||
| 18 || Isp || 0x40000013 || None | |||
|- | |||
| 19 || Vi || 0x40000014 || None | |||
|- | |||
| 20 || Sdmmc1 || 0x40000015 || VddSoc | |||
|- | |||
| 21 || Sdmmc2 || 0x40000016 || VddSoc | |||
|- | |||
| 22 || Sdmmc3 || 0x40000017 || VddSoc | |||
|- | |||
| 23 || Sdmmc4 || 0x40000018 || VddSoc | |||
|- | |||
| 24 || Owr || 0x40000019 || None | |||
|- | |||
| 25 || Csite || 0x4000001A || VddSoc | |||
|- | |||
| 26 || Tsec || 0x4000001B || VddSoc | |||
|- | |||
| 27 || Mselect || 0x4000001C || VddSoc | |||
|- | |||
| 28 || Hda2codec2x || 0x4000001D || VddSoc | |||
|- | |||
| 29 || Actmon || 0x4000001E || VddSoc | |||
|- | |||
| 30 || I2cSlow || 0x4000001F || VddSoc | |||
|- | |||
| 31 || Sor1 || 0x40000020 || VddSoc | |||
|- | |||
| 32 || Sata || 0x40000021 || None | |||
|- | |||
| 33 || Hda || 0x40000022 || VddSoc | |||
|- | |||
| 34 || XusbCoreHostSrc || 0x40000023 || VddSoc | |||
|- | |||
| 35 || XusbFalconSrc || 0x40000024 || VddSoc | |||
|- | |||
| 36 || XusbFsSrc || 0x40000025 || VddSoc | |||
|- | |||
| 37 || XusbCoreDevSrc || 0x40000026 || VddSoc | |||
|- | |||
| 38 || XusbSsSrc || 0x40000027 || VddSoc | |||
|- | |||
| 39 || UartA || 0x03000001 || VddSoc | |||
|- | |||
| 40 || UartB || 0x35000405 || VddSoc | |||
|- | |||
| 41 || UartC || 0x3500040F || VddSoc | |||
|- | |||
| 42 || UartD || 0x37000001 || VddSoc | |||
|- | |||
| 43 || Host1x || 0x4000002C || VddSoc | |||
|- | |||
| 44 || Entropy || 0x4000002D || VddSoc | |||
|- | |||
| 45 || SocTherm || 0x4000002E || VddSoc | |||
|- | |||
| 46 || Vic || 0x4000002F || VddSoc | |||
|- | |||
| 47 || Nvenc || 0x40000030 || VddSoc | |||
|- | |||
| 48 || Nvjpg || 0x40000031 || VddSoc | |||
|- | |||
| 49 || Nvdec || 0x40000032 || VddSoc | |||
|- | |||
| 50 || Qspi || 0x40000033 || VddSoc | |||
|- | |||
| 51 || ViI2c || 0x40000034 || None | |||
|- | |||
| 52 || Tsecb || 0x40000035 || VddSoc | |||
|- | |||
| 53 || Ape || 0x40000036 || VddSoc | |||
|- | |||
| 54 || AudioDsp || 0x40000037 || VddSoc | |||
|- | |||
| 55 || AudioUart || 0x40000038 || VddSoc | |||
|- | |||
| 56 || Emc || 0x40000039 || VddSoc | |||
|- | |||
| 57 || Plle || 0x4000003A || VddSoc | |||
|- | |||
| 58 || PlleHwSeq || 0x4000003B || VddSoc | |||
|- | |||
| 59 || Dsi || 0x4000003C || VddSoc | |||
|- | |||
| 60 || Maud || 0x4000003D || VddSoc | |||
|- | |||
| 61 || Dpaux1 || 0x4000003E || VddSoc | |||
|- | |||
| 62 || MipiCal || 0x4000003F || VddSoc | |||
|- | |||
| 63 || UartFstMipiCal || 0x40000040 || VddSoc | |||
|- | |||
| 64 || Osc || 0x40000041 || VddSoc | |||
|- | |||
| 65 || SysBus || 0x40000042 || VddSoc | |||
|- | |||
| 66 || SorSafe || 0x40000043 || VddSoc | |||
|- | |||
| 67 || XusbSs || 0x40000044 || VddSoc | |||
|- | |||
| 68 || XusbHost || 0x40000045 || VddSoc | |||
|- | |||
| 69 || XusbDevice || 0x40000046 || VddSoc | |||
|- | |||
| 70 || Extperiph1 || 0x40000047 || VddSoc | |||
|- | |||
| 71 || Ahub || 0x40000048 || VddSoc | |||
|- | |||
| 72 || Hda2hdmicodec || 0x40000049 || VddSoc | |||
|- | |||
| 73 || Gpuaux || 0x4000004A || VddSoc | |||
|- | |||
| 74 || UsbD || 0x4000004B || VddSoc | |||
|- | |||
| 75 || Usb2 || 0x4000004C || VddSoc | |||
|- | |||
| 76 || Pcie || 0x4000004D || VddSoc | |||
|- | |||
| 77 || Afi || 0x4000004E || VddSoc | |||
|- | |||
| 78 || PciExClk || 0x4000004F || VddSoc | |||
|- | |||
| 79 || PExUsbPhy || 0x40000050 || VddSoc | |||
|- | |||
| 80 || XUsbPadCtl || 0x40000051 || VddSoc | |||
|- | |||
| 81 || Apbdma || 0x40000052 || VddSoc | |||
|- | |||
| 82 || Usb2TrkClk || 0x40000053 || VddSoc | |||
|- | |||
| 83 || XUsbIoPll || 0x40000054 || VddSoc | |||
|- | |||
| 84 || XUsbIoPllHwSeq || 0x40000055 || VddSoc | |||
|- | |||
| 85 || Cec || 0x40000056 || VddSoc | |||
|- | |||
| [6.0.0+] 86 || Extperiph2 || 0x40000057 || VddSoc | |||
|- | |||
| [8.0.0+] - || OscClk || 0x40000080 || None | |||
|} | |||
= | = PowerDomain = | ||
This is "nn::pcv:: | This is "nn::pcv::PowerDomain". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value || Name || DeviceCode || Description | ||
|- | |||
| 0 || Max77620_Sd0 || 0x3A000080 || SoC (1.125v) | |||
|- | |||
| 1 || Max77620_Sd1 || 0x3A000081 || Dram (1.1v) | |||
|- | |||
| 2 || Max77620_Sd2 || 0x3A000082 || Ldo0, Ldo1, Ldo7, Ldo8 (1.325v) | |||
|- | |||
| 3 || Max77620_Sd3 || 0x3A000083 || Reserved (1.8v) | |||
|- | |||
| 4 || Max77620_Ldo0 || 0x3A0000A0 || Panel (1.2v) | |||
|- | |||
| 5 || Max77620_Ldo1 || 0x3A0000A1 || Xusb, PCIe (1.05v) | |||
|- | |||
| 6 || Max77620_Ldo2 || 0x3A0000A2 || SdCard (1.8v, 3.3v) | |||
|- | |||
| 7 || Max77620_Ldo3 || 0x3A0000A3 || GcCard (3.1v) | |||
|- | |||
| 8 || Max77620_Ldo4 || 0x3A0000A4 || Rtc (0.85v) | |||
|- | |||
| 9 || Max77620_Ldo5 || 0x3A0000A5 || GcCard (1.8v) | |||
|- | |||
| 10 || Max77620_Ldo6 || 0x3A0000A6 || TouchPanel, ALS (2.9v) | |||
|- | |||
| 11 || Max77620_Ldo7 || 0x3A0000A7 || Xusb (1.05v) | |||
|- | |||
| 12 || Max77620_Ldo8 || 0x3A0000A8 || DisplayPort, HDMI, SioMcu (1.05v) | |||
|- | |||
| 13 || Max77621_Cpu || 0x3A000003 || | |||
|- | |||
| 14 || Max77621_Gpu || 0x3A000004 || | |||
|- | |||
| [6.0.0+] 15 || Max77812_Cpu || 0x3A000003 || | |||
|- | |- | ||
| 0 || | | [6.0.0+] 16 || Max77812_Gpu || 0x3A000004 || | ||
|- | |- | ||
| [6.0.0+] 17 || Max77812_Dram || 0x3A000005 || | |||
|} | |} | ||
= | = PowerControlTarget = | ||
This is "nn::pcv:: | This is "nn::pcv::PowerControlTarget". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value || Name || DeviceCode || Description | ||
|- | |||
| 0 || || 0x3C000004 || SdCard (Ldo2) | |||
|- | |||
| [6.0.0+] 1 || || 0x34000007 || DisplayPort, HDMI (Ldo8) | |||
|- | |||
| [6.0.0+] 2 || || || Debug (Ldo7, Hoag only) | |||
|- | |||
| [6.0.0+] 3 || || 0x3500041A || SioMcu (Ldo8, Hoag only) | |||
|- | |- | ||
| 0 || | | [14.0.0+] - || || 0x3C000404 || GcCard (Ldo3) | ||
|- | |- | ||
| [14.0.0+] - || || 0x3C000405 || GcCard (Ldo5) | |||
|} | |} | ||
= | = ModuleState = | ||
This is "nn:: | This is "nn::pcv::ModuleState". This is a 0xC-byte struct. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x4 || ClockFrequency | ||
|- | |- | ||
| | | 0x4 || 0x1 || ClockEnabled | ||
|- | |- | ||
| | | 0x5 || 0x1 || PowerEnabled | ||
|- | |- | ||
| | | 0x6 || 0x1 || ResetAsserted | ||
|- | |- | ||
| | | 0x7 || 0x1 || Reserved | ||
|- | |- | ||
| | | 0x8 || 0x4 || MinVClockRate | ||
|} | |||
= PowerDomainState = | |||
This is "nn::pcv::PowerDomainState". This is a 0x8-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |- | ||
| | | 0x0 || 0x1 || Enabled | ||
|- | |- | ||
| | | 0x1 || 0x3 || Reserved | ||
|- | |- | ||
| 0x4 || 0x4 || Voltage | |||
|} | |} | ||
[8.0.0+] This is a 0xC-byte struct. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x4 || DeviceCode | |||
|- | |||
| 0x4 || 0x1 || Enabled | |||
|- | |- | ||
| | | 0x5 || 0x3 || Reserved | ||
|- | |- | ||
| | | 0x8 || 0x4 || Voltage | ||
|} | |||
= TemperatureThreshold = | |||
This is "nn::pcv::TemperatureThreshold". This is a 0x8-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x4 || MinMilliC | ||
|- | |- | ||
| | | 0x4 || 0x4 || MaxMilliC | ||
|} | |||
= ClockRatesListType = | |||
This is "nn::pcv::ClockRatesListType". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Value || Description | ||
|- | |- | ||
| | | 0 || Invalid | ||
|- | |- | ||
| | | 1 || Discrete | ||
|- | |- | ||
| 2 || Range | |||
|} | |} | ||
= SteadyClockTimePoint = | |||
This is a 0x18-byte struct. | This is a 0x18-byte struct. | ||
=== TimeSpanType | {| class="wikitable" border="1" | ||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || A u64 representing a point in time. | |||
|- | |||
| 0x8 || 0x10 || An ID representing the clock source. | |||
|} | |||
= TimeSpanType = | |||
This is an u64. | This is an u64. | ||
== | = PosixTime = | ||
This is an s64 for UTC POSIX time. | |||
= SystemClockContext = | |||
This is an 0x20-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8|| a [[#PosixTime]] representing the system clock epoch. | |||
|- | |||
| 0x8 || 0x18 || a [[#SteadyClockTimePoint]] | |||
|} | |||
= LocationName = | |||
This contains a TimeZone location string with a max size of 0x24 bytes. | |||
= TimeZoneRule = | |||
This is an 0x4000-byte struct. Official sw uses fixed-size 0x4000 for the buffer size with the above commands. | |||
This is loaded from the [[Title_list|TimeZoneBinary]] title with the specified LocationName under the zoneinfo/ directory, the content is then converted into this TimeZoneRule structure. | |||
The files contained under zoneinfo/ directory are Tzif2 files without Tzif1 header and data at the begining of them (see [https://tools.ietf.org/html/rfc8536 RFC8536] for more information). | |||
The conversion of a Tzif2 file to a TimeZoneRule structure is based on [https://github.com/eggert/tz/blob/master/localtime.c tz database code] with some custom modifications (Leap seconds aren't handled, no usage of "posixrules" and Tzif1 support stripped out). | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x4 || timecnt | |||
|- | |- | ||
| | | 0x4 || 0x4 || typecnt | ||
|- | |- | ||
| | | 0x8 || 0x4 || charcnt | ||
|- | |- | ||
| | | 0xC || 0x1 || goback | ||
|- | |- | ||
| | | 0xD || 0x1 || goahead | ||
|- | |- | ||
| 0xE || 0x2 || Padding | |||
|- | |||
| 0x10 || 0x8 * 1000 || ats | |||
|- | |||
| 0x1f50 || 0x1 * 1000 || types | |||
|- | |||
| 0x2338 || 0x10 * 128 || ttis (time type information), struct ttinfo[1000] | |||
|- | |||
| 0x2b38 || 0x1 * 512 || chars | |||
|- | |||
| 0x2d38 || 0x4 || defaulttype | |||
|- | |||
| 0x2d3c || 0x12c4 || Reserved / Unused | |||
|} | |} | ||
= | = ttinfo = | ||
This is an 0x10-byte struct. Represents a Time Type Information used in [[#TimeZoneRule]]. | |||
This is an | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x4 || tt_gmtoff | ||
|- | |- | ||
| | | 0x4 || 0x1 || tt_isdst | ||
|- | |- | ||
| | | 0x5 || 0x3 || Padding | ||
|- | |- | ||
| | | 0x8 || 0x4 || tt_abbrind | ||
|- | |- | ||
| | | 0xC || 0x1 || tt_ttisstd | ||
|- | |- | ||
| | | 0xD || 0x1 || tt_ttisgmt | ||
|- | |- | ||
| | | 0xE || 0x2 || Padding | ||
|} | |||
= TimeZoneRuleVersion = | |||
This is an u128. | |||
= CalendarTime = | |||
This is an 0x8-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x2 || Year | |||
|- | |||
| 0x2 || 0x1 || Month | |||
|- | |||
| 0x3 || 0x1 || Day | |||
|- | |- | ||
| | | 0x4 || 0x1 || Hour | ||
|- | |- | ||
| | | 0x5 || 0x1 || Minute | ||
|- | |- | ||
| | | 0x6 || 0x1 || Second | ||
|- | |- | ||
| 0x7 || 0x1 || Padding / unknown? | |||
|} | |} | ||
== | = CalendarAdditionalInfo = | ||
This is an 0x18-byte struct. This stores timezone info. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || | | 0x0 || 0x4 || 0-based day-of-week. | ||
|- | |||
| 0x4 || 0x4 || 0-based day-of-year. | |||
|- | |- | ||
| | | 0x8 || 0x8 || Timezone name string. | ||
|- | |- | ||
| | | 0x10 || 0x4 || 0 = no DST, 1 = DST. | ||
|- | |- | ||
| | | 0x14 || 0x4 || s32 seconds relative to UTC for this timezone. | ||
|} | |} | ||
[[Category:Services]] |