From c560ca00d5238228e6df127b06c333b5c6152e1d Mon Sep 17 00:00:00 2001 From: Jemma Poffinbarger Date: Thu, 23 Mar 2023 12:57:15 +1100 Subject: [PATCH] Notification module support (#8) --- .gitignore | 1 + Dockerfile | 7 ++++--- Inkay-pretendo.wps | Bin 54031 -> 0 bytes Makefile | 2 +- src/Notification.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/Notification.h | 7 +++++++ src/main.cpp | 16 +++++++++++++++- 7 files changed, 67 insertions(+), 5 deletions(-) delete mode 100644 Inkay-pretendo.wps create mode 100644 src/Notification.cpp create mode 100644 src/Notification.h diff --git a/.gitignore b/.gitignore index 74caf8d..fa7ebaa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea/ /build *.elf +*.wps diff --git a/Dockerfile b/Dockerfile index 9dcb816..b3782c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ -FROM wiiuenv/devkitppc:20220806 +FROM wiiuenv/devkitppc:20221228 +COPY --from=wiiuenv/libnotifications:20230126 /artifacts $DEVKITPRO COPY --from=wiiuenv/libkernel:20220724 /artifacts $DEVKITPRO COPY --from=wiiuenv/libmocha:20220903 /artifacts $DEVKITPRO -COPY --from=wiiuenv/wiiupluginsystem:20220826 /artifacts $DEVKITPRO +COPY --from=wiiuenv/wiiupluginsystem:20230126 /artifacts $DEVKITPRO WORKDIR /app -CMD make -f Makefile -j$(nproc) +CMD make -f Makefile -j$(nproc) \ No newline at end of file diff --git a/Inkay-pretendo.wps b/Inkay-pretendo.wps deleted file mode 100644 index 10b6d6d47ab429f5414265839ceeeb734ff1c936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54031 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 diff --git a/Makefile b/Makefile index d6d368b..3e022aa 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) LDFLAGS += -T$(WUMS_ROOT)/share/libkernel.ld $(WUPSSPECS) -LIBS := -lwups -lmocha -lkernel -lwut +LIBS := -lwups -lmocha -lkernel -lwut -lnotifications #------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level diff --git a/src/Notification.cpp b/src/Notification.cpp new file mode 100644 index 0000000..24e3275 --- /dev/null +++ b/src/Notification.cpp @@ -0,0 +1,39 @@ +#include "Notification.h" +#include +#include +#include +#include +#include +#include + +static std::unique_ptr sShowHintThread; +static bool sShutdownHintThread = false; + +void ShowNotification(const char * notification) { + // Wait for notification module to be ready + bool isOverlayReady = false; + while (!sShutdownHintThread && NotificationModule_IsOverlayReady(&isOverlayReady) == NOTIFICATION_MODULE_RESULT_SUCCESS && !isOverlayReady) + OSSleepTicks(OSMillisecondsToTicks(16)); + if (sShutdownHintThread || !isOverlayReady) return; + NotificationModuleStatus err = NotificationModule_SetDefaultValue(NOTIFICATION_MODULE_NOTIFICATION_TYPE_INFO, NOTIFICATION_MODULE_DEFAULT_OPTION_DURATION_BEFORE_FADE_OUT, 15.0f); + if(err != NOTIFICATION_MODULE_RESULT_SUCCESS) return; + + NotificationModule_AddInfoNotification(notification); +} + +void StartNotificationThread(const char * value) { + uint64_t titleID = OSGetTitleID(); + if (titleID == 0x0005001010040000L || titleID == 0x0005001010040100L || titleID == 0x0005001010040200L) { + sShutdownHintThread = false; + sShowHintThread = std::make_unique(ShowNotification, value); + } +} + +void StopNotificationThread() { + if (sShowHintThread != nullptr) { + sShutdownHintThread = true; + OSMemoryBarrier(); + sShowHintThread->join(); + sShowHintThread.reset(); + } +} diff --git a/src/Notification.h b/src/Notification.h new file mode 100644 index 0000000..b25ed3b --- /dev/null +++ b/src/Notification.h @@ -0,0 +1,7 @@ +#pragma once + +void ShowNotification(const char * notification); + +void StartNotificationThread(const char * value); + +void StopNotificationThread(); diff --git a/src/main.cpp b/src/main.cpp index f393ae8..3900ce1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,10 +23,13 @@ #include #include #include +#include #include "wut_extra.h" #include #include "url_patches.h" #include "config.h" +#include "Notification.h" + /** Mandatory plugin information. @@ -95,6 +98,10 @@ INITIALIZE_PLUGIN() { return; } + if (NotificationModule_InitLibrary() != NOTIFICATION_MODULE_RESULT_SUCCESS) { + DEBUG_FUNCTION_LINE("NotificationModule_InitLibrary failed"); + } + //get os version MCP_SystemVersion os_version; int mcp = MCP_Open(); @@ -120,11 +127,12 @@ INITIALIZE_PLUGIN() { for (const auto& patch : url_patches) { write_string(patch.address, patch.url); } - DEBUG_FUNCTION_LINE("Pretendo URL and NoSSL patches applied successfully."); + StartNotificationThread("Using Pretendo Network"); } else { DEBUG_FUNCTION_LINE("Pretendo URL and NoSSL patches skipped."); + StartNotificationThread("Using Nintendo Network"); } @@ -133,6 +141,7 @@ INITIALIZE_PLUGIN() { DEINITIALIZE_PLUGIN() { WHBLogUdpDeinit(); Mocha_DeInitLibrary(); + NotificationModule_DeInitLibrary(); } bool check_olv_libs() { @@ -213,3 +222,8 @@ ON_APPLICATION_START() { replace(base_addr, size, original_url, sizeof(original_url), new_url, sizeof(new_url)); } + +ON_APPLICATION_ENDS() { + DEBUG_FUNCTION_LINE("Inkay: shutting down...\n"); + StopNotificationThread(); +}