diff --git a/source/hooks.cpp b/source/hooks.cpp index d4e8720..765a1b2 100644 --- a/source/hooks.cpp +++ b/source/hooks.cpp @@ -43,7 +43,9 @@ static const char **hook_names = (const char *[]){ "WUPS_LOADER_HOOK_APPLICATION_REQUESTS_EXIT", "WUPS_LOADER_HOOK_APPLICATION_ENDS", "WUPS_LOADER_HOOK_INIT_STORAGE", - "WUPS_LOADER_HOOK_INIT_CONFIG"}; + "WUPS_LOADER_HOOK_INIT_CONFIG", + "WUPS_LOADER_HOOK_INIT_BUTTON_COMBO", +}; void CallHook(const std::vector &plugins, const wups_loader_hook_type_t hook_type) { CallHook(plugins, hook_type, [](const auto &) { return true; }); diff --git a/source/main.cpp b/source/main.cpp index d121a63..3581bf1 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -28,6 +28,7 @@ #include #include +#include #include WUMS_MODULE_EXPORT_NAME("homebrew_wupsbackend"); @@ -35,6 +36,7 @@ WUMS_USE_WUT_DEVOPTAB(); WUMS_DEPENDS_ON(homebrew_functionpatcher); WUMS_DEPENDS_ON(homebrew_memorymapping); WUMS_DEPENDS_ON(homebrew_notifications); +WUMS_DEPENDS_ON(homebrew_buttoncombo); using namespace std::chrono_literals; @@ -309,9 +311,12 @@ void CleanupPlugins(std::vector &&pluginsToDeinit) { if (!pluginContainer.isLinkedAndLoaded() || cur.id != pluginContainer.getPluginLinkInformation().getTrampolineId()) { continue; } - cur.status = RELOC_TRAMP_FREE; + cur = {}; } } + DCFlushRange((void *) gTrampData.data(), gTrampData.size() * sizeof(relocation_trampoline_entry_t)); + ICInvalidateRange((void *) gTrampData.data(), gTrampData.size() * sizeof(relocation_trampoline_entry_t)); + OSMemoryBarrier(); } void CheckCleanupCallbackUsage(const std::vector &plugins) { auto *curThread = OSGetCurrentThread(); diff --git a/source/plugin/ButtonComboManager.cpp b/source/plugin/ButtonComboManager.cpp index 969cf94..86053e9 100644 --- a/source/plugin/ButtonComboManager.cpp +++ b/source/plugin/ButtonComboManager.cpp @@ -168,10 +168,10 @@ namespace { res |= WUPS_BUTTON_COMBO_BUTTON_B; } if (other & BCMPAD_BUTTON_X) { - res |= WUPS_BUTTON_COMBO_BUTTON_B; + res |= WUPS_BUTTON_COMBO_BUTTON_X; } if (other & BCMPAD_BUTTON_Y) { - res |= WUPS_BUTTON_COMBO_BUTTON_B; + res |= WUPS_BUTTON_COMBO_BUTTON_Y; } if (other & BCMPAD_BUTTON_LEFT) { res |= WUPS_BUTTON_COMBO_BUTTON_LEFT;