From 85ed42a1d28daf30d8115e5e9bd1b5230ec25e00 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 25 Jul 2018 17:07:32 -0400 Subject: service/nifm: Deduplicate interface code Rather than having the same code for each nifm service variant, we can centralize it on one class and get rid of a bit of extra code. --- src/core/hle/service/nifm/nifm.cpp | 47 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 21 deletions(-) (limited to 'src/core/hle/service/nifm/nifm.cpp') diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index 0d951084b..cfe8d9178 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp @@ -5,9 +5,7 @@ #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/service/nifm/nifm.h" -#include "core/hle/service/nifm/nifm_a.h" -#include "core/hle/service/nifm/nifm_s.h" -#include "core/hle/service/nifm/nifm_u.h" +#include "core/hle/service/service.h" namespace Service::NIFM { @@ -210,28 +208,35 @@ IGeneralService::IGeneralService() : ServiceFramework("IGeneralService") { RegisterHandlers(functions); } -void Module::Interface::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(RESULT_SUCCESS); - rb.PushIpcInterface(); - LOG_DEBUG(Service_NIFM, "called"); -} +class NetworkInterface final : public ServiceFramework { +public: + explicit NetworkInterface(const char* name) : ServiceFramework{name} { + static const FunctionInfo functions[] = { + {4, &NetworkInterface::CreateGeneralServiceOld, "CreateGeneralServiceOld"}, + {5, &NetworkInterface::CreateGeneralService, "CreateGeneralService"}, + }; + RegisterHandlers(functions); + } -void Module::Interface::CreateGeneralService(Kernel::HLERequestContext& ctx) { - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(RESULT_SUCCESS); - rb.PushIpcInterface(); - LOG_DEBUG(Service_NIFM, "called"); -} + void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(RESULT_SUCCESS); + rb.PushIpcInterface(); + LOG_DEBUG(Service_NIFM, "called"); + } -Module::Interface::Interface(std::shared_ptr module, const char* name) - : ServiceFramework(name), module(std::move(module)) {} + void CreateGeneralService(Kernel::HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(RESULT_SUCCESS); + rb.PushIpcInterface(); + LOG_DEBUG(Service_NIFM, "called"); + } +}; void InstallInterfaces(SM::ServiceManager& service_manager) { - auto module = std::make_shared(); - std::make_shared(module)->InstallAsService(service_manager); - std::make_shared(module)->InstallAsService(service_manager); - std::make_shared(module)->InstallAsService(service_manager); + std::make_shared("nifm:a")->InstallAsService(service_manager); + std::make_shared("nifm:s")->InstallAsService(service_manager); + std::make_shared("nifm:u")->InstallAsService(service_manager); } } // namespace Service::NIFM -- cgit v1.2.3