From e571066409297ebefd8dc3b479b995d4f51ff6ac Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Thu, 29 Sep 2022 20:22:00 +0100 Subject: [PATCH] Stub ldr:ro IRoInterface Some games initialise this service on startup however don't actually use it. Add a simple stub to allow such games to boot. --- app/CMakeLists.txt | 1 + .../cpp/skyline/services/ro/IRoInterface.cpp | 8 ++++++++ .../main/cpp/skyline/services/ro/IRoInterface.h | 17 +++++++++++++++++ .../main/cpp/skyline/services/serviceman.cpp | 2 ++ 4 files changed, 28 insertions(+) create mode 100644 app/src/main/cpp/skyline/services/ro/IRoInterface.cpp create mode 100644 app/src/main/cpp/skyline/services/ro/IRoInterface.h diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index d0aea2af..9c151c13 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -288,6 +288,7 @@ add_library(skyline SHARED ${source_DIR}/skyline/services/bt/IBluetoothUser.cpp ${source_DIR}/skyline/services/btm/IBtmUser.cpp ${source_DIR}/skyline/services/btm/IBtmUserCore.cpp + ${source_DIR}/skyline/services/ro/IRoInterface.cpp ${source_DIR}/skyline/applet/applet_creator.cpp ${source_DIR}/skyline/applet/controller_applet.cpp ${source_DIR}/skyline/applet/error_applet.cpp diff --git a/app/src/main/cpp/skyline/services/ro/IRoInterface.cpp b/app/src/main/cpp/skyline/services/ro/IRoInterface.cpp new file mode 100644 index 00000000..2badc12d --- /dev/null +++ b/app/src/main/cpp/skyline/services/ro/IRoInterface.cpp @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#include "IRoInterface.h" + +namespace skyline::service::ro { + IRoInterface::IRoInterface(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {} +} diff --git a/app/src/main/cpp/skyline/services/ro/IRoInterface.h b/app/src/main/cpp/skyline/services/ro/IRoInterface.h new file mode 100644 index 00000000..76618178 --- /dev/null +++ b/app/src/main/cpp/skyline/services/ro/IRoInterface.h @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#pragma once + +#include + +namespace skyline::service::ro { + /** + * @brief IRoInterface or ldr:ro is used by applications to dynamically load nros + * @url https://switchbrew.org/wiki/RO_services#LoadModule + */ + class IRoInterface : public BaseService { + public: + IRoInterface(const DeviceState &state, ServiceManager &manager); + }; +} diff --git a/app/src/main/cpp/skyline/services/serviceman.cpp b/app/src/main/cpp/skyline/services/serviceman.cpp index 96b62e9f..467433f0 100644 --- a/app/src/main/cpp/skyline/services/serviceman.cpp +++ b/app/src/main/cpp/skyline/services/serviceman.cpp @@ -47,6 +47,7 @@ #include "mmnv/IRequest.h" #include "bt/IBluetoothUser.h" #include "btm/IBtmUser.h" +#include "ro/IRoInterface.h" #include "serviceman.h" #define SERVICE_CASE(class, name, ...) \ @@ -121,6 +122,7 @@ namespace skyline::service { SERVICE_CASE(bt::IBluetoothUser, "bt") SERVICE_CASE(btm::IBtmUser, "btm:u") SERVICE_CASE(nim::IShopServiceAccessServerInterface, "nim:eca") + SERVICE_CASE(ro::IRoInterface, "ldr:ro") default: std::string_view nameString(span(reinterpret_cast(&name), sizeof(name)).as_string(true)); throw std::out_of_range(fmt::format("CreateService called with an unknown service name: {}", nameString));