From 7b5d8bc38f2e0fc63b9f514b0869846d259b947d Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 6 Apr 2021 21:59:40 -0700 Subject: [PATCH 1/3] Utility: Move dialog classes to heap. This makes it easier to properly reset them on game reset. --- Core/Dialog/PSPSaveDialog.cpp | 1 + Core/HLE/sceUtility.cpp | 128 +++++++++++++++++++--------------- 2 files changed, 72 insertions(+), 57 deletions(-) diff --git a/Core/Dialog/PSPSaveDialog.cpp b/Core/Dialog/PSPSaveDialog.cpp index 34811f4fc6..3b54cb8b55 100755 --- a/Core/Dialog/PSPSaveDialog.cpp +++ b/Core/Dialog/PSPSaveDialog.cpp @@ -62,6 +62,7 @@ PSPSaveDialog::PSPSaveDialog(UtilityDialogType type) : PSPDialog(type) { } PSPSaveDialog::~PSPSaveDialog() { + JoinIOThread(); } int PSPSaveDialog::Init(int paramAddr) diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index e0aa43ec83..1814cbff5b 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -123,12 +123,12 @@ static const ModuleLoadInfo moduleLoadInfo[] = { // Only a single dialog is allowed at a time. static UtilityDialogType currentDialogType; bool currentDialogActive; -static PSPSaveDialog saveDialog(UtilityDialogType::SAVEDATA); -static PSPMsgDialog msgDialog(UtilityDialogType::MSG); -static PSPOskDialog oskDialog(UtilityDialogType::OSK); -static PSPNetconfDialog netDialog(UtilityDialogType::NET); -static PSPScreenshotDialog screenshotDialog(UtilityDialogType::SCREENSHOT); -static PSPGamedataInstallDialog gamedataInstallDialog(UtilityDialogType::GAMEDATAINSTALL); +static PSPSaveDialog *saveDialog; +static PSPMsgDialog *msgDialog; +static PSPOskDialog *oskDialog; +static PSPNetconfDialog *netDialog; +static PSPScreenshotDialog *screenshotDialog; +static PSPGamedataInstallDialog *gamedataInstallDialog; static int oldStatus = 100; //random value static std::map currentlyLoadedModules; @@ -159,15 +159,22 @@ static void DeactivateDialog() { static void UtilityVolatileUnlock(u64 userdata, int cyclesLate) { // There can only be one active, so just try each of them. - saveDialog.FinishVolatile(); - msgDialog.FinishVolatile(); - oskDialog.FinishVolatile(); - netDialog.FinishVolatile(); - screenshotDialog.FinishVolatile(); - gamedataInstallDialog.FinishVolatile(); + saveDialog->FinishVolatile(); + msgDialog->FinishVolatile(); + oskDialog->FinishVolatile(); + netDialog->FinishVolatile(); + screenshotDialog->FinishVolatile(); + gamedataInstallDialog->FinishVolatile(); } void __UtilityInit() { + saveDialog = new PSPSaveDialog(UtilityDialogType::SAVEDATA); + msgDialog = new PSPMsgDialog(UtilityDialogType::MSG); + oskDialog = new PSPOskDialog(UtilityDialogType::OSK); + netDialog = new PSPNetconfDialog(UtilityDialogType::NET); + screenshotDialog = new PSPScreenshotDialog(UtilityDialogType::SCREENSHOT); + gamedataInstallDialog = new PSPGamedataInstallDialog(UtilityDialogType::GAMEDATAINSTALL); + currentDialogType = UtilityDialogType::NONE; DeactivateDialog(); SavedataParam::Init(); @@ -183,12 +190,12 @@ void __UtilityDoState(PointerWrap &p) { Do(p, currentDialogType); Do(p, currentDialogActive); - saveDialog.DoState(p); - msgDialog.DoState(p); - oskDialog.DoState(p); - netDialog.DoState(p); - screenshotDialog.DoState(p); - gamedataInstallDialog.DoState(p); + saveDialog->DoState(p); + msgDialog->DoState(p); + oskDialog->DoState(p); + netDialog->DoState(p); + screenshotDialog->DoState(p); + gamedataInstallDialog->DoState(p); if (s >= 2) { Do(p, currentlyLoadedModules); @@ -225,17 +232,24 @@ void __UtilityDoState(PointerWrap &p) { } void __UtilityShutdown() { - saveDialog.Shutdown(true); - msgDialog.Shutdown(true); - oskDialog.Shutdown(true); - netDialog.Shutdown(true); - screenshotDialog.Shutdown(true); - gamedataInstallDialog.Shutdown(true); + saveDialog->Shutdown(true); + msgDialog->Shutdown(true); + oskDialog->Shutdown(true); + netDialog->Shutdown(true); + screenshotDialog->Shutdown(true); + gamedataInstallDialog->Shutdown(true); if (accessThread) { delete accessThread; accessThread = nullptr; } + + delete saveDialog; + delete msgDialog; + delete oskDialog; + delete netDialog; + delete screenshotDialog; + delete gamedataInstallDialog; } void UtilityDialogShutdown(UtilityDialogType type, int delayUs, int priority) { @@ -277,19 +291,19 @@ static int UtilityFinishDialog(int type) { case UtilityDialogType::NONE: break; case UtilityDialogType::SAVEDATA: - return hleLogSuccessI(SCEUTILITY, saveDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, saveDialog->FinishShutdown()); case UtilityDialogType::MSG: - return hleLogSuccessI(SCEUTILITY, msgDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, msgDialog->FinishShutdown()); case UtilityDialogType::OSK: - return hleLogSuccessI(SCEUTILITY, oskDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, oskDialog->FinishShutdown()); case UtilityDialogType::NET: - return hleLogSuccessI(SCEUTILITY, netDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, netDialog->FinishShutdown()); case UtilityDialogType::SCREENSHOT: - return hleLogSuccessI(SCEUTILITY, screenshotDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, screenshotDialog->FinishShutdown()); case UtilityDialogType::GAMESHARING: return hleLogError(SCEUTILITY, -1, "unimplemented"); case UtilityDialogType::GAMEDATAINSTALL: - return hleLogSuccessI(SCEUTILITY, gamedataInstallDialog.FinishShutdown()); + return hleLogSuccessI(SCEUTILITY, gamedataInstallDialog->FinishShutdown()); } return hleLogError(SCEUTILITY, 0, "invalid dialog type?"); } @@ -306,7 +320,7 @@ static int sceUtilitySavedataInitStart(u32 paramAddr) { oldStatus = 100; ActivateDialog(UtilityDialogType::SAVEDATA); - int ret = saveDialog.Init(paramAddr); + int ret = saveDialog->Init(paramAddr); DEBUG_LOG(SCEUTILITY,"%08x=sceUtilitySavedataInitStart(%08x)",ret,paramAddr); return ret; } @@ -316,7 +330,7 @@ static int sceUtilitySavedataShutdownStart() { return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); DeactivateDialog(); - int ret = saveDialog.Shutdown(); + int ret = saveDialog->Shutdown(); hleEatCycles(30000); return hleLogSuccessX(SCEUTILITY, ret); } @@ -328,7 +342,7 @@ static int sceUtilitySavedataGetStatus() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int status = saveDialog.GetStatus(); + int status = saveDialog->GetStatus(); if (oldStatus != status) { oldStatus = status; DEBUG_LOG(SCEUTILITY, "%08x=sceUtilitySavedataGetStatus()", status); @@ -344,7 +358,7 @@ static int sceUtilitySavedataUpdate(int animSpeed) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int result = saveDialog.Update(animSpeed); + int result = saveDialog->Update(animSpeed); DEBUG_LOG(SCEUTILITY,"%08x=sceUtilitySavedataUpdate(%i)", result, animSpeed); if (result >= 0) return hleDelayResult(result, "savedata update", 300); @@ -442,7 +456,7 @@ static int sceUtilityMsgDialogInitStart(u32 paramAddr) { oldStatus = 100; ActivateDialog(UtilityDialogType::MSG); - int ret = msgDialog.Init(paramAddr); + int ret = msgDialog->Init(paramAddr); INFO_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogInitStart(%08x)", ret, paramAddr); return ret; } @@ -454,7 +468,7 @@ static int sceUtilityMsgDialogShutdownStart() { } DeactivateDialog(); - int ret = msgDialog.Shutdown(); + int ret = msgDialog->Shutdown(); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogShutdownStart()", ret); return ret; } @@ -465,7 +479,7 @@ static int sceUtilityMsgDialogUpdate(int animSpeed) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = msgDialog.Update(animSpeed); + int ret = msgDialog->Update(animSpeed); DEBUG_LOG(SCEUTILITY,"%08x=sceUtilityMsgDialogUpdate(%i)", ret, animSpeed); if (ret >= 0) return hleDelayResult(ret, "msgdialog update", 800); @@ -478,7 +492,7 @@ static int sceUtilityMsgDialogGetStatus() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int status = msgDialog.GetStatus(); + int status = msgDialog->GetStatus(); if (oldStatus != status) { oldStatus = status; DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogGetStatus()", status); @@ -493,7 +507,7 @@ static int sceUtilityMsgDialogAbort() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = msgDialog.Abort(); + int ret = msgDialog->Abort(); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogAbort()", ret); return ret; } @@ -508,7 +522,7 @@ static int sceUtilityOskInitStart(u32 oskPtr) { oldStatus = 100; ActivateDialog(UtilityDialogType::OSK); - int ret = oskDialog.Init(oskPtr); + int ret = oskDialog->Init(oskPtr); INFO_LOG(SCEUTILITY, "%08x=sceUtilityOskInitStart(%08x)", ret, oskPtr); return ret; } @@ -521,7 +535,7 @@ static int sceUtilityOskShutdownStart() { } DeactivateDialog(); - int ret = oskDialog.Shutdown(); + int ret = oskDialog->Shutdown(); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskShutdownStart()",ret); return ret; } @@ -532,7 +546,7 @@ static int sceUtilityOskUpdate(int animSpeed) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = oskDialog.Update(animSpeed); + int ret = oskDialog->Update(animSpeed); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskUpdate(%i)", ret, animSpeed); return ret; } @@ -543,7 +557,7 @@ static int sceUtilityOskGetStatus() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int status = oskDialog.GetStatus(); + int status = oskDialog->GetStatus(); if (oldStatus != status) { oldStatus = status; DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskGetStatus()", status); @@ -560,7 +574,7 @@ static int sceUtilityNetconfInitStart(u32 paramsAddr) { oldStatus = 100; ActivateDialog(UtilityDialogType::NET); - return hleLogSuccessInfoI(SCEUTILITY, netDialog.Init(paramsAddr)); + return hleLogSuccessInfoI(SCEUTILITY, netDialog->Init(paramsAddr)); } static int sceUtilityNetconfShutdownStart() { @@ -569,7 +583,7 @@ static int sceUtilityNetconfShutdownStart() { } DeactivateDialog(); - return hleLogSuccessI(SCEUTILITY, netDialog.Shutdown()); + return hleLogSuccessI(SCEUTILITY, netDialog->Shutdown()); } static int sceUtilityNetconfUpdate(int animSpeed) { @@ -577,7 +591,7 @@ static int sceUtilityNetconfUpdate(int animSpeed) { return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - return hleLogSuccessI(SCEUTILITY, netDialog.Update(animSpeed)); + return hleLogSuccessI(SCEUTILITY, netDialog->Update(animSpeed)); } static int sceUtilityNetconfGetStatus() { @@ -586,7 +600,7 @@ static int sceUtilityNetconfGetStatus() { return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int status = netDialog.GetStatus(); + int status = netDialog->GetStatus(); if (oldStatus != status) { oldStatus = status; return hleLogSuccessI(SCEUTILITY, status); @@ -614,7 +628,7 @@ static int sceUtilityScreenshotInitStart(u32 paramAddr) { oldStatus = 100; ActivateDialog(UtilityDialogType::SCREENSHOT); - u32 retval = screenshotDialog.Init(paramAddr); + u32 retval = screenshotDialog->Init(paramAddr); WARN_LOG_REPORT(SCEUTILITY, "%08x=sceUtilityScreenshotInitStart(%08x)", retval, paramAddr); return retval; } @@ -626,7 +640,7 @@ static int sceUtilityScreenshotShutdownStart() { } DeactivateDialog(); - int ret = screenshotDialog.Shutdown(); + int ret = screenshotDialog->Shutdown(); WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotShutdownStart()", ret); return ret; } @@ -637,7 +651,7 @@ static int sceUtilityScreenshotUpdate(u32 animSpeed) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = screenshotDialog.Update(animSpeed); + int ret = screenshotDialog->Update(animSpeed); WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotUpdate(%i)", ret, animSpeed); return ret; } @@ -648,7 +662,7 @@ static int sceUtilityScreenshotGetStatus() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int status = screenshotDialog.GetStatus(); + int status = screenshotDialog->GetStatus(); if (oldStatus != status) { oldStatus = status; WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotGetStatus()", status); @@ -663,7 +677,7 @@ static int sceUtilityScreenshotContStart(u32 paramAddr) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = screenshotDialog.ContStart(); + int ret = screenshotDialog->ContStart(); WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotContStart(%08x)", ret, paramAddr); return ret; } @@ -675,7 +689,7 @@ static int sceUtilityGamedataInstallInitStart(u32 paramsAddr) { } ActivateDialog(UtilityDialogType::GAMEDATAINSTALL); - int ret = gamedataInstallDialog.Init(paramsAddr); + int ret = gamedataInstallDialog->Init(paramsAddr); INFO_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallInitStart(%08x)",ret,paramsAddr); return ret; } @@ -688,7 +702,7 @@ static int sceUtilityGamedataInstallShutdownStart() { DeactivateDialog(); DEBUG_LOG(SCEUTILITY, "sceUtilityGamedataInstallShutdownStart()"); - return gamedataInstallDialog.Shutdown(); + return gamedataInstallDialog->Shutdown(); } static int sceUtilityGamedataInstallUpdate(int animSpeed) { @@ -697,7 +711,7 @@ static int sceUtilityGamedataInstallUpdate(int animSpeed) { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int ret = gamedataInstallDialog.Update(animSpeed); + int ret = gamedataInstallDialog->Update(animSpeed); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallUpdate(%i)", ret, animSpeed); return ret; } @@ -709,7 +723,7 @@ static int sceUtilityGamedataInstallGetStatus() { return SCE_ERROR_UTILITY_WRONG_TYPE; } - int status = gamedataInstallDialog.GetStatus(); + int status = gamedataInstallDialog->GetStatus(); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallGetStatus()", status); CleanupDialogThreads(); return status; @@ -722,7 +736,7 @@ static int sceUtilityGamedataInstallAbort() { } DeactivateDialog(); - int ret = gamedataInstallDialog.Abort(); + int ret = gamedataInstallDialog->Abort(); DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallDialogAbort",ret); return ret; } From 4200021a95c38fc8a621c1af336d078368a1ffc7 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 6 Apr 2021 22:18:28 -0700 Subject: [PATCH 2/3] Utility: Update logging to new syntax for dialogs. --- Core/HLE/sceUtility.cpp | 167 ++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 111 deletions(-) diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 1814cbff5b..6f37c50ad4 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -313,16 +313,13 @@ static int sceUtilitySavedataInitStart(u32 paramAddr) { if (PSP_CoreParameter().compat.flags().YugiohSaveFix) { WARN_LOG(SCEUTILITY, "Yugioh Savedata Correction"); } else { - WARN_LOG(SCEUTILITY, "sceUtilitySavedataInitStart(%08x): wrong dialog type", paramAddr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } } oldStatus = 100; ActivateDialog(UtilityDialogType::SAVEDATA); - int ret = saveDialog->Init(paramAddr); - DEBUG_LOG(SCEUTILITY,"%08x=sceUtilitySavedataInitStart(%08x)",ret,paramAddr); - return ret; + return hleLogSuccessX(SCEUTILITY, saveDialog->Init(paramAddr)); } static int sceUtilitySavedataShutdownStart() { @@ -337,29 +334,26 @@ static int sceUtilitySavedataShutdownStart() { static int sceUtilitySavedataGetStatus() { if (currentDialogType != UtilityDialogType::SAVEDATA) { - DEBUG_LOG(SCEUTILITY, "sceUtilitySavedataGetStatus(): wrong dialog type"); hleEatCycles(200); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } int status = saveDialog->GetStatus(); - if (oldStatus != status) { - oldStatus = status; - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilitySavedataGetStatus()", status); - } hleEatCycles(200); CleanupDialogThreads(); - return status; + if (oldStatus != status) { + oldStatus = status; + return hleLogSuccessI(SCEUTILITY, status); + } + return hleLogSuccessVerboseI(SCEUTILITY, status); } static int sceUtilitySavedataUpdate(int animSpeed) { if (currentDialogType != UtilityDialogType::SAVEDATA) { - WARN_LOG(SCEUTILITY, "sceUtilitySavedataUpdate(%i): wrong dialog type", animSpeed); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int result = saveDialog->Update(animSpeed); - DEBUG_LOG(SCEUTILITY,"%08x=sceUtilitySavedataUpdate(%i)", result, animSpeed); + int result = hleLogSuccessI(SCEUTILITY, saveDialog->Update(animSpeed)); if (result >= 0) return hleDelayResult(result, "savedata update", 300); return result; @@ -450,37 +444,29 @@ static u32 sceUtilityUnloadModule(u32 module) { static int sceUtilityMsgDialogInitStart(u32 paramAddr) { if (currentDialogActive && currentDialogType != UtilityDialogType::MSG) { - WARN_LOG(SCEUTILITY, "sceUtilityMsgDialogInitStart(%08x): wrong dialog type", paramAddr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } oldStatus = 100; ActivateDialog(UtilityDialogType::MSG); - int ret = msgDialog->Init(paramAddr); - INFO_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogInitStart(%08x)", ret, paramAddr); - return ret; + return hleLogSuccessInfoX(SCEUTILITY, msgDialog->Init(paramAddr)); } static int sceUtilityMsgDialogShutdownStart() { if (currentDialogType != UtilityDialogType::MSG) { - WARN_LOG(SCEUTILITY, "sceUtilityMsgDialogShutdownStart(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } DeactivateDialog(); - int ret = msgDialog->Shutdown(); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogShutdownStart()", ret); - return ret; + return hleLogSuccessX(SCEUTILITY, msgDialog->Shutdown()); } static int sceUtilityMsgDialogUpdate(int animSpeed) { if (currentDialogType != UtilityDialogType::MSG) { - WARN_LOG(SCEUTILITY, "sceUtilityMsgDialogUpdate(%i): wrong dialog type", animSpeed); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = msgDialog->Update(animSpeed); - DEBUG_LOG(SCEUTILITY,"%08x=sceUtilityMsgDialogUpdate(%i)", ret, animSpeed); + int ret = hleLogSuccessX(SCEUTILITY, msgDialog->Update(animSpeed)); if (ret >= 0) return hleDelayResult(ret, "msgdialog update", 800); return ret; @@ -488,82 +474,67 @@ static int sceUtilityMsgDialogUpdate(int animSpeed) { static int sceUtilityMsgDialogGetStatus() { if (currentDialogType != UtilityDialogType::MSG) { - DEBUG_LOG(SCEUTILITY, "sceUtilityMsgDialogGetStatus(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } int status = msgDialog->GetStatus(); + CleanupDialogThreads(); if (oldStatus != status) { oldStatus = status; - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogGetStatus()", status); + return hleLogSuccessI(SCEUTILITY, status); } - CleanupDialogThreads(); - return status; + return hleLogSuccessVerboseI(SCEUTILITY, status); } static int sceUtilityMsgDialogAbort() { if (currentDialogType != UtilityDialogType::MSG) { - WARN_LOG(SCEUTILITY, "sceUtilityMsgDialogAbort(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = msgDialog->Abort(); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityMsgDialogAbort()", ret); - return ret; + return hleLogSuccessX(SCEUTILITY, msgDialog->Abort()); } // On screen keyboard static int sceUtilityOskInitStart(u32 oskPtr) { if (currentDialogActive && currentDialogType != UtilityDialogType::OSK) { - WARN_LOG(SCEUTILITY, "sceUtilityOskInitStart(%08x): wrong dialog type", oskPtr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } oldStatus = 100; ActivateDialog(UtilityDialogType::OSK); - int ret = oskDialog->Init(oskPtr); - INFO_LOG(SCEUTILITY, "%08x=sceUtilityOskInitStart(%08x)", ret, oskPtr); - return ret; + return hleLogSuccessInfoX(SCEUTILITY, oskDialog->Init(oskPtr)); } static int sceUtilityOskShutdownStart() { - if (currentDialogType != UtilityDialogType::OSK) - { - WARN_LOG(SCEUTILITY, "sceUtilityOskShutdownStart(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + if (currentDialogType != UtilityDialogType::OSK) { + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } DeactivateDialog(); - int ret = oskDialog->Shutdown(); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskShutdownStart()",ret); - return ret; + return hleLogSuccessX(SCEUTILITY, oskDialog->Shutdown()); } static int sceUtilityOskUpdate(int animSpeed) { if (currentDialogType != UtilityDialogType::OSK) { - WARN_LOG(SCEUTILITY, "sceUtilityOskUpdate(%i): wrong dialog type", animSpeed); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = oskDialog->Update(animSpeed); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskUpdate(%i)", ret, animSpeed); - return ret; + return hleLogSuccessX(SCEUTILITY, oskDialog->Update(animSpeed)); } static int sceUtilityOskGetStatus() { if (currentDialogType != UtilityDialogType::OSK) { - DEBUG_LOG(SCEUTILITY, "sceUtilityOskGetStatus(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } int status = oskDialog->GetStatus(); + CleanupDialogThreads(); if (oldStatus != status) { oldStatus = status; - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityOskGetStatus()", status); + return hleLogSuccessI(SCEUTILITY, status); } - CleanupDialogThreads(); - return status; + return hleLogSuccessVerboseI(SCEUTILITY, status); } @@ -601,11 +572,11 @@ static int sceUtilityNetconfGetStatus() { } int status = netDialog->GetStatus(); + CleanupDialogThreads(); if (oldStatus != status) { oldStatus = status; return hleLogSuccessI(SCEUTILITY, status); } - CleanupDialogThreads(); return hleLogSuccessVerboseI(SCEUTILITY, status); } @@ -622,123 +593,97 @@ static int sceUtilityCheckNetParam(int id) //but it requires more investigation static int sceUtilityScreenshotInitStart(u32 paramAddr) { if (currentDialogActive && currentDialogType != UtilityDialogType::SCREENSHOT) { - WARN_LOG(SCEUTILITY, "sceUtilityScreenshotInitStart(%08x): wrong dialog type", paramAddr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } oldStatus = 100; ActivateDialog(UtilityDialogType::SCREENSHOT); - u32 retval = screenshotDialog->Init(paramAddr); - WARN_LOG_REPORT(SCEUTILITY, "%08x=sceUtilityScreenshotInitStart(%08x)", retval, paramAddr); - return retval; + return hleReportWarning(SCEUTILITY, screenshotDialog->Init(paramAddr)); } static int sceUtilityScreenshotShutdownStart() { if (currentDialogType != UtilityDialogType::SCREENSHOT) { - WARN_LOG(SCEUTILITY, "sceUtilityScreenshotShutdownStart(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } DeactivateDialog(); - int ret = screenshotDialog->Shutdown(); - WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotShutdownStart()", ret); - return ret; + return hleLogWarning(SCEUTILITY, screenshotDialog->Shutdown()); } static int sceUtilityScreenshotUpdate(u32 animSpeed) { if (currentDialogType != UtilityDialogType::SCREENSHOT) { - WARN_LOG(SCEUTILITY, "sceUtilityScreenshotUpdate(%i): wrong dialog type", animSpeed); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = screenshotDialog->Update(animSpeed); - WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotUpdate(%i)", ret, animSpeed); - return ret; + return hleLogWarning(SCEUTILITY, screenshotDialog->Update(animSpeed)); } static int sceUtilityScreenshotGetStatus() { if (currentDialogType != UtilityDialogType::SCREENSHOT) { - DEBUG_LOG(SCEUTILITY, "sceUtilityScreenshotGetStatus(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } int status = screenshotDialog->GetStatus(); + CleanupDialogThreads(); if (oldStatus != status) { oldStatus = status; - WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotGetStatus()", status); + return hleLogWarning(SCEUTILITY, status); } - CleanupDialogThreads(); - return status; + return hleLogSuccessVerboseI(SCEUTILITY, status); } static int sceUtilityScreenshotContStart(u32 paramAddr) { if (currentDialogType != UtilityDialogType::SCREENSHOT) { - WARN_LOG(SCEUTILITY, "sceUtilityScreenshotContStart(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = screenshotDialog->ContStart(); - WARN_LOG(SCEUTILITY, "%08x=sceUtilityScreenshotContStart(%08x)", ret, paramAddr); - return ret; + return hleLogWarning(SCEUTILITY, screenshotDialog->ContStart()); } static int sceUtilityGamedataInstallInitStart(u32 paramsAddr) { if (currentDialogActive && currentDialogType != UtilityDialogType::GAMEDATAINSTALL) { - WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallInitStart(%08x): wrong dialog type", paramsAddr); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } ActivateDialog(UtilityDialogType::GAMEDATAINSTALL); - int ret = gamedataInstallDialog->Init(paramsAddr); - INFO_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallInitStart(%08x)",ret,paramsAddr); - return ret; + return hleLogSuccessInfoX(SCEUTILITY, gamedataInstallDialog->Init(paramsAddr)); } static int sceUtilityGamedataInstallShutdownStart() { if (currentDialogType != UtilityDialogType::GAMEDATAINSTALL) { - WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallShutdownStart(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } DeactivateDialog(); - DEBUG_LOG(SCEUTILITY, "sceUtilityGamedataInstallShutdownStart()"); - return gamedataInstallDialog->Shutdown(); + return hleLogSuccessX(SCEUTILITY, gamedataInstallDialog->Shutdown()); } static int sceUtilityGamedataInstallUpdate(int animSpeed) { if (currentDialogType != UtilityDialogType::GAMEDATAINSTALL) { - WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallUpdate(%i): wrong dialog type", animSpeed); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } - int ret = gamedataInstallDialog->Update(animSpeed); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallUpdate(%i)", ret, animSpeed); - return ret; + return hleLogSuccessX(SCEUTILITY, gamedataInstallDialog->Update(animSpeed)); } static int sceUtilityGamedataInstallGetStatus() { if (currentDialogType != UtilityDialogType::GAMEDATAINSTALL) { // This is called incorrectly all the time by some games. So let's not bother warning. - // WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallGetStatus(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogDebug(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } int status = gamedataInstallDialog->GetStatus(); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallGetStatus()", status); CleanupDialogThreads(); - return status; + return hleLogSuccessI(SCEUTILITY, status); } static int sceUtilityGamedataInstallAbort() { if (currentDialogType != UtilityDialogType::GAMEDATAINSTALL) { - WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallAbort(): wrong dialog type"); - return SCE_ERROR_UTILITY_WRONG_TYPE; + return hleLogWarning(SCEUTILITY, SCE_ERROR_UTILITY_WRONG_TYPE, "wrong dialog type"); } DeactivateDialog(); - int ret = gamedataInstallDialog->Abort(); - DEBUG_LOG(SCEUTILITY, "%08x=sceUtilityGamedataInstallDialogAbort",ret); - return ret; + return hleLogSuccessX(SCEUTILITY, gamedataInstallDialog->Abort()); } //TODO: should save to config file From 7da25563d30dae3b1c0ac083ed4afe85fa9e2359 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 6 Apr 2021 22:23:17 -0700 Subject: [PATCH 3/3] Utility: Add a helper for the active dialog. --- Core/HLE/sceUtility.cpp | 53 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 6f37c50ad4..82873e4896 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -157,14 +157,32 @@ static void DeactivateDialog() { CleanupDialogThreads(); } +static PSPDialog *CurrentDialog(UtilityDialogType type) { + switch (type) { + case UtilityDialogType::NONE: + break; + case UtilityDialogType::SAVEDATA: + return saveDialog; + case UtilityDialogType::MSG: + return msgDialog; + case UtilityDialogType::OSK: + return oskDialog; + case UtilityDialogType::NET: + return netDialog; + case UtilityDialogType::SCREENSHOT: + return screenshotDialog; + case UtilityDialogType::GAMESHARING: + break; + case UtilityDialogType::GAMEDATAINSTALL: + return gamedataInstallDialog; + } + return nullptr; +} + static void UtilityVolatileUnlock(u64 userdata, int cyclesLate) { - // There can only be one active, so just try each of them. - saveDialog->FinishVolatile(); - msgDialog->FinishVolatile(); - oskDialog->FinishVolatile(); - netDialog->FinishVolatile(); - screenshotDialog->FinishVolatile(); - gamedataInstallDialog->FinishVolatile(); + PSPDialog *dialog = CurrentDialog(currentDialogType); + if (dialog) + dialog->FinishVolatile(); } void __UtilityInit() { @@ -287,24 +305,9 @@ static int UtilityWorkUs(int us) { } static int UtilityFinishDialog(int type) { - switch ((UtilityDialogType)type) { - case UtilityDialogType::NONE: - break; - case UtilityDialogType::SAVEDATA: - return hleLogSuccessI(SCEUTILITY, saveDialog->FinishShutdown()); - case UtilityDialogType::MSG: - return hleLogSuccessI(SCEUTILITY, msgDialog->FinishShutdown()); - case UtilityDialogType::OSK: - return hleLogSuccessI(SCEUTILITY, oskDialog->FinishShutdown()); - case UtilityDialogType::NET: - return hleLogSuccessI(SCEUTILITY, netDialog->FinishShutdown()); - case UtilityDialogType::SCREENSHOT: - return hleLogSuccessI(SCEUTILITY, screenshotDialog->FinishShutdown()); - case UtilityDialogType::GAMESHARING: - return hleLogError(SCEUTILITY, -1, "unimplemented"); - case UtilityDialogType::GAMEDATAINSTALL: - return hleLogSuccessI(SCEUTILITY, gamedataInstallDialog->FinishShutdown()); - } + PSPDialog *dialog = CurrentDialog((UtilityDialogType)type); + if (dialog) + return hleLogSuccessI(SCEUTILITY, dialog->FinishShutdown()); return hleLogError(SCEUTILITY, 0, "invalid dialog type?"); }