Changes

Jump to navigation Jump to search
23,256 bytes added ,  21:13, 15 October 2023
no edit summary
Line 6: Line 6:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetApplicationLaunchProperty
+
| 0 || [[#GetApplicationLaunchProperty|GetApplicationLaunchProperty]]
 
|-
 
|-
| 1 || GetApplicationLaunchPropertyWithApplicationId
+
| 1 || [10.0.0+] [[#GetApplicationControlProperty|GetApplicationControlProperty]] ([1.0.0-9.2.0] [[#GetApplicationLaunchPropertyWithApplicationId|GetApplicationLaunchPropertyWithApplicationId]])
 
|-
 
|-
| 2 || GetApplicationControlProperty
+
| 2 || [10.0.0+] [[#GetApplicationProcessProperty|GetApplicationProcessProperty]] ([1.0.0-9.2.0] [[#GetApplicationControlProperty|GetApplicationControlProperty]])
 
|-
 
|-
| 3 || GetApplicationControlPropertyWithApplicationId
+
| 3 || [10.0.0+] [[#GetApplicationInstanceId|GetApplicationInstanceId]] ([1.0.0-9.2.0] [[#GetApplicationControlPropertyWithApplicationId|GetApplicationControlPropertyWithApplicationId]])
 +
|-
 +
| 4 || [10.0.0+] [[#GetApplicationInstanceUnregistrationNotifier|GetApplicationInstanceUnregistrationNotifier]]
 +
|-
 +
| 5 || [10.0.0+] [[#ListApplicationInstanceId|ListApplicationInstanceId]]
 +
|-
 +
| 6 || [10.0.0+] [[#GetMicroApplicationInstanceId|GetMicroApplicationInstanceId]]
 +
|-
 +
| 7 || [10.0.0+] [[#GetApplicationCertificate|GetApplicationCertificate]]
 +
|-
 +
| 9998 || [9.0.0-9.2.0] [[#GetPreomiaApplicationLaunchProperty|GetPreomiaApplicationLaunchProperty]]
 +
|-
 +
| 9999 || [9.0.0-9.2.0] [[#GetPreomiaApplicationControlProperty|GetPreomiaApplicationControlProperty]]
 +
|}
 +
 
 +
== GetApplicationLaunchProperty ==
 +
Takes an input u64 ProcessId. Returns an [[#ApplicationLaunchProperty]].
 +
 
 +
[10.0.0+] Now takes an input [[#ApplicationInstanceId]] instead of ProcessId.
 +
 
 +
== GetApplicationLaunchPropertyWithApplicationId ==
 +
Takes an input u64 ApplicationId. Returns an [[#ApplicationLaunchProperty]].
 +
 
 +
== GetApplicationControlProperty ==
 +
Takes an input u64 ProcessId and a type-0x16 output buffer containing an [[NACP|ApplicationControlProperty]]. No output.
 +
 
 +
[10.0.0+] Now takes an input [[#ApplicationInstanceId]] instead of ProcessId.
 +
 
 +
== GetApplicationControlPropertyWithApplicationId ==
 +
Takes an input u64 ApplicationId and a type-0x16 output buffer containing an [[NACP|ApplicationControlProperty]]. No output.
 +
 
 +
== GetApplicationProcessProperty ==
 +
Takes an input [[#ApplicationInstanceId]]. Returns an [[#ApplicationProcessProperty]].
 +
 
 +
== GetApplicationInstanceId ==
 +
Takes an input u64 ProcessId. Returns an [[#ApplicationInstanceId]].
 +
 
 +
== GetApplicationInstanceUnregistrationNotifier ==
 +
No input. Returns an [[#IUnregistrationNotifier]].
 +
 
 +
== ListApplicationInstanceId ==
 +
Takes a type-0x6 output buffer containing an array of [[#ApplicationInstanceId]]. Returns an s32 '''Count'''.
 +
 
 +
== GetMicroApplicationInstanceId ==
 +
Same as [[#GetApplicationInstanceId]].
 +
 
 +
== GetApplicationCertificate ==
 +
Takes an input [[#ApplicationInstanceId]] and a type-0x16 output buffer containing an [[#ApplicationCertificate]]. No output.
 +
 
 +
== GetPreomiaApplicationLaunchProperty ==
 +
Same as [[#GetApplicationLaunchProperty]].
 +
 
 +
== GetPreomiaApplicationControlProperty ==
 +
Same as [[#GetApplicationControlProperty]].
 +
 
 +
== IUnregistrationNotifier ==
 +
This is "nn::arp::detail::IUnregistrationNotifier".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#GetReadableHandle|GetReadableHandle]]
 
|}
 
|}
 +
 +
=== GetReadableHandle ===
 +
No input. Returns an output readable Event handle.
    
= arp:w =
 
= arp:w =
Line 22: Line 87:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || AcquireRegistrar
+
| 0 || [[#AcquireRegistrar|AcquireRegistrar]]
 
|-
 
|-
| 1 || DeleteProperties
+
| 1 || [10.0.0+] [[#UnregisterApplicationInstance|UnregisterApplicationInstance]] ([1.0.0-9.2.0] DeleteProperties)
 +
|-
 +
| 2 || [15.0.0+] [[#AcquireApplicationProcessPropertyUpdater|AcquireApplicationProcessPropertyUpdater]] ([10.0.0-14.1.2] [[#AcquireUpdater|AcquireUpdater]])
 +
|-
 +
| 3 || [15.0.0+] [[#AcquireApplicationCertificateUpdater|AcquireApplicationCertificateUpdater]]
 
|}
 
|}
 +
 +
== AcquireRegistrar ==
 +
No input. Returns an [[#IRegistrar]].
 +
 +
== UnregisterApplicationInstance ==
 +
Takes an input [[#ApplicationInstanceId]]. No output.
 +
 +
== AcquireUpdater ==
 +
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]].
 +
 +
== AcquireApplicationProcessPropertyUpdater ==
 +
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]].
 +
 +
== AcquireApplicationCertificateUpdater ==
 +
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]].
    
== IRegistrar ==
 
== IRegistrar ==
Line 34: Line 118:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Issue
+
| 0 || [[#Issue|Issue]]
 +
|-
 +
| 1 || [[#SetApplicationLaunchProperty|SetApplicationLaunchProperty]]
 +
|-
 +
| 2 || [[#SetApplicationControlProperty|SetApplicationControlProperty]]
 +
|}
 +
 
 +
=== Issue ===
 +
No input. Returns an output [[#ApplicationInstanceId]].
 +
 
 +
=== SetApplicationLaunchProperty ===
 +
Takes an input [[#ApplicationLaunchProperty]]. No output.
 +
 
 +
=== SetApplicationControlProperty ===
 +
Takes a type-0x15 input buffer containing an [[NACP|ApplicationControlProperty]]. No output.
 +
 
 +
== IUpdater ==
 +
This is "nn::arp::detail::IUpdater".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Issue_2|Issue]]
 +
|-
 +
| 1 || [[#SetApplicationProcessProperty|SetApplicationProcessProperty]]
 +
|-
 +
| 2 || [[#DeleteApplicationProcessProperty|DeleteApplicationProcessProperty]]
 +
|-
 +
| 3 || [[#SetApplicationCertificate|SetApplicationCertificate]]
 +
|}
 +
 
 +
=== Issue ===
 +
No input/output.
 +
 
 +
=== SetApplicationProcessProperty ===
 +
Takes an input u64 ProcessId and an input [[#ApplicationProcessProperty]]. No output.
 +
 
 +
=== DeleteApplicationProcessProperty ===
 +
No input/output.
 +
 
 +
=== SetApplicationCertificate ===
 +
Takes a type-0x15 input buffer containing an [[#ApplicationCertificate]]. No output.
 +
 
 +
= bgtc:t =
 +
This is "nn::bgtc::ITaskService".
 +
 
 +
[11.0.0+] This is "nn::bgtc::ITaskServiceRoot".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 100 || [[#CreateTaskService]]
 +
|}
 +
 
 +
== CreateTaskService ==
 +
No input. Returns an [[#ITaskService]].
 +
 
 +
== ITaskService ==
 +
This is "nn::bgtc::ITaskService".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 1 || NotifyTaskStarting
 +
|-
 +
| 2 || NotifyTaskFinished
 +
|-
 +
| 3 || GetTriggerEvent
 +
|-
 +
| 4 || IsInHalfAwake
 +
|-
 +
| 5 || NotifyClientName
 +
|-
 +
| 6 || [3.0.0+] IsInFullAwake
 +
|-
 +
| 11 || ScheduleTask
 +
|-
 +
| 12 || GetScheduledTaskInterval
 +
|-
 +
| 13 || UnscheduleTask
 +
|-
 +
| 14 || GetScheduleEvent
 +
|-
 +
| 15 || SchedulePeriodicTask
 +
|-
 +
| 16 || [9.0.0+] ScheduleStrictTask
 +
|-
 +
| 101 || [3.0.0+] GetOperationMode
 +
|-
 +
| 102 || [3.0.0+] WillDisconnectNetworkWhenEnteringSleep
 +
|-
 +
| 103 || [3.0.0+] WillStayHalfAwakeInsteadSleep
 +
|-
 +
| 200 || [12.0.0+] EnableStayHalfAwake
 +
|}
 +
 
 +
= bgtc:sc =
 +
This is "nn::bgtc::IStateControlService".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 1 || GetState
 +
|-
 +
| 2 || GetStateChangedEvent
 +
|-
 +
| 3 || NotifyEnteringHalfAwake
 +
|-
 +
| 4 || NotifyLeavingHalfAwake
 +
|-
 +
| 5 || [3.0.0+] SetIsUsingSleepUnsupportedDevices
 +
|}
 +
 
 +
[10.0.0+] NotifyEnteringHalfAwake now takes 1-byte of input.
 +
 
 +
= time:a, time:r, time:u =
 +
These are "nn::timesrv::detail::service::IStaticService".
 +
 
 +
These were added with [9.0.0+].
 +
 
 +
The time:u service has max_sessions 17, time:a has max_sessions 4, and time:r has max_sessions 2.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].
 +
|-
 +
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].
 +
|-
 +
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].
 +
|-
 +
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].
 +
|-
 +
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].
 +
|-
 +
| 5 || [4.0.0+] GetEphemeralNetworkSystemClock || Returns an [[#ISystemClock]].
 +
|-
 +
| 20 || [6.0.0+] GetSharedMemoryNativeHandle ||
 +
|-
 +
| 30 || [6.0.0-8.1.0] GetStandardNetworkClockOperationEventReadableHandle ||
 +
|-
 +
| 31 || [6.0.0-8.1.0] GetEphemeralNetworkClockOperationEventReadableHandle ||
 +
|-
 +
| 50 || [4.0.0+] SetStandardSteadyClockInternalOffset ||
 +
|-
 +
| 51 || [9.0.0+] GetStandardSteadyClockRtcValue ||
 +
|-
 +
| 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 ||
 +
|}
 +
 
 +
== ISteadyClock ==
 +
This is "nn::timesrv::detail::service::ISteadyClock".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetCurrentTimePoint || No input, returns an output [[#SteadyClockTimePoint]].
 +
|-
 +
| 2 || GetTestOffset || No input, returns an output [[#TimeSpanType]].
 +
|-
 +
| 3 || SetTestOffset || Takes an input [[#TimeSpanType]], no output.
 +
|-
 +
| 100 || [2.0.0+] GetRtcValue || No input, returns an output s64.
 +
|-
 +
| 101 || [2.0.0+] IsRtcResetDetected || No input, returns an output u8 bool.
 +
|-
 +
| 102 || [2.0.0+] GetSetupResultValue || No input, returns an output u32.
 +
|-
 +
| 200 || [3.0.0+] GetInternalOffset || No input, returns an output [[#TimeSpanType]].
 +
|-
 +
| 201 || [3.0.0-3.0.2] SetInternalOffset || Takes an input [[#TimeSpanType]], no output.
 +
|}
 +
 
 +
=== SteadyClockTimePoint ===
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8|| A u64 representing a point in time.
 +
|-
 +
| 0x8 || 0x10 || An ID representing the clock source.
 +
|}
 +
 
 +
This is a 0x18-byte struct.
 +
 
 +
=== TimeSpanType ===
 +
This is an u64.
 +
 
 +
== ISystemClock ==
 +
This is "nn::timesrv::detail::service::ISystemClock".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetCurrentTime || Returns an output [[#PosixTime]].
 +
|-
 +
| 1 || SetCurrentTime || Takes an input [[#PosixTime]].
 +
|-
 +
| 2 || GetSystemClockContext || Returns an output [[#SystemClockContext]].
 +
|-
 +
| 3 || SetSystemClockContext || Takes an input [[#SystemClockContext]].
 +
|-
 +
| 4 || [9.0.0+] GetOperationEventReadableHandle ||
 +
|}
 +
 
 +
=== 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]]
 +
|}
 +
 
 +
== ITimeZoneService ==
 +
This is "nn::timesrv::detail::service::ITimeZoneService".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetDeviceLocationName || No input, returns an output [[#LocationName]].
 +
|-
 +
| 1 || SetDeviceLocationName || Takes an input [[#LocationName]], no output.
 +
|-
 +
| 2 || GetTotalLocationNameCount || No input, returns an output s32.
 +
|-
 +
| 3 || LoadLocationNameList ||
 +
|-
 +
| 4 || LoadTimeZoneRule || Takes an input [[#LocationName]] and a type-0x16 output buffer for [[#TimeZoneRule]], no output.
 +
|-
 +
| 5 || [2.0.0+] GetTimeZoneRuleVersion ||  No input, returns an output [[#TimeZoneRuleVersion]].
 +
|-
 +
| 6 || [5.0.0+] GetDeviceLocationNameAndUpdatedTime ||
 +
|-
 +
| 7 || [9.0.0+] SetDeviceLocationNameWithTimeZoneRule ||
 +
|-
 +
| 8 || [9.0.0+] ParseTimeZoneBinary || Stubbed, return 0x7BC74.
 +
|-
 +
| 20 || [9.0.0+] GetDeviceLocationNameOperationEventReadableHandle ||
 +
|-
 +
| 100 || ToCalendarTime || Takes an input [[#PosixTime]] and a type-0x15 input buffer for [[#TimeZoneRule]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].
 +
|-
 +
| 101 || ToCalendarTimeWithMyRule || Takes an input [[#PosixTime]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].
 +
|-
 +
| 201 || ToPosixTime || Takes an input [[#CalendarTime]], a type-0x15 input buffer for [[#TimeZoneRule]], an type-0xA output buffer for [[#PosixTime]] array, and returns an output s32.
 +
|-
 +
| 202 || ToPosixTimeWithMyRule || Takes an input [[#CalendarTime]], an type-0xA output buffer for [[#PosixTime]] array, and 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.
 +
 
 +
=== 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"
 +
|-
 +
! 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.
 +
Represent a Time Type Information used in [[#TimeZoneRule]].
 +
 
 +
{| 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 ===
 +
{| 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?
 +
|}
 +
 
 +
This is an 0x8-byte struct.
 +
 
 +
=== CalendarAdditionalInfo ===
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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.
 +
|}
 +
 
 +
This is an 0x18-byte struct. This stores timezone info.
 +
 
 +
= notif:a =
 +
This is "nn::notification::server::INotificationServicesForApplication".
 +
 
 +
This was added with [9.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 500 || [[#RegisterAlarmSetting]]
 +
|-
 +
| 510 || [[#UpdateAlarmSetting]]
 +
|-
 +
| 520 || [[#ListAlarmSettings]]
 +
|-
 +
| 530 || [[#LoadApplicationParameter]]
 +
|-
 +
| 540 || [[#DeleteAlarmSetting]]
 +
|-
 +
| 1000 || [[#Initialize]]
 +
|}
 +
 
 +
== RegisterAlarmSetting ==
 +
Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. Returns an [[#AlarmSettingId]].
 +
 
 +
The second buffer can be empty (addr=0/size=0). Size must be <=0x400. This is the ApplicationParameter.
 +
 
 +
A maximum of 8 Alarms can be registered by an Application at the same time.
 +
 
 +
Before using the cmd, sdknso uses [[HID_services|hid]] IsFirmwareUpdateNeededForNotification then if needed launches the controller-applet for firmware-update.
 +
 
 +
After using the cmd when it failed, [[Error_Applet|ShowError]] will be used when the Result is in a certain range, otherwise this will assert.
 +
 
 +
== UpdateAlarmSetting ==
 +
Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. No output.
 +
 
 +
The second buffer can be empty (addr=0/size=0). Size must be <=0x400. This is the ApplicationParameter.
 +
 
 +
== ListAlarmSettings ==
 +
Takes a type-0x6 output buffer to receive an array of [[#AlarmSetting]]. Returns a s32 '''AlarmSettingsCount'''.
 +
 
 +
== LoadApplicationParameter ==
 +
Takes an input [[#AlarmSettingId]] and a type-0x6 output buffer containing the ApplicationParameter. Returns an u32 actual_size.
 +
 
 +
== DeleteAlarmSetting ==
 +
Takes an input [[#AlarmSettingId]].
 +
 
 +
== Initialize ==
 +
Takes a PID-descriptor and an input u64 pid_reserved.
 +
 
 +
= notif:s =
 +
This is "nn::notification::server::INotificationServices".
 +
 
 +
This was added with [9.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 500 || [[#RegisterAlarmSetting]]
 +
|-
 +
| 510 || [[#UpdateAlarmSetting]]
 +
|-
 +
| 520 || [[#ListAlarmSettings]]
 +
|-
 +
| 530 || [[#LoadApplicationParameter]]
 +
|-
 +
| 540 || [[#DeleteAlarmSetting]]
 +
|-
 +
| 1000 || [[#GetNotificationCount]]
 +
|-
 +
| 1010 || ListNotifications
 +
|-
 +
| 1020 || DeleteNotification
 +
|-
 +
| 1030 || ClearNotifications
 +
|-
 +
| 1040 || [[#GetNotificationSendingNotifier]]
 +
|-
 +
| 1500 || SetNotificationPresentationSetting
 +
|-
 +
| 1510 || GetNotificationPresentationSetting
 +
|-
 +
| 2000 || [[#GetAlarmSetting]]
 +
|-
 +
| 2001 || GetAlarmSettingWithApplicationParameter
 +
|-
 +
| 2010 || [[#SetAlarmSettingIsMuted]]
 +
|-
 +
| 2020 || [[#IsAlarmSettingDeletable]]
 +
|-
 +
| 8000 || RegisterAppletResourceUserId
 +
|-
 +
| 8010 || UnregisterAppletResourceUserId
 +
|-
 +
| 8999 || [10.0.0+] GetCurrentTime
 +
|-
 +
| 9000 || [[#GetAlarmSettingNextNotificationTime]]
 +
|}
 +
 
 +
== GetNotificationCount ==
 +
No input. Returns a total of 4-bytes of output.
 +
 
 +
== GetNotificationSendingNotifier ==
 +
No input. Returns an output [[#INotificationSystemEventAccessor]].
 +
 
 +
== INotificationSystemEventAccessor ==
 +
This is "nn::notification::server::INotificationSystemEventAccessor".
 +
 
 +
This was added with [9.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSystemEvent
 +
|}
 +
 
 +
== GetAlarmSetting ==
 +
Takes an input [[#AlarmSettingId]]. Returns an [[#AlarmSetting]].
 +
 
 +
== SetAlarmSettingIsMuted ==
 +
Takes an input [[#AlarmSettingId]] and a bool. No output.
 +
 
 +
== IsAlarmSettingDeletable ==
 +
Takes an input [[#AlarmSettingId]]. Returns a bool.
 +
 
 +
== GetAlarmSettingNextNotificationTime ==
 +
Takes an input [[#AlarmSettingId]]. Returns an u8 '''IsAlarmScheduled''' and a [[Glue_services#PosixTime|PosixTime]] for the next scheduled alarm.
 +
 
 +
= ectx:w =
 +
This is "nn::err::context::IWriterForSystem".
 +
 
 +
This was added with [11.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#CreateContextRegistrar]]
 +
|-
 +
| 1 || CommitContext
 +
|-
 +
| 2 || RemoveContext
 +
|}
 +
 
 +
== CreateContextRegistrar ==
 +
No input. Returns an [[#IContextRegistrar]].
 +
 
 +
== IContextRegistrar ==
 +
This is "nn::err::context::IContextRegistrar".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || Complete
 +
|}
 +
 
 +
= ectx:r =
 +
This is "nn::err::context::IReaderForSystem".
 +
 
 +
This was added with [11.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetContextInfo
 +
|-
 +
| 1 || PullContext
 +
|-
 +
| 2 || ListContextDescriptorWithResultForDebug
 +
|}
 +
 
 +
= ectx:aw =
 +
This is "nn::err::context::IWriterForApplication".
 +
 
 +
This was added with [11.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#CreateContextRegistrar]]
 +
|-
 +
| 1 || CommitContext
 +
|}
 +
 
 +
= pl:u =
 +
This is "nn::pl::sharedresource::detail::IPlatformSharedResourceManager".
 +
 
 +
This was added with [16.0.0+].
 +
 
 +
This has max_sessions 5.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#RequestLoad]]
 
|-
 
|-
| 1 || SetApplicationLaunchProperty
+
| 1 || [[#GetLoadState]]
 
|-
 
|-
| 2 || SetApplicationControlProperty
+
| 2 || [[#GetSize]]
 +
|-
 +
| 3 || [[#GetSharedMemoryAddressOffset]]
 +
|-
 +
| 4 || [[#GetSharedMemoryNativeHandle]]
 +
|-
 +
| 5 || [[#GetSharedFontInOrderOfPriority]]
 +
|-
 +
| 6 || GetSharedFontInOrderOfPriorityForSystem
 
|}
 
|}
 +
 +
== RequestLoad ==
 +
Takes a [[#SharedFontType]] (uint32), no output.
 +
 +
== GetLoadState ==
 +
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32).
 +
 +
=== LoadState ===
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0x00 || Loading
 +
|-
 +
| 0x01 || Loaded
 +
|}
 +
 +
== GetSize ==
 +
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32).
 +
 +
== GetSharedMemoryAddressOffset ==
 +
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address.
 +
 +
== GetSharedMemoryNativeHandle ==
 +
No input, returns an output SharedMemory handle.
 +
 +
User-processes map this SharedMemory with size=0x1100000 and permissions=R--.
 +
 +
Font data is TTF, located at the offset returned by [[#GetSharedMemoryAddressOffset]].
 +
 +
== GetSharedFontInOrderOfPriority ==
 +
Takes an input u64 [[Settings_services#LanguageCode|LanguageCode]] and 3 type-0x6 output buffers, returns an output u8 and u32. The u8 is a bool to specify if the fonts are loaded or not and the u32 is the font count.
 +
The first buffer contains a list of [[#SharedFontType|Shared font types]], the second buffer contains the font offsets and the final buffer contains the font sizes.
 +
The buffers are an array of u32s which specify information about a specific font. Buffer1[n] is related to Buffer2[n] and Buffer3[n].
 +
Example: Font index 0s offset is at Buffer2[0], size is at Buffer3[0].
 +
The fonts are relative to the shared memory created by [[#GetSharedFontSharedMemoryHandle]]
 +
 +
== SharedFontType ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0x00 || Japan, US and Europe (Standard)
 +
|-
 +
| 0x01 || Chinese Simplified
 +
|-
 +
| 0x02 || Extended Chinese Simplified
 +
|-
 +
| 0x03 || Chinese Traditional
 +
|-
 +
| 0x04 || Korean (Hangul)
 +
|-
 +
| 0x05 || Nintendo Extended
 +
|}
 +
 +
* Nintendo Extended: Contains Nintendo-specific characters, including HID buttons, HID controller styles, applet icons, Wii(U) icons,  etc.
 +
 +
= ApplicationInstanceId =
 +
This is "nn::arp::ApplicationInstanceId".
 +
 +
This is an u64 ID bound to an application instance.
 +
 +
= ApplicationKind =
 +
This is "nn::arp::ApplicationKind".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || Application
 +
|-
 +
| 1 || MicroApplication
 +
|}
 +
 +
= ApplicationLaunchProperty =
 +
This is "nn::arp::ApplicationLaunchProperty".
 +
 +
This is a 0x10-byte struct.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x00
 +
| 0x08
 +
| [[NCM_services#ProgramId|Id]]
 +
|-
 +
| 0x08
 +
| 0x04
 +
| Version
 +
|-
 +
| 0x0C
 +
| 0x01
 +
| [[Filesystem_services#StorageId|Storage]]
 +
|-
 +
| 0x0D
 +
| 0x01
 +
| [[Filesystem_services#StorageId|PatchStorage]]
 +
|-
 +
| 0x0E
 +
| 0x01
 +
| [[#ApplicationKind|Kind]]
 +
|-
 +
| 0x0F
 +
| 0x01
 +
| Reserved
 +
|}
 +
 +
= ApplicationProcessProperty =
 +
This is "nn::arp::ApplicationProcessProperty".
 +
 +
This is a 0x1-byte struct.
 +
 +
[17.0.0+] This is a 0x10-byte struct.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x00
 +
| 0x01
 +
| ProgramIndex
 +
|-
 +
| 0x01
 +
| 0x0F
 +
|
 +
|}
 +
 +
= ApplicationCertificate =
 +
This is "nn::arp::ApplicationCertificate".
 +
 +
This is a 0x528-byte struct.
 +
 +
= AlarmSettingId =
 +
This is "nn::notification::AlarmSettingId". This is an u16.
 +
 +
= AlarmSetting =
 +
This is "nn::notification::AlarmSetting". Total size is 0x40 bytes. When initializing this to the defaults, the entire struct is cleared then the last 0xE-bytes are set to 0xFF.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x00
 +
| 0x02
 +
| [[#AlarmSettingId]]
 +
|-
 +
| 0x02
 +
| 0x01
 +
| Kind (0 = WeeklySchedule)
 +
|-
 +
| 0x03
 +
| 0x01
 +
| u8 bool Muted (non-zero/true = AlarmSetting turned off, zero/false = on).
 +
|-
 +
| 0x04
 +
| 0x04
 +
| Padding
 +
|-
 +
| 0x08
 +
| 0x10
 +
| UID. User account associated with this AlarmSetting. Used for the PreselectedUser when launching the Application when the system was previously in sleep-mode, instead of launching the applet for selecting the user.
 +
|-
 +
| 0x18
 +
| 0x08
 +
| ApplicationId
 +
|-
 +
| 0x20
 +
| 0x08
 +
| Not set by sdksno, besides clearing it during initialization.
 +
|-
 +
| 0x28
 +
| 0x18
 +
| Alarm schedule (WeeklyScheduleAlarmSetting)
 +
|}
 +
 +
Schedule:
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x00 || 0x0A || Not set by sdksno, besides clearing it during initialization.
 +
|-
 +
| 0x0A || 0xE(7*2) || Array of 7 entries where each entry is 2-bytes. Index is <code>nn::time::DayOfWeek</code>, Sun-Sat.
 +
|}
 +
 +
Array entries:
 +
 +
Each byte is set using an input s32. An entry with value 0xFFFF (the default) indicates that it's disabled. The high byte is the hour, the low byte is the minute. This uses local-time.
 +
 +
sdknso checks whether an entry is enabled with: <code>return ({last 5-bits of the entry} < 3) && ((entry & 0xfc) < 60);</code>. The first check is equivalent to comparing the second entry byte with value 24.
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu