void Init_SD_USB() { int32_t res = IOSUHAX_Open(NULL); if(res < 0) { ExecuteIOSExploitWithDefaultConfig(); } deleteDevTabsNames(); mount_fake(); gSDInitDone |= WUPS_SDUSB_MOUNTED_FAKE; if(res < 0) { DEBUG_FUNCTION_LINE("IOSUHAX_open failed\n"); if((res = mount_sd_fat("sd")) >= 0) { DEBUG_FUNCTION_LINE("mount_sd_fat success\n"); gSDInitDone |= WUPS_SDUSB_MOUNTED_OS_SD; } else { DEBUG_FUNCTION_LINE("mount_sd_fat failed %d\n",res); } } else { DEBUG_FUNCTION_LINE("Using IOSUHAX for SD/USB access\n"); gSDInitDone |= WUPS_SDUSB_LIBIOSU_LOADED; int32_t ntfs_mounts = mountAllNTFS(); if(ntfs_mounts > 0) { gSDInitDone |= WUPS_USB_MOUNTED_LIBNTFS; } if(mount_libfatAll() == 0) { gSDInitDone |= WUPS_SD_MOUNTED_LIBFAT; gSDInitDone |= WUPS_USB_MOUNTED_LIBFAT; } } }
static void fsdev_init(void) { iosuhaxMount = 0; int res = IOSUHAX_Open(NULL); if (res < 0) res = MCPHookOpen(); if (res < 0) mount_sd_fat("sd"); else { iosuhaxMount = 1; fatInitDefault(); } }
int MCPHookOpen() { //take over mcp thread mcp_hook_fd = IOS_Open("/dev/mcp", 0); if (mcp_hook_fd < 0) return -1; IOS_IoctlAsync(mcp_hook_fd, 0x62, (void *)0, 0, (void *)0, 0, someFunc, (void *)0); //let wupserver start up retro_sleep(1000); if (IOSUHAX_Open("/dev/mcp") < 0) { IOS_Close(mcp_hook_fd); mcp_hook_fd = -1; return -1; } return 0; }