mirror of https://github.com/RPCS3/rpcs3.git
cellGame: Enable disc insert/eject based on disc mount state
This commit is contained in:
parent
67853b464c
commit
9e7b759236
|
@ -239,8 +239,15 @@ error_code disc_change_manager::register_callbacks(vm::ptr<CellGameDiscEjectCall
|
|||
eject_callback = func_eject;
|
||||
insert_callback = func_insert;
|
||||
|
||||
Emu.GetCallbacks().enable_disc_eject(!!func_eject);
|
||||
Emu.GetCallbacks().enable_disc_insert(false);
|
||||
const bool is_disc_mounted = fs::is_dir(vfs::get("/dev_bdvd/PS3_GAME"));
|
||||
|
||||
if (state == eject_state::unknown)
|
||||
{
|
||||
state = is_disc_mounted ? eject_state::inserted : eject_state::ejected;
|
||||
}
|
||||
|
||||
Emu.GetCallbacks().enable_disc_eject(!!func_eject && is_disc_mounted);
|
||||
Emu.GetCallbacks().enable_disc_insert(!!func_insert && !is_disc_mounted);
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
@ -300,7 +307,8 @@ void disc_change_manager::eject_disc()
|
|||
ensure(vfs::unmount("/dev_ps2disc"));
|
||||
dcm.state = eject_state::ejected;
|
||||
|
||||
Emu.GetCallbacks().enable_disc_insert(true);
|
||||
// Re-enable disc insertion only if the callback is still registered
|
||||
Emu.GetCallbacks().enable_disc_insert(!!dcm.insert_callback);
|
||||
|
||||
return CELL_OK;
|
||||
});
|
||||
|
|
|
@ -338,11 +338,12 @@ struct disc_change_manager
|
|||
|
||||
enum class eject_state
|
||||
{
|
||||
unknown,
|
||||
inserted,
|
||||
ejected,
|
||||
busy
|
||||
};
|
||||
atomic_t<eject_state> state = eject_state::inserted;
|
||||
atomic_t<eject_state> state = eject_state::unknown;
|
||||
|
||||
error_code register_callbacks(vm::ptr<CellGameDiscEjectCallback> func_eject, vm::ptr<CellGameDiscInsertCallback> func_insert);
|
||||
error_code unregister_callbacks();
|
||||
|
|
Loading…
Reference in New Issue