Changes

Jump to navigation Jump to search
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 || Notes
+
! Cmd || Name
 +
|-
 +
| 10 || [[#RequestToGetForeground]]
 +
|-
 +
| 11 || [[#LockForeground]]
 +
|-
 +
| 12 || [[#UnlockForeground]]
 +
|-
 +
| 20 || [[#PopFromGeneralChannel]]
 +
|-
 +
| 21 || [[#GetPopFromGeneralChannelEvent]]
 
|-
 
|-
| 10 || [[#RequestToGetForeground]] ||
+
| 30 || [[#GetHomeButtonWriterLockAccessor]]
 
|-
 
|-
| 11 || [[#LockForeground]] ||
+
| 31 || [2.0.0+] [[#GetWriterLockAccessorEx]]
 
|-
 
|-
| 12 || [[#UnlockForeground]] ||
+
| 40 || [11.0.0+] [[#IsSleepEnabled]]
 
|-
 
|-
| 20 || [[#PopFromGeneralChannel]] ||
+
| 41 || [12.0.0+] [[#IsRebootEnabled]]
 
|-
 
|-
| 21 || [[#GetPopFromGeneralChannelEvent]] ||
+
| 50 || [16.0.0+] [[#LaunchSystemApplet]]
 
|-
 
|-
| 30 || [[#GetHomeButtonWriterLockAccessor]] ||
+
| 51 || [16.0.0+] [[#LaunchStarter]]
 
|-
 
|-
| 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] ||
+
| 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]]
 
|-
 
|-
| 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]] ||
+
| 110 || [9.0.0+] [[#IsForceTerminateApplicationDisabledForDebug]]
 
|-
 
|-
| 110 || [9.0.0+] [[#IsForceTerminateApplicationDisabledForDebug]] ||
+
| 200 || [8.0.0+] [[#LaunchDevMenu]]
 
|-
 
|-
| 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#IApplicationManagerInterface]] cmd99.
+
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 || Notes
+
! Cmd || Name
 +
|-
 +
| 0 || [[#RequestToEnterSleep]]
 
|-
 
|-
| 0 || [[#RequestToEnterSleep]] ||
+
| 1 || [[#EnterSleep]]
 
|-
 
|-
| 1 || [[#EnterSleep]] ||
+
| 2 || [[#StartSleepSequence]]
 
|-
 
|-
| 2 || [[#StartSleepSequence]] ||
+
| 3 || [[#StartShutdownSequence]]
 
|-
 
|-
| 3 || [[#StartShutdownSequence]] ||
+
| 4 || [[#StartRebootSequence]]
 
|-
 
|-
| 4 || [[#StartRebootSequence]] ||
+
| 9 || [7.0.0+] [[#IsAutoPowerDownRequested]]
 
|-
 
|-
| 9 || [7.0.0+] [[#IsAutoPowerDownRequested]] ||
+
| 10 || [[#LoadAndApplyIdlePolicySettings]]
 
|-
 
|-
| 10 || [[#LoadAndApplyIdlePolicySettings]] ||
+
| 11 || [2.0.0+] [[#NotifyCecSettingsChanged]]
 
|-
 
|-
| 11 || [2.0.0+] [[#NotifyCecSettingsChanged]] ||
+
| 12 || [3.0.0+] [[#SetDefaultHomeButtonLongPressTime]]
 
|-
 
|-
| 12 || [3.0.0+] [[#SetDefaultHomeButtonLongPressTime]] ||
+
| 13 || [3.0.0+] [[#UpdateDefaultDisplayResolution]]
 
|-
 
|-
| 13 || [3.0.0+] [[#UpdateDefaultDisplayResolution]] ||
+
| 14 || [3.0.0+] [[#ShouldSleepOnBoot]]
 
|-
 
|-
| 14 || [3.0.0+] [[#ShouldSleepOnBoot]] ||
+
| 15 || [4.0.0+] [[#GetHdcpAuthenticationFailedEvent]]
 
|-
 
|-
| 15 || [4.0.0+] [[#GetHdcpAuthenticationFailedEvent]] ||
+
| 30 || [12.0.0+] [[#OpenCradleFirmwareUpdater]]
 
|}
 
|}
   Line 275: Line 319:  
Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent.
 
Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent.
   −
=== IApplicationCreator ===
+
==== 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 || Notes
+
! Cmd || Name
 +
|-
 +
| 0 || StartUpdate
 +
|-
 +
| 1 || FinishUpdate
 
|-
 
|-
| 0 || [[#CreateApplication]] ||
+
| 2 || [[#GetCradleDeviceInfo]]
 
|-
 
|-
| 1 || [[#PopLaunchRequestedApplication]] ||  
+
| 3 || GetCradleDeviceInfoChangeEvent
 
|-
 
|-
| 10 || [[#CreateSystemApplication]] ||  
+
| 4 || GetUpdateProgressInfo
 
|-
 
|-
| 100 || [[#PopFloatingApplicationForDevelopment]] ||  
+
| 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 ==
Added with [[7.0.0]].
+
This is "nn::am::service::IAppletCommonFunctions".
 +
 
 +
This was added with [7.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! 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
 
|-
 
|-
| 0 || [9.0.0+] [[#SetTerminateResult]] ||
+
| 70 || [11.0.0+] [[#SetCpuBoostRequestPriority]]
 
|-
 
|-
| 10 || [[#ReadThemeStorage]] ||
+
| 80 || [14.0.0+] SetHandlingCaptureButtonShortPressedMessageEnabledForApplet
 
|-
 
|-
| 11 || [[#WriteThemeStorage]] ||
+
| 81 || [14.0.0+] SetHandlingCaptureButtonLongPressedMessageEnabledForApplet
 
|-
 
|-
| 20 || [9.0.0+] [[#PushToAppletBoundChannel]] ||
+
| 82 || [18.0.0+]  
 
|-
 
|-
| 21 || [9.0.0+] [[#TryPopFromAppletBoundChannel]] ||
+
| 90 || [15.0.0+] OpenNamedChannelAsParent
 
|-
 
|-
| 40 || [8.0.0+] [[#GetDisplayLogicalResolution]] ||
+
| 91 || [15.0.0+] OpenNamedChannelAsChild
 
|-
 
|-
| 42 || [8.0.0+] [[#SetDisplayMagnification]] ||
+
| 100 || [15.0.0+] SetApplicationCoreUsageMode
 
|-
 
|-
| 50 || [8.0.0+] [[#SetHomeButtonDoubleClickEnabled]] ||
+
| 160 || [18.0.0+]  
 
|-
 
|-
| 51 || [8.0.0+] [[#GetHomeButtonDoubleClickEnabled]] ||
+
| 161 || [18.0.0+]  
 
|-
 
|-
| 52 || [10.0.0+] IsHomeButtonShortPressedBlocked ||
+
| 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]] ||
 
|-
 
|-
| 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 || Notes
+
! 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]]
 
|-
 
|-
| 1 || [[#PopLaunchParameter]] ||
+
| 23 || [[#GetDisplayVersion]]
 
|-
 
|-
| 10 || [[#CreateApplicationAndPushAndRequestToStart]] ||
+
| 24 || [2.0.0+] [[#GetLaunchStorageInfoForDebug]]
 
|-
 
|-
| 11 || [3.0.0+] [[#CreateApplicationAndPushAndRequestToStartForQuest]] ||
+
| 25 || [3.0.0+] ExtendSaveData
 
|-
 
|-
| 12 || [4.0.0+] [[#CreateApplicationAndRequestToStart]] ||
+
| 26 || [3.0.0+] GetSaveDataSize
 
|-
 
|-
| 13 || [4.0.0+] [[#CreateApplicationAndRequestToStartForQuest]] ||
+
| 27 || [5.0.0+] CreateCacheStorage
 
|-
 
|-
| 14 || [7.0.0+] [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]] ||
+
| 28 || [11.0.0+] [[#GetSaveDataSizeMax]]
 
|-
 
|-
| 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] ||
+
| 29 || [11.0.0+] [[#GetCacheStorageMax]]
 
|-
 
|-
| 20 || [[#EnsureSaveData]] ||
+
| 30 || [[#BeginBlockingHomeButtonShortAndLongPressed]]
 
|-
 
|-
| 21 || [[#GetDesiredLanguage]] ||
+
| 31 || [[#EndBlockingHomeButtonShortAndLongPressed]]
 
|-
 
|-
| 22 || [[#SetTerminateResult]] ||
+
| 32 || [[#BeginBlockingHomeButton]]
 
|-
 
|-
| 23 || [[#GetDisplayVersion]] ||
+
| 33 || [[#EndBlockingHomeButton]]
 
|-
 
|-
| 24 || [2.0.0+] [[#GetLaunchStorageInfoForDebug]] ||
+
| 34 || [10.0.0-15.0.1] [[#SelectApplicationLicense]]
 
|-
 
|-
| 25 || [3.0.0+] ExtendSaveData ||
+
| 35 || [11.0.0+] [[#GetDeviceSaveDataSizeMax]]
 
|-
 
|-
| 26 || [3.0.0+] GetSaveDataSize ||
+
| 36 || [14.0.0+] GetLimitedApplicationLicense
 
|-
 
|-
| 27 || [5.0.0+] CreateCacheStorage ||
+
| 37 || [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent
 
|-
 
|-
| 30 || [[#BeginBlockingHomeButtonShortAndLongPressed]] ||
+
| 40 || [[#NotifyRunning]]
 
|-
 
|-
| 31 || [[#EndBlockingHomeButtonShortAndLongPressed]] ||
+
| 50 || [2.0.0+] [[#GetPseudoDeviceId]]
 
|-
 
|-
| 32 || [[#BeginBlockingHomeButton]] ||
+
| 60 || [2.0.0+] [[#SetMediaPlaybackStateForApplication]]
 
|-
 
|-
| 33 || [[#EndBlockingHomeButton]] ||
+
| 65 || [3.0.0+] [[#IsGamePlayRecordingSupported]]
 
|-
 
|-
| 34 || [10.0.0+] SelectApplicationLicense ||
+
| 66 || [3.0.0+] [[#InitializeGamePlayRecording]]
 
|-
 
|-
| 40 || [[#NotifyRunning]] ||
+
| 67 || [3.0.0+] [[#SetGamePlayRecordingState]]
 
|-
 
|-
| 50 || [2.0.0+] [[#GetPseudoDeviceId]] ||
+
| 68 || [4.0.0+] [[#RequestFlushGamePlayingMovieForDebug]]
 
|-
 
|-
| 60 || [2.0.0+] [[#SetMediaPlaybackStateForApplication]] ||
+
| 70 || [3.0.0+] [[#RequestToShutdown]]
 
|-
 
|-
| 65 || [3.0.0+] [[#IsGamePlayRecordingSupported]] ||
+
| 71 || [3.0.0+] [[#RequestToReboot]]
 
|-
 
|-
| 66 || [3.0.0+] [[#InitializeGamePlayRecording]] ||
+
| 72 || [10.0.0+] [[#RequestToSleep]]
 
|-
 
|-
| 67 || [3.0.0+] [[#SetGamePlayRecordingState]] ||
+
| 80 || [4.0.0+] [[#ExitAndRequestToShowThanksMessage]]
 
|-
 
|-
| 68 || [4.0.0+] [[#RequestFlushGamePlayingMovieForDebug]] ||
+
| 90 || [4.0.0+] [[#EnableApplicationCrashReport]]
 
|-
 
|-
| 70 || [3.0.0+] [[#RequestToShutdown]] ||
+
| 100 || [5.0.0+] [[#InitializeApplicationCopyrightFrameBuffer]]  
 
|-
 
|-
| 71 || [3.0.0+] [[#RequestToReboot]] ||
+
| 101 || [5.0.0+] [[#SetApplicationCopyrightImage]]
 
|-
 
|-
| 72 || [10.0.0+] RequestToSleep ||
+
| 102 || [5.0.0+] [[#SetApplicationCopyrightVisibility]]
 
|-
 
|-
| 80 || [4.0.0+] [[#ExitAndRequestToShowThanksMessage]] ||
+
| 110 || [5.0.0+] [[#QueryApplicationPlayStatistics]]
 
|-
 
|-
| 90 || [4.0.0+] [[#EnableApplicationCrashReport]] ||
+
| 111 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUid]]
 
|-
 
|-
| 100 || [5.0.0+] [[#InitializeApplicationCopyrightFrameBuffer]] ||
+
| 120 || [5.0.0+] [[#ExecuteProgram]]
 
|-
 
|-
| 101 || [5.0.0+] [[#SetApplicationCopyrightImage]] ||
+
| 121 || [5.0.0+] [[#ClearUserChannel]]
 
|-
 
|-
| 102 || [5.0.0+] [[#SetApplicationCopyrightVisibility]] ||
+
| 122 || [5.0.0+] [[#UnpopToUserChannel]]
 
|-
 
|-
| 110 || [5.0.0+] [[#QueryApplicationPlayStatistics]] ||
+
| 123 || [5.0.0+] [[#GetPreviousProgramIndex]]
 
|-
 
|-
| 111 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUid]] ||
+
| 124 || [6.0.0+] [[#EnableApplicationAllThreadDumpOnCrash]]
 
|-
 
|-
| 120 || [5.0.0+] [[#ExecuteProgram]] ||
+
| 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]]
 
|-
 
|-
| 121 || [5.0.0+] [[#ClearUserChannel]] ||
+
| 131 || [11.0.0+] [[#SetDelayTimeToAbortOnGpuError]]
 
|-
 
|-
| 122 || [5.0.0+] [[#UnpopToUserChannel]] ||
+
| 140 || [9.0.0+] [[#GetFriendInvitationStorageChannelEvent]]
 
|-
 
|-
| 123 || [5.0.0+] [[#GetPreviousProgramIndex]] ||
+
| 141 || [9.0.0+] [[#TryPopFromFriendInvitationStorageChannel]]  
 
|-
 
|-
| 124 || [6.0.0+] [[#EnableApplicationAllThreadDumpOnCrash]] ||
+
| 150 || [9.0.0+] [[#GetNotificationStorageChannelEvent]]
 
|-
 
|-
| 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] ||
+
| 151 || [9.0.0+] [[#TryPopFromNotificationStorageChannel]]
 
|-
 
|-
| 140 || [9.0.0+] [[#GetFriendInvitationStorageChannelEvent]] ||
+
| 160 || [9.0.0+] [[#GetHealthWarningDisappearedSystemEvent]]
 
|-
 
|-
| 141 || [9.0.0+] [[#TryPopFromFriendInvitationStorageChannel]] ||
+
| 170 || [9.0.0+] [[#SetHdcpAuthenticationActivated]]
 
|-
 
|-
| 150 || [9.0.0+] [[#GetNotificationStorageChannelEvent]] ||
+
| 180 || [10.1.0+] [[#GetLaunchRequiredVersion]]
 
|-
 
|-
| 151 || [9.0.0+] [[#TryPopFromNotificationStorageChannel]] ||
+
| 181 || [10.1.0+] [[#UpgradeLaunchRequiredVersion]]
 
|-
 
|-
| 160 || [9.0.0+] [[#GetHealthWarningDisappearedSystemEvent]] ||
+
| 190 || [11.0.0+] [[#SendServerMaintenanceOverlayNotification]]
 
|-
 
|-
| 170 || [9.0.0+] [[#SetHdcpAuthenticationActivated]] ||
+
| 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 '''WindowOriginMode''', and no output.
+
Takes a type-0x45 input buffer, an s32 '''x''', an s32 '''y''', an s32 '''width''', an s32 '''height''', an s32 [[#WindowOriginMode]], and no output.
 
  −
The last s32 is "nn::oe::WindowOriginMode". This should be at least 1.
      
'''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 assert.
+
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 title 010000000000003B (currently not present on retail systems) if some context variable is not set, with that context variable being initialized afterwards.
+
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 || Notes
+
! Cmd || Name
 +
|-
 +
| 0 || [[#GetEventHandle]]
 +
|-
 +
| 1 || [[#ReceiveMessage]]
 +
|-
 +
| 2 || [[#GetThisAppletKind]]
 
|-
 
|-
| 0 || [[#GetEventHandle]] ||
+
| 3 || [[#AllowToEnterSleep]]
 
|-
 
|-
| 1 || [[#ReceiveMessage]] ||
+
| 4 || [[#DisallowToEnterSleep]]
 
|-
 
|-
| 2 || [[#GetThisAppletKind]] ||
+
| 5 || [[#GetOperationMode]]
 
|-
 
|-
| 3 || [[#AllowToEnterSleep]] ||
+
| 6 || [[#GetPerformanceMode]]
 
|-
 
|-
| 4 || [[#DisallowToEnterSleep]] ||
+
| 7 || [[#GetCradleStatus]]
 
|-
 
|-
| 5 || [[#GetOperationMode]] ||
+
| 8 || [[#GetBootMode]]
 
|-
 
|-
| 6 || [[#GetPerformanceMode]] ||
+
| 9 || [[#GetCurrentFocusState]]
 
|-
 
|-
| 7 || [[#GetCradleStatus]] ||
+
| 10 || [[#RequestToAcquireSleepLock]]
 
|-
 
|-
| 8 || [[#GetBootMode]] ||
+
| 11 || [[#ReleaseSleepLock]]
 
|-
 
|-
| 9 || [[#GetCurrentFocusState]] ||
+
| 12 || [[#ReleaseSleepLockTransiently]]
 
|-
 
|-
| 10 || [[#RequestToAcquireSleepLock]] ||
+
| 13 || [[#GetAcquiredSleepLockEvent]]
 
|-
 
|-
| 11 || [[#ReleaseSleepLock]] ||
+
| 14 || [11.0.0+] [[#GetWakeupCount]]
 
|-
 
|-
| 12 || [[#ReleaseSleepLockTransiently]] ||
+
| 20 || [[#PushToGeneralChannel]]
 
|-
 
|-
| 13 || [[#GetAcquiredSleepLockEvent]] ||
+
| 30 || [[#GetHomeButtonReaderLockAccessor]]
 
|-
 
|-
| 20 || [[#PushToGeneralChannel]] ||
+
| 31 || [2.0.0+] [[#GetReaderLockAccessorEx]]
 
|-
 
|-
| 30 || [[#GetHomeButtonReaderLockAccessor]] ||
+
| 32 || [7.0.0+] [[#GetWriterLockAccessorEx]]
 
|-
 
|-
| 31 || [2.0.0+] [[#GetReaderLockAccessorEx]] ||
+
| 40 || [2.0.0+] [[#GetCradleFwVersion]]
 
|-
 
|-
| 32 || [7.0.0+] [[#GetWriterLockAccessorEx]] ||
+
| 50 || [3.0.0+] [[#IsVrModeEnabled]]
 
|-
 
|-
| 40 || [2.0.0+] [[#GetCradleFwVersion]] ||
+
| 51 || [3.0.0+] [[#SetVrModeEnabled]]
 
|-
 
|-
| 50 || [3.0.0+] [[#IsVrModeEnabled]] ||
+
| 52 || [4.0.0+] [[#SetLcdBacklighOffEnabled]]
 
|-
 
|-
| 51 || [3.0.0+] [[#SetVrModeEnabled]] ||
+
| 53 || [7.0.0+] [[#BeginVrModeEx]]
 
|-
 
|-
| 52 || [4.0.0+] [[#SetLcdBacklighOffEnabled]] ||
+
| 54 || [7.0.0+] [[#EndVrModeEx]]
 
|-
 
|-
| 53 || [7.0.0+] [[#BeginVrModeEx]] ||
+
| 55 || [3.0.0+] [[#IsInControllerFirmwareUpdateSection]]
 
|-
 
|-
| 54 || [7.0.0+] [[#EndVrModeEx]] ||
+
| 59 || [11.0.0+] [[#SetVrPositionForDebug]]
 
|-
 
|-
| 55 || [3.0.0+] [[#IsInControllerFirmwareUpdateSection]] ||
+
| 60 || [3.0.0+] [[#GetDefaultDisplayResolution]]
 
|-
 
|-
| 60 || [3.0.0+] [[#GetDefaultDisplayResolution]] ||
+
| 61 || [3.0.0+] [[#GetDefaultDisplayResolutionChangeEvent]]
 
|-
 
|-
| 61 || [3.0.0+] [[#GetDefaultDisplayResolutionChangeEvent]] ||
+
| 62 || [4.0.0+] [[#GetHdcpAuthenticationState]]
 
|-
 
|-
| 62 || [4.0.0+] [[#GetHdcpAuthenticationState]] ||
+
| 63 || [4.0.0+] [[#GetHdcpAuthenticationStateChangeEvent]]
 
|-
 
|-
| 63 || [4.0.0+] [[#GetHdcpAuthenticationStateChangeEvent]] ||
+
| 64 || [5.0.0+] [[#SetTvPowerStateMatchingMode]]
 
|-
 
|-
| 64 || [5.0.0+] [[#SetTvPowerStateMatchingMode]] ||
+
| 65 || [5.1.0+] [[#GetApplicationIdByContentActionName]]
 
|-
 
|-
| 65 || [5.1.0+] [[#GetApplicationIdByContentActionName]] ||
+
| 66 || [6.0.0+] [[#SetCpuBoostMode]]
 
|-
 
|-
| 66 || [6.0.0+] [[#SetCpuBoostMode]] ||
+
| 67 || [10.0.0+] [[#CancelCpuBoostMode]]
 
|-
 
|-
| 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]]
 
|-
 
|-
| 200 || [7.0.0+] [[#GetOperationModeSystemInfo]] ||
+
| 110 || [11.0.0+] [[#OpenMyGpuErrorHandler]]
 
|-
 
|-
| 300 || [9.0.0+] [[#GetSettingsPlatformRegion]] ||
+
| 120 || [13.0.0+] GetAppletLaunchedHistory
 
|-
 
|-
| 400 || [10.0.0+] ActivateMigrationService ||
+
| 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]].
 
  −
* 1: In focus.
  −
* 2/3: Out of focus(running in "background").
      
=== 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 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]].
+
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 enum '''WirelessPriorityMode''', no output.
+
Takes an input s32 [[#WirelessPriorityMode]], no output.
 
  −
The input value must be 1 or 2.
      
=== 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 ==
Added with [[7.0.0]].
+
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, an s32, and an u32, returns no output.
+
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 || Notes
+
! Cmd || Name
 +
|-
 +
| 1 || RequestLaunchApplicationForDebug
 
|-
 
|-
| 1 || RequestLaunchApplicationForDebug ||  
+
| 2 || [7.0.0+] [[#GetDebugStorageChannel]]
 
|-
 
|-
| 2 || [7.0.0+] GetDebugStorageChannel || No input, returns an output [[#IStorageChannel]].
+
| 3 || [7.0.0+] [[#CreateStorageForDebug]]
 
|-
 
|-
| 3 || [7.0.0+] CreateStorageForDebug || Takes a total of 8-bytes of input, returns an [[#IStorage]].
+
| 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 || Notes
+
! Cmd || Name
 +
|-
 +
| 0 || [[#NotifyMessageToHomeMenuForDebug]]
 +
|-
 +
| 1 || [1.0.0-9.2.0] [[#OpenMainApplication]]
 +
|-
 +
| 10 || [[#PerformSystemButtonPressing]]
 +
|-
 +
| 20 || [[#InvalidateTransitionLayer]]
 
|-
 
|-
| 0 || [[#NotifyMessageToHomeMenuForDebug]] ||
+
| 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]]
 
|-
 
|-
| 1 || [1.0.0-9.2.0] [[#OpenMainApplication]] ||
+
| 31 || [12.0.0+] RequestLaunchApplicationByApplicationLaunchInfoForDebug
 
|-
 
|-
| 10 || [[#PerformSystemButtonPressing]] ||
+
| 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]]
 
|-
 
|-
| 20 || [[#InvalidateTransitionLayer]] ||
+
| 50 || [15.0.0+] AddSystemProgramIdAndAppletIdForDebug
 
|-
 
|-
| 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]] ||
+
| 51 || [16.0.0+] AddOperationConfirmedLibraryAppletIdForDebug
 
|-
 
|-
| 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]] ||
+
| 52 || [17.0.0+] GetProgramIdFromAppletIdForDebug
 
|-
 
|-
| 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] ||
+
| 53 || [18.0.0+]  
 
|-
 
|-
| 101 || [10.0.0+] CancelCpuBoostModeForApplet ||
+
| 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]]
 
|-
 
|-
| 110 || [9.0.0+] [[#PushToAppletBoundChannelForDebug]] ||
+
| 101 || [10.0.0+] [[#CancelCpuBoostModeForApplet]]
 
|-
 
|-
| 111 || [9.0.0+] [[#TryPopFromAppletBoundChannelForDebug]] ||
+
| 110 || [9.0.0+] [[#PushToAppletBoundChannelForDebug]]
 
|-
 
|-
| 120 || [9.0.0+] [[#AlarmSettingNotificationEnableAppEventReserve]] ||
+
| 111 || [9.0.0+] [[#TryPopFromAppletBoundChannelForDebug]]
 
|-
 
|-
| 121 || [9.0.0+] [[#AlarmSettingNotificationDisableAppEventReserve]] ||
+
| 120 || [9.0.0+] [[#AlarmSettingNotificationEnableAppEventReserve]]
 
|-
 
|-
| 122 || [9.0.0+] [[#AlarmSettingNotificationPushAppEventNotify]] ||
+
| 121 || [9.0.0+] [[#AlarmSettingNotificationDisableAppEventReserve]]
 
|-
 
|-
| 130 || [9.0.0+] [[#FriendInvitationSetApplicationParameter]] ||
+
| 122 || [9.0.0+] [[#AlarmSettingNotificationPushAppEventNotify]]
 
|-
 
|-
| 131 || [9.0.0+] [[#FriendInvitationClearApplicationParameter]] ||
+
| 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 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]].
+
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
 
|-
 
|-
|rowspan="2"| 1 || [1.0.0-3.0.2]
+
| 1 || [7.0.0+] IsAutoPowerDownRequested ([1.0.0-3.0.2] )
|-
  −
| [7.0.0+] IsAutoPowerDownRequested
   
|-
 
|-
 
| 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]].
   −
= spsm =
+
== CreateCradleFirmwareUpdater ==
This is "nn::spsm::detail::IPowerStateInterface".
+
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 || GetCurrentState
+
| 0 || Start
|-
  −
| 1 || EnterSleep
   
|-
 
|-
| 2 || GetLastWakeReason
+
| 1 || Finish
 
|-
 
|-
| 3 || Shutdown
+
| 2 || GetUpdateDeviceStatus
 
|-
 
|-
| 4 || GetNotificationMessageEventHandle
+
| 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 [[6.0.0]].
+
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]].
   −
= Library Applets =
+
= apm =
This section documents library applet launching.
+
This is "nn::am::service::IApmManager".
   −
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.
+
This was added with [8.0.0+].
   −
Once the applet finishes running successfully, [[#ILibraryAppletAccessor]] PopOutData can be used to get the applet-specific [[#IStorage]] containing the applet output data.
+
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#OpenSession]]
 +
|-
 +
| 1 || GetPerformanceMode
 +
|-
 +
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
 +
|}
   −
== CommonArguments ==
+
== OpenSession ==
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.
+
Returns an [[#ISession]].
   −
This struct is 0x20-bytes.
+
== 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:  
|}
 
|}
   −
= Enums =
+
= AppletId =
=== AppletId ===
+
This is "nn::applet::AppletId". See also [[:Category:Library Applets]].
See also [[:Category:Library Applets]].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! ID
+
! Value
! Title-id
+
! ProgramId
! Description
+
! Description
 +
|-
 +
| 0x00
 +
|
 +
| None
 
|-
 
|-
 
| 0x01
 
| 0x01
 
|  
 
|  
| Application. Not valid for use with LibraryApplets.
+
| Application (not valid for use with LibraryApplets)
 
|-
 
|-
 
| 0x02
 
| 0x02
 
| 010000000000100C
 
| 010000000000100C
| "overlayDisp"
+
| OverlayApplet (overlayDisp)
 
|-
 
|-
 
| 0x03
 
| 0x03
 
| 0100000000001000
 
| 0100000000001000
| "qlaunch"
+
| SystemAppletMenu (qlaunch)
 
|-
 
|-
 
| 0x04
 
| 0x04
 
| 0100000000001012
 
| 0100000000001012
| "starter" SystemApplication.
+
| SystemApplication (starter)
 
|-
 
|-
 
| 0x0A
 
| 0x0A
 
| 0100000000001001
 
| 0100000000001001
| [[Auth_Applet|"auth"]]
+
| [[Auth_Applet|LibraryAppletAuth (auth)]]
 
|-
 
|-
 
| 0x0B
 
| 0x0B
 
| 0100000000001002
 
| 0100000000001002
| "cabinet"
+
| [[Cabinet_Applet|LibraryAppletCabinet (cabinet)]]
 
|-
 
|-
 
| 0x0C
 
| 0x0C
 
| 0100000000001003
 
| 0100000000001003
| [[Controller_Applet|"controller"]]
+
| [[Controller_Applet|LibraryAppletController (controller)]]
 
|-
 
|-
 
| 0x0D
 
| 0x0D
 
| 0100000000001004
 
| 0100000000001004
| "dataErase"
+
| LibraryAppletDataErase (dataErase)
 
|-
 
|-
 
| 0x0E
 
| 0x0E
 
| 0100000000001005
 
| 0100000000001005
| [[Error_Applet|"error"]]
+
| [[Error_Applet|LibraryAppletError (error)]]
 
|-
 
|-
 
| 0x0F
 
| 0x0F
 
| 0100000000001006
 
| 0100000000001006
| "netConnect"
+
| LibraryAppletNetConnect (netConnect)
 
|-
 
|-
 
| 0x10
 
| 0x10
 
| 0100000000001007
 
| 0100000000001007
| [[Profile_Selector|"playerSelect"]]
+
| [[Profile_Selector|LibraryAppletPlayerSelect (playerSelect)]]
 
|-
 
|-
 
| 0x11
 
| 0x11
 
| 0100000000001008
 
| 0100000000001008
| [[Software_Keyboard|"swkbd"]]
+
| [[Software_Keyboard|LibraryAppletSwkbd (swkbd)]]
 
|-
 
|-
 
| 0x12
 
| 0x12
 
| 0100000000001009
 
| 0100000000001009
| "miiEdit"
+
| [[MiiEdit_Applet|LibraryAppletMiiEdit (miiEdit)]]
 
|-
 
|-
 
| 0x13
 
| 0x13
 
| 010000000000100A
 
| 010000000000100A
| "LibAppletWeb" [[Internet_Browser#010000000000100A|WebApplet]] applet
+
| [[Internet_Browser#010000000000100A|LibraryAppletWeb (web)]]
 
|-
 
|-
 
| 0x14
 
| 0x14
 
| 010000000000100B
 
| 010000000000100B
| "LibAppletShop" [[Internet_Browser#ShopN|ShopN]] applet
+
| [[Internet_Browser#ShopN|LibraryAppletShop (shop)]]
 
|-
 
|-
 
| 0x15
 
| 0x15
 
| 010000000000100D
 
| 010000000000100D
| [[Album_Applet|"photoViewer"]]
+
| [[Album_Applet|LibraryAppletPhotoViewer (photoViewer)]]
 
|-
 
|-
 
| 0x16
 
| 0x16
 
| 010000000000100E
 
| 010000000000100E
| "set"
+
| LibraryAppletSet (set)
 
|-
 
|-
 
| 0x17
 
| 0x17
 
| 010000000000100F
 
| 010000000000100F
| "LibAppletOff" [[Internet_Browser#Offline_Applet|Offline]] applet
+
| [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]]
 
|-
 
|-
 
| 0x18
 
| 0x18
 
| 0100000000001010
 
| 0100000000001010
| "LibAppletLns" [[Internet_Browser#Whitelisted_Applets|Whitelisted]] applet
+
| [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]]
 
|-
 
|-
 
| 0x19
 
| 0x19
 
| 0100000000001011
 
| 0100000000001011
| "LibAppletAuth" [[Internet_Browser#WifiWebAuthApplet|WifiWebAuth]] applet
+
| [[Internet_Browser#WifiWebAuthApplet|LibraryAppletWifiWebAuth (wifiWebAuth)]]
 
|-
 
|-
 
| 0x1A
 
| 0x1A
 
| 0100000000001013
 
| 0100000000001013
| [[MyPage_Applet|"myPage"]]
+
| [[MyPage_Applet|LibraryAppletMyPage (myPage)]]
|}
  −
 
  −
=== LibraryAppletMode ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  ID
+
| 0x1B
!  Description
+
| 010000000000101A
 +
| LibraryAppletGift (gift)
 
|-
 
|-
| 0x0
+
| 0x1C
| AllForeground
+
| 010000000000101C
 +
| LibraryAppletUserMigration (userMigration)
 
|-
 
|-
| 0x1
+
| 0x1D
| Background
+
| 010000000000101D
 +
| [9.0.0+] LibraryAppletPreomiaSys (EncounterSys)
 
|-
 
|-
| 0x2
+
| 0x1E
| No UI
+
| 0100000000001020
 +
| [9.0.0+] LibraryAppletStory (story)
 
|-
 
|-
| 0x3
+
| 0x1F
| Background with indirect display, see also [[#GetIndirectLayerConsumerHandle]]. Only used by swkbd InlineKeyboard.
+
| 010070000E3C0000
 +
| [9.0.0+] LibraryAppletPreomiaUsr (EncounterUsr)
 
|-
 
|-
| 0x4
+
| 0x20
| AllForegroundInitiallyHidden. Can be used by [7.0.0+] [[Internet_Browser|WebSession]].
+
| 010086000E49C000
 +
| [9.0.0+] LibraryAppletPreomiaUsrDummy (EncounterUsrDummy)
 
|-
 
|-
|}
+
| 0x21
 
+
| 0100000000001038
=== AppletMessage ===
+
| [10.0.0+] LibraryAppletSample (sample)
{| class="wikitable" border="1"
   
|-
 
|-
!  ID
+
| 0x22
!  Description
+
| 0100000000001007
 +
| [13.0.0+] LibraryAppletPromoteQualification (playerSelect)
 
|-
 
|-
| 0x4 || Exit requested
+
| 0x32
 +
| 010000000000100F
 +
| [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]]
 
|-
 
|-
| 0xF || [[#GetCurrentFocusState|FocusState]] changed
+
| 0x33
 +
| 010000000000100F
 +
| [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]]
 
|-
 
|-
| 0x10 || Current applet execution was [[#SetRestartMessageEnabled|resumed]].
+
| 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] )
 
|-
 
|-
| 0x1E || OperationMode changed
+
| 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] )
 
|-
 
|-
| 0x1F || PerformanceMode changed
+
| 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] )
 
|-
 
|-
| 0x33 || [[#SetHandlesRequestToDisplay|RequestToDisplay]]. Indicates that [[#ApproveToDisplay]] should be used.
+
| 0x38
 +
| 0100000000001043
 +
| [16.0.0-16.1.0]
 
|-
 
|-
| 0x5A || Capture button was [[#SetRequiresCaptureButtonShortPressedMessage|short-pressed]].
+
| 0x50
 +
| 0100000000001007
 +
| [18.0.0+]
 
|-
 
|-
| 0x5C || Screenshot was [[#SetAlbumImageTakenNotificationEnabled|taken]].
+
| 0x51
|}
+
| 0100000000001007
 
+
| [18.0.0+]
This is "nn::am::AppletMessage".
  −
 
  −
=== OperationMode ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x3E8
!  Description
+
|
 +
| [10.0.0-16.1.0] DevlopmentTool
 
|-
 
|-
| 0 || Handheld
+
| 0x3F1
 +
| 010000000000D619
 +
| [10.0.0-16.1.0] CombinationLA
 
|-
 
|-
| 1 || Docked
+
| 0x3F2
|}
+
| 010000000000D610
 
+
| [10.0.0-16.1.0] AeSystemApplet
=== TvPowerStateMatchingMode ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x3F3
!  Description
+
| 010000000000D611
 +
| [10.0.0-16.1.0] AeOverlayApplet
 
|-
 
|-
| 0 || Unknown
+
| 0x3F4
 +
| 010000000000D612
 +
| [10.0.0-16.1.0] AeStarter
 
|-
 
|-
| 1 || Unknown
+
| 0x3F5
|}
+
| 010000000000D613
 
+
| [10.0.0-16.1.0] AeLibraryAppletAlone
This is "nn::oe::TvPowerStateMatchingMode". This is used with [[#SetTvPowerStateMatchingMode]].
  −
 
  −
=== SystemButtonType ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x3F6
!  Description
+
| 010000000000D614
 +
| [10.0.0-16.1.0] AeLibraryApplet1
 
|-
 
|-
| 1 || PerformHomeButtonShortPressing
+
| 0x3F7
 +
| 010000000000D615
 +
| [10.0.0-16.1.0] AeLibraryApplet2
 
|-
 
|-
| 2 || PerformHomeButtonLongPressing
+
| 0x3F8
 +
| 010000000000D616
 +
| [10.0.0-16.1.0] AeLibraryApplet3
 
|-
 
|-
| 3 || Short-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]].
+
| 0x3F9
 +
| 010000000000D617
 +
| [10.0.0-16.1.0] AeLibraryApplet4
 
|-
 
|-
| 4 || Long-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]].
+
| 0x3FA
 +
| 010000000000D60A
 +
| [10.0.0-16.1.0] AppletISA
 
|-
 
|-
| 5 || Shutdown the system. Only available with [[#PerformSystemButtonPressing]].
+
| 0x3FB
 +
| 010000000000D60B
 +
| [10.0.0-16.1.0] AppletIOA
 
|-
 
|-
| 6 || PerformCaptureButtonShortPressing
+
| 0x3FC
 +
| 010000000000D60C
 +
| [10.0.0-16.1.0] AppletISTA
 
|-
 
|-
| 7 || PerformCaptureButtonLongPressing
+
| 0x3FD
|}
+
| 010000000000D60D
 
+
| [10.0.0-16.1.0] AppletILA1
This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]]/[[#PerformSystemButtonPressing]].
  −
 
  −
=== LaunchParameterKind ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x3FE
!  Description
+
| 010000000000D60E
 +
| [10.0.0-16.1.0] AppletILA2
 
|-
 
|-
| 1 || UserChannel. Application-specific LaunchParameter.
+
| 0x700000C8
 +
| 010000000000D65B
 +
| [18.0.0+]
 
|-
 
|-
| 2 || account PreselectedUser
+
| 0x700000C9
 +
| 010000000000D65C
 +
| [18.0.0+]
 
|-
 
|-
| 3 || Unknown if used by anything?
+
| 0x700000DC
|}
+
| 010000000000D619
 
+
| [17.0.0+] CombinationLA
=== LibraryAppletExitReason ===
+
|-
{| class="wikitable" border="1"
+
| 0x700000E6
 +
| 010000000000D610
 +
| [17.0.0+] AeSystemApplet
 +
|-
 +
| 0x700000E7
 +
| 010000000000D611
 +
| [17.0.0+] AeOverlayApplet
 +
|-
 +
| 0x700000E8
 +
| 010000000000D612
 +
| [17.0.0+] AeStarter
 
|-
 
|-
!  Value
+
| 0x700000E9
!  Description
+
| 010000000000D613
 +
| [17.0.0+] AeLibraryAppletAlone
 
|-
 
|-
| 0 || Normal
+
| 0x700000EA
 +
| 010000000000D614
 +
| [17.0.0+] AeLibraryApplet1
 
|-
 
|-
| 1 || Canceled
+
| 0x700000EB
 +
| 010000000000D615
 +
| [17.0.0+] AeLibraryApplet2
 
|-
 
|-
| 2 || Abnormal
+
| 0x700000EC
 +
| 010000000000D616
 +
| [17.0.0+] AeLibraryApplet3
 
|-
 
|-
| 10 || Unexpected
+
| 0x700000ED
|}
+
| 010000000000D617
 
+
| [17.0.0+] AeLibraryApplet4
=== ProgramSpecifyKind ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x700000F0
!  Description
+
| 010000000000D60A
 +
| [17.0.0+] AppletISA
 
|-
 
|-
| 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.
+
| 0x700000F1
 +
| 010000000000D60B
 +
| [17.0.0+] AppletIOA
 
|-
 
|-
| 1 || [[NCM_services#ApplicationId|ApplicationId]]. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1.
+
| 0x700000F2
 +
| 010000000000D60C
 +
| [17.0.0+] AppletISTA
 
|-
 
|-
| 2 || u64 = value 0. "RestartProgram"
+
| 0x700000F3
 +
| 010000000000D60D
 +
| [17.0.0+] AppletILA1
 
|-
 
|-
 +
| 0x700000F4
 +
| 010000000000D60E
 +
| [17.0.0+] AppletILA2
 
|}
 
|}
   −
This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]].
+
= LibraryAppletMode =
 
+
This is "nn::applet::LibraryAppletMode".
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 =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value
+
! Value
! Description
+
! Description
 +
|-
 +
| 0x0
 +
| AllForeground
 +
|-
 +
| 0x1
 +
| PartialForeground
 +
|-
 +
| 0x2
 +
| NoUi
 
|-
 
|-
| 0 || Unknown.
+
| 0x3
 +
| PartialForegroundWithIndirectDisplay (see also [[#GetIndirectLayerConsumerHandle]], only used by swkbd [[Software_Keyboard|InlineKeyboard]])
 
|-
 
|-
| 1 || Unknown.
+
| 0x4
 +
| AllForegroundInitiallyHidden (can be used by [7.0.0+] [[Internet_Browser|WebSession]])
 
|}
 
|}
   −
This is u32 enum "nn::applet::InputDetectionPolicy".
+
= AppletMessage =
 +
This is "nn::am::AppletMessage".
   −
= AppletResourceUserId =
  −
This u64 is officially called "nn::applet::AppletResourceUserId". Used by a number of non-AM services.
  −
  −
= AppletAttribute =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset || Size || Description
+
! Value
 +
! Description
 
|-
 
|-
| 0x0 || 0x1 || Flag. When non-zero, two state fields are set to 1.
+
| 0 || None
 +
|-
 +
| 1 || ChangeIntoForeground
 
|-
 
|-
| 0x1 || 0x7F || Unused
+
| 2 || ChangeIntoBackground
|}
  −
 
  −
This is "nn::am::AppletAttribute". This struct is 0x8-bytes.
  −
 
  −
This is used by [[#OpenLibraryAppletProxy]].
  −
 
  −
= AppletProcessLaunchReason =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 4 || Exit
 
|-
 
|-
| 0x0 || 0x1 || Flag. When non-zero, LibraryApplets then use [[#OpenCallingLibraryApplet]].
+
| 6 || ApplicationExited
 
|-
 
|-
| 0x1 || 0x2 || Always 0.
+
| 7 ||  
 
|-
 
|-
| 0x3 || 0x1 || Always 0.
+
| 15 || [[#FocusState|FocusStateChanged]]
|}
  −
 
  −
This is "nn::am::service::AppletProcessLaunchReason". This struct is 0x4-bytes.
  −
 
  −
= LibraryAppletInfo =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 16 || [[#SetRestartMessageEnabled|Resume]]
 
|-
 
|-
| 0x0 || 0x4 || [[#AppletId]]
+
| 20 || DetectShortPressingHomeButton
 
|-
 
|-
| 0x4 || 0x4 || [[#LibraryAppletMode]]
+
| 21 || DetectLongPressingHomeButton
|}
  −
 
  −
This is "nn::am::service::LibraryAppletInfo". This struct is 0x8-bytes.
  −
 
  −
= AppletKind =
  −
This is "nn::am::service::AppletKind". This is 8-bytes.
  −
 
  −
= AppletIdentityInfo =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 22 || DetectShortPressingPowerButton
 
|-
 
|-
| 0x0 || 0x4 || [[#AppletId]]
+
| 23 || DetectMiddlePressingPowerButton
 
|-
 
|-
| 0x4 || 0x4 || Padding
+
| 24 || DetectLongPressingPowerButton
 
|-
 
|-
| 0x8 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
+
| 25 || RequestToPrepareSleep
|}
  −
 
  −
This struct is "nn::am::service::AppletIdentityInfo". This struct is 0x10-bytes.
  −
 
  −
= ApplicationAttributeForQuest =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 26 || FinishedSleepSequence
 
|-
 
|-
| 0x0 || 0x4 || See [[#ApplicationAttribute]].
+
| 27 || SleepRequiredByHighTemperature
 
|-
 
|-
| 0x4 || 0x4 || See [[#ApplicationAttribute]].
+
| 28 || SleepRequiredByLowBattery
 
|-
 
|-
| 0x8 || 0x4 || [7.0.0+] See [[#ApplicationAttribute]].
+
| 29 || AutoPowerDown
|}
  −
 
  −
This struct is "nn::applet::ApplicationAttributeForQuest".
  −
 
  −
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 =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 30 || [[#OperationMode|OperationModeChanged]]
 
|-
 
|-
| 0x0 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds.
+
| 31 || [[#PerformanceMode|PerformanceModeChanged]]
 
|-
 
|-
| 0x4 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds.
+
| 32 || DetectReceivingCecSystemStandby
 
|-
 
|-
| 0x8 || 0x4 || float audio volume. Must be in the range of 0.0f-1.0f. The default is 1.0f.
+
| 33 || SdCardRemoved
 
|-
 
|-
| 0xC || 0x14 || Unused. Default is 0.
+
| 34 ||  
|}
  −
 
  −
This struct is "nn::am::ApplicationAttribute". This struct is 0x20-bytes.
  −
 
  −
Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd.
  −
 
  −
= ApplicationLaunchProperty =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 50 || LaunchApplicationRequested
 
|-
 
|-
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
+
| 51 || [[#SetHandlesRequestToDisplay|RequestToDisplay]]
 
|-
 
|-
| 0x8 || 0x4 || Application title-version.
+
| 55 || ShowApplicationLogo
 
|-
 
|-
| 0xC || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application base title.
+
| 56 || HideApplicationLogo
 
|-
 
|-
| 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application update title.
+
| 57 || ForceHideApplicationLogo
 
|-
 
|-
| 0xE || 0x1 || Unknown.
+
| 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
 
|-
 
|-
| 0xF || 0x1 || Padding.
+
| 1000 ||  
 
|}
 
|}
   −
This struct is 0x10-bytes.
+
= OperationMode =
 +
This is "nn::oe::OperationMode".
   −
= ApplicationLaunchRequestInfo =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset || Size || Description
+
! Value
|-
+
! 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]].
+
| 0 || Handheld
 
|-
 
|-
| 0x8 || 0x8 || Unknown. The default is 0x0.
+
| 1 || Console
 
|}
 
|}
   −
This struct is "nn::applet::ApplicationLaunchRequestInfo". This struct is 0x10-bytes.
+
= PerformanceMode =
 +
This is "nn::oe::PerformanceMode".
   −
= AppletResourceUsageInfo =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset || Size || Description
+
! Value
 +
! Description
 
|-
 
|-
| 0x0 || 0x4 || Unknown counter.
+
| -1 || Invalid
 
|-
 
|-
| 0x4 || 0x4 || Unknown counter.
+
| 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
 
|-
 
|-
| 0x8 || 0x4 || Output from [[NS_Services|NS GetRightsEnvironmentCountForDebug]].
+
| 0 || Default
 
|-
 
|-
| 0xC || 0x14 || Always zero.
+
| 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]]

Navigation menu