wudd/source/main.cpp

111 lines
2.4 KiB
C++
Raw Normal View History

2021-10-09 00:58:55 +02:00
#include <whb/proc.h>
#include <whb/log.h>
#include <whb/log_udp.h>
#include <thread>
#include <iosuhax.h>
#include <ntfs.h>
#include <coreinit/debug.h>
#include <coreinit/energysaver.h>
2021-10-09 00:58:55 +02:00
#include "utils/logger.h"
#include "utils/WiiUScreen.h"
#include "input/VPADInput.h"
#include "MainApplicationState.h"
2021-10-09 00:58:55 +02:00
void initIOSUHax();
void deInitIOSUHax();
void main_loop();
bool sIosuhaxMount = false;
int main(int argc, char **argv) {
WHBLogUdpInit();
DEBUG_FUNCTION_LINE("Hello from wudump!");
WHBProcInit();
WiiUScreen::Init();
initIOSUHax();
uint32_t isAPDEnabled;
IMIsAPDEnabled(&isAPDEnabled);
if (isAPDEnabled) {
DEBUG_FUNCTION_LINE("Disable auto shutdown");
IMDisableAPD();
}
2021-10-09 00:58:55 +02:00
ntfs_mount_count = ntfsMountAll((ntfs_md **) &ntfs_mounts, NTFS_DEFAULT | NTFS_RECOVER);
for (int i = 0; i < ntfs_mount_count; i++) {
DEBUG_FUNCTION_LINE("%s:", ntfs_mounts[i].name);
}
main_loop();
if (ntfs_mounts != nullptr) {
int i = 0;
for (i = 0; i < ntfs_mount_count; i++) {
ntfsUnmount(ntfs_mounts[i].name, true);
}
free(ntfs_mounts);
}
if (isAPDEnabled) {
DEBUG_FUNCTION_LINE("Enable auto shutdown");
IMEnableAPD();
}
2021-10-09 00:58:55 +02:00
deInitIOSUHax();
WiiUScreen::DeInit();
WHBProcShutdown();
return 0;
}
void main_loop() {
DEBUG_FUNCTION_LINE("Creating state");
std::unique_ptr<MainApplicationState> state = std::make_unique<MainApplicationState>();
2021-10-09 00:58:55 +02:00
VPadInput input;
if (gFSAfd < 0 || !sIosuhaxMount) {
// state.setError(MainApplicationState::eErrorState::ERROR_IOSUHAX_FAILED);
OSFatal("IOSUHAX Failed");
2021-10-09 00:58:55 +02:00
}
DEBUG_FUNCTION_LINE("Entering main loop");
while (WHBProcIsRunning()) {
input.update(1280, 720);
state->update(&input);
state->render();
2021-10-09 00:58:55 +02:00
}
}
void initIOSUHax() {
sIosuhaxMount = false;
int res = IOSUHAX_Open(nullptr);
if (res < 0) {
DEBUG_FUNCTION_LINE("IOSUHAX_open failed");
} else {
sIosuhaxMount = true;
gFSAfd = IOSUHAX_FSA_Open();
if (gFSAfd < 0) {
DEBUG_FUNCTION_LINE("IOSUHAX_FSA_Open failed");
} else {
DEBUG_FUNCTION_LINE("IOSUHAX done");
2021-10-09 00:58:55 +02:00
}
}
}
void deInitIOSUHax() {
if (sIosuhaxMount) {
if (gFSAfd >= 0) {
IOSUHAX_FSA_Close(gFSAfd);
}
IOSUHAX_Close();
}
}