Reload the Wii U Menu when a sd card was inserted or ejected

This commit is contained in:
Maschell 2022-03-04 01:07:01 +01:00
parent 509bcc2060
commit 614729f9e6
5 changed files with 38 additions and 5 deletions

View File

@ -2,5 +2,6 @@ FROM wiiuenv/devkitppc:20220303
COPY --from=wiiuenv/wiiupluginsystem:20220123 /artifacts $DEVKITPRO COPY --from=wiiuenv/wiiupluginsystem:20220123 /artifacts $DEVKITPRO
COPY --from=wiiuenv/librpxloader:20220212 /artifacts $DEVKITPRO COPY --from=wiiuenv/librpxloader:20220212 /artifacts $DEVKITPRO
COPY --from=wiiuenv/libsdutils:20220303 /artifacts $DEVKITPRO
WORKDIR project WORKDIR project

View File

@ -36,7 +36,7 @@ CFLAGS := -Wall -O2 -ffunction-sections \
CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ -D__WUPS__ CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ -D__WUPS__
CXXFLAGS := $(CFLAGS) CXXFLAGS := $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS := -g $(ARCH) ASFLAGS := -g $(ARCH)
LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) -T$(WUMS_ROOT)/share/librpxloader.ld $(WUPSSPECS) LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) -T$(WUMS_ROOT)/share/librpxloader.ld $(WUPSSPECS)
@ -46,7 +46,7 @@ CXXFLAGS += -DDEBUG -g
CFLAGS += -DDEBUG -g CFLAGS += -DDEBUG -g
endif endif
LIBS := -lwups -lwut -lrpxloader LIBS := -lwups -lwut -lrpxloader -lsdutils
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level # list of directories containing libraries, this must be the top level

View File

@ -13,7 +13,7 @@
bool gInWiiUMenu __attribute__((section(".data"))); bool gInWiiUMenu __attribute__((section(".data")));
static FSStatus CallWithNewPath(const char *oldPath, const std::function<FSStatus(const char *)> &callFunctionWithPath) { static FSStatus CallWithNewPath(const char *oldPath, const std::function<FSStatus(const char *)> &callFunctionWithPath) {
if (!gInWiiUMenu || strncmp(oldPath, "/vol/save/", 10) != 0) { if (!sSDIsMounted || !gInWiiUMenu || strncmp(oldPath, "/vol/save/", 10) != 0) {
return callFunctionWithPath(oldPath); return callFunctionWithPath(oldPath);
} }

View File

@ -2,6 +2,7 @@
#include <stdbool.h> #include <stdbool.h>
extern bool gInWiiUMenu; extern bool gInWiiUMenu;
extern bool sSDIsMounted;
#define SAVE_REPLACEMENT_PATH "/vol/external01/wiiu/homebrew_on_menu_plugin" #define SAVE_REPLACEMENT_PATH "/vol/external01/wiiu/homebrew_on_menu_plugin"

View File

@ -1,4 +1,5 @@
#include "FileWrapper.h" #include "FileWrapper.h"
#include "SaveRedirection.h"
#include "fileinfos.h" #include "fileinfos.h"
#include "filelist.h" #include "filelist.h"
#include "fs/FSUtils.h" #include "fs/FSUtils.h"
@ -16,6 +17,7 @@
#include <malloc.h> #include <malloc.h>
#include <nn/acp.h> #include <nn/acp.h>
#include <rpxloader.h> #include <rpxloader.h>
#include <sdutils/sdutils.h>
#include <sysapp/title.h> #include <sysapp/title.h>
#include <utils/logger.h> #include <utils/logger.h>
#include <wups.h> #include <wups.h>
@ -58,13 +60,34 @@ INITIALIZE_PLUGIN() {
OSInitMutex(&fileinfoMutex); OSInitMutex(&fileinfoMutex);
} }
bool sSDUtilsInitDone = false;
bool sSDIsMounted = false;
bool sTitleRebooting = false;
void SDAttachedHandler(SDUtilsAttachStatus status) {
if (!sTitleRebooting) {
_SYSLaunchTitleWithStdArgsInNoSplash(OSGetTitleID(), 0);
sTitleRebooting = true;
}
}
ON_APPLICATION_START() { ON_APPLICATION_START() {
initLogging(); initLogging();
if (OSGetTitleID() == 0x0005001010040000L || // Wii U Menu JPN if (OSGetTitleID() == 0x0005001010040000L || // Wii U Menu JPN
OSGetTitleID() == 0x0005001010040100L || // Wii U Menu USA OSGetTitleID() == 0x0005001010040100L || // Wii U Menu USA
OSGetTitleID() == 0x0005001010040200L) { // Wii U Menu ERU OSGetTitleID() == 0x0005001010040200L) { // Wii U Menu EUR
readCustomTitlesFromSD();
if (SDUtils_Init() >= 0) {
sSDUtilsInitDone = true;
sTitleRebooting = false;
SDUtils_AddAttachHandler(SDAttachedHandler);
}
if (SDUtils_IsSdCardMounted(&sSDIsMounted) >= 0 && sSDIsMounted) {
readCustomTitlesFromSD();
}
} else {
gInWiiUMenu = false;
} }
if (_SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_HEALTH_AND_SAFETY) != OSGetTitleID()) { if (_SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_HEALTH_AND_SAFETY) != OSGetTitleID()) {
@ -75,8 +98,16 @@ ON_APPLICATION_START() {
ON_APPLICATION_ENDS() { ON_APPLICATION_ENDS() {
unmountAllRomfs(); unmountAllRomfs();
memset((void *) &gFileInfos, 0, sizeof(gFileInfos));
FileHandleWrapper_FreeAll(); FileHandleWrapper_FreeAll();
deinitLogging(); deinitLogging();
gInWiiUMenu = false;
if (sSDUtilsInitDone) {
SDUtils_RemoveAttachHandler(SDAttachedHandler);
SDUtils_DeInit();
sSDUtilsInitDone = false;
}
sSDIsMounted = false;
} }
void fillXmlForTitleID(uint32_t titleid_upper, uint32_t titleid_lower, ACPMetaXml *out_buf) { void fillXmlForTitleID(uint32_t titleid_upper, uint32_t titleid_lower, ACPMetaXml *out_buf) {