mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-25 12:46:53 +01:00
*fix bug in partition detection (at least for my HDD)
USB must deinit the device before re initting it or else it returns 0 games and what not. *add filter to skip __CFG_ in teh gamelist (i was told this is the ID6 for hermes' settings)
This commit is contained in:
parent
e44006330a
commit
b5653edcf4
@ -2,8 +2,8 @@
|
||||
<app version="1">
|
||||
<name> USB Loader GX</name>
|
||||
<coder>USB Loader GX Team</coder>
|
||||
<version>1.0 r878</version>
|
||||
<release_date>200912290325</release_date>
|
||||
<version>1.0 r879</version>
|
||||
<release_date>200912300810</release_date>
|
||||
<short_description>Loads games from USB-devices</short_description>
|
||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
||||
|
147
source/main.cpp
147
source/main.cpp
@ -17,10 +17,12 @@
|
||||
#include <locale.h>
|
||||
#include <wiiuse/wpad.h>
|
||||
//#include <debug.h>
|
||||
extern "C" {
|
||||
extern void __exception_setreload(int t);
|
||||
extern "C"
|
||||
{
|
||||
extern void __exception_setreload(int t);
|
||||
}
|
||||
|
||||
|
||||
#include <di/di.h>
|
||||
#include <sys/iosupport.h>
|
||||
|
||||
@ -76,7 +78,8 @@ static void BootUpProblems()
|
||||
|
||||
GuiImageData bootimageData(gxlogo_png);
|
||||
GuiImage bootimage(&bootimageData);
|
||||
GuiText boottext(NULL, 20, (GXColor) {255, 255, 255, 255});
|
||||
GuiText boottext(NULL, 20, (GXColor) {255, 255, 255, 255}
|
||||
);
|
||||
boottext.SetPosition(200, 240-1.2*bootimage.GetHeight()/2+250);
|
||||
bootimage.SetPosition(320-1.2*bootimage.GetWidth()/2, 240-1.2*bootimage.GetHeight()/2);
|
||||
bootimage.SetScale(1.2);
|
||||
@ -89,7 +92,8 @@ static void BootUpProblems()
|
||||
|
||||
time_t curtime;
|
||||
time_t endtime = time(0) + 30;
|
||||
do {
|
||||
do
|
||||
{
|
||||
/*ret2 = IOS_ReloadIOSsafe(249);
|
||||
if (ret2 < 0) {
|
||||
ret2 = IOS_ReloadIOSsafe(222);
|
||||
@ -105,9 +109,11 @@ static void BootUpProblems()
|
||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||
}
|
||||
}*/
|
||||
|
||||
USBDevice_deInit();
|
||||
USBDevice_Init();
|
||||
ret2 = WBFS_Init(WBFS_DEVICE_USB);
|
||||
if (ret2 >= 0) {
|
||||
if (ret2 >= 0)
|
||||
{
|
||||
boottext.SetText("Loading...");
|
||||
bootimage.Draw();
|
||||
boottext.Draw();
|
||||
@ -116,7 +122,8 @@ static void BootUpProblems()
|
||||
}
|
||||
curtime = time(0);
|
||||
boottext.SetTextf("Waiting for your slow USB Device: %i secs...", int(endtime-curtime));
|
||||
while(curtime == time(0)) {
|
||||
while(curtime == time(0))
|
||||
{
|
||||
boottext.Draw();
|
||||
bootimage.Draw();
|
||||
if (endtime-curtime<15)usbimage.Draw();
|
||||
@ -124,33 +131,38 @@ static void BootUpProblems()
|
||||
}
|
||||
} while((endtime-time(0)) > 0);
|
||||
|
||||
if(ret2 < 0) {
|
||||
/*if(ret2 < 0) {
|
||||
boottext.SetText("ERROR: USB device could not be loaded!");
|
||||
usbimage.Draw();
|
||||
bootimage.Draw();
|
||||
boottext.Draw();
|
||||
Menu_Render();
|
||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||
}
|
||||
}*/
|
||||
|
||||
///delete font to load up custom if set
|
||||
if(fontSystem) {
|
||||
if(fontSystem)
|
||||
{
|
||||
delete fontSystem;
|
||||
fontSystem = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
unsigned int *xfb = NULL;
|
||||
|
||||
void InitTextVideo () {
|
||||
gprintf("\nInitTextVideo ()");
|
||||
if (textVideoInit){
|
||||
void InitTextVideo ()
|
||||
{
|
||||
gprintf("\nInitTextVideo ()");
|
||||
if (textVideoInit)
|
||||
{
|
||||
gprintf("...0");
|
||||
return;
|
||||
}
|
||||
dbvideo=1;
|
||||
VIDEO_Init();
|
||||
GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL); // get default video mode
|
||||
// get default video mode
|
||||
GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL);
|
||||
|
||||
// widescreen fix
|
||||
VIDEO_Configure (vmode);
|
||||
@ -178,19 +190,22 @@ gprintf("\nInitTextVideo ()");
|
||||
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[]) {
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
setlocale(LC_ALL, "en.UTF-8");
|
||||
geckoinit = InitGecko();
|
||||
|
||||
if (hbcStubAvailable() || geckoinit) {
|
||||
if (hbcStubAvailable() || geckoinit)
|
||||
{
|
||||
InitTextVideo();
|
||||
}
|
||||
|
||||
// DEBUG_Init(GDBSTUB_DEVICE_USB, 1);
|
||||
//_break();
|
||||
// DEBUG_Init(GDBSTUB_DEVICE_USB, 1);
|
||||
//_break();
|
||||
|
||||
__exception_setreload(5);//auto reset code dump nobody gives us codedump info anyways.
|
||||
__exception_setreload(5); //auto reset code dump nobody gives us codedump info anyways.
|
||||
|
||||
gprintf("\n\n------------------");
|
||||
gprintf("\nUSB Loader GX rev%s",GetRev());
|
||||
@ -201,7 +216,8 @@ main(int argc, char *argv[]) {
|
||||
|
||||
// This part is added, because we need a identify patched ios
|
||||
printf("\n\tReloading into ios 236");
|
||||
if (IOS_ReloadIOSsafe(236) < 0) {
|
||||
if (IOS_ReloadIOSsafe(236) < 0)
|
||||
{
|
||||
printf("\n\tIOS 236 not found, reloading into 36");
|
||||
IOS_ReloadIOSsafe(36);
|
||||
}
|
||||
@ -215,8 +231,10 @@ main(int argc, char *argv[]) {
|
||||
bool startupproblem = false;
|
||||
|
||||
bool bootDevice_found=false;
|
||||
if (argc >= 1) {
|
||||
if (!strncasecmp(argv[0], "usb:/", 5)) {
|
||||
if (argc >= 1)
|
||||
{
|
||||
if (!strncasecmp(argv[0], "usb:/", 5))
|
||||
{
|
||||
strcpy(bootDevice, "USB:");
|
||||
bootDevice_found = true;
|
||||
} else if (!strncasecmp(argv[0], "sd:/", 4))
|
||||
@ -230,7 +248,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
printf("\n\tInitialize USB (wake up)");
|
||||
|
||||
USBDevice_Init();// seems enough to wake up some HDDs if they are in sleep mode when the loader starts (tested with WD MyPassport Essential 2.5")
|
||||
USBDevice_Init(); // seems enough to wake up some HDDs if they are in sleep mode when the loader starts (tested with WD MyPassport Essential 2.5")
|
||||
|
||||
gprintf("\n\tChecking for stub IOS");
|
||||
ios222rev = getIOSrev(0x00000001000000dell);
|
||||
@ -241,7 +259,8 @@ main(int argc, char *argv[]) {
|
||||
{
|
||||
InitTextVideo();
|
||||
printf("\x1b[2J");
|
||||
if ((ios222rev < 0 && ios222rev != WII_EINSTALL) && (ios249rev < 0 && ios249rev != WII_EINSTALL)) {
|
||||
if ((ios222rev < 0 && ios222rev != WII_EINSTALL) && (ios249rev < 0 && ios249rev != WII_EINSTALL))
|
||||
{
|
||||
printf("\n\n\n\tWARNING!");
|
||||
printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+");
|
||||
printf("\n\n\tWe cannot determine the versions on your system,\n\tsince you have no patched ios 36 or 236 installed.");
|
||||
@ -249,7 +268,9 @@ main(int argc, char *argv[]) {
|
||||
printf("\n\tand you should go figure out how to get some cios action going on\n\tin your Wii.");
|
||||
printf("\n\n\tThis message will show every time.");
|
||||
sleep(5);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n\n\n\tERROR!");
|
||||
printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+");
|
||||
printf("\n\n\tI found \n\t\t222 = %d%s",ios222rev,ios222rev==65280?" (Stubbed by 4.2 update)":"");
|
||||
@ -269,22 +290,26 @@ main(int argc, char *argv[]) {
|
||||
|
||||
printf("%d", ret);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("\n\tIOS 249 failed, reloading ios 222...");
|
||||
ret = IOS_ReloadIOSsafe(222);
|
||||
printf("%d", ret);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("\n\tIOS 222 failed, reloading ios 250...");
|
||||
ret = IOS_ReloadIOSsafe(250);
|
||||
printf("%d", ret);
|
||||
|
||||
if(ret < 0) {
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("\n\tIOS 250 failed, reloading ios 223...");
|
||||
ret = IOS_ReloadIOSsafe(223);
|
||||
printf("%d", ret);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("\n\tERROR: cIOS could not be loaded!\n");
|
||||
sleep(5);
|
||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||
@ -303,20 +328,21 @@ main(int argc, char *argv[]) {
|
||||
ret = WBFS_Init(WBFS_DEVICE_USB);
|
||||
printf("%d", ret);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("\n\tYou have issues with a slow disc, or a difficult disc\n\tReloading 222...");
|
||||
ret = IOS_ReloadIOSsafe(222);
|
||||
printf("%d", ret);
|
||||
if(ret < 0) {
|
||||
printf("\n\tSleeping for 4 seconds");
|
||||
// sleep(4);
|
||||
/*if(ret < 0) {
|
||||
// printf("\n\tSleeping for 4 seconds");
|
||||
// sleep(4);
|
||||
|
||||
InitVideo(); // Initialise video
|
||||
Menu_Render();
|
||||
BootUpProblems();
|
||||
startupproblem = true;
|
||||
ret = 1;
|
||||
}
|
||||
}*/
|
||||
printf("\n\tInitialize sd card");
|
||||
SDCard_Init();
|
||||
printf("\n\tLoad ehc module");
|
||||
@ -325,12 +351,15 @@ main(int argc, char *argv[]) {
|
||||
SDCard_deInit();
|
||||
|
||||
printf("\n\tInitialize wbfs...");
|
||||
USBDevice_deInit();
|
||||
USBDevice_Init();
|
||||
ret = WBFS_Init(WBFS_DEVICE_USB);
|
||||
printf("%d", ret);
|
||||
|
||||
if(ret < 0) {
|
||||
printf("\n\tSleeping for 4 seconds");
|
||||
// sleep(4);
|
||||
if(ret < 0)
|
||||
{
|
||||
// printf("\n\tSleeping for 4 seconds");
|
||||
// sleep(4);
|
||||
InitVideo(); // Initialise video
|
||||
Menu_Render();
|
||||
BootUpProblems();
|
||||
@ -341,11 +370,13 @@ main(int argc, char *argv[]) {
|
||||
|
||||
printf("\n\tInitialize sd card");
|
||||
SDCard_Init(); // mount SD for loading cfg's
|
||||
|
||||
//this should have already been done by now in order to WBFS_Init().
|
||||
printf("\n\tInitialize usb device");
|
||||
USBDevice_Init(); // and mount USB:/
|
||||
//gprintf("\n\tSD and USB Init OK");
|
||||
|
||||
if (!bootDevice_found) {
|
||||
if (!bootDevice_found)
|
||||
{
|
||||
printf("\n\tSearch for configuration file");
|
||||
|
||||
//try USB
|
||||
@ -363,7 +394,8 @@ main(int argc, char *argv[]) {
|
||||
char GXGlobal_cfg[26];
|
||||
sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice);
|
||||
FILE *fp = fopen(GXGlobal_cfg, "r");
|
||||
if (fp) {
|
||||
if (fp)
|
||||
{
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
@ -371,20 +403,22 @@ main(int argc, char *argv[]) {
|
||||
printf("\n\tLoading configuration...");
|
||||
CFG_Load();
|
||||
printf("done");
|
||||
// gprintf("\n\tbootDevice = %s",bootDevice);
|
||||
// gprintf("\n\tbootDevice = %s",bootDevice);
|
||||
|
||||
/* Load Custom IOS */
|
||||
if ((Settings.cios == ios222 && IOS_GetVersion() != 222) ||
|
||||
(Settings.cios == ios223 && IOS_GetVersion() != 223)) {
|
||||
(Settings.cios == ios223 && IOS_GetVersion() != 223))
|
||||
{
|
||||
printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223);
|
||||
SDCard_deInit();// unmount SD for reloading IOS
|
||||
USBDevice_deInit();// unmount USB for reloading IOS
|
||||
SDCard_deInit(); // unmount SD for reloading IOS
|
||||
USBDevice_deInit(); // unmount USB for reloading IOS
|
||||
USBStorage_Deinit();
|
||||
ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223);
|
||||
printf("%d", ret);
|
||||
SDCard_Init();
|
||||
load_ehc_module();
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
SDCard_deInit();
|
||||
Settings.cios = ios249;
|
||||
ret = IOS_ReloadIOSsafe(249);
|
||||
@ -395,15 +429,17 @@ main(int argc, char *argv[]) {
|
||||
USBDevice_Init(); // and mount USB:/
|
||||
WBFS_Init(WBFS_DEVICE_USB);
|
||||
} else if ((Settings.cios == ios249 && IOS_GetVersion() != 249) ||
|
||||
(Settings.cios == ios250 && IOS_GetVersion() != 250)) {
|
||||
(Settings.cios == ios250 && IOS_GetVersion() != 250))
|
||||
{
|
||||
|
||||
printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250);
|
||||
SDCard_deInit();// unmount SD for reloading IOS
|
||||
USBDevice_deInit();// unmount USB for reloading IOS
|
||||
SDCard_deInit(); // unmount SD for reloading IOS
|
||||
USBDevice_deInit(); // unmount USB for reloading IOS
|
||||
USBStorage_Deinit();
|
||||
ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250);
|
||||
printf("%d", ret);
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
Settings.cios = ios222;
|
||||
ret = IOS_ReloadIOSsafe(222);
|
||||
SDCard_Init();
|
||||
@ -415,18 +451,20 @@ main(int argc, char *argv[]) {
|
||||
WBFS_Init(WBFS_DEVICE_USB);
|
||||
}
|
||||
|
||||
// Partition_GetList(&partitions);
|
||||
// Partition_GetList(&partitions);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("\nERROR: cIOS could not be loaded!");
|
||||
sleep(5);
|
||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||
exit(0);
|
||||
//SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||
}
|
||||
//gprintf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());//don't need gprintf if sending console shit to gecko, too
|
||||
printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
|
||||
|
||||
// printf("Sleeping for 5 seconds\n");
|
||||
// sleep(5);
|
||||
// printf("Sleeping for 5 seconds\n");
|
||||
// sleep(5);
|
||||
|
||||
//if a ID was passed via args copy it and try to boot it after the partition is mounted
|
||||
//its not really a headless mode. more like hairless.
|
||||
@ -463,4 +501,3 @@ main(int argc, char *argv[]) {
|
||||
MainMenu(MENU_CHECK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1772,19 +1772,22 @@ DiscWait(const char *title, const char *msg, const char *btn1Label, const char *
|
||||
while (i >= 0) {
|
||||
VIDEO_WaitVSync();
|
||||
timerTxt.SetTextf("%u %s", i,tr("seconds left"));
|
||||
HaltGui();
|
||||
/* HaltGui();
|
||||
if (Settings.cios == ios222) {
|
||||
ret = IOS_ReloadIOS(222);
|
||||
load_ehc_module();
|
||||
} else {
|
||||
ret = IOS_ReloadIOS(249);
|
||||
}
|
||||
ResumeGui();
|
||||
ResumeGui();*/
|
||||
sleep(1);
|
||||
USBDevice_deInit();
|
||||
USBDevice_Init();
|
||||
ret = WBFS_Init(WBFS_DEVICE_USB);
|
||||
if (ret>=0)
|
||||
break;
|
||||
|
||||
|
||||
i--;
|
||||
}
|
||||
} else {
|
||||
|
@ -501,6 +501,12 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
|
||||
continue;
|
||||
}
|
||||
|
||||
//ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed
|
||||
if (header->id[0]=='_'&&header->id[1]=='_'&&
|
||||
header->id[2]=='C'&&header->id[3]=='F'&&
|
||||
header->id[4]=='G'&&header->id[5]=='_')
|
||||
continue;
|
||||
|
||||
if (Settings.parentalcontrol && !Settings.godmode && t==0) {
|
||||
if (get_block(header) >= Settings.parentalcontrol)
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user