mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-30 15:14:18 +01:00
Fixed "Set USB failed: -6" dug.
Fixed bug where user selected IOS is never actually used, because the configuration file was unloaded before it gets there. Fixed NAND paths being created with double "/"s. No real effect because they seem to be automatically reduced to a single "/" Minor wifi-gecko changes to keep it alive close to the game launch.
This commit is contained in:
parent
1a0908497a
commit
d669a1a17e
@ -181,14 +181,21 @@ s32 Nand::Disable_Emu()
|
|||||||
|
|
||||||
void Nand::Set_NandPath(string path)
|
void Nand::Set_NandPath(string path)
|
||||||
{
|
{
|
||||||
if(isalnum(*(path.begin()))) path.insert(path.begin(), '/');
|
if(isalnum(*(path.begin())))
|
||||||
else *(path.begin()) = '/';
|
path.insert(path.begin(), '/');
|
||||||
|
else
|
||||||
|
*(path.begin()) = '/';
|
||||||
|
|
||||||
if(isalnum(*(path.end()))) path.push_back('/');
|
if(isalnum(*(path.end())))
|
||||||
else *(path.end()) = '/';
|
path.push_back('/');
|
||||||
|
else
|
||||||
|
path.replace(path.length() - 1, 1, "/");
|
||||||
|
|
||||||
if(path.size() <= 32)
|
if(path.size() <= 32)
|
||||||
memcpy(NandPath, path.c_str(), path.size());
|
memcpy(NandPath, path.c_str(), path.size());
|
||||||
|
else
|
||||||
|
memset(NandPath, 0, sizeof(NandPath));
|
||||||
|
gprintf("NandPath = %s\n", NandPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Nand::__Dec_Enc_TB(void)
|
void Nand::__Dec_Enc_TB(void)
|
||||||
@ -757,6 +764,16 @@ void Nand::CreatePath(const char *path, ...)
|
|||||||
if(folder[strlen(folder)-1] == '/')
|
if(folder[strlen(folder)-1] == '/')
|
||||||
folder[strlen(folder)-1] = 0;
|
folder[strlen(folder)-1] = 0;
|
||||||
|
|
||||||
|
char *check = folder;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
check = strstr(folder, "//");
|
||||||
|
if (check != NULL)
|
||||||
|
strcpy(check, check + 1);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
DIR *d;
|
DIR *d;
|
||||||
d = opendir(folder);
|
d = opendir(folder);
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <network.h>
|
#include <network.h>
|
||||||
|
#include <errno.h>
|
||||||
#include "wifi_gecko.h"
|
#include "wifi_gecko.h"
|
||||||
|
|
||||||
// set to use TCP socket instead of UDP
|
// set to use TCP socket instead of UDP
|
||||||
@ -108,7 +109,9 @@ int WifiGecko_Send(const char * data, int datasize)
|
|||||||
|
|
||||||
while (done < datasize)
|
while (done < datasize)
|
||||||
{
|
{
|
||||||
if(blocksize > datasize-done)
|
while(net_get_status() == -EBUSY);
|
||||||
|
|
||||||
|
if(blocksize > datasize-done)
|
||||||
blocksize = datasize-done;
|
blocksize = datasize-done;
|
||||||
|
|
||||||
ret = net_send(connection, data + done, blocksize, 0);
|
ret = net_send(connection, data + done, blocksize, 0);
|
||||||
|
@ -286,10 +286,8 @@ s32 Disc_Wait(void)
|
|||||||
|
|
||||||
s32 Disc_SetUSB(const u8 *id)
|
s32 Disc_SetUSB(const u8 *id)
|
||||||
{
|
{
|
||||||
//gprintf("Trying set_frag_list\n");
|
|
||||||
if (id) return set_frag_list((u8 *) id);
|
if (id) return set_frag_list((u8 *) id);
|
||||||
|
|
||||||
//gprintf("Trying WDVD_SetUSBMode\n");
|
|
||||||
return WDVD_SetUSBMode(wbfsDev, (u8 *) id, -1);
|
return WDVD_SetUSBMode(wbfsDev, (u8 *) id, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,12 +335,6 @@ s32 WDVD_SetFragList(int device, void *fraglist, int size)
|
|||||||
inbuf[2] = (u32)fraglist;
|
inbuf[2] = (u32)fraglist;
|
||||||
inbuf[3] = size;
|
inbuf[3] = size;
|
||||||
|
|
||||||
//int i;
|
|
||||||
//for (i = 0; i < 8; i++)
|
|
||||||
// gprintf("inbuf[%d] = %X\n", i, inbuf[i]);
|
|
||||||
//ghexdump(fraglist, size);
|
|
||||||
//gprintf("\n");
|
|
||||||
|
|
||||||
DCFlushRange(fraglist, size);
|
DCFlushRange(fraglist, size);
|
||||||
s32 ret = IOS_Ioctl(di_fd, IOCTL_DI_SETFRAG, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf));
|
s32 ret = IOS_Ioctl(di_fd, IOCTL_DI_SETFRAG, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf));
|
||||||
if (ret < 0) return ret;
|
if (ret < 0) return ret;
|
||||||
|
@ -194,11 +194,9 @@ void CMenu::init(void)
|
|||||||
|
|
||||||
m_appDir = sfmt("%s:/%s", drive, APPDATA_DIR2);
|
m_appDir = sfmt("%s:/%s", drive, APPDATA_DIR2);
|
||||||
m_cfg.load(sfmt("%s/" CFG_FILENAME, m_appDir.c_str()).c_str());
|
m_cfg.load(sfmt("%s/" CFG_FILENAME, m_appDir.c_str()).c_str());
|
||||||
if (m_cfg.getBool("GENERAL", "async_network") || has_enabled_providers() || m_cfg.getBool("DEBUG", "wifi_gecko"))
|
m_use_wifi_gecko = m_cfg.getBool("DEBUG", "wifi_gecko");
|
||||||
{
|
if (m_cfg.getBool("GENERAL", "async_network") || has_enabled_providers() || m_use_wifi_gecko)
|
||||||
_initAsyncNetwork();
|
_reload_wifi_gecko();
|
||||||
while(net_get_status() == -EBUSY);
|
|
||||||
}
|
|
||||||
|
|
||||||
gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
|
gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
|
||||||
|
|
||||||
@ -496,7 +494,18 @@ void CMenu::cleanup(bool ios_reload)
|
|||||||
{
|
{
|
||||||
_cleanupDefaultFont();
|
_cleanupDefaultFont();
|
||||||
}
|
}
|
||||||
_deinitNetwork();
|
if (!ios_reload || (!m_use_wifi_gecko && ios_reload))
|
||||||
|
_deinitNetwork();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMenu::_reload_wifi_gecko(void)
|
||||||
|
{
|
||||||
|
if (m_use_wifi_gecko)
|
||||||
|
{
|
||||||
|
_initAsyncNetwork();
|
||||||
|
while(net_get_status() == -EBUSY);
|
||||||
|
usleep(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMenu::_setAA(int aa)
|
void CMenu::_setAA(int aa)
|
||||||
|
@ -998,8 +998,10 @@ private:
|
|||||||
public:
|
public:
|
||||||
void _directlaunch(const string &id);
|
void _directlaunch(const string &id);
|
||||||
private:
|
private:
|
||||||
|
bool m_use_wifi_gecko;
|
||||||
|
void _reload_wifi_gecko();
|
||||||
bool _loadFile(SmartBuf &buffer, u32 &size, const char *path, const char *file);
|
bool _loadFile(SmartBuf &buffer, u32 &size, const char *path, const char *file);
|
||||||
int _loadIOS(u8 ios, string id);
|
int _loadIOS(u8 ios, int userIOS, string id);
|
||||||
void _launch(dir_discHdr *hdr);
|
void _launch(dir_discHdr *hdr);
|
||||||
void _launchGame(dir_discHdr *hdr, bool dvd);
|
void _launchGame(dir_discHdr *hdr, bool dvd);
|
||||||
void _launchChannel(dir_discHdr *hdr);
|
void _launchChannel(dir_discHdr *hdr);
|
||||||
|
@ -791,14 +791,11 @@ void CMenu::_launchHomebrew(const char *filepath, vector<string> arguments)
|
|||||||
m_exit = true;
|
m_exit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CMenu::_loadIOS(u8 ios, string id)
|
int CMenu::_loadIOS(u8 gameIOS, int userIOS, string id)
|
||||||
{
|
{
|
||||||
int gameIOS = 0;
|
gprintf("Game ID# %s requested IOS %d. User selected %d\n", id.c_str(), gameIOS, userIOS);
|
||||||
int userIOS = 0;
|
|
||||||
|
|
||||||
gprintf("Game ID# %s requested IOS %d\n", id.c_str(), ios);
|
if (userIOS > 0 && _installed_cios.size() > 0)
|
||||||
|
|
||||||
if (m_gcfg2.getInt(id, "ios", &userIOS) && _installed_cios.size() > 0)
|
|
||||||
{
|
{
|
||||||
for(CIOSItr itr = _installed_cios.begin(); itr != _installed_cios.end(); itr++)
|
for(CIOSItr itr = _installed_cios.begin(); itr != _installed_cios.end(); itr++)
|
||||||
{
|
{
|
||||||
@ -807,59 +804,57 @@ int CMenu::_loadIOS(u8 ios, string id)
|
|||||||
gameIOS = itr->first;
|
gameIOS = itr->first;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else gameIOS = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reload IOS, if requested
|
// remap IOS to CIOS
|
||||||
if (gameIOS != mainIOS)
|
if(gameIOS < 0x64)
|
||||||
{
|
{
|
||||||
if(gameIOS < 0x64)
|
if ( _installed_cios.size() <= 0)
|
||||||
{
|
{
|
||||||
if ( _installed_cios.size() <= 0)
|
error(sfmt("No cios found!"));
|
||||||
|
Sys_LoadMenu();
|
||||||
|
}
|
||||||
|
u8 IOS[3];
|
||||||
|
IOS[0] = gameIOS;
|
||||||
|
IOS[1] = 56;
|
||||||
|
IOS[2] = 57;
|
||||||
|
bool found = false;
|
||||||
|
for(u8 num = 0; num < 3; num++)
|
||||||
|
{
|
||||||
|
if(found)
|
||||||
|
break;
|
||||||
|
if(IOS[num] == 0)
|
||||||
|
continue;
|
||||||
|
for(CIOSItr itr = _installed_cios.begin(); itr != _installed_cios.end(); itr++)
|
||||||
{
|
{
|
||||||
error(sfmt("No cios found!"));
|
if(itr->second == IOS[num] || itr->first == IOS[num])
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
u8 IOS[3];
|
|
||||||
IOS[0] = gameIOS == 0 ? ios : gameIOS;
|
|
||||||
IOS[1] = 56;
|
|
||||||
IOS[2] = 57;
|
|
||||||
bool found = false;
|
|
||||||
for(u8 num = 0; num < 3; num++)
|
|
||||||
{
|
|
||||||
if(found)
|
|
||||||
break;
|
|
||||||
if(IOS[num] == 0)
|
|
||||||
continue;
|
|
||||||
for(CIOSItr itr = _installed_cios.begin(); itr != _installed_cios.end(); itr++)
|
|
||||||
{
|
{
|
||||||
if(itr->second == IOS[num] || itr->first == IOS[num])
|
gameIOS = itr->first;
|
||||||
{
|
found = true;
|
||||||
gameIOS = itr->first;
|
break;
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!found)
|
|
||||||
{
|
|
||||||
error(sfmt("Couldn't find a cIOS using base %i, or 56/57", IOS[0]));
|
|
||||||
return LOAD_IOS_FAILED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (gameIOS != mainIOS)
|
if(!found)
|
||||||
{
|
{
|
||||||
gprintf("Reloading IOS into %d\n", gameIOS);
|
error(sfmt("Couldn't find a cIOS using base %i, or 56/57", IOS[0]));
|
||||||
cleanup(true);
|
return LOAD_IOS_FAILED;
|
||||||
if(!loadIOS(gameIOS, true))
|
|
||||||
{
|
|
||||||
error(sfmt("Couldn't load IOS %i", gameIOS));
|
|
||||||
return LOAD_IOS_FAILED;
|
|
||||||
}
|
|
||||||
return LOAD_IOS_SUCCEEDED;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gameIOS != mainIOS)
|
||||||
|
{
|
||||||
|
gprintf("Reloading IOS into %d\n", gameIOS);
|
||||||
|
cleanup(true);
|
||||||
|
if(!loadIOS(gameIOS, true))
|
||||||
|
{
|
||||||
|
_reload_wifi_gecko();
|
||||||
|
error(sfmt("Couldn't load IOS %i", gameIOS));
|
||||||
|
return LOAD_IOS_FAILED;
|
||||||
|
}
|
||||||
|
return LOAD_IOS_SUCCEEDED;
|
||||||
|
}
|
||||||
return LOAD_IOS_NOT_NEEDED;
|
return LOAD_IOS_NOT_NEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -926,6 +921,9 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
|
|||||||
if (i==2)
|
if (i==2)
|
||||||
emulate_mode = true;
|
emulate_mode = true;
|
||||||
|
|
||||||
|
int userIOS = 0;
|
||||||
|
m_gcfg2.getInt(id, "ios", &userIOS);
|
||||||
|
|
||||||
m_gcfg1.save(true);
|
m_gcfg1.save(true);
|
||||||
m_gcfg2.save(true);
|
m_gcfg2.save(true);
|
||||||
m_cat.save(true);
|
m_cat.save(true);
|
||||||
@ -943,7 +941,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
|
|||||||
_loadFile(cheatFile, cheatSize, m_cheatDir.c_str(), fmt("%s.gct", hdr->hdr.id));
|
_loadFile(cheatFile, cheatSize, m_cheatDir.c_str(), fmt("%s.gct", hdr->hdr.id));
|
||||||
ocarina_load_code(cheatFile.get(), cheatSize);
|
ocarina_load_code(cheatFile.get(), cheatSize);
|
||||||
|
|
||||||
int result = _loadIOS(channel.GetRequestedIOS(hdr->hdr.chantitle), id);
|
int result = _loadIOS(channel.GetRequestedIOS(hdr->hdr.chantitle), userIOS, id);
|
||||||
if (result == LOAD_IOS_FAILED)
|
if (result == LOAD_IOS_FAILED)
|
||||||
return;
|
return;
|
||||||
if (result == LOAD_IOS_SUCCEEDED)
|
if (result == LOAD_IOS_SUCCEEDED)
|
||||||
@ -1001,7 +999,6 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
|||||||
{
|
{
|
||||||
string id = string((const char *) hdr->hdr.id);
|
string id = string((const char *) hdr->hdr.id);
|
||||||
Nand::Instance()->Disable_Emu();
|
Nand::Instance()->Disable_Emu();
|
||||||
bool using_wifi_gecko = m_cfg.getBool("DEBUG", "wifi_gecko");
|
|
||||||
|
|
||||||
if (dvd)
|
if (dvd)
|
||||||
{
|
{
|
||||||
@ -1187,6 +1184,9 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
|||||||
if (has_enabled_providers() && _initNetwork() == 0)
|
if (has_enabled_providers() && _initNetwork() == 0)
|
||||||
add_game_to_card(id.c_str());
|
add_game_to_card(id.c_str());
|
||||||
|
|
||||||
|
int userIOS = 0;
|
||||||
|
m_gcfg2.getInt(id, "ios", &userIOS);
|
||||||
|
|
||||||
m_gcfg1.save(true);
|
m_gcfg1.save(true);
|
||||||
m_gcfg2.save(true);
|
m_gcfg2.save(true);
|
||||||
m_cat.save(true);
|
m_cat.save(true);
|
||||||
@ -1203,31 +1203,22 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
|||||||
app_gameconfig_load((u8 *) &hdr->hdr.id, gameconfig.get(), gameconfigSize);
|
app_gameconfig_load((u8 *) &hdr->hdr.id, gameconfig.get(), gameconfigSize);
|
||||||
ocarina_load_code(cheatFile.get(), cheatSize);
|
ocarina_load_code(cheatFile.get(), cheatSize);
|
||||||
|
|
||||||
if (!using_wifi_gecko)
|
if (!m_use_wifi_gecko)
|
||||||
net_wc24cleanup();
|
net_wc24cleanup();
|
||||||
|
|
||||||
bool iosLoaded = false;
|
bool iosLoaded = false;
|
||||||
|
|
||||||
if (!dvd)
|
if (!dvd)
|
||||||
{
|
{
|
||||||
int result = _loadIOS(GetRequestedGameIOS(hdr), id);
|
int result = _loadIOS(GetRequestedGameIOS(hdr), userIOS, id);
|
||||||
if (result == LOAD_IOS_FAILED)
|
if (result == LOAD_IOS_FAILED)
|
||||||
return;
|
return;
|
||||||
if (result == LOAD_IOS_SUCCEEDED)
|
if (result == LOAD_IOS_SUCCEEDED)
|
||||||
iosLoaded = true;
|
iosLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iosLoaded && using_wifi_gecko)
|
|
||||||
{
|
|
||||||
_initAsyncNetwork();
|
|
||||||
while(net_get_status() == -EBUSY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(emuSave)
|
if(emuSave)
|
||||||
{
|
{
|
||||||
if(iosLoaded) ISFS_Deinitialize();
|
|
||||||
ISFS_Initialize();
|
|
||||||
|
|
||||||
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
|
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
|
||||||
DeviceHandler::Instance()->UnMount(emuPartition);
|
DeviceHandler::Instance()->UnMount(emuPartition);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user