Applet Manager services: Difference between revisions
| Line 14: | Line 14: | ||
| 200 || OpenLibraryAppletProxyOld || Returns an [[#ILibraryAppletProxy]]. | | 200 || OpenLibraryAppletProxyOld || Returns an [[#ILibraryAppletProxy]]. | ||
|- | |- | ||
| 201 || OpenLibraryAppletProxy || Returns an [[#ILibraryAppletProxy]]. | | 201 || [[#OpenLibraryAppletProxy]] || Returns an [[#ILibraryAppletProxy]]. | ||
|- | |- | ||
| 300 || OpenOverlayAppletProxy || Returns an [[#IOverlayAppletProxy]]. | | 300 || OpenOverlayAppletProxy || Returns an [[#IOverlayAppletProxy]]. | ||
| Line 24: | Line 24: | ||
|} | |} | ||
All of these commands take the same input as [[#OpenApplicationProxy]], with the same user-process retry-loop as [[#OpenApplicationProxy]]. | 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. | This service seems to be used by all system non-regular-applications. | ||
== OpenLibraryAppletProxy == | |||
Returns an [[#IApplicationProxy]]. | |||
Takes a [[IPC_Marshalling|reserved]] input u64(official user-processes use hard-code 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 == | == ISystemAppletProxy == | ||
Revision as of 03:22, 23 November 2017
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 | Returns an #ILibraryAppletProxy. |
| 201 | #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-code 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 | 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 | NotifyCecSettingsChanged |
| 12 | SetDefaultHomeButtonLongPressTime |
| 13 | UpdateDefaultDisplayResolution |
| 14 | 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 | 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 | GetMainAppletApplicationControlProperty | |
| 16 | GetMainAppletStorageId | |
| 17 | GetCallerAppletIdentityInfoStack | |
| 20 | PopExtraStorage | Returns an IStorage. |
| 25 | GetPopExtraStorageEvent | |
| 30 | UnpopInData | Returns an IStorage. |
| 31 | UnpopExtraStorage | Returns an IStorage. |
| 40 | GetIndirectLayerProducerHandle | |
| 50 | 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 | SetAutoSleepTimeAndDimmingTimeEnabled |
| 5 | TerminateApplicationAndSetReason |
| 6 | 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 | CreateApplicationAndPushAndRequestToStartForQuest | Returns an IStorage. |
| 20 | EnsureSaveData | |
| 21 | GetDesiredLanguage | |
| 22 | SetTerminateResult | |
| 23 | GetDisplayVersion | |
| 24 | GetLaunchStorageInfoForDebug | |
| 25 | ExtendSaveData | |
| 26 | GetSaveDataSize | |
| 30 | BeginBlockingHomeButtonShortAndLongPressed | |
| 31 | EndBlockingHomeButtonShortAndLongPressed | |
| 32 | BeginBlockingHomeButton | |
| 33 | EndBlockingHomeButton | |
| 40 | #NotifyRunning | |
| 50 | GetPseudoDeviceId | |
| 60 | 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):
- Creates TransferMemory using the input buffer and size, with permissions=0.
- Uses #InitializeGamePlayRecording with the TransferMemory.
- Closes the TransferMemory handle, + TransferMemory cleanup.
- Uses #SetGamePlayRecordingState with value 0x1.
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 | 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 | 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 | GetReaderLockAccessorEx | Returns an #ILockAccessor. |
| 40 | GetCradleFwVersion | |
| 50 | IsVrModeEnabled | |
| 51 | SetVrModeEnabled | |
| 55 | IsInControllerFirmwareUpdateSection | |
| 60 | GetDefaultDisplayResolution | |
| 61 | GetDefaultDisplayResolutionChangeEvent |
ISelfController
| Cmd | Name |
|---|---|
| 0 | Exit |
| 1 | LockExit |
| 2 | UnlockExit |
| 3 | EnterFatalSection |
| 4 | LeaveFatalSection |
| 9 | GetLibraryAppletLaunchableEvent |
| 10 | SetScreenShotPermission |
| 11 | SetOperationModeChangedNotification |
| 12 | SetPerformanceModeChangedNotification |
| 13 | SetFocusHandlingMode |
| 14 | SetRestartMessageEnabled |
| 15 | SetScreenShotAppletIdentityInfo |
| 16 | SetOutOfFocusSuspendingEnabled |
| 17 | SetControllerFirmwareUpdateSection |
| 18 | SetRequiresCaptureButtonShortPressedMessage |
| 19 | SetScreenShotImageOrientation |
| 40 | CreateManagedDisplayLayer |
| 50 | SetHandlesRequestToDisplay |
| 51 | ApproveToDisplay |
| 60 | OverrideAutoSleepTimeAndDimmingTime |
| 61 | SetMediaPlaybackState |
| 62 | SetIdleTimeDetectionExtension |
| 63 | GetIdleTimeDetectionExtension |
| 64 | SetInputDetectionSourceSet |
| 65 | ReportUserIsActive |
| 66 | GetCurrentIlluminance |
| 67 | IsIlluminanceAvailable |
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.
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 | TakeScreenShotOfOwnLayer |
| 10 | AcquireLastApplicationCaptureBuffer |
| 11 | ReleaseLastApplicationCaptureBuffer |
| 12 | AcquireLastForegroundCaptureBuffer |
| 13 | ReleaseLastForegroundCaptureBuffer |
| 14 | AcquireCallerAppletCaptureBuffer |
| 15 | ReleaseCallerAppletCaptureBuffer |
| 16 | AcquireLastApplicationCaptureBufferEx |
| 17 | AcquireLastForegroundCaptureBufferEx |
| 18 | AcquireCallerAppletCaptureBufferEx |
| 20 | ClearCaptureBuffer |
| 21 | 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 | 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-code 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 | GetOmmWaitEvent |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 |
spsm
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.