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;
|
eject_callback = func_eject;
|
||||||
insert_callback = func_insert;
|
insert_callback = func_insert;
|
||||||
|
|
||||||
Emu.GetCallbacks().enable_disc_eject(!!func_eject);
|
const bool is_disc_mounted = fs::is_dir(vfs::get("/dev_bdvd/PS3_GAME"));
|
||||||
Emu.GetCallbacks().enable_disc_insert(false);
|
|
||||||
|
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;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
@ -300,7 +307,8 @@ void disc_change_manager::eject_disc()
|
||||||
ensure(vfs::unmount("/dev_ps2disc"));
|
ensure(vfs::unmount("/dev_ps2disc"));
|
||||||
dcm.state = eject_state::ejected;
|
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;
|
return CELL_OK;
|
||||||
});
|
});
|
||||||
|
|
|
@ -338,11 +338,12 @@ struct disc_change_manager
|
||||||
|
|
||||||
enum class eject_state
|
enum class eject_state
|
||||||
{
|
{
|
||||||
|
unknown,
|
||||||
inserted,
|
inserted,
|
||||||
ejected,
|
ejected,
|
||||||
busy
|
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 register_callbacks(vm::ptr<CellGameDiscEjectCallback> func_eject, vm::ptr<CellGameDiscInsertCallback> func_insert);
|
||||||
error_code unregister_callbacks();
|
error_code unregister_callbacks();
|
||||||
|
|
Loading…
Reference in New Issue