mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	olsc: rewrite IOlscServiceForSystemService
This commit is contained in:
		@@ -870,6 +870,8 @@ add_library(core STATIC
 | 
			
		||||
    hle/service/olsc/olsc_service_for_system_service.h
 | 
			
		||||
    hle/service/olsc/olsc.cpp
 | 
			
		||||
    hle/service/olsc/olsc.h
 | 
			
		||||
    hle/service/olsc/remote_storage_controller.cpp
 | 
			
		||||
    hle/service/olsc/remote_storage_controller.h
 | 
			
		||||
    hle/service/olsc/transfer_task_list_controller.cpp
 | 
			
		||||
    hle/service/olsc/transfer_task_list_controller.h
 | 
			
		||||
    hle/service/omm/omm.cpp
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/ipc_helpers.h"
 | 
			
		||||
#include "core/hle/service/cmif_serialization.h"
 | 
			
		||||
#include "core/hle/service/olsc/daemon_controller.h"
 | 
			
		||||
#include "core/hle/service/olsc/olsc_service_for_system_service.h"
 | 
			
		||||
#include "core/hle/service/olsc/remote_storage_controller.h"
 | 
			
		||||
#include "core/hle/service/olsc/transfer_task_list_controller.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::OLSC {
 | 
			
		||||
@@ -11,9 +13,9 @@ IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_
 | 
			
		||||
    : ServiceFramework{system_, "olsc:s"} {
 | 
			
		||||
    // clang-format off
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, &IOlscServiceForSystemService::OpenTransferTaskListController, "OpenTransferTaskListController"},
 | 
			
		||||
        {1, nullptr, "OpenRemoteStorageController"},
 | 
			
		||||
        {2, nullptr, "OpenDaemonController"},
 | 
			
		||||
        {0, D<&IOlscServiceForSystemService::OpenTransferTaskListController>, "OpenTransferTaskListController"},
 | 
			
		||||
        {1, D<&IOlscServiceForSystemService::OpenRemoteStorageController>, "OpenRemoteStorageController"},
 | 
			
		||||
        {2, D<&IOlscServiceForSystemService::OpenDaemonController>, "OpenDaemonController"},
 | 
			
		||||
        {10, nullptr, "Unknown10"},
 | 
			
		||||
        {11, nullptr, "Unknown11"},
 | 
			
		||||
        {12, nullptr, "Unknown12"},
 | 
			
		||||
@@ -24,7 +26,7 @@ IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_
 | 
			
		||||
        {103, nullptr, "GetLastErrorInfo"},
 | 
			
		||||
        {104, nullptr, "GetLastErrorEventHolder"},
 | 
			
		||||
        {105, nullptr, "GetLastTransferTaskErrorInfo"},
 | 
			
		||||
        {200, nullptr, "GetDataTransferPolicyInfo"},
 | 
			
		||||
        {200, D<&IOlscServiceForSystemService::GetDataTransferPolicyInfo>, "GetDataTransferPolicyInfo"},
 | 
			
		||||
        {201, nullptr, "RemoveDataTransferPolicyInfo"},
 | 
			
		||||
        {202, nullptr, "UpdateDataTransferPolicyOld"},
 | 
			
		||||
        {203, nullptr, "UpdateDataTransferPolicy"},
 | 
			
		||||
@@ -68,6 +70,7 @@ IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_
 | 
			
		||||
        {1122, nullptr, "RepairIssue2"},
 | 
			
		||||
        {1123, nullptr, "RepairIssue3"},
 | 
			
		||||
        {1124, nullptr, "Unknown1124"},
 | 
			
		||||
        {10000, D<&IOlscServiceForSystemService::CloneService>, "CloneService"},
 | 
			
		||||
    };
 | 
			
		||||
    // clang-format on
 | 
			
		||||
 | 
			
		||||
@@ -76,12 +79,39 @@ IOlscServiceForSystemService::IOlscServiceForSystemService(Core::System& system_
 | 
			
		||||
 | 
			
		||||
IOlscServiceForSystemService::~IOlscServiceForSystemService() = default;
 | 
			
		||||
 | 
			
		||||
void IOlscServiceForSystemService::OpenTransferTaskListController(HLERequestContext& ctx) {
 | 
			
		||||
Result IOlscServiceForSystemService::OpenTransferTaskListController(
 | 
			
		||||
    Out<SharedPointer<ITransferTaskListController>> out_interface) {
 | 
			
		||||
    LOG_INFO(Service_OLSC, "called");
 | 
			
		||||
    *out_interface = std::make_shared<ITransferTaskListController>(system);
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(ResultSuccess);
 | 
			
		||||
    rb.PushIpcInterface<ITransferTaskListController>(system);
 | 
			
		||||
Result IOlscServiceForSystemService::OpenRemoteStorageController(
 | 
			
		||||
    Out<SharedPointer<IRemoteStorageController>> out_interface) {
 | 
			
		||||
    LOG_INFO(Service_OLSC, "called");
 | 
			
		||||
    *out_interface = std::make_shared<IRemoteStorageController>(system);
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Result IOlscServiceForSystemService::OpenDaemonController(
 | 
			
		||||
    Out<SharedPointer<IDaemonController>> out_interface) {
 | 
			
		||||
    LOG_INFO(Service_OLSC, "called");
 | 
			
		||||
    *out_interface = std::make_shared<IDaemonController>(system);
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Result IOlscServiceForSystemService::GetDataTransferPolicyInfo(Out<u16> out_policy_info,
 | 
			
		||||
                                                               u64 application_id) {
 | 
			
		||||
    LOG_WARNING(Service_OLSC, "(STUBBED) called");
 | 
			
		||||
    *out_policy_info = 0;
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Result IOlscServiceForSystemService::CloneService(
 | 
			
		||||
    Out<SharedPointer<IOlscServiceForSystemService>> out_interface) {
 | 
			
		||||
    LOG_INFO(Service_OLSC, "called");
 | 
			
		||||
    *out_interface = std::static_pointer_cast<IOlscServiceForSystemService>(shared_from_this());
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Service::OLSC
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,27 @@
 | 
			
		||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/cmif_types.h"
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::OLSC {
 | 
			
		||||
 | 
			
		||||
class IDaemonController;
 | 
			
		||||
class IRemoteStorageController;
 | 
			
		||||
class ITransferTaskListController;
 | 
			
		||||
 | 
			
		||||
class IOlscServiceForSystemService final : public ServiceFramework<IOlscServiceForSystemService> {
 | 
			
		||||
public:
 | 
			
		||||
    explicit IOlscServiceForSystemService(Core::System& system_);
 | 
			
		||||
    ~IOlscServiceForSystemService() override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void OpenTransferTaskListController(HLERequestContext& ctx);
 | 
			
		||||
    Result OpenTransferTaskListController(
 | 
			
		||||
        Out<SharedPointer<ITransferTaskListController>> out_interface);
 | 
			
		||||
    Result OpenRemoteStorageController(Out<SharedPointer<IRemoteStorageController>> out_interface);
 | 
			
		||||
    Result OpenDaemonController(Out<SharedPointer<IDaemonController>> out_interface);
 | 
			
		||||
    Result GetDataTransferPolicyInfo(Out<u16> out_policy_info, u64 application_id);
 | 
			
		||||
    Result CloneService(Out<SharedPointer<IOlscServiceForSystemService>> out_interface);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::OLSC
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user