|
@@ -232,12 +232,12 @@ IDebugFunctions::IDebugFunctions() : ServiceFramework{"IDebugFunctions"} {
|
|
|
|
|
|
|
|
IDebugFunctions::~IDebugFunctions() = default;
|
|
IDebugFunctions::~IDebugFunctions() = default;
|
|
|
|
|
|
|
|
-ISelfController::ISelfController(Core::System& system_,
|
|
|
|
|
- std::shared_ptr<NVFlinger::NVFlinger> nvflinger_)
|
|
|
|
|
- : ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger_)) {
|
|
|
|
|
|
|
+ISelfController::ISelfController(Core::System& system,
|
|
|
|
|
+ std::shared_ptr<NVFlinger::NVFlinger> nvflinger)
|
|
|
|
|
+ : ServiceFramework("ISelfController"), system(system), nvflinger(std::move(nvflinger)) {
|
|
|
// clang-format off
|
|
// clang-format off
|
|
|
static const FunctionInfo functions[] = {
|
|
static const FunctionInfo functions[] = {
|
|
|
- {0, nullptr, "Exit"},
|
|
|
|
|
|
|
+ {0, &ISelfController::Exit, "Exit"},
|
|
|
{1, &ISelfController::LockExit, "LockExit"},
|
|
{1, &ISelfController::LockExit, "LockExit"},
|
|
|
{2, &ISelfController::UnlockExit, "UnlockExit"},
|
|
{2, &ISelfController::UnlockExit, "UnlockExit"},
|
|
|
{3, &ISelfController::EnterFatalSection, "EnterFatalSection"},
|
|
{3, &ISelfController::EnterFatalSection, "EnterFatalSection"},
|
|
@@ -282,7 +282,7 @@ ISelfController::ISelfController(Core::System& system_,
|
|
|
|
|
|
|
|
RegisterHandlers(functions);
|
|
RegisterHandlers(functions);
|
|
|
|
|
|
|
|
- auto& kernel = system_.Kernel();
|
|
|
|
|
|
|
+ auto& kernel = system.Kernel();
|
|
|
launchable_event = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Manual,
|
|
launchable_event = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Manual,
|
|
|
"ISelfController:LaunchableEvent");
|
|
"ISelfController:LaunchableEvent");
|
|
|
|
|
|
|
@@ -298,15 +298,28 @@ ISelfController::ISelfController(Core::System& system_,
|
|
|
|
|
|
|
|
ISelfController::~ISelfController() = default;
|
|
ISelfController::~ISelfController() = default;
|
|
|
|
|
|
|
|
|
|
+void ISelfController::Exit(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
+ LOG_DEBUG(Service_AM, "called");
|
|
|
|
|
+
|
|
|
|
|
+ system.Shutdown();
|
|
|
|
|
+
|
|
|
|
|
+ IPC::ResponseBuilder rb{ctx, 2};
|
|
|
|
|
+ rb.Push(RESULT_SUCCESS);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void ISelfController::LockExit(Kernel::HLERequestContext& ctx) {
|
|
void ISelfController::LockExit(Kernel::HLERequestContext& ctx) {
|
|
|
- LOG_WARNING(Service_AM, "(STUBBED) called");
|
|
|
|
|
|
|
+ LOG_DEBUG(Service_AM, "called");
|
|
|
|
|
+
|
|
|
|
|
+ system.SetExitLock(true);
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2};
|
|
IPC::ResponseBuilder rb{ctx, 2};
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void ISelfController::UnlockExit(Kernel::HLERequestContext& ctx) {
|
|
void ISelfController::UnlockExit(Kernel::HLERequestContext& ctx) {
|
|
|
- LOG_WARNING(Service_AM, "(STUBBED) called");
|
|
|
|
|
|
|
+ LOG_DEBUG(Service_AM, "called");
|
|
|
|
|
+
|
|
|
|
|
+ system.SetExitLock(false);
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2};
|
|
IPC::ResponseBuilder rb{ctx, 2};
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
rb.Push(RESULT_SUCCESS);
|
|
@@ -550,6 +563,10 @@ void AppletMessageQueue::OperationModeChanged() {
|
|
|
on_operation_mode_changed.writable->Signal();
|
|
on_operation_mode_changed.writable->Signal();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void AppletMessageQueue::RequestExit() {
|
|
|
|
|
+ PushMessage(AppletMessage::ExitRequested);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
ICommonStateGetter::ICommonStateGetter(Core::System& system,
|
|
ICommonStateGetter::ICommonStateGetter(Core::System& system,
|
|
|
std::shared_ptr<AppletMessageQueue> msg_queue)
|
|
std::shared_ptr<AppletMessageQueue> msg_queue)
|
|
|
: ServiceFramework("ICommonStateGetter"), system(system), msg_queue(std::move(msg_queue)) {
|
|
: ServiceFramework("ICommonStateGetter"), system(system), msg_queue(std::move(msg_queue)) {
|