mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	ns: rewrite IReadOnlyApplicationRecordInterface
This commit is contained in:
		@@ -765,6 +765,8 @@ add_library(core STATIC
 | 
				
			|||||||
    hle/service/ns/pdm_qry.h
 | 
					    hle/service/ns/pdm_qry.h
 | 
				
			||||||
    hle/service/ns/platform_service_manager.cpp
 | 
					    hle/service/ns/platform_service_manager.cpp
 | 
				
			||||||
    hle/service/ns/platform_service_manager.h
 | 
					    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.cpp
 | 
				
			||||||
    hle/service/nvdrv/core/container.h
 | 
					    hle/service/nvdrv/core/container.h
 | 
				
			||||||
    hle/service/nvdrv/core/heap_mapper.cpp
 | 
					    hle/service/nvdrv/core/heap_mapper.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
#include "core/hle/service/ns/ns_results.h"
 | 
					#include "core/hle/service/ns/ns_results.h"
 | 
				
			||||||
#include "core/hle/service/ns/pdm_qry.h"
 | 
					#include "core/hle/service/ns/pdm_qry.h"
 | 
				
			||||||
#include "core/hle/service/ns/platform_service_manager.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/server_manager.h"
 | 
				
			||||||
#include "core/hle/service/set/settings_server.h"
 | 
					#include "core/hle/service/set/settings_server.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -468,40 +469,6 @@ Result IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode(
 | 
				
			|||||||
    return ResultSuccess;
 | 
					    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(
 | 
					IReadOnlyApplicationControlDataInterface::IReadOnlyApplicationControlDataInterface(
 | 
				
			||||||
    Core::System& system_)
 | 
					    Core::System& system_)
 | 
				
			||||||
    : ServiceFramework{system_, "IReadOnlyApplicationControlDataInterface"} {
 | 
					    : ServiceFramework{system_, "IReadOnlyApplicationControlDataInterface"} {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,17 +32,6 @@ private:
 | 
				
			|||||||
    void ConvertApplicationLanguageToLanguageCode(HLERequestContext& ctx);
 | 
					    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
 | 
					class IReadOnlyApplicationControlDataInterface final
 | 
				
			||||||
    : public ServiceFramework<IReadOnlyApplicationControlDataInterface> {
 | 
					    : public ServiceFramework<IReadOnlyApplicationControlDataInterface> {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
@@ -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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user