From 9813f9f8dc5558a35360020dc6218fe7ef7769f1 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sat, 9 Apr 2022 12:28:47 +0100 Subject: [PATCH] Implement ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent --- .../services/am/controller/ICommonStateGetter.cpp | 14 +++++++++++++- .../services/am/controller/ICommonStateGetter.h | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.cpp b/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.cpp index 0f5fb82f..aa74a244 100644 --- a/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.cpp +++ b/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.cpp @@ -11,7 +11,10 @@ namespace skyline::service::am { messageEvent->Signal(); } - ICommonStateGetter::ICommonStateGetter(const DeviceState &state, ServiceManager &manager) : messageEvent(std::make_shared(state, false)), BaseService(state, manager) { + ICommonStateGetter::ICommonStateGetter(const DeviceState &state, ServiceManager &manager) + : BaseService(state, manager), + messageEvent(std::make_shared(state, false)), + defaultDisplayResolutionChangeEvent(std::make_shared(state, false)) { operationMode = static_cast(state.settings->operationMode); Logger::Info("Switch to mode: {}", static_cast(operationMode) ? "Docked" : "Handheld"); QueueMessage(Message::FocusStateChange); @@ -72,6 +75,15 @@ namespace skyline::service::am { return {}; } + Result ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + // TODO: Implement properly when we support listeners for settings + auto handle{state.process->InsertItem(defaultDisplayResolutionChangeEvent)}; + Logger::Debug("Default Display Resolution Change Event Handle: 0x{:X}", handle); + + response.copyHandles.push_back(handle); + return {}; + } + Result ICommonStateGetter::SetCpuBoostMode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { cpuBoostMode = request.Pop(); switch (cpuBoostMode) { diff --git a/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.h b/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.h index f82db486..6f5912a5 100644 --- a/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.h +++ b/app/src/main/cpp/skyline/services/am/controller/ICommonStateGetter.h @@ -59,6 +59,8 @@ namespace skyline::service::am { ENUM_CASE_PAIR(PowerSaving, "Power Saving"); }) + std::shared_ptr defaultDisplayResolutionChangeEvent; //!< Signalled when the default display resolution changes, + /** * @brief Queues a message for the application to read via ReceiveMessage * @param message The message to queue @@ -110,6 +112,11 @@ namespace skyline::service::am { */ Result GetDefaultDisplayResolution(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** + * @url https://switchbrew.org/wiki/Applet_Manager_services#GetDefaultDisplayResolutionChangeEvent + */ + Result GetDefaultDisplayResolutionChangeEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** * @brief Sets the CPU boost mode to the supplied value * @url https://switchbrew.org/wiki/Applet_Manager_services#SetCpuBoostMode @@ -124,6 +131,7 @@ namespace skyline::service::am { SFUNC(0x9, ICommonStateGetter, GetCurrentFocusState), SFUNC(0x32, ICommonStateGetter, IsVrModeEnabled), SFUNC(0x3C, ICommonStateGetter, GetDefaultDisplayResolution), + SFUNC(0x3D, ICommonStateGetter, GetDefaultDisplayResolutionChangeEvent), SFUNC(0x42, ICommonStateGetter, SetCpuBoostMode) ) };