Applet Manager services

From Nintendo Switch Brew
Revision as of 22:07, 3 December 2017 by Qlutoo (talk | contribs) (→‎spsm)
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 OpenLibraryAppletProxy ( [3.0.0+] OpenLibraryAppletProxyOld) 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.

All of these commands except #OpenLibraryAppletProxy take the same input as #OpenApplicationProxy, with the same user-process retry-loop as #OpenApplicationProxy.

This service seems to be used by all system non-regular-applications.

OpenLibraryAppletProxy

Returns an #IApplicationProxy.

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 Returns an IStorage.
21 GetPopFromGeneralChannelEvent
30 GetHomeButtonWriterLockAccessor Returns an #ILockAccessor.
31 [2.0.0+] GetWriterLockAccessorEx Returns an #ILockAccessor.

ILockAccessor

Cmd Name
1 TryLock
2 Unlock
3 GetEvent

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

IApplicationCreator

Cmd Name Notes
0 CreateApplication Returns an #IApplicationAccessor.
1 PopLaunchRequestedApplication Returns an #IApplicationAccessor.
10 CreateSystemApplication Returns an #IApplicationAccessor.
100 PopFloatingApplicationForDevelopment 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 Returns an #IAppletAccessor.
120 GetApplicationId
121 PushLaunchParameter Returns an IStorage.
122 GetApplicationControlProperty
123 [2.0.0+] GetApplicationLaunchProperty
IAppletAccessor
Cmd Name
0 GetAppletStateChangedEvent
1 IsCompleted
10 Start
20 RequestExit
25 Terminate
30 GetResult

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 GetLibraryAppletSelfAccessor Returns an #ILibraryAppletSelfAccessor.
1000 GetDebugFunctions Returns an #IDebugFunctions.

ILibraryAppletSelfAccessor

Cmd Name Notes
0 PopInData Returns an IStorage.
1 PushOutData Returns an IStorage.
2 PopInteractiveInData Returns an IStorage.
3 PushInteractiveOutData Returns an IStorage.
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
20 PopExtraStorage Returns an IStorage.
25 GetPopExtraStorageEvent
30 UnpopInData Returns an IStorage.
31 UnpopExtraStorage Returns an IStorage.
40 [2.0.0+] GetIndirectLayerProducerHandle
50 [2.0.0+] ReportVisibleError

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

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 Returns an IStorage.
10 CreateApplicationAndPushAndRequestToStart Returns an IStorage.
11 [2.0.0+] CreateApplicationAndPushAndRequestToStartForQuest Returns an IStorage.
20 EnsureSaveData
21 GetDesiredLanguage
22 SetTerminateResult
23 GetDisplayVersion
24 [2.0.0+] GetLaunchStorageInfoForDebug
25 [2.0.0+] ExtendSaveData
26 [2.0.0+] GetSaveDataSize
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
70 [3.0.0+] RequestToShutdown
71 [3.0.0+] RequestToReboot

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.

NotifyRunning

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

InitializeGamePlayRecording

Takes a TransferMemory handle and an u64 for the size of the TransferMemory.

SetGamePlayRecordingState

Takes an input u32.

ILibraryAppletCreator

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

ILibraryAppletAccessor

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

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 Returns an IStorage.
30 GetHomeButtonReaderLockAccessor Returns an #ILockAccessor.
31 [2.0.0+] GetReaderLockAccessorEx Returns an #ILockAccessor.
40 [2.0.0+] GetCradleFwVersion
50 [3.0.0+] IsVrModeEnabled
51 [3.0.0+] #SetVrModeEnabled
55 [3.0.0+] IsInControllerFirmwareUpdateSection
60 [3.0.0+] GetDefaultDisplayResolution
61 [3.0.0+] GetDefaultDisplayResolutionChangeEvent

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?

GetCurrentFocusState

No input. Returns an output u8.

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

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 [2.0.0+] SetControllerFirmwareUpdateSection
18 [2.0.0+] SetRequiresCaptureButtonShortPressedMessage
19 [2.0.0+] SetScreenShotImageOrientation
40 #CreateManagedDisplayLayer
50 SetHandlesRequestToDisplay
51 ApproveToDisplay
60 OverrideAutoSleepTimeAndDimmingTime
61 SetMediaPlaybackState
62 SetIdleTimeDetectionExtension
63 GetIdleTimeDetectionExtension
64 SetInputDetectionSourceSet
65 [2.0.0+] ReportUserIsActive
66 [2.0.0+] GetCurrentIlluminance
67 [2.0.0+] IsIlluminanceAvailable

SetFocusHandlingMode

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

SetOutOfFocusSuspendingEnabled

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

CreateManagedDisplayLayer

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

IWindowController

Cmd Name Notes
0 CreateWindow Returns an IWindow object.
1 #GetAppletResourceUserId
10 #AcquireForegroundRights
11 ReleaseForegroundRights
12 RejectToChangeIntoBackground

GetAppletResourceUserId

Returns an output u64: #AppletResourceUserId.

AcquireForegroundRights

No input/output.

IAudioController

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

IDisplayController

Cmd Name
0 GetLastForegroundCaptureImage
1 UpdateLastForegroundCaptureImage
2 GetLastApplicationCaptureImage
3 GetCallerAppletCaptureImage
4 UpdateCallerAppletCaptureImage
5 GetLastForegroundCaptureImageEx
6 GetLastApplicationCaptureImageEx
7 GetCallerAppletCaptureImageEx
8 [2.0.0+] TakeScreenShotOfOwnLayer
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

ILibraryAppletCreator

Cmd Name Notes
0 CreateLibraryApplet Returns a #ILibraryAppletAccessor.
1 TerminateAllLibraryApplets
2 AreAnyLibraryAppletsLeft
10 CreateStorage Returns an IStorage.
11 CreateTransferMemoryStorage Returns an IStorage.
12 [2.0.0+] CreateHandleStorage Returns an IStorage.

IProcessWindingController

Cmd Name Notes
0 GetLaunchReason
11 OpenCallingLibraryApplet Returns an #ILibraryAppletAccessor.
21 PushContext Returns an IStorage.
22 PopContext Returns an IStorage.
23 CancelWindingReservation
30 WindAndDoReserved
40 ReserveToStartAndWaitAndUnwindThis Returns an #ILibraryAppletAccessor.

IDebugFunctions

Cmd Name Notes
0 NotifyMessageToHomeMenuForDebug
1 OpenMainApplication Returns an #IApplicationAccessor.
10 EmulateButtonEvent
20 InvalidateTransitionLayer

appletOE

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

Cmd Name Notes
0 #OpenApplicationProxy

This seems to be used by all(?) regular-applications, even flog.

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

omm

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+]
9 [2.0.0+]

spsm

This is "IPowerStateInterface".


Cmd Name
0 GetState
1 SleepSystemAndWaitAwake
2
3
4
5
6
7
8
9

Enums

AppletId

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
0x17 010000000000100F "LibAppletOff" Offline applet
0x18 0100000000001010 "LibAppletLns" Whitelisted applet
0x19 0100000000001011 "LibAppletAuth" WifiWebAuth applet
0x1A 0100000000001013 "myPage"

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

AppletResourceUserId

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