mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2024-11-10 21:05:08 +01:00
Formatting, added bash script for installing/updating the dependencies (based on the travis script)
This commit is contained in:
parent
0e60a9bb48
commit
6ca382bf6e
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,6 +4,7 @@ loader/*.elf
|
|||||||
example_plugin/bin/*
|
example_plugin/bin/*
|
||||||
example_plugin/build/*
|
example_plugin/build/*
|
||||||
example_plugin_pic/*
|
example_plugin_pic/*
|
||||||
|
portlib_repos/*
|
||||||
plugins/*/bin/*
|
plugins/*/bin/*
|
||||||
plugins/*/build/*
|
plugins/*/build/*
|
||||||
plugins/*/*.cbp
|
plugins/*/*.cbp
|
||||||
@ -17,3 +18,4 @@ release/*
|
|||||||
*.nam
|
*.nam
|
||||||
*.til
|
*.til
|
||||||
*.layout
|
*.layout
|
||||||
|
wups.cbp
|
||||||
|
21
installupdateportlibs.sh
Normal file
21
installupdateportlibs.sh
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
#
|
||||||
|
7z x -y ./loader/libs/portlibs.zip -o${DEVKITPRO}
|
||||||
|
mkdir portlib_repos
|
||||||
|
cd portlib_repos
|
||||||
|
((git clone https://github.com/Maschell/dynamic_libs.git -b lib && (7z x -y ./dynamic_libs/libs/portlibs.zip -o${DEVKITPRO})) || (cd dynamic_libs && git pull))
|
||||||
|
(git clone https://github.com/dimok789/libiosuhax.git || (cd libiosuhax && git pull))
|
||||||
|
(git clone https://github.com/aliaspider/libfat.git || (cd libfat && git pull))
|
||||||
|
(git clone https://github.com/Maschell/libntfs-wiiu.git || (cd libntfs-wiiu && git pull))
|
||||||
|
(git clone https://github.com/Maschell/libutils.git || (cd libutils && git pull))
|
||||||
|
((git clone https://github.com/Maschell/libgui.git && (7z x -y ./libgui/libs/portlibs.zip -o${DEVKITPRO})) || (cd libgui && git pull))
|
||||||
|
(git clone https://github.com/Maschell/fs_wrapper.git || (cd fs_wrapper && git pull))
|
||||||
|
(git clone https://github.com/Maschell/controller_patcher.git || (cd controller_patcher && git pull))
|
||||||
|
(cd dynamic_libs && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make))
|
||||||
|
(cd libiosuhax && make -j8 && make install)
|
||||||
|
(cd libfat && make wiiu-release && make wiiu-install)
|
||||||
|
(cd libntfs-wiiu && make wiiu-install)
|
||||||
|
(cd libutils && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make))
|
||||||
|
(cd libgui && ((make -j8 | grep -c "built ... ") && make install) || echo "no need for make install")
|
||||||
|
(cd fs_wrapper && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make))
|
||||||
|
(cd controller_patcher && ((make -j8 | grep -c "built ... ") && make install && echo "installed" ) || (echo "no need for make install" && make))
|
@ -22,21 +22,21 @@
|
|||||||
#include <dynamic_libs/vpad_functions.h>
|
#include <dynamic_libs/vpad_functions.h>
|
||||||
#include <dynamic_libs/padscore_functions.h>
|
#include <dynamic_libs/padscore_functions.h>
|
||||||
#include <dynamic_libs/proc_ui_functions.h>
|
#include <dynamic_libs/proc_ui_functions.h>
|
||||||
#include <utils/logger.h>
|
|
||||||
#include <fs/FSUtils.h>
|
#include <fs/FSUtils.h>
|
||||||
#include <fs/sd_fat_devoptab.h>
|
#include <fs/sd_fat_devoptab.h>
|
||||||
|
#include <utils/logger.h>
|
||||||
#include <utils/utils.h>
|
#include <utils/utils.h>
|
||||||
|
#include <utils/function_patcher.h>
|
||||||
#include <system/exception_handler.h>
|
#include <system/exception_handler.h>
|
||||||
#include <system/memory.h>
|
#include <system/memory.h>
|
||||||
#include <kernel/kernel_utils.h>
|
#include <kernel/kernel_utils.h>
|
||||||
|
|
||||||
|
|
||||||
#include "common/retain_vars.h"
|
#include "common/retain_vars.h"
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "plugin/PluginLoader.h"
|
#include "plugin/PluginLoader.h"
|
||||||
#include "plugin/PluginInformation.h"
|
#include "plugin/PluginInformation.h"
|
||||||
|
|
||||||
#include <utils/function_patcher.h>
|
|
||||||
|
|
||||||
#include <wups.h>
|
#include <wups.h>
|
||||||
#include <iosuhax.h>
|
#include <iosuhax.h>
|
||||||
|
@ -20,12 +20,4 @@
|
|||||||
#define SCREEN_WIDTH 1280
|
#define SCREEN_WIDTH 1280
|
||||||
#define SCREEN_HEIGHT 720
|
#define SCREEN_HEIGHT 720
|
||||||
|
|
||||||
#define CONTENT_WIDTH (1280 - 260)
|
|
||||||
|
|
||||||
#define CONTENT_EXPANDABLE_FRAME_HEADER_HEIGHT 60
|
|
||||||
|
|
||||||
|
|
||||||
#define MENU_LIST_WIDTH 260
|
|
||||||
#define MENU_LIST_ELEMENT_HEIGHT 70
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,11 +9,9 @@
|
|||||||
#include <gui/sigslot.h>
|
#include <gui/sigslot.h>
|
||||||
#include <gui/Gui.h>
|
#include <gui/Gui.h>
|
||||||
|
|
||||||
class TcpReceiver : public CThread
|
class TcpReceiver : public CThread {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
enum eLoadResults
|
enum eLoadResults {
|
||||||
{
|
|
||||||
SUCCESS = 0,
|
SUCCESS = 0,
|
||||||
INVALID_INPUT = -1,
|
INVALID_INPUT = -1,
|
||||||
FILE_OPEN_FAILURE = -2,
|
FILE_OPEN_FAILURE = -2,
|
||||||
|
@ -30,8 +30,7 @@ static int *pretend_root_hub = (int*)0xF5003ABC;
|
|||||||
static int *ayylmao = (int*)0xF4500000;
|
static int *ayylmao = (int*)0xF4500000;
|
||||||
//!-------------------------------------
|
//!-------------------------------------
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
u32 size;
|
u32 size;
|
||||||
u8 data[0];
|
u8 data[0];
|
||||||
} payload_info_t;
|
} payload_info_t;
|
||||||
@ -312,8 +311,7 @@ static const int second_chain[] = {
|
|||||||
0x1012EA68, // 0xAC stack pivot
|
0x1012EA68, // 0xAC stack pivot
|
||||||
};
|
};
|
||||||
|
|
||||||
static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config)
|
static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config) {
|
||||||
{
|
|
||||||
ayylmao[5] = 1;
|
ayylmao[5] = 1;
|
||||||
ayylmao[8] = 0x500000;
|
ayylmao[8] = 0x500000;
|
||||||
|
|
||||||
@ -375,8 +373,7 @@ static void uhs_exploit_init(int dev_uhs_0_handle, cfw_config_t * config)
|
|||||||
DCStoreRange((void*)0xF4148000, ((u32)payloads) - 0xF4148000);
|
DCStoreRange((void*)0xF4148000, ((u32)payloads) - 0xF4148000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int uhs_write32(int dev_uhs_0_handle, int arm_addr, int val)
|
static int uhs_write32(int dev_uhs_0_handle, int arm_addr, int val) {
|
||||||
{
|
|
||||||
ayylmao[520] = arm_addr - 24; //! The address to be overwritten, minus 24 bytes
|
ayylmao[520] = arm_addr - 24; //! The address to be overwritten, minus 24 bytes
|
||||||
DCStoreRange(ayylmao, 521 * 4); //! Make CPU fetch new data (with updated adress)
|
DCStoreRange(ayylmao, 521 * 4); //! Make CPU fetch new data (with updated adress)
|
||||||
OSSleepTicks(0x200000); //! Improves stability
|
OSSleepTicks(0x200000); //! Improves stability
|
||||||
@ -385,10 +382,10 @@ static int uhs_write32(int dev_uhs_0_handle, int arm_addr, int val)
|
|||||||
return IOS_Ioctl(dev_uhs_0_handle, 0x15, request_buffer, sizeof(request_buffer), output_buffer, sizeof(output_buffer));
|
return IOS_Ioctl(dev_uhs_0_handle, 0x15, request_buffer, sizeof(request_buffer), output_buffer, sizeof(output_buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ExecuteIOSExploit(cfw_config_t * config){
|
int ExecuteIOSExploit(cfw_config_t * config) {
|
||||||
DEBUG_FUNCTION_LINE("Running ExecuteIOSExploit\n");
|
DEBUG_FUNCTION_LINE("Running ExecuteIOSExploit\n");
|
||||||
int iosuhaxFd = IOS_Open("/dev/iosuhax", 0);
|
int iosuhaxFd = IOS_Open("/dev/iosuhax", 0);
|
||||||
if(iosuhaxFd >= 0){
|
if(iosuhaxFd >= 0) {
|
||||||
int dummy = 0;
|
int dummy = 0;
|
||||||
|
|
||||||
IOS_Ioctl(iosuhaxFd, 0x03, &dummy, sizeof(dummy), &dummy, sizeof(dummy));
|
IOS_Ioctl(iosuhaxFd, 0x03, &dummy, sizeof(dummy), &dummy, sizeof(dummy));
|
||||||
@ -401,7 +398,7 @@ int ExecuteIOSExploit(cfw_config_t * config){
|
|||||||
|
|
||||||
//! execute exploit
|
//! execute exploit
|
||||||
int dev_uhs_0_handle = IOS_Open("/dev/uhs/0", 0);
|
int dev_uhs_0_handle = IOS_Open("/dev/uhs/0", 0);
|
||||||
if(dev_uhs_0_handle < 0){
|
if(dev_uhs_0_handle < 0) {
|
||||||
DEBUG_FUNCTION_LINE("Failed to open \"/dev/uhs/0\"\n");
|
DEBUG_FUNCTION_LINE("Failed to open \"/dev/uhs/0\"\n");
|
||||||
return dev_uhs_0_handle;
|
return dev_uhs_0_handle;
|
||||||
}
|
}
|
||||||
@ -418,7 +415,7 @@ int ExecuteIOSExploit(cfw_config_t * config){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExecuteIOSExploitWithDefaultConfig(){
|
void ExecuteIOSExploitWithDefaultConfig() {
|
||||||
cfw_config_t config;
|
cfw_config_t config;
|
||||||
config.viewMode = 0;
|
config.viewMode = 0;
|
||||||
config.directLaunch = 0;
|
config.directLaunch = 0;
|
||||||
|
@ -7,7 +7,7 @@ extern "C" {
|
|||||||
|
|
||||||
#include <wups.h>
|
#include <wups.h>
|
||||||
|
|
||||||
struct buffer_store{
|
struct buffer_store {
|
||||||
void * buffer;
|
void * buffer;
|
||||||
s32 buffer_size;
|
s32 buffer_size;
|
||||||
s32 mode;
|
s32 mode;
|
||||||
|
@ -21,33 +21,33 @@
|
|||||||
#include <wups.h>
|
#include <wups.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class FunctionData{
|
class FunctionData {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FunctionData(const char * name, wups_loader_library_type_t library, void * target, void * call_addr){
|
FunctionData(const char * name, wups_loader_library_type_t library, void * target, void * call_addr) {
|
||||||
this->name = name;
|
this->name = name;
|
||||||
this->library = library;
|
this->library = library;
|
||||||
this->replaceAddr = target;
|
this->replaceAddr = target;
|
||||||
this->replaceCall = call_addr;
|
this->replaceCall = call_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
~FunctionData(){
|
~FunctionData() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getName(){
|
std::string getName() {
|
||||||
return this->name;
|
return this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
wups_loader_library_type_t getLibrary(){
|
wups_loader_library_type_t getLibrary() {
|
||||||
return this->library;
|
return this->library;
|
||||||
}
|
}
|
||||||
|
|
||||||
void * getReplaceAddress(){
|
void * getReplaceAddress() {
|
||||||
return replaceAddr;
|
return replaceAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void * getReplaceCall(){
|
void * getReplaceCall() {
|
||||||
return replaceCall;
|
return replaceCall;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ void PluginLoader::copyPluginDataIntoGlobalStruct(std::vector<PluginData *> plug
|
|||||||
replacement_data_function_t * function_data = &plugin_data->functions[j];
|
replacement_data_function_t * function_data = &plugin_data->functions[j];
|
||||||
FunctionData * cur_function = function_data_list[j];
|
FunctionData * cur_function = function_data_list[j];
|
||||||
|
|
||||||
if(strlen(cur_function->getName().c_str()) > MAXIMUM_FUNCTION_NAME_LENGTH-1){
|
if(strlen(cur_function->getName().c_str()) > MAXIMUM_FUNCTION_NAME_LENGTH-1) {
|
||||||
DEBUG_FUNCTION_LINE("Couldn not add function \"%s\" for plugin \"%s\" function name is too long.\n",cur_function->getName().c_str(),plugin_data->plugin_name);
|
DEBUG_FUNCTION_LINE("Couldn not add function \"%s\" for plugin \"%s\" function name is too long.\n",cur_function->getName().c_str(),plugin_data->plugin_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@ static void * new_readdir_ptr __attribute__((section(".data"))) = NULL;
|
|||||||
static void * new_mkdir_ptr __attribute__((section(".data"))) = NULL;
|
static void * new_mkdir_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void WUPS_InitFS(wups_loader_init_fs_args_t args){
|
void WUPS_InitFS(wups_loader_init_fs_args_t args) {
|
||||||
new_open_ptr = (void*) args.open_repl;
|
new_open_ptr = (void*) args.open_repl;
|
||||||
new_close_ptr = (void*) args.close_repl;
|
new_close_ptr = (void*) args.close_repl;
|
||||||
new_write_ptr = (void*) args.write_repl;
|
new_write_ptr = (void*) args.write_repl;
|
||||||
@ -34,64 +34,64 @@ static void * new_mkdir_ptr __attribute__((section(".data"))) = NULL;
|
|||||||
new_closedir_ptr = (void*) args.closedir_repl;
|
new_closedir_ptr = (void*) args.closedir_repl;
|
||||||
new_readdir_ptr = (void*) args.readdir_repl;
|
new_readdir_ptr = (void*) args.readdir_repl;
|
||||||
new_mkdir_ptr = (void*) args.mkdir_repl;
|
new_mkdir_ptr = (void*) args.mkdir_repl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __real_open(const char *pathname, int flags);
|
int __real_open(const char *pathname, int flags);
|
||||||
int __wrap_open(const char *pathname, int flags){
|
int __wrap_open(const char *pathname, int flags) {
|
||||||
if(new_open_ptr == NULL) return __real_open(pathname,flags);
|
if(new_open_ptr == NULL) return __real_open(pathname,flags);
|
||||||
return ( (int (*)(const char *,int))((unsigned int*)new_open_ptr) )(pathname,flags);
|
return ( (int (*)(const char *,int))((unsigned int*)new_open_ptr) )(pathname,flags);
|
||||||
}
|
}
|
||||||
int __real_close(int fd);
|
int __real_close(int fd);
|
||||||
int __wrap_close(int fd){
|
int __wrap_close(int fd) {
|
||||||
if(new_close_ptr == NULL) return __real_close(fd);
|
if(new_close_ptr == NULL) return __real_close(fd);
|
||||||
return ( (int (*)(int))((unsigned int*)new_close_ptr) )(fd);
|
return ( (int (*)(int))((unsigned int*)new_close_ptr) )(fd);
|
||||||
}
|
}
|
||||||
ssize_t __real_write(int fd, const void *buf, size_t count);
|
ssize_t __real_write(int fd, const void *buf, size_t count);
|
||||||
ssize_t __wrap_write(int fd, const void *buf, size_t count){
|
ssize_t __wrap_write(int fd, const void *buf, size_t count) {
|
||||||
if(new_write_ptr == NULL) return __real_write(fd,buf,count);
|
if(new_write_ptr == NULL) return __real_write(fd,buf,count);
|
||||||
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_write_ptr) )(fd,buf,count);
|
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_write_ptr) )(fd,buf,count);
|
||||||
}
|
}
|
||||||
ssize_t __real_read(int fd, const void *buf, size_t count);
|
ssize_t __real_read(int fd, const void *buf, size_t count);
|
||||||
ssize_t __wrap_read(int fd, const void *buf, size_t count){
|
ssize_t __wrap_read(int fd, const void *buf, size_t count) {
|
||||||
if(new_read_ptr == NULL) return __real_read(fd,buf,count);
|
if(new_read_ptr == NULL) return __real_read(fd,buf,count);
|
||||||
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_read_ptr) )(fd,buf,count);
|
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_read_ptr) )(fd,buf,count);
|
||||||
}
|
}
|
||||||
off_t __real_lseek(int fd, off_t offset, int whence);
|
off_t __real_lseek(int fd, off_t offset, int whence);
|
||||||
off_t __wrap_lseek(int fd, off_t offset, int whence){
|
off_t __wrap_lseek(int fd, off_t offset, int whence) {
|
||||||
if(new_lseek_ptr == NULL) return __real_lseek(fd, offset, whence);
|
if(new_lseek_ptr == NULL) return __real_lseek(fd, offset, whence);
|
||||||
return ( (off_t (*)(int, off_t, int))((unsigned int*)new_lseek_ptr) )(fd, offset, whence);
|
return ( (off_t (*)(int, off_t, int))((unsigned int*)new_lseek_ptr) )(fd, offset, whence);
|
||||||
}
|
}
|
||||||
int __real_stat(const char *pathname, struct stat *statbuf);
|
int __real_stat(const char *pathname, struct stat *statbuf);
|
||||||
int __wrap_stat(const char *pathname, struct stat *statbuf){
|
int __wrap_stat(const char *pathname, struct stat *statbuf) {
|
||||||
if(new_stat_ptr == NULL) return __real_stat(pathname,statbuf);
|
if(new_stat_ptr == NULL) return __real_stat(pathname,statbuf);
|
||||||
return ( (int (*)(const char *, struct stat *))((unsigned int*)new_stat_ptr) )(pathname,statbuf);
|
return ( (int (*)(const char *, struct stat *))((unsigned int*)new_stat_ptr) )(pathname,statbuf);
|
||||||
}
|
}
|
||||||
int __real_fstat(int fd, struct stat *statbuf);
|
int __real_fstat(int fd, struct stat *statbuf);
|
||||||
int __wrap_fstat(int fd, struct stat *statbuf){
|
int __wrap_fstat(int fd, struct stat *statbuf) {
|
||||||
if(new_fstat_ptr == NULL) return __real_fstat(fd,statbuf);
|
if(new_fstat_ptr == NULL) return __real_fstat(fd,statbuf);
|
||||||
return ( (int (*)(int, struct stat *))((unsigned int*)new_fstat_ptr) )(fd,statbuf);
|
return ( (int (*)(int, struct stat *))((unsigned int*)new_fstat_ptr) )(fd,statbuf);
|
||||||
}
|
}
|
||||||
DIR* __real_opendir(const char * arg);
|
DIR* __real_opendir(const char * arg);
|
||||||
DIR* __wrap_opendir(const char * arg){
|
DIR* __wrap_opendir(const char * arg) {
|
||||||
if(new_opendir_ptr == NULL) return __real_opendir(arg);
|
if(new_opendir_ptr == NULL) return __real_opendir(arg);
|
||||||
return ( (DIR* (*)(const char *))((unsigned int*)new_opendir_ptr) )(arg);
|
return ( (DIR* (*)(const char *))((unsigned int*)new_opendir_ptr) )(arg);
|
||||||
}
|
}
|
||||||
int __real_closedir(DIR *dirp);
|
int __real_closedir(DIR *dirp);
|
||||||
int __wrap_closedir(DIR *dirp){
|
int __wrap_closedir(DIR *dirp) {
|
||||||
if(new_closedir_ptr == NULL) return __real_closedir(dirp);
|
if(new_closedir_ptr == NULL) return __real_closedir(dirp);
|
||||||
return ( (int (*)(DIR *))((unsigned int*)new_closedir_ptr) )(dirp);
|
return ( (int (*)(DIR *))((unsigned int*)new_closedir_ptr) )(dirp);
|
||||||
}
|
}
|
||||||
struct dirent * __real_readdir(DIR *dirp);
|
struct dirent * __real_readdir(DIR *dirp);
|
||||||
struct dirent * __wrap_readdir(DIR *dirp){
|
struct dirent * __wrap_readdir(DIR *dirp) {
|
||||||
if(new_readdir_ptr == NULL) return __real_readdir(dirp);
|
if(new_readdir_ptr == NULL) return __real_readdir(dirp);
|
||||||
return ( (struct dirent * (*)(DIR *))((unsigned int*)new_readdir_ptr) )(dirp);
|
return ( (struct dirent * (*)(DIR *))((unsigned int*)new_readdir_ptr) )(dirp);
|
||||||
}
|
}
|
||||||
int __real_mkdir(const char *path, mode_t mode);
|
int __real_mkdir(const char *path, mode_t mode);
|
||||||
int __wrap_mkdir(const char *path, mode_t mode){
|
int __wrap_mkdir(const char *path, mode_t mode) {
|
||||||
if(new_mkdir_ptr == NULL) return __real_mkdir(path, mode);
|
if(new_mkdir_ptr == NULL) return __real_mkdir(path, mode);
|
||||||
return ( (int (*)(const char *, mode_t))((unsigned int*) new_mkdir_ptr) )(path, mode);
|
return ( (int (*)(const char *, mode_t))((unsigned int*) new_mkdir_ptr) )(path, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
@ -15,61 +15,67 @@
|
|||||||
static void * overlayfunction_ptr __attribute__((section(".data"))) = NULL;
|
static void * overlayfunction_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void WUPS_InitOverlay(wups_loader_init_overlay_args_t args){
|
void WUPS_InitOverlay(wups_loader_init_overlay_args_t args) {
|
||||||
InitOSFunctionPointers();
|
InitOSFunctionPointers();
|
||||||
overlayfunction_ptr = (void*) args.overlayfunction_ptr;
|
overlayfunction_ptr = (void*) args.overlayfunction_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WUPS_Overlay_PrintTextOnScreen(wups_overlay_options_type_t screen, int x,int y, const char * msg, ...){
|
void WUPS_Overlay_PrintTextOnScreen(wups_overlay_options_type_t screen, int x,int y, const char * msg, ...) {
|
||||||
if(screen == WUPS_OVERLAY_NONE){ return; }
|
if(screen == WUPS_OVERLAY_NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char * tmp = NULL;
|
char * tmp = NULL;
|
||||||
|
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, msg);
|
va_start(va, msg);
|
||||||
if((vasprintf(&tmp, msg, va) >= 0) && tmp){
|
if((vasprintf(&tmp, msg, va) >= 0) && tmp) {
|
||||||
if(screen != WUPS_OVERLAY_DRC_ONLY){ // Draw TV if it's not DRC exclusive.
|
if(screen != WUPS_OVERLAY_DRC_ONLY) { // Draw TV if it's not DRC exclusive.
|
||||||
OSScreenPutFontEx(0, x, y, tmp);
|
OSScreenPutFontEx(0, x, y, tmp);
|
||||||
}
|
}
|
||||||
if(screen != WUPS_OVERLAY_TV_ONLY){ // Draw DRC if it's not TV exclusive.
|
if(screen != WUPS_OVERLAY_TV_ONLY) { // Draw DRC if it's not TV exclusive.
|
||||||
OSScreenPutFontEx(1, x, y, tmp);
|
OSScreenPutFontEx(1, x, y, tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
if(tmp){
|
if(tmp) {
|
||||||
free(tmp);
|
free(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WUPS_Overlay_OSScreenClear(wups_overlay_options_type_t screen){
|
void WUPS_Overlay_OSScreenClear(wups_overlay_options_type_t screen) {
|
||||||
if(screen == WUPS_OVERLAY_NONE){ return; }
|
if(screen == WUPS_OVERLAY_NONE) {
|
||||||
if(screen != WUPS_OVERLAY_DRC_ONLY){ // Clear TV if it's not DRC exclusive.
|
return;
|
||||||
|
}
|
||||||
|
if(screen != WUPS_OVERLAY_DRC_ONLY) { // Clear TV if it's not DRC exclusive.
|
||||||
OSScreenClearBufferEx(0, 0);
|
OSScreenClearBufferEx(0, 0);
|
||||||
}
|
}
|
||||||
if(screen != WUPS_OVERLAY_TV_ONLY){ // Clear DRC if it's not TV exclusive.
|
if(screen != WUPS_OVERLAY_TV_ONLY) { // Clear DRC if it's not TV exclusive.
|
||||||
OSScreenClearBufferEx(1, 0);
|
OSScreenClearBufferEx(1, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WUPS_Overlay_FlipBuffers(wups_overlay_options_type_t screen){
|
void WUPS_Overlay_FlipBuffers(wups_overlay_options_type_t screen) {
|
||||||
if(screen == WUPS_OVERLAY_NONE){ return; }
|
if(screen == WUPS_OVERLAY_NONE) {
|
||||||
if(screen != WUPS_OVERLAY_DRC_ONLY){ // Flip TV buffer if it's not DRC exclusive.
|
return;
|
||||||
|
}
|
||||||
|
if(screen != WUPS_OVERLAY_DRC_ONLY) { // Flip TV buffer if it's not DRC exclusive.
|
||||||
OSScreenFlipBuffersEx(0);
|
OSScreenFlipBuffersEx(0);
|
||||||
}
|
}
|
||||||
if(screen != WUPS_OVERLAY_TV_ONLY){ // Flip DRC buffer if it's not TV exclusive.
|
if(screen != WUPS_OVERLAY_TV_ONLY) { // Flip DRC buffer if it's not TV exclusive.
|
||||||
OSScreenFlipBuffersEx(1);
|
OSScreenFlipBuffersEx(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WUPS_OpenOverlay(wups_overlay_options_type_t screen, overlay_callback callback){
|
void WUPS_OpenOverlay(wups_overlay_options_type_t screen, overlay_callback callback) {
|
||||||
if(overlayfunction_ptr != NULL){
|
if(overlayfunction_ptr != NULL) {
|
||||||
( (void (*)(wups_overlay_options_type_t, overlay_callback))((unsigned int*)overlayfunction_ptr) )(screen,callback);
|
( (void (*)(wups_overlay_options_type_t, overlay_callback))((unsigned int*)overlayfunction_ptr) )(screen,callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
@ -99,7 +99,8 @@ typedef enum wups_loader_library_type_t {
|
|||||||
WUPS_LOADER_LIBRARY_VPAD,
|
WUPS_LOADER_LIBRARY_VPAD,
|
||||||
WUPS_LOADER_LIBRARY_VPADBASE,
|
WUPS_LOADER_LIBRARY_VPADBASE,
|
||||||
WUPS_LOADER_LIBRARY_ZLIB125,
|
WUPS_LOADER_LIBRARY_ZLIB125,
|
||||||
} wups_loader_library_type_t;
|
}
|
||||||
|
wups_loader_library_type_t;
|
||||||
|
|
||||||
typedef enum wups_loader_entry_type_t {
|
typedef enum wups_loader_entry_type_t {
|
||||||
WUPS_LOADER_ENTRY_FUNCTION,
|
WUPS_LOADER_ENTRY_FUNCTION,
|
||||||
|
@ -30,7 +30,8 @@ typedef enum wups_overlay_options_type_t {
|
|||||||
WUPS_OVERLAY_TV_ONLY, /* Tries to display only on tv screen */
|
WUPS_OVERLAY_TV_ONLY, /* Tries to display only on tv screen */
|
||||||
WUPS_OVERLAY_DRC_AND_TV, /* Tries to display on both screens. Prioritizes the TV screen if memory is low. */
|
WUPS_OVERLAY_DRC_AND_TV, /* Tries to display on both screens. Prioritizes the TV screen if memory is low. */
|
||||||
WUPS_OVERLAY_DRC_AND_TV_WITH_DRC_PRIO /* Tries to display on both screens. But if memory is low, prioritize the DRC screen.*/
|
WUPS_OVERLAY_DRC_AND_TV_WITH_DRC_PRIO /* Tries to display on both screens. But if memory is low, prioritize the DRC screen.*/
|
||||||
} wups_overlay_options_type_t;
|
}
|
||||||
|
wups_overlay_options_type_t;
|
||||||
|
|
||||||
typedef void (*overlay_callback)(wups_overlay_options_type_t);
|
typedef void (*overlay_callback)(wups_overlay_options_type_t);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user