Applet Manager services: Difference between revisions
(67 intermediate revisions by 4 users not shown) | |||
Line 65: | Line 65: | ||
== ISystemAppletProxy == | == ISystemAppletProxy == | ||
This is "nn::am::service::ISystemAppletProxy". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 95: | Line 97: | ||
=== IHomeMenuFunctions === | === IHomeMenuFunctions === | ||
This is "nn::am::service::IHomeMenuFunctions". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 10 || [[#RequestToGetForeground]] | |||
|- | |||
| 11 || [[#LockForeground]] | |||
|- | |||
| 12 || [[#UnlockForeground]] | |||
|- | |||
| 20 || [[#PopFromGeneralChannel]] | |||
|- | |||
| 21 || [[#GetPopFromGeneralChannelEvent]] | |||
|- | |- | ||
| | | 30 || [[#GetHomeButtonWriterLockAccessor]] | ||
|- | |- | ||
| | | 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] | ||
|- | |- | ||
| | | 40 || [11.0.0+] [[#IsSleepEnabled]] | ||
|- | |- | ||
| | | 41 || [12.0.0+] [[#IsRebootEnabled]] | ||
|- | |- | ||
| | | 50 || [16.0.0+] [[#LaunchSystemApplet]] | ||
|- | |- | ||
| | | 51 || [16.0.0+] [[#LaunchStarter]] | ||
|- | |- | ||
| | | 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]] | ||
|- | |- | ||
| | | 110 || [9.0.0+] [[#IsForceTerminateApplicationDisabledForDebug]] | ||
|- | |- | ||
| | | 200 || [8.0.0+] [[#LaunchDevMenu]] | ||
|- | |- | ||
| | | 1000 || [11.0.0+] [[#SetLastApplicationExitReason]] | ||
|} | |} | ||
Line 144: | Line 158: | ||
The input value must be 0-3. 0 = HomeButton. | The input value must be 0-3. 0 = HomeButton. | ||
==== IsSleepEnabled ==== | |||
No input, returns an output bool. | |||
==== IsRebootEnabled ==== | |||
No input, returns an output bool. | |||
==== LaunchSystemApplet ==== | |||
No input/output. | |||
This wraps [[NS_Services|ns]] LaunchSystemApplet, ignoring the u64 returned by that cmd (and other functionality). | |||
==== LaunchStarter ==== | |||
No input/output. | |||
This is similar to [[#LaunchSystemApplet]], except this uses [[NS_Services|ns]] LaunchLibraryApplet with a ProgramId from global state. | |||
The global state field is initialized elsewhere with the value of [[System_Settings|system-setting]] <code>am.debug!starter_id</code>, defaulting to ProgramId 0100000000001012 ([[Title_list|starter]]) if not available. | |||
==== PopRequestLaunchApplicationForDebug ==== | ==== PopRequestLaunchApplicationForDebug ==== | ||
Line 160: | Line 192: | ||
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | ||
Uses [[NS_Services | Uses [[NS_Services|ns]] LaunchDevMenu. | ||
This is used by [[qlaunch]]. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | This is used by [[qlaunch]]. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | ||
==== SetLastApplicationExitReason ==== | |||
Takes an input s32, no output. | |||
==== ILockAccessor ==== | ==== ILockAccessor ==== | ||
This is "nn::am::service::ILockAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 175: | Line 212: | ||
| 3 || [[#GetEvent]] | | 3 || [[#GetEvent]] | ||
|- | |- | ||
| 4 || [10.0.0+] IsLocked | | 4 || [10.0.0+] [[#IsLocked]] | ||
|} | |} | ||
Line 190: | Line 227: | ||
===== GetEvent ===== | ===== GetEvent ===== | ||
No input, returns an output Event handle with autoclear=false. | No input, returns an output Event handle with autoclear=false. | ||
==== IsLocked ==== | |||
No input, returns an output u8 bool. | |||
=== IGlobalStateController === | === IGlobalStateController === | ||
This is "nn::am::service::IGlobalStateController". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#RequestToEnterSleep]] | |||
|- | |- | ||
| | | 1 || [[#EnterSleep]] | ||
|- | |- | ||
| | | 2 || [[#StartSleepSequence]] | ||
|- | |- | ||
| | | 3 || [[#StartShutdownSequence]] | ||
|- | |- | ||
| | | 4 || [[#StartRebootSequence]] | ||
|- | |- | ||
| | | 9 || [7.0.0+] [[#IsAutoPowerDownRequested]] | ||
|- | |- | ||
| | | 10 || [[#LoadAndApplyIdlePolicySettings]] | ||
|- | |- | ||
| | | 11 || [2.0.0+] [[#NotifyCecSettingsChanged]] | ||
|- | |- | ||
| | | 12 || [3.0.0+] [[#SetDefaultHomeButtonLongPressTime]] | ||
|- | |- | ||
| | | 13 || [3.0.0+] [[#UpdateDefaultDisplayResolution]] | ||
|- | |- | ||
| | | 14 || [3.0.0+] [[#ShouldSleepOnBoot]] | ||
|- | |- | ||
| | | 15 || [4.0.0+] [[#GetHdcpAuthenticationFailedEvent]] | ||
|- | |- | ||
| | | 30 || [12.0.0+] [[#OpenCradleFirmwareUpdater]] | ||
|} | |} | ||
Line 275: | Line 319: | ||
Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent. | Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent. | ||
=== | ==== OpenCradleFirmwareUpdater ==== | ||
No input, returns an [[#ICradleFirmwareUpdater]]. | |||
=== ICradleFirmwareUpdater === | |||
This is "nn::am::service::ICradleFirmwareUpdater". | |||
This was added with [12.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || StartUpdate | |||
|- | |||
| 1 || FinishUpdate | |||
|- | |- | ||
| | | 2 || [[#GetCradleDeviceInfo]] | ||
|- | |- | ||
| | | 3 || GetCradleDeviceInfoChangeEvent | ||
|- | |- | ||
| | | 4 || GetUpdateProgressInfo | ||
|- | |- | ||
| | | 5 || GetLastInternalResult | ||
|} | |} | ||
[[#CreateApplication]]/[[#CreateSystemApplication]] eventually call the same internal func. With [[#CreateApplication]], two ptrs passed to the internal func are NULL, while with [[#CreateSystemApplication]] these are loaded from state. The initial content of [[#ApplicationLaunchRequestInfo]] is all-zero with [[#CreateSystemApplication]], while with [[#CreateApplication]] the first two u32s are value 0x3 with the rest all-zero. The [[#AppletId]] is set to 0x01 with [[#CreateApplication]], while with [[#CreateSystemApplication]] it's 0x04. | ==== GetCradleDeviceInfo ==== | ||
No input, returns a 8-byte CradleDeviceInfo. | |||
[13.0.0+] Now returns a total of 0xC-bytes. | |||
=== IApplicationCreator === | |||
This is "nn::am::service::IApplicationCreator". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#CreateApplication]] | |||
|- | |||
| 1 || [[#PopLaunchRequestedApplication]] | |||
|- | |||
| 10 || [[#CreateSystemApplication]] | |||
|- | |||
| 100 || [[#PopFloatingApplicationForDevelopment]] | |||
|} | |||
[[#CreateApplication]]/[[#CreateSystemApplication]] eventually call the same internal func. With [[#CreateApplication]], two ptrs passed to the internal func are NULL, while with [[#CreateSystemApplication]] these are loaded from state. The initial content of [[#ApplicationLaunchRequestInfo]] is all-zero with [[#CreateSystemApplication]], while with [[#CreateApplication]] the first two u32s are value 0x3 with the rest all-zero. The [[#AppletId]] is set to 0x01 with [[#CreateApplication]], while with [[#CreateSystemApplication]] it's 0x04. | |||
==== CreateApplication ==== | ==== CreateApplication ==== | ||
Line 308: | Line 384: | ||
==== IApplicationAccessor ==== | ==== IApplicationAccessor ==== | ||
This is "nn::am::service::IApplicationAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 360: | Line 438: | ||
| 190 || [9.0.0+] [[#PushToNotificationStorageChannel]] || | | 190 || [9.0.0+] [[#PushToNotificationStorageChannel]] || | ||
|- | |- | ||
| 200 || [10.0.0+] || | | 200 || [10.0.0+] [[#RequestApplicationSoftReset]] || | ||
|- | |- | ||
| 201 || [10.0.0+] || | | 201 || [10.0.0+] [[#RestartApplicationTimer]] || | ||
|} | |} | ||
Line 442: | Line 520: | ||
[[qlaunch]] will only push data for this when launching the Application when the Alarm was triggered, where the system was previously in sleep-mode. This data is the [[Glue_services|Notification]] ApplicationParameter. | [[qlaunch]] will only push data for this when launching the Application when the Alarm was triggered, where the system was previously in sleep-mode. This data is the [[Glue_services|Notification]] ApplicationParameter. | ||
===== RequestApplicationSoftReset ===== | |||
No input/output. | |||
===== RestartApplicationTimer ===== | |||
No input/output. | |||
===== IAppletAccessor ===== | ===== IAppletAccessor ===== | ||
This is "nn::am::service::IAppletAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 480: | Line 566: | ||
== IAppletCommonFunctions == | == IAppletCommonFunctions == | ||
This is "nn::am::service::IAppletCommonFunctions". | |||
This was added with [7.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [9.0.0+] [[#SetTerminateResult]] | |||
|- | |||
| 10 || [[#ReadThemeStorage]] | |||
|- | |||
| 11 || [[#WriteThemeStorage]] | |||
|- | |||
| 20 || [9.0.0+] [[#PushToAppletBoundChannel]] | |||
|- | |||
| 21 || [9.0.0+] [[#TryPopFromAppletBoundChannel]] | |||
|- | |||
| 40 || [8.0.0+] [[#GetDisplayLogicalResolution]] | |||
|- | |||
| 42 || [8.0.0+] [[#SetDisplayMagnification]] | |||
|- | |||
| 50 || [8.0.0+] [[#SetHomeButtonDoubleClickEnabled]] | |||
|- | |||
| 51 || [8.0.0+] [[#GetHomeButtonDoubleClickEnabled]] | |||
|- | |||
| 52 || [10.0.0+] [[#IsHomeButtonShortPressedBlocked]] | |||
|- | |||
| 60 || [11.0.0+] [[#IsVrModeCurtainRequired]] | |||
|- | |||
| 61 || [12.0.0+] IsSleepRequiredByHighTemperature | |||
|- | |||
| 62 || [12.0.0+] IsSleepRequiredByLowBattery | |||
|- | |- | ||
| | | 70 || [11.0.0+] [[#SetCpuBoostRequestPriority]] | ||
|- | |- | ||
| | | 80 || [14.0.0+] SetHandlingCaptureButtonShortPressedMessageEnabledForApplet | ||
|- | |- | ||
| | | 81 || [14.0.0+] SetHandlingCaptureButtonLongPressedMessageEnabledForApplet | ||
|- | |- | ||
| | | 82 || [18.0.0+] | ||
|- | |- | ||
| | | 90 || [15.0.0+] OpenNamedChannelAsParent | ||
|- | |- | ||
| | | 91 || [15.0.0+] OpenNamedChannelAsChild | ||
|- | |- | ||
| | | 100 || [15.0.0+] SetApplicationCoreUsageMode | ||
|- | |- | ||
| | | 160 || [18.0.0+] | ||
|- | |- | ||
| | | 161 || [18.0.0+] | ||
|- | |- | ||
| | | 300 || [17.0.0+] | ||
|} | |} | ||
Line 540: | Line 654: | ||
=== GetHomeButtonDoubleClickEnabled === | === GetHomeButtonDoubleClickEnabled === | ||
No input, returns an output u8 bool. | No input, returns an output u8 bool. | ||
=== IsHomeButtonShortPressedBlocked === | |||
No input, returns an output u8 bool. | |||
=== IsVrModeCurtainRequired === | |||
No input, returns an output bool. | |||
=== SetCpuBoostRequestPriority === | |||
Takes an input s32, no output. | |||
== ILibraryAppletProxy == | == ILibraryAppletProxy == | ||
This is "nn::am::service::ILibraryAppletProxy". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 563: | Line 688: | ||
|- | |- | ||
| 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | ||
|- | |||
| 22 || [15.0.0+] GetHomeMenuFunctions || No input, returns an [[#IHomeMenuFunctions]]. | |||
|- | |||
| 23 || [15.0.0+] GetGlobalStateController || No input, returns an [[#IGlobalStateController]]. | |||
|- | |- | ||
| 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | ||
Line 568: | Line 697: | ||
=== ILibraryAppletSelfAccessor === | === ILibraryAppletSelfAccessor === | ||
This is "nn::am::service::ILibraryAppletSelfAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 638: | Line 769: | ||
| 130 || [9.0.0+] [[#GetGpuErrorDetectedSystemEvent]] || | | 130 || [9.0.0+] [[#GetGpuErrorDetectedSystemEvent]] || | ||
|- | |- | ||
| 140 || [10.0.0+] SetApplicationMemoryReservation || | | 140 || [10.0.0+] [[#SetApplicationMemoryReservation]] || | ||
|- | |||
| 150 || [10.0.0+] [[#ShouldSetGpuTimeSliceManually]] || | |||
|- | |- | ||
| | | 160 || [17.0.0+] [[#Cmd160]] || | ||
|} | |} | ||
Line 765: | Line 898: | ||
Normally the output bool is set to 0, however when no users are available it's set to 1 with '''total_entries''' = -1. | Normally the output bool is set to 0, however when no users are available it's set to 1 with '''total_entries''' = -1. | ||
==== SetApplicationMemoryReservation ==== | |||
Takes an input u64, no output. | |||
An Application must be currently running. The input u64 must be 0x1000-byte aligned. | |||
==== ShouldSetGpuTimeSliceManually ==== | |||
No input, returns an output u8 bool. | |||
==== Cmd160 ==== | |||
No input, returns an output u64. Currently always returns 0. | |||
== IOverlayAppletProxy == | == IOverlayAppletProxy == | ||
This is "nn::am::service::IOverlayAppletProxy". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 788: | Line 934: | ||
|- | |- | ||
| 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | ||
|- | |||
| 23 || [15.0.0+] GetGlobalStateController || No input, returns an [[#IGlobalStateController]]. | |||
|- | |- | ||
| 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | ||
Line 793: | Line 941: | ||
=== IOverlayFunctions === | === IOverlayFunctions === | ||
This is "nn::am::service::IOverlayFunctions". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 816: | Line 966: | ||
|- | |- | ||
| 20 || [8.0.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] | | 20 || [8.0.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] | ||
|- | |||
| 21 || [14.0.0+] SetHandlingTouchScreenInputEnabled | |||
|- | |- | ||
| 30 || [9.0.0+] [[#SetHealthWarningShowingState]] | | 30 || [9.0.0+] [[#SetHealthWarningShowingState]] | ||
|- | |- | ||
| 31 || [10.0.0+] IsHealthWarningRequired | | 31 || [10.0.0+] [[#IsHealthWarningRequired]] | ||
|- | |||
| 40 || [18.0.0+] | |||
|- | |||
| 41 || [18.0.0+] | |||
|- | |- | ||
| 90 || [7.0.0+] [[#SetRequiresGpuResourceUse]] | | 90 || [7.0.0+] [[#SetRequiresGpuResourceUse]] | ||
Line 868: | Line 1,024: | ||
This writes the input bool into state, signals an Event, and returns 0. | This writes the input bool into state, signals an Event, and returns 0. | ||
==== IsHealthWarningRequired ==== | |||
No input, returns an output u8 bool. | |||
==== SetRequiresGpuResourceUse ==== | ==== SetRequiresGpuResourceUse ==== | ||
Line 882: | Line 1,041: | ||
== IApplicationProxy == | == IApplicationProxy == | ||
This is "nn::am::service::IApplicationProxy". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 906: | Line 1,067: | ||
=== IApplicationFunctions === | === IApplicationFunctions === | ||
This is "nn::am::service::IApplicationFunctions". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 1 || [[#PopLaunchParameter]] | |||
|- | |||
| 10 || [[#CreateApplicationAndPushAndRequestToStart]] | |||
|- | |||
| 11 || [3.0.0+] [[#CreateApplicationAndPushAndRequestToStartForQuest]] | |||
|- | |||
| 12 || [4.0.0+] [[#CreateApplicationAndRequestToStart]] | |||
|- | |||
| 13 || [4.0.0+] [[#CreateApplicationAndRequestToStartForQuest]] | |||
|- | |||
| 14 || [7.0.0+] [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]] | |||
|- | |||
| 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] | |||
|- | |||
| 20 || [[#EnsureSaveData]] | |||
|- | |||
| 21 || [[#GetDesiredLanguage]] | |||
|- | |||
| 22 || [[#SetTerminateResult]] | |||
|- | |- | ||
| | | 23 || [[#GetDisplayVersion]] | ||
|- | |- | ||
| | | 24 || [2.0.0+] [[#GetLaunchStorageInfoForDebug]] | ||
|- | |- | ||
| | | 25 || [3.0.0+] ExtendSaveData | ||
|- | |- | ||
| | | 26 || [3.0.0+] GetSaveDataSize | ||
|- | |- | ||
| | | 27 || [5.0.0+] CreateCacheStorage | ||
|- | |- | ||
| | | 28 || [11.0.0+] [[#GetSaveDataSizeMax]] | ||
|- | |- | ||
| | | 29 || [11.0.0+] [[#GetCacheStorageMax]] | ||
|- | |- | ||
| | | 30 || [[#BeginBlockingHomeButtonShortAndLongPressed]] | ||
|- | |- | ||
| | | 31 || [[#EndBlockingHomeButtonShortAndLongPressed]] | ||
|- | |- | ||
| | | 32 || [[#BeginBlockingHomeButton]] | ||
|- | |- | ||
| | | 33 || [[#EndBlockingHomeButton]] | ||
|- | |- | ||
| | | 34 || [10.0.0-15.0.1] [[#SelectApplicationLicense]] | ||
|- | |- | ||
| | | 35 || [11.0.0+] [[#GetDeviceSaveDataSizeMax]] | ||
|- | |- | ||
| | | 36 || [14.0.0+] GetLimitedApplicationLicense | ||
|- | |- | ||
| | | 37 || [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent | ||
|- | |- | ||
| | | 40 || [[#NotifyRunning]] | ||
|- | |- | ||
| | | 50 || [2.0.0+] [[#GetPseudoDeviceId]] | ||
|- | |- | ||
| | | 60 || [2.0.0+] [[#SetMediaPlaybackStateForApplication]] | ||
|- | |- | ||
| | | 65 || [3.0.0+] [[#IsGamePlayRecordingSupported]] | ||
|- | |- | ||
| | | 66 || [3.0.0+] [[#InitializeGamePlayRecording]] | ||
|- | |- | ||
| | | 67 || [3.0.0+] [[#SetGamePlayRecordingState]] | ||
|- | |- | ||
| | | 68 || [4.0.0+] [[#RequestFlushGamePlayingMovieForDebug]] | ||
|- | |- | ||
| | | 70 || [3.0.0+] [[#RequestToShutdown]] | ||
|- | |- | ||
| | | 71 || [3.0.0+] [[#RequestToReboot]] | ||
|- | |- | ||
| | | 72 || [10.0.0+] [[#RequestToSleep]] | ||
|- | |- | ||
| | | 80 || [4.0.0+] [[#ExitAndRequestToShowThanksMessage]] | ||
|- | |- | ||
| | | 90 || [4.0.0+] [[#EnableApplicationCrashReport]] | ||
|- | |- | ||
| | | 100 || [5.0.0+] [[#InitializeApplicationCopyrightFrameBuffer]] | ||
|- | |- | ||
| | | 101 || [5.0.0+] [[#SetApplicationCopyrightImage]] | ||
|- | |- | ||
| | | 102 || [5.0.0+] [[#SetApplicationCopyrightVisibility]] | ||
|- | |- | ||
| | | 110 || [5.0.0+] [[#QueryApplicationPlayStatistics]] | ||
|- | |- | ||
| | | 111 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUid]] | ||
|- | |- | ||
| | | 120 || [5.0.0+] [[#ExecuteProgram]] | ||
|- | |- | ||
| | | 121 || [5.0.0+] [[#ClearUserChannel]] | ||
|- | |- | ||
| | | 122 || [5.0.0+] [[#UnpopToUserChannel]] | ||
|- | |- | ||
| | | 123 || [5.0.0+] [[#GetPreviousProgramIndex]] | ||
|- | |- | ||
| | | 124 || [6.0.0+] [[#EnableApplicationAllThreadDumpOnCrash]] | ||
|- | |- | ||
| | | 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] | ||
|- | |- | ||
| | | 131 || [11.0.0+] [[#SetDelayTimeToAbortOnGpuError]] | ||
|- | |- | ||
| | | 140 || [9.0.0+] [[#GetFriendInvitationStorageChannelEvent]] | ||
|- | |- | ||
| | | 141 || [9.0.0+] [[#TryPopFromFriendInvitationStorageChannel]] | ||
|- | |- | ||
| | | 150 || [9.0.0+] [[#GetNotificationStorageChannelEvent]] | ||
|- | |- | ||
| | | 151 || [9.0.0+] [[#TryPopFromNotificationStorageChannel]] | ||
|- | |- | ||
| | | 160 || [9.0.0+] [[#GetHealthWarningDisappearedSystemEvent]] | ||
|- | |- | ||
| | | 170 || [9.0.0+] [[#SetHdcpAuthenticationActivated]] | ||
|- | |- | ||
| | | 180 || [10.1.0+] [[#GetLaunchRequiredVersion]] | ||
|- | |- | ||
| | | 181 || [10.1.0+] [[#UpgradeLaunchRequiredVersion]] | ||
|- | |- | ||
| | | 190 || [11.0.0+] [[#SendServerMaintenanceOverlayNotification]] | ||
|- | |- | ||
| | | 200 || [11.0.0+] [[#GetLastApplicationExitReason]] | ||
|- | |- | ||
| 500 || [5.0.0+] [[#StartContinuousRecordingFlushForDebug]] | | 500 || [5.0.0+] [[#StartContinuousRecordingFlushForDebug]] | ||
|- | |- | ||
| 1000 || [5.0.0+] [[#CreateMovieMaker]] | | 1000 || [5.0.0+] [[#CreateMovieMaker]] | ||
|- | |- | ||
| 1001 || [5.0.0+] [[#PrepareForJit]] | | 1001 || [5.0.0+] [[#PrepareForJit]] | ||
|} | |} | ||
Line 1,079: | Line 1,262: | ||
This returns two u8s loaded from state, these are the same StorageIds from [[#ApplicationLaunchProperty]]. | This returns two u8s loaded from state, these are the same StorageIds from [[#ApplicationLaunchProperty]]. | ||
==== GetSaveDataSizeMax ==== | |||
No input, returns two ouput s64s. | |||
==== GetCacheStorageMax ==== | |||
No input, returns an output s32 and s64. | |||
==== BeginBlockingHomeButtonShortAndLongPressed ==== | ==== BeginBlockingHomeButtonShortAndLongPressed ==== | ||
Line 1,097: | Line 1,286: | ||
==== EndBlockingHomeButton ==== | ==== EndBlockingHomeButton ==== | ||
No input/output. | No input/output. | ||
==== SelectApplicationLicense ==== | |||
Takes an input array of [[#ApplicationLicenseType]], returns an output [[#ApplicationLicenseType]]. | |||
==== GetDeviceSaveDataSizeMax ==== | |||
No input, returns two output s64s. | |||
==== NotifyRunning ==== | ==== NotifyRunning ==== | ||
Line 1,132: | Line 1,327: | ||
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | ||
==== RequestToSleep ==== | |||
No input/output. | |||
==== ExitAndRequestToShowThanksMessage ==== | ==== ExitAndRequestToShowThanksMessage ==== | ||
Line 1,151: | Line 1,349: | ||
User-processes create the tmem with an user-specified buffer with permissions=0. '''width''' = 1280 and '''height''' = 720. | User-processes create the tmem with an user-specified buffer with permissions=0. '''width''' = 1280 and '''height''' = 720. | ||
After the validation checks pass the input is passed to [[OMM_services|ommdisp]] cmd500. | |||
This is used as an overlay for screenshots. | This is used as an overlay for screenshots. | ||
==== SetApplicationCopyrightImage ==== | ==== SetApplicationCopyrightImage ==== | ||
Takes a type-0x45 input buffer, an s32 '''x''', an s32 '''y''', an s32 '''width''', an s32 '''height''', an s32 | Takes a type-0x45 input buffer, an s32 '''x''', an s32 '''y''', an s32 '''width''', an s32 '''height''', an s32 [[#WindowOriginMode]], and no output. | ||
'''x''' and '''y''' must not have the negative bit set. '''width''' and '''height''' must not be <1. | '''x''' and '''y''' must not have the negative bit set. '''width''' and '''height''' must not be <1. | ||
Line 1,208: | Line 1,406: | ||
No input, returns an output Event handle with autoclear=false. | No input, returns an output Event handle with autoclear=false. | ||
This is used by sdknso during applet-application initialization. A separate thread is setup where event-waiting is handled. When the Event is signaled, official sw will | This is used by sdknso during applet-application initialization. A separate thread is setup where event-waiting is handled. When the Event is signaled, official sw will Abort. | ||
==== SetDelayTimeToAbortOnGpuError ==== | |||
Takes an input s64 "nn::TimeSpan", no output. | |||
==== GetFriendInvitationStorageChannelEvent ==== | ==== GetFriendInvitationStorageChannelEvent ==== | ||
Line 1,239: | Line 1,440: | ||
==== SetHdcpAuthenticationActivated ==== | ==== SetHdcpAuthenticationActivated ==== | ||
Takes an input u8 bool, no output. | Takes an input u8 bool, no output. | ||
==== GetLaunchRequiredVersion ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], an u64, returns an output [[#LaunchRequiredVersion]]. | |||
sdknso passes hard-coded value 0 for the u64. | |||
==== UpgradeLaunchRequiredVersion ==== | |||
Takes an input [[#LaunchRequiredVersion]], an [[NCM_services#ApplicationId|ApplicationId]], an u64, no output. | |||
sdknso passes hard-coded value 0 for the u64. | |||
==== SendServerMaintenanceOverlayNotification ==== | |||
Takes two input [[PCV_services#PosixTime|PosixTime]], no output. | |||
The second input value can optionally be 0. | |||
==== GetLastApplicationExitReason ==== | |||
No input, returns an output s32. | |||
==== StartContinuousRecordingFlushForDebug ==== | ==== StartContinuousRecordingFlushForDebug ==== | ||
Line 1,253: | Line 1,472: | ||
==== PrepareForJit ==== | ==== PrepareForJit ==== | ||
Takes no input. Launches | Takes no input. Launches the [[JIT_services|jit-sysmodule]] via [[NS_Services|ns]] LaunchLibraryApplet if it has not already been launched for the current application, storing a std::shared_ptr<> for jit-sysmodule process tracking object as an IApplicationFunctions member. | ||
~IApplicationFunctions() includes: | |||
if (this->jit_process) { | |||
Terminate(this->jit_process); | |||
this->jit_process = nullptr; | |||
} | |||
Thus the lifetime of the jit sysmodule is tied to the application which uses it, and each application gets its own fresh copy of the jit sysmodule. | |||
AM can also optionally launch jit-sysmodule automatically if the [[NACP]] enables it. | |||
=== IMovieMaker === | === IMovieMaker === | ||
This is "nn::am::service::IMovieMaker". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,272: | Line 1,504: | ||
== ILibraryAppletCreator == | == ILibraryAppletCreator == | ||
This is "nn::am::service::ILibraryAppletCreator". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,324: | Line 1,558: | ||
=== ILibraryAppletAccessor === | === ILibraryAppletAccessor === | ||
This is "nn::am::service::ILibraryAppletAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,342: | Line 1,578: | ||
| 50 || [[#SetOutOfFocusApplicationSuspendingEnabled]] || | | 50 || [[#SetOutOfFocusApplicationSuspendingEnabled]] || | ||
|- | |- | ||
| 60 || [10.0.0+] PresetLibraryAppletGpuTimeSliceZero || | | 60 || [10.0.0+] [[#PresetLibraryAppletGpuTimeSliceZero]] || | ||
|- | |- | ||
| 100 || [[#PushInData]] || | | 100 || [[#PushInData]] || | ||
Line 1,373: | Line 1,609: | ||
Official sw will assert prior to using this if applet-service was not initialized as *Application. | Official sw will assert prior to using this if applet-service was not initialized as *Application. | ||
==== PresetLibraryAppletGpuTimeSliceZero ==== | |||
No input/output. | |||
sdknso only uses with with [[Software_Keyboard|swkbd-inline]], immediately after creating the LibraryApplet. | |||
==== PushInData ==== | ==== PushInData ==== | ||
Line 1,411: | Line 1,652: | ||
== ICommonStateGetter == | == ICommonStateGetter == | ||
This is "nn::am::service::ICommonStateGetter". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#GetEventHandle]] | |||
|- | |||
| 1 || [[#ReceiveMessage]] | |||
|- | |||
| 2 || [[#GetThisAppletKind]] | |||
|- | |- | ||
| | | 3 || [[#AllowToEnterSleep]] | ||
|- | |- | ||
| | | 4 || [[#DisallowToEnterSleep]] | ||
|- | |- | ||
| | | 5 || [[#GetOperationMode]] | ||
|- | |- | ||
| | | 6 || [[#GetPerformanceMode]] | ||
|- | |- | ||
| | | 7 || [[#GetCradleStatus]] | ||
|- | |- | ||
| | | 8 || [[#GetBootMode]] | ||
|- | |- | ||
| | | 9 || [[#GetCurrentFocusState]] | ||
|- | |- | ||
| | | 10 || [[#RequestToAcquireSleepLock]] | ||
|- | |- | ||
| | | 11 || [[#ReleaseSleepLock]] | ||
|- | |- | ||
| | | 12 || [[#ReleaseSleepLockTransiently]] | ||
|- | |- | ||
| | | 13 || [[#GetAcquiredSleepLockEvent]] | ||
|- | |- | ||
| | | 14 || [11.0.0+] [[#GetWakeupCount]] | ||
|- | |- | ||
| | | 20 || [[#PushToGeneralChannel]] | ||
|- | |- | ||
| | | 30 || [[#GetHomeButtonReaderLockAccessor]] | ||
|- | |- | ||
| | | 31 || [2.0.0+] [[#GetReaderLockAccessorEx]] | ||
|- | |- | ||
| | | 32 || [7.0.0+] [[#GetWriterLockAccessorEx]] | ||
|- | |- | ||
| | | 40 || [2.0.0+] [[#GetCradleFwVersion]] | ||
|- | |- | ||
| | | 50 || [3.0.0+] [[#IsVrModeEnabled]] | ||
|- | |- | ||
| | | 51 || [3.0.0+] [[#SetVrModeEnabled]] | ||
|- | |- | ||
| | | 52 || [4.0.0+] [[#SetLcdBacklighOffEnabled]] | ||
|- | |- | ||
| | | 53 || [7.0.0+] [[#BeginVrModeEx]] | ||
|- | |- | ||
| | | 54 || [7.0.0+] [[#EndVrModeEx]] | ||
|- | |- | ||
| | | 55 || [3.0.0+] [[#IsInControllerFirmwareUpdateSection]] | ||
|- | |- | ||
| | | 59 || [11.0.0+] [[#SetVrPositionForDebug]] | ||
|- | |- | ||
| | | 60 || [3.0.0+] [[#GetDefaultDisplayResolution]] | ||
|- | |- | ||
| | | 61 || [3.0.0+] [[#GetDefaultDisplayResolutionChangeEvent]] | ||
|- | |- | ||
| | | 62 || [4.0.0+] [[#GetHdcpAuthenticationState]] | ||
|- | |- | ||
| | | 63 || [4.0.0+] [[#GetHdcpAuthenticationStateChangeEvent]] | ||
|- | |- | ||
| | | 64 || [5.0.0+] [[#SetTvPowerStateMatchingMode]] | ||
|- | |- | ||
| | | 65 || [5.1.0+] [[#GetApplicationIdByContentActionName]] | ||
|- | |- | ||
| | | 66 || [6.0.0+] [[#SetCpuBoostMode]] | ||
|- | |- | ||
| | | 67 || [10.0.0+] [[#CancelCpuBoostMode]] | ||
|- | |- | ||
| | | 68 || [11.0.0+] [[#GetBuiltInDisplayType]] | ||
|- | |- | ||
| 80 || [6.0.0+] [[#PerformSystemButtonPressingIfInFocus]] | | 80 || [6.0.0+] [[#PerformSystemButtonPressingIfInFocus]] | ||
|- | |- | ||
| 90 || [7.0.0+] [[#SetPerformanceConfigurationChangedNotification]] | | 90 || [7.0.0+] [[#SetPerformanceConfigurationChangedNotification]] | ||
|- | |- | ||
| 91 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]] | | 91 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]] | ||
|- | |- | ||
| 100 || [9.1.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] | | 100 || [9.1.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] | ||
|- | |- | ||
| | | 110 || [11.0.0+] [[#OpenMyGpuErrorHandler]] | ||
|- | |- | ||
| | | 120 || [13.0.0+] GetAppletLaunchedHistory | ||
|- | |- | ||
| | | 200 || [7.0.0+] [[#GetOperationModeSystemInfo]] | ||
|- | |- | ||
| 401 || [10.0.0+] DeactivateMigrationService || | | 300 || [9.0.0+] [[#GetSettingsPlatformRegion]] | ||
|} | |- | ||
| 400 || [10.0.0+] [[#ActivateMigrationService]] | |||
Officially notification messages are handled by the application itself, not sdk-nso in ExeFS. Official apps call code in sdk-nso which basically uses svcWaitSynchronization with the event from [[#GetEventHandle]] to check whether a message is available, then if so it uses [[#ReceiveMessage]]. The actual handling for message IDs is done in the app itself(see [[#AppletMessage]]). | |- | ||
| 401 || [10.0.0+] [[#DeactivateMigrationService]] | |||
|- | |||
| 500 || [11.0.0+] [[#DisableSleepTillShutdown]] | |||
|- | |||
| 501 || [11.0.0+] [[#SuppressDisablingSleepTemporarily]] | |||
|- | |||
| 502 || [12.0.0+] IsSleepEnabled | |||
|- | |||
| 503 || [12.0.0+] IsDisablingSleepSuppressed | |||
|- | |||
| 600 || [17.0.0+] OpenNamedChannelAsChild | |||
|- | |||
| 900 || [11.0.0+] [[#SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled]] | |||
|- | |||
| 910 || [17.0.0+] GetLaunchRequiredTick | |||
|} | |||
Officially notification messages are handled by the application itself, not sdk-nso in ExeFS. Official apps call code in sdk-nso which basically uses svcWaitSynchronization with the event from [[#GetEventHandle]] to check whether a message is available, then if so it uses [[#ReceiveMessage]]. The actual handling for message IDs is done in the app itself(see [[#AppletMessage]]). | |||
[7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl. | [7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl. | ||
Line 1,527: | Line 1,794: | ||
=== GetPerformanceMode === | === GetPerformanceMode === | ||
No input. Returns an output u32 for the current PerformanceMode. | No input. Returns an output u32 for the current [[#PerformanceMode]]. | ||
=== GetCradleStatus === | === GetCradleStatus === | ||
Line 1,540: | Line 1,807: | ||
=== GetCurrentFocusState === | === GetCurrentFocusState === | ||
No input. Returns an output u8 | No input. Returns an output u8 [[#FocusState]]. | ||
=== RequestToAcquireSleepLock === | === RequestToAcquireSleepLock === | ||
Line 1,556: | Line 1,820: | ||
=== GetAcquiredSleepLockEvent === | === GetAcquiredSleepLockEvent === | ||
No input, returns an output Event handle with autoclear=false. | No input, returns an output Event handle with autoclear=false. | ||
=== GetWakeupCount === | |||
No input, returns an output u64. | |||
=== PushToGeneralChannel === | === PushToGeneralChannel === | ||
Line 1,613: | Line 1,880: | ||
=== IsInControllerFirmwareUpdateSection === | === IsInControllerFirmwareUpdateSection === | ||
No input, returns an output u8 bool. | No input, returns an output u8 bool. | ||
=== SetVrPositionForDebug === | |||
Takes 4 input s32s, no output. | |||
The s32s are: x, y, width, height. | |||
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | |||
width must be 1-1280, height must be 1-720. | |||
x and y must not be negative. x+width must be <=1280. y+height must be <=720. | |||
=== GetDefaultDisplayResolution === | === GetDefaultDisplayResolution === | ||
Line 1,635: | Line 1,913: | ||
=== SetCpuBoostMode === | === SetCpuBoostMode === | ||
Takes an input u32 | Takes an input u32 [[#CpuBoostMode]] and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. | ||
=== CancelCpuBoostMode === | |||
No input/output. | |||
=== GetBuiltInDisplayType === | |||
No input, returns an output s32. | |||
This is not exposed by sdknso. | |||
This loads a s32 index from global state (originates from [[SPL_services#GetConfig|GetConfig]] [[SMC#HardwareType|HardwareType]]), Aborts if it's out-of-bounds, then the following is returned for the output s32: global_array[loaded_index]. | |||
=== PerformSystemButtonPressingIfInFocus === | === PerformSystemButtonPressingIfInFocus === | ||
Line 1,647: | Line 1,935: | ||
=== GetCurrentPerformanceConfiguration === | === GetCurrentPerformanceConfiguration === | ||
No input, returns the result of calling [[PPC_services#apm:sys|GetCurrentPerformanceConfiguration]]. | No input, returns the result of calling [[PPC_services#apm:sys|GetCurrentPerformanceConfiguration]]. | ||
=== OpenMyGpuErrorHandler === | |||
No input, returns an [[#IGpuErrorHandler]]. | |||
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | |||
=== GetOperationModeSystemInfo === | === GetOperationModeSystemInfo === | ||
Line 1,658: | Line 1,951: | ||
This just returns the output from [[Settings_services#GetPlatformRegion|setsys GetPlatformRegion]]. | This just returns the output from [[Settings_services#GetPlatformRegion|setsys GetPlatformRegion]]. | ||
== ISelfController == | === ActivateMigrationService === | ||
{| class="wikitable" border="1" | No input/output. | ||
Besides various other functionality, if required this eventually uses [[NS_Services|ns]] LaunchLibraryApplet to launch [[Migration_services|migration]]. | |||
=== DeactivateMigrationService === | |||
No input/output. | |||
=== DisableSleepTillShutdown === | |||
No input/output. | |||
=== SuppressDisablingSleepTemporarily === | |||
Takes an input u64 "nn::TimeSpanType", no output. | |||
=== SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled === | |||
No input/output. | |||
=== IGpuErrorHandler === | |||
This is "nn::am::service::IGpuErrorHandler". | |||
This was added with [11.0.0+]. | |||
This uses various [[NV_services#nvgem:cd|nvgem:cd]] commands. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 100 || [[#GetManualGpuErrorInfoSize]] | |||
|- | |||
| 101 || [[#GetManualGpuErrorInfo]] | |||
|- | |||
| 102 || [[#GetManualGpuErrorDetectionSystemEvent]] | |||
|- | |||
| 103 || [[#FinishManualGpuErrorHandling]] | |||
|} | |||
==== GetManualGpuErrorInfoSize ==== | |||
No input, returns an output u64. | |||
==== GetManualGpuErrorInfo ==== | |||
Takes a type-0x6 output buffer, returns an output u64. | |||
The OutBuffer_size must be >= the output size from [[#GetManualGpuErrorInfoSize]]. | |||
sdknso exposes the buffer as <code>void*</code>. | |||
==== GetManualGpuErrorDetectionSystemEvent ==== | |||
No input, returns an output Event handle with EventClearMode=0. | |||
==== FinishManualGpuErrorHandling ==== | |||
No input/output. | |||
== ISelfController == | |||
This is "nn::am::service::ISelfController". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
Line 1,696: | Line 2,044: | ||
|- | |- | ||
| 20 || [4.0.0+] [[#SetDesirableKeyboardLayout]] | | 20 || [4.0.0+] [[#SetDesirableKeyboardLayout]] | ||
|- | |||
| 21 || [13.0.0+] GetScreenShotProgramId | |||
|- | |- | ||
| 40 || [[#CreateManagedDisplayLayer]] | | 40 || [[#CreateManagedDisplayLayer]] | ||
Line 1,705: | Line 2,055: | ||
| 43 || [5.0.0+] [[#GetSystemSharedBufferHandle]] | | 43 || [5.0.0+] [[#GetSystemSharedBufferHandle]] | ||
|- | |- | ||
| 44 || [10.0.0+] CreateManagedDisplaySeparableLayer | | 44 || [10.0.0+] [[#CreateManagedDisplaySeparableLayer]] | ||
|- | |- | ||
| 45 || [10.0.0+] SetManagedDisplayLayerSeparationMode | | 45 || [10.0.0+] [[#SetManagedDisplayLayerSeparationMode]] | ||
|- | |||
| 46 || [13.0.0+] [[#SetRecordingLayerCompositionEnabled]] | |||
|- | |- | ||
| 50 || [[#SetHandlesRequestToDisplay]] | | 50 || [[#SetHandlesRequestToDisplay]] | ||
Line 1,748: | Line 2,100: | ||
|- | |- | ||
| 110 || [8.0.0+] [[#SetApplicationAlbumUserData]] | | 110 || [8.0.0+] [[#SetApplicationAlbumUserData]] | ||
|- | |||
| 120 || [11.0.0+] [[#SaveCurrentScreenshot]] | |||
|- | |||
| 130 || [13.0.0+] [[#SetRecordVolumeMuted]] | |||
|- | |- | ||
| 1000 || [7.0.0+] [[#GetDebugStorageChannel]] | | 1000 || [7.0.0+] [[#GetDebugStorageChannel]] | ||
Line 1,858: | Line 2,214: | ||
Same as [[#GetSystemSharedLayerHandle]] except this just gets the SharedBufferHandle. | Same as [[#GetSystemSharedLayerHandle]] except this just gets the SharedBufferHandle. | ||
=== CreateManagedDisplaySeparableLayer === | |||
No input, returns two output u64 LayerIds. | |||
sdknso now uses this instead of [[#CreateManagedDisplayLayer]]. sdknso caches the output from the cmd so that it's only used once. The first u64 is used the same as the original LayerId from [[#CreateManagedDisplayLayer]]. <code>nn::vi::CreateRecordingLayer</code> uses the second LayerId, the layer creation is identical besides which LayerId is used. | |||
=== SetManagedDisplayLayerSeparationMode === | |||
Takes an input u32, no output. | |||
sdknso exposes this as <code>nn::vi::SetRecordingLayerEnabled(bool)</code>. | |||
The input u32 must be 0-1. | |||
=== SetRecordingLayerCompositionEnabled === | |||
Takes an input bool, no output. | |||
=== SetHandlesRequestToDisplay === | === SetHandlesRequestToDisplay === | ||
Line 1,929: | Line 2,300: | ||
=== SetWirelessPriorityMode === | === SetWirelessPriorityMode === | ||
Takes an input s32 | Takes an input s32 [[#WirelessPriorityMode]], no output. | ||
=== GetAccumulatedSuspendedTickValue === | === GetAccumulatedSuspendedTickValue === | ||
Line 1,954: | Line 2,323: | ||
The size must be <=0x400. The input buffer is copied to a buffer loaded from a state ptr (throwing an error when the state ptr is not set), with the u32 size being written to statebuf+0x400 afterwards. | The size must be <=0x400. The input buffer is copied to a buffer loaded from a state ptr (throwing an error when the state ptr is not set), with the u32 size being written to statebuf+0x400 afterwards. | ||
=== SaveCurrentScreenshot === | |||
Takes an input s32 [[Capture_services#AlbumReportOption|AlbumReportOption]], no output. | |||
sdknso exposes this under "nn::album::". | |||
=== SetRecordVolumeMuted === | |||
Takes an input bool, no output. | |||
=== GetDebugStorageChannel === | === GetDebugStorageChannel === | ||
Line 1,961: | Line 2,338: | ||
== IStorageChannel == | == IStorageChannel == | ||
This is "nn::am::service::IStorageChannel". | |||
This was added with [7.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,979: | Line 2,358: | ||
== IWindowController == | == IWindowController == | ||
This is "nn::am::service::IWindowController". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,035: | Line 2,416: | ||
== IAudioController == | == IAudioController == | ||
This is "nn::am::service::IAudioController". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,070: | Line 2,453: | ||
== IDisplayController == | == IDisplayController == | ||
This is "nn::am::service::IDisplayController". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,227: | Line 2,612: | ||
=== ClearCaptureBuffer === | === ClearCaptureBuffer === | ||
Takes an input u8 bool, | Takes an input u8 bool, a s32 CaptureSharedBuffer, and an u32 color, returns no output. | ||
Clear the input CaptureSharedBuffer with the specified RGBA8 color. | |||
=== ClearAppletTransitionBuffer === | === ClearAppletTransitionBuffer === | ||
Takes an input u32, no output. | Takes an input u32, no output. | ||
Clear the AppletTransitionBuffer with the specified RGBA8 color. | |||
=== AcquireLastApplicationCaptureSharedBuffer === | === AcquireLastApplicationCaptureSharedBuffer === | ||
Line 2,268: | Line 2,657: | ||
== ISystemAppletControllerForDebug == | == ISystemAppletControllerForDebug == | ||
This is "nn::am::service::ISystemAppletControllerForDebug". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 1 || RequestLaunchApplicationForDebug | |||
|- | |- | ||
| | | 2 || [7.0.0+] [[#GetDebugStorageChannel]] | ||
|- | |- | ||
| | | 3 || [7.0.0+] [[#CreateStorageForDebug]] | ||
|- | |- | ||
| | | 4 || [12.0.0+] [[#CreateCradleFirmwareUpdaterForDebug]] | ||
|} | |} | ||
=== GetDebugStorageChannel === | |||
No input. Returns an output [[#IStorageChannel]]. | |||
=== CreateStorageForDebug === | |||
Takes a total of 8-bytes of input. Returns an [[#IStorage]]. | |||
=== CreateCradleFirmwareUpdaterForDebug === | |||
No input. Returns an [[#ICradleFirmwareUpdater]]. | |||
== IProcessWindingController == | == IProcessWindingController == | ||
This is "nn::am::service::IProcessWindingController". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,330: | Line 2,734: | ||
== IDebugFunctions == | == IDebugFunctions == | ||
This is "nn::am::service::IDebugFunctions". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#NotifyMessageToHomeMenuForDebug]] | |||
|- | |||
| 1 || [1.0.0-9.2.0] [[#OpenMainApplication]] | |||
|- | |||
| 10 || [[#PerformSystemButtonPressing]] | |||
|- | |||
| 20 || [[#InvalidateTransitionLayer]] | |||
|- | |- | ||
| | | 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]] | ||
|- | |- | ||
| | | 31 || [12.0.0+] RequestLaunchApplicationByApplicationLaunchInfoForDebug | ||
|- | |- | ||
| | | 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]] | ||
|- | |- | ||
| | | 50 || [15.0.0+] AddSystemProgramIdAndAppletIdForDebug | ||
|- | |- | ||
| | | 51 || [16.0.0+] AddOperationConfirmedLibraryAppletIdForDebug | ||
|- | |- | ||
| | | 52 || [17.0.0+] GetProgramIdFromAppletIdForDebug | ||
|- | |- | ||
| | | 53 || [18.0.0+] | ||
|- | |- | ||
| | | 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] | ||
|- | |- | ||
| | | 101 || [10.0.0+] [[#CancelCpuBoostModeForApplet]] | ||
|- | |- | ||
| | | 110 || [9.0.0+] [[#PushToAppletBoundChannelForDebug]] | ||
|- | |- | ||
| | | 111 || [9.0.0+] [[#TryPopFromAppletBoundChannelForDebug]] | ||
|- | |- | ||
| | | 120 || [9.0.0+] [[#AlarmSettingNotificationEnableAppEventReserve]] | ||
|- | |- | ||
| | | 121 || [9.0.0+] [[#AlarmSettingNotificationDisableAppEventReserve]] | ||
|- | |- | ||
| | | 122 || [9.0.0+] [[#AlarmSettingNotificationPushAppEventNotify]] | ||
|- | |- | ||
| | | 130 || [9.0.0+] [[#FriendInvitationSetApplicationParameter]] | ||
|- | |- | ||
| 132 || [9.0.0+] [[#FriendInvitationPushApplicationParameter]] || | | 131 || [9.0.0+] [[#FriendInvitationClearApplicationParameter]] | ||
|} | |- | ||
| 132 || [9.0.0+] [[#FriendInvitationPushApplicationParameter]] | |||
=== NotifyMessageToHomeMenuForDebug === | |- | ||
Takes an input [[#AppletMessage]], no output. | | 140 || [14.0.0+] RestrictPowerOperationForSecureLaunchModeForDebug | ||
|- | |||
| 200 || [15.0.0+] CreateFloatingLibraryAppletAccepterForDebug | |||
|- | |||
| 300 || [16.0.0+] TerminateAllRunningApplicationsForDebug | |||
|- | |||
| 410 || [18.0.0+] | |||
|- | |||
| 411 || [18.0.0+] | |||
|- | |||
| 412 || [18.0.0+] | |||
|- | |||
| 900 || [12.0.0+] GetGrcProcessLaunchedSystemEvent | |||
|} | |||
=== NotifyMessageToHomeMenuForDebug === | |||
Takes an input [[#AppletMessage]], no output. | |||
Stubbed, just returns an error. | Stubbed, just returns an error. | ||
Line 2,392: | Line 2,822: | ||
=== SetCpuBoostModeForApplet === | === SetCpuBoostModeForApplet === | ||
Takes an input u32 | Takes an input u32 [[#CpuBoostMode]] and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. | ||
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | ||
=== CancelCpuBoostModeForApplet === | |||
No input/output. | |||
=== PushToAppletBoundChannelForDebug === | === PushToAppletBoundChannelForDebug === | ||
Line 2,441: | Line 2,874: | ||
== IStorage == | == IStorage == | ||
This is "nn::am::service::IStorage". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,455: | Line 2,890: | ||
== IStorageAccessor == | == IStorageAccessor == | ||
This is "nn::am::service::IStorageAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,467: | Line 2,904: | ||
== ITransferStorageAccessor == | == ITransferStorageAccessor == | ||
This is "nn::am::service::ITransferStorageAccessor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 2,499: | Line 2,938: | ||
= idle:sys = | = idle:sys = | ||
This is "nn::idle::detail::IPolicyManagerSystem" | This is "nn::idle::detail::IPolicyManagerSystem" | ||
This was moved to [[OMM_services|omm]] with [14.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,506: | Line 2,947: | ||
| 0 || GetAutoPowerDownEvent | | 0 || GetAutoPowerDownEvent | ||
|- | |- | ||
| 1 || [7.0.0+] IsAutoPowerDownRequested ([1.0.0-3.0.2] ) | |||
|- | |- | ||
| 2 || [1.0.0-3.0.2] | | 2 || [1.0.0-3.0.2] | ||
Line 2,521: | Line 2,960: | ||
== SetHandlingContext == | == SetHandlingContext == | ||
[3.0.0+] Now takes an additional 0x10-bytes of input. | [3.0.0+] Now takes an additional 0x10-bytes of input. | ||
[13.0.0+] Total input size is now 0x30 instead of 0x38. | |||
= omm = | = omm = | ||
Line 2,527: | Line 2,968: | ||
Operation Mode Manager (OMM) is a service responsible for arbitrating the operation changes between docked and handheld modes. | Operation Mode Manager (OMM) is a service responsible for arbitrating the operation changes between docked and handheld modes. | ||
Besides [[PTM_services|PTM]], this is the only service that interacts with the [[Dock]] through [[USB_services|usb:pd*]]. | Besides [[PTM_services|PTM]], this is the only service that interacts with the [[Dock]] through [[USB_services|usb:pd*]]. | ||
This was moved to [[OMM_services|omm]] with [14.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,587: | Line 3,030: | ||
|- | |- | ||
| 27 || [9.0.0+] GetAppletFullAwakingSystemEvent | | 27 || [9.0.0+] GetAppletFullAwakingSystemEvent | ||
|- | |||
| 28 || [12.0.0+] [[#CreateCradleFirmwareUpdater]] | |||
|} | |} | ||
Line 2,594: | Line 3,039: | ||
This is used by [[#GetOperationModeSystemInfo|ICommonStateGetter GetOperationModeSystemInfo]]. | This is used by [[#GetOperationModeSystemInfo|ICommonStateGetter GetOperationModeSystemInfo]]. | ||
= | == CreateCradleFirmwareUpdater == | ||
This is "nn:: | No input. Returns an [[#ICradleFirmwareUpdater]]. | ||
== ICradleFirmwareUpdater == | |||
This is "nn::am::service::ICradleFirmwareUpdater". | |||
This was added with [12.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,601: | Line 3,051: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || Start | ||
|- | |- | ||
| | | 1 || Finish | ||
|- | |- | ||
| | | 2 || GetUpdateDeviceStatus | ||
|- | |- | ||
| | | 3 || GetUpdateProgress | ||
|- | |- | ||
| 5 || ReceiveNotificationMessage | | 4 || GetUpdateDeviceStatusChangeEvent | ||
|- | |||
| 5 || GetUpdateProgress2 | |||
|} | |||
= spsm = | |||
This is "nn::spsm::detail::IPowerStateInterface". | |||
This was moved to [[OMM_services|omm]] with [14.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || GetCurrentState | |||
|- | |||
| 1 || EnterSleep | |||
|- | |||
| 2 || GetLastWakeReason | |||
|- | |||
| 3 || Shutdown | |||
|- | |||
| 4 || GetNotificationMessageEventHandle | |||
|- | |||
| 5 || ReceiveNotificationMessage | |||
|- | |- | ||
| 6 || AnalyzeLogForLastSleepWakeSequence | | 6 || AnalyzeLogForLastSleepWakeSequence | ||
Line 2,630: | Line 3,102: | ||
= tcap = | = tcap = | ||
This is "nn::tcap::server::IManager". | This is "nn::tcap::server::IManager". | ||
This was removed with [11.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,645: | Line 3,119: | ||
This is "nn::capsrv::sf::IScreenShotApplicationService". | This is "nn::capsrv::sf::IScreenShotApplicationService". | ||
This was added with | This was added with [6.0.0+]. | ||
This can be used by applications to save screenshots. | This can be used by applications to save screenshots. | ||
Line 2,682: | Line 3,156: | ||
Takes an input 0x40-byte struct '''ScreenShotAttributeEx0''', an input u32, an input u64 AppletResourceUserId, a type-0x15 input buffer containing an [[Capture_services|UserIdList]], and a type-0x45 input buffer containing image data. Returns an [[Capture_services|ApplicationAlbumEntry]]. | Takes an input 0x40-byte struct '''ScreenShotAttributeEx0''', an input u32, an input u64 AppletResourceUserId, a type-0x15 input buffer containing an [[Capture_services|UserIdList]], and a type-0x45 input buffer containing image data. Returns an [[Capture_services|ApplicationAlbumEntry]]. | ||
= | = apm = | ||
This | This is "nn::am::service::IApmManager". | ||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#OpenSession]] | |||
|- | |||
| 1 || GetPerformanceMode | |||
|- | |||
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]] | |||
|} | |||
== | == OpenSession == | ||
Returns an [[#ISession]]. | |||
== IsCpuOverclockEnabled == | |||
No input, returns an output u8 bool. | |||
Official sw handles the first 8-bytes separately, which is a header. With CommonArguments version 0x0, the header is 4-bytes, while starting with version 0x1 it's 8-bytes. | == ISession == | ||
This is "nn::am::service::IApmSession". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || SetPerformanceConfiguration | |||
|- | |||
| 1 || GetPerformanceConfiguration | |||
|- | |||
| 2 || [8.0.0+] SetCpuOverclockEnabled | |||
|} | |||
= Library Applets = | |||
This section documents library applet launching. | |||
Before starting the applet, [[#IStorage]]s are [[#ILibraryAppletCreator|created]] and written, then passed to [[#ILibraryAppletAccessor]] PushInData. The [[#IStorage]] session is closed afterwards. The first [[#IStorage]] is [[#CommonArguments]], followed by any applet-specific [[#IStorage]]s. | |||
Once the applet finishes running successfully, [[#ILibraryAppletAccessor]] PopOutData can be used to get the applet-specific [[#IStorage]] containing the applet output data. | |||
== CommonArguments == | |||
The first [[#CreateStorage|IStorage]] passed to applets should contain the common library applet arguments. This is populated by <code>nn::la::CommonArgumentsWriter</code> and has the following format. | |||
This struct is 0x20-bytes. | |||
Official sw handles the first 8-bytes separately, which is a header. With CommonArguments version 0x0, the header is 4-bytes, while starting with version 0x1 it's 8-bytes. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,714: | Line 3,224: | ||
|} | |} | ||
= | = AppletId = | ||
This is "nn::applet::AppletId". See also [[:Category:Library Applets]]. | |||
See also [[:Category:Library Applets]]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value | ||
! | ! ProgramId | ||
! | ! Description | ||
|- | |||
| 0x00 | |||
| | |||
| None | |||
|- | |- | ||
| 0x01 | | 0x01 | ||
| | | | ||
| Application | | Application (not valid for use with LibraryApplets) | ||
|- | |- | ||
| 0x02 | | 0x02 | ||
| 010000000000100C | | 010000000000100C | ||
| | | OverlayApplet (overlayDisp) | ||
|- | |- | ||
| 0x03 | | 0x03 | ||
| 0100000000001000 | | 0100000000001000 | ||
| | | SystemAppletMenu (qlaunch) | ||
|- | |- | ||
| 0x04 | | 0x04 | ||
| 0100000000001012 | | 0100000000001012 | ||
| | | SystemApplication (starter) | ||
|- | |- | ||
| 0x0A | | 0x0A | ||
| 0100000000001001 | | 0100000000001001 | ||
| [[Auth_Applet| | | [[Auth_Applet|LibraryAppletAuth (auth)]] | ||
|- | |- | ||
| 0x0B | | 0x0B | ||
| 0100000000001002 | | 0100000000001002 | ||
| | | [[Cabinet_Applet|LibraryAppletCabinet (cabinet)]] | ||
|- | |- | ||
| 0x0C | | 0x0C | ||
| 0100000000001003 | | 0100000000001003 | ||
| [[Controller_Applet| | | [[Controller_Applet|LibraryAppletController (controller)]] | ||
|- | |- | ||
| 0x0D | | 0x0D | ||
| 0100000000001004 | | 0100000000001004 | ||
| | | LibraryAppletDataErase (dataErase) | ||
|- | |- | ||
| 0x0E | | 0x0E | ||
| 0100000000001005 | | 0100000000001005 | ||
| [[Error_Applet| | | [[Error_Applet|LibraryAppletError (error)]] | ||
|- | |- | ||
| 0x0F | | 0x0F | ||
| 0100000000001006 | | 0100000000001006 | ||
| | | LibraryAppletNetConnect (netConnect) | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0100000000001007 | | 0100000000001007 | ||
| [[Profile_Selector| | | [[Profile_Selector|LibraryAppletPlayerSelect (playerSelect)]] | ||
|- | |- | ||
| 0x11 | | 0x11 | ||
| 0100000000001008 | | 0100000000001008 | ||
| [[Software_Keyboard| | | [[Software_Keyboard|LibraryAppletSwkbd (swkbd)]] | ||
|- | |- | ||
| 0x12 | | 0x12 | ||
| 0100000000001009 | | 0100000000001009 | ||
| | | [[MiiEdit_Applet|LibraryAppletMiiEdit (miiEdit)]] | ||
|- | |- | ||
| 0x13 | | 0x13 | ||
| 010000000000100A | | 010000000000100A | ||
| | | [[Internet_Browser#010000000000100A|LibraryAppletWeb (web)]] | ||
|- | |- | ||
| 0x14 | | 0x14 | ||
| 010000000000100B | | 010000000000100B | ||
| | | [[Internet_Browser#ShopN|LibraryAppletShop (shop)]] | ||
|- | |- | ||
| 0x15 | | 0x15 | ||
| 010000000000100D | | 010000000000100D | ||
| [[Album_Applet| | | [[Album_Applet|LibraryAppletPhotoViewer (photoViewer)]] | ||
|- | |- | ||
| 0x16 | | 0x16 | ||
| 010000000000100E | | 010000000000100E | ||
| | | LibraryAppletSet (set) | ||
|- | |- | ||
| 0x17 | | 0x17 | ||
| 010000000000100F | | 010000000000100F | ||
| | | [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0100000000001010 | | 0100000000001010 | ||
| | | [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] | ||
|- | |- | ||
| 0x19 | | 0x19 | ||
| 0100000000001011 | | 0100000000001011 | ||
| | | [[Internet_Browser#WifiWebAuthApplet|LibraryAppletWifiWebAuth (wifiWebAuth)]] | ||
|- | |- | ||
| 0x1A | | 0x1A | ||
| 0100000000001013 | | 0100000000001013 | ||
| [[MyPage_Applet| | | [[MyPage_Applet|LibraryAppletMyPage (myPage)]] | ||
|- | |- | ||
| 0x1B | |||
| 010000000000101A | |||
| LibraryAppletGift (gift) | |||
|- | |- | ||
| | | 0x1C | ||
| | | 010000000000101C | ||
| LibraryAppletUserMigration (userMigration) | |||
|- | |- | ||
| | | 0x1D | ||
| | | 010000000000101D | ||
| [9.0.0+] LibraryAppletPreomiaSys (EncounterSys) | |||
|- | |- | ||
| | | 0x1E | ||
| | | 0100000000001020 | ||
| [9.0.0+] LibraryAppletStory (story) | |||
|- | |- | ||
| | | 0x1F | ||
| | | 010070000E3C0000 | ||
| [9.0.0+] LibraryAppletPreomiaUsr (EncounterUsr) | |||
|- | |- | ||
| | | 0x20 | ||
| | | 010086000E49C000 | ||
| [9.0.0+] LibraryAppletPreomiaUsrDummy (EncounterUsrDummy) | |||
|- | |- | ||
| | | 0x21 | ||
| 0100000000001038 | |||
| [10.0.0+] LibraryAppletSample (sample) | |||
|- | |- | ||
| 0x22 | |||
| 0100000000001007 | |||
| [13.0.0+] LibraryAppletPromoteQualification (playerSelect) | |||
|- | |- | ||
| | | 0x32 | ||
| 010000000000100F | |||
| [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] | |||
|- | |- | ||
| | | 0x33 | ||
| 010000000000100F | |||
| [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] | |||
|- | |- | ||
| | | 0x35 | ||
| [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) | |||
| [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) | |||
|- | |- | ||
| | | 0x36 | ||
| [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) | |||
| [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) | |||
|- | |- | ||
| | | 0x37 | ||
| [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) | |||
| [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) | |||
|- | |- | ||
| | | 0x38 | ||
| 0100000000001043 | |||
| [16.0.0-16.1.0] | |||
|- | |- | ||
| | | 0x50 | ||
| 0100000000001007 | |||
| [18.0.0+] | |||
|- | |- | ||
| | | 0x51 | ||
| 0100000000001007 | |||
| [18.0.0+] | |||
|- | |- | ||
| 0x3E8 | |||
| | |||
| [10.0.0-16.1.0] DevlopmentTool | |||
|- | |- | ||
| | | 0x3F1 | ||
| 010000000000D619 | |||
| [10.0.0-16.1.0] CombinationLA | |||
|- | |- | ||
| | | 0x3F2 | ||
| | | 010000000000D610 | ||
| [10.0.0-16.1.0] AeSystemApplet | |||
|- | |- | ||
| 0x3F3 | |||
| 010000000000D611 | |||
| [10.0.0-16.1.0] AeOverlayApplet | |||
|- | |- | ||
| | | 0x3F4 | ||
| 010000000000D612 | |||
| [10.0.0-16.1.0] AeStarter | |||
|- | |- | ||
| | | 0x3F5 | ||
| | | 010000000000D613 | ||
| [10.0.0-16.1.0] AeLibraryAppletAlone | |||
|- | |- | ||
| 0x3F6 | |||
| 010000000000D614 | |||
| [10.0.0-16.1.0] AeLibraryApplet1 | |||
|- | |- | ||
| | | 0x3F7 | ||
| 010000000000D615 | |||
| [10.0.0-16.1.0] AeLibraryApplet2 | |||
|- | |- | ||
| | | 0x3F8 | ||
| 010000000000D616 | |||
| [10.0.0-16.1.0] AeLibraryApplet3 | |||
|- | |- | ||
| | | 0x3F9 | ||
| 010000000000D617 | |||
| [10.0.0-16.1.0] AeLibraryApplet4 | |||
|- | |- | ||
| | | 0x3FA | ||
| 010000000000D60A | |||
| [10.0.0-16.1.0] AppletISA | |||
|- | |- | ||
| | | 0x3FB | ||
| 010000000000D60B | |||
| [10.0.0-16.1.0] AppletIOA | |||
|- | |- | ||
| | | 0x3FC | ||
| 010000000000D60C | |||
| [10.0.0-16.1.0] AppletISTA | |||
|- | |- | ||
| | | 0x3FD | ||
| | | 010000000000D60D | ||
| [10.0.0-16.1.0] AppletILA1 | |||
|- | |- | ||
| 0x3FE | |||
| 010000000000D60E | |||
| [10.0.0-16.1.0] AppletILA2 | |||
|- | |- | ||
| | | 0x700000C8 | ||
| 010000000000D65B | |||
| [18.0.0+] | |||
|- | |- | ||
| | | 0x700000C9 | ||
| 010000000000D65C | |||
| [18.0.0+] | |||
|- | |- | ||
| | | 0x700000DC | ||
| | | 010000000000D619 | ||
| [17.0.0+] CombinationLA | |||
|- | |||
| 0x700000E6 | |||
| 010000000000D610 | |||
| [17.0.0+] AeSystemApplet | |||
|- | |||
| 0x700000E7 | |||
| 010000000000D611 | |||
| [17.0.0+] AeOverlayApplet | |||
|- | |||
| 0x700000E8 | |||
| 010000000000D612 | |||
| [17.0.0+] AeStarter | |||
|- | |- | ||
| 0x700000E9 | |||
| 010000000000D613 | |||
| [17.0.0+] AeLibraryAppletAlone | |||
|- | |- | ||
| | | 0x700000EA | ||
| 010000000000D614 | |||
| [17.0.0+] AeLibraryApplet1 | |||
|- | |- | ||
| | | 0x700000EB | ||
| 010000000000D615 | |||
| [17.0.0+] AeLibraryApplet2 | |||
|- | |- | ||
| | | 0x700000EC | ||
| 010000000000D616 | |||
| [17.0.0+] AeLibraryApplet3 | |||
|- | |- | ||
| | | 0x700000ED | ||
| | | 010000000000D617 | ||
| [17.0.0+] AeLibraryApplet4 | |||
|- | |- | ||
| 0x700000F0 | |||
| 010000000000D60A | |||
| [17.0.0+] AppletISA | |||
|- | |- | ||
| | | 0x700000F1 | ||
| 010000000000D60B | |||
| [17.0.0+] AppletIOA | |||
|- | |- | ||
| | | 0x700000F2 | ||
| 010000000000D60C | |||
| [17.0.0+] AppletISTA | |||
|- | |- | ||
| | | 0x700000F3 | ||
| 010000000000D60D | |||
| [17.0.0+] AppletILA1 | |||
|- | |- | ||
| 0x700000F4 | |||
| 010000000000D60E | |||
| [17.0.0+] AppletILA2 | |||
|} | |} | ||
This is "nn:: | = LibraryAppletMode = | ||
This is "nn::applet::LibraryAppletMode". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value | ||
! | ! Description | ||
|- | |||
| 0x0 | |||
| AllForeground | |||
|- | |||
| 0x1 | |||
| PartialForeground | |||
|- | |||
| 0x2 | |||
| NoUi | |||
|- | |- | ||
| | | 0x3 | ||
| PartialForegroundWithIndirectDisplay (see also [[#GetIndirectLayerConsumerHandle]], only used by swkbd [[Software_Keyboard|InlineKeyboard]]) | |||
|- | |- | ||
| | | 0x4 | ||
| AllForegroundInitiallyHidden (can be used by [7.0.0+] [[Internet_Browser|WebSession]]) | |||
|} | |} | ||
This is | = AppletMessage = | ||
This is "nn::am::AppletMessage". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value | ||
! Description | |||
|- | |- | ||
| | | 0 || None | ||
|- | |||
| 1 || ChangeIntoForeground | |||
|- | |- | ||
| | | 2 || ChangeIntoBackground | ||
|- | |- | ||
| 4 || Exit | |||
|- | |- | ||
| | | 6 || ApplicationExited | ||
|- | |- | ||
| | | 7 || | ||
|- | |- | ||
| | | 15 || [[#FocusState|FocusStateChanged]] | ||
|- | |- | ||
| 16 || [[#SetRestartMessageEnabled|Resume]] | |||
|- | |- | ||
| | | 20 || DetectShortPressingHomeButton | ||
|- | |- | ||
| | | 21 || DetectLongPressingHomeButton | ||
|- | |- | ||
| 22 || DetectShortPressingPowerButton | |||
|- | |- | ||
| | | 23 || DetectMiddlePressingPowerButton | ||
|- | |- | ||
| | | 24 || DetectLongPressingPowerButton | ||
|- | |- | ||
| | | 25 || RequestToPrepareSleep | ||
|- | |- | ||
| 26 || FinishedSleepSequence | |||
|- | |- | ||
| | | 27 || SleepRequiredByHighTemperature | ||
|- | |- | ||
| | | 28 || SleepRequiredByLowBattery | ||
|- | |- | ||
| | | 29 || AutoPowerDown | ||
|- | |- | ||
| 30 || [[#OperationMode|OperationModeChanged]] | |||
|- | |- | ||
| | | 31 || [[#PerformanceMode|PerformanceModeChanged]] | ||
|- | |- | ||
| | | 32 || DetectReceivingCecSystemStandby | ||
|- | |- | ||
| | | 33 || SdCardRemoved | ||
|- | |- | ||
| | | 34 || | ||
|- | |- | ||
| 50 || LaunchApplicationRequested | |||
|- | |- | ||
| | | 51 || [[#SetHandlesRequestToDisplay|RequestToDisplay]] | ||
|- | |- | ||
| | | 55 || ShowApplicationLogo | ||
|- | |- | ||
| | | 56 || HideApplicationLogo | ||
|- | |- | ||
| | | 57 || ForceHideApplicationLogo | ||
|- | |- | ||
| | | 58 || | ||
|- | |||
| 59 || | |||
|- | |||
| 60 || FloatingApplicationDetected | |||
|- | |||
| 61 || [7.0.0+] PerformanceConfigurationChanged | |||
|- | |||
| 70 || | |||
|- | |||
| 71 || | |||
|- | |||
| 72 || | |||
|- | |||
| 73 || | |||
|- | |||
| 75 || | |||
|- | |||
| 80 || | |||
|- | |||
| 81 || | |||
|- | |||
| 82 || | |||
|- | |||
| 83 || | |||
|- | |||
| 85 || | |||
|- | |||
| 86 || | |||
|- | |||
| 90 || [[#SetRequiresCaptureButtonShortPressedMessage|DetectShortPressingCaptureButton]] | |||
|- | |||
| 92 || [[#SetAlbumImageTakenNotificationEnabled|AlbumScreenShotTaken]] | |||
|- | |||
| 93 || AlbumRecordingSaved | |||
|- | |||
| 94 || | |||
|- | |||
| 100 || | |||
|- | |||
| 101 || | |||
|- | |||
| 110 || [14.0.0+] DetectShortPressingCaptureButtonForApplet | |||
|- | |||
| 111 || [14.0.0+] DetectLongPressingCaptureButtonForApplet | |||
|- | |- | ||
| | | 1000 || | ||
|} | |} | ||
This | = OperationMode = | ||
This is "nn::oe::OperationMode". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value | ||
! Description | |||
|- | |- | ||
| | | 0 || Handheld | ||
|- | |- | ||
| | | 1 || Console | ||
|} | |} | ||
This | = PerformanceMode = | ||
This is "nn::oe::PerformanceMode". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value | ||
! Description | |||
|- | |- | ||
| | | -1 || Invalid | ||
|- | |- | ||
| | | 0 || Normal | ||
|- | |||
| 1 || Boost | |||
|} | |||
= FocusState = | |||
This is "nn::oe::FocusState". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 1 || InFocus | |||
|- | |||
| 2 || OutOfFocus | |||
|- | |||
| 3 || Background | |||
|} | |||
= CpuBoostMode = | |||
This is "nn::oe::CpuBoostMode". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Normal | |||
|- | |||
| 1 || FastLoad | |||
|} | |||
= WindowOriginMode = | |||
This is "nn::oe::WindowOriginMode". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || LowerLeft | |||
|- | |||
| 1 || UpperLeft | |||
|} | |||
= WirelessPriorityMode = | |||
This is "nn::oe::WirelessPriorityMode". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Default | ||
|- | |- | ||
| | | 1 || OptimizedForWlan | ||
|} | |} | ||
This struct is "nn::am::service::AppletResourceUsageInfo". This struct is 0x20-bytes. | = TvPowerStateMatchingMode = | ||
This is "nn::oe::TvPowerStateMatchingMode". This is used with [[#SetTvPowerStateMatchingMode]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Unknown | |||
|- | |||
| 1 || Unknown | |||
|} | |||
= SystemButtonType = | |||
This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]]/[[#PerformSystemButtonPressing]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 1 || PerformHomeButtonShortPressing | |||
|- | |||
| 2 || PerformHomeButtonLongPressing | |||
|- | |||
| 3 || Short-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. | |||
|- | |||
| 4 || Long-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. | |||
|- | |||
| 5 || Shutdown the system. Only available with [[#PerformSystemButtonPressing]]. | |||
|- | |||
| 6 || PerformCaptureButtonShortPressing | |||
|- | |||
| 7 || PerformCaptureButtonLongPressing | |||
|} | |||
= LaunchParameterKind = | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 1 || UserChannel. Application-specific LaunchParameter. | |||
|- | |||
| 2 || account PreselectedUser | |||
|- | |||
| 3 || Unknown if used by anything? | |||
|} | |||
= LibraryAppletExitReason = | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Normal | |||
|- | |||
| 1 || Canceled | |||
|- | |||
| 2 || Abnormal | |||
|- | |||
| 10 || Unexpected | |||
|} | |||
= ProgramSpecifyKind = | |||
This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || u8 ProgramIndex. "ExecuteProgram". [[NS_Services|NS]] handles ProgramIndex by launching ApplicationId+ProgramIndex. After using [[#ExecuteProgram]] with this successfully, official user-processes will enter an infinite loop with sleep-thread value 86400000000000. | |||
|- | |||
| 1 || [[NCM_services#ApplicationId|ApplicationId]]. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1. | |||
|- | |||
| 2 || u64 = value 0. "RestartProgram" | |||
|} | |||
ProgramIndex values where the title is not installed should not be used: [[qlaunch]] will display an error message and the current title will become "corrupted", however Home Menu will have an option to repair it. | |||
= InputDetectionPolicy = | |||
This is u32 enum "nn::applet::InputDetectionPolicy". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Unknown | |||
|- | |||
| 1 || Unknown | |||
|} | |||
= AppletResourceUserId = | |||
This is "nn::applet::AppletResourceUserId". Used by a number of non-AM services. | |||
= AppletAttribute = | |||
This is "nn::am::AppletAttribute". This struct is 0x80 bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x1 || Flag. When non-zero, two state fields are set to 1. | |||
|- | |||
| 0x1 || 0x7F || Unused | |||
|} | |||
This is used by [[#OpenLibraryAppletProxy]]. | |||
= AppletProcessLaunchReason = | |||
This is "nn::am::service::AppletProcessLaunchReason". This struct is 0x4-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x1 || Flag. When non-zero, LibraryApplets then use [[#OpenCallingLibraryApplet]]. | |||
|- | |||
| 0x1 || 0x2 || Always 0. | |||
|- | |||
| 0x3 || 0x1 || Always 0. | |||
|} | |||
= LibraryAppletInfo = | |||
This is "nn::am::service::LibraryAppletInfo". This struct is 0x8-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || [[#AppletId]] | |||
|- | |||
| 0x4 || 0x4 || [[#LibraryAppletMode]] | |||
|} | |||
= AppletKind = | |||
This is "nn::am::service::AppletKind". This is 8-bytes. | |||
= AppletIdentityInfo = | |||
This struct is "nn::am::service::AppletIdentityInfo". This struct is 0x10-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || [[#AppletId]] | |||
|- | |||
| 0x4 || 0x4 || Padding | |||
|- | |||
| 0x8 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | |||
|} | |||
= ApplicationAttributeForQuest = | |||
This struct is "nn::applet::ApplicationAttributeForQuest". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || See [[#ApplicationAttribute]]. | |||
|- | |||
| 0x4 || 0x4 || See [[#ApplicationAttribute]]. | |||
|- | |||
| 0x8 || 0x4 || [7.0.0+] See [[#ApplicationAttribute]]. | |||
|} | |||
User-processes copy the first 0x8-bytes (0xC-bytes with [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]]/[[#CreateApplicationWithAttributeAndRequestToStartForQuest]]) to a [[#ApplicationAttribute]] with the rest of the struct being cleared, which is then passed to the actual cmd (CreateApplication*ToStartForQuest). | |||
= ApplicationAttribute = | |||
This struct is "nn::am::ApplicationAttribute". This struct is 0x20-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. | |||
|- | |||
| 0x4 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. | |||
|- | |||
| 0x8 || 0x4 || float audio volume. Must be in the range of 0.0f-1.0f. The default is 1.0f. | |||
|- | |||
| 0xC || 0x14 || Unused. Default is 0. | |||
|} | |||
Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd. | |||
= ApplicationLaunchProperty = | |||
This struct is 0x10-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | |||
|- | |||
| 0x8 || 0x4 || Application title-version. | |||
|- | |||
| 0xC || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application base title. | |||
|- | |||
| 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application update title. | |||
|- | |||
| 0xE || 0x1 || Unknown. | |||
|- | |||
| 0xF || 0x1 || Padding. | |||
|} | |||
= ApplicationLaunchRequestInfo = | |||
This is "nn::applet::ApplicationLaunchRequestInfo". This struct is 0x10-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]]. | |||
|- | |||
| 0x4 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]]. | |||
|- | |||
| 0x8 || 0x8 || Unknown. The default is 0x0. | |||
|} | |||
= AppletResourceUsageInfo = | |||
This is "nn::am::service::AppletResourceUsageInfo". This struct is 0x20-bytes. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || Unknown counter. | |||
|- | |||
| 0x4 || 0x4 || Unknown counter. | |||
|- | |||
| 0x8 || 0x4 || Output from [[NS_Services|NS GetRightsEnvironmentCountForDebug]]. | |||
|- | |||
| 0xC || 0x14 || Always zero. | |||
|} | |||
= ApplicationLicenseType = | |||
This is "nn::oe::ApplicationLicenseType". This is 1-byte. | |||
= LaunchRequiredVersion = | |||
This is "nn::oe::LaunchRequiredVersion". This is a 0x40-byte struct with 1-byte alignment. | |||
= ServerEnvironmentType = | |||
This is "nn::oe::ServerEnvironmentType". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || dd | |||
|- | |||
| 1 || lp | |||
|- | |||
| 2 || sd | |||
|- | |||
| 3 || sp | |||
|- | |||
| 4 || dp | |||
|} | |||
= Notes = | = Notes = | ||
AM-sysmodule will only initialize [[Shared_Database_services|pdm:ntfy]] / use pdm:ntfy service commands when the value from [[Process_Manager_services|pm:bm]] GetBootMode is not 0x1. | AM-sysmodule will only initialize [[Shared_Database_services|pdm:ntfy]] / use pdm:ntfy service commands when the value from [[Process_Manager_services|pm:bm]] GetBootMode is not 0x1 (Maintenance). | ||
An object constructor also writes the output from [[Process_Manager_services|pm:bm]] GetBootMode into the created object. A vfunc for this object checks whether this field is Maintenance: if so, it calls a vfunc then a func and returns. Otherwise after calling various (v)funcs, if required this eventually uses [[OMM_services|ommdisp]] cmd600. | |||
[[Category:Services]] | [[Category:Services]] |