optimize boot sequence, more intelligent device auto-detect, network error message improvements

This commit is contained in:
dborth 2008-12-22 09:20:35 +00:00
parent 2f21a6cb78
commit 2794edef50
10 changed files with 96 additions and 74 deletions

View File

@ -69,7 +69,7 @@ SetupCheats()
int method = GCSettings.SaveMethod; int method = GCSettings.SaveMethod;
if(method == METHOD_AUTO) if(method == METHOD_AUTO)
method = autoSaveMethod(); method = autoSaveMethod(SILENT);
if(!MakeFilePath(filepath, FILE_CHEAT, method)) if(!MakeFilePath(filepath, FILE_CHEAT, method))
return; return;

View File

@ -236,15 +236,15 @@ bool ChangeInterface(int method, bool silent)
WaitPrompt ("USB drive not found!"); WaitPrompt ("USB drive not found!");
#endif #endif
} }
else if(method == METHOD_SMB)
{
sprintf(rootdir, "smb:/");
mounted = ConnectShare(NOTSILENT);
}
else if(method == METHOD_DVD) else if(method == METHOD_DVD)
{ {
sprintf(rootdir, "/"); sprintf(rootdir, "/");
mounted = MountDVD(NOTSILENT); mounted = MountDVD(silent);
}
else if(method == METHOD_SMB)
{
sprintf(rootdir, "smb:/");
mounted = ConnectShare(silent);
} }
return mounted; return mounted;

View File

@ -95,19 +95,21 @@ int autoLoadMethod()
{ {
ShowAction ("Attempting to determine load method..."); ShowAction ("Attempting to determine load method...");
int method = 0;
if(ChangeInterface(METHOD_SD, SILENT)) if(ChangeInterface(METHOD_SD, SILENT))
return METHOD_SD; method = METHOD_SD;
else if(ChangeInterface(METHOD_USB, SILENT)) else if(ChangeInterface(METHOD_USB, SILENT))
return METHOD_USB; method = METHOD_USB;
else if(ChangeInterface(METHOD_DVD, SILENT)) else if(ChangeInterface(METHOD_DVD, SILENT))
return METHOD_DVD; method = METHOD_DVD;
else if(ChangeInterface(METHOD_SMB, SILENT)) else if(ChangeInterface(METHOD_SMB, SILENT))
return METHOD_SMB; method = METHOD_SMB;
else else
{
WaitPrompt("Unable to auto-determine load method!"); WaitPrompt("Unable to auto-determine load method!");
return 0; // no method found
} GCSettings.LoadMethod = method; // save method found for later use
return method;
} }
/**************************************************************************** /****************************************************************************
@ -115,25 +117,28 @@ int autoLoadMethod()
* Auto-determines and sets the save method * Auto-determines and sets the save method
* Returns method set * Returns method set
****************************************************************************/ ****************************************************************************/
int autoSaveMethod() int autoSaveMethod(bool silent)
{ {
if(!silent)
ShowAction ("Attempting to determine save method..."); ShowAction ("Attempting to determine save method...");
int method = 0;
if(ChangeInterface(METHOD_SD, SILENT)) if(ChangeInterface(METHOD_SD, SILENT))
return METHOD_SD; method = METHOD_SD;
else if(ChangeInterface(METHOD_USB, SILENT)) else if(ChangeInterface(METHOD_USB, SILENT))
return METHOD_USB; method = METHOD_USB;
else if(TestCard(CARD_SLOTA, SILENT)) else if(TestCard(CARD_SLOTA, SILENT))
return METHOD_MC_SLOTA; method = METHOD_MC_SLOTA;
else if(TestCard(CARD_SLOTB, SILENT)) else if(TestCard(CARD_SLOTB, SILENT))
return METHOD_MC_SLOTB; method = METHOD_MC_SLOTB;
else if(ChangeInterface(METHOD_SMB, SILENT)) else if(ChangeInterface(METHOD_SMB, SILENT))
return METHOD_SMB; method = METHOD_SMB;
else else if(!silent)
{
WaitPrompt("Unable to auto-determine save method!"); WaitPrompt("Unable to auto-determine save method!");
return 0; // no method found
} GCSettings.SaveMethod = method; // save method found for later use
return method;
} }
/**************************************************************************** /****************************************************************************

View File

@ -44,7 +44,7 @@ void FreeSaveBuffer();
bool MakeFilePath(char filepath[], int type, int method); bool MakeFilePath(char filepath[], int type, int method);
int OpenROM (int method); int OpenROM (int method);
int autoLoadMethod(); int autoLoadMethod();
int autoSaveMethod(); int autoSaveMethod(bool silent);
int FileSortCallback(const void *f1, const void *f2); int FileSortCallback(const void *f1, const void *f2);
void StripExt(char* returnstring, char * inputstring); void StripExt(char* returnstring, char * inputstring);

View File

@ -120,7 +120,7 @@ NGCFreezeMemBuffer ()
* Do freeze game for Nintendo Gamecube * Do freeze game for Nintendo Gamecube
***************************************************************************/ ***************************************************************************/
int int
NGCFreezeGame (int method, bool8 silent) NGCFreezeGame (int method, bool silent)
{ {
char filepath[1024]; char filepath[1024];
int offset = 0; // bytes written (actual) int offset = 0; // bytes written (actual)
@ -130,7 +130,7 @@ NGCFreezeGame (int method, bool8 silent)
ShowAction ("Saving..."); ShowAction ("Saving...");
if(method == METHOD_AUTO) if(method == METHOD_AUTO)
method = autoSaveMethod(); method = autoSaveMethod(silent);
if(!MakeFilePath(filepath, FILE_SNAPSHOT, method)) if(!MakeFilePath(filepath, FILE_SNAPSHOT, method))
return 0; return 0;
@ -152,6 +152,8 @@ NGCFreezeGame (int method, bool8 silent)
memcpy (savebuffer, saveicon, woffset); memcpy (savebuffer, saveicon, woffset);
// And the freezecomment // And the freezecomment
memset(freezecomment, 0, 64);
sprintf (freezecomment[0], "%s Freeze", VERSIONSTR); sprintf (freezecomment[0], "%s Freeze", VERSIONSTR);
sprintf (freezecomment[1], Memory.ROMName); sprintf (freezecomment[1], Memory.ROMName);
memcpy (savebuffer + woffset, freezecomment, 64); memcpy (savebuffer + woffset, freezecomment, 64);
@ -234,7 +236,7 @@ NGCUnFreezeBlock (char *name, uint8 * block, int size)
* NGCUnfreezeGame * NGCUnfreezeGame
***************************************************************************/ ***************************************************************************/
int int
NGCUnfreezeGame (int method, bool8 silent) NGCUnfreezeGame (int method, bool silent)
{ {
char filepath[1024]; char filepath[1024];
int offset = 0; int offset = 0;
@ -246,7 +248,7 @@ NGCUnfreezeGame (int method, bool8 silent)
ShowAction ("Loading..."); ShowAction ("Loading...");
if(method == METHOD_AUTO) if(method == METHOD_AUTO)
method = autoSaveMethod(); // we use 'Save' because snapshot needs R/W method = autoSaveMethod(silent); // we use 'Save' because snapshot needs R/W
if(!MakeFilePath(filepath, FILE_SNAPSHOT, method)) if(!MakeFilePath(filepath, FILE_SNAPSHOT, method))
return 0; return 0;

View File

@ -28,7 +28,7 @@ typedef struct
} }
MEMFILE; MEMFILE;
int NGCFreezeGame (int method, bool8 silent); int NGCFreezeGame (int method, bool silent);
int NGCUnfreezeGame (int method, bool8 silent); int NGCUnfreezeGame (int method, bool silent);
#endif #endif

View File

@ -122,6 +122,7 @@ preparePrefsData (int method)
memcpy (savebuffer, saveicon, offset); memcpy (savebuffer, saveicon, offset);
// And the comments // And the comments
memset(prefscomment, 0, 64);
sprintf (prefscomment[0], "%s Prefs", VERSIONSTR); sprintf (prefscomment[0], "%s Prefs", VERSIONSTR);
sprintf (prefscomment[1], "Preferences"); sprintf (prefscomment[1], "Preferences");
memcpy (savebuffer + offset, prefscomment, 64); memcpy (savebuffer + offset, prefscomment, 64);
@ -319,7 +320,7 @@ SavePrefs (bool silent)
// We'll save using the first available method (probably SD) since this // We'll save using the first available method (probably SD) since this
// is the method preferences will be loaded from by default // is the method preferences will be loaded from by default
int method = autoSaveMethod(); int method = autoSaveMethod(silent);
if(!MakeFilePath(filepath, FILE_PREF, method)) if(!MakeFilePath(filepath, FILE_PREF, method))
return false; return false;

View File

@ -28,8 +28,8 @@
#include "filesel.h" #include "filesel.h"
bool networkInit = false; bool networkInit = false;
bool autoNetworkInit = true;
bool networkShareInit = false; bool networkShareInit = false;
bool networkInitHalt = false;
/**************************************************************************** /****************************************************************************
* InitializeNetwork * InitializeNetwork
@ -38,36 +38,32 @@ bool networkInitHalt = false;
void InitializeNetwork(bool silent) void InitializeNetwork(bool silent)
{ {
if(networkInit || networkInitHalt) // stop if we're already initialized, or if auto-init has failed before
// in which case, manual initialization is required
if(networkInit || !autoNetworkInit)
return; return;
if(!silent) if(!silent)
ShowAction ("Initializing network..."); ShowAction ("Initializing network...");
s32 result; char ip[16];
s32 initResult = if_config(ip, NULL, NULL, true);
while ((result = net_init()) == -EAGAIN); if(initResult == 0)
if (result >= 0)
{
char myIP[16];
if (if_config(myIP, NULL, NULL, true) < 0)
{
networkInitHalt = true; // do not attempt a reconnection again
if(!silent)
WaitPrompt("Error reading IP address.");
}
else
{ {
networkInit = true; networkInit = true;
} }
}
else else
{ {
// do not automatically attempt a reconnection
autoNetworkInit = false;
if(!silent) if(!silent)
WaitPrompt("Unable to initialize network."); {
char msg[150];
sprintf(msg, "Unable to initialize network (Error #: %i)", initResult);
WaitPrompt(msg);
}
} }
} }
@ -90,14 +86,32 @@ ConnectShare (bool silent)
return false; return false;
#endif #endif
// check that all parameter have been set int chkU = (strlen(GCSettings.smbuser) > 0) ? 0:1;
if(strlen(GCSettings.smbuser) == 0 || int chkP = (strlen(GCSettings.smbpwd) > 0) ? 0:1;
strlen(GCSettings.smbpwd) == 0 || int chkS = (strlen(GCSettings.smbshare) > 0) ? 0:1;
strlen(GCSettings.smbshare) == 0 || int chkI = (strlen(GCSettings.smbip) > 0) ? 0:1;
strlen(GCSettings.smbip) == 0)
// check that all parameters have been set
if(chkU + chkP + chkS + chkI > 0)
{ {
if(!silent) if(!silent)
WaitPrompt("Invalid network settings. Check settings.xml."); {
char msg[50];
char msg2[100];
if(chkU + chkP + chkS + chkI > 1) // more than one thing is wrong
sprintf(msg, "Check settings.xml.");
else if(chkU)
sprintf(msg, "Username is blank.");
else if(chkP)
sprintf(msg, "Password is blank.");
else if(chkS)
sprintf(msg, "Share name is blank.");
else if(chkI)
sprintf(msg, "Share IP is blank.");
sprintf(msg2, "Invalid network settings - %s", msg);
WaitPrompt(msg2);
}
return false; return false;
} }

View File

@ -337,37 +337,34 @@ main(int argc, char *argv[])
int selectedMenu = -1; int selectedMenu = -1;
InitDeviceThread();
// Initialise video // Initialise video
InitGCVideo (); InitGCVideo();
// Controllers // Controllers
PAD_Init ();
#ifdef HW_RVL #ifdef HW_RVL
WPAD_Init(); WPAD_Init();
// read wiimote accelerometer and IR data // read wiimote accelerometer and IR data
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL,640,480); WPAD_SetVRes(WPAD_CHAN_ALL,640,480);
#endif
PAD_Init ();
// Wii Power/Reset buttons // Wii Power/Reset buttons
#ifdef HW_RVL
WPAD_SetPowerButtonCallback((WPADShutdownCallback)ShutdownCB); WPAD_SetPowerButtonCallback((WPADShutdownCallback)ShutdownCB);
SYS_SetPowerCallback(ShutdownCB); SYS_SetPowerCallback(ShutdownCB);
SYS_SetResetCallback(ResetCB); SYS_SetResetCallback(ResetCB);
#endif #endif
// Audio
AUDIO_Init (NULL);
// GC Audio RAM (for ROM and backdrop storage)
AR_Init (NULL, 0);
// GameCube only - Injected ROM // GameCube only - Injected ROM
// Before going any further, let's copy any injected ROM image // Before going any further, let's copy any injected ROM image
// We'll put it in ARAM for safe storage // We'll put it in ARAM for safe storage
#ifdef HW_DOL #ifdef HW_DOL
// GC Audio RAM (for ROM and backdrop storage)
AR_Init (NULL, 0);
int *romptr = (int *) 0x81000000; // location of injected rom int *romptr = (int *) 0x81000000; // location of injected rom
if (memcmp ((char *) romptr, "SNESROM0", 8) == 0) if (memcmp ((char *) romptr, "SNESROM0", 8) == 0)
@ -386,6 +383,8 @@ main(int argc, char *argv[])
} }
#endif #endif
unpackbackdrop();
// Initialise freetype font system // Initialise freetype font system
if (FT_Init ()) if (FT_Init ())
{ {
@ -393,7 +392,8 @@ main(int argc, char *argv[])
while (1); while (1);
} }
unpackbackdrop (); // Audio
AUDIO_Init (NULL);
// Set defaults // Set defaults
DefaultSettings (); DefaultSettings ();
@ -427,7 +427,6 @@ main(int argc, char *argv[])
// Initialize libFAT for SD and USB // Initialize libFAT for SD and USB
MountAllFAT(); MountAllFAT();
InitDeviceThread();
// Initialize DVD subsystem (GameCube only) // Initialize DVD subsystem (GameCube only)
#ifdef HW_DOL #ifdef HW_DOL

View File

@ -49,6 +49,7 @@ preparesavedata (int method)
} }
// Copy in the sramcomments // Copy in the sramcomments
memset(sramcomment, 0, 64);
sprintf (sramcomment[0], "%s SRAM", VERSIONSTR); sprintf (sramcomment[0], "%s SRAM", VERSIONSTR);
sprintf (sramcomment[1], Memory.ROMName); sprintf (sramcomment[1], Memory.ROMName);
memcpy (savebuffer + offset, sramcomment, 64); memcpy (savebuffer + offset, sramcomment, 64);
@ -145,7 +146,7 @@ LoadSRAM (int method, bool silent)
int offset = 0; int offset = 0;
if(method == METHOD_AUTO) if(method == METHOD_AUTO)
method = autoSaveMethod(); // we use 'Save' because SRAM needs R/W method = autoSaveMethod(silent); // we use 'Save' because SRAM needs R/W
if(!MakeFilePath(filepath, FILE_SRAM, method)) if(!MakeFilePath(filepath, FILE_SRAM, method))
return 0; return 0;
@ -187,7 +188,7 @@ SaveSRAM (int method, bool silent)
int offset = 0; int offset = 0;
if(method == METHOD_AUTO) if(method == METHOD_AUTO)
method = autoSaveMethod(); method = autoSaveMethod(silent);
if(!MakeFilePath(filepath, FILE_SRAM, method)) if(!MakeFilePath(filepath, FILE_SRAM, method))
return false; return false;