improve device thread, change pref loading

This commit is contained in:
dborth 2008-12-18 23:21:51 +00:00
parent 18e267b1f0
commit e03dd275f7
6 changed files with 42 additions and 15 deletions

View File

@ -174,9 +174,6 @@ bool MountFAT(int method)
sprintf(rootdir, "%s:/", name);
// isInserted doesn't work properly for USB - so we will force a shutdown
//unmountRequired[METHOD_USB] = true;
if(unmountRequired[method])
{
unmountRequired[method] = false;
@ -327,19 +324,27 @@ ParseDirectory()
u32
LoadSzFile(char * filepath, unsigned char * rbuffer)
{
u32 size;
u32 size = 0;
// stop checking if devices were removed/inserted
// since we're loading a file
LWP_SuspendThread (devicethread);
file = fopen (filepath, "rb");
if (file > 0)
{
size = SzExtractFile(filelist[selection].offset, rbuffer);
fclose (file);
return size;
}
else
{
WaitPrompt("Error opening file");
return 0;
}
// go back to checking if devices were inserted/removed
LWP_ResumeThread (devicethread);
return size;
}
/****************************************************************************
@ -368,6 +373,10 @@ LoadFile (char * rbuffer, char *filepath, u32 length, int method, bool silent)
break;
}
// stop checking if devices were removed/inserted
// since we're loading a file
LWP_SuspendThread (devicethread);
// add device to filepath
char fullpath[1024];
sprintf(fullpath, "%s%s", rootdir, filepath);
@ -426,6 +435,9 @@ LoadFile (char * rbuffer, char *filepath, u32 length, int method, bool silent)
WaitPrompt("Error loading file!");
}
// go back to checking if devices were inserted/removed
LWP_ResumeThread (devicethread);
return size;
}
@ -458,6 +470,10 @@ SaveFile (char * buffer, char *filepath, u32 datasize, int method, bool silent)
if (datasize)
{
// stop checking if devices were removed/inserted
// since we're saving a file
LWP_SuspendThread (devicethread);
// add device to filepath
char fullpath[1024];
sprintf(fullpath, "%s%s", rootdir, filepath);
@ -476,6 +492,9 @@ SaveFile (char * buffer, char *filepath, u32 datasize, int method, bool silent)
unmountRequired[method] = true;
WaitPrompt ("Error saving file!");
}
// go back to checking if devices were inserted/removed
LWP_ResumeThread (devicethread);
}
return written;
}

View File

@ -32,5 +32,6 @@ u32 SaveFile(char filepath[], u32 datasize, int method, bool silent);
extern char currdir[MAXPATHLEN];
extern FILE * file;
extern bool unmountRequired[];
extern lwp_t devicethread;
#endif

View File

@ -251,7 +251,7 @@ PreferencesMenu ()
case 11:
case -1: /*** Button B ***/
SavePrefs(GCSettings.SaveMethod, SILENT);
SavePrefs(SILENT);
quit = 1;
break;
@ -612,7 +612,7 @@ ConfigureControllers ()
case 4:
/*** Save Preferences Now ***/
SavePrefs(GCSettings.SaveMethod, NOTSILENT);
SavePrefs(NOTSILENT);
break;
case -1: /*** Button B ***/

View File

@ -308,16 +308,15 @@ decodePrefsData (int method)
* Save Preferences
***************************************************************************/
bool
SavePrefs (int method, bool silent)
SavePrefs (bool silent)
{
char filepath[1024];
int datasize;
int offset = 0;
// there's no point in saving SMB settings TO SMB, because then we'll have no way to load them the next time!
// so instead we'll save using whatever other method is available (eg: SD)
if(method == METHOD_AUTO || method == METHOD_SMB)
method = autoSaveMethod();
// We'll save using the first available method (probably SD) since this
// is the method preferences will be loaded from by default
int method = autoSaveMethod();
if(!MakeFilePath(filepath, FILE_PREF, method))
return false;

View File

@ -8,5 +8,5 @@
* Preferences save/load to XML file
***************************************************************************/
bool SavePrefs (int method, bool silent);
bool SavePrefs (bool silent);
bool LoadPrefs ();

View File

@ -233,9 +233,17 @@ int main(int argc, char *argv[])
ShutdownWii();
#endif
// go back to checking if devices were inserted/removed
// since we're entering the menu
LWP_ResumeThread (devicethread);
MainMenu(selectedMenu);
selectedMenu = 3; // return to game menu from now on
// stop checking if devices were removed/inserted
// since we're starting emulation again
LWP_SuspendThread (devicethread);
ResetVideo_Emu();
while (emulating) // emulation loop
@ -267,7 +275,7 @@ int main(int argc, char *argv[])
}
// save zoom level
SavePrefs(GCSettings.SaveMethod, SILENT);
SavePrefs(SILENT);
ConfigRequested = 0;
break;