Browse Source

ns: rewrite IReadOnlyApplicationRecordInterface

Liam 2 years ago
parent
commit
786fc512e2

+ 2 - 0
src/core/CMakeLists.txt

@@ -765,6 +765,8 @@ add_library(core STATIC
     hle/service/ns/pdm_qry.h
     hle/service/ns/platform_service_manager.cpp
     hle/service/ns/platform_service_manager.h
+    hle/service/ns/read_only_application_record_interface.cpp
+    hle/service/ns/read_only_application_record_interface.h
     hle/service/nvdrv/core/container.cpp
     hle/service/nvdrv/core/container.h
     hle/service/nvdrv/core/heap_mapper.cpp

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

@@ -24,6 +24,7 @@
 #include "core/hle/service/ns/ns_results.h"
 #include "core/hle/service/ns/pdm_qry.h"
 #include "core/hle/service/ns/platform_service_manager.h"
+#include "core/hle/service/ns/read_only_application_record_interface.h"
 #include "core/hle/service/server_manager.h"
 #include "core/hle/service/set/settings_server.h"
 
@@ -468,40 +469,6 @@ Result IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode(
     return ResultSuccess;
 }
 
-IReadOnlyApplicationRecordInterface::IReadOnlyApplicationRecordInterface(Core::System& system_)
-    : ServiceFramework{system_, "IReadOnlyApplicationRecordInterface"} {
-    static const FunctionInfo functions[] = {
-        {0, &IReadOnlyApplicationRecordInterface::HasApplicationRecord, "HasApplicationRecord"},
-        {1, nullptr, "NotifyApplicationFailure"},
-        {2, &IReadOnlyApplicationRecordInterface::IsDataCorruptedResult, "IsDataCorruptedResult"},
-    };
-    // clang-format on
-
-    RegisterHandlers(functions);
-}
-
-IReadOnlyApplicationRecordInterface::~IReadOnlyApplicationRecordInterface() = default;
-
-void IReadOnlyApplicationRecordInterface::HasApplicationRecord(HLERequestContext& ctx) {
-    IPC::RequestParser rp{ctx};
-    const u64 program_id = rp.PopRaw<u64>();
-    LOG_WARNING(Service_NS, "(STUBBED) called, program_id={:X}", program_id);
-
-    IPC::ResponseBuilder rb{ctx, 3};
-    rb.Push(ResultSuccess);
-    rb.Push<u8>(1);
-}
-
-void IReadOnlyApplicationRecordInterface::IsDataCorruptedResult(HLERequestContext& ctx) {
-    IPC::RequestParser rp{ctx};
-    const auto result = rp.PopRaw<Result>();
-    LOG_WARNING(Service_NS, "(STUBBED) called, result={:#x}", result.GetInnerValue());
-
-    IPC::ResponseBuilder rb{ctx, 3};
-    rb.Push(ResultSuccess);
-    rb.Push<u8>(0);
-}
-
 IReadOnlyApplicationControlDataInterface::IReadOnlyApplicationControlDataInterface(
     Core::System& system_)
     : ServiceFramework{system_, "IReadOnlyApplicationControlDataInterface"} {

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

@@ -32,17 +32,6 @@ private:
     void ConvertApplicationLanguageToLanguageCode(HLERequestContext& ctx);
 };
 
-class IReadOnlyApplicationRecordInterface final
-    : public ServiceFramework<IReadOnlyApplicationRecordInterface> {
-public:
-    explicit IReadOnlyApplicationRecordInterface(Core::System& system_);
-    ~IReadOnlyApplicationRecordInterface() override;
-
-private:
-    void HasApplicationRecord(HLERequestContext& ctx);
-    void IsDataCorruptedResult(HLERequestContext& ctx);
-};
-
 class IReadOnlyApplicationControlDataInterface final
     : public ServiceFramework<IReadOnlyApplicationControlDataInterface> {
 public:

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

@@ -0,0 +1,38 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/cmif_serialization.h"
+#include "core/hle/service/ns/read_only_application_record_interface.h"
+
+namespace Service::NS {
+
+IReadOnlyApplicationRecordInterface::IReadOnlyApplicationRecordInterface(Core::System& system_)
+    : ServiceFramework{system_, "IReadOnlyApplicationRecordInterface"} {
+    static const FunctionInfo functions[] = {
+        {0, D<&IReadOnlyApplicationRecordInterface::HasApplicationRecord>, "HasApplicationRecord"},
+        {1, nullptr, "NotifyApplicationFailure"},
+        {2, D<&IReadOnlyApplicationRecordInterface::IsDataCorruptedResult>,
+         "IsDataCorruptedResult"},
+    };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+IReadOnlyApplicationRecordInterface::~IReadOnlyApplicationRecordInterface() = default;
+
+Result IReadOnlyApplicationRecordInterface::HasApplicationRecord(
+    Out<bool> out_has_application_record, u64 program_id) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, program_id={:016X}", program_id);
+    *out_has_application_record = true;
+    R_SUCCEED();
+}
+
+Result IReadOnlyApplicationRecordInterface::IsDataCorruptedResult(
+    Out<bool> out_is_data_corrupted_result, Result result) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, result={:#x}", result.GetInnerValue());
+    *out_is_data_corrupted_result = false;
+    R_SUCCEED();
+}
+
+} // namespace Service::NS

+ 22 - 0
src/core/hle/service/ns/read_only_application_record_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/service.h"
+
+namespace Service::NS {
+
+class IReadOnlyApplicationRecordInterface final
+    : public ServiceFramework<IReadOnlyApplicationRecordInterface> {
+public:
+    explicit IReadOnlyApplicationRecordInterface(Core::System& system_);
+    ~IReadOnlyApplicationRecordInterface() override;
+
+private:
+    Result HasApplicationRecord(Out<bool> out_has_application_record, u64 program_id);
+    Result IsDataCorruptedResult(Out<bool> out_is_data_corrupted_result, Result result);
+};
+
+} // namespace Service::NS