2012-01-21 21:57:41 +01:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <ogcsys.h>
|
|
|
|
#include <stdlib.h>
|
2012-02-20 19:04:40 +01:00
|
|
|
#include "wiiuse/wpad.h"
|
2012-01-21 21:57:41 +01:00
|
|
|
#include "mem2.hpp"
|
|
|
|
#include <string.h>
|
|
|
|
#include "sys.h"
|
|
|
|
#include "gecko.h"
|
|
|
|
|
|
|
|
#include <ogc/machine/processor.h>
|
|
|
|
#include "sha1.h"
|
|
|
|
#include "fs.h"
|
|
|
|
#include "mem2.hpp"
|
|
|
|
|
|
|
|
/* Variables */
|
|
|
|
static bool reset = false;
|
|
|
|
static bool shutdown = false;
|
|
|
|
bool exiting = false;
|
|
|
|
|
2012-02-11 13:03:46 +01:00
|
|
|
static bool priiloader_def = false;
|
2012-01-21 21:57:41 +01:00
|
|
|
static bool return_to_hbc = false;
|
|
|
|
static bool return_to_menu = false;
|
|
|
|
static bool return_to_priiloader = false;
|
|
|
|
static bool return_to_disable = false;
|
|
|
|
static bool return_to_bootmii = false;
|
|
|
|
|
2012-01-30 17:55:27 +01:00
|
|
|
|
|
|
|
void __Wpad_PowerCallback(s32 chan)
|
|
|
|
{
|
|
|
|
/* Poweroff console */
|
|
|
|
shutdown = 1;
|
|
|
|
}
|
|
|
|
|
2012-01-21 21:57:41 +01:00
|
|
|
void Open_Inputs(void)
|
|
|
|
{
|
2012-01-30 17:55:27 +01:00
|
|
|
/* Initialize Wiimote subsystem */
|
|
|
|
PAD_Init();
|
|
|
|
WPAD_Init();
|
|
|
|
|
|
|
|
/* Set POWER button callback */
|
|
|
|
WPAD_SetPowerButtonCallback(__Wpad_PowerCallback);
|
|
|
|
|
|
|
|
WPAD_SetDataFormat(WPAD_CHAN_ALL, WPAD_FMT_BTNS_ACC_IR);
|
2012-02-04 18:31:13 +01:00
|
|
|
|
|
|
|
WPAD_SetIdleTimeout(60*5); // idle after 5 minutes
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Close_Inputs(void)
|
|
|
|
{
|
2012-02-04 18:31:13 +01:00
|
|
|
u32 cnt;
|
|
|
|
|
|
|
|
/* Disconnect Wiimotes */
|
|
|
|
for (cnt = 0; cnt < 4; cnt++)
|
|
|
|
WPAD_Disconnect(cnt);
|
|
|
|
|
|
|
|
/* Shutdown Wiimote subsystem */
|
|
|
|
WPAD_Shutdown();
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
bool Sys_Exiting(void)
|
|
|
|
{
|
|
|
|
return reset || shutdown || exiting;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Sys_Test(void)
|
|
|
|
{
|
|
|
|
if(reset || shutdown) Close_Inputs();
|
|
|
|
|
|
|
|
if (reset) SYS_ResetSystem(SYS_RESTART, 0, 0);
|
|
|
|
else if (shutdown) SYS_ResetSystem(SYS_POWEROFF, 0, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Sys_ExitTo(int option)
|
|
|
|
{
|
2012-02-11 13:03:46 +01:00
|
|
|
priiloader_def = option == PRIILOADER_DEF;
|
2012-01-21 21:57:41 +01:00
|
|
|
return_to_hbc = option == EXIT_TO_HBC;
|
|
|
|
return_to_menu = option == EXIT_TO_MENU;
|
|
|
|
return_to_priiloader = option == EXIT_TO_PRIILOADER;
|
|
|
|
return_to_disable = option == EXIT_TO_DISABLE;
|
|
|
|
return_to_bootmii = option == EXIT_TO_BOOTMII;
|
|
|
|
|
|
|
|
//magic word to force wii menu in priiloader.
|
|
|
|
if(return_to_menu)
|
|
|
|
{
|
2012-05-06 18:32:07 +02:00
|
|
|
*(vu32*)0x8132FFFB = 0x50756e65;
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
|
|
|
else if(return_to_priiloader)
|
|
|
|
{
|
2012-05-06 18:32:07 +02:00
|
|
|
*(vu32*)0x8132FFFB = 0x4461636f;
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
2012-02-11 13:03:46 +01:00
|
|
|
else
|
|
|
|
{
|
2012-05-06 18:32:07 +02:00
|
|
|
*(vu32*)0x8132FFFB = 0xffffffff;
|
2012-02-11 13:03:46 +01:00
|
|
|
}
|
2012-05-06 18:32:07 +02:00
|
|
|
DCFlushRange((void *)(0x8132FFFB), 4);
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Sys_Exit(void)
|
|
|
|
{
|
|
|
|
if(return_to_disable) return;
|
|
|
|
|
|
|
|
/* Shutdown Inputs */
|
|
|
|
Close_Inputs();
|
|
|
|
|
2012-05-06 18:32:07 +02:00
|
|
|
if (return_to_menu || return_to_priiloader || priiloader_def)
|
|
|
|
Sys_LoadMenu();
|
|
|
|
else if(return_to_bootmii)
|
|
|
|
IOS_ReloadIOS(254);
|
|
|
|
|
|
|
|
//else
|
|
|
|
if(WII_LaunchTitle(HBC_108) < 0)
|
|
|
|
if(WII_LaunchTitle(HBC_HAXX) < 0)
|
|
|
|
if(WII_LaunchTitle(HBC_JODI) < 0)
|
|
|
|
WII_LaunchTitle(0x100000002LL); //SYS_ResetSystem doesnt work properly with new libogc
|
2012-01-21 21:57:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void __Sys_ResetCallback(void)
|
|
|
|
{
|
|
|
|
reset = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void __Sys_PowerCallback(void)
|
|
|
|
{
|
|
|
|
shutdown = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Sys_Init(void)
|
|
|
|
{
|
|
|
|
/* Set RESET/POWER button callback */
|
|
|
|
SYS_SetResetCallback(__Sys_ResetCallback);
|
|
|
|
SYS_SetPowerCallback(__Sys_PowerCallback);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Sys_LoadMenu(void)
|
|
|
|
{
|
|
|
|
/* Return to the Wii system menu */
|
2012-05-06 18:32:07 +02:00
|
|
|
WII_LaunchTitle(0x100000002LL); //SYS_ResetSystem doesnt work properly with new libogc
|
|
|
|
}
|