ns: rewrite ISystemUpdateInterface
This commit is contained in:
		| @@ -771,6 +771,8 @@ add_library(core STATIC | |||||||
|     hle/service/ns/read_only_application_record_interface.h |     hle/service/ns/read_only_application_record_interface.h | ||||||
|     hle/service/ns/system_update_control.cpp |     hle/service/ns/system_update_control.cpp | ||||||
|     hle/service/ns/system_update_control.h |     hle/service/ns/system_update_control.h | ||||||
|  |     hle/service/ns/system_update_interface.cpp | ||||||
|  |     hle/service/ns/system_update_interface.h | ||||||
|     hle/service/ns/vulnerability_manager_interface.cpp |     hle/service/ns/vulnerability_manager_interface.cpp | ||||||
|     hle/service/ns/vulnerability_manager_interface.h |     hle/service/ns/vulnerability_manager_interface.h | ||||||
|     hle/service/nvdrv/core/container.cpp |     hle/service/nvdrv/core/container.cpp | ||||||
|   | |||||||
| @@ -27,6 +27,7 @@ | |||||||
| #include "core/hle/service/ns/read_only_application_control_data_interface.h" | #include "core/hle/service/ns/read_only_application_control_data_interface.h" | ||||||
| #include "core/hle/service/ns/read_only_application_record_interface.h" | #include "core/hle/service/ns/read_only_application_record_interface.h" | ||||||
| #include "core/hle/service/ns/system_update_control.h" | #include "core/hle/service/ns/system_update_control.h" | ||||||
|  | #include "core/hle/service/ns/system_update_interface.h" | ||||||
| #include "core/hle/service/ns/vulnerability_manager_interface.h" | #include "core/hle/service/ns/vulnerability_manager_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" | ||||||
| @@ -529,44 +530,6 @@ public: | |||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class NS_SU final : public ServiceFramework<NS_SU> { |  | ||||||
| public: |  | ||||||
|     explicit NS_SU(Core::System& system_) : ServiceFramework{system_, "ns:su"} { |  | ||||||
|         // clang-format off |  | ||||||
|         static const FunctionInfo functions[] = { |  | ||||||
|             {0, nullptr, "GetBackgroundNetworkUpdateState"}, |  | ||||||
|             {1, &NS_SU::OpenSystemUpdateControl, "OpenSystemUpdateControl"}, |  | ||||||
|             {2, nullptr, "NotifyExFatDriverRequired"}, |  | ||||||
|             {3, nullptr, "ClearExFatDriverStatusForDebug"}, |  | ||||||
|             {4, nullptr, "RequestBackgroundNetworkUpdate"}, |  | ||||||
|             {5, nullptr, "NotifyBackgroundNetworkUpdate"}, |  | ||||||
|             {6, nullptr, "NotifyExFatDriverDownloadedForDebug"}, |  | ||||||
|             {9, nullptr, "GetSystemUpdateNotificationEventForContentDelivery"}, |  | ||||||
|             {10, nullptr, "NotifySystemUpdateForContentDelivery"}, |  | ||||||
|             {11, nullptr, "PrepareShutdown"}, |  | ||||||
|             {12, nullptr, "Unknown12"}, |  | ||||||
|             {13, nullptr, "Unknown13"}, |  | ||||||
|             {14, nullptr, "Unknown14"}, |  | ||||||
|             {15, nullptr, "Unknown15"}, |  | ||||||
|             {16, nullptr, "DestroySystemUpdateTask"}, |  | ||||||
|             {17, nullptr, "RequestSendSystemUpdate"}, |  | ||||||
|             {18, nullptr, "GetSendSystemUpdateProgress"}, |  | ||||||
|         }; |  | ||||||
|         // clang-format on |  | ||||||
|  |  | ||||||
|         RegisterHandlers(functions); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     void OpenSystemUpdateControl(HLERequestContext& ctx) { |  | ||||||
|         LOG_DEBUG(Service_NS, "called"); |  | ||||||
|  |  | ||||||
|         IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |  | ||||||
|         rb.Push(ResultSuccess); |  | ||||||
|         rb.PushIpcInterface<ISystemUpdateControl>(system); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| void LoopProcess(Core::System& system) { | void LoopProcess(Core::System& system) { | ||||||
|     auto server_manager = std::make_unique<ServerManager>(system); |     auto server_manager = std::make_unique<ServerManager>(system); | ||||||
|  |  | ||||||
| @@ -578,7 +541,7 @@ void LoopProcess(Core::System& system) { | |||||||
|     server_manager->RegisterNamedService("ns:ro", std::make_shared<NS>("ns:ro", system)); |     server_manager->RegisterNamedService("ns:ro", std::make_shared<NS>("ns:ro", system)); | ||||||
|  |  | ||||||
|     server_manager->RegisterNamedService("ns:dev", std::make_shared<NS_DEV>(system)); |     server_manager->RegisterNamedService("ns:dev", std::make_shared<NS_DEV>(system)); | ||||||
|     server_manager->RegisterNamedService("ns:su", std::make_shared<NS_SU>(system)); |     server_manager->RegisterNamedService("ns:su", std::make_shared<ISystemUpdateInterface>(system)); | ||||||
|     server_manager->RegisterNamedService("ns:vm", |     server_manager->RegisterNamedService("ns:vm", | ||||||
|                                          std::make_shared<IVulnerabilityManagerInterface>(system)); |                                          std::make_shared<IVulnerabilityManagerInterface>(system)); | ||||||
|     server_manager->RegisterNamedService("pdm:qry", std::make_shared<PDM_QRY>(system)); |     server_manager->RegisterNamedService("pdm:qry", std::make_shared<PDM_QRY>(system)); | ||||||
|   | |||||||
| @@ -22,6 +22,12 @@ enum class ApplicationControlSource : u8 { | |||||||
|     StorageOnly = 2, |     StorageOnly = 2, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | enum class BackgroundNetworkUpdateState : u8 { | ||||||
|  |     None, | ||||||
|  |     InProgress, | ||||||
|  |     Ready, | ||||||
|  | }; | ||||||
|  |  | ||||||
| struct ApplicationRecord { | struct ApplicationRecord { | ||||||
|     u64 application_id; |     u64 application_id; | ||||||
|     ApplicationRecordType type; |     ApplicationRecordType type; | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								src/core/hle/service/ns/system_update_interface.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								src/core/hle/service/ns/system_update_interface.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | // 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/system_update_control.h" | ||||||
|  | #include "core/hle/service/ns/system_update_interface.h" | ||||||
|  |  | ||||||
|  | namespace Service::NS { | ||||||
|  |  | ||||||
|  | ISystemUpdateInterface::ISystemUpdateInterface(Core::System& system_) | ||||||
|  |     : ServiceFramework{system_, "ns:su"}, service_context{system_, "ns:su"}, | ||||||
|  |       update_notification_event{service_context} { | ||||||
|  |     // clang-format off | ||||||
|  |     static const FunctionInfo functions[] = { | ||||||
|  |         {0, D<&ISystemUpdateInterface::GetBackgroundNetworkUpdateState>, "GetBackgroundNetworkUpdateState"}, | ||||||
|  |         {1, D<&ISystemUpdateInterface::OpenSystemUpdateControl>, "OpenSystemUpdateControl"}, | ||||||
|  |         {2, nullptr, "NotifyExFatDriverRequired"}, | ||||||
|  |         {3, nullptr, "ClearExFatDriverStatusForDebug"}, | ||||||
|  |         {4, nullptr, "RequestBackgroundNetworkUpdate"}, | ||||||
|  |         {5, nullptr, "NotifyBackgroundNetworkUpdate"}, | ||||||
|  |         {6, nullptr, "NotifyExFatDriverDownloadedForDebug"}, | ||||||
|  |         {9, D<&ISystemUpdateInterface::GetSystemUpdateNotificationEventForContentDelivery>, "GetSystemUpdateNotificationEventForContentDelivery"}, | ||||||
|  |         {10, nullptr, "NotifySystemUpdateForContentDelivery"}, | ||||||
|  |         {11, nullptr, "PrepareShutdown"}, | ||||||
|  |         {12, nullptr, "Unknown12"}, | ||||||
|  |         {13, nullptr, "Unknown13"}, | ||||||
|  |         {14, nullptr, "Unknown14"}, | ||||||
|  |         {15, nullptr, "Unknown15"}, | ||||||
|  |         {16, nullptr, "DestroySystemUpdateTask"}, | ||||||
|  |         {17, nullptr, "RequestSendSystemUpdate"}, | ||||||
|  |         {18, nullptr, "GetSendSystemUpdateProgress"}, | ||||||
|  |     }; | ||||||
|  |     // clang-format on | ||||||
|  |  | ||||||
|  |     RegisterHandlers(functions); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ISystemUpdateInterface::~ISystemUpdateInterface() = default; | ||||||
|  |  | ||||||
|  | Result ISystemUpdateInterface::GetBackgroundNetworkUpdateState( | ||||||
|  |     Out<BackgroundNetworkUpdateState> out_background_network_update_state) { | ||||||
|  |     LOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|  |     *out_background_network_update_state = BackgroundNetworkUpdateState::None; | ||||||
|  |     R_SUCCEED(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Result ISystemUpdateInterface::OpenSystemUpdateControl( | ||||||
|  |     Out<SharedPointer<ISystemUpdateControl>> out_system_update_control) { | ||||||
|  |     LOG_WARNING(Service_NS, "(STUBBED) called"); | ||||||
|  |     *out_system_update_control = std::make_shared<ISystemUpdateControl>(system); | ||||||
|  |     R_SUCCEED(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Result ISystemUpdateInterface::GetSystemUpdateNotificationEventForContentDelivery( | ||||||
|  |     OutCopyHandle<Kernel::KReadableEvent> out_event) { | ||||||
|  |     LOG_WARNING(Service_NS, "(STUBBED) called"); | ||||||
|  |     *out_event = update_notification_event.GetHandle(); | ||||||
|  |     R_SUCCEED(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Service::NS | ||||||
							
								
								
									
										38
									
								
								src/core/hle/service/ns/system_update_interface.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/core/hle/service/ns/system_update_interface.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | // 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/kernel_helpers.h" | ||||||
|  | #include "core/hle/service/ns/ns_types.h" | ||||||
|  | #include "core/hle/service/os/event.h" | ||||||
|  | #include "core/hle/service/service.h" | ||||||
|  |  | ||||||
|  | namespace Kernel { | ||||||
|  | class KReadableEvent; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | namespace Service::NS { | ||||||
|  |  | ||||||
|  | class ISystemUpdateControl; | ||||||
|  |  | ||||||
|  | class ISystemUpdateInterface final : public ServiceFramework<ISystemUpdateInterface> { | ||||||
|  | public: | ||||||
|  |     explicit ISystemUpdateInterface(Core::System& system_); | ||||||
|  |     ~ISystemUpdateInterface() override; | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     Result GetBackgroundNetworkUpdateState( | ||||||
|  |         Out<BackgroundNetworkUpdateState> out_background_network_update_state); | ||||||
|  |     Result OpenSystemUpdateControl( | ||||||
|  |         Out<SharedPointer<ISystemUpdateControl>> out_system_update_control); | ||||||
|  |     Result GetSystemUpdateNotificationEventForContentDelivery( | ||||||
|  |         OutCopyHandle<Kernel::KReadableEvent> out_event); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     KernelHelpers::ServiceContext service_context; | ||||||
|  |     Event update_notification_event; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace Service::NS | ||||||
		Reference in New Issue
	
	Block a user