mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	ns: rewrite IDocumentInterface
This commit is contained in:
		@@ -745,6 +745,8 @@ add_library(core STATIC
 | 
				
			|||||||
    hle/service/ns/application_version_interface.h
 | 
					    hle/service/ns/application_version_interface.h
 | 
				
			||||||
    hle/service/ns/content_management_interface.cpp
 | 
					    hle/service/ns/content_management_interface.cpp
 | 
				
			||||||
    hle/service/ns/content_management_interface.h
 | 
					    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.cpp
 | 
				
			||||||
    hle/service/ns/ecommerce_interface.h
 | 
					    hle/service/ns/ecommerce_interface.h
 | 
				
			||||||
    hle/service/ns/factory_reset_interface.cpp
 | 
					    hle/service/ns/factory_reset_interface.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								src/core/hle/service/ns/document_interface.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/core/hle/service/ns/document_interface.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -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
									
								
								src/core/hle/service/ns/document_interface.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/core/hle/service/ns/document_interface.h
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
@@ -14,6 +14,7 @@
 | 
				
			|||||||
#include "core/hle/service/ns/account_proxy_interface.h"
 | 
					#include "core/hle/service/ns/account_proxy_interface.h"
 | 
				
			||||||
#include "core/hle/service/ns/application_version_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/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/ecommerce_interface.h"
 | 
				
			||||||
#include "core/hle/service/ns/factory_reset_interface.h"
 | 
					#include "core/hle/service/ns/factory_reset_interface.h"
 | 
				
			||||||
#include "core/hle/service/ns/language.h"
 | 
					#include "core/hle/service/ns/language.h"
 | 
				
			||||||
@@ -465,47 +466,6 @@ Result IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode(
 | 
				
			|||||||
    return ResultSuccess;
 | 
					    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_)
 | 
					IDownloadTaskInterface::IDownloadTaskInterface(Core::System& system_)
 | 
				
			||||||
    : ServiceFramework{system_, "IDownloadTaskInterface"} {
 | 
					    : ServiceFramework{system_, "IDownloadTaskInterface"} {
 | 
				
			||||||
    // clang-format off
 | 
					    // clang-format off
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,16 +32,6 @@ private:
 | 
				
			|||||||
    void ConvertApplicationLanguageToLanguageCode(HLERequestContext& ctx);
 | 
					    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> {
 | 
					class IDownloadTaskInterface final : public ServiceFramework<IDownloadTaskInterface> {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit IDownloadTaskInterface(Core::System& system_);
 | 
					    explicit IDownloadTaskInterface(Core::System& system_);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,4 +73,9 @@ struct ApplicationOccupiedSize {
 | 
				
			|||||||
    std::array<ApplicationOccupiedSizeEntity, 4> entities;
 | 
					    std::array<ApplicationOccupiedSizeEntity, 4> entities;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ContentPath {
 | 
				
			||||||
 | 
					    u8 file_system_proxy_type;
 | 
				
			||||||
 | 
					    u64 program_id;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace Service::NS
 | 
					} // namespace Service::NS
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user