trophyfix
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "Emu/IdManager.h"
|
#include "Emu/IdManager.h"
|
||||||
#include "Emu/Cell/PPUModule.h"
|
#include "Emu/Cell/PPUModule.h"
|
||||||
|
#include "Emu/Cell/lv2/sys_sync.h"
|
||||||
|
|
||||||
#include "cellSysutil.h"
|
#include "cellSysutil.h"
|
||||||
|
|
||||||
@@ -46,6 +47,22 @@ extern void sysutil_register_cb(std::function<s32(ppu_thread&)>&& cb)
|
|||||||
cbm->registered.push(std::move(cb));
|
cbm->registered.push(std::move(cb));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern s32 sysutil_register_cb_wait(ppu_thread& caller, std::function<s32(ppu_thread&)>&& cb) {
|
||||||
|
atomic_t<bool> wait{true};
|
||||||
|
u32 rtn = -1;
|
||||||
|
|
||||||
|
sysutil_register_cb([&](ppu_thread& ppu) -> s32 {
|
||||||
|
rtn = cb(ppu);
|
||||||
|
wait = false;
|
||||||
|
caller.notify();
|
||||||
|
return CELL_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
lv2_obj::sleep(caller);
|
||||||
|
while (wait && !Emu.IsStopped()) thread_ctrl::wait();
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
extern void sysutil_send_system_cmd(u64 status, u64 param)
|
extern void sysutil_send_system_cmd(u64 status, u64 param)
|
||||||
{
|
{
|
||||||
if (const auto cbm = fxm::get<sysutil_cb_manager>())
|
if (const auto cbm = fxm::get<sysutil_cb_manager>())
|
||||||
|
|||||||
@@ -199,3 +199,4 @@ struct CellSysCacheParam
|
|||||||
|
|
||||||
extern void sysutil_register_cb(std::function<s32(ppu_thread&)>&&);
|
extern void sysutil_register_cb(std::function<s32(ppu_thread&)>&&);
|
||||||
extern void sysutil_send_system_cmd(u64 status, u64 param);
|
extern void sysutil_send_system_cmd(u64 status, u64 param);
|
||||||
|
extern s32 sysutil_register_cb_wait(ppu_thread&, std::function<s32(ppu_thread&)>&&);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "Emu/IdManager.h"
|
#include "Emu/IdManager.h"
|
||||||
#include "Emu/Cell/PPUModule.h"
|
#include "Emu/Cell/PPUModule.h"
|
||||||
|
#include "Emu/Cell/Modules/cellSysutil.h"
|
||||||
|
|
||||||
#include "restore_new.h"
|
#include "restore_new.h"
|
||||||
#include "Utilities/rXml.h"
|
#include "Utilities/rXml.h"
|
||||||
@@ -315,16 +316,23 @@ error_code sceNpTrophyRegisterContext(ppu_thread& ppu, u32 context, u32 handle,
|
|||||||
tropusr->Load(trophyUsrPath, trophyConfPath);
|
tropusr->Load(trophyUsrPath, trophyConfPath);
|
||||||
ctxt->tropusr.reset(tropusr);
|
ctxt->tropusr.reset(tropusr);
|
||||||
|
|
||||||
// TODO: Callbacks
|
s32 rtn = sysutil_register_cb_wait(ppu, [=](ppu_thread& ppu) -> s32 {
|
||||||
if (statusCb(ppu, context, SCE_NP_TROPHY_STATUS_INSTALLED, 100, 100, arg) < 0)
|
return statusCb(ppu, context, SCE_NP_TROPHY_STATUS_INSTALLED, 100, 100, arg);
|
||||||
{
|
});
|
||||||
return SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (statusCb(ppu, context, SCE_NP_TROPHY_STATUS_PROCESSING_COMPLETE, 100, 100, arg) < 0)
|
if (rtn < 0)
|
||||||
{
|
return SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED;
|
||||||
return SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED;
|
|
||||||
}
|
rtn = sysutil_register_cb_wait(ppu, [=](ppu_thread& ppu) -> s32 {
|
||||||
|
return statusCb(ppu, context, SCE_NP_TROPHY_STATUS_PROCESSING_COMPLETE, 100, 100, arg);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (rtn < 0)
|
||||||
|
return SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED;
|
||||||
|
|
||||||
|
rtn = sysutil_register_cb_wait(ppu, [=](ppu_thread& ppu) -> s32 {
|
||||||
|
return CELL_OK;
|
||||||
|
});
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,6 @@ void msg_dialog_frame::Create(const std::string& msg)
|
|||||||
connect(m_button_ok, &QAbstractButton::clicked, [=]
|
connect(m_button_ok, &QAbstractButton::clicked, [=]
|
||||||
{
|
{
|
||||||
on_close(CELL_MSGDIALOG_BUTTON_OK);
|
on_close(CELL_MSGDIALOG_BUTTON_OK);
|
||||||
m_dialog->accept();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user