diff --git a/nx/include/switch/services/applet.h b/nx/include/switch/services/applet.h index ea4e3057..c48abba6 100644 --- a/nx/include/switch/services/applet.h +++ b/nx/include/switch/services/applet.h @@ -344,10 +344,10 @@ Service* appletGetServiceSession_Proxy(void); /// Gets the Service object for IAppletCommonFunctions. Only initialized with AppletType_SystemApplet, AppletType_LibraryApplet, or AppletType_OverlayApplet, on [7.0.0+]. Service* appletGetServiceSession_AppletCommonFunctions(void); -/// Gets the Service object for I*Functions, specific to each AppletType (IApplicationFunctions for AppletType_*Application). Not initialized with AppletType_LibraryApplet. +/// Gets the Service object for I*Functions, specific to each AppletType (IApplicationFunctions for AppletType_*Application). Not initialized with AppletType_LibraryApplet pre-15.0.0. On [15.0.0+] with AppletType_LibraryApplet this returns the object for IHomeMenuFunctions. Service* appletGetServiceSession_Functions(void); -/// Gets the Service object for IGlobalStateController. Only initialized with AppletType_SystemApplet. +/// Gets the Service object for IGlobalStateController. Only initialized with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. Service* appletGetServiceSession_GlobalStateController(void); /// Gets the Service object for IApplicationCreator. Only initialized with AppletType_SystemApplet. @@ -1732,37 +1732,37 @@ Result appletPrepareForJit(void); ///@} -///@name IHomeMenuFunctions: IFunctions for AppletType_SystemApplet. +///@name IHomeMenuFunctions: IFunctions for AppletType_SystemApplet and on [15.0.0+] for AppletType_LibraryApplet. ///@{ /** * @brief RequestToGetForeground - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. */ Result appletRequestToGetForeground(void); /** * @brief LockForeground - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. */ Result appletLockForeground(void); /** * @brief UnlockForeground - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. */ Result appletUnlockForeground(void); /** * @brief Pops a storage from the general channel. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. * @param[out] s Storage object. */ Result appletPopFromGeneralChannel(AppletStorage *s); /** * @brief Gets an Event which is signaled when a new storage is available with \ref appletPopFromGeneralChannel where previously no storage was available, this event is automatically cleared by the system once the last storage is popped. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. * @note The Event must be closed by the user once finished with it. * @param[out] out_event Output Event with autoclear=false. */ @@ -1770,7 +1770,7 @@ Result appletGetPopFromGeneralChannelEvent(Event *out_event); /** * @brief Gets a \ref AppletLockAccessor for HomeButtonWriter. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet. * @note Similar to using \ref appletGetWriterLockAccessorEx with inval=0. * @param a LockAccessor object. */ @@ -1778,14 +1778,14 @@ Result appletGetHomeButtonWriterLockAccessor(AppletLockAccessor *a); /** * @brief IsSleepEnabled - * @note Only available with AppletType_SystemApplet on [11.0.0+]. + * @note Only available with AppletType_SystemApplet on [11.0.0+], or on [15.0.0+] with AppletType_LibraryApplet. * @param[out] out Output flag. */ Result appletIsSleepEnabled(bool *out); /** * @brief PopRequestLaunchApplicationForDebug - * @note Only available with AppletType_SystemApplet on [6.0.0+]. + * @note Only available with AppletType_SystemApplet on [6.0.0+], or on [15.0.0+] with AppletType_LibraryApplet. * @param[out] uids Output array of \ref AccountUid. * @param[in] count Size of the uids array in entries, must be at least the size stored in state. * @param[out] application_id Output ApplicationId. @@ -1795,21 +1795,21 @@ Result appletPopRequestLaunchApplicationForDebug(AccountUid *uids, s32 count, u6 /** * @brief IsForceTerminateApplicationDisabledForDebug - * @note Only available with AppletType_SystemApplet on [9.0.0+]. + * @note Only available with AppletType_SystemApplet on [9.0.0+], or on [15.0.0+] with AppletType_LibraryApplet. * @param[out] out Output flag. 0 when DebugMode is not enabled, otherwise this is loaded from a system-setting. */ Result appletIsForceTerminateApplicationDisabledForDebug(bool *out); /** * @brief Launches DevMenu and the dev Overlay-applet. This will enter an infinite-sleep-loop on success. - * @note Only available with AppletType_SystemApplet on [8.0.0+]. + * @note Only available with AppletType_SystemApplet on [8.0.0+], or on [15.0.0+] with AppletType_LibraryApplet. * @note This verifies that DebugMode is enabled, then uses a ns cmd. That cmd then loads the system-settings for these two ProgramIds (which normally only exist on devunits), and verifies that these programs are installed + launches them. */ Result appletLaunchDevMenu(void); /** * @brief SetLastApplicationExitReason - * @note Only available with AppletType_SystemApplet on [11.0.0+]. + * @note Only available with AppletType_SystemApplet on [11.0.0+], or on [15.0.0+] with AppletType_LibraryApplet. * @param[in] reason Reason */ Result appletSetLastApplicationExitReason(s32 reason); @@ -1821,65 +1821,65 @@ Result appletSetLastApplicationExitReason(s32 reason); /** * @brief Start the sequence for entering sleep-mode. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. * @param[in] flag Flag, official sw uses hard-coded value = true. */ Result appletStartSleepSequence(bool flag); /** * @brief Start the system-shutdown sequence. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. */ Result appletStartShutdownSequence(void); /** * @brief Start the system-reboot sequence. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. */ Result appletStartRebootSequence(void); /** * @brief IsAutoPowerDownRequested. Uses an idle:sys cmd internally. - * @note Only available with AppletType_SystemApplet on [7.0.0+]. + * @note Only available with AppletType_SystemApplet on [7.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. * @param[out] out Output flag. */ Result appletIsAutoPowerDownRequested(bool *out); /** * @brief LoadAndApplyIdlePolicySettings. Uses an idle:sys cmd internally. - * @note Only available with AppletType_SystemApplet. + * @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. */ Result appletLoadAndApplyIdlePolicySettings(void); /** * @brief NotifyCecSettingsChanged. Uses an omm cmd internally. - * @note Only available with AppletType_SystemApplet on [2.0.0+]. + * @note Only available with AppletType_SystemApplet on [2.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. */ Result appletNotifyCecSettingsChanged(void); /** * @brief Sets the DefaultHomeButtonLongPressTime. - * @note Only available with AppletType_SystemApplet on [3.0.0+]. + * @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. * @param[in] val Input value. */ Result appletSetDefaultHomeButtonLongPressTime(s64 val); /** * @brief UpdateDefaultDisplayResolution. Uses an omm cmd internally. - * @note Only available with AppletType_SystemApplet on [3.0.0+]. + * @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. */ Result appletUpdateDefaultDisplayResolution(void); /** * @brief ShouldSleepOnBoot. Uses an omm cmd internally. - * @note Only available with AppletType_SystemApplet on [3.0.0+]. + * @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. * @param[out] out Output flag. */ Result appletShouldSleepOnBoot(bool *out); /** * @brief Gets an Event which is signaled for HdcpAuthenticationFailed. - * @note Only available with AppletType_SystemApplet on [4.0.0+]. + * @note Only available with AppletType_SystemApplet on [4.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet. * @note The Event must be closed by the user once finished with it. * @param[out] out_event Output Event with autoclear=false. */ diff --git a/nx/source/services/applet.c b/nx/source/services/applet.c index 37003c80..24885ca5 100644 --- a/nx/source/services/applet.c +++ b/nx/source/services/applet.c @@ -13,6 +13,8 @@ __attribute__((weak)) AppletAttribute __nx_applet_AppletAttribute; __attribute__((weak)) u32 __nx_applet_PerformanceConfiguration[2] = {/*0x92220008*//*0x20004*//*0x92220007*/0, 0}; //// Controls whether to use applet exit cmds during \ref appletExit. 0 (default): Only run exit cmds when running under a NSO. 1: Use exit cmds regardless. >1: Skip exit cmds. __attribute__((weak)) u32 __nx_applet_exit_mode = 0; +/// Controls the timeout in nanoseconds to use during LibraryApplet initialization in appletInitialize, with diagAbortWithResult being used if the timeout is reached. +__attribute__((weak)) u64 __nx_applet_init_timeout = 864000000000000000ULL; static Service g_appletSrv; static Service g_appletProxySession; @@ -152,6 +154,11 @@ Result _appletInitialize(void) { if (R_SUCCEEDED(rc)) { #define AM_BUSY_ERROR 0x19280 + u64 start_tick = 0; + u64 timeout = __nx_applet_init_timeout; + if (__nx_applet_type == AppletType_LibraryApplet) + start_tick = armGetSystemTick(); + do { u32 cmd_id; @@ -176,7 +183,12 @@ Result _appletInitialize(void) { rc = _appletOpenLibraryAppletProxy(&g_appletProxySession, CUR_PROCESS_HANDLE, attr); if (R_VALUE(rc) == AM_BUSY_ERROR) { - svcSleepThread(10000000); + svcSleepThread(100000000); + + if (__nx_applet_type == AppletType_LibraryApplet && armTicksToNs(armGetSystemTick() - start_tick) >= timeout) + diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_Timeout)); + + // Official sw also has code for calling a funcptr on the first AM_BUSY_ERROR (instead of sleep) where the elapsed time since start_tick is >=1 second, but we don't impl that. } } while (R_VALUE(rc) == AM_BUSY_ERROR); @@ -211,6 +223,16 @@ Result _appletInitialize(void) { rc = _appletCmdGetSession(&g_appletProxySession, &g_appletIProcessWindingController, 10); } + if (R_SUCCEEDED(rc) && hosversionAtLeast(15,0,0)) { // [15.0.0+] + // GetHomeMenuFunctions + if (__nx_applet_type == AppletType_LibraryApplet) + rc = _appletCmdGetSession(&g_appletProxySession, &g_appletIFunctions, 22); + + // GetGlobalStateController + if (R_SUCCEEDED(rc) && (__nx_applet_type == AppletType_LibraryApplet || __nx_applet_type == AppletType_OverlayApplet)) + rc = _appletCmdGetSession(&g_appletProxySession, &g_appletIGlobalStateController, 23); + } + // GetLibraryAppletCreator if (R_SUCCEEDED(rc)) rc = _appletCmdGetSession(&g_appletProxySession, &g_appletILibraryAppletCreator, 11); @@ -267,7 +289,7 @@ Result _appletInitialize(void) { break; } - if (msg != 0xF) + if (msg != AppletMessage_FocusStateChanged) continue; rc = _appletGetCurrentFocusState(&g_appletFocusState); @@ -301,7 +323,7 @@ Result _appletInitialize(void) { rc = _appletSetPerformanceModeChangedNotification(1); // Official apps aren't known to use apmSetPerformanceConfiguration with mode=1. - if (R_SUCCEEDED(rc)) { + if (R_SUCCEEDED(rc) && __nx_applet_type == AppletType_Application) { u32 i; for (i=0; i<2; i++) { @@ -405,19 +427,19 @@ void _appletCleanup(void) { serviceClose(&g_appletICommonStateGetter); serviceClose(&g_appletILibraryAppletCreator); - if (__nx_applet_type == AppletType_SystemApplet) { + if (__nx_applet_type == AppletType_SystemApplet) serviceClose(&g_appletIApplicationCreator); - serviceClose(&g_appletIGlobalStateController); - } - - if (__nx_applet_type != AppletType_LibraryApplet) - serviceClose(&g_appletIFunctions); if (__nx_applet_type == AppletType_LibraryApplet) { serviceClose(&g_appletIProcessWindingController); serviceClose(&g_appletILibraryAppletSelfAccessor); } + if (__nx_applet_type == AppletType_SystemApplet || __nx_applet_type == AppletType_LibraryApplet || __nx_applet_type == AppletType_OverlayApplet) + serviceClose(&g_appletIGlobalStateController); + + serviceClose(&g_appletIFunctions); + serviceClose(&g_appletIAppletCommonFunctions); serviceClose(&g_appletProxySession); @@ -599,14 +621,14 @@ proto { \ #define IPC_MAKE_CMD_IMPL_INITEXPR(proto,_s,_rid,func,initexpr,...) \ proto { \ - if (!serviceIsActive((_s)) || initexpr) \ + if (!serviceIsActive((_s)) || (initexpr)) \ return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); \ return func((_s), ##__VA_ARGS__, (_rid)); \ } #define IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(proto,_s,_rid,func,initexpr,_hosver,...) \ proto { \ - if (!serviceIsActive((_s)) || initexpr) \ + if (!serviceIsActive((_s)) || (initexpr)) \ return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); \ if (hosversionBefore _hosver) \ return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); \ @@ -2359,16 +2381,16 @@ IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletPrepareForJit(void), // IHomeMenuFunctions -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletRequestToGetForeground(void), &g_appletIFunctions, 10, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletLockForeground(void), &g_appletIFunctions, 11, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletUnlockForeground(void), &g_appletIFunctions, 12, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletPopFromGeneralChannel(AppletStorage *s), &g_appletIFunctions, 20, _appletCmdNoInOutStorage, __nx_applet_type != AppletType_SystemApplet, s) -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletGetPopFromGeneralChannelEvent(Event *out_event), &g_appletIFunctions, 21, _appletCmdGetEvent, __nx_applet_type != AppletType_SystemApplet, out_event, false) -IPC_MAKE_CMD_IMPL_INITEXPR(Result appletGetHomeButtonWriterLockAccessor(AppletLockAccessor *a), &g_appletIFunctions, 30, _appletGetHomeButtonRwLockAccessor, __nx_applet_type != AppletType_SystemApplet, a) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletIsSleepEnabled(bool *out), &g_appletIFunctions, 40, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet, (11,0,0), out) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletRequestToGetForeground(void), &g_appletIFunctions, 10, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletLockForeground(void), &g_appletIFunctions, 11, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletUnlockForeground(void), &g_appletIFunctions, 12, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletPopFromGeneralChannel(AppletStorage *s), &g_appletIFunctions, 20, _appletCmdNoInOutStorage, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, s) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletGetPopFromGeneralChannelEvent(Event *out_event), &g_appletIFunctions, 21, _appletCmdGetEvent, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, out_event, false) +IPC_MAKE_CMD_IMPL_INITEXPR(Result appletGetHomeButtonWriterLockAccessor(AppletLockAccessor *a), &g_appletIFunctions, 30, _appletGetHomeButtonRwLockAccessor, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, a) +IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletIsSleepEnabled(bool *out), &g_appletIFunctions, 40, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, (11,0,0), out) Result appletPopRequestLaunchApplicationForDebug(AccountUid *uids, s32 count, u64 *application_id, s32 *total_out) { - if (__nx_applet_type != AppletType_SystemApplet) + if (__nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); if (hosversionBefore(6,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -2388,13 +2410,13 @@ Result appletPopRequestLaunchApplicationForDebug(AccountUid *uids, s32 count, u6 return rc; } -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletIsForceTerminateApplicationDisabledForDebug(bool *out), &g_appletIFunctions, 110, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet, (9,0,0), out) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletSetLastApplicationExitReason(s32 reason), &g_appletIFunctions, 1000, _appletCmdInU32NoOut, __nx_applet_type != AppletType_SystemApplet, (11,0,0), reason) +IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletIsForceTerminateApplicationDisabledForDebug(bool *out), &g_appletIFunctions, 110, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, (9,0,0), out) +IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletSetLastApplicationExitReason(s32 reason), &g_appletIFunctions, 1000, _appletCmdInU32NoOut, __nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet, (11,0,0), reason) Result appletLaunchDevMenu(void) { Result rc=0; - if (__nx_applet_type != AppletType_SystemApplet) + if (__nx_applet_type != AppletType_SystemApplet && __nx_applet_type != AppletType_LibraryApplet) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); if (hosversionBefore(8,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -2406,16 +2428,16 @@ Result appletLaunchDevMenu(void) { // IGlobalStateController -IPC_MAKE_CMD_IMPL_INITEXPR( Result appletStartSleepSequence(bool flag), &g_appletIGlobalStateController, 2, _appletCmdInBoolNoOut, __nx_applet_type != AppletType_SystemApplet, flag) -IPC_MAKE_CMD_IMPL_INITEXPR( Result appletStartShutdownSequence(void), &g_appletIGlobalStateController, 3, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR( Result appletStartRebootSequence(void), &g_appletIGlobalStateController, 4, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletIsAutoPowerDownRequested(bool *out), &g_appletIGlobalStateController, 9, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet, (7,0,0), out) -IPC_MAKE_CMD_IMPL_INITEXPR( Result appletLoadAndApplyIdlePolicySettings(void), &g_appletIGlobalStateController, 10, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletNotifyCecSettingsChanged(void), &g_appletIGlobalStateController, 11, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet, (2,0,0)) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletSetDefaultHomeButtonLongPressTime(s64 val), &g_appletIGlobalStateController, 12, _appletCmdInU64NoOut, __nx_applet_type != AppletType_SystemApplet, (3,0,0), val) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletUpdateDefaultDisplayResolution(void), &g_appletIGlobalStateController, 13, _appletCmdNoIO, __nx_applet_type != AppletType_SystemApplet, (3,0,0)) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletShouldSleepOnBoot(bool *out), &g_appletIGlobalStateController, 14, _appletCmdNoInOutBool, __nx_applet_type != AppletType_SystemApplet, (3,0,0), out) -IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletGetHdcpAuthenticationFailedEvent(Event *out_event), &g_appletIGlobalStateController, 15, _appletCmdGetEvent, __nx_applet_type != AppletType_SystemApplet, (4,0,0), out_event, false) +IPC_MAKE_CMD_IMPL( Result appletStartSleepSequence(bool flag), &g_appletIGlobalStateController, 2, _appletCmdInBoolNoOut, flag) +IPC_MAKE_CMD_IMPL( Result appletStartShutdownSequence(void), &g_appletIGlobalStateController, 3, _appletCmdNoIO ) +IPC_MAKE_CMD_IMPL( Result appletStartRebootSequence(void), &g_appletIGlobalStateController, 4, _appletCmdNoIO ) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletIsAutoPowerDownRequested(bool *out), &g_appletIGlobalStateController, 9, _appletCmdNoInOutBool, (7,0,0), out) +IPC_MAKE_CMD_IMPL( Result appletLoadAndApplyIdlePolicySettings(void), &g_appletIGlobalStateController, 10, _appletCmdNoIO ) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletNotifyCecSettingsChanged(void), &g_appletIGlobalStateController, 11, _appletCmdNoIO, (2,0,0)) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletSetDefaultHomeButtonLongPressTime(s64 val), &g_appletIGlobalStateController, 12, _appletCmdInU64NoOut, (3,0,0), val) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletUpdateDefaultDisplayResolution(void), &g_appletIGlobalStateController, 13, _appletCmdNoIO, (3,0,0)) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletShouldSleepOnBoot(bool *out), &g_appletIGlobalStateController, 14, _appletCmdNoInOutBool, (3,0,0), out) +IPC_MAKE_CMD_IMPL_HOSVER(Result appletGetHdcpAuthenticationFailedEvent(Event *out_event), &g_appletIGlobalStateController, 15, _appletCmdGetEvent, (4,0,0), out_event, false) // IApplicationCreator