From 4e47642d5504ccb249a130b30d3a7d46dbd45572 Mon Sep 17 00:00:00 2001 From: Andrew Hawes <117602754+Andrew1Hawes@users.noreply.github.com> Date: Fri, 9 Jun 2023 00:59:46 +0100 Subject: [PATCH] Move all input reads into a function --- source/MenuUtils.cpp | 155 ++++++++++++++----------------------------- source/MenuUtils.h | 8 ++- source/main.cpp | 31 ++------- 3 files changed, 59 insertions(+), 135 deletions(-) diff --git a/source/MenuUtils.cpp b/source/MenuUtils.cpp index 718edf3..0f41325 100644 --- a/source/MenuUtils.cpp +++ b/source/MenuUtils.cpp @@ -128,6 +128,39 @@ uint32_t remapClassicButtons(uint32_t buttons) { return convButtons; } +InputData getInput() { + VPADStatus vpadStatus; + VPADReadError vpadError; + KPADStatus kpadStatus; + KPADError kpadError; + InputData inputData; + + VPADRead(VPAD_CHAN_0, &vpadStatus, 1, &vpadError); + if (vpadError == VPAD_READ_SUCCESS) { + inputData.trigger = vpadStatus.trigger; + inputData.hold = vpadStatus.hold; + inputData.release = vpadStatus.release; + } + + for (int32_t i = 0; i < 4; i++) { + if (KPADReadEx((KPADChan) i, &kpadStatus, 1, &kpadError) > 0) { + if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { + if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { + inputData.trigger |= remapWiiMoteButtons(kpadStatus.trigger); + inputData.hold |= remapWiiMoteButtons(kpadStatus.hold); + inputData.release |= remapWiiMoteButtons(kpadStatus.release); + } else { + inputData.trigger |= remapClassicButtons(kpadStatus.classic.trigger); + inputData.hold |= remapClassicButtons(kpadStatus.classic.hold); + inputData.release |= remapClassicButtons(kpadStatus.classic.release); + } + } + } + } + + return inputData; +} + int32_t readAutobootOption(std::string &configPath) { FILE *f = fopen(configPath.c_str(), "r"); if (f) { @@ -196,33 +229,10 @@ int32_t handleMenuScreen(std::string &configPath, int32_t autobootOptionInput, c bool redraw = true; - VPADStatus vpadStatus; - VPADReadError vpadError; - KPADStatus kpadStatus; - KPADError kpadError; - uint32_t buttonsTriggered = 0; - while (true) { - buttonsTriggered = 0; + InputData buttons = getInput(); - VPADRead(VPAD_CHAN_0, &vpadStatus, 1, &vpadError); - if (vpadError == VPAD_READ_SUCCESS) { - buttonsTriggered = vpadStatus.trigger; - } - - for (int32_t i = 0; i < 4; i++) { - if (KPADReadEx((KPADChan) i, &kpadStatus, 1, &kpadError) > 0) { - if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { - if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { - buttonsTriggered |= remapWiiMoteButtons(kpadStatus.trigger); - } else { - buttonsTriggered |= remapClassicButtons(kpadStatus.classic.trigger); - } - } - } - } - - if (buttonsTriggered & VPAD_BUTTON_UP) { + if (buttons.trigger & VPAD_BUTTON_UP) { selectedIndex--; if (selectedIndex < 0) { @@ -230,7 +240,7 @@ int32_t handleMenuScreen(std::string &configPath, int32_t autobootOptionInput, c } redraw = true; - } else if (buttonsTriggered & VPAD_BUTTON_DOWN) { + } else if (buttons.trigger & VPAD_BUTTON_DOWN) { if (!menu.empty()) { selectedIndex++; @@ -239,12 +249,12 @@ int32_t handleMenuScreen(std::string &configPath, int32_t autobootOptionInput, c } redraw = true; } - } else if (buttonsTriggered & VPAD_BUTTON_A) { + } else if (buttons.trigger & VPAD_BUTTON_A) { break; - } else if (buttonsTriggered & VPAD_BUTTON_X) { + } else if (buttons.trigger & VPAD_BUTTON_X) { autobootIndex = -1; redraw = true; - } else if (buttonsTriggered & VPAD_BUTTON_Y) { + } else if (buttons.trigger & VPAD_BUTTON_Y) { autobootIndex = selectedIndex; redraw = true; } @@ -339,43 +349,20 @@ nn::act::SlotNo handleAccountSelectScreen(const std::vector 0) { - if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { - if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { - buttonsTriggered |= remapWiiMoteButtons(kpadStatus.trigger); - } else { - buttonsTriggered |= remapClassicButtons(kpadStatus.classic.trigger); - } - } - } - } - - if (buttonsTriggered & VPAD_BUTTON_UP) { + if (buttons.trigger & VPAD_BUTTON_UP) { if (selected > 0) { selected--; redraw = true; } - } else if (buttonsTriggered & VPAD_BUTTON_DOWN) { + } else if (buttons.trigger & VPAD_BUTTON_DOWN) { if (selected < (int32_t) data.size() - 1) { selected++; redraw = true; } - } else if (buttonsTriggered & VPAD_BUTTON_A) { + } else if (buttons.trigger & VPAD_BUTTON_A) { break; } @@ -527,35 +514,12 @@ void handleUpdateWarningScreen() { DrawUtils::endDraw(); - VPADStatus vpadStatus; - VPADReadError vpadError; - KPADStatus kpadStatus; - KPADError kpadError; - uint32_t buttonsTriggered = 0; - while (true) { - buttonsTriggered = 0; + InputData buttons = getInput(); - VPADRead(VPAD_CHAN_0, &vpadStatus, 1, &vpadError); - if (vpadError == VPAD_READ_SUCCESS) { - buttonsTriggered = vpadStatus.trigger; - } - - for (int32_t i = 0; i < 4; i++) { - if (KPADReadEx((KPADChan) i, &kpadStatus, 1, &kpadError) > 0) { - if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { - if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { - buttonsTriggered |= remapWiiMoteButtons(kpadStatus.trigger); - } else { - buttonsTriggered |= remapClassicButtons(kpadStatus.classic.trigger); - } - } - } - } - - if (buttonsTriggered & VPAD_BUTTON_A) { + if (buttons.trigger & VPAD_BUTTON_A) { break; - } else if (buttonsTriggered & VPAD_BUTTON_B) { + } else if (buttons.trigger & VPAD_BUTTON_B) { f = fopen(UPDATE_SKIP_PATH, "w"); if (f) { // It's **really** important to have this text on the stack. @@ -652,33 +616,10 @@ bool handleDiscInsertScreen(uint64_t expectedTitleId, uint64_t *titleIdToLaunch) // When an unexpected disc was inserted we need to eject it first. bool allowDisc = !wrongDiscInserted; - VPADStatus vpadStatus; - VPADReadError vpadError; - KPADStatus kpadStatus; - KPADError kpadError; - uint32_t buttonsTriggered = 0; - while (true) { - buttonsTriggered = 0; + InputData buttons = getInput(); - VPADRead(VPAD_CHAN_0, &vpadStatus, 1, &vpadError); - if (vpadError == VPAD_READ_SUCCESS) { - buttonsTriggered = vpadStatus.trigger; - } - - for (int32_t i = 0; i < 4; i++) { - if (KPADReadEx((KPADChan) i, &kpadStatus, 1, &kpadError) > 0) { - if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { - if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { - buttonsTriggered |= remapWiiMoteButtons(kpadStatus.trigger); - } else { - buttonsTriggered |= remapClassicButtons(kpadStatus.classic.trigger); - } - } - } - } - - if (buttonsTriggered & VPAD_BUTTON_A) { + if (buttons.trigger & VPAD_BUTTON_A) { result = false; break; } diff --git a/source/MenuUtils.h b/source/MenuUtils.h index 67c8d6a..cadb58f 100644 --- a/source/MenuUtils.h +++ b/source/MenuUtils.h @@ -27,9 +27,13 @@ enum { BOOT_OPTION_VWII_HOMEBREW_CHANNEL, }; -uint32_t remapWiiMoteButtons(uint32_t buttons); +struct InputData { + uint32_t trigger = 0; + uint32_t hold = 0; + uint32_t release = 0; +}; -uint32_t remapClassicButtons(uint32_t buttons); +InputData getInput(); int32_t readAutobootOption(std::string &configPath); diff --git a/source/main.cpp b/source/main.cpp index 52914c8..4ff0a01 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -39,6 +39,9 @@ int32_t main(int32_t argc, char **argv) { initExternalStorage(); + KPADInit(); + WPADEnableURCC(1); + if (getQuickBoot()) { deinitLogging(); @@ -49,31 +52,7 @@ int32_t main(int32_t argc, char **argv) { OSFatal("AutobootModule: Mocha_InitLibrary failed"); } - KPADInit(); - WPADEnableURCC(1); - - VPADStatus vpadStatus; - VPADReadError vpadError; - KPADStatus kpadStatus; - KPADError kpadError; - uint32_t buttonsHeld = 0; - - VPADRead(VPAD_CHAN_0, &vpadStatus, 1, &vpadError); - if (vpadError == VPAD_READ_SUCCESS) { - buttonsHeld = vpadStatus.hold; - } - - for (int32_t i = 0; i < 4; i++) { - if (KPADReadEx((KPADChan) i, &kpadStatus, 1, &kpadError) > 0) { - if (kpadError == KPAD_ERROR_OK && kpadStatus.extensionType != 0xFF) { - if (kpadStatus.extensionType == WPAD_EXT_CORE || kpadStatus.extensionType == WPAD_EXT_NUNCHUK) { - buttonsHeld |= remapWiiMoteButtons(kpadStatus.hold); - } else { - buttonsHeld |= remapClassicButtons(kpadStatus.classic.hold); - } - } - } - } + InputData buttons = getInput(); FSAInit(); auto client = FSAAddClient(nullptr); @@ -122,7 +101,7 @@ int32_t main(int32_t argc, char **argv) { if ((bootSelection == -1) || (bootSelection == BOOT_OPTION_HOMEBREW_LAUNCHER && !showHBL) || (bootSelection == BOOT_OPTION_VWII_HOMEBREW_CHANNEL && !showvHBL) || - (buttonsHeld & VPAD_BUTTON_PLUS)) { + (buttons.hold & VPAD_BUTTON_PLUS)) { bootSelection = handleMenuScreen(configPath, bootSelection, menu); }