// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "core/hle/service/service.h" namespace Core { class System; } namespace Service { namespace FileSystem { class FileSystemController; } // namespace FileSystem namespace NS { class IAccountProxyInterface final : public ServiceFramework { public: explicit IAccountProxyInterface(Core::System& system_); ~IAccountProxyInterface() override; }; class IApplicationManagerInterface final : public ServiceFramework { public: explicit IApplicationManagerInterface(Core::System& system_); ~IApplicationManagerInterface() override; ResultVal GetApplicationDesiredLanguage(u32 supported_languages); ResultVal ConvertApplicationLanguageToLanguageCode(u8 application_language); private: void GetApplicationControlData(Kernel::HLERequestContext& ctx); void GetApplicationDesiredLanguage(Kernel::HLERequestContext& ctx); void ConvertApplicationLanguageToLanguageCode(Kernel::HLERequestContext& ctx); }; class IApplicationVersionInterface final : public ServiceFramework { public: explicit IApplicationVersionInterface(Core::System& system_); ~IApplicationVersionInterface() override; }; class IContentManagementInterface final : public ServiceFramework { public: explicit IContentManagementInterface(Core::System& system_); ~IContentManagementInterface() override; }; class IDocumentInterface final : public ServiceFramework { public: explicit IDocumentInterface(Core::System& system_); ~IDocumentInterface() override; }; class IDownloadTaskInterface final : public ServiceFramework { public: explicit IDownloadTaskInterface(Core::System& system_); ~IDownloadTaskInterface() override; }; class IECommerceInterface final : public ServiceFramework { public: explicit IECommerceInterface(Core::System& system_); ~IECommerceInterface() override; }; class IFactoryResetInterface final : public ServiceFramework { public: explicit IFactoryResetInterface(Core::System& system_); ~IFactoryResetInterface() override; }; class IReadOnlyApplicationControlDataInterface final : public ServiceFramework { public: explicit IReadOnlyApplicationControlDataInterface(Core::System& system_); ~IReadOnlyApplicationControlDataInterface() override; private: void GetApplicationControlData(Kernel::HLERequestContext& ctx); }; class NS final : public ServiceFramework { public: explicit NS(const char* name, Core::System& system_); ~NS() override; std::shared_ptr GetApplicationManagerInterface() const; private: template void PushInterface(Kernel::HLERequestContext& ctx) { LOG_DEBUG(Service_NS, "called"); IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); rb.PushIpcInterface(system); } void PushIApplicationManagerInterface(Kernel::HLERequestContext& ctx) { LOG_DEBUG(Service_NS, "called"); IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); rb.PushIpcInterface(system); } template std::shared_ptr GetInterface(Args&&... args) const { static_assert(std::is_base_of_v, "Not a base of ServiceFrameworkBase"); return std::make_shared(std::forward(args)...); } }; /// Registers all NS services with the specified service manager. void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system); } // namespace NS } // namespace Service