mirror of
https://github.com/wiiu-env/HBLInstallerWrapper.git
synced 2024-11-22 22:19:15 +01:00
Hopefully fix initExternalStorage
This commit is contained in:
parent
2daa9d437f
commit
f05f1a2420
@ -12,6 +12,8 @@
|
|||||||
#include <nn/sl/LaunchInfoDatabase.h>
|
#include <nn/sl/LaunchInfoDatabase.h>
|
||||||
#include <nn/ccr/sys_caffeine.h>
|
#include <nn/ccr/sys_caffeine.h>
|
||||||
|
|
||||||
|
#include <coreinit/dynload.h>
|
||||||
|
|
||||||
#include <nn/act/client_cpp.h>
|
#include <nn/act/client_cpp.h>
|
||||||
#include "hbl_install.h"
|
#include "hbl_install.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@ -21,11 +23,6 @@
|
|||||||
#include <whb/log_udp.h>
|
#include <whb/log_udp.h>
|
||||||
#include <whb/log_cafe.h>
|
#include <whb/log_cafe.h>
|
||||||
|
|
||||||
extern "C" void Initialize__Q2_2nn3spmFv();
|
|
||||||
extern "C" void SetAutoFatal__Q2_2nn3spmFb(bool);
|
|
||||||
extern "C" void SetExtendedStorage__Q2_2nn3spmFQ3_2nn3spm12StorageIndex(int*);
|
|
||||||
extern "C" void SetDefaultExtendedStorageVolumeId__Q2_2nn3spmFRCQ3_2nn3spm8VolumeId(int*);
|
|
||||||
|
|
||||||
bool getQuickBoot() {
|
bool getQuickBoot() {
|
||||||
auto bootCheck = CCRSysCaffeineBootCheck();
|
auto bootCheck = CCRSysCaffeineBootCheck();
|
||||||
if (bootCheck == 0) {
|
if (bootCheck == 0) {
|
||||||
@ -72,7 +69,7 @@ bool getQuickBoot() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(!SYSCheckTitleExists(info.titleId)) {
|
if(!SYSCheckTitleExists(info.titleId)) {
|
||||||
DEBUG_FUNCTION_LINE("Title %016lLX doesn't exist", info.titleId);
|
DEBUG_FUNCTION_LINE("Title %016llX doesn't exist", info.titleId);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,17 +104,70 @@ bool getQuickBoot() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct WUT_PACKED VolumeInfo
|
||||||
|
{
|
||||||
|
WUT_UNKNOWN_BYTES(0xAC);
|
||||||
|
char volumeId[16];
|
||||||
|
WUT_UNKNOWN_BYTES(0x100);
|
||||||
|
};
|
||||||
|
WUT_CHECK_OFFSET(VolumeInfo, 0xAC, volumeId);
|
||||||
|
WUT_CHECK_SIZE(VolumeInfo, 444);
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" uint32_t FSGetVolumeInfo(FSClient*, FSCmdBlock*, const char* path, VolumeInfo* data, FSErrorFlag errorMask);
|
||||||
|
|
||||||
|
extern "C" void Initialize__Q2_2nn3spmFv();
|
||||||
|
extern "C" void SetAutoFatal__Q2_2nn3spmFb(bool);
|
||||||
|
extern "C" void SetExtendedStorage__Q2_2nn3spmFQ3_2nn3spm12StorageIndex(uint64_t*);
|
||||||
|
extern "C" void SetDefaultExtendedStorageVolumeId__Q2_2nn3spmFRCQ3_2nn3spm8VolumeId(char *);
|
||||||
|
extern "C" uint32_t FindStorageByVolumeId__Q2_2nn3spmFPQ3_2nn3spm12StorageIndexRCQ3_2nn3spm8VolumeId(uint64_t *, char *);
|
||||||
|
|
||||||
static void initExternalStorage(void) {
|
static void initExternalStorage(void) {
|
||||||
Initialize__Q2_2nn3spmFv();
|
Initialize__Q2_2nn3spmFv();
|
||||||
SetAutoFatal__Q2_2nn3spmFb(false);
|
|
||||||
|
|
||||||
int storageIndex[2]{};
|
FSCmdBlock cmdBlock;
|
||||||
SetExtendedStorage__Q2_2nn3spmFQ3_2nn3spm12StorageIndex(storageIndex);
|
FSInitCmdBlock(&cmdBlock);
|
||||||
|
|
||||||
int volumeId[4]{};
|
VolumeInfo volumeInfo;
|
||||||
SetDefaultExtendedStorageVolumeId__Q2_2nn3spmFRCQ3_2nn3spm8VolumeId(volumeId);
|
|
||||||
|
auto *fsClient = (FSClient *) memalign(0x40, sizeof(FSClient));
|
||||||
|
memset(fsClient, 0, sizeof(*fsClient));
|
||||||
|
FSAddClient(fsClient, FS_ERROR_FLAG_NONE);
|
||||||
|
|
||||||
|
char volumePaths[][19] =
|
||||||
|
{ "/vol/storage_usb01",
|
||||||
|
"/vol/storage_usb02",
|
||||||
|
"/vol/storage_usb03",
|
||||||
|
};
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
for(auto path : volumePaths) {
|
||||||
|
DEBUG_FUNCTION_LINE("Check if %s is connected", path);
|
||||||
|
if(FSGetVolumeInfo(fsClient, &cmdBlock, path, &volumeInfo, FS_ERROR_FLAG_ALL) == 0){
|
||||||
|
DEBUG_FUNCTION_LINE("Set DefaultExtendedStorage to %s", volumeInfo.volumeId);
|
||||||
|
SetDefaultExtendedStorageVolumeId__Q2_2nn3spmFRCQ3_2nn3spm8VolumeId(volumeInfo.volumeId);
|
||||||
|
uint64_t storageIndex = 0;
|
||||||
|
FindStorageByVolumeId__Q2_2nn3spmFPQ3_2nn3spm12StorageIndexRCQ3_2nn3spm8VolumeId(&storageIndex, volumeInfo.volumeId);
|
||||||
|
SetExtendedStorage__Q2_2nn3spmFQ3_2nn3spm12StorageIndex(&storageIndex);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
DEBUG_FUNCTION_LINE("Fallback to empty ExtendedStorage");
|
||||||
|
char empty[16];
|
||||||
|
empty[0] = '\0';
|
||||||
|
SetDefaultExtendedStorageVolumeId__Q2_2nn3spmFRCQ3_2nn3spm8VolumeId(empty);
|
||||||
|
|
||||||
|
uint64_t storageIndex = 0;
|
||||||
|
SetExtendedStorage__Q2_2nn3spmFQ3_2nn3spm12StorageIndex(&storageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
FSDelClient(fsClient, FS_ERROR_FLAG_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void bootHomebrewLauncher(void) {
|
void bootHomebrewLauncher(void) {
|
||||||
uint64_t titleId = _SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_MII_MAKER);
|
uint64_t titleId = _SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_MII_MAKER);
|
||||||
_SYSLaunchTitleWithStdArgsInNoSplash(titleId, nullptr);
|
_SYSLaunchTitleWithStdArgsInNoSplash(titleId, nullptr);
|
||||||
@ -131,6 +181,7 @@ int main(int argc, char **argv) {
|
|||||||
WHBLogCafeInit();
|
WHBLogCafeInit();
|
||||||
WHBLogUdpInit();
|
WHBLogUdpInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
initExternalStorage();
|
initExternalStorage();
|
||||||
|
|
||||||
InstallHBL();
|
InstallHBL();
|
||||||
|
Loading…
Reference in New Issue
Block a user