2009-05-03 22:30:17 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <ogcsys.h>
|
|
|
|
|
|
|
|
#include "sys.h"
|
|
|
|
#include "wpad.h"
|
2009-05-06 11:51:16 +02:00
|
|
|
#include "wdvd.h"
|
|
|
|
#include "usbstorage.h"
|
|
|
|
#include "disc.h"
|
|
|
|
#include "wbfs.h"
|
|
|
|
#include "video.h"
|
2009-06-01 17:50:18 +02:00
|
|
|
#include "audio.h"
|
|
|
|
#include "menu.h"
|
2009-05-15 22:03:19 +02:00
|
|
|
#include "fatmounter.h"
|
2009-05-03 22:30:17 +02:00
|
|
|
|
|
|
|
/* Constants */
|
|
|
|
#define CERTS_LEN 0x280
|
|
|
|
|
2009-06-05 00:13:39 +02:00
|
|
|
//Wiilight stuff
|
|
|
|
static vu32 *_wiilight_reg = (u32*)0xCD0000C0;
|
|
|
|
void wiilight(int enable) { // Toggle wiilight (thanks Bool for wiilight source)
|
|
|
|
u32 val = (*_wiilight_reg&~0x20);
|
|
|
|
if(enable && Settings.wiilight) val |= 0x20;
|
|
|
|
*_wiilight_reg=val;
|
|
|
|
}
|
|
|
|
|
2009-05-03 22:30:17 +02:00
|
|
|
/* Variables */
|
|
|
|
static const char certs_fs[] ATTRIBUTE_ALIGN(32) = "/sys/cert.sys";
|
|
|
|
u8 shutdown = 0;
|
|
|
|
u8 reset = 0;
|
|
|
|
|
|
|
|
void __Sys_ResetCallback(void)
|
|
|
|
{
|
|
|
|
/* Reboot console */
|
|
|
|
reset = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void __Sys_PowerCallback(void)
|
|
|
|
{
|
|
|
|
/* Poweroff console */
|
|
|
|
shutdown = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Sys_Init(void)
|
|
|
|
{
|
|
|
|
/* Initialize video subsytem */
|
|
|
|
//VIDEO_Init();
|
|
|
|
|
|
|
|
/* Set RESET/POWER button callback */
|
|
|
|
SYS_SetResetCallback(__Sys_ResetCallback);
|
|
|
|
SYS_SetPowerCallback(__Sys_PowerCallback);
|
|
|
|
}
|
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
static void _ExitApp()
|
|
|
|
{
|
|
|
|
ExitGUIThreads();
|
|
|
|
StopGX();
|
|
|
|
ShutdownAudio();
|
|
|
|
|
|
|
|
SDCard_deInit();
|
|
|
|
USBDevice_deInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-05-03 22:30:17 +02:00
|
|
|
void Sys_Reboot(void)
|
|
|
|
{
|
|
|
|
/* Restart console */
|
2009-06-01 17:50:18 +02:00
|
|
|
_ExitApp();
|
2009-05-03 22:30:17 +02:00
|
|
|
STM_RebootSystem();
|
|
|
|
}
|
|
|
|
|
2009-05-06 11:51:16 +02:00
|
|
|
int Sys_IosReload(int IOS)
|
|
|
|
{
|
|
|
|
s32 ret;
|
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
//shutdown SD and USB before IOS Reload in DiscWait
|
2009-05-15 22:03:19 +02:00
|
|
|
SDCard_deInit();
|
2009-06-01 17:50:18 +02:00
|
|
|
USBDevice_deInit();
|
2009-05-06 11:51:16 +02:00
|
|
|
|
|
|
|
WPAD_Flush(0);
|
|
|
|
WPAD_Disconnect(0);
|
|
|
|
WPAD_Shutdown();
|
|
|
|
|
|
|
|
WDVD_Close();
|
|
|
|
|
|
|
|
USBStorage_Deinit();
|
|
|
|
|
|
|
|
ret = IOS_ReloadIOS(IOS);
|
|
|
|
|
|
|
|
PAD_Init();
|
|
|
|
Wpad_Init();
|
|
|
|
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
|
|
|
|
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
|
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
if(ret < 0) {
|
|
|
|
return ret;
|
2009-05-06 11:51:16 +02:00
|
|
|
}
|
2009-06-05 00:13:39 +02:00
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
if(IOS == 249 || IOS == 222 || IOS == 223) {
|
|
|
|
ret = WBFS_Init(WBFS_DEVICE_USB);
|
|
|
|
if(ret>=0)
|
|
|
|
{
|
|
|
|
ret = Disc_Init();
|
|
|
|
if(ret>=0)
|
|
|
|
ret = WBFS_Open();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//reinitialize SD and USB
|
|
|
|
SDCard_Init();
|
|
|
|
USBDevice_Init();
|
2009-05-06 11:51:16 +02:00
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
#define ShutdownToDefault 0
|
|
|
|
#define ShutdownToIdle 1
|
|
|
|
#define ShutdownToStandby 2
|
|
|
|
|
|
|
|
static void _Sys_Shutdown(int SHUTDOWN_MODE)
|
2009-05-03 22:30:17 +02:00
|
|
|
{
|
2009-06-01 17:50:18 +02:00
|
|
|
_ExitApp();
|
|
|
|
WPAD_Flush(0);
|
|
|
|
WPAD_Disconnect(0);
|
|
|
|
WPAD_Shutdown();
|
2009-05-03 22:30:17 +02:00
|
|
|
|
|
|
|
/* Poweroff console */
|
2009-06-01 17:50:18 +02:00
|
|
|
if((CONF_GetShutdownMode() == CONF_SHUTDOWN_IDLE && SHUTDOWN_MODE != ShutdownToStandby) || SHUTDOWN_MODE == ShutdownToIdle) {
|
2009-05-03 22:30:17 +02:00
|
|
|
s32 ret;
|
|
|
|
|
|
|
|
/* Set LED mode */
|
|
|
|
ret = CONF_GetIdleLedMode();
|
|
|
|
if(ret >= 0 && ret <= 2)
|
|
|
|
STM_SetLedMode(ret);
|
|
|
|
|
|
|
|
/* Shutdown to idle */
|
|
|
|
STM_ShutdownToIdle();
|
|
|
|
} else {
|
|
|
|
/* Shutdown to standby */
|
|
|
|
STM_ShutdownToStandby();
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 17:50:18 +02:00
|
|
|
void Sys_Shutdown(void)
|
|
|
|
{
|
|
|
|
_Sys_Shutdown(ShutdownToDefault);
|
|
|
|
}
|
|
|
|
void Sys_ShutdownToIdel(void)
|
|
|
|
{
|
|
|
|
_Sys_Shutdown(ShutdownToIdle);
|
|
|
|
}
|
|
|
|
void Sys_ShutdownToStandby(void)
|
|
|
|
{
|
|
|
|
_Sys_Shutdown(ShutdownToStandby);
|
|
|
|
}
|
2009-05-03 22:30:17 +02:00
|
|
|
|
|
|
|
void Sys_LoadMenu(void)
|
|
|
|
{
|
2009-06-01 17:50:18 +02:00
|
|
|
_ExitApp();
|
2009-05-03 22:30:17 +02:00
|
|
|
/* Return to the Wii system menu */
|
|
|
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
|
|
}
|
|
|
|
|
2009-06-01 17:50:18 +02:00
|
|
|
void Sys_BackToLoader(void)
|
|
|
|
{
|
|
|
|
if (*((u32*) 0x80001800))
|
|
|
|
{
|
|
|
|
_ExitApp();
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
// Channel Version
|
|
|
|
Sys_LoadMenu();
|
|
|
|
}
|
|
|
|
|
2009-05-03 22:30:17 +02:00
|
|
|
s32 Sys_GetCerts(signed_blob **certs, u32 *len)
|
|
|
|
{
|
|
|
|
static signed_blob certificates[CERTS_LEN] ATTRIBUTE_ALIGN(32);
|
|
|
|
|
|
|
|
s32 fd, ret;
|
|
|
|
|
|
|
|
/* Open certificates file */
|
|
|
|
fd = IOS_Open(certs_fs, 1);
|
|
|
|
if (fd < 0)
|
|
|
|
return fd;
|
|
|
|
|
|
|
|
/* Read certificates */
|
|
|
|
ret = IOS_Read(fd, certificates, sizeof(certificates));
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
IOS_Close(fd);
|
|
|
|
|
|
|
|
/* Set values */
|
|
|
|
if (ret > 0) {
|
|
|
|
*certs = certificates;
|
|
|
|
*len = sizeof(certificates);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|