int Sys_IosReload(int IOS) { s32 ret = -1; //shutdown SD and USB before IOS Reload in DiscWait SDCard_deInit(); USBDevice_deInit(); WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); WDVD_Close(); USBStorage_Deinit(); if (IOS == 249 || IOS == 222 || IOS == 223) { int i; for (i = 0; i < 10; i++) { ret = IOS_ReloadIOS(IOS); if (ret < 0) return ret; if (IOS == 222 || IOS == 223) load_ehc_module(); ret = WBFS_Init(WBFS_DEVICE_USB); if (!(ret < 0)) break; sleep(1); USBStorage_Deinit(); } if (ret>=0) { ret = Disc_Init(); if (ret>=0) { ret = WBFS_Open(); } } else Sys_BackToLoader(); } PAD_Init(); Wpad_Init(); WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); // WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); //reinitialize SD and USB SDCard_Init(); USBDevice_Init(); return ret; }
int Sys_ChangeIos(int ios) { s32 prevIos = IOS_GetVersion(); SDCard_deInit(); USBDevice_deInit(); WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); WDVD_Close(); USBStorage2_Deinit(); s32 ret = IOS_ReloadIOSsafe(ios); if (ret < 0) { ios = prevIos; } SDCard_Init(); if (ios == 222 || ios == 223) { load_ehc_module(); } USBDevice_Init(); PAD_Init(); Wpad_Init(); WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); WBFS_Init(WBFS_DEVICE_USB); Disc_Init(); if (Sys_IsHermes()) { WBFS_OpenNamed((char *) &game_partition); } else { WBFS_Open(); } return ret; }
void Menu_Device(void) { u32 timeout = 30; s32 ret; /* Ask user for device */ for (;;) { char *devname = "Unknown!"; /* Set device name */ switch (wbfsDev) { case WBFS_DEVICE_USB: devname = "USB Mass Storage Device"; break; case WBFS_DEVICE_SDHC: devname = "SD/SDHC Card"; break; } /* Clear console */ Con_Clear(); printf("[+] Select WBFS device:\n"); printf(" < %s >\n\n", devname); printf(" Press LEFT/RIGHT to select device.\n"); printf(" Press A button to continue.\n\n"); u32 buttons = Wpad_WaitButtons(); /* LEFT/RIGHT buttons */ if (buttons & WPAD_BUTTON_LEFT) { if ((--wbfsDev) < WBFS_MIN_DEVICE) wbfsDev = WBFS_MAX_DEVICE; } if (buttons & WPAD_BUTTON_RIGHT) { if ((++wbfsDev) > WBFS_MAX_DEVICE) wbfsDev = WBFS_MIN_DEVICE; } /* A button */ if (buttons & WPAD_BUTTON_A) break; } printf("[+] Mounting device, please wait...\n"); printf(" (%d seconds timeout)\n\n", timeout); fflush(stdout); /* Initialize WBFS */ ret = WBFS_Init(wbfsDev, timeout); if (ret < 0) { printf(" ERROR! (ret = %d)\n", ret); /* Restart wait */ Restart_Wait(); } /* Try to open device */ while (WBFS_Open() < 0) { /* Clear console */ Con_Clear(); printf("[+] WARNING:\n\n"); printf(" No WBFS partition found!\n"); printf(" You need to format a partition.\n\n"); printf(" Press A button to format a partition.\n"); printf(" Press B button to restart.\n\n"); /* Wait for user answer */ for (;;) { u32 buttons = Wpad_WaitButtons(); /* A button */ if (buttons & WPAD_BUTTON_A) break; /* B button */ if (buttons & WPAD_BUTTON_B) Restart(); } /* Format device */ Menu_Format(); } /* Get game list */ __Menu_GetEntries(); }