Difference between revisions of "Applet Manager services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(→‎ISelfController: Imported from SwIPC.)
Line 239: Line 239:
 
| 6 || GetPopInteractiveInDataEvent ||
 
| 6 || GetPopInteractiveInDataEvent ||
 
|-
 
|-
| 10 || ExitProcessAndReturn ||
+
| 10 || [[#ExitProcessAndReturn]] ||
 
|-
 
|-
 
| 11 || [[#GetLibraryAppletInfo]] ||
 
| 11 || [[#GetLibraryAppletInfo]] ||
Line 267: Line 267:
 
| 50 || [2.0.0+] ReportVisibleError ||
 
| 50 || [2.0.0+] ReportVisibleError ||
 
|}
 
|}
 +
 +
====ExitProcessAndReturn====
 +
No input/output.
 +
 +
Exits the LibraryApplet and returns to running the title which launched this LibraryApplet ([[qlaunch]] for example).
  
 
====GetLibraryAppletInfo====
 
====GetLibraryAppletInfo====

Revision as of 17:22, 13 February 2018

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.

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 #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 Takes 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 Takes an #IStorage.
2 PopInteractiveInData Returns an #IStorage.
3 PushInteractiveOutData Takes 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 Takes an #IStorage.
31 UnpopExtraStorage Takes an #IStorage.
40 [2.0.0+] GetIndirectLayerProducerHandle
50 [2.0.0+] ReportVisibleError

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 u64 LibraryAppletInfo: +0 u32 is #AppletId, +4 u32 is #LibraryAppletMode.

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 Takes an #IStorage.
11 [2.0.0+] CreateApplicationAndPushAndRequestToStartForQuest Takes 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.

SetTerminateResult

Takes an input u32 Result, no output.

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

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 Takes an #IStorage.
101 PopOutData Returns an #IStorage.
102 PushExtraStorage Takes an #IStorage.
103 PushInteractiveInData Takes 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 Takes 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

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.

GetOperationMode

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

GetPerformanceMode

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

GetCurrentFocusState

No input. Returns an output u8:

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

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 [3.0.0+] SetControllerFirmwareUpdateSection
18 [3.0.0+] SetRequiresCaptureButtonShortPressedMessage
19 [3.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 [3.0.0+] GetCurrentIlluminance
67 [3.0.0+] IsIlluminanceAvailable

Exit

No input/output.

LockExit

No input/output.

UnlockExit

No input/output.

EnterFatalSection

No input/output.

LeaveFatalSection

No input/output.

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.

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 Takes an #IStorage.
22 PopContext Returns an #IStorage.
23 CancelWindingReservation
30 WindAndDoReserved
40 ReserveToStartAndWaitAndUnwindThis Returns an #ILibraryAppletAccessor.

GetLaunchReason

No input. Returns an u32 AppletProcessLaunchReason.

Used by LibraryApplets.

IDebugFunctions

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

IStorage

Cmd Name Notes
0 Open No input. Returns an #IStorageAccessor.
1 OpenTransferStorage No input. Returns an #ITransferStorageAccessor.

Commands which take an IStorage as input use an unknown input u32 for that.

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

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

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

spsm

This is "nn::spsm::detail::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"

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