mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2024-11-10 12:55:05 +01:00
Added new macros for FS and overlay access.
Now the plugin don't need to use the INITIALIZE_PLUGIN hook for fs and overlay access, but use the WUPS_FS_ACCESS()/WUPS_ALLOW_OVERLAY() macro.
This commit is contained in:
parent
6ab6e0532a
commit
1024338498
@ -121,6 +121,8 @@ extern "C" int Menu_Main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
if(result == APPLICATION_CLOSE_APPLY) {
|
||||
CallHook(WUPS_LOADER_HOOK_INIT_FS);
|
||||
CallHook(WUPS_LOADER_HOOK_INIT_OVERLAY);
|
||||
CallHook(WUPS_LOADER_HOOK_INIT_PLUGIN);
|
||||
DEBUG_FUNCTION_LINE("Loading the system menu.\n");
|
||||
DeInit();
|
||||
|
@ -31,9 +31,6 @@ struct rpl_handling {
|
||||
const char rplname[15];
|
||||
u32 handle;
|
||||
};
|
||||
|
||||
#define FUNCTION_PATCHER_METHOD_STORE_SIZE 7
|
||||
|
||||
#define STATIC_FUNCTION 0
|
||||
#define DYNAMIC_FUNCTION 1
|
||||
|
||||
|
@ -64,21 +64,27 @@ void CallHookEx(wups_loader_hook_type_t hook_type, s32 plugin_index_needed) {
|
||||
// Adding arguments!
|
||||
|
||||
if(func_ptr != NULL) {
|
||||
if(hook_type == WUPS_LOADER_HOOK_INIT_PLUGIN) {
|
||||
wups_loader_init_plugin_args_t args;
|
||||
args.fs_wrapper.open_repl = (const void*)&open;
|
||||
args.fs_wrapper.close_repl = (const void*)&close;
|
||||
args.fs_wrapper.write_repl = (const void*)&write;
|
||||
args.fs_wrapper.read_repl = (const void*)&read;
|
||||
args.fs_wrapper.lseek_repl = (const void*)&lseek;
|
||||
args.fs_wrapper.stat_repl = (const void*)&stat;
|
||||
args.fs_wrapper.fstat_repl = (const void*)&fstat;
|
||||
args.fs_wrapper.opendir_repl = (const void*)&opendir;
|
||||
args.fs_wrapper.closedir_repl = (const void*)&closedir;
|
||||
args.fs_wrapper.readdir_repl = (const void*)&readdir;
|
||||
if(hook_type == WUPS_LOADER_HOOK_INIT_FS) {
|
||||
wups_loader_init_fs_args_t args;
|
||||
args.open_repl = (const void*)&open;
|
||||
args.close_repl = (const void*)&close;
|
||||
args.write_repl = (const void*)&write;
|
||||
args.read_repl = (const void*)&read;
|
||||
args.lseek_repl = (const void*)&lseek;
|
||||
args.stat_repl = (const void*)&stat;
|
||||
args.fstat_repl = (const void*)&fstat;
|
||||
args.opendir_repl = (const void*)&opendir;
|
||||
args.closedir_repl = (const void*)&closedir;
|
||||
args.readdir_repl = (const void*)&readdir;
|
||||
|
||||
((void (*)(wups_loader_init_fs_args_t))((unsigned int*)func_ptr) )(args);
|
||||
} else if(hook_type == WUPS_LOADER_HOOK_INIT_OVERLAY) {
|
||||
wups_loader_init_overlay_args_t args;
|
||||
args.overlayfunction_ptr = (const void*)&overlay_helper;
|
||||
|
||||
((void (*)(wups_loader_init_plugin_args_t))((unsigned int*)func_ptr) )(args);
|
||||
((void (*)(wups_loader_init_overlay_args_t))((unsigned int*)func_ptr) )(args);
|
||||
} else if(hook_type == WUPS_LOADER_HOOK_INIT_PLUGIN) {
|
||||
((void (*)(void))((unsigned int*)func_ptr) )();
|
||||
} else if(hook_type == WUPS_LOADER_HOOK_DEINIT_PLUGIN) {
|
||||
((void (*)(void))((unsigned int*)func_ptr) )();
|
||||
} else if(hook_type == WUPS_LOADER_HOOK_STARTING_APPLICATION) {
|
||||
|
@ -16,6 +16,15 @@ WUPS_PLUGIN_VERSION("v1.0");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("BSD");
|
||||
|
||||
/**
|
||||
Add this to one of your projects file to have access to SD/USB.
|
||||
**/
|
||||
WUPS_FS_ACCESS()
|
||||
/**
|
||||
Add this to one of your projects file to be able to create overlays.
|
||||
**/
|
||||
WUPS_ALLOW_OVERLAY()
|
||||
|
||||
/**
|
||||
All of this defines can be used in ANY file.
|
||||
It's possible to split it up into multiple files.
|
||||
@ -26,7 +35,6 @@ WUPS_PLUGIN_LICENSE("BSD");
|
||||
Get's called ONCE when the loader exits, but BEFORE the ON_APPLICATION_START gets called or functions are overridden.
|
||||
**/
|
||||
INITIALIZE_PLUGIN(){
|
||||
// Initializes overlay and fs features in the background.
|
||||
InitOSFunctionPointers();
|
||||
InitSocketFunctionPointers();
|
||||
|
||||
|
@ -15,14 +15,13 @@ WUPS_PLUGIN_VERSION("v1.0");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
// We want access to the SDCard!
|
||||
WUPS_FS_ACCESS()
|
||||
|
||||
#define SD_PATH "sd:"
|
||||
#define WIIU_PATH "/wiiu"
|
||||
#define DEFAULT_HID_TO_VPAD_PATH SD_PATH WIIU_PATH "/apps/hidtovpad"
|
||||
|
||||
INITIALIZE_PLUGIN(){
|
||||
// Needed for SD access
|
||||
}
|
||||
|
||||
DEINITIALIZE_PLUGIN(){
|
||||
//CursorDrawer::destroyInstance();
|
||||
ControllerPatcher::DeInit();
|
||||
|
@ -11,7 +11,6 @@ WUPS_PLUGIN_VERSION("v1.0");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
|
||||
ON_APPLICATION_START(args) {
|
||||
InitOSFunctionPointers();
|
||||
InitSocketFunctionPointers();
|
||||
|
@ -37,9 +37,10 @@ WUPS_PLUGIN_VERSION("v0.1");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
INITIALIZE_PLUGIN(){
|
||||
// To init the overlay and FS
|
||||
}
|
||||
/*
|
||||
To be able to create overlays
|
||||
*/
|
||||
WUPS_ALLOW_OVERLAY()
|
||||
|
||||
/* Entry point */
|
||||
ON_APPLICATION_START(args){
|
||||
@ -52,5 +53,5 @@ ON_APPLICATION_START(args){
|
||||
|
||||
log_init();
|
||||
|
||||
DEBUG_FUNCTION_LINE("OVERLAY TEST INIT DONE.\n");
|
||||
DEBUG_FUNCTION_LINE("OVERLAYTEST INIT DONE.\n");
|
||||
}
|
@ -20,9 +20,7 @@ WUPS_PLUGIN_VERSION("v1.0");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
INITIALIZE_PLUGIN(){
|
||||
// Initializes overlay and fs features in the background.
|
||||
}
|
||||
WUPS_FS_ACCESS()
|
||||
|
||||
ON_APPLICATION_START(args) {
|
||||
InitOSFunctionPointers();
|
||||
|
@ -43,6 +43,7 @@ WUPS_PLUGIN_VERSION("v1.0");
|
||||
WUPS_PLUGIN_AUTHOR("Maschell");
|
||||
WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
WUPS_FS_ACCESS()
|
||||
|
||||
u32 SplashScreen(s32 time,s32 combotime);
|
||||
|
||||
|
@ -21,19 +21,17 @@ static void * new_readdir_ptr __attribute__((section(".data"))) = NULL;
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void WUPS_InitFS(wups_loader_init_plugin_args_t* args){
|
||||
if(args != NULL){
|
||||
new_open_ptr = (void*) args->fs_wrapper.open_repl;
|
||||
new_close_ptr = (void*) args->fs_wrapper.close_repl;
|
||||
new_write_ptr = (void*) args->fs_wrapper.write_repl;
|
||||
new_read_ptr = (void*) args->fs_wrapper.read_repl;
|
||||
new_lseek_ptr = (void*) args->fs_wrapper.lseek_repl;
|
||||
new_stat_ptr = (void*) args->fs_wrapper.stat_repl;
|
||||
new_fstat_ptr = (void*) args->fs_wrapper.fstat_repl;
|
||||
new_opendir_ptr = (void*) args->fs_wrapper.opendir_repl;
|
||||
new_closedir_ptr = (void*) args->fs_wrapper.closedir_repl;
|
||||
new_readdir_ptr = (void*) args->fs_wrapper.readdir_repl;
|
||||
}
|
||||
void WUPS_InitFS(wups_loader_init_fs_args_t args){
|
||||
new_open_ptr = (void*) args.open_repl;
|
||||
new_close_ptr = (void*) args.close_repl;
|
||||
new_write_ptr = (void*) args.write_repl;
|
||||
new_read_ptr = (void*) args.read_repl;
|
||||
new_lseek_ptr = (void*) args.lseek_repl;
|
||||
new_stat_ptr = (void*) args.stat_repl;
|
||||
new_fstat_ptr = (void*) args.fstat_repl;
|
||||
new_opendir_ptr = (void*) args.opendir_repl;
|
||||
new_closedir_ptr = (void*) args.closedir_repl;
|
||||
new_readdir_ptr = (void*) args.readdir_repl;
|
||||
}
|
||||
|
||||
int __real_open(const char *pathname, int flags);
|
||||
|
@ -17,11 +17,9 @@ static void * overlayfunction_ptr __attribute__((section(".data"))) = NULL;
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void WUPS_InitOverlay(wups_loader_init_plugin_args_t* args){
|
||||
if(args != NULL){
|
||||
InitOSFunctionPointers();
|
||||
overlayfunction_ptr = (void*) args->overlayfunction_ptr;
|
||||
}
|
||||
void WUPS_InitOverlay(wups_loader_init_overlay_args_t args){
|
||||
InitOSFunctionPointers();
|
||||
overlayfunction_ptr = (void*) args.overlayfunction_ptr;
|
||||
}
|
||||
|
||||
void WUPS_Overlay_PrintTextOnScreen(wups_overlay_options_type_t screen, int x,int y, const char * msg, ...){
|
||||
|
@ -101,7 +101,6 @@ typedef enum wups_loader_library_type_t {
|
||||
WUPS_LOADER_LIBRARY_ZLIB125,
|
||||
} wups_loader_library_type_t;
|
||||
|
||||
|
||||
typedef enum wups_loader_entry_type_t {
|
||||
WUPS_LOADER_ENTRY_FUNCTION,
|
||||
WUPS_LOADER_ENTRY_FUNCTION_MANDATORY,
|
||||
|
@ -18,24 +18,26 @@
|
||||
#ifndef WUPS_HOOKS_DEF_H_
|
||||
#define WUPS_HOOKS_DEF_H_
|
||||
|
||||
#include "common.h"
|
||||
#include <dynamic_libs/os_types.h>
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define WUPS_HOOK_EX(type_def,original_func) \
|
||||
extern const wups_loader_hook_t wups_hooks_ ## original_func \
|
||||
WUPS_SECTION("hooks"); \
|
||||
extern const wups_loader_hook_t wups_hooks_ ## original_func WUPS_SECTION("hooks"); \
|
||||
const wups_loader_hook_t wups_hooks_ ## original_func = { \
|
||||
.type = type_def, \
|
||||
.target = (const void*)&(original_func) \
|
||||
}
|
||||
|
||||
typedef enum wups_loader_hook_type_t {
|
||||
WUPS_LOADER_HOOK_INIT_FS, /* Only for internal usage */
|
||||
WUPS_LOADER_HOOK_INIT_OVERLAY, /* Only for internal usage */
|
||||
|
||||
WUPS_LOADER_HOOK_INIT_PLUGIN, /* Called when exiting the plugin loader */
|
||||
WUPS_LOADER_HOOK_DEINIT_PLUGIN, /* Called when re-entering the plugin loader */
|
||||
WUPS_LOADER_HOOK_DEINIT_PLUGIN, /* Called when re-entering the plugin loader */
|
||||
WUPS_LOADER_HOOK_STARTING_APPLICATION, /* Called when an application gets started */
|
||||
WUPS_LOADER_HOOK_ENDING_APPLICATION, /* Called when an application ends */
|
||||
WUPS_LOADER_HOOK_VSYNC, /* Called when an application calls GX2WaitForVsync (most times each frame) */
|
||||
@ -54,21 +56,23 @@ typedef enum wups_loader_app_status_t {
|
||||
WUPS_APP_STATUS_UNKNOWN, /* Unknown status _should_ never happen.*/
|
||||
} wups_loader_app_status_t;
|
||||
|
||||
typedef struct wups_loader_init_plugin_args_t {
|
||||
struct {
|
||||
const void * open_repl;
|
||||
const void * close_repl;
|
||||
const void * write_repl;
|
||||
const void * read_repl;
|
||||
const void * lseek_repl;
|
||||
const void * stat_repl;
|
||||
const void * fstat_repl;
|
||||
const void * opendir_repl;
|
||||
const void * closedir_repl;
|
||||
const void * readdir_repl;
|
||||
} fs_wrapper;
|
||||
typedef struct wups_loader_init_overlay_args_t {
|
||||
const void * overlayfunction_ptr;
|
||||
} wups_loader_init_plugin_args_t;
|
||||
} wups_loader_init_overlay_args_t;
|
||||
|
||||
typedef struct wups_loader_init_fs_args_t {
|
||||
const void * open_repl;
|
||||
const void * close_repl;
|
||||
const void * write_repl;
|
||||
const void * read_repl;
|
||||
const void * lseek_repl;
|
||||
const void * stat_repl;
|
||||
const void * fstat_repl;
|
||||
const void * opendir_repl;
|
||||
const void * closedir_repl;
|
||||
const void * readdir_repl;
|
||||
} wups_loader_init_fs_args_t;
|
||||
|
||||
|
||||
typedef struct wups_loader_app_started_args_t {
|
||||
bool sd_mounted;
|
||||
@ -76,19 +80,24 @@ typedef struct wups_loader_app_started_args_t {
|
||||
} wups_loader_app_started_args_t;
|
||||
|
||||
|
||||
#define WUPS_FS_ACCESS() \
|
||||
void init_fs(wups_loader_init_fs_args_t);\
|
||||
WUPS_HOOK_EX(WUPS_LOADER_HOOK_INIT_FS,init_fs); \
|
||||
void init_fs(wups_loader_init_fs_args_t args){ \
|
||||
WUPS_InitFS(args);\
|
||||
}
|
||||
|
||||
#define WUPS_ALLOW_OVERLAY() \
|
||||
void init_overlay(wups_loader_init_overlay_args_t);\
|
||||
WUPS_HOOK_EX(WUPS_LOADER_HOOK_INIT_OVERLAY,init_overlay); \
|
||||
void init_overlay(wups_loader_init_overlay_args_t args){ \
|
||||
WUPS_InitOverlay(args);\
|
||||
}
|
||||
|
||||
#define INITIALIZE_PLUGIN() \
|
||||
void init_plugin(wups_loader_init_plugin_args_t*);\
|
||||
void myInit_plugin(void);\
|
||||
void init_plugin(void);\
|
||||
WUPS_HOOK_EX(WUPS_LOADER_HOOK_INIT_PLUGIN,init_plugin); \
|
||||
void init_plugin(wups_loader_init_plugin_args_t* args){ \
|
||||
if(args != NULL){\
|
||||
WUPS_InitFS(args);\
|
||||
WUPS_InitOverlay(args);\
|
||||
\
|
||||
}\
|
||||
myInit_plugin();\
|
||||
} \
|
||||
void myInit_plugin()
|
||||
void init_plugin()
|
||||
|
||||
#define DEINITIALIZE_PLUGIN() \
|
||||
void deinit_plugin(void);\
|
||||
|
@ -37,8 +37,8 @@ typedef void (*overlay_callback)(wups_overlay_options_type_t);
|
||||
/*
|
||||
Gets called by the framework
|
||||
*/
|
||||
void WUPS_InitFS(wups_loader_init_plugin_args_t* args);
|
||||
void WUPS_InitOverlay(wups_loader_init_plugin_args_t* args);
|
||||
void WUPS_InitFS(wups_loader_init_fs_args_t args);
|
||||
void WUPS_InitOverlay(wups_loader_init_overlay_args_t args);
|
||||
|
||||
/*
|
||||
Can be called by the user.
|
||||
|
Loading…
Reference in New Issue
Block a user