Difference between revisions of "PCV services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(better names)
Line 490: Line 490:
 
|-
 
|-
 
| 6 || PowerOff
 
| 6 || PowerOff
 +
|-
 +
| 7 || [13.0.0+]
 +
|-
 +
| 8 || [13.0.0+]
 +
|-
 +
| 9 || [13.0.0+]
 
|}
 
|}
  

Revision as of 13:27, 15 September 2021

bpc

This is "nn::bpc::IBoardPowerControlManager".

Cmd Name
0 #ShutdownSystem
1 #RebootSystem
2 #GetWakeupReason
3 #GetShutdownReason
4 #GetAcOk
5 #GetBoardPowerControlEvent
6 [2.0.0+] #GetSleepButtonState
7 [2.0.0+] #GetPowerEvent
8 [2.0.0-9.2.0] #CreateWakeupTimer
9 [2.0.0-9.2.0] #CancelWakeupTimer
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+] #SetEnableWakeupTimer

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.

GetBoardPowerControlEvent

Takes an input BoardPowerControlEventTarget. Returns an output Event handle.

GetSleepButtonState

No input. Returns an output SleepButtonState.

GetPowerEvent

Takes an input 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.

SetEnableWakeupTimer

Unofficial name.

No input/output. Enables an internal wakeup timer when calling ShutdownSystem or RebootSystem.

bpc:r

This is "nn::bpc::IRtcManager".

Cmd Name
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.

Cmd Name
0 #ShutdownSystem
1 #RebootSystem
2 #GetWakeupReason
3 #GetShutdownReason
4 #GetAcOk
5 #GetBoardPowerControlEvent

bpc:b

This is "nn::bpc::IPowerButtonManager".

[2.0.0+] This service was merged into bpc.

Cmd Name
0 #GetSleepButtonState
1 #GetPowerEvent

bpc:w

This is "nn::bpc::IWakeupConfigManager".

[2.0.0+] This service was merged into bpc.

Cmd Name
0 #CreateWakeupTimer
1 #CancelWakeupTimer
2 #EnableWakeupTimerOnDevice

pcv

This is "nn::pcv::detail::IPcvService".

Cmd Name
[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.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
[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 ModuleId and an input bool Enabled. No output.

SetClockEnabled

Takes an input ModuleId and an input bool Enabled. No output.

SetClockRate

Takes an input ModuleId and an input u32 ClockRateHz. No output.

GetClockRate

Takes an input ModuleId. Returns an output u32 ClockRateHz.

GetState

Takes an input ModuleId. Returns an output ModuleState.

GetPossibleClockRates

Takes a type-0xA output buffer of ClockRatesListType, an input ModuleId and an input s32 MaxCount. Returns an output s32 OutCount and an output u32 OutRates.

SetMinVClockRate

Takes an input ModuleId and an input u32 ClockRateHz. No output.

SetReset

Takes an input ModuleId and an input bool Asserted. No output.

SetVoltageEnabled

Takes an input PowerDomain and an input bool Enabled. No output.

GetVoltageEnabled

Takes an input PowerDomain. Returns an output bool Enabled.

GetVoltageRange

Takes an input PowerDomain. Returns three output s32s MinVolt, MaxVolt and StepVolt.

SetVoltageValue

Takes an input PowerDomain and an input s32 MicroVolt. No output.

GetVoltageValue

Takes an input PowerDomain. Returns an output s32 MicroVolt.

GetTemperatureThresholds

Takes a type-0xA output buffer of 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 and an input s32 MicroVolt. No output.

PowerOff

Takes an input PowerControlTarget. No output.

ChangeVoltage

Takes an input 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 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 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. Returns an output bool.

GetVoltage

Takes an input PowerControlTarget. Returns an output s32.

pcv:arb

This is "nn::pcv::IArbitrationManager".

This service no longer exists in [8.0.0+].

Cmd Name
0 #ReleaseControl

ReleaseControl

Takes an input ModuleId. No output.

pcv:imm

This is "nn::pcv::IImmediateManager".

This service no longer exists in [8.0.0+].

Cmd Name
0 #SetClockRate

clkrst, clkrst:i

These are "nn::clkrst::IClkrstManager" and "nn::clkrst::IImmediateManager".

These were added with [8.0.0+].

Cmd Name
0 #OpenSession
1 #GetTemperatureThresholds
2 #SetTemperature
3 #GetModuleStateTable
4 GetModuleStateTableEvent
5 #GetModuleStateTableMaxCount

OpenSession

Takes an input DeviceCode and an input u32. Returns an #IClkrstSession.

GetModuleStateTableMaxCount

Unofficial name.

Returns 0x1A.

IClkrstSession

This is "nn::clkrst::IClkrstSession".

Cmd Name
0 SetClockEnabled
1 SetClockDisabled
2 SetResetAsserted
3 SetResetDeasserted
4 SetPowerEnabled
5 SetPowerDisabled
6 GetState
7 SetClockRate
8 GetClockRate
9 SetMinVClockRate
10 GetPossibleClockRates
11 GetDvfsTable

clkrst:a

This is "nn::clkrst::IArbitrationManager".

This was added with [8.0.0+].

Cmd Name
0 ReleaseControl

ReleaseControl

Takes an input DeviceCode. No output.

rgltr

This is "nn::regulator::IRegulatorManager".

This was added with [8.0.0+].

Cmd Name
0 #OpenSession
1 #GetPowerDomainStateTable
2 GetPowerDomainStateTableEvent
3 #GetPowerDomainStateTableMaxCount

OpenSession

Takes an input DeviceCode and returns an #IRegulatorSession.

GetPowerDomainStateTableMaxCount

Unofficial name.

Returns 0x3.

IRegulatorSession

This is "nn::regulator::IRegulatorSession".

Cmd Name
0 SetVoltageEnabled
1 PowerOn
2 GetVoltageEnabled
3 GetVoltageRange
4 GetVoltage
5 SetVoltageValue
6 PowerOff
7 [13.0.0+]
8 [13.0.0+]
9 [13.0.0+]

rtc

This was added with [8.0.0+].

Cmd Name
0 GetRtcTime
1 SetRtcTime
2 SetUpRtcResetOnShutdown
3 GetRtcResetDetected
4 ClearRtcResetDetected
10 [10.0.0+] EnableRtcAlarm
11 [10.0.0+] DisableRtcAlarm

GetRtcTime

Same as GetRtcTime, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

SetRtcTime

Same as SetRtcTime, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

SetUpRtcResetOnShutdown

Takes an input bool DoReset and an input DeviceCode. Similar to 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 power state is ReadyShutdown.

GetRtcResetDetected

Same as GetRtcResetDetected, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

ClearRtcResetDetected

Same as ClearRtcResetDetected, but takes an input DeviceCode (bpc:r uses hardcoded value 0x3B000001).

EnableRtcAlarm

Unofficial name.

Takes an input DeviceCode, an input u32 RtcAlarmId (0 = RtcAlarm1, 1 = RtcAlarm2) and an u64 RtcAlarmTime. No output.

DisableRtcAlarm

Unofficial name.

Takes an input 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 and PSC.

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".

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".

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".

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".

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::PowerDomain".

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 GcAsic (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
[6.0.0+] 16 Max77812_Gpu 0x3A000004
[6.0.0+] 17 Max77812_Dram 0x3A000005

PowerControlTarget

This is "nn::pcv::PowerControlTarget".

Value Name DeviceCode Description
0 0x3C000004 SdCard (Ldo2)
1 0x34000007 DisplayPort, HDMI (Ldo8)
2 Invalid (Ldo7)
3 0x3500041A SioMcu (Ldo8)

ModuleState

This is "nn::pcv::ModuleState".

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".

Offset Size Description
0x0 0x1 Enabled
0x1 0x3 Reserved
0x4 0x4 Voltage

TemperatureThreshold

This is "nn::pcv::TemperatureThreshold".

Offset Size Description
0x0 0x4 MinMilliC
0x4 0x4 MaxMilliC

ClockRatesListType

This is "nn::pcv::ClockRatesListType".

Value Description
0 Invalid
1 Discrete
2 Range

SteadyClockTimePoint

This is a 0x18-byte struct.

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.

PosixTime

This is an s64 for UTC POSIX time.

SystemClockContext

This is an 0x20-byte struct.

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 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 RFC8536 for more information).

The conversion of a Tzif2 file to a TimeZoneRule structure is based on tz database code with some custom modifications (Leap seconds aren't handled, no usage of "posixrules" and Tzif1 support stripped out).

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.

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.

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.

Offset Size Description
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.