Applet Manager services

From Nintendo Switch Brew
Revision as of 02:56, 13 December 2018 by Yellows8 (talk | contribs)
Jump to: navigation, 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.

Contents

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.
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
0 RequestToEnterSleep
1 EnterSleep
2 StartSleepSequence
3 StartShutdownSequence
4 StartRebootSequence
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.

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.
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.
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
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
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, returns an output #IStorage.

CreateApplicationAndPushAndRequestToStart

Takes an input u64 titleID and an input #IStorage, no output.

CreateApplicationAndPushAndRequestToStartForQuest

Takes 2 input u32s, an input u64 titleID, and an input #IStorage, no output.

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.

BeginBlockingHomeButton

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

NotifyRunning

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

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.

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 u64 for the storage size, returns an #IStorage.

CreateTransferMemoryStorage

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

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

CreateHandleStorage

Takes an input copy-handle and an input u64, returns an #IStorage.

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.

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
40 [2.0.0+] GetCradleFwVersion
50 [3.0.0+] #IsVrModeEnabled
51 [3.0.0+] #SetVrModeEnabled
52 [4.0.0+] SetLcdBacklighOffEnabled
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

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.

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

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.

IsIlluminanceAvailable

No input, returns an output u8 bool.

IWindowController

Cmd Name Notes
0 #CreateWindow
1 #GetAppletResourceUserId
2 [6.0.0+] GetAppletResourceUserIdOfCallerApplet
10 #AcquireForegroundRights
11 ReleaseForegroundRights
12 RejectToChangeIntoBackground

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

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 OpenTransferStorage No input. Returns an #ITransferStorageAccessor.

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 u64 and handle.

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]
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
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

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

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.

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

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

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.