USBSerialLoggingModule/source/main.cpp

51 lines
1.7 KiB
C++
Raw Normal View History

2021-10-31 16:35:33 +01:00
#include "kernel.h"
#include "logger.h"
2022-02-04 17:48:14 +01:00
#include <coreinit/cache.h>
#include <coreinit/ios.h>
#include <kernel/kernel.h>
#include <wums.h>
2021-10-31 16:35:33 +01:00
WUMS_MODULE_EXPORT_NAME("homebrew_usbseriallogging");
2022-01-26 14:20:14 +01:00
WUMS_MODULE_SKIP_INIT_FINI();
2021-10-31 16:35:33 +01:00
extern "C" void SC_0x51();
2021-12-07 20:57:22 +01:00
WUMS_INITIALIZE() {
initLogging();
2021-10-31 16:35:33 +01:00
// Start syslogging on iosu side
int mcpFd = IOS_Open("/dev/mcp", (IOSOpenMode) 0);
if (mcpFd >= 0) {
2022-02-04 17:48:14 +01:00
int in = 0xFA; // IPC_CUSTOM_START_USB_LOGGING
2021-10-31 16:35:33 +01:00
int out = 0;
IOS_Ioctl(mcpFd, 100, &in, sizeof(in), &out, sizeof(out));
IOS_Close(mcpFd);
}
// Patch loader.elf to spit out less warnings when loading .rpx built with wut
KernelNOPAtPhysicalAddress(0x0100b770 - 0x01000000 + 0x32000000);
KernelNOPAtPhysicalAddress(0x0100b800 - 0x01000000 + 0x32000000);
KernelNOPAtPhysicalAddress(0x0100b7b8 - 0x01000000 + 0x32000000);
ICInvalidateRange(reinterpret_cast<void *>(0x0100b770), 0x04);
ICInvalidateRange(reinterpret_cast<void *>(0x0100b800), 0x04);
ICInvalidateRange(reinterpret_cast<void *>(0x0100b7b8), 0x04);
KernelPatchSyscall(0x51, (uint32_t) &IopShellInitInternal);
// Start iopshell on kernel
SC_0x51();
deinitLogging();
2021-10-31 16:35:33 +01:00
}
2022-02-04 17:48:14 +01:00
#define IopShell_UserCallback (0x101C400 + 0x1926c)
#define IopShell_RegisterCallback ((void (*)(uint32_t, uint32_t, uint32_t, uint32_t))(0x101C400 + 0x19638))
#define IopShell_CreateThread ((void (*)(void))(0x101C400 + 0x19504))
2021-10-31 16:35:33 +01:00
WUMS_APPLICATION_STARTS() {
initLogging();
DEBUG_FUNCTION_LINE("Register IopShell_UserCallback");
2021-10-31 16:35:33 +01:00
IopShell_RegisterCallback(IopShell_UserCallback, 0x100978f8, 0x10097900, 0x10097c40);
DEBUG_FUNCTION_LINE("IopShell create thread");
2021-10-31 16:35:33 +01:00
IopShell_CreateThread();
deinitLogging();
2021-10-31 16:35:33 +01:00
}