*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:
giantpune 2009-12-30 09:52:24 +00:00
parent e44006330a
commit b5653edcf4
4 changed files with 298 additions and 252 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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 {

View File

@ -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;