Line 65: |
Line 65: |
| | | |
| == ISystemAppletProxy == | | == ISystemAppletProxy == |
| + | This is "nn::am::service::ISystemAppletProxy". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 95: |
Line 97: |
| | | |
| === IHomeMenuFunctions === | | === IHomeMenuFunctions === |
| + | This is "nn::am::service::IHomeMenuFunctions". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 10 || [[#RequestToGetForeground]] |
| + | |- |
| + | | 11 || [[#LockForeground]] |
| + | |- |
| + | | 12 || [[#UnlockForeground]] |
| + | |- |
| + | | 20 || [[#PopFromGeneralChannel]] |
| + | |- |
| + | | 21 || [[#GetPopFromGeneralChannelEvent]] |
| |- | | |- |
− | | 10 || [[#RequestToGetForeground]] || | + | | 30 || [[#GetHomeButtonWriterLockAccessor]] |
| |- | | |- |
− | | 11 || [[#LockForeground]] || | + | | 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] |
| |- | | |- |
− | | 12 || [[#UnlockForeground]] || | + | | 40 || [11.0.0+] [[#IsSleepEnabled]] |
| |- | | |- |
− | | 20 || [[#PopFromGeneralChannel]] || | + | | 41 || [12.0.0+] [[#IsRebootEnabled]] |
| |- | | |- |
− | | 21 || [[#GetPopFromGeneralChannelEvent]] || | + | | 50 || [16.0.0+] [[#LaunchSystemApplet]] |
| |- | | |- |
− | | 30 || [[#GetHomeButtonWriterLockAccessor]] || | + | | 51 || [16.0.0+] [[#LaunchStarter]] |
| |- | | |- |
− | | 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] || | + | | 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]] |
| |- | | |- |
− | | 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]] || | + | | 110 || [9.0.0+] [[#IsForceTerminateApplicationDisabledForDebug]] |
| |- | | |- |
− | | 110 || [9.0.0+] [[#IsForceTerminateApplicationDisabledForDebug]] || | + | | 200 || [8.0.0+] [[#LaunchDevMenu]] |
| |- | | |- |
− | | 200 || [8.0.0+] [[#LaunchDevMenu]] || | + | | 1000 || [11.0.0+] [[#SetLastApplicationExitReason]] |
| |} | | |} |
| | | |
Line 144: |
Line 158: |
| | | |
| The input value must be 0-3. 0 = HomeButton. | | The input value must be 0-3. 0 = HomeButton. |
| + | |
| + | ==== IsSleepEnabled ==== |
| + | No input, returns an output bool. |
| + | |
| + | ==== IsRebootEnabled ==== |
| + | No input, returns an output bool. |
| + | |
| + | ==== LaunchSystemApplet ==== |
| + | No input/output. |
| + | |
| + | This wraps [[NS_Services|ns]] LaunchSystemApplet, ignoring the u64 returned by that cmd (and other functionality). |
| + | |
| + | ==== LaunchStarter ==== |
| + | No input/output. |
| + | |
| + | This is similar to [[#LaunchSystemApplet]], except this uses [[NS_Services|ns]] LaunchLibraryApplet with a ProgramId from global state. |
| + | |
| + | The global state field is initialized elsewhere with the value of [[System_Settings|system-setting]] <code>am.debug!starter_id</code>, defaulting to ProgramId 0100000000001012 ([[Title_list|starter]]) if not available. |
| | | |
| ==== PopRequestLaunchApplicationForDebug ==== | | ==== PopRequestLaunchApplicationForDebug ==== |
Line 160: |
Line 192: |
| The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. |
| | | |
− | Uses [[NS_Services#IApplicationManagerInterface]] cmd99. | + | Uses [[NS_Services|ns]] LaunchDevMenu. |
| | | |
| This is used by [[qlaunch]]. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | | This is used by [[qlaunch]]. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. |
| + | |
| + | ==== SetLastApplicationExitReason ==== |
| + | Takes an input s32, no output. |
| | | |
| ==== ILockAccessor ==== | | ==== ILockAccessor ==== |
| + | This is "nn::am::service::ILockAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 175: |
Line 212: |
| | 3 || [[#GetEvent]] | | | 3 || [[#GetEvent]] |
| |- | | |- |
− | | 4 || [10.0.0+] IsLocked | + | | 4 || [10.0.0+] [[#IsLocked]] |
| |} | | |} |
| | | |
Line 190: |
Line 227: |
| ===== GetEvent ===== | | ===== GetEvent ===== |
| No input, returns an output Event handle with autoclear=false. | | No input, returns an output Event handle with autoclear=false. |
| + | |
| + | ==== IsLocked ==== |
| + | No input, returns an output u8 bool. |
| | | |
| === IGlobalStateController === | | === IGlobalStateController === |
| + | This is "nn::am::service::IGlobalStateController". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#RequestToEnterSleep]] |
| |- | | |- |
− | | 0 || [[#RequestToEnterSleep]] || | + | | 1 || [[#EnterSleep]] |
| |- | | |- |
− | | 1 || [[#EnterSleep]] || | + | | 2 || [[#StartSleepSequence]] |
| |- | | |- |
− | | 2 || [[#StartSleepSequence]] || | + | | 3 || [[#StartShutdownSequence]] |
| |- | | |- |
− | | 3 || [[#StartShutdownSequence]] || | + | | 4 || [[#StartRebootSequence]] |
| |- | | |- |
− | | 4 || [[#StartRebootSequence]] || | + | | 9 || [7.0.0+] [[#IsAutoPowerDownRequested]] |
| |- | | |- |
− | | 9 || [7.0.0+] [[#IsAutoPowerDownRequested]] || | + | | 10 || [[#LoadAndApplyIdlePolicySettings]] |
| |- | | |- |
− | | 10 || [[#LoadAndApplyIdlePolicySettings]] || | + | | 11 || [2.0.0+] [[#NotifyCecSettingsChanged]] |
| |- | | |- |
− | | 11 || [2.0.0+] [[#NotifyCecSettingsChanged]] || | + | | 12 || [3.0.0+] [[#SetDefaultHomeButtonLongPressTime]] |
| |- | | |- |
− | | 12 || [3.0.0+] [[#SetDefaultHomeButtonLongPressTime]] || | + | | 13 || [3.0.0+] [[#UpdateDefaultDisplayResolution]] |
| |- | | |- |
− | | 13 || [3.0.0+] [[#UpdateDefaultDisplayResolution]] || | + | | 14 || [3.0.0+] [[#ShouldSleepOnBoot]] |
| |- | | |- |
− | | 14 || [3.0.0+] [[#ShouldSleepOnBoot]] || | + | | 15 || [4.0.0+] [[#GetHdcpAuthenticationFailedEvent]] |
| |- | | |- |
− | | 15 || [4.0.0+] [[#GetHdcpAuthenticationFailedEvent]] || | + | | 30 || [12.0.0+] [[#OpenCradleFirmwareUpdater]] |
| |} | | |} |
| | | |
Line 275: |
Line 319: |
| Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent. | | Uses [[#omm]] cmd GetHdcpAuthenticationFailedEvent. |
| | | |
− | === IApplicationCreator === | + | ==== OpenCradleFirmwareUpdater ==== |
| + | No input, returns an [[#ICradleFirmwareUpdater]]. |
| + | |
| + | === ICradleFirmwareUpdater === |
| + | This is "nn::am::service::ICradleFirmwareUpdater". |
| + | |
| + | This was added with [12.0.0+]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 0 || StartUpdate |
| + | |- |
| + | | 1 || FinishUpdate |
| |- | | |- |
− | | 0 || [[#CreateApplication]] || | + | | 2 || [[#GetCradleDeviceInfo]] |
| |- | | |- |
− | | 1 || [[#PopLaunchRequestedApplication]] || | + | | 3 || GetCradleDeviceInfoChangeEvent |
| |- | | |- |
− | | 10 || [[#CreateSystemApplication]] || | + | | 4 || GetUpdateProgressInfo |
| |- | | |- |
− | | 100 || [[#PopFloatingApplicationForDevelopment]] || | + | | 5 || GetLastInternalResult |
| |} | | |} |
| | | |
− | [[#CreateApplication]]/[[#CreateSystemApplication]] eventually call the same internal func. With [[#CreateApplication]], two ptrs passed to the internal func are NULL, while with [[#CreateSystemApplication]] these are loaded from state. The initial content of [[#ApplicationLaunchRequestInfo]] is all-zero with [[#CreateSystemApplication]], while with [[#CreateApplication]] the first two u32s are value 0x3 with the rest all-zero. The [[#AppletId]] is set to 0x01 with [[#CreateApplication]], while with [[#CreateSystemApplication]] it's 0x04. | + | ==== GetCradleDeviceInfo ==== |
| + | No input, returns a 8-byte CradleDeviceInfo. |
| + | |
| + | [13.0.0+] Now returns a total of 0xC-bytes. |
| + | |
| + | === IApplicationCreator === |
| + | This is "nn::am::service::IApplicationCreator". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#CreateApplication]] |
| + | |- |
| + | | 1 || [[#PopLaunchRequestedApplication]] |
| + | |- |
| + | | 10 || [[#CreateSystemApplication]] |
| + | |- |
| + | | 100 || [[#PopFloatingApplicationForDevelopment]] |
| + | |} |
| + | |
| + | [[#CreateApplication]]/[[#CreateSystemApplication]] eventually call the same internal func. With [[#CreateApplication]], two ptrs passed to the internal func are NULL, while with [[#CreateSystemApplication]] these are loaded from state. The initial content of [[#ApplicationLaunchRequestInfo]] is all-zero with [[#CreateSystemApplication]], while with [[#CreateApplication]] the first two u32s are value 0x3 with the rest all-zero. The [[#AppletId]] is set to 0x01 with [[#CreateApplication]], while with [[#CreateSystemApplication]] it's 0x04. |
| | | |
| ==== CreateApplication ==== | | ==== CreateApplication ==== |
Line 308: |
Line 384: |
| | | |
| ==== IApplicationAccessor ==== | | ==== IApplicationAccessor ==== |
| + | This is "nn::am::service::IApplicationAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 360: |
Line 438: |
| | 190 || [9.0.0+] [[#PushToNotificationStorageChannel]] || | | | 190 || [9.0.0+] [[#PushToNotificationStorageChannel]] || |
| |- | | |- |
− | | 200 || [10.0.0+] || | + | | 200 || [10.0.0+] [[#RequestApplicationSoftReset]] || |
| |- | | |- |
− | | 201 || [10.0.0+] || | + | | 201 || [10.0.0+] [[#RestartApplicationTimer]] || |
| |} | | |} |
| | | |
Line 442: |
Line 520: |
| | | |
| [[qlaunch]] will only push data for this when launching the Application when the Alarm was triggered, where the system was previously in sleep-mode. This data is the [[Glue_services|Notification]] ApplicationParameter. | | [[qlaunch]] will only push data for this when launching the Application when the Alarm was triggered, where the system was previously in sleep-mode. This data is the [[Glue_services|Notification]] ApplicationParameter. |
| + | |
| + | ===== RequestApplicationSoftReset ===== |
| + | No input/output. |
| + | |
| + | ===== RestartApplicationTimer ===== |
| + | No input/output. |
| | | |
| ===== IAppletAccessor ===== | | ===== IAppletAccessor ===== |
| + | This is "nn::am::service::IAppletAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 480: |
Line 566: |
| | | |
| == IAppletCommonFunctions == | | == IAppletCommonFunctions == |
− | Added with [[7.0.0]].
| + | This is "nn::am::service::IAppletCommonFunctions". |
| + | |
| + | This was added with [7.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 0 || [9.0.0+] [[#SetTerminateResult]] |
| + | |- |
| + | | 10 || [[#ReadThemeStorage]] |
| + | |- |
| + | | 11 || [[#WriteThemeStorage]] |
| + | |- |
| + | | 20 || [9.0.0+] [[#PushToAppletBoundChannel]] |
| + | |- |
| + | | 21 || [9.0.0+] [[#TryPopFromAppletBoundChannel]] |
| + | |- |
| + | | 40 || [8.0.0+] [[#GetDisplayLogicalResolution]] |
| + | |- |
| + | | 42 || [8.0.0+] [[#SetDisplayMagnification]] |
| + | |- |
| + | | 50 || [8.0.0+] [[#SetHomeButtonDoubleClickEnabled]] |
| + | |- |
| + | | 51 || [8.0.0+] [[#GetHomeButtonDoubleClickEnabled]] |
| + | |- |
| + | | 52 || [10.0.0+] [[#IsHomeButtonShortPressedBlocked]] |
| + | |- |
| + | | 60 || [11.0.0+] [[#IsVrModeCurtainRequired]] |
| + | |- |
| + | | 61 || [12.0.0+] IsSleepRequiredByHighTemperature |
| + | |- |
| + | | 62 || [12.0.0+] IsSleepRequiredByLowBattery |
| |- | | |- |
− | | 0 || [9.0.0+] [[#SetTerminateResult]] || | + | | 70 || [11.0.0+] [[#SetCpuBoostRequestPriority]] |
| |- | | |- |
− | | 10 || [[#ReadThemeStorage]] || | + | | 80 || [14.0.0+] SetHandlingCaptureButtonShortPressedMessageEnabledForApplet |
| |- | | |- |
− | | 11 || [[#WriteThemeStorage]] || | + | | 81 || [14.0.0+] SetHandlingCaptureButtonLongPressedMessageEnabledForApplet |
| |- | | |- |
− | | 20 || [9.0.0+] [[#PushToAppletBoundChannel]] || | + | | 82 || [18.0.0+] |
| |- | | |- |
− | | 21 || [9.0.0+] [[#TryPopFromAppletBoundChannel]] || | + | | 90 || [15.0.0+] OpenNamedChannelAsParent |
| |- | | |- |
− | | 40 || [8.0.0+] [[#GetDisplayLogicalResolution]] || | + | | 91 || [15.0.0+] OpenNamedChannelAsChild |
| |- | | |- |
− | | 42 || [8.0.0+] [[#SetDisplayMagnification]] || | + | | 100 || [15.0.0+] SetApplicationCoreUsageMode |
| |- | | |- |
− | | 50 || [8.0.0+] [[#SetHomeButtonDoubleClickEnabled]] || | + | | 160 || [18.0.0+] |
| |- | | |- |
− | | 51 || [8.0.0+] [[#GetHomeButtonDoubleClickEnabled]] || | + | | 161 || [18.0.0+] |
| |- | | |- |
− | | 52 || [10.0.0+] IsHomeButtonShortPressedBlocked || | + | | 300 || [17.0.0+] |
| |} | | |} |
| | | |
Line 540: |
Line 654: |
| === GetHomeButtonDoubleClickEnabled === | | === GetHomeButtonDoubleClickEnabled === |
| No input, returns an output u8 bool. | | No input, returns an output u8 bool. |
| + | |
| + | === IsHomeButtonShortPressedBlocked === |
| + | No input, returns an output u8 bool. |
| + | |
| + | === IsVrModeCurtainRequired === |
| + | No input, returns an output bool. |
| + | |
| + | === SetCpuBoostRequestPriority === |
| + | Takes an input s32, no output. |
| | | |
| == ILibraryAppletProxy == | | == ILibraryAppletProxy == |
| + | This is "nn::am::service::ILibraryAppletProxy". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 563: |
Line 688: |
| |- | | |- |
| | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | | | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. |
| + | |- |
| + | | 22 || [15.0.0+] GetHomeMenuFunctions || No input, returns an [[#IHomeMenuFunctions]]. |
| + | |- |
| + | | 23 || [15.0.0+] GetGlobalStateController || No input, returns an [[#IGlobalStateController]]. |
| |- | | |- |
| | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | | | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. |
Line 568: |
Line 697: |
| | | |
| === ILibraryAppletSelfAccessor === | | === ILibraryAppletSelfAccessor === |
| + | This is "nn::am::service::ILibraryAppletSelfAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 638: |
Line 769: |
| | 130 || [9.0.0+] [[#GetGpuErrorDetectedSystemEvent]] || | | | 130 || [9.0.0+] [[#GetGpuErrorDetectedSystemEvent]] || |
| |- | | |- |
− | | 140 || [10.0.0+] SetApplicationMemoryReservation || | + | | 140 || [10.0.0+] [[#SetApplicationMemoryReservation]] || |
| + | |- |
| + | | 150 || [10.0.0+] [[#ShouldSetGpuTimeSliceManually]] || |
| |- | | |- |
− | | 150 || [10.0.0+] ShouldSetGpuTimeSliceManually || | + | | 160 || [17.0.0+] [[#Cmd160]] || |
| |} | | |} |
| | | |
Line 765: |
Line 898: |
| | | |
| Normally the output bool is set to 0, however when no users are available it's set to 1 with '''total_entries''' = -1. | | Normally the output bool is set to 0, however when no users are available it's set to 1 with '''total_entries''' = -1. |
| + | |
| + | ==== SetApplicationMemoryReservation ==== |
| + | Takes an input u64, no output. |
| + | |
| + | An Application must be currently running. The input u64 must be 0x1000-byte aligned. |
| + | |
| + | ==== ShouldSetGpuTimeSliceManually ==== |
| + | No input, returns an output u8 bool. |
| + | |
| + | ==== Cmd160 ==== |
| + | No input, returns an output u64. Currently always returns 0. |
| | | |
| == IOverlayAppletProxy == | | == IOverlayAppletProxy == |
| + | This is "nn::am::service::IOverlayAppletProxy". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 788: |
Line 934: |
| |- | | |- |
| | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. | | | 21 || [7.0.0+] GetAppletCommonFunctions || No input, returns an [[#IAppletCommonFunctions]]. |
| + | |- |
| + | | 23 || [15.0.0+] GetGlobalStateController || No input, returns an [[#IGlobalStateController]]. |
| |- | | |- |
| | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. | | | 1000 || GetDebugFunctions || Returns an [[#IDebugFunctions]]. |
Line 793: |
Line 941: |
| | | |
| === IOverlayFunctions === | | === IOverlayFunctions === |
| + | This is "nn::am::service::IOverlayFunctions". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 816: |
Line 966: |
| |- | | |- |
| | 20 || [8.0.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] | | | 20 || [8.0.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] |
| + | |- |
| + | | 21 || [14.0.0+] SetHandlingTouchScreenInputEnabled |
| |- | | |- |
| | 30 || [9.0.0+] [[#SetHealthWarningShowingState]] | | | 30 || [9.0.0+] [[#SetHealthWarningShowingState]] |
| |- | | |- |
− | | 31 || [10.0.0+] IsHealthWarningRequired | + | | 31 || [10.0.0+] [[#IsHealthWarningRequired]] |
| + | |- |
| + | | 40 || [18.0.0+] |
| + | |- |
| + | | 41 || [18.0.0+] |
| |- | | |- |
| | 90 || [7.0.0+] [[#SetRequiresGpuResourceUse]] | | | 90 || [7.0.0+] [[#SetRequiresGpuResourceUse]] |
Line 868: |
Line 1,024: |
| | | |
| This writes the input bool into state, signals an Event, and returns 0. | | This writes the input bool into state, signals an Event, and returns 0. |
| + | |
| + | ==== IsHealthWarningRequired ==== |
| + | No input, returns an output u8 bool. |
| | | |
| ==== SetRequiresGpuResourceUse ==== | | ==== SetRequiresGpuResourceUse ==== |
Line 882: |
Line 1,041: |
| | | |
| == IApplicationProxy == | | == IApplicationProxy == |
| + | This is "nn::am::service::IApplicationProxy". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 906: |
Line 1,067: |
| | | |
| === IApplicationFunctions === | | === IApplicationFunctions === |
| + | This is "nn::am::service::IApplicationFunctions". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 1 || [[#PopLaunchParameter]] |
| + | |- |
| + | | 10 || [[#CreateApplicationAndPushAndRequestToStart]] |
| + | |- |
| + | | 11 || [3.0.0+] [[#CreateApplicationAndPushAndRequestToStartForQuest]] |
| + | |- |
| + | | 12 || [4.0.0+] [[#CreateApplicationAndRequestToStart]] |
| + | |- |
| + | | 13 || [4.0.0+] [[#CreateApplicationAndRequestToStartForQuest]] |
| + | |- |
| + | | 14 || [7.0.0+] [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]] |
| + | |- |
| + | | 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] |
| + | |- |
| + | | 20 || [[#EnsureSaveData]] |
| + | |- |
| + | | 21 || [[#GetDesiredLanguage]] |
| + | |- |
| + | | 22 || [[#SetTerminateResult]] |
| |- | | |- |
− | | 1 || [[#PopLaunchParameter]] || | + | | 23 || [[#GetDisplayVersion]] |
| |- | | |- |
− | | 10 || [[#CreateApplicationAndPushAndRequestToStart]] || | + | | 24 || [2.0.0+] [[#GetLaunchStorageInfoForDebug]] |
| |- | | |- |
− | | 11 || [3.0.0+] [[#CreateApplicationAndPushAndRequestToStartForQuest]] || | + | | 25 || [3.0.0+] ExtendSaveData |
| |- | | |- |
− | | 12 || [4.0.0+] [[#CreateApplicationAndRequestToStart]] || | + | | 26 || [3.0.0+] GetSaveDataSize |
| |- | | |- |
− | | 13 || [4.0.0+] [[#CreateApplicationAndRequestToStartForQuest]] || | + | | 27 || [5.0.0+] CreateCacheStorage |
| |- | | |- |
− | | 14 || [7.0.0+] [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]] || | + | | 28 || [11.0.0+] [[#GetSaveDataSizeMax]] |
| |- | | |- |
− | | 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] || | + | | 29 || [11.0.0+] [[#GetCacheStorageMax]] |
| |- | | |- |
− | | 20 || [[#EnsureSaveData]] || | + | | 30 || [[#BeginBlockingHomeButtonShortAndLongPressed]] |
| |- | | |- |
− | | 21 || [[#GetDesiredLanguage]] || | + | | 31 || [[#EndBlockingHomeButtonShortAndLongPressed]] |
| |- | | |- |
− | | 22 || [[#SetTerminateResult]] || | + | | 32 || [[#BeginBlockingHomeButton]] |
| |- | | |- |
− | | 23 || [[#GetDisplayVersion]] || | + | | 33 || [[#EndBlockingHomeButton]] |
| |- | | |- |
− | | 24 || [2.0.0+] [[#GetLaunchStorageInfoForDebug]] || | + | | 34 || [10.0.0-15.0.1] [[#SelectApplicationLicense]] |
| |- | | |- |
− | | 25 || [3.0.0+] ExtendSaveData || | + | | 35 || [11.0.0+] [[#GetDeviceSaveDataSizeMax]] |
| |- | | |- |
− | | 26 || [3.0.0+] GetSaveDataSize || | + | | 36 || [14.0.0+] GetLimitedApplicationLicense |
| |- | | |- |
− | | 27 || [5.0.0+] CreateCacheStorage || | + | | 37 || [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent |
| |- | | |- |
− | | 30 || [[#BeginBlockingHomeButtonShortAndLongPressed]] || | + | | 40 || [[#NotifyRunning]] |
| |- | | |- |
− | | 31 || [[#EndBlockingHomeButtonShortAndLongPressed]] || | + | | 50 || [2.0.0+] [[#GetPseudoDeviceId]] |
| |- | | |- |
− | | 32 || [[#BeginBlockingHomeButton]] || | + | | 60 || [2.0.0+] [[#SetMediaPlaybackStateForApplication]] |
| |- | | |- |
− | | 33 || [[#EndBlockingHomeButton]] || | + | | 65 || [3.0.0+] [[#IsGamePlayRecordingSupported]] |
| |- | | |- |
− | | 34 || [10.0.0+] SelectApplicationLicense || | + | | 66 || [3.0.0+] [[#InitializeGamePlayRecording]] |
| |- | | |- |
− | | 40 || [[#NotifyRunning]] || | + | | 67 || [3.0.0+] [[#SetGamePlayRecordingState]] |
| |- | | |- |
− | | 50 || [2.0.0+] [[#GetPseudoDeviceId]] || | + | | 68 || [4.0.0+] [[#RequestFlushGamePlayingMovieForDebug]] |
| |- | | |- |
− | | 60 || [2.0.0+] [[#SetMediaPlaybackStateForApplication]] || | + | | 70 || [3.0.0+] [[#RequestToShutdown]] |
| |- | | |- |
− | | 65 || [3.0.0+] [[#IsGamePlayRecordingSupported]] || | + | | 71 || [3.0.0+] [[#RequestToReboot]] |
| |- | | |- |
− | | 66 || [3.0.0+] [[#InitializeGamePlayRecording]] || | + | | 72 || [10.0.0+] [[#RequestToSleep]] |
| |- | | |- |
− | | 67 || [3.0.0+] [[#SetGamePlayRecordingState]] || | + | | 80 || [4.0.0+] [[#ExitAndRequestToShowThanksMessage]] |
| |- | | |- |
− | | 68 || [4.0.0+] [[#RequestFlushGamePlayingMovieForDebug]] || | + | | 90 || [4.0.0+] [[#EnableApplicationCrashReport]] |
| |- | | |- |
− | | 70 || [3.0.0+] [[#RequestToShutdown]] || | + | | 100 || [5.0.0+] [[#InitializeApplicationCopyrightFrameBuffer]] |
| |- | | |- |
− | | 71 || [3.0.0+] [[#RequestToReboot]] || | + | | 101 || [5.0.0+] [[#SetApplicationCopyrightImage]] |
| |- | | |- |
− | | 72 || [10.0.0+] RequestToSleep || | + | | 102 || [5.0.0+] [[#SetApplicationCopyrightVisibility]] |
| |- | | |- |
− | | 80 || [4.0.0+] [[#ExitAndRequestToShowThanksMessage]] || | + | | 110 || [5.0.0+] [[#QueryApplicationPlayStatistics]] |
| |- | | |- |
− | | 90 || [4.0.0+] [[#EnableApplicationCrashReport]] || | + | | 111 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUid]] |
| |- | | |- |
− | | 100 || [5.0.0+] [[#InitializeApplicationCopyrightFrameBuffer]] || | + | | 120 || [5.0.0+] [[#ExecuteProgram]] |
| |- | | |- |
− | | 101 || [5.0.0+] [[#SetApplicationCopyrightImage]] || | + | | 121 || [5.0.0+] [[#ClearUserChannel]] |
| |- | | |- |
− | | 102 || [5.0.0+] [[#SetApplicationCopyrightVisibility]] || | + | | 122 || [5.0.0+] [[#UnpopToUserChannel]] |
| |- | | |- |
− | | 110 || [5.0.0+] [[#QueryApplicationPlayStatistics]] || | + | | 123 || [5.0.0+] [[#GetPreviousProgramIndex]] |
| |- | | |- |
− | | 111 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUid]] || | + | | 124 || [6.0.0+] [[#EnableApplicationAllThreadDumpOnCrash]] |
| |- | | |- |
− | | 120 || [5.0.0+] [[#ExecuteProgram]] || | + | | 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] |
| |- | | |- |
− | | 121 || [5.0.0+] [[#ClearUserChannel]] || | + | | 131 || [11.0.0+] [[#SetDelayTimeToAbortOnGpuError]] |
| |- | | |- |
− | | 122 || [5.0.0+] [[#UnpopToUserChannel]] || | + | | 140 || [9.0.0+] [[#GetFriendInvitationStorageChannelEvent]] |
| |- | | |- |
− | | 123 || [5.0.0+] [[#GetPreviousProgramIndex]] || | + | | 141 || [9.0.0+] [[#TryPopFromFriendInvitationStorageChannel]] |
| |- | | |- |
− | | 124 || [6.0.0+] [[#EnableApplicationAllThreadDumpOnCrash]] || | + | | 150 || [9.0.0+] [[#GetNotificationStorageChannelEvent]] |
| |- | | |- |
− | | 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] || | + | | 151 || [9.0.0+] [[#TryPopFromNotificationStorageChannel]] |
| |- | | |- |
− | | 140 || [9.0.0+] [[#GetFriendInvitationStorageChannelEvent]] || | + | | 160 || [9.0.0+] [[#GetHealthWarningDisappearedSystemEvent]] |
| |- | | |- |
− | | 141 || [9.0.0+] [[#TryPopFromFriendInvitationStorageChannel]] || | + | | 170 || [9.0.0+] [[#SetHdcpAuthenticationActivated]] |
| |- | | |- |
− | | 150 || [9.0.0+] [[#GetNotificationStorageChannelEvent]] || | + | | 180 || [10.1.0+] [[#GetLaunchRequiredVersion]] |
| |- | | |- |
− | | 151 || [9.0.0+] [[#TryPopFromNotificationStorageChannel]] || | + | | 181 || [10.1.0+] [[#UpgradeLaunchRequiredVersion]] |
| |- | | |- |
− | | 160 || [9.0.0+] [[#GetHealthWarningDisappearedSystemEvent]] || | + | | 190 || [11.0.0+] [[#SendServerMaintenanceOverlayNotification]] |
| |- | | |- |
− | | 170 || [9.0.0+] [[#SetHdcpAuthenticationActivated]] || | + | | 200 || [11.0.0+] [[#GetLastApplicationExitReason]] |
| |- | | |- |
− | | 500 || [5.0.0+] [[#StartContinuousRecordingFlushForDebug]] || | + | | 500 || [5.0.0+] [[#StartContinuousRecordingFlushForDebug]] |
| |- | | |- |
− | | 1000 || [5.0.0+] [[#CreateMovieMaker]] || | + | | 1000 || [5.0.0+] [[#CreateMovieMaker]] |
| |- | | |- |
− | | 1001 || [5.0.0+] [[#PrepareForJit]] || | + | | 1001 || [5.0.0+] [[#PrepareForJit]] |
| |} | | |} |
| | | |
Line 1,079: |
Line 1,262: |
| | | |
| This returns two u8s loaded from state, these are the same StorageIds from [[#ApplicationLaunchProperty]]. | | This returns two u8s loaded from state, these are the same StorageIds from [[#ApplicationLaunchProperty]]. |
| + | |
| + | ==== GetSaveDataSizeMax ==== |
| + | No input, returns two ouput s64s. |
| + | |
| + | ==== GetCacheStorageMax ==== |
| + | No input, returns an output s32 and s64. |
| | | |
| ==== BeginBlockingHomeButtonShortAndLongPressed ==== | | ==== BeginBlockingHomeButtonShortAndLongPressed ==== |
Line 1,097: |
Line 1,286: |
| ==== EndBlockingHomeButton ==== | | ==== EndBlockingHomeButton ==== |
| No input/output. | | No input/output. |
| + | |
| + | ==== SelectApplicationLicense ==== |
| + | Takes an input array of [[#ApplicationLicenseType]], returns an output [[#ApplicationLicenseType]]. |
| + | |
| + | ==== GetDeviceSaveDataSizeMax ==== |
| + | No input, returns two output s64s. |
| | | |
| ==== NotifyRunning ==== | | ==== NotifyRunning ==== |
Line 1,132: |
Line 1,327: |
| | | |
| On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. | | On success, official sw will enter an infinite loop with sleep-thread value 86400000000000. |
| + | |
| + | ==== RequestToSleep ==== |
| + | No input/output. |
| | | |
| ==== ExitAndRequestToShowThanksMessage ==== | | ==== ExitAndRequestToShowThanksMessage ==== |
Line 1,151: |
Line 1,349: |
| | | |
| User-processes create the tmem with an user-specified buffer with permissions=0. '''width''' = 1280 and '''height''' = 720. | | User-processes create the tmem with an user-specified buffer with permissions=0. '''width''' = 1280 and '''height''' = 720. |
| + | |
| + | After the validation checks pass the input is passed to [[OMM_services|ommdisp]] cmd500. |
| | | |
| This is used as an overlay for screenshots. | | This is used as an overlay for screenshots. |
| | | |
| ==== SetApplicationCopyrightImage ==== | | ==== SetApplicationCopyrightImage ==== |
− | Takes a type-0x45 input buffer, an s32 '''x''', an s32 '''y''', an s32 '''width''', an s32 '''height''', an s32 '''WindowOriginMode''', and no output. | + | Takes a type-0x45 input buffer, an s32 '''x''', an s32 '''y''', an s32 '''width''', an s32 '''height''', an s32 [[#WindowOriginMode]], and no output. |
− | | |
− | The last s32 is "nn::oe::WindowOriginMode". This should be at least 1.
| |
| | | |
| '''x''' and '''y''' must not have the negative bit set. '''width''' and '''height''' must not be <1. | | '''x''' and '''y''' must not have the negative bit set. '''width''' and '''height''' must not be <1. |
Line 1,208: |
Line 1,406: |
| No input, returns an output Event handle with autoclear=false. | | No input, returns an output Event handle with autoclear=false. |
| | | |
− | This is used by sdknso during applet-application initialization. A separate thread is setup where event-waiting is handled. When the Event is signaled, official sw will assert. | + | This is used by sdknso during applet-application initialization. A separate thread is setup where event-waiting is handled. When the Event is signaled, official sw will Abort. |
| + | |
| + | ==== SetDelayTimeToAbortOnGpuError ==== |
| + | Takes an input s64 "nn::TimeSpan", no output. |
| | | |
| ==== GetFriendInvitationStorageChannelEvent ==== | | ==== GetFriendInvitationStorageChannelEvent ==== |
Line 1,239: |
Line 1,440: |
| ==== SetHdcpAuthenticationActivated ==== | | ==== SetHdcpAuthenticationActivated ==== |
| Takes an input u8 bool, no output. | | Takes an input u8 bool, no output. |
| + | |
| + | ==== GetLaunchRequiredVersion ==== |
| + | Takes an input [[NCM_services#ApplicationId|ApplicationId]], an u64, returns an output [[#LaunchRequiredVersion]]. |
| + | |
| + | sdknso passes hard-coded value 0 for the u64. |
| + | |
| + | ==== UpgradeLaunchRequiredVersion ==== |
| + | Takes an input [[#LaunchRequiredVersion]], an [[NCM_services#ApplicationId|ApplicationId]], an u64, no output. |
| + | |
| + | sdknso passes hard-coded value 0 for the u64. |
| + | |
| + | ==== SendServerMaintenanceOverlayNotification ==== |
| + | Takes two input [[PCV_services#PosixTime|PosixTime]], no output. |
| + | |
| + | The second input value can optionally be 0. |
| + | |
| + | ==== GetLastApplicationExitReason ==== |
| + | No input, returns an output s32. |
| | | |
| ==== StartContinuousRecordingFlushForDebug ==== | | ==== StartContinuousRecordingFlushForDebug ==== |
Line 1,253: |
Line 1,472: |
| | | |
| ==== PrepareForJit ==== | | ==== PrepareForJit ==== |
− | Takes no input. Launches title 010000000000003B (currently not present on retail systems) if some context variable is not set, with that context variable being initialized afterwards. | + | Takes no input. Launches the [[JIT_services|jit-sysmodule]] via [[NS_Services|ns]] LaunchLibraryApplet if it has not already been launched for the current application, storing a std::shared_ptr<> for jit-sysmodule process tracking object as an IApplicationFunctions member. |
| + | |
| + | ~IApplicationFunctions() includes: |
| + | |
| + | if (this->jit_process) { |
| + | Terminate(this->jit_process); |
| + | this->jit_process = nullptr; |
| + | } |
| + | |
| + | Thus the lifetime of the jit sysmodule is tied to the application which uses it, and each application gets its own fresh copy of the jit sysmodule. |
| + | |
| + | AM can also optionally launch jit-sysmodule automatically if the [[NACP]] enables it. |
| | | |
| === IMovieMaker === | | === IMovieMaker === |
| + | This is "nn::am::service::IMovieMaker". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,272: |
Line 1,504: |
| | | |
| == ILibraryAppletCreator == | | == ILibraryAppletCreator == |
| + | This is "nn::am::service::ILibraryAppletCreator". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,324: |
Line 1,558: |
| | | |
| === ILibraryAppletAccessor === | | === ILibraryAppletAccessor === |
| + | This is "nn::am::service::ILibraryAppletAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,342: |
Line 1,578: |
| | 50 || [[#SetOutOfFocusApplicationSuspendingEnabled]] || | | | 50 || [[#SetOutOfFocusApplicationSuspendingEnabled]] || |
| |- | | |- |
− | | 60 || [10.0.0+] PresetLibraryAppletGpuTimeSliceZero || | + | | 60 || [10.0.0+] [[#PresetLibraryAppletGpuTimeSliceZero]] || |
| |- | | |- |
| | 100 || [[#PushInData]] || | | | 100 || [[#PushInData]] || |
Line 1,373: |
Line 1,609: |
| | | |
| Official sw will assert prior to using this if applet-service was not initialized as *Application. | | Official sw will assert prior to using this if applet-service was not initialized as *Application. |
| + | |
| + | ==== PresetLibraryAppletGpuTimeSliceZero ==== |
| + | No input/output. |
| + | |
| + | sdknso only uses with with [[Software_Keyboard|swkbd-inline]], immediately after creating the LibraryApplet. |
| | | |
| ==== PushInData ==== | | ==== PushInData ==== |
Line 1,411: |
Line 1,652: |
| | | |
| == ICommonStateGetter == | | == ICommonStateGetter == |
| + | This is "nn::am::service::ICommonStateGetter". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#GetEventHandle]] |
| + | |- |
| + | | 1 || [[#ReceiveMessage]] |
| + | |- |
| + | | 2 || [[#GetThisAppletKind]] |
| |- | | |- |
− | | 0 || [[#GetEventHandle]] || | + | | 3 || [[#AllowToEnterSleep]] |
| |- | | |- |
− | | 1 || [[#ReceiveMessage]] || | + | | 4 || [[#DisallowToEnterSleep]] |
| |- | | |- |
− | | 2 || [[#GetThisAppletKind]] || | + | | 5 || [[#GetOperationMode]] |
| |- | | |- |
− | | 3 || [[#AllowToEnterSleep]] || | + | | 6 || [[#GetPerformanceMode]] |
| |- | | |- |
− | | 4 || [[#DisallowToEnterSleep]] || | + | | 7 || [[#GetCradleStatus]] |
| |- | | |- |
− | | 5 || [[#GetOperationMode]] || | + | | 8 || [[#GetBootMode]] |
| |- | | |- |
− | | 6 || [[#GetPerformanceMode]] || | + | | 9 || [[#GetCurrentFocusState]] |
| |- | | |- |
− | | 7 || [[#GetCradleStatus]] || | + | | 10 || [[#RequestToAcquireSleepLock]] |
| |- | | |- |
− | | 8 || [[#GetBootMode]] || | + | | 11 || [[#ReleaseSleepLock]] |
| |- | | |- |
− | | 9 || [[#GetCurrentFocusState]] || | + | | 12 || [[#ReleaseSleepLockTransiently]] |
| |- | | |- |
− | | 10 || [[#RequestToAcquireSleepLock]] || | + | | 13 || [[#GetAcquiredSleepLockEvent]] |
| |- | | |- |
− | | 11 || [[#ReleaseSleepLock]] || | + | | 14 || [11.0.0+] [[#GetWakeupCount]] |
| |- | | |- |
− | | 12 || [[#ReleaseSleepLockTransiently]] || | + | | 20 || [[#PushToGeneralChannel]] |
| |- | | |- |
− | | 13 || [[#GetAcquiredSleepLockEvent]] || | + | | 30 || [[#GetHomeButtonReaderLockAccessor]] |
| |- | | |- |
− | | 20 || [[#PushToGeneralChannel]] || | + | | 31 || [2.0.0+] [[#GetReaderLockAccessorEx]] |
| |- | | |- |
− | | 30 || [[#GetHomeButtonReaderLockAccessor]] || | + | | 32 || [7.0.0+] [[#GetWriterLockAccessorEx]] |
| |- | | |- |
− | | 31 || [2.0.0+] [[#GetReaderLockAccessorEx]] || | + | | 40 || [2.0.0+] [[#GetCradleFwVersion]] |
| |- | | |- |
− | | 32 || [7.0.0+] [[#GetWriterLockAccessorEx]] || | + | | 50 || [3.0.0+] [[#IsVrModeEnabled]] |
| |- | | |- |
− | | 40 || [2.0.0+] [[#GetCradleFwVersion]] || | + | | 51 || [3.0.0+] [[#SetVrModeEnabled]] |
| |- | | |- |
− | | 50 || [3.0.0+] [[#IsVrModeEnabled]] || | + | | 52 || [4.0.0+] [[#SetLcdBacklighOffEnabled]] |
| |- | | |- |
− | | 51 || [3.0.0+] [[#SetVrModeEnabled]] || | + | | 53 || [7.0.0+] [[#BeginVrModeEx]] |
| |- | | |- |
− | | 52 || [4.0.0+] [[#SetLcdBacklighOffEnabled]] || | + | | 54 || [7.0.0+] [[#EndVrModeEx]] |
| |- | | |- |
− | | 53 || [7.0.0+] [[#BeginVrModeEx]] || | + | | 55 || [3.0.0+] [[#IsInControllerFirmwareUpdateSection]] |
| |- | | |- |
− | | 54 || [7.0.0+] [[#EndVrModeEx]] || | + | | 59 || [11.0.0+] [[#SetVrPositionForDebug]] |
| |- | | |- |
− | | 55 || [3.0.0+] [[#IsInControllerFirmwareUpdateSection]] || | + | | 60 || [3.0.0+] [[#GetDefaultDisplayResolution]] |
| |- | | |- |
− | | 60 || [3.0.0+] [[#GetDefaultDisplayResolution]] || | + | | 61 || [3.0.0+] [[#GetDefaultDisplayResolutionChangeEvent]] |
| |- | | |- |
− | | 61 || [3.0.0+] [[#GetDefaultDisplayResolutionChangeEvent]] || | + | | 62 || [4.0.0+] [[#GetHdcpAuthenticationState]] |
| |- | | |- |
− | | 62 || [4.0.0+] [[#GetHdcpAuthenticationState]] || | + | | 63 || [4.0.0+] [[#GetHdcpAuthenticationStateChangeEvent]] |
| |- | | |- |
− | | 63 || [4.0.0+] [[#GetHdcpAuthenticationStateChangeEvent]] || | + | | 64 || [5.0.0+] [[#SetTvPowerStateMatchingMode]] |
| |- | | |- |
− | | 64 || [5.0.0+] [[#SetTvPowerStateMatchingMode]] || | + | | 65 || [5.1.0+] [[#GetApplicationIdByContentActionName]] |
| |- | | |- |
− | | 65 || [5.1.0+] [[#GetApplicationIdByContentActionName]] || | + | | 66 || [6.0.0+] [[#SetCpuBoostMode]] |
| |- | | |- |
− | | 66 || [6.0.0+] [[#SetCpuBoostMode]] || | + | | 67 || [10.0.0+] [[#CancelCpuBoostMode]] |
| |- | | |- |
− | | 67 || [10.0.0+] CancelCpuBoostMode || | + | | 68 || [11.0.0+] [[#GetBuiltInDisplayType]] |
| |- | | |- |
− | | 80 || [6.0.0+] [[#PerformSystemButtonPressingIfInFocus]] || | + | | 80 || [6.0.0+] [[#PerformSystemButtonPressingIfInFocus]] |
| |- | | |- |
− | | 90 || [7.0.0+] [[#SetPerformanceConfigurationChangedNotification]] || | + | | 90 || [7.0.0+] [[#SetPerformanceConfigurationChangedNotification]] |
| |- | | |- |
− | | 91 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]] || | + | | 91 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]] |
| |- | | |- |
− | | 100 || [9.1.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] || | + | | 100 || [9.1.0+] [[#SetHandlingHomeButtonShortPressedEnabled]] |
| |- | | |- |
− | | 200 || [7.0.0+] [[#GetOperationModeSystemInfo]] || | + | | 110 || [11.0.0+] [[#OpenMyGpuErrorHandler]] |
| |- | | |- |
− | | 300 || [9.0.0+] [[#GetSettingsPlatformRegion]] || | + | | 120 || [13.0.0+] GetAppletLaunchedHistory |
| |- | | |- |
− | | 400 || [10.0.0+] ActivateMigrationService || | + | | 200 || [7.0.0+] [[#GetOperationModeSystemInfo]] |
| |- | | |- |
− | | 401 || [10.0.0+] DeactivateMigrationService || | + | | 300 || [9.0.0+] [[#GetSettingsPlatformRegion]] |
− | |} | + | |- |
− | | + | | 400 || [10.0.0+] [[#ActivateMigrationService]] |
− | 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 [[#AppletMessage]]). | + | |- |
| + | | 401 || [10.0.0+] [[#DeactivateMigrationService]] |
| + | |- |
| + | | 500 || [11.0.0+] [[#DisableSleepTillShutdown]] |
| + | |- |
| + | | 501 || [11.0.0+] [[#SuppressDisablingSleepTemporarily]] |
| + | |- |
| + | | 502 || [12.0.0+] IsSleepEnabled |
| + | |- |
| + | | 503 || [12.0.0+] IsDisablingSleepSuppressed |
| + | |- |
| + | | 600 || [17.0.0+] OpenNamedChannelAsChild |
| + | |- |
| + | | 900 || [11.0.0+] [[#SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled]] |
| + | |- |
| + | | 910 || [17.0.0+] GetLaunchRequiredTick |
| + | |} |
| + | |
| + | 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 [[#AppletMessage]]). |
| | | |
| [7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl. | | [7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl. |
Line 1,527: |
Line 1,794: |
| | | |
| === GetPerformanceMode === | | === GetPerformanceMode === |
− | No input. Returns an output u32 for the current PerformanceMode. | + | No input. Returns an output u32 for the current [[#PerformanceMode]]. |
| | | |
| === GetCradleStatus === | | === GetCradleStatus === |
Line 1,540: |
Line 1,807: |
| | | |
| === GetCurrentFocusState === | | === GetCurrentFocusState === |
− | No input. Returns an output u8: | + | No input. Returns an output u8 [[#FocusState]]. |
− | | |
− | * 1: In focus.
| |
− | * 2/3: Out of focus(running in "background").
| |
| | | |
| === RequestToAcquireSleepLock === | | === RequestToAcquireSleepLock === |
Line 1,556: |
Line 1,820: |
| === GetAcquiredSleepLockEvent === | | === GetAcquiredSleepLockEvent === |
| No input, returns an output Event handle with autoclear=false. | | No input, returns an output Event handle with autoclear=false. |
| + | |
| + | === GetWakeupCount === |
| + | No input, returns an output u64. |
| | | |
| === PushToGeneralChannel === | | === PushToGeneralChannel === |
Line 1,613: |
Line 1,880: |
| === IsInControllerFirmwareUpdateSection === | | === IsInControllerFirmwareUpdateSection === |
| No input, returns an output u8 bool. | | No input, returns an output u8 bool. |
| + | |
| + | === SetVrPositionForDebug === |
| + | Takes 4 input s32s, no output. |
| + | |
| + | The s32s are: x, y, width, height. |
| + | |
| + | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. |
| + | |
| + | width must be 1-1280, height must be 1-720. |
| + | |
| + | x and y must not be negative. x+width must be <=1280. y+height must be <=720. |
| | | |
| === GetDefaultDisplayResolution === | | === GetDefaultDisplayResolution === |
Line 1,635: |
Line 1,913: |
| | | |
| === SetCpuBoostMode === | | === SetCpuBoostMode === |
− | Takes an input u32 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. | + | Takes an input u32 [[#CpuBoostMode]] and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. |
| + | |
| + | === CancelCpuBoostMode === |
| + | No input/output. |
| + | |
| + | === GetBuiltInDisplayType === |
| + | No input, returns an output s32. |
| + | |
| + | This is not exposed by sdknso. |
| + | |
| + | This loads a s32 index from global state (originates from [[SPL_services#GetConfig|GetConfig]] [[SMC#HardwareType|HardwareType]]), Aborts if it's out-of-bounds, then the following is returned for the output s32: global_array[loaded_index]. |
| | | |
| === PerformSystemButtonPressingIfInFocus === | | === PerformSystemButtonPressingIfInFocus === |
Line 1,647: |
Line 1,935: |
| === GetCurrentPerformanceConfiguration === | | === GetCurrentPerformanceConfiguration === |
| No input, returns the result of calling [[PPC_services#apm:sys|GetCurrentPerformanceConfiguration]]. | | No input, returns the result of calling [[PPC_services#apm:sys|GetCurrentPerformanceConfiguration]]. |
| + | |
| + | === OpenMyGpuErrorHandler === |
| + | No input, returns an [[#IGpuErrorHandler]]. |
| + | |
| + | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. |
| | | |
| === GetOperationModeSystemInfo === | | === GetOperationModeSystemInfo === |
Line 1,658: |
Line 1,951: |
| This just returns the output from [[Settings_services#GetPlatformRegion|setsys GetPlatformRegion]]. | | This just returns the output from [[Settings_services#GetPlatformRegion|setsys GetPlatformRegion]]. |
| | | |
− | == ISelfController == | + | === ActivateMigrationService === |
− | {| class="wikitable" border="1" | + | No input/output. |
| + | |
| + | Besides various other functionality, if required this eventually uses [[NS_Services|ns]] LaunchLibraryApplet to launch [[Migration_services|migration]]. |
| + | |
| + | === DeactivateMigrationService === |
| + | No input/output. |
| + | |
| + | === DisableSleepTillShutdown === |
| + | No input/output. |
| + | |
| + | === SuppressDisablingSleepTemporarily === |
| + | Takes an input u64 "nn::TimeSpanType", no output. |
| + | |
| + | === SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled === |
| + | No input/output. |
| + | |
| + | === IGpuErrorHandler === |
| + | This is "nn::am::service::IGpuErrorHandler". |
| + | |
| + | This was added with [11.0.0+]. |
| + | |
| + | This uses various [[NV_services#nvgem:cd|nvgem:cd]] commands. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 100 || [[#GetManualGpuErrorInfoSize]] |
| + | |- |
| + | | 101 || [[#GetManualGpuErrorInfo]] |
| + | |- |
| + | | 102 || [[#GetManualGpuErrorDetectionSystemEvent]] |
| + | |- |
| + | | 103 || [[#FinishManualGpuErrorHandling]] |
| + | |} |
| + | |
| + | ==== GetManualGpuErrorInfoSize ==== |
| + | No input, returns an output u64. |
| + | |
| + | ==== GetManualGpuErrorInfo ==== |
| + | Takes a type-0x6 output buffer, returns an output u64. |
| + | |
| + | The OutBuffer_size must be >= the output size from [[#GetManualGpuErrorInfoSize]]. |
| + | |
| + | sdknso exposes the buffer as <code>void*</code>. |
| + | |
| + | ==== GetManualGpuErrorDetectionSystemEvent ==== |
| + | No input, returns an output Event handle with EventClearMode=0. |
| + | |
| + | ==== FinishManualGpuErrorHandling ==== |
| + | No input/output. |
| + | |
| + | == ISelfController == |
| + | This is "nn::am::service::ISelfController". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
Line 1,696: |
Line 2,044: |
| |- | | |- |
| | 20 || [4.0.0+] [[#SetDesirableKeyboardLayout]] | | | 20 || [4.0.0+] [[#SetDesirableKeyboardLayout]] |
| + | |- |
| + | | 21 || [13.0.0+] GetScreenShotProgramId |
| |- | | |- |
| | 40 || [[#CreateManagedDisplayLayer]] | | | 40 || [[#CreateManagedDisplayLayer]] |
Line 1,705: |
Line 2,055: |
| | 43 || [5.0.0+] [[#GetSystemSharedBufferHandle]] | | | 43 || [5.0.0+] [[#GetSystemSharedBufferHandle]] |
| |- | | |- |
− | | 44 || [10.0.0+] CreateManagedDisplaySeparableLayer | + | | 44 || [10.0.0+] [[#CreateManagedDisplaySeparableLayer]] |
| |- | | |- |
− | | 45 || [10.0.0+] SetManagedDisplayLayerSeparationMode | + | | 45 || [10.0.0+] [[#SetManagedDisplayLayerSeparationMode]] |
| + | |- |
| + | | 46 || [13.0.0+] [[#SetRecordingLayerCompositionEnabled]] |
| |- | | |- |
| | 50 || [[#SetHandlesRequestToDisplay]] | | | 50 || [[#SetHandlesRequestToDisplay]] |
Line 1,748: |
Line 2,100: |
| |- | | |- |
| | 110 || [8.0.0+] [[#SetApplicationAlbumUserData]] | | | 110 || [8.0.0+] [[#SetApplicationAlbumUserData]] |
| + | |- |
| + | | 120 || [11.0.0+] [[#SaveCurrentScreenshot]] |
| + | |- |
| + | | 130 || [13.0.0+] [[#SetRecordVolumeMuted]] |
| |- | | |- |
| | 1000 || [7.0.0+] [[#GetDebugStorageChannel]] | | | 1000 || [7.0.0+] [[#GetDebugStorageChannel]] |
Line 1,858: |
Line 2,214: |
| | | |
| Same as [[#GetSystemSharedLayerHandle]] except this just gets the SharedBufferHandle. | | Same as [[#GetSystemSharedLayerHandle]] except this just gets the SharedBufferHandle. |
| + | |
| + | === CreateManagedDisplaySeparableLayer === |
| + | No input, returns two output u64 LayerIds. |
| + | |
| + | sdknso now uses this instead of [[#CreateManagedDisplayLayer]]. sdknso caches the output from the cmd so that it's only used once. The first u64 is used the same as the original LayerId from [[#CreateManagedDisplayLayer]]. <code>nn::vi::CreateRecordingLayer</code> uses the second LayerId, the layer creation is identical besides which LayerId is used. |
| + | |
| + | === SetManagedDisplayLayerSeparationMode === |
| + | Takes an input u32, no output. |
| + | |
| + | sdknso exposes this as <code>nn::vi::SetRecordingLayerEnabled(bool)</code>. |
| + | |
| + | The input u32 must be 0-1. |
| + | |
| + | === SetRecordingLayerCompositionEnabled === |
| + | Takes an input bool, no output. |
| | | |
| === SetHandlesRequestToDisplay === | | === SetHandlesRequestToDisplay === |
Line 1,929: |
Line 2,300: |
| | | |
| === SetWirelessPriorityMode === | | === SetWirelessPriorityMode === |
− | Takes an input s32 enum '''WirelessPriorityMode''', no output. | + | Takes an input s32 [[#WirelessPriorityMode]], no output. |
− | | |
− | The input value must be 1 or 2.
| |
| | | |
| === GetAccumulatedSuspendedTickValue === | | === GetAccumulatedSuspendedTickValue === |
Line 1,954: |
Line 2,323: |
| | | |
| The size must be <=0x400. The input buffer is copied to a buffer loaded from a state ptr (throwing an error when the state ptr is not set), with the u32 size being written to statebuf+0x400 afterwards. | | The size must be <=0x400. The input buffer is copied to a buffer loaded from a state ptr (throwing an error when the state ptr is not set), with the u32 size being written to statebuf+0x400 afterwards. |
| + | |
| + | === SaveCurrentScreenshot === |
| + | Takes an input s32 [[Capture_services#AlbumReportOption|AlbumReportOption]], no output. |
| + | |
| + | sdknso exposes this under "nn::album::". |
| + | |
| + | === SetRecordVolumeMuted === |
| + | Takes an input bool, no output. |
| | | |
| === GetDebugStorageChannel === | | === GetDebugStorageChannel === |
Line 1,961: |
Line 2,338: |
| | | |
| == IStorageChannel == | | == IStorageChannel == |
− | Added with [[7.0.0]].
| + | This is "nn::am::service::IStorageChannel". |
| + | |
| + | This was added with [7.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,979: |
Line 2,358: |
| | | |
| == IWindowController == | | == IWindowController == |
| + | This is "nn::am::service::IWindowController". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,035: |
Line 2,416: |
| | | |
| == IAudioController == | | == IAudioController == |
| + | This is "nn::am::service::IAudioController". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,070: |
Line 2,453: |
| | | |
| == IDisplayController == | | == IDisplayController == |
| + | This is "nn::am::service::IDisplayController". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,227: |
Line 2,612: |
| | | |
| === ClearCaptureBuffer === | | === ClearCaptureBuffer === |
− | Takes an input u8 bool, an s32, and an u32, returns no output. | + | Takes an input u8 bool, a s32 CaptureSharedBuffer, and an u32 color, returns no output. |
| + | |
| + | Clear the input CaptureSharedBuffer with the specified RGBA8 color. |
| | | |
| === ClearAppletTransitionBuffer === | | === ClearAppletTransitionBuffer === |
| Takes an input u32, no output. | | Takes an input u32, no output. |
| + | |
| + | Clear the AppletTransitionBuffer with the specified RGBA8 color. |
| | | |
| === AcquireLastApplicationCaptureSharedBuffer === | | === AcquireLastApplicationCaptureSharedBuffer === |
Line 2,268: |
Line 2,657: |
| | | |
| == ISystemAppletControllerForDebug == | | == ISystemAppletControllerForDebug == |
| + | This is "nn::am::service::ISystemAppletControllerForDebug". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 1 || RequestLaunchApplicationForDebug |
| |- | | |- |
− | | 1 || RequestLaunchApplicationForDebug || | + | | 2 || [7.0.0+] [[#GetDebugStorageChannel]] |
| |- | | |- |
− | | 2 || [7.0.0+] GetDebugStorageChannel || No input, returns an output [[#IStorageChannel]]. | + | | 3 || [7.0.0+] [[#CreateStorageForDebug]] |
| |- | | |- |
− | | 3 || [7.0.0+] CreateStorageForDebug || Takes a total of 8-bytes of input, returns an [[#IStorage]]. | + | | 4 || [12.0.0+] [[#CreateCradleFirmwareUpdaterForDebug]] |
| |} | | |} |
| + | |
| + | === GetDebugStorageChannel === |
| + | No input. Returns an output [[#IStorageChannel]]. |
| + | |
| + | === CreateStorageForDebug === |
| + | Takes a total of 8-bytes of input. Returns an [[#IStorage]]. |
| + | |
| + | === CreateCradleFirmwareUpdaterForDebug === |
| + | No input. Returns an [[#ICradleFirmwareUpdater]]. |
| | | |
| == IProcessWindingController == | | == IProcessWindingController == |
| + | This is "nn::am::service::IProcessWindingController". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,330: |
Line 2,734: |
| | | |
| == IDebugFunctions == | | == IDebugFunctions == |
| + | This is "nn::am::service::IDebugFunctions". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#NotifyMessageToHomeMenuForDebug]] |
| + | |- |
| + | | 1 || [1.0.0-9.2.0] [[#OpenMainApplication]] |
| + | |- |
| + | | 10 || [[#PerformSystemButtonPressing]] |
| + | |- |
| + | | 20 || [[#InvalidateTransitionLayer]] |
| |- | | |- |
− | | 0 || [[#NotifyMessageToHomeMenuForDebug]] || | + | | 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]] |
| |- | | |- |
− | | 1 || [1.0.0-9.2.0] [[#OpenMainApplication]] || | + | | 31 || [12.0.0+] RequestLaunchApplicationByApplicationLaunchInfoForDebug |
| |- | | |- |
− | | 10 || [[#PerformSystemButtonPressing]] || | + | | 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]] |
| |- | | |- |
− | | 20 || [[#InvalidateTransitionLayer]] || | + | | 50 || [15.0.0+] AddSystemProgramIdAndAppletIdForDebug |
| |- | | |- |
− | | 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]] || | + | | 51 || [16.0.0+] AddOperationConfirmedLibraryAppletIdForDebug |
| |- | | |- |
− | | 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]] || | + | | 52 || [17.0.0+] GetProgramIdFromAppletIdForDebug |
| |- | | |- |
− | | 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] || | + | | 53 || [18.0.0+] |
| |- | | |- |
− | | 101 || [10.0.0+] CancelCpuBoostModeForApplet || | + | | 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] |
| |- | | |- |
− | | 110 || [9.0.0+] [[#PushToAppletBoundChannelForDebug]] || | + | | 101 || [10.0.0+] [[#CancelCpuBoostModeForApplet]] |
| |- | | |- |
− | | 111 || [9.0.0+] [[#TryPopFromAppletBoundChannelForDebug]] || | + | | 110 || [9.0.0+] [[#PushToAppletBoundChannelForDebug]] |
| |- | | |- |
− | | 120 || [9.0.0+] [[#AlarmSettingNotificationEnableAppEventReserve]] || | + | | 111 || [9.0.0+] [[#TryPopFromAppletBoundChannelForDebug]] |
| |- | | |- |
− | | 121 || [9.0.0+] [[#AlarmSettingNotificationDisableAppEventReserve]] || | + | | 120 || [9.0.0+] [[#AlarmSettingNotificationEnableAppEventReserve]] |
| |- | | |- |
− | | 122 || [9.0.0+] [[#AlarmSettingNotificationPushAppEventNotify]] || | + | | 121 || [9.0.0+] [[#AlarmSettingNotificationDisableAppEventReserve]] |
| |- | | |- |
− | | 130 || [9.0.0+] [[#FriendInvitationSetApplicationParameter]] || | + | | 122 || [9.0.0+] [[#AlarmSettingNotificationPushAppEventNotify]] |
| |- | | |- |
− | | 131 || [9.0.0+] [[#FriendInvitationClearApplicationParameter]] || | + | | 130 || [9.0.0+] [[#FriendInvitationSetApplicationParameter]] |
| |- | | |- |
− | | 132 || [9.0.0+] [[#FriendInvitationPushApplicationParameter]] || | + | | 131 || [9.0.0+] [[#FriendInvitationClearApplicationParameter]] |
− | |} | + | |- |
− | | + | | 132 || [9.0.0+] [[#FriendInvitationPushApplicationParameter]] |
− | === NotifyMessageToHomeMenuForDebug === | + | |- |
− | Takes an input [[#AppletMessage]], no output. | + | | 140 || [14.0.0+] RestrictPowerOperationForSecureLaunchModeForDebug |
| + | |- |
| + | | 200 || [15.0.0+] CreateFloatingLibraryAppletAccepterForDebug |
| + | |- |
| + | | 300 || [16.0.0+] TerminateAllRunningApplicationsForDebug |
| + | |- |
| + | | 410 || [18.0.0+] |
| + | |- |
| + | | 411 || [18.0.0+] |
| + | |- |
| + | | 412 || [18.0.0+] |
| + | |- |
| + | | 900 || [12.0.0+] GetGrcProcessLaunchedSystemEvent |
| + | |} |
| + | |
| + | === NotifyMessageToHomeMenuForDebug === |
| + | Takes an input [[#AppletMessage]], no output. |
| | | |
| Stubbed, just returns an error. | | Stubbed, just returns an error. |
Line 2,392: |
Line 2,822: |
| | | |
| === SetCpuBoostModeForApplet === | | === SetCpuBoostModeForApplet === |
− | Takes an input u32 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. | + | Takes an input u32 [[#CpuBoostMode]] and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]]. |
| | | |
| The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | | The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. |
| + | |
| + | === CancelCpuBoostModeForApplet === |
| + | No input/output. |
| | | |
| === PushToAppletBoundChannelForDebug === | | === PushToAppletBoundChannelForDebug === |
Line 2,441: |
Line 2,874: |
| | | |
| == IStorage == | | == IStorage == |
| + | This is "nn::am::service::IStorage". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,455: |
Line 2,890: |
| | | |
| == IStorageAccessor == | | == IStorageAccessor == |
| + | This is "nn::am::service::IStorageAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,467: |
Line 2,904: |
| | | |
| == ITransferStorageAccessor == | | == ITransferStorageAccessor == |
| + | This is "nn::am::service::ITransferStorageAccessor". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 2,499: |
Line 2,938: |
| = idle:sys = | | = idle:sys = |
| This is "nn::idle::detail::IPolicyManagerSystem" | | This is "nn::idle::detail::IPolicyManagerSystem" |
| + | |
| + | This was moved to [[OMM_services|omm]] with [14.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,506: |
Line 2,947: |
| | 0 || GetAutoPowerDownEvent | | | 0 || GetAutoPowerDownEvent |
| |- | | |- |
− | |rowspan="2"| 1 || [1.0.0-3.0.2]
| + | | 1 || [7.0.0+] IsAutoPowerDownRequested ([1.0.0-3.0.2] ) |
− | |-
| |
− | | [7.0.0+] IsAutoPowerDownRequested
| |
| |- | | |- |
| | 2 || [1.0.0-3.0.2] | | | 2 || [1.0.0-3.0.2] |
Line 2,521: |
Line 2,960: |
| == SetHandlingContext == | | == SetHandlingContext == |
| [3.0.0+] Now takes an additional 0x10-bytes of input. | | [3.0.0+] Now takes an additional 0x10-bytes of input. |
| + | |
| + | [13.0.0+] Total input size is now 0x30 instead of 0x38. |
| | | |
| = omm = | | = omm = |
Line 2,527: |
Line 2,968: |
| Operation Mode Manager (OMM) is a service responsible for arbitrating the operation changes between docked and handheld modes. | | Operation Mode Manager (OMM) is a service responsible for arbitrating the operation changes between docked and handheld modes. |
| Besides [[PTM_services|PTM]], this is the only service that interacts with the [[Dock]] through [[USB_services|usb:pd*]]. | | Besides [[PTM_services|PTM]], this is the only service that interacts with the [[Dock]] through [[USB_services|usb:pd*]]. |
| + | |
| + | This was moved to [[OMM_services|omm]] with [14.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,587: |
Line 3,030: |
| |- | | |- |
| | 27 || [9.0.0+] GetAppletFullAwakingSystemEvent | | | 27 || [9.0.0+] GetAppletFullAwakingSystemEvent |
| + | |- |
| + | | 28 || [12.0.0+] [[#CreateCradleFirmwareUpdater]] |
| |} | | |} |
| | | |
Line 2,594: |
Line 3,039: |
| This is used by [[#GetOperationModeSystemInfo|ICommonStateGetter GetOperationModeSystemInfo]]. | | This is used by [[#GetOperationModeSystemInfo|ICommonStateGetter GetOperationModeSystemInfo]]. |
| | | |
− | = spsm = | + | == CreateCradleFirmwareUpdater == |
− | This is "nn::spsm::detail::IPowerStateInterface". | + | No input. Returns an [[#ICradleFirmwareUpdater]]. |
| + | |
| + | == ICradleFirmwareUpdater == |
| + | This is "nn::am::service::ICradleFirmwareUpdater". |
| + | |
| + | This was added with [12.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,601: |
Line 3,051: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || GetCurrentState | + | | 0 || Start |
− | |-
| |
− | | 1 || EnterSleep
| |
| |- | | |- |
− | | 2 || GetLastWakeReason | + | | 1 || Finish |
| |- | | |- |
− | | 3 || Shutdown | + | | 2 || GetUpdateDeviceStatus |
| |- | | |- |
− | | 4 || GetNotificationMessageEventHandle | + | | 3 || GetUpdateProgress |
| |- | | |- |
− | | 5 || ReceiveNotificationMessage | + | | 4 || GetUpdateDeviceStatusChangeEvent |
| + | |- |
| + | | 5 || GetUpdateProgress2 |
| + | |} |
| + | |
| + | = spsm = |
| + | This is "nn::spsm::detail::IPowerStateInterface". |
| + | |
| + | This was moved to [[OMM_services|omm]] with [14.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || GetCurrentState |
| + | |- |
| + | | 1 || EnterSleep |
| + | |- |
| + | | 2 || GetLastWakeReason |
| + | |- |
| + | | 3 || Shutdown |
| + | |- |
| + | | 4 || GetNotificationMessageEventHandle |
| + | |- |
| + | | 5 || ReceiveNotificationMessage |
| |- | | |- |
| | 6 || AnalyzeLogForLastSleepWakeSequence | | | 6 || AnalyzeLogForLastSleepWakeSequence |
Line 2,630: |
Line 3,102: |
| = tcap = | | = tcap = |
| This is "nn::tcap::server::IManager". | | This is "nn::tcap::server::IManager". |
| + | |
| + | This was removed with [11.0.0+]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,645: |
Line 3,119: |
| This is "nn::capsrv::sf::IScreenShotApplicationService". | | This is "nn::capsrv::sf::IScreenShotApplicationService". |
| | | |
− | This was added with [[6.0.0]]. | + | This was added with [6.0.0+]. |
| | | |
| This can be used by applications to save screenshots. | | This can be used by applications to save screenshots. |
Line 2,682: |
Line 3,156: |
| Takes an input 0x40-byte struct '''ScreenShotAttributeEx0''', an input u32, an input u64 AppletResourceUserId, a type-0x15 input buffer containing an [[Capture_services|UserIdList]], and a type-0x45 input buffer containing image data. Returns an [[Capture_services|ApplicationAlbumEntry]]. | | Takes an input 0x40-byte struct '''ScreenShotAttributeEx0''', an input u32, an input u64 AppletResourceUserId, a type-0x15 input buffer containing an [[Capture_services|UserIdList]], and a type-0x45 input buffer containing image data. Returns an [[Capture_services|ApplicationAlbumEntry]]. |
| | | |
− | = Library Applets = | + | = apm = |
− | This section documents library applet launching. | + | This is "nn::am::service::IApmManager". |
| | | |
− | Before starting the applet, [[#IStorage]]s are [[#ILibraryAppletCreator|created]] and written, then passed to [[#ILibraryAppletAccessor]] PushInData. The [[#IStorage]] session is closed afterwards. The first [[#IStorage]] is [[#CommonArguments]], followed by any applet-specific [[#IStorage]]s.
| + | This was added with [8.0.0+]. |
| | | |
− | Once the applet finishes running successfully, [[#ILibraryAppletAccessor]] PopOutData can be used to get the applet-specific [[#IStorage]] containing the applet output data.
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#OpenSession]] |
| + | |- |
| + | | 1 || GetPerformanceMode |
| + | |- |
| + | | 6 || [7.0.0+] [[#IsCpuOverclockEnabled]] |
| + | |} |
| | | |
− | == CommonArguments == | + | == OpenSession == |
− | The first [[#CreateStorage|IStorage]] passed to applets should contain the common library applet arguments. This is populated by <code>nn::la::CommonArgumentsWriter</code> and has the following format.
| + | Returns an [[#ISession]]. |
| | | |
− | This struct is 0x20-bytes.
| + | == IsCpuOverclockEnabled == |
| + | No input, returns an output u8 bool. |
| | | |
− | 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. | + | == ISession == |
| + | This is "nn::am::service::IApmSession". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || SetPerformanceConfiguration |
| + | |- |
| + | | 1 || GetPerformanceConfiguration |
| + | |- |
| + | | 2 || [8.0.0+] SetCpuOverclockEnabled |
| + | |} |
| + | |
| + | = Library Applets = |
| + | This section documents library applet launching. |
| + | |
| + | Before starting the applet, [[#IStorage]]s are [[#ILibraryAppletCreator|created]] and written, then passed to [[#ILibraryAppletAccessor]] PushInData. The [[#IStorage]] session is closed afterwards. The first [[#IStorage]] is [[#CommonArguments]], followed by any applet-specific [[#IStorage]]s. |
| + | |
| + | 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 [[#CreateStorage|IStorage]] passed to applets should contain the common library applet arguments. This is populated by <code>nn::la::CommonArgumentsWriter</code> 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. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 2,714: |
Line 3,224: |
| |} | | |} |
| | | |
− | = Enums = | + | = AppletId = |
− | === AppletId ===
| + | This is "nn::applet::AppletId". See also [[:Category:Library Applets]]. |
− | See also [[:Category:Library Applets]]. | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! ID | + | ! Value |
− | ! Title-id | + | ! ProgramId |
− | ! Description | + | ! Description |
| + | |- |
| + | | 0x00 |
| + | | |
| + | | None |
| |- | | |- |
| | 0x01 | | | 0x01 |
| | | | | |
− | | Application. Not valid for use with LibraryApplets. | + | | Application (not valid for use with LibraryApplets) |
| |- | | |- |
| | 0x02 | | | 0x02 |
| | 010000000000100C | | | 010000000000100C |
− | | "overlayDisp" | + | | OverlayApplet (overlayDisp) |
| |- | | |- |
| | 0x03 | | | 0x03 |
| | 0100000000001000 | | | 0100000000001000 |
− | | "qlaunch" | + | | SystemAppletMenu (qlaunch) |
| |- | | |- |
| | 0x04 | | | 0x04 |
| | 0100000000001012 | | | 0100000000001012 |
− | | "starter" SystemApplication. | + | | SystemApplication (starter) |
| |- | | |- |
| | 0x0A | | | 0x0A |
| | 0100000000001001 | | | 0100000000001001 |
− | | [[Auth_Applet|"auth"]] | + | | [[Auth_Applet|LibraryAppletAuth (auth)]] |
| |- | | |- |
| | 0x0B | | | 0x0B |
| | 0100000000001002 | | | 0100000000001002 |
− | | "cabinet" | + | | [[Cabinet_Applet|LibraryAppletCabinet (cabinet)]] |
| |- | | |- |
| | 0x0C | | | 0x0C |
| | 0100000000001003 | | | 0100000000001003 |
− | | [[Controller_Applet|"controller"]] | + | | [[Controller_Applet|LibraryAppletController (controller)]] |
| |- | | |- |
| | 0x0D | | | 0x0D |
| | 0100000000001004 | | | 0100000000001004 |
− | | "dataErase" | + | | LibraryAppletDataErase (dataErase) |
| |- | | |- |
| | 0x0E | | | 0x0E |
| | 0100000000001005 | | | 0100000000001005 |
− | | [[Error_Applet|"error"]] | + | | [[Error_Applet|LibraryAppletError (error)]] |
| |- | | |- |
| | 0x0F | | | 0x0F |
| | 0100000000001006 | | | 0100000000001006 |
− | | "netConnect" | + | | LibraryAppletNetConnect (netConnect) |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0100000000001007 | | | 0100000000001007 |
− | | [[Profile_Selector|"playerSelect"]] | + | | [[Profile_Selector|LibraryAppletPlayerSelect (playerSelect)]] |
| |- | | |- |
| | 0x11 | | | 0x11 |
| | 0100000000001008 | | | 0100000000001008 |
− | | [[Software_Keyboard|"swkbd"]] | + | | [[Software_Keyboard|LibraryAppletSwkbd (swkbd)]] |
| |- | | |- |
| | 0x12 | | | 0x12 |
| | 0100000000001009 | | | 0100000000001009 |
− | | "miiEdit" | + | | [[MiiEdit_Applet|LibraryAppletMiiEdit (miiEdit)]] |
| |- | | |- |
| | 0x13 | | | 0x13 |
| | 010000000000100A | | | 010000000000100A |
− | | "LibAppletWeb" [[Internet_Browser#010000000000100A|WebApplet]] applet | + | | [[Internet_Browser#010000000000100A|LibraryAppletWeb (web)]] |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 010000000000100B | | | 010000000000100B |
− | | "LibAppletShop" [[Internet_Browser#ShopN|ShopN]] applet | + | | [[Internet_Browser#ShopN|LibraryAppletShop (shop)]] |
| |- | | |- |
| | 0x15 | | | 0x15 |
| | 010000000000100D | | | 010000000000100D |
− | | [[Album_Applet|"photoViewer"]] | + | | [[Album_Applet|LibraryAppletPhotoViewer (photoViewer)]] |
| |- | | |- |
| | 0x16 | | | 0x16 |
| | 010000000000100E | | | 010000000000100E |
− | | "set" | + | | LibraryAppletSet (set) |
| |- | | |- |
| | 0x17 | | | 0x17 |
| | 010000000000100F | | | 010000000000100F |
− | | "LibAppletOff" [[Internet_Browser#Offline_Applet|Offline]] applet | + | | [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0100000000001010 | | | 0100000000001010 |
− | | "LibAppletLns" [[Internet_Browser#Whitelisted_Applets|Whitelisted]] applet | + | | [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] |
| |- | | |- |
| | 0x19 | | | 0x19 |
| | 0100000000001011 | | | 0100000000001011 |
− | | "LibAppletAuth" [[Internet_Browser#WifiWebAuthApplet|WifiWebAuth]] applet | + | | [[Internet_Browser#WifiWebAuthApplet|LibraryAppletWifiWebAuth (wifiWebAuth)]] |
| |- | | |- |
| | 0x1A | | | 0x1A |
| | 0100000000001013 | | | 0100000000001013 |
− | | [[MyPage_Applet|"myPage"]] | + | | [[MyPage_Applet|LibraryAppletMyPage (myPage)]] |
− | |}
| |
− | | |
− | === LibraryAppletMode ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! ID
| + | | 0x1B |
− | ! Description
| + | | 010000000000101A |
| + | | LibraryAppletGift (gift) |
| |- | | |- |
− | | 0x0 | + | | 0x1C |
− | | AllForeground | + | | 010000000000101C |
| + | | LibraryAppletUserMigration (userMigration) |
| |- | | |- |
− | | 0x1 | + | | 0x1D |
− | | Background | + | | 010000000000101D |
| + | | [9.0.0+] LibraryAppletPreomiaSys (EncounterSys) |
| |- | | |- |
− | | 0x2 | + | | 0x1E |
− | | No UI | + | | 0100000000001020 |
| + | | [9.0.0+] LibraryAppletStory (story) |
| |- | | |- |
− | | 0x3 | + | | 0x1F |
− | | Background with indirect display, see also [[#GetIndirectLayerConsumerHandle]]. Only used by swkbd InlineKeyboard. | + | | 010070000E3C0000 |
| + | | [9.0.0+] LibraryAppletPreomiaUsr (EncounterUsr) |
| |- | | |- |
− | | 0x4 | + | | 0x20 |
− | | AllForegroundInitiallyHidden. Can be used by [7.0.0+] [[Internet_Browser|WebSession]]. | + | | 010086000E49C000 |
| + | | [9.0.0+] LibraryAppletPreomiaUsrDummy (EncounterUsrDummy) |
| |- | | |- |
− | |} | + | | 0x21 |
− | | + | | 0100000000001038 |
− | === AppletMessage ===
| + | | [10.0.0+] LibraryAppletSample (sample) |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! ID
| + | | 0x22 |
− | ! Description
| + | | 0100000000001007 |
| + | | [13.0.0+] LibraryAppletPromoteQualification (playerSelect) |
| |- | | |- |
− | | 0x4 || Exit requested | + | | 0x32 |
| + | | 010000000000100F |
| + | | [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] |
| |- | | |- |
− | | 0xF || [[#GetCurrentFocusState|FocusState]] changed | + | | 0x33 |
| + | | 010000000000100F |
| + | | [17.0.0+] [[Internet_Browser#Offline_Applet|LibraryAppletOfflineWeb (offlineWeb)]] |
| |- | | |- |
− | | 0x10 || Current applet execution was [[#SetRestartMessageEnabled|resumed]]. | + | | 0x35 |
| + | | [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) |
| + | | [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) |
| |- | | |- |
− | | 0x1E || OperationMode changed | + | | 0x36 |
| + | | [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) |
| + | | [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) |
| |- | | |- |
− | | 0x1F || PerformanceMode changed | + | | 0x37 |
| + | | [17.0.0+] 0100000000001010 ([16.0.0-16.1.0] 0100000000001042) |
| + | | [17.0.0+] [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare (loginShare)]] ([16.0.0-16.1.0] ) |
| |- | | |- |
− | | 0x33 || [[#SetHandlesRequestToDisplay|RequestToDisplay]]. Indicates that [[#ApproveToDisplay]] should be used. | + | | 0x38 |
| + | | 0100000000001043 |
| + | | [16.0.0-16.1.0] |
| |- | | |- |
− | | 0x5A || Capture button was [[#SetRequiresCaptureButtonShortPressedMessage|short-pressed]]. | + | | 0x50 |
| + | | 0100000000001007 |
| + | | [18.0.0+] |
| |- | | |- |
− | | 0x5C || Screenshot was [[#SetAlbumImageTakenNotificationEnabled|taken]]. | + | | 0x51 |
− | |}
| + | | 0100000000001007 |
− | | + | | [18.0.0+] |
− | This is "nn::am::AppletMessage".
| |
− | | |
− | === OperationMode ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value
| + | | 0x3E8 |
− | ! Description
| + | | |
| + | | [10.0.0-16.1.0] DevlopmentTool |
| |- | | |- |
− | | 0 || Handheld | + | | 0x3F1 |
| + | | 010000000000D619 |
| + | | [10.0.0-16.1.0] CombinationLA |
| |- | | |- |
− | | 1 || Docked | + | | 0x3F2 |
− | |} | + | | 010000000000D610 |
− | | + | | [10.0.0-16.1.0] AeSystemApplet |
− | === TvPowerStateMatchingMode ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value
| + | | 0x3F3 |
− | ! Description
| + | | 010000000000D611 |
| + | | [10.0.0-16.1.0] AeOverlayApplet |
| |- | | |- |
− | | 0 || Unknown | + | | 0x3F4 |
| + | | 010000000000D612 |
| + | | [10.0.0-16.1.0] AeStarter |
| |- | | |- |
− | | 1 || Unknown | + | | 0x3F5 |
− | |} | + | | 010000000000D613 |
− | | + | | [10.0.0-16.1.0] AeLibraryAppletAlone |
− | This is "nn::oe::TvPowerStateMatchingMode". This is used with [[#SetTvPowerStateMatchingMode]].
| |
− | | |
− | === SystemButtonType ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value
| + | | 0x3F6 |
− | ! Description
| + | | 010000000000D614 |
| + | | [10.0.0-16.1.0] AeLibraryApplet1 |
| |- | | |- |
− | | 1 || PerformHomeButtonShortPressing | + | | 0x3F7 |
| + | | 010000000000D615 |
| + | | [10.0.0-16.1.0] AeLibraryApplet2 |
| |- | | |- |
− | | 2 || PerformHomeButtonLongPressing | + | | 0x3F8 |
| + | | 010000000000D616 |
| + | | [10.0.0-16.1.0] AeLibraryApplet3 |
| |- | | |- |
− | | 3 || Short-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. | + | | 0x3F9 |
| + | | 010000000000D617 |
| + | | [10.0.0-16.1.0] AeLibraryApplet4 |
| |- | | |- |
− | | 4 || Long-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. | + | | 0x3FA |
| + | | 010000000000D60A |
| + | | [10.0.0-16.1.0] AppletISA |
| |- | | |- |
− | | 5 || Shutdown the system. Only available with [[#PerformSystemButtonPressing]]. | + | | 0x3FB |
| + | | 010000000000D60B |
| + | | [10.0.0-16.1.0] AppletIOA |
| |- | | |- |
− | | 6 || PerformCaptureButtonShortPressing | + | | 0x3FC |
| + | | 010000000000D60C |
| + | | [10.0.0-16.1.0] AppletISTA |
| |- | | |- |
− | | 7 || PerformCaptureButtonLongPressing | + | | 0x3FD |
− | |} | + | | 010000000000D60D |
− | | + | | [10.0.0-16.1.0] AppletILA1 |
− | This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]]/[[#PerformSystemButtonPressing]].
| |
− | | |
− | === LaunchParameterKind ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value
| + | | 0x3FE |
− | ! Description
| + | | 010000000000D60E |
| + | | [10.0.0-16.1.0] AppletILA2 |
| |- | | |- |
− | | 1 || UserChannel. Application-specific LaunchParameter. | + | | 0x700000C8 |
| + | | 010000000000D65B |
| + | | [18.0.0+] |
| |- | | |- |
− | | 2 || account PreselectedUser | + | | 0x700000C9 |
| + | | 010000000000D65C |
| + | | [18.0.0+] |
| |- | | |- |
− | | 3 || Unknown if used by anything? | + | | 0x700000DC |
− | |} | + | | 010000000000D619 |
− | | + | | [17.0.0+] CombinationLA |
− | === LibraryAppletExitReason ===
| + | |- |
− | {| class="wikitable" border="1"
| + | | 0x700000E6 |
| + | | 010000000000D610 |
| + | | [17.0.0+] AeSystemApplet |
| + | |- |
| + | | 0x700000E7 |
| + | | 010000000000D611 |
| + | | [17.0.0+] AeOverlayApplet |
| + | |- |
| + | | 0x700000E8 |
| + | | 010000000000D612 |
| + | | [17.0.0+] AeStarter |
| |- | | |- |
− | ! Value
| + | | 0x700000E9 |
− | ! Description
| + | | 010000000000D613 |
| + | | [17.0.0+] AeLibraryAppletAlone |
| |- | | |- |
− | | 0 || Normal | + | | 0x700000EA |
| + | | 010000000000D614 |
| + | | [17.0.0+] AeLibraryApplet1 |
| |- | | |- |
− | | 1 || Canceled | + | | 0x700000EB |
| + | | 010000000000D615 |
| + | | [17.0.0+] AeLibraryApplet2 |
| |- | | |- |
− | | 2 || Abnormal | + | | 0x700000EC |
| + | | 010000000000D616 |
| + | | [17.0.0+] AeLibraryApplet3 |
| |- | | |- |
− | | 10 || Unexpected | + | | 0x700000ED |
− | |} | + | | 010000000000D617 |
− | | + | | [17.0.0+] AeLibraryApplet4 |
− | === ProgramSpecifyKind ===
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Value
| + | | 0x700000F0 |
− | ! Description
| + | | 010000000000D60A |
| + | | [17.0.0+] AppletISA |
| |- | | |- |
− | | 0 || u8 ProgramIndex. "ExecuteProgram". [[NS_Services|NS]] handles ProgramIndex by launching ApplicationId+ProgramIndex. After using [[#ExecuteProgram]] with this successfully, official user-processes will enter an infinite loop with sleep-thread value 86400000000000. | + | | 0x700000F1 |
| + | | 010000000000D60B |
| + | | [17.0.0+] AppletIOA |
| |- | | |- |
− | | 1 || [[NCM_services#ApplicationId|ApplicationId]]. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1. | + | | 0x700000F2 |
| + | | 010000000000D60C |
| + | | [17.0.0+] AppletISTA |
| |- | | |- |
− | | 2 || u64 = value 0. "RestartProgram" | + | | 0x700000F3 |
| + | | 010000000000D60D |
| + | | [17.0.0+] AppletILA1 |
| |- | | |- |
| + | | 0x700000F4 |
| + | | 010000000000D60E |
| + | | [17.0.0+] AppletILA2 |
| |} | | |} |
| | | |
− | This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]]. | + | = LibraryAppletMode = |
− | | + | This is "nn::applet::LibraryAppletMode". |
− | ProgramIndex values where the title is not installed should not be used: [[qlaunch]] will display an error message and the current title will become "corrupted", however Home Menu will have an option to repair it.
| |
| | | |
− | = InputDetectionPolicy =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value | + | ! Value |
− | ! Description | + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | AllForeground |
| + | |- |
| + | | 0x1 |
| + | | PartialForeground |
| + | |- |
| + | | 0x2 |
| + | | NoUi |
| |- | | |- |
− | | 0 || Unknown. | + | | 0x3 |
| + | | PartialForegroundWithIndirectDisplay (see also [[#GetIndirectLayerConsumerHandle]], only used by swkbd [[Software_Keyboard|InlineKeyboard]]) |
| |- | | |- |
− | | 1 || Unknown. | + | | 0x4 |
| + | | AllForegroundInitiallyHidden (can be used by [7.0.0+] [[Internet_Browser|WebSession]]) |
| |} | | |} |
| | | |
− | This is u32 enum "nn::applet::InputDetectionPolicy". | + | = AppletMessage = |
| + | This is "nn::am::AppletMessage". |
| | | |
− | = AppletResourceUserId =
| |
− | This u64 is officially called "nn::applet::AppletResourceUserId". Used by a number of non-AM services.
| |
− |
| |
− | = AppletAttribute =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 0x0 || 0x1 || Flag. When non-zero, two state fields are set to 1. | + | | 0 || None |
| + | |- |
| + | | 1 || ChangeIntoForeground |
| |- | | |- |
− | | 0x1 || 0x7F || Unused | + | | 2 || ChangeIntoBackground |
− | |}
| |
− | | |
− | This is "nn::am::AppletAttribute". This struct is 0x8-bytes.
| |
− | | |
− | This is used by [[#OpenLibraryAppletProxy]].
| |
− | | |
− | = AppletProcessLaunchReason =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 4 || Exit |
| |- | | |- |
− | | 0x0 || 0x1 || Flag. When non-zero, LibraryApplets then use [[#OpenCallingLibraryApplet]]. | + | | 6 || ApplicationExited |
| |- | | |- |
− | | 0x1 || 0x2 || Always 0. | + | | 7 || |
| |- | | |- |
− | | 0x3 || 0x1 || Always 0. | + | | 15 || [[#FocusState|FocusStateChanged]] |
− | |}
| |
− | | |
− | This is "nn::am::service::AppletProcessLaunchReason". This struct is 0x4-bytes.
| |
− | | |
− | = LibraryAppletInfo =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 16 || [[#SetRestartMessageEnabled|Resume]] |
| |- | | |- |
− | | 0x0 || 0x4 || [[#AppletId]] | + | | 20 || DetectShortPressingHomeButton |
| |- | | |- |
− | | 0x4 || 0x4 || [[#LibraryAppletMode]] | + | | 21 || DetectLongPressingHomeButton |
− | |}
| |
− | | |
− | This is "nn::am::service::LibraryAppletInfo". This struct is 0x8-bytes.
| |
− | | |
− | = AppletKind =
| |
− | This is "nn::am::service::AppletKind". This is 8-bytes.
| |
− | | |
− | = AppletIdentityInfo =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 22 || DetectShortPressingPowerButton |
| |- | | |- |
− | | 0x0 || 0x4 || [[#AppletId]] | + | | 23 || DetectMiddlePressingPowerButton |
| |- | | |- |
− | | 0x4 || 0x4 || Padding | + | | 24 || DetectLongPressingPowerButton |
| |- | | |- |
− | | 0x8 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | + | | 25 || RequestToPrepareSleep |
− | |}
| |
− | | |
− | This struct is "nn::am::service::AppletIdentityInfo". This struct is 0x10-bytes.
| |
− | | |
− | = ApplicationAttributeForQuest =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 26 || FinishedSleepSequence |
| |- | | |- |
− | | 0x0 || 0x4 || See [[#ApplicationAttribute]]. | + | | 27 || SleepRequiredByHighTemperature |
| |- | | |- |
− | | 0x4 || 0x4 || See [[#ApplicationAttribute]]. | + | | 28 || SleepRequiredByLowBattery |
| |- | | |- |
− | | 0x8 || 0x4 || [7.0.0+] See [[#ApplicationAttribute]]. | + | | 29 || AutoPowerDown |
− | |}
| |
− | | |
− | This struct is "nn::applet::ApplicationAttributeForQuest".
| |
− | | |
− | User-processes copy the first 0x8-bytes (0xC-bytes with [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]]/[[#CreateApplicationWithAttributeAndRequestToStartForQuest]]) to a [[#ApplicationAttribute]] with the rest of the struct being cleared, which is then passed to the actual cmd (CreateApplication*ToStartForQuest).
| |
− | | |
− | = ApplicationAttribute =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 30 || [[#OperationMode|OperationModeChanged]] |
| |- | | |- |
− | | 0x0 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. | + | | 31 || [[#PerformanceMode|PerformanceModeChanged]] |
| |- | | |- |
− | | 0x4 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. | + | | 32 || DetectReceivingCecSystemStandby |
| |- | | |- |
− | | 0x8 || 0x4 || float audio volume. Must be in the range of 0.0f-1.0f. The default is 1.0f. | + | | 33 || SdCardRemoved |
| |- | | |- |
− | | 0xC || 0x14 || Unused. Default is 0. | + | | 34 || |
− | |}
| |
− | | |
− | This struct is "nn::am::ApplicationAttribute". This struct is 0x20-bytes.
| |
− | | |
− | Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd.
| |
− | | |
− | = ApplicationLaunchProperty =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 50 || LaunchApplicationRequested |
| |- | | |- |
− | | 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | + | | 51 || [[#SetHandlesRequestToDisplay|RequestToDisplay]] |
| |- | | |- |
− | | 0x8 || 0x4 || Application title-version. | + | | 55 || ShowApplicationLogo |
| |- | | |- |
− | | 0xC || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application base title. | + | | 56 || HideApplicationLogo |
| |- | | |- |
− | | 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application update title. | + | | 57 || ForceHideApplicationLogo |
| |- | | |- |
− | | 0xE || 0x1 || Unknown. | + | | 58 || |
| + | |- |
| + | | 59 || |
| + | |- |
| + | | 60 || FloatingApplicationDetected |
| + | |- |
| + | | 61 || [7.0.0+] PerformanceConfigurationChanged |
| + | |- |
| + | | 70 || |
| + | |- |
| + | | 71 || |
| + | |- |
| + | | 72 || |
| + | |- |
| + | | 73 || |
| + | |- |
| + | | 75 || |
| + | |- |
| + | | 80 || |
| + | |- |
| + | | 81 || |
| + | |- |
| + | | 82 || |
| + | |- |
| + | | 83 || |
| + | |- |
| + | | 85 || |
| + | |- |
| + | | 86 || |
| + | |- |
| + | | 90 || [[#SetRequiresCaptureButtonShortPressedMessage|DetectShortPressingCaptureButton]] |
| + | |- |
| + | | 92 || [[#SetAlbumImageTakenNotificationEnabled|AlbumScreenShotTaken]] |
| + | |- |
| + | | 93 || AlbumRecordingSaved |
| + | |- |
| + | | 94 || |
| + | |- |
| + | | 100 || |
| + | |- |
| + | | 101 || |
| + | |- |
| + | | 110 || [14.0.0+] DetectShortPressingCaptureButtonForApplet |
| + | |- |
| + | | 111 || [14.0.0+] DetectLongPressingCaptureButtonForApplet |
| |- | | |- |
− | | 0xF || 0x1 || Padding. | + | | 1000 || |
| |} | | |} |
| | | |
− | This struct is 0x10-bytes. | + | = OperationMode = |
| + | This is "nn::oe::OperationMode". |
| | | |
− | = ApplicationLaunchRequestInfo =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Value |
− | |-
| + | ! Description |
− | | 0x0 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]].
| |
| |- | | |- |
− | | 0x4 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]]. | + | | 0 || Handheld |
| |- | | |- |
− | | 0x8 || 0x8 || Unknown. The default is 0x0. | + | | 1 || Console |
| |} | | |} |
| | | |
− | This struct is "nn::applet::ApplicationLaunchRequestInfo". This struct is 0x10-bytes. | + | = PerformanceMode = |
| + | This is "nn::oe::PerformanceMode". |
| | | |
− | = AppletResourceUsageInfo =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 0x0 || 0x4 || Unknown counter. | + | | -1 || Invalid |
| |- | | |- |
− | | 0x4 || 0x4 || Unknown counter. | + | | 0 || Normal |
| + | |- |
| + | | 1 || Boost |
| + | |} |
| + | |
| + | = FocusState = |
| + | This is "nn::oe::FocusState". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 1 || InFocus |
| + | |- |
| + | | 2 || OutOfFocus |
| + | |- |
| + | | 3 || Background |
| + | |} |
| + | |
| + | = CpuBoostMode = |
| + | This is "nn::oe::CpuBoostMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Normal |
| + | |- |
| + | | 1 || FastLoad |
| + | |} |
| + | |
| + | = WindowOriginMode = |
| + | This is "nn::oe::WindowOriginMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || LowerLeft |
| + | |- |
| + | | 1 || UpperLeft |
| + | |} |
| + | |
| + | = WirelessPriorityMode = |
| + | This is "nn::oe::WirelessPriorityMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 0x8 || 0x4 || Output from [[NS_Services|NS GetRightsEnvironmentCountForDebug]]. | + | | 0 || Default |
| |- | | |- |
− | | 0xC || 0x14 || Always zero. | + | | 1 || OptimizedForWlan |
| |} | | |} |
| | | |
− | This struct is "nn::am::service::AppletResourceUsageInfo". This struct is 0x20-bytes. | + | = TvPowerStateMatchingMode = |
| + | This is "nn::oe::TvPowerStateMatchingMode". This is used with [[#SetTvPowerStateMatchingMode]]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Unknown |
| + | |- |
| + | | 1 || Unknown |
| + | |} |
| + | |
| + | = SystemButtonType = |
| + | This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]]/[[#PerformSystemButtonPressing]]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 1 || PerformHomeButtonShortPressing |
| + | |- |
| + | | 2 || PerformHomeButtonLongPressing |
| + | |- |
| + | | 3 || Short-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. |
| + | |- |
| + | | 4 || Long-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]]. |
| + | |- |
| + | | 5 || Shutdown the system. Only available with [[#PerformSystemButtonPressing]]. |
| + | |- |
| + | | 6 || PerformCaptureButtonShortPressing |
| + | |- |
| + | | 7 || PerformCaptureButtonLongPressing |
| + | |} |
| + | |
| + | = LaunchParameterKind = |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 1 || UserChannel. Application-specific LaunchParameter. |
| + | |- |
| + | | 2 || account PreselectedUser |
| + | |- |
| + | | 3 || Unknown if used by anything? |
| + | |} |
| + | |
| + | = LibraryAppletExitReason = |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Normal |
| + | |- |
| + | | 1 || Canceled |
| + | |- |
| + | | 2 || Abnormal |
| + | |- |
| + | | 10 || Unexpected |
| + | |} |
| + | |
| + | = ProgramSpecifyKind = |
| + | This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || u8 ProgramIndex. "ExecuteProgram". [[NS_Services|NS]] handles ProgramIndex by launching ApplicationId+ProgramIndex. After using [[#ExecuteProgram]] with this successfully, official user-processes will enter an infinite loop with sleep-thread value 86400000000000. |
| + | |- |
| + | | 1 || [[NCM_services#ApplicationId|ApplicationId]]. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1. |
| + | |- |
| + | | 2 || u64 = value 0. "RestartProgram" |
| + | |} |
| + | |
| + | ProgramIndex values where the title is not installed should not be used: [[qlaunch]] will display an error message and the current title will become "corrupted", however Home Menu will have an option to repair it. |
| + | |
| + | = InputDetectionPolicy = |
| + | This is u32 enum "nn::applet::InputDetectionPolicy". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Unknown |
| + | |- |
| + | | 1 || Unknown |
| + | |} |
| + | |
| + | = AppletResourceUserId = |
| + | This is "nn::applet::AppletResourceUserId". Used by a number of non-AM services. |
| + | |
| + | = AppletAttribute = |
| + | This is "nn::am::AppletAttribute". This struct is 0x80 bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1 || Flag. When non-zero, two state fields are set to 1. |
| + | |- |
| + | | 0x1 || 0x7F || Unused |
| + | |} |
| + | |
| + | This is used by [[#OpenLibraryAppletProxy]]. |
| + | |
| + | = AppletProcessLaunchReason = |
| + | This is "nn::am::service::AppletProcessLaunchReason". This struct is 0x4-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1 || Flag. When non-zero, LibraryApplets then use [[#OpenCallingLibraryApplet]]. |
| + | |- |
| + | | 0x1 || 0x2 || Always 0. |
| + | |- |
| + | | 0x3 || 0x1 || Always 0. |
| + | |} |
| + | |
| + | = LibraryAppletInfo = |
| + | This is "nn::am::service::LibraryAppletInfo". This struct is 0x8-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || [[#AppletId]] |
| + | |- |
| + | | 0x4 || 0x4 || [[#LibraryAppletMode]] |
| + | |} |
| + | |
| + | = AppletKind = |
| + | This is "nn::am::service::AppletKind". This is 8-bytes. |
| + | |
| + | = AppletIdentityInfo = |
| + | This struct is "nn::am::service::AppletIdentityInfo". This struct is 0x10-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || [[#AppletId]] |
| + | |- |
| + | | 0x4 || 0x4 || Padding |
| + | |- |
| + | | 0x8 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] |
| + | |} |
| + | |
| + | = ApplicationAttributeForQuest = |
| + | This struct is "nn::applet::ApplicationAttributeForQuest". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || See [[#ApplicationAttribute]]. |
| + | |- |
| + | | 0x4 || 0x4 || See [[#ApplicationAttribute]]. |
| + | |- |
| + | | 0x8 || 0x4 || [7.0.0+] See [[#ApplicationAttribute]]. |
| + | |} |
| + | |
| + | User-processes copy the first 0x8-bytes (0xC-bytes with [[#CreateApplicationWithAttributeAndPushAndRequestToStartForQuest]]/[[#CreateApplicationWithAttributeAndRequestToStartForQuest]]) to a [[#ApplicationAttribute]] with the rest of the struct being cleared, which is then passed to the actual cmd (CreateApplication*ToStartForQuest). |
| + | |
| + | = ApplicationAttribute = |
| + | This struct is "nn::am::ApplicationAttribute". This struct is 0x20-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. |
| + | |- |
| + | | 0x4 || 0x4 || Default is 0 for non-Quest. Only used when non-zero: unknown value in seconds. |
| + | |- |
| + | | 0x8 || 0x4 || float audio volume. Must be in the range of 0.0f-1.0f. The default is 1.0f. |
| + | |- |
| + | | 0xC || 0x14 || Unused. Default is 0. |
| + | |} |
| + | |
| + | Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd. |
| + | |
| + | = ApplicationLaunchProperty = |
| + | This struct is 0x10-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] |
| + | |- |
| + | | 0x8 || 0x4 || Application title-version. |
| + | |- |
| + | | 0xC || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application base title. |
| + | |- |
| + | | 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application update title. |
| + | |- |
| + | | 0xE || 0x1 || Unknown. |
| + | |- |
| + | | 0xF || 0x1 || Padding. |
| + | |} |
| + | |
| + | = ApplicationLaunchRequestInfo = |
| + | This is "nn::applet::ApplicationLaunchRequestInfo". This struct is 0x10-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]]. |
| + | |- |
| + | | 0x4 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]]. |
| + | |- |
| + | | 0x8 || 0x8 || Unknown. The default is 0x0. |
| + | |} |
| + | |
| + | = AppletResourceUsageInfo = |
| + | This is "nn::am::service::AppletResourceUsageInfo". This struct is 0x20-bytes. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || Unknown counter. |
| + | |- |
| + | | 0x4 || 0x4 || Unknown counter. |
| + | |- |
| + | | 0x8 || 0x4 || Output from [[NS_Services|NS GetRightsEnvironmentCountForDebug]]. |
| + | |- |
| + | | 0xC || 0x14 || Always zero. |
| + | |} |
| + | |
| + | = ApplicationLicenseType = |
| + | This is "nn::oe::ApplicationLicenseType". This is 1-byte. |
| + | |
| + | = LaunchRequiredVersion = |
| + | This is "nn::oe::LaunchRequiredVersion". This is a 0x40-byte struct with 1-byte alignment. |
| + | |
| + | = ServerEnvironmentType = |
| + | This is "nn::oe::ServerEnvironmentType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || dd |
| + | |- |
| + | | 1 || lp |
| + | |- |
| + | | 2 || sd |
| + | |- |
| + | | 3 || sp |
| + | |- |
| + | | 4 || dp |
| + | |} |
| | | |
| = Notes = | | = Notes = |
− | AM-sysmodule will only initialize [[Shared_Database_services|pdm:ntfy]] / use pdm:ntfy service commands when the value from [[Process_Manager_services|pm:bm]] GetBootMode is not 0x1. | + | AM-sysmodule will only initialize [[Shared_Database_services|pdm:ntfy]] / use pdm:ntfy service commands when the value from [[Process_Manager_services|pm:bm]] GetBootMode is not 0x1 (Maintenance). |
| + | |
| + | An object constructor also writes the output from [[Process_Manager_services|pm:bm]] GetBootMode into the created object. A vfunc for this object checks whether this field is Maintenance: if so, it calls a vfunc then a func and returns. Otherwise after calling various (v)funcs, if required this eventually uses [[OMM_services|ommdisp]] cmd600. |
| | | |
| [[Category:Services]] | | [[Category:Services]] |