diff --git a/Makefile b/Makefile index 9e57970..8274bb3 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ INCLUDES := source #------------------------------------------------------------------------------- # options for code generation #------------------------------------------------------------------------------- -CFLAGS := -g -Wall -Wextra -O0 -ffunction-sections\ +CFLAGS := -Wall -Wextra -O0 -ffunction-sections\ $(MACHDEP) CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ @@ -38,6 +38,11 @@ CXXFLAGS := $(CFLAGS) -std=c++17 ASFLAGS := -g $(ARCH) LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) -T$(WUMS_ROOT)/share/libkernel.ld $(WUMSSPECS) +ifeq ($(DEBUG),1) +CXXFLAGS += -DDEBUG -g +CCFLAGS += -DDEBUG -g +endif + LIBS := -lwums -lwut -lkernel #------------------------------------------------------------------------------- diff --git a/source/logger.c b/source/logger.c new file mode 100644 index 0000000..0411db7 --- /dev/null +++ b/source/logger.c @@ -0,0 +1,36 @@ +#ifdef DEBUG +#include +#include +#include +#include + +uint32_t moduleLogInit = false; +uint32_t cafeLogInit = false; +uint32_t udpLogInit = false; +#endif // DEBUG + +void initLogging() { +#ifdef DEBUG + if (!(moduleLogInit = WHBLogModuleInit())) { + cafeLogInit = WHBLogCafeInit(); + udpLogInit = WHBLogUdpInit(); + } +#endif // DEBUG +} + +void deinitLogging() { +#ifdef DEBUG + if (moduleLogInit) { + WHBLogModuleDeinit(); + moduleLogInit = false; + } + if (cafeLogInit) { + WHBLogCafeDeinit(); + cafeLogInit = false; + } + if (udpLogInit) { + WHBLogUdpDeinit(); + udpLogInit = false; + } +#endif // DEBUG +} \ No newline at end of file diff --git a/source/logger.h b/source/logger.h index 90e32b9..6ff5ae2 100644 --- a/source/logger.h +++ b/source/logger.h @@ -1,18 +1,18 @@ #pragma once +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include +#ifdef DEBUG #define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) -#define OSFATAL_FUNCTION_LINE(FMT, ARGS...)do { \ - OSFatal_printf("[%s]%s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ - } while (0) +#define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) #define DEBUG_FUNCTION_LINE(FMT, ARGS...)do { \ WHBLogPrintf("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ @@ -22,6 +22,21 @@ extern "C" { WHBLogWritef("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ } while (0) +#else + +#define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) + +#endif + +void initLogging(); + +void deinitLogging(); + #ifdef __cplusplus } #endif + diff --git a/source/main.cpp b/source/main.cpp index 0b9c856..bb1e3d1 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,10 +1,9 @@ #include #include -#include #include #include -#include #include "kernel.h" +#include "logger.h" WUMS_MODULE_EXPORT_NAME("homebrew_usbseriallogging"); WUMS_MODULE_SKIP_INIT_FINI(); @@ -12,8 +11,7 @@ WUMS_MODULE_SKIP_INIT_FINI(); extern "C" void SC_0x51(); WUMS_INITIALIZE() { - WHBLogUdpInit(); - + initLogging(); // Start syslogging on iosu side int mcpFd = IOS_Open("/dev/mcp", (IOSOpenMode) 0); if (mcpFd >= 0) { @@ -35,14 +33,18 @@ WUMS_INITIALIZE() { // Start iopshell on kernel SC_0x51(); + deinitLogging(); } #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)) -WUMS_APPLICATION_STARTS(){ +WUMS_APPLICATION_STARTS() { + initLogging(); + DEBUG_FUNCTION_LINE("Register IopShell_UserCallback"); IopShell_RegisterCallback(IopShell_UserCallback, 0x100978f8, 0x10097900, 0x10097c40); + DEBUG_FUNCTION_LINE("IopShell create thread"); IopShell_CreateThread(); + deinitLogging(); } -