From 82e526c72f51eaa8f176dc6f8b2fc2fb99a1d807 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Fri, 4 Jan 2019 11:46:36 -0500 Subject: [PATCH] Added appletHolderActive and appletHolderCheckFinished. --- nx/include/switch/services/applet.h | 9 +++++++++ nx/source/services/applet.c | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/nx/include/switch/services/applet.h b/nx/include/switch/services/applet.h index e79cf4b7..dc80e104 100644 --- a/nx/include/switch/services/applet.h +++ b/nx/include/switch/services/applet.h @@ -234,6 +234,9 @@ Result appletCreateLibraryAppletSelf(AppletHolder *h, AppletId id, LibAppletMode /// Closes an AppletHolder object. void appletHolderClose(AppletHolder *h); +/// Returns whether the AppletHolder object was initialized. +bool appletHolderActive(AppletHolder *h); + /** * @brief Gets the IndirectLayerConsumerHandle loaded during \ref appletCreateLibraryApplet, on 2.0.0+. * @note Only available when \ref LibAppletMode is \ref LibAppletMode_Unknown3. @@ -254,6 +257,12 @@ Result appletHolderStart(AppletHolder *h); */ void appletHolderJoin(AppletHolder *h); +/** + * @brief Waits on the LibraryApplet StateChangedEvent with timeout=0, and returns whether it was successful. + * @param h AppletHolder object. + */ +bool appletHolderCheckFinished(AppletHolder *h); + /** * @brief Gets the \ref LibAppletExitReason set by \ref appletHolderJoin. * @param h AppletHolder object. diff --git a/nx/source/services/applet.c b/nx/source/services/applet.c index c0a689ae..be8c8ac6 100644 --- a/nx/source/services/applet.c +++ b/nx/source/services/applet.c @@ -1642,6 +1642,10 @@ void appletHolderClose(AppletHolder *h) { memset(h, 0, sizeof(AppletHolder)); } +bool appletHolderActive(AppletHolder *h) { + return serviceIsActive(&h->s); +} + Result appletHolderGetIndirectLayerConsumerHandle(AppletHolder *h, u64 *out) { if (!serviceIsActive(&h->s)) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); @@ -1690,6 +1694,10 @@ void appletHolderJoin(AppletHolder *h) { h->exitreason = res; } +bool appletHolderCheckFinished(AppletHolder *h) { + return R_SUCCEEDED(eventWait(&h->StateChangedEvent, 0)); +} + u32 appletHolderGetExitReason(AppletHolder *h) { return h->exitreason; }