*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"> <app version="1">
<name> USB Loader GX</name> <name> USB Loader GX</name>
<coder>USB Loader GX Team</coder> <coder>USB Loader GX Team</coder>
<version>1.0 r878</version> <version>1.0 r879</version>
<release_date>200912290325</release_date> <release_date>200912300810</release_date>
<short_description>Loads games from USB-devices</short_description> <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. <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. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.

View File

@ -17,10 +17,12 @@
#include <locale.h> #include <locale.h>
#include <wiiuse/wpad.h> #include <wiiuse/wpad.h>
//#include <debug.h> //#include <debug.h>
extern "C" { extern "C"
extern void __exception_setreload(int t); {
extern void __exception_setreload(int t);
} }
#include <di/di.h> #include <di/di.h>
#include <sys/iosupport.h> #include <sys/iosupport.h>
@ -76,7 +78,8 @@ static void BootUpProblems()
GuiImageData bootimageData(gxlogo_png); GuiImageData bootimageData(gxlogo_png);
GuiImage bootimage(&bootimageData); 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); 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.SetPosition(320-1.2*bootimage.GetWidth()/2, 240-1.2*bootimage.GetHeight()/2);
bootimage.SetScale(1.2); bootimage.SetScale(1.2);
@ -89,7 +92,8 @@ static void BootUpProblems()
time_t curtime; time_t curtime;
time_t endtime = time(0) + 30; time_t endtime = time(0) + 30;
do { do
{
/*ret2 = IOS_ReloadIOSsafe(249); /*ret2 = IOS_ReloadIOSsafe(249);
if (ret2 < 0) { if (ret2 < 0) {
ret2 = IOS_ReloadIOSsafe(222); ret2 = IOS_ReloadIOSsafe(222);
@ -105,9 +109,11 @@ static void BootUpProblems()
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
} }
}*/ }*/
USBDevice_deInit();
USBDevice_Init();
ret2 = WBFS_Init(WBFS_DEVICE_USB); ret2 = WBFS_Init(WBFS_DEVICE_USB);
if (ret2 >= 0) { if (ret2 >= 0)
{
boottext.SetText("Loading..."); boottext.SetText("Loading...");
bootimage.Draw(); bootimage.Draw();
boottext.Draw(); boottext.Draw();
@ -116,7 +122,8 @@ static void BootUpProblems()
} }
curtime = time(0); curtime = time(0);
boottext.SetTextf("Waiting for your slow USB Device: %i secs...", int(endtime-curtime)); boottext.SetTextf("Waiting for your slow USB Device: %i secs...", int(endtime-curtime));
while(curtime == time(0)) { while(curtime == time(0))
{
boottext.Draw(); boottext.Draw();
bootimage.Draw(); bootimage.Draw();
if (endtime-curtime<15)usbimage.Draw(); if (endtime-curtime<15)usbimage.Draw();
@ -124,33 +131,38 @@ static void BootUpProblems()
} }
} while((endtime-time(0)) > 0); } while((endtime-time(0)) > 0);
if(ret2 < 0) { /*if(ret2 < 0) {
boottext.SetText("ERROR: USB device could not be loaded!"); boottext.SetText("ERROR: USB device could not be loaded!");
usbimage.Draw(); usbimage.Draw();
bootimage.Draw(); bootimage.Draw();
boottext.Draw(); boottext.Draw();
Menu_Render(); Menu_Render();
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
} }*/
///delete font to load up custom if set ///delete font to load up custom if set
if(fontSystem) { if(fontSystem)
{
delete fontSystem; delete fontSystem;
fontSystem = NULL; fontSystem = NULL;
} }
} }
unsigned int *xfb = NULL; unsigned int *xfb = NULL;
void InitTextVideo () { void InitTextVideo ()
gprintf("\nInitTextVideo ()"); {
if (textVideoInit){ gprintf("\nInitTextVideo ()");
if (textVideoInit)
{
gprintf("...0"); gprintf("...0");
return; return;
} }
dbvideo=1; dbvideo=1;
VIDEO_Init(); VIDEO_Init();
GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL); // get default video mode // get default video mode
GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL);
// widescreen fix // widescreen fix
VIDEO_Configure (vmode); VIDEO_Configure (vmode);
@ -178,19 +190,22 @@ gprintf("\nInitTextVideo ()");
} }
int int
main(int argc, char *argv[]) { main(int argc, char *argv[])
{
setlocale(LC_ALL, "en.UTF-8"); setlocale(LC_ALL, "en.UTF-8");
geckoinit = InitGecko(); geckoinit = InitGecko();
if (hbcStubAvailable() || geckoinit) { if (hbcStubAvailable() || geckoinit)
{
InitTextVideo(); InitTextVideo();
} }
// DEBUG_Init(GDBSTUB_DEVICE_USB, 1); // DEBUG_Init(GDBSTUB_DEVICE_USB, 1);
//_break(); //_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("\n\n------------------");
gprintf("\nUSB Loader GX rev%s",GetRev()); 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 // This part is added, because we need a identify patched ios
printf("\n\tReloading into ios 236"); 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"); printf("\n\tIOS 236 not found, reloading into 36");
IOS_ReloadIOSsafe(36); IOS_ReloadIOSsafe(36);
} }
@ -215,8 +231,10 @@ main(int argc, char *argv[]) {
bool startupproblem = false; bool startupproblem = false;
bool bootDevice_found=false; bool bootDevice_found=false;
if (argc >= 1) { if (argc >= 1)
if (!strncasecmp(argv[0], "usb:/", 5)) { {
if (!strncasecmp(argv[0], "usb:/", 5))
{
strcpy(bootDevice, "USB:"); strcpy(bootDevice, "USB:");
bootDevice_found = true; bootDevice_found = true;
} else if (!strncasecmp(argv[0], "sd:/", 4)) } else if (!strncasecmp(argv[0], "sd:/", 4))
@ -230,7 +248,7 @@ main(int argc, char *argv[]) {
printf("\n\tInitialize USB (wake up)"); 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"); gprintf("\n\tChecking for stub IOS");
ios222rev = getIOSrev(0x00000001000000dell); ios222rev = getIOSrev(0x00000001000000dell);
@ -241,7 +259,8 @@ main(int argc, char *argv[]) {
{ {
InitTextVideo(); InitTextVideo();
printf("\x1b[2J"); 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\n\n\tWARNING!");
printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); 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."); 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\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."); printf("\n\n\tThis message will show every time.");
sleep(5); sleep(5);
} else { }
else
{
printf("\n\n\n\tERROR!"); printf("\n\n\n\tERROR!");
printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); 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)":""); 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); printf("%d", ret);
if (ret < 0) { if (ret < 0)
{
printf("\n\tIOS 249 failed, reloading ios 222..."); printf("\n\tIOS 249 failed, reloading ios 222...");
ret = IOS_ReloadIOSsafe(222); ret = IOS_ReloadIOSsafe(222);
printf("%d", ret); printf("%d", ret);
if (ret < 0) { if (ret < 0)
{
printf("\n\tIOS 222 failed, reloading ios 250..."); printf("\n\tIOS 222 failed, reloading ios 250...");
ret = IOS_ReloadIOSsafe(250); ret = IOS_ReloadIOSsafe(250);
printf("%d", ret); printf("%d", ret);
if(ret < 0) { if(ret < 0)
{
printf("\n\tIOS 250 failed, reloading ios 223..."); printf("\n\tIOS 250 failed, reloading ios 223...");
ret = IOS_ReloadIOSsafe(223); ret = IOS_ReloadIOSsafe(223);
printf("%d", ret); printf("%d", ret);
if (ret < 0) { if (ret < 0)
{
printf("\n\tERROR: cIOS could not be loaded!\n"); printf("\n\tERROR: cIOS could not be loaded!\n");
sleep(5); sleep(5);
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
@ -303,20 +328,21 @@ main(int argc, char *argv[]) {
ret = WBFS_Init(WBFS_DEVICE_USB); ret = WBFS_Init(WBFS_DEVICE_USB);
printf("%d", ret); 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..."); printf("\n\tYou have issues with a slow disc, or a difficult disc\n\tReloading 222...");
ret = IOS_ReloadIOSsafe(222); ret = IOS_ReloadIOSsafe(222);
printf("%d", ret); printf("%d", ret);
if(ret < 0) { /*if(ret < 0) {
printf("\n\tSleeping for 4 seconds"); // printf("\n\tSleeping for 4 seconds");
// sleep(4); // sleep(4);
InitVideo(); // Initialise video InitVideo(); // Initialise video
Menu_Render(); Menu_Render();
BootUpProblems(); BootUpProblems();
startupproblem = true; startupproblem = true;
ret = 1; ret = 1;
} }*/
printf("\n\tInitialize sd card"); printf("\n\tInitialize sd card");
SDCard_Init(); SDCard_Init();
printf("\n\tLoad ehc module"); printf("\n\tLoad ehc module");
@ -325,12 +351,15 @@ main(int argc, char *argv[]) {
SDCard_deInit(); SDCard_deInit();
printf("\n\tInitialize wbfs..."); printf("\n\tInitialize wbfs...");
USBDevice_deInit();
USBDevice_Init();
ret = WBFS_Init(WBFS_DEVICE_USB); ret = WBFS_Init(WBFS_DEVICE_USB);
printf("%d", ret); printf("%d", ret);
if(ret < 0) { if(ret < 0)
printf("\n\tSleeping for 4 seconds"); {
// sleep(4); // printf("\n\tSleeping for 4 seconds");
// sleep(4);
InitVideo(); // Initialise video InitVideo(); // Initialise video
Menu_Render(); Menu_Render();
BootUpProblems(); BootUpProblems();
@ -341,11 +370,13 @@ main(int argc, char *argv[]) {
printf("\n\tInitialize sd card"); printf("\n\tInitialize sd card");
SDCard_Init(); // mount SD for loading cfg's 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"); printf("\n\tInitialize usb device");
USBDevice_Init(); // and mount USB:/ USBDevice_Init(); // and mount USB:/
//gprintf("\n\tSD and USB Init OK");
if (!bootDevice_found) { if (!bootDevice_found)
{
printf("\n\tSearch for configuration file"); printf("\n\tSearch for configuration file");
//try USB //try USB
@ -363,7 +394,8 @@ main(int argc, char *argv[]) {
char GXGlobal_cfg[26]; char GXGlobal_cfg[26];
sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice); sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice);
FILE *fp = fopen(GXGlobal_cfg, "r"); FILE *fp = fopen(GXGlobal_cfg, "r");
if (fp) { if (fp)
{
fclose(fp); fclose(fp);
} }
@ -371,20 +403,22 @@ main(int argc, char *argv[]) {
printf("\n\tLoading configuration..."); printf("\n\tLoading configuration...");
CFG_Load(); CFG_Load();
printf("done"); printf("done");
// gprintf("\n\tbootDevice = %s",bootDevice); // gprintf("\n\tbootDevice = %s",bootDevice);
/* Load Custom IOS */ /* Load Custom IOS */
if ((Settings.cios == ios222 && IOS_GetVersion() != 222) || 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); printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223);
SDCard_deInit();// unmount SD for reloading IOS SDCard_deInit(); // unmount SD for reloading IOS
USBDevice_deInit();// unmount USB for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS
USBStorage_Deinit(); USBStorage_Deinit();
ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223); ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223);
printf("%d", ret); printf("%d", ret);
SDCard_Init(); SDCard_Init();
load_ehc_module(); load_ehc_module();
if (ret < 0) { if (ret < 0)
{
SDCard_deInit(); SDCard_deInit();
Settings.cios = ios249; Settings.cios = ios249;
ret = IOS_ReloadIOSsafe(249); ret = IOS_ReloadIOSsafe(249);
@ -395,15 +429,17 @@ main(int argc, char *argv[]) {
USBDevice_Init(); // and mount USB:/ USBDevice_Init(); // and mount USB:/
WBFS_Init(WBFS_DEVICE_USB); WBFS_Init(WBFS_DEVICE_USB);
} else if ((Settings.cios == ios249 && IOS_GetVersion() != 249) || } 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); printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250);
SDCard_deInit();// unmount SD for reloading IOS SDCard_deInit(); // unmount SD for reloading IOS
USBDevice_deInit();// unmount USB for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS
USBStorage_Deinit(); USBStorage_Deinit();
ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250); ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250);
printf("%d", ret); printf("%d", ret);
if (ret < 0) { if (ret < 0)
{
Settings.cios = ios222; Settings.cios = ios222;
ret = IOS_ReloadIOSsafe(222); ret = IOS_ReloadIOSsafe(222);
SDCard_Init(); SDCard_Init();
@ -415,18 +451,20 @@ main(int argc, char *argv[]) {
WBFS_Init(WBFS_DEVICE_USB); WBFS_Init(WBFS_DEVICE_USB);
} }
// Partition_GetList(&partitions); // Partition_GetList(&partitions);
if (ret < 0) { if (ret < 0)
{
printf("\nERROR: cIOS could not be loaded!"); printf("\nERROR: cIOS could not be loaded!");
sleep(5); 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 //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("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
// printf("Sleeping for 5 seconds\n"); // printf("Sleeping for 5 seconds\n");
// sleep(5); // sleep(5);
//if a ID was passed via args copy it and try to boot it after the partition is mounted //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. //its not really a headless mode. more like hairless.
@ -463,4 +501,3 @@ main(int argc, char *argv[]) {
MainMenu(MENU_CHECK); MainMenu(MENU_CHECK);
return 0; return 0;
} }

View File

@ -1772,19 +1772,22 @@ DiscWait(const char *title, const char *msg, const char *btn1Label, const char *
while (i >= 0) { while (i >= 0) {
VIDEO_WaitVSync(); VIDEO_WaitVSync();
timerTxt.SetTextf("%u %s", i,tr("seconds left")); timerTxt.SetTextf("%u %s", i,tr("seconds left"));
HaltGui(); /* HaltGui();
if (Settings.cios == ios222) { if (Settings.cios == ios222) {
ret = IOS_ReloadIOS(222); ret = IOS_ReloadIOS(222);
load_ehc_module(); load_ehc_module();
} else { } else {
ret = IOS_ReloadIOS(249); ret = IOS_ReloadIOS(249);
} }
ResumeGui(); ResumeGui();*/
sleep(1); sleep(1);
USBDevice_deInit();
USBDevice_Init();
ret = WBFS_Init(WBFS_DEVICE_USB); ret = WBFS_Init(WBFS_DEVICE_USB);
if (ret>=0) if (ret>=0)
break; break;
i--; i--;
} }
} else { } else {

View File

@ -501,6 +501,12 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
continue; 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 (Settings.parentalcontrol && !Settings.godmode && t==0) {
if (get_block(header) >= Settings.parentalcontrol) if (get_block(header) >= Settings.parentalcontrol)
continue; continue;