Просмотр исходного кода

ns: rewrite IDocumentInterface

Liam 2 лет назад
Родитель
Сommit
bb59940b03

+ 2 - 0
src/core/CMakeLists.txt

@@ -745,6 +745,8 @@ add_library(core STATIC
     hle/service/ns/application_version_interface.h
     hle/service/ns/content_management_interface.cpp
     hle/service/ns/content_management_interface.h
+    hle/service/ns/document_interface.cpp
+    hle/service/ns/document_interface.h
     hle/service/ns/ecommerce_interface.cpp
     hle/service/ns/ecommerce_interface.h
     hle/service/ns/factory_reset_interface.cpp

+ 38 - 0
src/core/hle/service/ns/document_interface.cpp

@@ -0,0 +1,38 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/core.h"
+#include "core/hle/service/cmif_serialization.h"
+#include "core/hle/service/ns/document_interface.h"
+
+namespace Service::NS {
+
+IDocumentInterface::IDocumentInterface(Core::System& system_)
+    : ServiceFramework{system_, "IDocumentInterface"} {
+    // clang-format off
+    static const FunctionInfo functions[] = {
+        {21, nullptr, "GetApplicationContentPath"},
+        {23, D<&IDocumentInterface::ResolveApplicationContentPath>, "ResolveApplicationContentPath"},
+        {92, D<&IDocumentInterface::GetRunningApplicationProgramId>, "GetRunningApplicationProgramId"},
+    };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+IDocumentInterface::~IDocumentInterface() = default;
+
+Result IDocumentInterface::ResolveApplicationContentPath(ContentPath content_path) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, file_system_proxy_type={}, program_id={:016X}",
+                content_path.file_system_proxy_type, content_path.program_id);
+    R_SUCCEED();
+}
+
+Result IDocumentInterface::GetRunningApplicationProgramId(Out<u64> out_program_id,
+                                                          u64 caller_program_id) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, caller_program_id={:016X}", caller_program_id);
+    *out_program_id = system.GetApplicationProcessProgramID();
+    R_SUCCEED();
+}
+
+} // namespace Service::NS

+ 22 - 0
src/core/hle/service/ns/document_interface.h

@@ -0,0 +1,22 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "core/hle/service/cmif_types.h"
+#include "core/hle/service/ns/ns_types.h"
+#include "core/hle/service/service.h"
+
+namespace Service::NS {
+
+class IDocumentInterface final : public ServiceFramework<IDocumentInterface> {
+public:
+    explicit IDocumentInterface(Core::System& system_);
+    ~IDocumentInterface() override;
+
+private:
+    Result ResolveApplicationContentPath(ContentPath content_path);
+    Result GetRunningApplicationProgramId(Out<u64> out_program_id, u64 caller_program_id);
+};
+
+} // namespace Service::NS

+ 1 - 41
src/core/hle/service/ns/ns.cpp

@@ -14,6 +14,7 @@
 #include "core/hle/service/ns/account_proxy_interface.h"
 #include "core/hle/service/ns/application_version_interface.h"
 #include "core/hle/service/ns/content_management_interface.h"
+#include "core/hle/service/ns/document_interface.h"
 #include "core/hle/service/ns/ecommerce_interface.h"
 #include "core/hle/service/ns/factory_reset_interface.h"
 #include "core/hle/service/ns/language.h"
@@ -465,47 +466,6 @@ Result IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode(
     return ResultSuccess;
 }
 
-IDocumentInterface::IDocumentInterface(Core::System& system_)
-    : ServiceFramework{system_, "IDocumentInterface"} {
-    // clang-format off
-    static const FunctionInfo functions[] = {
-        {21, nullptr, "GetApplicationContentPath"},
-        {23, &IDocumentInterface::ResolveApplicationContentPath, "ResolveApplicationContentPath"},
-        {92, &IDocumentInterface::GetRunningApplicationProgramId, "GetRunningApplicationProgramId"},
-    };
-    // clang-format on
-
-    RegisterHandlers(functions);
-}
-
-IDocumentInterface::~IDocumentInterface() = default;
-
-void IDocumentInterface::ResolveApplicationContentPath(HLERequestContext& ctx) {
-    struct ContentPath {
-        u8 file_system_proxy_type;
-        u64 program_id;
-    };
-    static_assert(sizeof(ContentPath) == 0x10, "ContentPath has wrong size");
-
-    IPC::RequestParser rp{ctx};
-    auto content_path = rp.PopRaw<ContentPath>();
-    LOG_WARNING(Service_NS, "(STUBBED) called, file_system_proxy_type={}, program_id={:016X}",
-                content_path.file_system_proxy_type, content_path.program_id);
-
-    IPC::ResponseBuilder rb{ctx, 2};
-    rb.Push(ResultSuccess);
-}
-
-void IDocumentInterface::GetRunningApplicationProgramId(HLERequestContext& ctx) {
-    IPC::RequestParser rp{ctx};
-    const auto caller_program_id = rp.PopRaw<u64>();
-    LOG_WARNING(Service_NS, "(STUBBED) called, caller_program_id={:016X}", caller_program_id);
-
-    IPC::ResponseBuilder rb{ctx, 4};
-    rb.Push(ResultSuccess);
-    rb.Push<u64>(system.GetApplicationProcessProgramID());
-}
-
 IDownloadTaskInterface::IDownloadTaskInterface(Core::System& system_)
     : ServiceFramework{system_, "IDownloadTaskInterface"} {
     // clang-format off

+ 0 - 10
src/core/hle/service/ns/ns.h

@@ -32,16 +32,6 @@ private:
     void ConvertApplicationLanguageToLanguageCode(HLERequestContext& ctx);
 };
 
-class IDocumentInterface final : public ServiceFramework<IDocumentInterface> {
-public:
-    explicit IDocumentInterface(Core::System& system_);
-    ~IDocumentInterface() override;
-
-private:
-    void ResolveApplicationContentPath(HLERequestContext& ctx);
-    void GetRunningApplicationProgramId(HLERequestContext& ctx);
-};
-
 class IDownloadTaskInterface final : public ServiceFramework<IDownloadTaskInterface> {
 public:
     explicit IDownloadTaskInterface(Core::System& system_);

+ 5 - 0
src/core/hle/service/ns/ns_types.h

@@ -73,4 +73,9 @@ struct ApplicationOccupiedSize {
     std::array<ApplicationOccupiedSizeEntity, 4> entities;
 };
 
+struct ContentPath {
+    u8 file_system_proxy_type;
+    u64 program_id;
+};
+
 } // namespace Service::NS