Applet Manager services

From Nintendo Switch Brew
Revision as of 01:33, 12 February 2019 by Yellows8 (talk | contribs) (→‎caps:su)
Jump to navigation Jump to search

AM (Applet Manager) provides services for interacting with system applets while abstracting several aspects of power and operation management.

Contains multiple raw images, with at least the following: "NN_OMM_CHARGING_BIN_{begin|end}"(charging icon), low-battery icon, and the Nintendo Switch logo displayed during system boot.

appletAE

This is "nn::am::service::IAllSystemAppletProxiesService".

Cmd Name Notes
100 OpenSystemAppletProxy Returns an #ISystemAppletProxy.
200 OpenLibraryAppletProxyOld ([1.0.0-2.3.0] OpenLibraryAppletProxy) Returns an #ILibraryAppletProxy.
201 [3.0.0+] #OpenLibraryAppletProxy Returns an #ILibraryAppletProxy.
300 OpenOverlayAppletProxy Returns an #IOverlayAppletProxy.
350 OpenSystemApplicationProxy Returns an #IApplicationProxy.
400 CreateSelfLibraryAppletCreatorForDevelop Returns an #ILibraryAppletCreator.
410 [6.0.0+] GetSystemAppletControllerForDebug Returns an #ISystemAppletControllerForDebug.
1000 [6.0.0+] GetDebugFunctions Returns an #IDebugFunctions.

All of these commands except #OpenLibraryAppletProxy take the same input as #OpenApplicationProxy, with the same user-process retry-loop as #OpenApplicationProxy. These Open*Proxy commands (including appletOE) doesn't seem to usable from processes which aren't actual applets (such as sysmodules), at least for applet-types which aren't already in use.

This service is used by all system non-regular-applications.

The 01000000000010XX system titles use the following applet types(above Open{type}Proxy commands):

  • "qlaunch": SystemApplet
  • "overlay": OverlayApplet
  • "starter": SystemApplication
  • "maintenance": SystemApplet
  • All others: LibraryApplet

OpenLibraryAppletProxy

Returns an #ILibraryAppletProxy.

Takes a reserved input u64(official user-processes use hard-coded value 0), a PID,a process copy-handle(cur-proc handle alias), and an 0x80-byte type-0x15 input buffer AppletAttribute.

Official user-processes use the same retry loop with this as the other Open*Proxy commands.

ISystemAppletProxy

Cmd Name Notes
0 GetCommonStateGetter Returns an #ICommonStateGetter.
1 GetSelfController Returns an #ISelfController.
2 GetWindowController Returns an #IWindowController.
3 GetAudioController Returns an #IAudioController.
4 GetDisplayController Returns an #IDisplayController.
10 GetProcessWindingController Returns an #IProcessWindingController.
11 GetLibraryAppletCreator Returns an #ILibraryAppletCreator.
20 GetHomeMenuFunctions Returns an #IHomeMenuFunctions.
21 GetGlobalStateController Returns an #IGlobalStateController.
22 GetApplicationCreator Returns an #IApplicationCreator.
23 [7.0.0+] No input, returns an #IUnknown0.
1000 GetDebugFunctions Returns an #IDebugFunctions.

IHomeMenuFunctions

Cmd Name Notes
10 RequestToGetForeground
11 LockForeground
12 UnlockForeground
20 #PopFromGeneralChannel
21 #GetPopFromGeneralChannelEvent
30 #GetHomeButtonWriterLockAccessor
31 [2.0.0+] #GetWriterLockAccessorEx
100 [6.0.0+] PopRequestLaunchApplicationForDebug

PopFromGeneralChannel

No input, returns an output #IStorage.

GetPopFromGeneralChannelEvent

No input, returns an output handle.

GetHomeButtonWriterLockAccessor

No input, returns an output #ILockAccessor.

GetWriterLockAccessorEx

Takes an input u32, returns an output #ILockAccessor.

ILockAccessor

Cmd Name
1 TryLock
2 Unlock
3 #GetEvent
GetEvent

No input, returns an output handle.

IGlobalStateController

Cmd Name Notes
0 RequestToEnterSleep
1 EnterSleep
2 StartSleepSequence
3 StartShutdownSequence
4 StartRebootSequence
9 [7.0.0+] No input, returns an output u8.
10 LoadAndApplyIdlePolicySettings
11 [2.0.0+] NotifyCecSettingsChanged
12 [2.0.0+] SetDefaultHomeButtonLongPressTime
13 [2.0.0+] UpdateDefaultDisplayResolution
14 [2.0.0+] #ShouldSleepOnBoot
15 [4.0.0+] GetHdcpAuthenticationFailedEvent

ShouldSleepOnBoot

No input, returns an output u8 bool.

IApplicationCreator

Cmd Name Notes
0 #CreateApplication
1 #PopLaunchRequestedApplication
10 #CreateSystemApplication
100 #PopFloatingApplicationForDevelopment

CreateApplication

Takes an input u64 nn::ncm::ApplicationId(titleID), returns an #IApplicationAccessor.

PopLaunchRequestedApplication

No input, returns an #IApplicationAccessor.

CreateSystemApplication

Takes an input u64 nn::ncm::SystemApplicationId, returns an #IApplicationAccessor.

PopFloatingApplicationForDevelopment

No input, returns an #IApplicationAccessor.

IApplicationAccessor

Cmd Name Notes
0 #GetAppletStateChangedEvent
1 #IsCompleted
10 Start
20 RequestExit
25 Terminate
30 GetResult
101 RequestForApplicationToGetForeground
110 TerminateAllLibraryApplets
111 AreAnyLibraryAppletsLeft
112 #GetCurrentLibraryApplet
120 GetApplicationId
121 #PushLaunchParameter
122 GetApplicationControlProperty
123 [2.0.0+] GetApplicationLaunchProperty
124 [6.0.0+] GetApplicationLaunchRequestInfo
130 [6.0.0+] SetUsers
131 [6.0.0+] CheckRightsEnvironmentAvailable
132 [6.0.0+] GetNsRightsEnvironmentHandle
140 [6.0.0+] GetDesirableUids
150 [6.0.0+] ReportApplicationExitTimeout

Commands <=30 are inherited from #IAppletAccessor.

GetCurrentLibraryApplet

No input, returns an output #IAppletAccessor.

PushLaunchParameter

Takes an input u32 and an input #IStorage, no output.

IAppletAccessor
Cmd Name
0 #GetAppletStateChangedEvent
1 #IsCompleted
10 #Start
20 #RequestExit
25 #Terminate
30 #GetResult

GetAppletStateChangedEvent

No input, returns an output event handle with autoclear=false.

IsCompleted

No input, returns an output u8 bool.

Start

No input/output.

RequestExit

No input/output.

Terminate

No input/output.

GetResult

No input/output.

IUnknown0

Added with 7.0.0.

Cmd Name Notes
10 Takes an input u64 offset and a type-0x22 output buffer, returns an output u64 actual_transfer_size.
11 Takes an input u64 offset and a type-0x21 input buffer, no output.

These commands copy data from/to a state buffer and the user specified buffer. The size of the state buffer is 0x400-bytes.

ILibraryAppletProxy

Cmd Name Notes
0 GetCommonStateGetter Returns an #ICommonStateGetter.
1 GetSelfController Returns an #ISelfController.
2 GetWindowController Returns an #IWindowController.
3 GetAudioController Returns an #IAudioController.
4 GetDisplayController Returns an #IDisplayController.
10 GetProcessWindingController Returns an #IProcessWindingController.
11 GetLibraryAppletCreator Returns an #ILibraryAppletCreator.
20 OpenLibraryAppletSelfAccessor Returns an #ILibraryAppletSelfAccessor.
21 [7.0.0+] No input, returns an #IUnknown0.
1000 GetDebugFunctions Returns an #IDebugFunctions.

ILibraryAppletSelfAccessor

Cmd Name Notes
0 #PopInData
1 #PushOutData
2 #PopInteractiveInData
3 #PushInteractiveOutData
5 #GetPopInDataEvent
6 #GetPopInteractiveInDataEvent
10 #ExitProcessAndReturn
11 #GetLibraryAppletInfo
12 GetMainAppletIdentityInfo
13 #CanUseApplicationCore
14 GetCallerAppletIdentityInfo
15 [2.0.0+] GetMainAppletApplicationControlProperty
16 [2.0.0+] #GetMainAppletStorageId
17 [2.0.0+] GetCallerAppletIdentityInfoStack
18 [4.0.0+] GetNextReturnDestinationAppletIdentityInfo
19 [4.0.0+] GetDesirableKeyboardLayout
20 #PopExtraStorage
25 #GetPopExtraStorageEvent
30 #UnpopInData
31 #UnpopExtraStorage
40 [2.0.0+] GetIndirectLayerProducerHandle
50 [2.0.0+] ReportVisibleError
51 [4.0.0+] ReportVisibleErrorWithErrorContext
60 [4.0.0+] #GetMainAppletApplicationDesiredLanguage
80 [6.0.0+] RequestExitToSelf
90 [5.0.0+] CreateApplicationAndPushAndRequestToLaunch
100 [4.0.0+] #CreateGameMovieTrimmer
101 [6.0.0+] ReserveResourceForMovieOperation
102 [6.0.0+] UnreserveResourceForMovieOperation
110 [6.0.0+] GetMainAppletAvailableUsers

PopInData

No input, returns an output #IStorage.

PushOutData

Takes an input #IStorage, no output.

PopInteractiveInData

No input, returns an output #IStorage.

PushInteractiveOutData

Takes an input #IStorage, no output.

GetPopInDataEvent

No input, returns an output handle.

GetPopInteractiveInDataEvent

No input, returns an output handle.

GetMainAppletStorageId

No input, returns an output u8 storageId.

ExitProcessAndReturn

No input/output.

Exits the LibraryApplet and returns to running the title which launched this LibraryApplet (qlaunch for example).

GetLibraryAppletInfo

No input. Returns an output #LibraryAppletInfo.

CanUseApplicationCore

No input, returns an output u8 bool.

PopExtraStorage

No input, returns an output #IStorage.

GetPopExtraStorageEvent

No input, returns an output handle.

UnpopInData

Takes an input #IStorage, no output.

UnpopExtraStorage

Takes an input #IStorage, no output.

GetMainAppletApplicationDesiredLanguage

No input, returns an output LanguageCode.

CreateGameMovieTrimmer

Takes an input u64 and handle, returns a GRC IGameMovieTrimmer.

IOverlayAppletProxy

Cmd Name Notes
0 GetCommonStateGetter Returns an #ICommonStateGetter.
1 GetSelfController Returns an #ISelfController.
2 GetWindowController Returns an #IWindowController.
3 GetAudioController Returns an #IAudioController.
4 GetDisplayController Returns an #IDisplayController.
10 GetProcessWindingController Returns an #IProcessWindingController.
11 GetLibraryAppletCreator Returns an #ILibraryAppletCreator.
20 GetOverlayFunctions Returns an #IOverlayFunctions.
21 [7.0.0+] No input, returns an #IUnknown0.
1000 GetDebugFunctions Returns an #IDebugFunctions.

IOverlayFunctions

Cmd Name
0 BeginToWatchShortHomeButtonMessage
1 EndToWatchShortHomeButtonMessage
2 GetApplicationIdForLogo
3 SetGpuTimeSliceBoost
4 [2.0.0+] SetAutoSleepTimeAndDimmingTimeEnabled
5 [2.0.0+] TerminateApplicationAndSetReason
6 [2.0.0+] SetScreenShotPermissionGlobally
10 [6.0.0+] StartShutdownSequenceForOverlay
11 [6.0.0+] StartRebootSequenceForOverlay
90 [7.0.0+] Takes an input u8, no output.
101 [6.0.0+] BeginToObserveHidInputForDevelop

IApplicationProxy

Cmd Name Notes
0 GetCommonStateGetter Returns an #ICommonStateGetter.
1 GetSelfController Returns an #ISelfController.
2 GetWindowController Returns an #IWindowController.
3 GetAudioController Returns an #IAudioController.
4 GetDisplayController Returns an #IDisplayController.
10 GetProcessWindingController Returns an #IProcessWindingController.
11 GetLibraryAppletCreator Returns an #ILibraryAppletCreator.
20 GetApplicationFunctions Returns an #IApplicationFunctions.
1000 GetDebugFunctions Returns an #IDebugFunctions.

IApplicationFunctions

Cmd Name Notes
1 #PopLaunchParameter
10 #CreateApplicationAndPushAndRequestToStart
11 [2.0.0+] #CreateApplicationAndPushAndRequestToStartForQuest
12 [4.0.0+] #CreateApplicationAndRequestToStart
13 [4.0.0+] #CreateApplicationAndRequestToStartForQuest
14 [7.0.0+] Takes a total of 8-bytes and a type-0x15 input buffer, return an output #IStorage.
15 [7.0.0+] Takes a total of 8-bytes and a type-0x15 input buffer, no output.
20 EnsureSaveData
21 #GetDesiredLanguage
22 #SetTerminateResult
23 GetDisplayVersion
24 [2.0.0+] GetLaunchStorageInfoForDebug
25 [2.0.0+] ExtendSaveData
26 [2.0.0+] GetSaveDataSize
27 [5.0.0+] CreateCacheStorage
30 BeginBlockingHomeButtonShortAndLongPressed
31 #EndBlockingHomeButtonShortAndLongPressed
32 #BeginBlockingHomeButton
33 #EndBlockingHomeButton
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
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 [6.0.0+] GetPreviousProgramIndex
124 [6.0.0+] EnableApplicationAllThreadDumpOnCrash
500 [5.0.0+] StartContinuousRecordingFlushForDebug
1000 [5.0.0+] #CreateMovieMaker
1001 [5.0.0+] #PrepareForJit

The BOTW game uses this GamePlayRecording functionality from the main-nso "nninitStartup" function, with size 0x6000000(96MiB). The official GamePlayRecording-enable code does the following(this will panic on any failure):

This GamePlayRecording functionality presumably enables the video-recording usable starting with 4.0.0.

PopLaunchParameter

Takes an input u32 #LaunchParameterKind, returns an output #IStorage.

Pops a LaunchParameter #IStorage, the storage will be removed from sysmodule state during this.

CreateApplicationAndPushAndRequestToStart

Takes an input u64 titleID and an input #IStorage, no output. titleID=0 can be used to relaunch the current application.

CreateApplicationAndPushAndRequestToStartForQuest

Takes 2 input u32s (loaded from struct ApplicationAttributeForQuest), an input u64 titleID, and an input #IStorage, no output.

CreateApplicationAndRequestToStart

Takes an input u64 titleID, no output.

Same as #CreateApplicationAndPushAndRequestToStart except without the input storage, official sw uses this when no input storage is specified.

CreateApplicationAndRequestToStartForQuest

Takes 2 input u32s (loaded from struct ApplicationAttributeForQuest) and an input u64 titleID, no output.

Same as #CreateApplicationAndPushAndRequestToStartForQuest except without the input storage, official sw uses this when no input storage is specified.

GetDesiredLanguage

No input, returns an output LanguageCode.

SetTerminateResult

Takes an input u32 Result, no output.

For example, in some cases official apps use this with error 0x2A2 then uses svcBreak.

EndBlockingHomeButtonShortAndLongPressed

No input/output.

BeginBlockingHomeButton

Takes an input s64 nanoseconds, no output. The input nanoseconds can be zero.

EndBlockingHomeButton

No input/output.

NotifyRunning

Takes no input. Returns an output u8 bool, which is ignored by official user-processes.

SetMediaPlaybackStateForApplication

Takes an input u8 bool, no output.

IsGamePlayRecordingSupported

No input, returns an output u8 bool.

InitializeGamePlayRecording

Takes a TransferMemory handle and an u64 for the size of the TransferMemory. The size must match 0x6000000 otherwise an error is returned.

SetGamePlayRecordingState

Takes an input u32. 0 = disable/pause, 1 = enable/restart.

RequestFlushGamePlayingMovieForDebug

No input/output.

RequestToShutdown

No input/output.

RequestToReboot

No input/output.

ExitAndRequestToShowThanksMessage

No input/output.

Used to exit the application and return to the kiosk menu. Official sw uses #UnlockExit immediately before this.

EnableApplicationCrashReport

Takes an input u8 bool, no output.

SetApplicationCopyrightVisibility

Takes an input u8 bool, no output.

QueryApplicationPlayStatistics

Takes a type-0x6 output buffer containing an array of ApplicationPlayStatistics and a type-0x5 input buffer containing an array of u64 titleIDs. Returns an output s32 (actual total output entries?).

The number of entries in each array is the same. ApplicationPlayStatistics is a 8-byte struct.

ClearUserChannel

No input/output.

CreateMovieMaker

Takes an input u64 and handle, returns an #IMovieMaker.

PrepareForJit

Takes no input. Launches title 010000000000003B (currently not present on retail systems) if some context variable is set.

IMovieMaker

Cmd Name
0 #GetGrcMovieMaker
1 #GetLayerHandle

GetGrcMovieMaker

No input, returns a GRC IMovieMaker.

GetLayerHandle

No input, returns an output u64.

ILibraryAppletCreator

Cmd Name Notes
0 #CreateLibraryApplet
1 #TerminateAllLibraryApplets
2 #AreAnyLibraryAppletsLeft
10 #CreateStorage
11 #CreateTransferMemoryStorage
12 [2.0.0+] #CreateHandleStorage

CreateLibraryApplet

Takes 2 input u32s #AppletId and #LibraryAppletMode, returns an #ILibraryAppletAccessor.

TerminateAllLibraryApplets

No input/output.

AreAnyLibraryAppletsLeft

No input, returns an output u8 bool.

CreateStorage

Takes an input s64 for the storage size, returns an #IStorage.

This allocates a buffer with the specified size which can then be accessed via #IStorageAccessor.

CreateTransferMemoryStorage

Takes an input TransferMemory copy-handle, an input u8 bool, and an s64 size, returns an #IStorage.

The user-process creates the TransferMemory with permissions=0.

The TransferMemory is mapped, which can then be accessed via #IStorageAccessor. The input bool controls whether writing to the storage is allowed: #Write will throw an error if this flag is not set.

CreateHandleStorage

Takes an input copy-handle and an input s64, returns an #IStorage. In some cases the s64 must not have the negative bit set.

The input can be arbitrary, however official sw is only (?) known to use this for TransferMemory (with s64=size).

ILibraryAppletAccessor

Cmd Name Notes
0 #GetAppletStateChangedEvent
1 #IsCompleted
10 #Start
20 #RequestExit
25 #Terminate
30 #GetResult
50 #SetOutOfFocusApplicationSuspendingEnabled
100 #PushInData
101 #PopOutData
102 #PushExtraStorage
103 #PushInteractiveInData
104 #PopInteractiveOutData
105 #GetPopOutDataEvent
106 #GetPopInteractiveOutDataEvent
110 #NeedsToExitProcess
120 #GetLibraryAppletInfo
150 #RequestForAppletToGetForeground
160 [2.0.0+] #GetIndirectLayerConsumerHandle

Commands <=30 are inherited from #IAppletAccessor. GetLibraryAppletInfo is identical to the #ILibraryAppletSelfAccessor cmd.

SetOutOfFocusApplicationSuspendingEnabled

Takes an input u8 bool, no output.

PushInData

Takes an input #IStorage, no output.

PopOutData

No input, returns an output #IStorage.

PushExtraStorage

Takes an input #IStorage, no output.

PushInteractiveInData

Takes an input #IStorage, no output.

PopInteractiveOutData

No input, returns an output #IStorage.

GetPopOutDataEvent

No input, returns an output handle.

GetPopInteractiveOutDataEvent

No input, returns an output event handle with autoclear=false.

NeedsToExitProcess

No input, returns an output u8 bool.

RequestForAppletToGetForeground

No input/output.

GetIndirectLayerConsumerHandle

Takes an input PID and an input u64 AppletResourceUserId, returns an output u64 IndirectLayerConsumerHandle.

Official sw uses this during LibraryApplet creation when #LibraryAppletMode is 0x3.

ICommonStateGetter

Cmd Name Notes
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
20 #PushToGeneralChannel
30 #GetHomeButtonReaderLockAccessor
31 [2.0.0+] #GetReaderLockAccessorEx
32: [7.0.0+] Takes a total of 4-bytes of input, returns an output #ILockAccessor.
40 [2.0.0+] GetCradleFwVersion
50 [3.0.0+] #IsVrModeEnabled
51 [3.0.0+] #SetVrModeEnabled
52 [4.0.0+] SetLcdBacklighOffEnabled
53 [7.0.0+] No input/output.
54 [7.0.0+] No input/output.
55 [3.0.0+] #IsInControllerFirmwareUpdateSection
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 [6.0.0+] GetApplicationIdByContentActionName
66 [6.0.0+] SetCpuAndGpuBoostMode
80 [6.0.0+] PerformSystemButtonPressingIfInFocus
90 [7.0.0+] Takes an input u8, no output.
91 [7.0.0+] No input, returns a total of 4-bytes of output.
200 [7.0.0+] No input, returns a total of 4-bytes of output.

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 #NotificationMessage).

GetEventHandle

No input. Returns an output event handle. This is signalled when a message is available with #ReceiveMessage.

ReceiveMessage

No input. Returns an output u32. Error 0x680 indicates no message is available.

GetThisAppletKind

No input, returns an output #AppletKind.

GetOperationMode

No input. Returns an output u8 for the current #OperationMode.

GetPerformanceMode

No input. Returns an output u32 for the current PerformanceMode.

GetCradleStatus

No input, returns an output u8.

GetBootMode

No input, returns an output u8.

GetCurrentFocusState

No input. Returns an output u8:

  • 1: In focus.
  • 2/3: Out of focus(running in "background").

GetAcquiredSleepLockEvent

No input, returns an output handle.

PushToGeneralChannel

Takes an input #IStorage, no output.

This is not usable under an Application, however it is usable under a LibraryApplet.

Used for sending requests to qlaunch. sdk-nso creates a 0x10-byte storage which is sent to this. The following are the functions which use this, with the data written to the storage:

  • RequestHomeMenu 5341 4d53 0100 0000 0200 0000 0100 0000 Returns to the main Home Menu, equivalent to pressing the HOME button.
  • RequestJumpToSystemUpdate 5341 4d53 0100 0000 0b00 0000 0100 0000 Equivalent to entering "System Update" under System Settings. When leaving this, it returns to the main Home Menu.

GetHomeButtonReaderLockAccessor

No input, returns an output #ILockAccessor.

GetReaderLockAccessorEx

Takes an input u32, returns an output #ILockAccessor.

IsVrModeEnabled

No input, returns an output u8 bool.

SetVrModeEnabled

Takes an input u8 bool flag. No output.

Updates internal AM state fields. If the new state doesn't match the previous state, this uses the Backlight_services {Disable/Enable}VrMode command depending on whether flag={disable/enable}.

When the VrMode is set to true, the console shows a screen rendered like vr asking the user to move his face away and hit the 'close' button. When this button is pressed, the console resets the vrMode to false.

IsInControllerFirmwareUpdateSection

No input, returns an output u8 bool.

GetDefaultDisplayResolutionChangeEvent

No input, returns an output handle.

ISelfController

Cmd Name Notes
0 #Exit
1 #LockExit
2 #UnlockExit
3 [2.0.0+] #EnterFatalSection
4 [2.0.0+] #LeaveFatalSection
9 #GetLibraryAppletLaunchableEvent
10 #SetScreenShotPermission
11 #SetOperationModeChangedNotification
12 #SetPerformanceModeChangedNotification
13 #SetFocusHandlingMode
14 SetRestartMessageEnabled
15 [2.0.0+] #SetScreenShotAppletIdentityInfo
16 [2.0.0+] #SetOutOfFocusSuspendingEnabled
17 [3.0.0+] SetControllerFirmwareUpdateSection
18 [3.0.0+] SetRequiresCaptureButtonShortPressedMessage
19 [3.0.0+] #SetScreenShotImageOrientation
20 [4.0.0+] SetDesirableKeyboardLayout
40 #CreateManagedDisplayLayer
41 [4.0.0+] IsSystemBufferSharingEnabled
42 [4.0.0+] GetSystemSharedLayerHandle
43 [6.0.0+] GetSystemSharedBufferHandle
50 SetHandlesRequestToDisplay
51 ApproveToDisplay
60 OverrideAutoSleepTimeAndDimmingTime
61 #SetMediaPlaybackState
62 SetIdleTimeDetectionExtension
63 GetIdleTimeDetectionExtension
64 SetInputDetectionSourceSet
65 [2.0.0+] ReportUserIsActive
66 [3.0.0+] GetCurrentIlluminance
67 [3.0.0+] #IsIlluminanceAvailable
68 [4.0.0+] SetAutoSleepDisabled
69 [4.0.0+] IsAutoSleepDisabled
70 [5.0.0+] ReportMultimediaError
71 [6.0.0+] GetCurrentIlluminanceEx
80 [5.0.0+] SetWirelessPriorityMode
90 [6.0.0+] GetAccumulatedSuspendedTickValue
91 [6.0.0+] GetAccumulatedSuspendedTickChangedEvent
100 [7.0.0+] Takes an input u8, no output.
1000 [7.0.0+] No input, returns an output #IUnknown1.

Exit

No input/output.

LockExit

No input/output.

Locks exit process of pressing X to close in HOME Menu for an application or HOME button for an applet. When locked, it will show the "waiting for software to be closed dialog" until UnlockExit is called or a 15 seconds timeout (when the latter occurs, the process is force-terminated).

UnlockExit

No input/output.

Unlocks exit process, if LockExit was previously used.

EnterFatalSection

No input/output.

LeaveFatalSection

No input/output.

GetLibraryAppletLaunchableEvent

No input, returns an output event handle with autoclear=false.

SetScreenShotPermission

Takes an input s32. No output.

Controls whether screenshot-capture is allowed. 0 = disable, 1 = enable, 2 = unknown.

SetOperationModeChangedNotification

Takes an input u8 bool flag. No output.

SetPerformanceModeChangedNotification

Takes an input u8 bool flag. No output.

SetFocusHandlingMode

Takes 3 input u8s with each field located immediately after the previous u8, these are bool flags. No output.

SetScreenShotAppletIdentityInfo

Takes an input 0x10-byte struct AppletIdentityInfo. No output.

SetOutOfFocusSuspendingEnabled

Takes an input u8(bool flag). No output.

SetScreenShotImageOrientation

Takes an input s32. No output.

CreateManagedDisplayLayer

Returns an output u64 LayerId which is then used by the user-process with Display_services#OpenLayer.

SetMediaPlaybackState

Takes an input u8 bool, no output.

IsIlluminanceAvailable

No input, returns an output u8 bool.

IUnknown1

Added with 7.0.0.

Cmd Name Notes
0 No input, returns an output #IStorage.
1 No input, returns an output #IStorage.
2 No input, returns an output #IStorage.
3 No input, returns an output handle.
4 No input/output.

IWindowController

Cmd Name Notes
0 #CreateWindow
1 #GetAppletResourceUserId
2 [6.0.0+] GetAppletResourceUserIdOfCallerApplet
10 #AcquireForegroundRights
11 ReleaseForegroundRights
12 RejectToChangeIntoBackground
20 [7.0.0+] Takes an input u8, no output.
21 [7.0.0+] Takes a total of 8-bytes of input, no output.

CreateWindow

Takes an input u32, returns an output #IWindow.

GetAppletResourceUserId

Returns an output u64: #AppletResourceUserId.

AcquireForegroundRights

No input/output.

IAudioController

Cmd Name
0 SetExpectedMasterVolume
1 GetMainAppletExpectedMasterVolume
2 GetLibraryAppletExpectedMasterVolume
3 ChangeMainAppletMasterVolume
4 SetTransparentVolumeRate

GetMainAppletExpectedMasterVolume/SetExpectedMasterVolume are used for saving/restoring state for LibraryApplet launching, with SetExpectedMasterVolume being used with new state prior to launching a LibraryApplet. With official sw these applet funcs are used directly in the main-codebin.

IDisplayController

Cmd Name
0 GetLastForegroundCaptureImage
1 UpdateLastForegroundCaptureImage
2 GetLastApplicationCaptureImage
3 GetCallerAppletCaptureImage
4 UpdateCallerAppletCaptureImage
5 GetLastForegroundCaptureImageEx
6 GetLastApplicationCaptureImageEx
7 GetCallerAppletCaptureImageEx
8 [2.0.0+] TakeScreenShotOfOwnLayer
9 [5.0.0+] CopyBetweenCaptureBuffers
10 #AcquireLastApplicationCaptureBuffer
11 ReleaseLastApplicationCaptureBuffer
12 #AcquireLastForegroundCaptureBuffer
13 ReleaseLastForegroundCaptureBuffer
14 #AcquireCallerAppletCaptureBuffer
15 ReleaseCallerAppletCaptureBuffer
16 AcquireLastApplicationCaptureBufferEx
17 AcquireLastForegroundCaptureBufferEx
18 AcquireCallerAppletCaptureBufferEx
20 [2.0.0+] ClearCaptureBuffer
21 [2.0.0+] ClearAppletTransitionBuffer
22 [4.0.0+] AcquireLastApplicationCaptureSharedBuffer
23 [4.0.0+] ReleaseLastApplicationCaptureSharedBuffer
24 [4.0.0+] AcquireLastForegroundCaptureSharedBuffer
25 [4.0.0+] ReleaseLastForegroundCaptureSharedBuffer
26 [4.0.0+] AcquireCallerAppletCaptureSharedBuffer
27 [4.0.0+] ReleaseCallerAppletCaptureSharedBuffer
28 [6.0.0+] TakeScreenShotOfOwnLayerEx

AcquireLastApplicationCaptureBuffer

No input, returns an output handle.

AcquireLastForegroundCaptureBuffer

No input, returns an output handle.

AcquireCallerAppletCaptureBuffer

No input, returns an output handle.

ISystemAppletControllerForDebug

Cmd Name Notes
1 RequestLaunchApplicationForDebug
2 [7.0.0+] No input, returns an output #IUnknown1.
3 [7.0.0+] Takes a total of 8-bytes of input, returns an #IStorage.

IProcessWindingController

Cmd Name Notes
0 #GetLaunchReason
11 #OpenCallingLibraryApplet
21 #PushContext
22 #PopContext
23 CancelWindingReservation
30 WindAndDoReserved
40 #ReserveToStartAndWaitAndUnwindThis
41 [4.0.0+] ReserveToStartAndWait

GetLaunchReason

No input. Returns an u32 AppletProcessLaunchReason.

Used by LibraryApplets.

OpenCallingLibraryApplet

No input, returns an output #ILibraryAppletAccessor.

PushContext

Takes an input #IStorage, no output.

PopContext

No input, returns an output #IStorage.

ReserveToStartAndWaitAndUnwindThis

Takes an input #ILibraryAppletAccessor, no output.

IDebugFunctions

Cmd Name Notes
0 NotifyMessageToHomeMenuForDebug
1 #OpenMainApplication
10 EmulateButtonEvent
20 InvalidateTransitionLayer
30 [6.0.0+] RequestLaunchApplicationWithUserAndArgumentForDebug
40 [6.0.0+] GetAppletResourceUsageInfo

OpenMainApplication

No input, returns an output #IApplicationAccessor.

IStorage

Cmd Name Notes
0 Open No input. Returns an #IStorageAccessor.
1 [2.0.0+] OpenTransferStorage No input. Returns an #ITransferStorageAccessor.

Open can only be used when the IStorage was created by #CreateStorage or #CreateTransferMemoryStorage. OpenTransferStorage can only be used when the IStorage was created by #CreateHandleStorage.

Only 1 *Accessor session can be open for each IStorage at a time.

IStorageAccessor

Cmd Name Notes
0 GetSize No input. Returns an s64.
10 Write Takes an input s64 and a type-0x21 input buffer.
11 Read Takes an input s64 and a type-0x22 output buffer.

ITransferStorageAccessor

Cmd Name Notes
0 GetSize No input. Returns an output s64.
1 GetHandle No input. Returns an output s64 and handle.

These commands return the data originally from #CreateHandleStorage input, both return the same s64.

appletOE

This is "nn::am::service::IApplicationProxyService".

Cmd Name Notes
0 #OpenApplicationProxy

This is used by all regular-applications, including flog and "Retail Interactive Display Menu". Only one session can be open for this service at a time.

OpenApplicationProxy

Returns an #IApplicationProxy. See #appletAE.

Takes a reserved input u64(official user-processes use hard-coded value 0), a PID, and a process copy-handle(cur-proc handle alias).

On failure, official user-processes will retry using this command in a loop while the retval is 0x19280, with svcSleepThread(10000000) being called first.

idle:sys

This is "nn::idle::detail::IPolicyManagerSystem"

Cmd Name
0 GetAutoPowerDownEvent
1 [1.0.0-3.0.2]
[7.0.0+]
2 [1.0.0-3.0.2]
3 SetHandlingContext
4 LoadAndApplySettings
5 ReportUserIsActive

omm

This is "nn::omm::detail::IOperationModeManager"

Operation Mode Manager (OMM) is a service responsible for arbitrating the operation changes between docked and handheld modes. Besides PTM_services, this is the only service that interacts with the Dock through usb:pd*.

Cmd Name Notes
0 GetOperationMode
1 GetOperationModeChangeEvent
2 EnableAudioVisual
3 DisableAudioVisual
4 EnterSleepAndWait
5 GetCradleStatus
6 FadeInDisplay
7 FadeOutDisplay
8 [2.0.0+] GetCradleFwVersion
9 [2.0.0+] NotifyCecSettingsChanged
10 [3.0.0+] SetOperationModePolicy
11 [3.0.0+] GetDefaultDisplayResolution
12 [3.0.0+] GetDefaultDisplayResolutionChangeEvent
13 [3.0.0+] UpdateDefaultDisplayResolution
14 [3.0.0+] ShouldSleepOnBoot
15 [4.0.0+] NotifyHdcpApplicationExecutionStarted
16 [4.0.0+] NotifyHdcpApplicationExecutionFinished
17 [4.0.0+] NotifyHdcpApplicationDrawingStarted
18 [4.0.0+] NotifyHdcpApplicationDrawingFinished
19 [4.0.0+] GetHdcpAuthenticationFailedEvent
20 [4.0.0+] GetHdcpAuthenticationFailedEmulationEnabled
21 [4.0.0+] SetHdcpAuthenticationFailedEmulation
22 [4.0.0+] GetHdcpStateChangeEvent
23 [4.0.0+] GetHdcpState
24 [5.0.0+] ShowCardUpdateProcessing
25 [5.0.0+] SetApplicationCecSettingsAndNotifyChanged
26 [7.0.0+] No input, returns a total of 4-bytes of output.

spsm

This is "nn::spsm::detail::IPowerStateInterface".

Cmd Name
0 GetState
1 SleepSystemAndWaitAwake
2
3
4 GetNotificationMessageEventHandle
5
6
7
8 AnalyzePerformanceLogForLastSleepWakeSequence
9 ChangeHomeButtonLongPressingTime
10
11 [1.0.0-3.0.2]

tcap

This is "nn::tcap::server::IManager".

Cmd Name
0 GetContinuousHighSkinTemperatureEvent
1 SetOperationMode
2 LoadAndApplySettings

caps:su

This is "nn::capsrv::sf::IScreenShotApplicationService".

This was added with 6.0.0.

This can be used by applications to save screenshots.

Cmd Name Notes
32 [7.0.0+] Takes a total of 0x10-bytes of input and a PID, no output.
201 SaveScreenShot
203 SaveScreenShotEx0
210 SaveScreenShotEx2 Takes a total of 0x50-bytes of input, a type-0x15 input buffer, and a type-0x45 input buffer. Returns a total of 0x20-bytes of output.

Cmd32 is a wrapper for caps:c cmd33. Commands 201, 203, and 210 are wrappers for caps:sc cmd210.

SaveScreenShot

Takes two input u32s, an u64 AppletResourceUserId, a PID, and a type-0x45 input buffer. Returns a 0x20-byte struct ApplicationAlbumEntry.

Official user-processes doesn't use this, instead #SaveScreenShotEx0 is used: ScreenShotAttributeEx0 is all-zero except +0 is set to an input u32.

SaveScreenShotEx0

Takes an input 0x40-byte struct ScreenShotAttributeEx0, an input u32, an input u64 AppletResourceUserId, a PID, and a type-0x45 input buffer. Returns a 0x20-byte struct ApplicationAlbumEntry.

Library Applets

This section documents library applet launching.

Before starting the applet, #IStorages are created and written, then passed to #ILibraryAppletAccessor PushInData. The #IStorage session is closed afterwards. The first #IStorage is #CommonArguments, followed by any applet-specific #IStorages.

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 IStorage passed to applets should contain the common library applet arguments. This is populated by nn::la::CommonArgumentsWriter 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.

Offset Size Typical Value Notes
0x0 4 1 Common Arguments version
0x4 4 0x20 Common Arguments size
0x8 4 Library applet version (API version)
0xC 4 0 Theme color
0x10 1 0 Play startup sound
0x18 8 N/A System tick (see svcGetSystemTick)

Enums

AppletId

See also Category:Library Applets.

ID Title-id Description
0x02 010000000000100C "overlayDisp"
0x03 0100000000001000 "qlaunch"
0x04 0100000000001012 "starter"
0x0A 0100000000001001 "auth"
0x0B 0100000000001002 "cabinet"
0x0C 0100000000001003 "controller"
0x0D 0100000000001004 "dataErase"
0x0E 0100000000001005 "error"
0x0F 0100000000001006 "netConnect"
0x10 0100000000001007 "playerSelect"
0x11 0100000000001008 "swkbd"
0x12 0100000000001009 "miiEdit"
0x13 010000000000100A "LibAppletWeb" WebApplet applet
0x14 010000000000100B "LibAppletShop" ShopN applet
0x15 010000000000100D "photoViewer"
0x16 010000000000100E "set"
0x17 010000000000100F "LibAppletOff" Offline applet
0x18 0100000000001010 "LibAppletLns" Whitelisted applet
0x19 0100000000001011 "LibAppletAuth" WifiWebAuth applet
0x1A 0100000000001013 "myPage"

LibraryAppletMode

ID Description
0x0 AllForeground
0x1 Background
0x2 Unknown
0x3 Unknown, see also #GetIndirectLayerConsumerHandle. Only used by swkbd InlineKeyboard.

ShimKind

This is from strings and code in the web-applets.

This indicates the type of web-applet.

shimKind value Description
2 LoginApplet
4 ShareApplet
5 WebApplet
6 WifiWebAuthApplet
7 LobbyApplet

NotificationMessage

ID Description
0x4 Exit requested
0xF FocusState changed
0x10 ?
0x1E OperationMode changed
0x1F PerformanceMode changed

OperationMode

Value Description
0 Handheld
1 Docked

LaunchParameterKind

Value Description
1 Application-specific LaunchParameter
2 account PreselectedUser
3 Unknown if used by anything?

LibraryAppletExitReason

Value Description
0 Normal
1 Canceled
2 Abnormal
10 Unexpected

AppletResourceUserId

This u64 is officially called "nn::applet::AppletResourceUserId". Used by a number of non-AM services.

LibraryAppletInfo

This struct is 8-bytes: +0 u32 is #AppletId, +4 u32 is #LibraryAppletMode.

AppletKind

This is 8-bytes.