diff --git a/wiiu/dynamic_libs/ax_functions.c b/wiiu/dynamic_libs/ax_functions.c index d84d6f8450..e517f6d743 100644 --- a/wiiu/dynamic_libs/ax_functions.c +++ b/wiiu/dynamic_libs/ax_functions.c @@ -21,10 +21,14 @@ * 3. This notice may not be removed or altered from any source * distribution. ***************************************************************************/ +#include "common/common.h" #include "os_functions.h" #include "ax_functions.h" +unsigned int sound_handle __attribute__((section(".data"))) = 0; + EXPORT_DECL(void, AXInitWithParams, u32 * params); +EXPORT_DECL(void, AXInit, void); EXPORT_DECL(void, AXQuit, void); EXPORT_DECL(u32, AXGetInputSamplesPerSec, void); EXPORT_DECL(u32, AXGetInputSamplesPerFrame, void); @@ -45,15 +49,35 @@ EXPORT_DECL(u32, AXGetVoiceLoopCount, void *v); EXPORT_DECL(void, AXSetVoiceEndOffset, void *v, u32 offset); EXPORT_DECL(void, AXSetVoiceLoopOffset, void *v, u32 offset); +void InitAcquireAX(void) +{ + unsigned int *funcPointer = 0; + + if(OS_FIRMWARE >= 400) + { + AXInit = 0; + + OSDynLoad_Acquire("sndcore2.rpl", &sound_handle); + OS_FIND_EXPORT(sound_handle, AXInitWithParams); + OS_FIND_EXPORT(sound_handle, AXGetInputSamplesPerSec); + } + else + { + AXInitWithParams = 0; + AXGetInputSamplesPerSec = 0; + + OSDynLoad_Acquire("snd_core.rpl", &sound_handle); + OS_FIND_EXPORT(sound_handle, AXInit); + } +} + void InitAXFunctionPointers(void) { unsigned int *funcPointer = 0; - unsigned int sound_handle; - OSDynLoad_Acquire("sndcore2.rpl", &sound_handle); - OS_FIND_EXPORT(sound_handle, AXInitWithParams); + InitAcquireAX(); + OS_FIND_EXPORT(sound_handle, AXQuit); - OS_FIND_EXPORT(sound_handle, AXGetInputSamplesPerSec); OS_FIND_EXPORT(sound_handle, AXVoiceBegin); OS_FIND_EXPORT(sound_handle, AXVoiceEnd); OS_FIND_EXPORT(sound_handle, AXSetVoiceType); @@ -72,3 +96,23 @@ void InitAXFunctionPointers(void) OS_FIND_EXPORT(sound_handle, AXSetVoiceLoopOffset); } +void ProperlyEndTransitionAudio(void) +{ + bool (* check_os_audio_transition_flag_old)(void); + void (* AXInit_old)(void); + void (* AXQuit_old)(void); + + unsigned int *funcPointer = 0; + unsigned int sound_handle; + OSDynLoad_Acquire("snd_core.rpl", &sound_handle); + + OS_FIND_EXPORT_EX(sound_handle, check_os_audio_transition_flag, check_os_audio_transition_flag_old); + OS_FIND_EXPORT_EX(sound_handle, AXInit, AXInit_old); + OS_FIND_EXPORT_EX(sound_handle, AXQuit, AXQuit_old); + + if (check_os_audio_transition_flag_old()) + { + AXInit_old(); + AXQuit_old(); + } +} diff --git a/wiiu/dynamic_libs/ax_functions.h b/wiiu/dynamic_libs/ax_functions.h index df9647c086..086346f644 100644 --- a/wiiu/dynamic_libs/ax_functions.h +++ b/wiiu/dynamic_libs/ax_functions.h @@ -30,9 +30,14 @@ extern "C" { #include +extern unsigned int sound_handle; + void InitAXFunctionPointers(void); +void InitAcquireAX(void); +void ProperlyEndTransitionAudio(void); extern void (* AXInitWithParams)(u32 * params); +extern void (* AXInit)(void); extern void (* AXQuit)(void); extern u32 (* AXGetInputSamplesPerSec)(void); extern s32 (* AXVoiceBegin)(void *v); diff --git a/wiiu/dynamic_libs/fs_functions.c b/wiiu/dynamic_libs/fs_functions.c index cdcc0bfe7b..08a4fb6de7 100644 --- a/wiiu/dynamic_libs/fs_functions.c +++ b/wiiu/dynamic_libs/fs_functions.c @@ -23,7 +23,6 @@ ***************************************************************************/ #include "fs_functions.h" #include "os_functions.h" -#include "utils/utils.h" EXPORT_DECL(int, FSInit, void); EXPORT_DECL(int, FSShutdown, void); @@ -69,6 +68,12 @@ EXPORT_DECL(int, FSGetStatFile, void *pClient, void *pCmd, int fd, void *buffer, EXPORT_DECL(int, FSSetPosFile, void *pClient, void *pCmd, int fd, int pos, int error); EXPORT_DECL(int, FSWriteFile, void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error); +EXPORT_DECL(int, FSBindMount, void *pClient, void *pCmd, char *source, char *target, int error); +EXPORT_DECL(int, FSBindUnmount, void *pClient, void *pCmd, char *target, int error); + +EXPORT_DECL(int, FSMakeQuota, void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling); +EXPORT_DECL(int, FSMakeQuotaAsync ,void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams); + void InitFSFunctionPointers(void) { unsigned int *funcPointer = 0; @@ -117,4 +122,10 @@ void InitFSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, FSGetStatFile); OS_FIND_EXPORT(coreinit_handle, FSSetPosFile); OS_FIND_EXPORT(coreinit_handle, FSWriteFile); + + OS_FIND_EXPORT(coreinit_handle, FSBindMount); + OS_FIND_EXPORT(coreinit_handle, FSBindUnmount); + + OS_FIND_EXPORT(coreinit_handle, FSMakeQuota); + OS_FIND_EXPORT(coreinit_handle, FSMakeQuotaAsync); } diff --git a/wiiu/dynamic_libs/fs_functions.h b/wiiu/dynamic_libs/fs_functions.h index 7a185e1343..d0246550e3 100644 --- a/wiiu/dynamic_libs/fs_functions.h +++ b/wiiu/dynamic_libs/fs_functions.h @@ -28,7 +28,8 @@ extern "C" { #endif -#include "common/fs_defs.h" +#include +#include "fs_defs.h" void InitFSFunctionPointers(void); @@ -80,6 +81,13 @@ extern int (* FSGetStatFile)(void *pClient, void *pCmd, int fd, void *buffer, in extern int (* FSSetPosFile)(void *pClient, void *pCmd, int fd, int pos, int error); extern int (* FSWriteFile)(void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error); +extern int (* FSBindMount)(void *pClient, void *pCmd, char *source, char *target, int error); +extern int (* FSBindUnmount)(void *pClient, void *pCmd, char *target, int error); + +extern int (* FSMakeQuota)( void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling); +extern int (* FSMakeQuotaAsync)(void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams); + + #ifdef __cplusplus } #endif diff --git a/wiiu/dynamic_libs/gx2_functions.c b/wiiu/dynamic_libs/gx2_functions.c index b9bf671778..a34807ec6f 100644 --- a/wiiu/dynamic_libs/gx2_functions.c +++ b/wiiu/dynamic_libs/gx2_functions.c @@ -23,7 +23,8 @@ ***************************************************************************/ #include "os_functions.h" #include "gx2_types.h" -#include "utils/utils.h" + +unsigned int gx2_handle __attribute__((section(".data"))) = 0; EXPORT_DECL(void, GX2Init, u32 * init_attribs); EXPORT_DECL(void, GX2Shutdown, void); @@ -37,6 +38,7 @@ EXPORT_DECL(void, GX2SetContextState, const GX2ContextState* state); EXPORT_DECL(void, GX2DrawEx, s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count); EXPORT_DECL(void, GX2DrawIndexedEx, s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count); EXPORT_DECL(void, GX2ClearDepthStencilEx, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode); +EXPORT_DECL(void, GX2SetClearDepthStencil, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value); EXPORT_DECL(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 scan_target); EXPORT_DECL(void, GX2SwapScanBuffers, void); EXPORT_DECL(void, GX2SetTVEnable, s32 enable); @@ -89,13 +91,19 @@ EXPORT_DECL(void, GX2SetDRCGamma, f32 gam); EXPORT_DECL(s32, GX2GetSystemTVScanMode, void); EXPORT_DECL(s32, GX2GetSystemDRCScanMode, void); EXPORT_DECL(void, GX2RSetAllocator, void * (* allocFunc)(u32, u32, u32), void (* freeFunc)(u32, void*)); +EXPORT_DECL(void, GX2CopySurface, GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice ); +EXPORT_DECL(void, GX2ClearBuffersEx, GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags); + +void InitAcquireGX2(void) +{ + OSDynLoad_Acquire("gx2.rpl", &gx2_handle); +} void InitGX2FunctionPointers(void) { unsigned int *funcPointer = 0; - unsigned int gx2_handle; - OSDynLoad_Acquire("gx2.rpl", &gx2_handle); + InitAcquireGX2(); OS_FIND_EXPORT(gx2_handle, GX2Init); OS_FIND_EXPORT(gx2_handle, GX2Shutdown); @@ -159,4 +167,7 @@ void InitGX2FunctionPointers(void) OS_FIND_EXPORT(gx2_handle, GX2GetSystemTVScanMode); OS_FIND_EXPORT(gx2_handle, GX2GetSystemDRCScanMode); OS_FIND_EXPORT(gx2_handle, GX2RSetAllocator); + OS_FIND_EXPORT(gx2_handle, GX2CopySurface); + OS_FIND_EXPORT(gx2_handle, GX2ClearBuffersEx); + OS_FIND_EXPORT(gx2_handle, GX2SetClearDepthStencil); } diff --git a/wiiu/dynamic_libs/gx2_functions.h b/wiiu/dynamic_libs/gx2_functions.h index 1737833305..0b06826eac 100644 --- a/wiiu/dynamic_libs/gx2_functions.h +++ b/wiiu/dynamic_libs/gx2_functions.h @@ -30,7 +30,10 @@ extern "C" { #include "gx2_types.h" +extern unsigned int gx2_handle; + void InitGX2FunctionPointers(void); +void InitAcquireGX2(void); extern void (* GX2Init)(u32 * init_attribs); extern void (* GX2Shutdown)(void); @@ -44,6 +47,7 @@ extern void (* GX2SetContextState)(const GX2ContextState* state); extern void (* GX2DrawEx)(s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count); extern void (* GX2DrawIndexedEx)(s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count); extern void (* GX2ClearDepthStencilEx)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode); +extern void (* GX2SetClearDepthStencil)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value); extern void (* GX2CopyColorBufferToScanBuffer)(const GX2ColorBuffer *colorBuffer, s32 scan_target); extern void (* GX2SwapScanBuffers)(void); extern void (* GX2SetTVEnable)(s32 enable); @@ -96,6 +100,8 @@ extern void (* GX2SetDRCGamma)(f32 val); extern s32 (* GX2GetSystemTVScanMode)(void); extern s32 (* GX2GetSystemDRCScanMode)(void); extern void (* GX2RSetAllocator)(void * (*allocFunc)(u32, u32, u32), void (*freeFunc)(u32, void*)); +extern void (* GX2CopySurface)(GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice ); +extern void (* GX2ClearBuffersEx)(GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags); static inline void GX2InitDepthBuffer(GX2DepthBuffer *depthBuffer, s32 dimension, u32 width, u32 height, u32 depth, s32 format, s32 aa) { diff --git a/wiiu/dynamic_libs/os_functions.c b/wiiu/dynamic_libs/os_functions.c index b492bc059d..734e2e5e5a 100644 --- a/wiiu/dynamic_libs/os_functions.c +++ b/wiiu/dynamic_libs/os_functions.c @@ -24,7 +24,7 @@ #include "common/common.h" #include "os_functions.h" -unsigned int coreinit_handle = 0; +unsigned int coreinit_handle __attribute__((section(".data"))) = 0; //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions @@ -32,6 +32,11 @@ unsigned int coreinit_handle = 0; EXPORT_DECL(int, OSDynLoad_Acquire, const char* rpl, u32 *handle); EXPORT_DECL(int, OSDynLoad_FindExport, u32 handle, int isdata, const char *symbol, void *address); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Security functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, OSGetSecurityLevel, void); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -45,6 +50,9 @@ EXPORT_DECL(int, OSJoinThread, void * thread, int * ret_val); EXPORT_DECL(void, OSDetachThread, void * thread); EXPORT_DECL(void, OSSleepTicks, u64 ticks); EXPORT_DECL(u64, OSGetTick, void); +EXPORT_DECL(u64, OSGetTime, void); +EXPORT_DECL(void, OSTicksToCalendarTime, u64 time, OSCalendarTime * calendarTime); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions @@ -58,6 +66,7 @@ EXPORT_DECL(int, OSTryLockMutex, void* mutex); //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_DECL(u64, OSGetTitleID, void); +EXPORT_DECL(void, OSGetArgcArgv, int* argc, char*** argv); EXPORT_DECL(void, __Exit, void); EXPORT_DECL(void, OSFatal, const char* msg); EXPORT_DECL(void, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback); @@ -65,6 +74,7 @@ EXPORT_DECL(void, DCFlushRange, const void *addr, u32 length); EXPORT_DECL(void, ICInvalidateRange, const void *addr, u32 length); EXPORT_DECL(void*, OSEffectiveToPhysical, const void*); EXPORT_DECL(int, __os_snprintf, char* s, int n, const char * format, ...); +EXPORT_DECL(int *, __gh_errno_ptr, void); EXPORT_DECL(void, OSScreenInit, void); EXPORT_DECL(unsigned int, OSScreenGetBufferSizeEx, unsigned int bufferNum); @@ -90,33 +100,79 @@ EXPORT_DECL(int , MEMCreateExpHeapEx, void* address, unsigned int size, unsigned EXPORT_DECL(void *, MEMDestroyExpHeap, int heap); EXPORT_DECL(void, MEMFreeToExpHeap, int heap, void* ptr); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! MCP functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, MCP_Open, void); +EXPORT_DECL(int, MCP_Close, int handle); +EXPORT_DECL(int, MCP_GetOwnTitleInfo, int handle, void * data); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Loader functions (not real rpl) //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_DECL(int, LiWaitIopComplete, int unknown_syscall_arg_r3, int * remaining_bytes); EXPORT_DECL(int, LiWaitIopCompleteWithInterrupts, int unknown_syscall_arg_r3, int * remaining_bytes); +EXPORT_DECL(void, addr_LiWaitOneChunk, void); +EXPORT_DECL(void, addr_sgIsLoadingBuffer, void); +EXPORT_DECL(void, addr_gDynloadInitialized, void); -void InitOSFunctionPointers(void) +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Kernel function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void, addr_PrepareTitle_hook, void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Other function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void, DCInvalidateRange, void *buffer, uint32_t length); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Energy Saver functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//Burn-in Reduction +EXPORT_DECL(int, IMEnableDim,void); +EXPORT_DECL(int, IMDisableDim,void); +EXPORT_DECL(int, IMIsDimEnabled,int * result); +//Auto power down +EXPORT_DECL(int, IMEnableAPD,void); +EXPORT_DECL(int, IMDisableAPD,void); +EXPORT_DECL(int, IMIsAPDEnabled,int * result); +EXPORT_DECL(int, IMIsAPDEnabledBySysSettings,int * result); + +void InitAcquireOS(void) { - unsigned int *funcPointer = 0; - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_FUNC_WRITE(OSDynLoad_Acquire, (int (*)(const char*, unsigned *))OS_SPECIFICS->addr_OSDynLoad_Acquire); EXPORT_FUNC_WRITE(OSDynLoad_FindExport, (int (*)(u32, int, const char *, void *))OS_SPECIFICS->addr_OSDynLoad_FindExport); OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); +} +void InitOSFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + InitAcquireOS(); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Security functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSGetSecurityLevel); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OS_FIND_EXPORT(coreinit_handle, OSFatal); OS_FIND_EXPORT(coreinit_handle, OSGetTitleID); + OS_FIND_EXPORT(coreinit_handle, OSGetArgcArgv); OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallback); OS_FIND_EXPORT(coreinit_handle, DCFlushRange); OS_FIND_EXPORT(coreinit_handle, ICInvalidateRange); OS_FIND_EXPORT(coreinit_handle, OSEffectiveToPhysical); OS_FIND_EXPORT(coreinit_handle, __os_snprintf); + OS_FIND_EXPORT(coreinit_handle, __gh_errno_ptr); + OSDynLoad_FindExport(coreinit_handle, 0, "_Exit", &__Exit); OS_FIND_EXPORT(coreinit_handle, OSScreenInit); @@ -139,6 +195,9 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, OSDetachThread); OS_FIND_EXPORT(coreinit_handle, OSSleepTicks); OS_FIND_EXPORT(coreinit_handle, OSGetTick); + OS_FIND_EXPORT(coreinit_handle, OSGetTime); + OS_FIND_EXPORT(coreinit_handle, OSTicksToCalendarTime); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -146,6 +205,12 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, OSLockMutex); OS_FIND_EXPORT(coreinit_handle, OSUnlockMutex); OS_FIND_EXPORT(coreinit_handle, OSTryLockMutex); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! MCP functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, MCP_Open); + OS_FIND_EXPORT(coreinit_handle, MCP_Close); + OS_FIND_EXPORT(coreinit_handle, MCP_GetOwnTitleInfo); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Memory functions @@ -162,5 +227,100 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, MEMCreateExpHeapEx); OS_FIND_EXPORT(coreinit_handle, MEMDestroyExpHeap); OS_FIND_EXPORT(coreinit_handle, MEMFreeToExpHeap); -} + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Other function addresses + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, DCInvalidateRange); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Energy Saver functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //Burn-in Reduction + OS_FIND_EXPORT(coreinit_handle, IMEnableDim); + OS_FIND_EXPORT(coreinit_handle, IMDisableDim); + OS_FIND_EXPORT(coreinit_handle, IMIsDimEnabled); + //Auto power down + OS_FIND_EXPORT(coreinit_handle, IMEnableAPD); + OS_FIND_EXPORT(coreinit_handle, IMDisableAPD); + OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabled); + OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabledBySysSettings); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Special non library functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + if(OS_FIRMWARE == 532 || OS_FIRMWARE == 540) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FFA4); // loader.elf + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FE90); // loader.elf + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC); // loader.elf + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18558); // kernel.elf + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00); // loader.elf + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C); // loader.elf + } + else if(OS_FIRMWARE == 500 || OS_FIRMWARE == 510) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FBC4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FAB0); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18534); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C); + } + else if(OS_FIRMWARE == 410) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF166DC); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC); + } + else if(OS_FIRMWARE == 400) //same for 402 and 403 + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15E70); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC); + } + else if(OS_FIRMWARE == 550) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x01010180); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0101006C); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x0100080C); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF184E4); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19E80); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13DBC); + } + else if(OS_FIRMWARE == 310) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15A0C); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C); + } + else if(OS_FIRMWARE == 300) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15974); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C); + } + else + { + OSFatal("Missing all OS specific addresses."); + } +} diff --git a/wiiu/dynamic_libs/os_functions.h b/wiiu/dynamic_libs/os_functions.h index 0354e53d69..cae471c694 100644 --- a/wiiu/dynamic_libs/os_functions.h +++ b/wiiu/dynamic_libs/os_functions.h @@ -26,6 +26,7 @@ #include #include "common/os_defs.h" +#include "os_types.h" #ifdef __cplusplus extern "C" { @@ -33,10 +34,8 @@ extern "C" { #define BUS_SPEED 248625000 //#define SECS_TO_TICKS(sec) (((unsigned long long)(sec)) * (BUS_SPEED/4)) -#define SECS_TO_TICKS(sec) sec -#define MILLISECS_TO_TICKS(msec) (SECS_TO_TICKS(msec) / 1000) +//#define MILLISECS_TO_TICKS(msec) (SECS_TO_TICKS(msec) / 1000) //#define MICROSECS_TO_TICKS(usec) (SECS_TO_TICKS(usec) / 1000000) -#define MICROSECS_TO_TICKS(usec) usec //#define usleep(usecs) OSSleepTicks(MICROSECS_TO_TICKS(usecs)) //#define sleep(secs) OSSleepTicks(SECS_TO_TICKS(secs)) @@ -68,6 +67,7 @@ extern "C" { /* Handle for coreinit */ extern unsigned int coreinit_handle; void InitOSFunctionPointers(void); +void InitAcquireOS(void); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions @@ -75,6 +75,11 @@ void InitOSFunctionPointers(void); extern int (* OSDynLoad_Acquire)(const char* rpl, u32 *handle); extern int (* OSDynLoad_FindExport)(u32 handle, int isdata, const char *symbol, void *address); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Security functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* OSGetSecurityLevel)(void); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -88,6 +93,8 @@ extern int (* OSSetThreadPriority)(void * thread, int priority); extern void (* OSDetachThread)(void * thread); extern void (* OSSleepTicks)(u64 ticks); extern u64 (* OSGetTick)(void); +extern u64 (* OSGetTime)(void); +extern void (*OSTicksToCalendarTime)(u64 time, OSCalendarTime *calendarTime); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions @@ -101,12 +108,14 @@ extern int (* OSTryLockMutex)(void* mutex); //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern u64 (* OSGetTitleID)(void); +extern void (* OSGetArgcArgv)(int* argc, char*** argv); extern void (* __Exit)(void); extern void (* OSFatal)(const char* msg); extern void (* DCFlushRange)(const void *addr, u32 length); extern void (* ICInvalidateRange)(const void *addr, u32 length); extern void* (* OSEffectiveToPhysical)(const void*); extern int (* __os_snprintf)(char* s, int n, const char * format, ...); +extern int * (* __gh_errno_ptr)(void); extern void (*OSScreenInit)(void); extern unsigned int (*OSScreenGetBufferSizeEx)(unsigned int bufferNum); @@ -119,9 +128,44 @@ extern int (*OSScreenEnableEx)(unsigned int bufferNum, int enable); typedef unsigned char (*exception_callback)(void * interruptedContext); extern void (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! MCP functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* MCP_Open)(void); +extern int (* MCP_Close)(int handle); +extern int (* MCP_GetOwnTitleInfo)(int handle, void * data); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! LOADER functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern int (* LiWaitIopComplete)(int unknown_syscall_arg_r3, int * remaining_bytes); extern int (* LiWaitIopCompleteWithInterrupts)(int unknown_syscall_arg_r3, int * remaining_bytes); +extern void (* addr_LiWaitOneChunk)(void); +extern void (* addr_sgIsLoadingBuffer)(void); +extern void (* addr_gDynloadInitialized)(void); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Kernel function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void (* addr_PrepareTitle_hook)(void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Other function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void (*DCInvalidateRange)(void *buffer, uint32_t length); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Energy Saver functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +////Burn-in Reduction +extern int (*IMEnableDim)(void); +extern int (*IMDisableDim)(void); +extern int (*IMIsDimEnabled)(int * result); +//Auto power down +extern int (*IMEnableAPD)(void); +extern int (*IMDisableAPD)(void); +extern int (*IMIsAPDEnabled)(int * result); +extern int (*IMIsAPDEnabledBySysSettings)(int * result); #ifdef __cplusplus } diff --git a/wiiu/dynamic_libs/padscore_functions.c b/wiiu/dynamic_libs/padscore_functions.c index c51764fa26..f7ca8e9b9b 100644 --- a/wiiu/dynamic_libs/padscore_functions.c +++ b/wiiu/dynamic_libs/padscore_functions.c @@ -24,27 +24,38 @@ #include "os_functions.h" #include "padscore_functions.h" +unsigned int padscore_handle __attribute__((section(".data"))) = 0; + EXPORT_DECL(void, KPADInit, void); +EXPORT_DECL(void, WPADInit, void); EXPORT_DECL(s32, WPADProbe, s32 chan, u32 * pad_type); EXPORT_DECL(s32, WPADSetDataFormat, s32 chan, s32 format); EXPORT_DECL(void, WPADEnableURCC, s32 enable); EXPORT_DECL(void, WPADRead, s32 chan, void * data); EXPORT_DECL(s32, KPADRead, s32 chan, void * data, u32 size); +EXPORT_DECL(void,WPADSetAutoSleepTime,u8 minute); +EXPORT_DECL(void,WPADDisconnect,s32 chan); + +void InitAcquirePadScore(void) +{ + OSDynLoad_Acquire("padscore.rpl", &padscore_handle); +} void InitPadScoreFunctionPointers(void) { unsigned int *funcPointer = 0; - unsigned int padscore_handle; - OSDynLoad_Acquire("padscore.rpl", &padscore_handle); + InitAcquirePadScore(); + OS_FIND_EXPORT(padscore_handle, WPADInit); OS_FIND_EXPORT(padscore_handle, KPADInit); OS_FIND_EXPORT(padscore_handle, WPADProbe); OS_FIND_EXPORT(padscore_handle, WPADSetDataFormat); OS_FIND_EXPORT(padscore_handle, WPADEnableURCC); OS_FIND_EXPORT(padscore_handle, WPADRead); OS_FIND_EXPORT(padscore_handle, KPADRead); + OS_FIND_EXPORT(padscore_handle, WPADSetAutoSleepTime); + OS_FIND_EXPORT(padscore_handle, WPADDisconnect); KPADInit(); WPADEnableURCC(1); } - diff --git a/wiiu/dynamic_libs/padscore_functions.h b/wiiu/dynamic_libs/padscore_functions.h index 26eda1a6f3..5b000b19c8 100644 --- a/wiiu/dynamic_libs/padscore_functions.h +++ b/wiiu/dynamic_libs/padscore_functions.h @@ -28,6 +28,10 @@ extern "C" { #endif +#include "dynamic_libs/vpad_functions.h" + +extern unsigned int padscore_handle; + #include #define WPAD_BUTTON_LEFT 0x0001 @@ -60,8 +64,34 @@ extern "C" { #define WPAD_CLASSIC_BUTTON_DOWN 0x4000 #define WPAD_CLASSIC_BUTTON_RIGHT 0x8000 -void InitPadScoreFunctionPointers(void); +#define WPAD_PRO_BUTTON_UP 0x00000001 +#define WPAD_PRO_BUTTON_LEFT 0x00000002 +#define WPAD_PRO_TRIGGER_ZR 0x00000004 +#define WPAD_PRO_BUTTON_X 0x00000008 +#define WPAD_PRO_BUTTON_A 0x00000010 +#define WPAD_PRO_BUTTON_Y 0x00000020 +#define WPAD_PRO_BUTTON_B 0x00000040 +#define WPAD_PRO_TRIGGER_ZL 0x00000080 +#define WPAD_PRO_RESERVED 0x00000100 +#define WPAD_PRO_TRIGGER_R 0x00000200 +#define WPAD_PRO_BUTTON_PLUS 0x00000400 +#define WPAD_PRO_BUTTON_HOME 0x00000800 +#define WPAD_PRO_BUTTON_MINUS 0x00001000 +#define WPAD_PRO_TRIGGER_L 0x00002000 +#define WPAD_PRO_BUTTON_DOWN 0x00004000 +#define WPAD_PRO_BUTTON_RIGHT 0x00008000 +#define WPAD_PRO_BUTTON_STICK_R 0x00010000 +#define WPAD_PRO_BUTTON_STICK_L 0x00020000 +#define WPAD_PRO_STICK_L_EMULATION_UP 0x00200000 +#define WPAD_PRO_STICK_L_EMULATION_DOWN 0x00100000 +#define WPAD_PRO_STICK_L_EMULATION_LEFT 0x00040000 +#define WPAD_PRO_STICK_L_EMULATION_RIGHT 0x00080000 + +#define WPAD_PRO_STICK_R_EMULATION_UP 0x02000000 +#define WPAD_PRO_STICK_R_EMULATION_DOWN 0x01000000 +#define WPAD_PRO_STICK_R_EMULATION_LEFT 0x00400000 +#define WPAD_PRO_STICK_R_EMULATION_RIGHT 0x00800000 typedef struct _KPADData { @@ -78,7 +108,7 @@ typedef struct _KPADData u8 device_type; u8 wpad_error; u8 pos_valid; - u8 unused_4[1]; + u8 format; union { @@ -101,19 +131,38 @@ typedef struct _KPADData f32 rtrigger; } classic; + struct + { + u32 btns_h; + u32 btns_d; + u32 btns_r; + f32 lstick_x; + f32 lstick_y; + f32 rstick_x; + f32 rstick_y; + int charging; + int wired; + } pro; + u32 unused_6[20]; }; u32 unused_7[16]; } KPADData; +void InitPadScoreFunctionPointers(void); +void InitAcquirePadScore(void); typedef void (* wpad_connect_callback_t)(s32 chan, s32 status); extern void (* KPADInit)(void); +extern void (* WPADInit)(void); extern s32 (* WPADProbe)(s32 chan, u32 * pad_type); extern s32 (* WPADSetDataFormat)(s32 chan, s32 format); extern void (* WPADEnableURCC)(s32 enable); extern void (* WPADRead)(s32 chan, void * data); extern s32 (* KPADRead)(s32 chan, void * data, u32 size); +extern s32 (* KPADReadEx)(s32 chan, KPADData * data, u32 size, s32 *error); +extern void (*WPADSetAutoSleepTime)(u8 time); +extern void (*WPADDisconnect)( s32 chan ); #ifdef __cplusplus } diff --git a/wiiu/dynamic_libs/socket_functions.c b/wiiu/dynamic_libs/socket_functions.c index 8f72ced04e..de2c31f53f 100644 --- a/wiiu/dynamic_libs/socket_functions.c +++ b/wiiu/dynamic_libs/socket_functions.c @@ -26,6 +26,8 @@ u32 hostIpAddress = 0; +unsigned int nsysnet_handle __attribute__((section(".data"))) = 0; + EXPORT_DECL(void, socket_lib_init, void); EXPORT_DECL(int, socket, int domain, int type, int protocol); EXPORT_DECL(int, socketclose, int s); @@ -35,27 +37,26 @@ EXPORT_DECL(int, listen, s32 s,u32 backlog); EXPORT_DECL(int, accept, s32 s,struct sockaddr *addr,s32 *addrlen); EXPORT_DECL(int, send, int s, const void *buffer, int size, int flags); EXPORT_DECL(int, recv, int s, void *buffer, int size, int flags); +EXPORT_DECL(int, recvfrom,int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen); EXPORT_DECL(int, sendto, int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len); EXPORT_DECL(int, setsockopt, int s, int level, int optname, void *optval, int optlen); EXPORT_DECL(char *, inet_ntoa, struct in_addr in); EXPORT_DECL(int, inet_aton, const char *cp, struct in_addr *inp); +EXPORT_DECL(int, NSSLWrite, int connection, const void* buf, int len,int * written); +EXPORT_DECL(int, NSSLRead, int connection, const void* buf, int len,int * read); +EXPORT_DECL(int, NSSLCreateConnection, int context, const char* host, int hotlen,int options,int sock,int block); + +void InitAcquireSocket(void) +{ + OSDynLoad_Acquire("nsysnet.rpl", &nsysnet_handle); +} + void InitSocketFunctionPointers(void) { - unsigned int nsysnet_handle; unsigned int *funcPointer = 0; - OSDynLoad_Acquire("nsysnet.rpl", &nsysnet_handle); - unsigned int nn_ac_handle; - int(*ACInitialize)(); - int(*ACGetStartupId) (unsigned int *id); - int(*ACConnectWithConfigId) (unsigned int id); - int(*ACGetAssignedAddress) (u32 * ip); - OSDynLoad_Acquire("nn_ac.rpl", &nn_ac_handle); - OSDynLoad_FindExport(nn_ac_handle, 0, "ACInitialize", &ACInitialize); - OSDynLoad_FindExport(nn_ac_handle, 0, "ACGetStartupId", &ACGetStartupId); - OSDynLoad_FindExport(nn_ac_handle, 0, "ACConnectWithConfigId",&ACConnectWithConfigId); - OSDynLoad_FindExport(nn_ac_handle, 0, "ACGetAssignedAddress",&ACGetAssignedAddress); + InitAcquireSocket(); OS_FIND_EXPORT(nsysnet_handle, socket_lib_init); OS_FIND_EXPORT(nsysnet_handle, socket); @@ -66,17 +67,15 @@ void InitSocketFunctionPointers(void) OS_FIND_EXPORT(nsysnet_handle, accept); OS_FIND_EXPORT(nsysnet_handle, send); OS_FIND_EXPORT(nsysnet_handle, recv); + OS_FIND_EXPORT(nsysnet_handle, recvfrom); OS_FIND_EXPORT(nsysnet_handle, sendto); OS_FIND_EXPORT(nsysnet_handle, setsockopt); OS_FIND_EXPORT(nsysnet_handle, inet_ntoa); OS_FIND_EXPORT(nsysnet_handle, inet_aton); - unsigned int nn_startupid; - ACInitialize(); - ACGetStartupId(&nn_startupid); - ACConnectWithConfigId(nn_startupid); - ACGetAssignedAddress(&hostIpAddress); + OS_FIND_EXPORT(nsysnet_handle, NSSLWrite); + OS_FIND_EXPORT(nsysnet_handle, NSSLRead); + OS_FIND_EXPORT(nsysnet_handle, NSSLCreateConnection); socket_lib_init(); } - diff --git a/wiiu/dynamic_libs/socket_functions.h b/wiiu/dynamic_libs/socket_functions.h index c051246a2e..1e4df1a293 100644 --- a/wiiu/dynamic_libs/socket_functions.h +++ b/wiiu/dynamic_libs/socket_functions.h @@ -28,6 +28,8 @@ extern "C" { #endif +extern unsigned int nsysnet_handle; + #include #define INADDR_ANY 0 @@ -47,6 +49,10 @@ extern "C" { #define SO_REUSEADDR 0x0004 #define SO_NONBLOCK 0x1016 #define SO_MYADDR 0x1013 +#define SO_RCVTIMEO 0x1006 + +#define SOL_SOCKET -1 +#define MSG_DONTWAIT 32 #define htonl(x) x #define htons(x) x @@ -72,6 +78,7 @@ struct sockaddr void InitSocketFunctionPointers(void); +void InitAcquireSocket(void); extern void (*socket_lib_init)(void); extern int (*socket)(int domain, int type, int protocol); @@ -82,9 +89,15 @@ extern int (*listen)(s32 s,u32 backlog); extern int (*accept)(s32 s,struct sockaddr *addr,s32 *addrlen); extern int (*send)(int s, const void *buffer, int size, int flags); extern int (*recv)(int s, void *buffer, int size, int flags); +extern int (*recvfrom)(int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen); + extern int (*sendto)(int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len); extern int (*setsockopt)(int s, int level, int optname, void *optval, int optlen); +extern int (* NSSLWrite)(int connection, const void* buf, int len,int * written); +extern int (* NSSLRead)(int connection, const void* buf, int len,int * read); +extern int (* NSSLCreateConnection)(int context, const char* host, int hotlen,int options,int sock,int block); + extern char * (*inet_ntoa)(struct in_addr in); extern int (*inet_aton)(const char *cp, struct in_addr *inp); diff --git a/wiiu/dynamic_libs/sys_functions.c b/wiiu/dynamic_libs/sys_functions.c index ea7649e973..c0545498fd 100644 --- a/wiiu/dynamic_libs/sys_functions.c +++ b/wiiu/dynamic_libs/sys_functions.c @@ -23,18 +23,27 @@ ***************************************************************************/ #include "os_functions.h" -EXPORT_DECL(void, _SYSLaunchTitleByPathFromLauncher, const char* path, int len, int zero); -EXPORT_DECL(int, SYSRelaunchTitle, int argc, char* argv); + unsigned int sysapp_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(int, _SYSLaunchTitleByPathFromLauncher, const char* path, int len, int zero); +EXPORT_DECL(int, SYSRelaunchTitle, int argc, char** argv); EXPORT_DECL(int, SYSLaunchMenu, void); +EXPORT_DECL(int, SYSCheckTitleExists, u64 titleId); +EXPORT_DECL(int, SYSLaunchTitle, u64 titleId); + +void InitAcquireSys(void) +{ + OSDynLoad_Acquire("sysapp.rpl", &sysapp_handle); +} void InitSysFunctionPointers(void) { unsigned int *funcPointer = 0; - unsigned int sysapp_handle; - OSDynLoad_Acquire("sysapp.rpl", &sysapp_handle); + InitAcquireSys(); OS_FIND_EXPORT(sysapp_handle, _SYSLaunchTitleByPathFromLauncher); OS_FIND_EXPORT(sysapp_handle, SYSRelaunchTitle); OS_FIND_EXPORT(sysapp_handle, SYSLaunchMenu); + OS_FIND_EXPORT(sysapp_handle, SYSCheckTitleExists); + OS_FIND_EXPORT(sysapp_handle, SYSLaunchTitle); } - diff --git a/wiiu/dynamic_libs/sys_functions.h b/wiiu/dynamic_libs/sys_functions.h index 18c90658c1..08ca21b922 100644 --- a/wiiu/dynamic_libs/sys_functions.h +++ b/wiiu/dynamic_libs/sys_functions.h @@ -28,11 +28,16 @@ extern "C" { #endif -void InitSysFunctionPointers(void); +extern unsigned int sysapp_handle; -extern void(*_SYSLaunchTitleByPathFromLauncher)(const char* path, int len, int zero); -extern int (* SYSRelaunchTitle)(int argc, char* argv); +void InitSysFunctionPointers(void); +void InitAcquireSys(void); + +extern int(*_SYSLaunchTitleByPathFromLauncher)(const char* path, int len, int zero); +extern int (* SYSRelaunchTitle)(int argc, char** argv); extern int (* SYSLaunchMenu)(void); +extern int (* SYSCheckTitleExists)(u64 titleId); +extern int (* SYSLaunchTitle)(u64 titleId); #ifdef __cplusplus diff --git a/wiiu/dynamic_libs/vpad_functions.c b/wiiu/dynamic_libs/vpad_functions.c index a2d8e3ff40..201cf343c8 100644 --- a/wiiu/dynamic_libs/vpad_functions.c +++ b/wiiu/dynamic_libs/vpad_functions.c @@ -24,16 +24,32 @@ #include "os_functions.h" #include "vpad_functions.h" +unsigned int vpad_handle __attribute__((section(".data"))) = 0; +unsigned int vpadbase_handle __attribute__((section(".data"))) = 0; + EXPORT_DECL(void, VPADInit, void); -EXPORT_DECL(void, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error); +EXPORT_DECL(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error); +EXPORT_DECL(int, VPADGetLcdMode, int padnum, int *lcdmode); +EXPORT_DECL(int, VPADSetLcdMode, int padnum, int lcdmode); +EXPORT_DECL(int, VPADBASEGetMotorOnRemainingCount, int padnum); +EXPORT_DECL(int, VPADBASESetMotorOnRemainingCount, int padnum, int counter); + +void InitAcquireVPad(void) +{ + OSDynLoad_Acquire("vpad.rpl", &vpad_handle); + OSDynLoad_Acquire("vpadbase.rpl", &vpadbase_handle); +} void InitVPadFunctionPointers(void) { unsigned int *funcPointer = 0; - unsigned int vpad_handle; - OSDynLoad_Acquire("vpad.rpl", &vpad_handle); + + InitAcquireVPad(); OS_FIND_EXPORT(vpad_handle, VPADInit); OS_FIND_EXPORT(vpad_handle, VPADRead); + OS_FIND_EXPORT(vpad_handle, VPADGetLcdMode); + OS_FIND_EXPORT(vpad_handle, VPADSetLcdMode); + OS_FIND_EXPORT(vpadbase_handle, VPADBASEGetMotorOnRemainingCount); + OS_FIND_EXPORT(vpadbase_handle, VPADBASESetMotorOnRemainingCount); } - diff --git a/wiiu/dynamic_libs/vpad_functions.h b/wiiu/dynamic_libs/vpad_functions.h index 00f7983be8..4fafda2d80 100644 --- a/wiiu/dynamic_libs/vpad_functions.h +++ b/wiiu/dynamic_libs/vpad_functions.h @@ -28,6 +28,9 @@ extern "C" { #endif +extern unsigned int vpad_handle; +extern unsigned int vpadbase_handle; + #include #define VPAD_BUTTON_A 0x8000 @@ -50,16 +53,20 @@ extern "C" { #define VPAD_BUTTON_STICK_L 0x00040000 #define VPAD_BUTTON_TV 0x00010000 -#define VPAD_STICK_R_EMULATION_LEFT 0x04000000 -#define VPAD_STICK_R_EMULATION_RIGHT 0x02000000 -#define VPAD_STICK_R_EMULATION_UP 0x01000000 -#define VPAD_STICK_R_EMULATION_DOWN 0x00800000 +#define VPAD_STICK_R_EMULATION_LEFT 0x04000000 +#define VPAD_STICK_R_EMULATION_RIGHT 0x02000000 +#define VPAD_STICK_R_EMULATION_UP 0x01000000 +#define VPAD_STICK_R_EMULATION_DOWN 0x00800000 -#define VPAD_STICK_L_EMULATION_LEFT 0x40000000 -#define VPAD_STICK_L_EMULATION_RIGHT 0x20000000 -#define VPAD_STICK_L_EMULATION_UP 0x10000000 -#define VPAD_STICK_L_EMULATION_DOWN 0x08000000 +#define VPAD_STICK_L_EMULATION_LEFT 0x40000000 +#define VPAD_STICK_L_EMULATION_RIGHT 0x20000000 +#define VPAD_STICK_L_EMULATION_UP 0x10000000 +#define VPAD_STICK_L_EMULATION_DOWN 0x08000000 +//! Own definitions +#define VPAD_BUTTON_TOUCH 0x00080000 +#define VPAD_MASK_EMULATED_STICKS 0x7F800000 +#define VPAD_MASK_BUTTONS ~VPAD_MASK_EMULATED_STICKS typedef struct { @@ -91,9 +98,14 @@ typedef struct } VPADData; void InitVPadFunctionPointers(void); +void InitAcquireVPad(void); +extern int (* VPADRead)(int chan, VPADData *buffer, u32 buffer_size, s32 *error); +extern int (* VPADGetLcdMode)(int padnum, int *lcdmode); +extern int (* VPADSetLcdMode)(int padnum, int lcdmode); extern void (* VPADInit)(void); -extern void (* VPADRead)(int chan, VPADData *buffer, u32 buffer_size, s32 *error); +extern int (* VPADBASEGetMotorOnRemainingCount)(int lcdmode); +extern int (* VPADBASESetMotorOnRemainingCount)(int lcdmode,int counter); #ifdef __cplusplus }