From acde083dcf3d922aa8765c72fbbec4ec8219c730 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sat, 27 Aug 2022 13:35:12 +0200 Subject: [PATCH] Use libmocha instead of libiosuhax --- Dockerfile | 6 ++-- Makefile | 2 +- src/main.cpp | 87 +++++++++++++++++++--------------------------- src/utils/logger.h | 12 ++++--- 4 files changed, 47 insertions(+), 60 deletions(-) diff --git a/Dockerfile b/Dockerfile index 55976bd..2542e6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM wiiuenv/devkitppc:20220507 +FROM wiiuenv/devkitppc:20220806 -COPY --from=wiiuenv/wiiupluginsystem:20220513 /artifacts $DEVKITPRO -COPY --from=wiiuenv/libiosuhax:20220129 /artifacts $DEVKITPRO +COPY --from=wiiuenv/wiiupluginsystem:20220724 /artifacts $DEVKITPRO +COPY --from=wiiuenv/libmocha:20220827 /artifacts $DEVKITPRO WORKDIR project \ No newline at end of file diff --git a/Makefile b/Makefile index 30760c0..895d1ab 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ CXXFLAGS += -DDEBUG -DVERBOSE_DEBUG -g CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g endif -LIBS := -lwups -lwut -liosuhax +LIBS := -lwups -lwut -lmocha #------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level diff --git a/src/main.cpp b/src/main.cpp index b95a87a..f282f88 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,9 +3,7 @@ #include "virtualpath.h" #include #include -#include -#include -#include +#include #include #include @@ -18,11 +16,24 @@ WUPS_PLUGIN_LICENSE("GPL"); WUPS_USE_WUT_DEVOPTAB(); uint32_t hostIpAddress = 0; -int iosuhaxMount = 0; -int fsaFd = -1; BackgroundThread *thread = nullptr; +MochaUtilsStatus MountWrapper(const char *mount, const char *dev, const char *mountTo) { + auto res = Mocha_MountFS(mount, dev, mountTo); + if (res == MOCHA_RESULT_ALREADY_EXISTS) { + res = Mocha_MountFS(mount, nullptr, mountTo); + } + if (res == MOCHA_RESULT_SUCCESS) { + std::string mountPath = std::string(mount) + ":/"; + VirtualMountDevice(mountPath.c_str()); + DEBUG_FUNCTION_LINE_VERBOSE("Mounted %s", mountPath.c_str()); + } else { + DEBUG_FUNCTION_LINE_ERR("Failed to mount %s: %s [%d]", mount, Mocha_GetStatusStr(res), res); + } + return res; +} + /* Entry point */ ON_APPLICATION_START() { nn::ac::Initialize(); @@ -38,39 +49,18 @@ ON_APPLICATION_START() { AddVirtualFSPath("vol", nullptr, nullptr); AddVirtualFSVOLPath("external01", nullptr, nullptr); AddVirtualFSVOLPath("content", nullptr, nullptr); - - int res = IOSUHAX_Open(nullptr); - if (res < 0) { - DEBUG_FUNCTION_LINE_ERR("IOSUHAX_open failed"); + MochaUtilsStatus res; + if ((res = Mocha_InitLibrary()) == MOCHA_RESULT_SUCCESS) { + MountWrapper("slccmpt01", "/dev/slccmpt01", "/vol/storage_slccmpt01"); + MountWrapper("storage_odd_tickets", nullptr, "/vol/storage_odd01"); + MountWrapper("storage_odd_updates", nullptr, "/vol/storage_odd02"); + MountWrapper("storage_odd_content", nullptr, "/vol/storage_odd03"); + MountWrapper("storage_odd_content2", nullptr, "/vol/storage_odd04"); + MountWrapper("storage_slc", "/dev/slc01", "/vol/storage_slc01"); + Mocha_MountFS("storage_mlc", nullptr, "/vol/storage_mlc01"); + Mocha_MountFS("storage_usb", nullptr, "/vol/storage_usb01"); } else { - iosuhaxMount = 1; - //fatInitDefault(); - - fsaFd = IOSUHAX_FSA_Open(); - if (fsaFd < 0) { - DEBUG_FUNCTION_LINE_ERR("IOSUHAX_FSA_Open failed"); - } - - DEBUG_FUNCTION_LINE("IOSUHAX_FSA_Open done"); - - mount_fs("slccmpt01", fsaFd, "/dev/slccmpt01", "/vol/storage_slccmpt01"); - mount_fs("storage_odd_tickets", fsaFd, "/dev/odd01", "/vol/storage_odd_tickets"); - mount_fs("storage_odd_updates", fsaFd, "/dev/odd02", "/vol/storage_odd_updates"); - mount_fs("storage_odd_content", fsaFd, "/dev/odd03", "/vol/storage_odd_content"); - mount_fs("storage_odd_content2", fsaFd, "/dev/odd04", "/vol/storage_odd_content2"); - mount_fs("storage_slc", fsaFd, nullptr, "/vol/system"); - mount_fs("storage_mlc", fsaFd, nullptr, "/vol/storage_mlc01"); - mount_fs("storage_usb", fsaFd, nullptr, "/vol/storage_usb01"); - - VirtualMountDevice("slccmpt01:/"); - VirtualMountDevice("storage_odd_tickets:/"); - VirtualMountDevice("storage_odd_updates:/"); - VirtualMountDevice("storage_odd_content:/"); - VirtualMountDevice("storage_odd_content2:/"); - VirtualMountDevice("storage_slc:/"); - VirtualMountDevice("storage_mlc:/"); - VirtualMountDevice("storage_usb:/"); - VirtualMountDevice("usb:/"); + DEBUG_FUNCTION_LINE_ERR("Failed to init libmocha: %s [%d]", Mocha_GetStatusStr(res), res); } thread = BackgroundThread::getInstance(); @@ -87,21 +77,14 @@ ON_APPLICATION_REQUESTS_EXIT() { DEBUG_FUNCTION_LINE_VERBOSE("Ended ftp Server."); - if (iosuhaxMount) { - IOSUHAX_sdio_disc_interface.shutdown(); - IOSUHAX_usb_disc_interface.shutdown(); - - unmount_fs("slccmpt01"); - unmount_fs("storage_odd_tickets"); - unmount_fs("storage_odd_updates"); - unmount_fs("storage_odd_content"); - unmount_fs("storage_odd_content2"); - unmount_fs("storage_slc"); - unmount_fs("storage_mlc"); - unmount_fs("storage_usb"); - IOSUHAX_FSA_Close(fsaFd); - IOSUHAX_Close(); - } + Mocha_UnmountFS("slccmpt01"); + Mocha_UnmountFS("storage_odd_tickets"); + Mocha_UnmountFS("storage_odd_updates"); + Mocha_UnmountFS("storage_odd_content"); + Mocha_UnmountFS("storage_odd_content2"); + Mocha_UnmountFS("storage_slc"); + Mocha_UnmountFS("storage_mlc"); + Mocha_UnmountFS("storage_usb"); DEBUG_FUNCTION_LINE("Unmount virtual paths"); UnmountVirtualPaths(); diff --git a/src/utils/logger.h b/src/utils/logger.h index bc38dcd..7fbbfdc 100644 --- a/src/utils/logger.h +++ b/src/utils/logger.h @@ -8,11 +8,15 @@ extern "C" { #endif -#define LOG_APP_TYPE "P" -#define LOG_APP_NAME "ftpiiu" +#define LOG_APP_TYPE "P" +#define LOG_APP_NAME "ftpiiu" -#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) -#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) +#define __FILENAME__ ({ \ + const char *__filename = __FILE__; \ + const char *__pos = strrchr(__filename, '/'); \ + if (!__pos) __pos = strrchr(__filename, '\\'); \ + __pos ? __pos + 1 : __filename; \ +}) #define LOG(LOG_FUNC, FMT, ARGS...) LOG_EX_DEFAULT(LOG_FUNC, "", "", FMT, ##ARGS)