From ea8dd8b6505deddf0057203d73c9524b81d7af9f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 27 Jul 2018 14:01:17 -0400 Subject: [PATCH] service/lbl: Implement EnableVrMode, DisableVrMode and GetVrMode Implements these functions according to the information available on Switch Brew. --- src/common/logging/backend.cpp | 1 + src/common/logging/log.h | 1 + src/core/hle/service/lbl/lbl.cpp | 38 +++++++++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index ad9edbcdf0..db3ee08376 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -173,6 +173,7 @@ void FileBackend::Write(const Entry& entry) { SUB(Service, Friend) \ SUB(Service, FS) \ SUB(Service, HID) \ + SUB(Service, LBL) \ SUB(Service, LDN) \ SUB(Service, LM) \ SUB(Service, MM) \ diff --git a/src/common/logging/log.h b/src/common/logging/log.h index ad3cbf5d15..d22cb2966d 100644 --- a/src/common/logging/log.h +++ b/src/common/logging/log.h @@ -60,6 +60,7 @@ enum class Class : ClassType { Service_Friend, ///< The friend service Service_FS, ///< The FS (Filesystem) service Service_HID, ///< The HID (Human interface device) service + Service_LBL, ///< The LBL (LCD backlight) service Service_LDN, ///< The LDN (Local domain network) service Service_LM, ///< The LM (Logger) service Service_MM, ///< The MM (Multimedia) service diff --git a/src/core/hle/service/lbl/lbl.cpp b/src/core/hle/service/lbl/lbl.cpp index 435911b0a4..8fc8b10579 100644 --- a/src/core/hle/service/lbl/lbl.cpp +++ b/src/core/hle/service/lbl/lbl.cpp @@ -4,6 +4,9 @@ #include +#include "common/logging/log.h" +#include "core/hle/ipc_helpers.h" +#include "core/hle/kernel/hle_ipc.h" #include "core/hle/service/lbl/lbl.h" #include "core/hle/service/service.h" #include "core/hle/service/sm/sm.h" @@ -41,14 +44,43 @@ public: {23, nullptr, "Unknown20"}, {24, nullptr, "Unknown21"}, {25, nullptr, "Unknown22"}, - {26, nullptr, "EnableVrMode"}, - {27, nullptr, "DisableVrMode"}, - {28, nullptr, "GetVrMode"}, + {26, &LBL::EnableVrMode, "EnableVrMode"}, + {27, &LBL::DisableVrMode, "DisableVrMode"}, + {28, &LBL::GetVrMode, "GetVrMode"}, }; // clang-format on RegisterHandlers(functions); } + +private: + void EnableVrMode(Kernel::HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(RESULT_SUCCESS); + + vr_mode_enabled = true; + + LOG_DEBUG(Service_LBL, "called"); + } + + void DisableVrMode(Kernel::HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(RESULT_SUCCESS); + + vr_mode_enabled = false; + + LOG_DEBUG(Service_LBL, "called"); + } + + void GetVrMode(Kernel::HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(RESULT_SUCCESS); + rb.Push(vr_mode_enabled); + + LOG_DEBUG(Service_LBL, "called"); + } + + bool vr_mode_enabled = false; }; void InstallInterfaces(SM::ServiceManager& sm) {