diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 06a68a58..03a0209d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -344,6 +344,7 @@ add_library(skyline SHARED ${source_DIR}/skyline/services/fssrv/IFile.cpp ${source_DIR}/skyline/services/fssrv/IStorage.cpp ${source_DIR}/skyline/services/fssrv/IDirectory.cpp + ${source_DIR}/skyline/services/fssrv/IMultiCommitManager.cpp ${source_DIR}/skyline/services/nvdrv/INvDrvServices.cpp ${source_DIR}/skyline/services/nvdrv/driver.cpp ${source_DIR}/skyline/services/nvdrv/core/nvmap.cpp @@ -398,6 +399,7 @@ add_library(skyline SHARED ${source_DIR}/skyline/services/mmnv/IRequest.cpp ${source_DIR}/skyline/services/mii/IStaticService.cpp ${source_DIR}/skyline/services/mii/IDatabaseService.cpp + ${source_DIR}/skyline/services/olsc/IOlscServiceForApplication.cpp ) target_include_directories(skyline PRIVATE ${source_DIR}/skyline) # target_precompile_headers(skyline PRIVATE ${source_DIR}/skyline/common.h) # PCH will currently break Intellisense diff --git a/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.cpp b/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.cpp index 683b4861..7dc4a35c 100644 --- a/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.cpp +++ b/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.cpp @@ -20,4 +20,8 @@ namespace skyline::service::aocsrv { response.copyHandles.push_back(handle); return {}; } + + Result IPurchaseEventManager::PopPurchasedProductInfo(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } } diff --git a/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.h b/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.h index aa730f77..a98a2bb6 100644 --- a/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.h +++ b/app/src/main/cpp/skyline/services/aocsrv/IPurchaseEventManager.h @@ -21,9 +21,12 @@ namespace skyline::service::aocsrv { Result GetPurchasedEventReadableHandle(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result PopPurchasedProductInfo(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + SERVICE_DECL( SFUNC(0x0, IPurchaseEventManager, SetDefaultDeliveryTarget), - SFUNC(0x2, IPurchaseEventManager, GetPurchasedEventReadableHandle) + SFUNC(0x2, IPurchaseEventManager, GetPurchasedEventReadableHandle), + SFUNC(0x3, IPurchaseEventManager, PopPurchasedProductInfo) ) }; } diff --git a/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp b/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp index 21f103f5..803f454d 100644 --- a/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp +++ b/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp @@ -6,6 +6,7 @@ #include #include "results.h" #include "IStorage.h" +#include "IMultiCommitManager.h" #include "IFileSystemProxy.h" namespace skyline::service::fssrv { @@ -100,4 +101,9 @@ namespace skyline::service::fssrv { response.Push(0); return {}; } + + Result IFileSystemProxy::OpenMultiCommitManager(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + manager.RegisterService(SRVREG(IMultiCommitManager), session, response); + return {}; + } } diff --git a/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.h b/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.h index 9f36c80c..5628b920 100644 --- a/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.h +++ b/app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.h @@ -109,6 +109,11 @@ namespace skyline::service::fssrv { */ Result GetGlobalAccessLogMode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** + * @url https://switchbrew.org/wiki/Filesystem_services#OpenMultiCommitManager + */ + Result OpenMultiCommitManager(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + SERVICE_DECL( SFUNC(0x1, IFileSystemProxy, SetCurrentProcess), SFUNC(0x12, IFileSystemProxy, OpenSdCardFileSystem), @@ -118,7 +123,8 @@ namespace skyline::service::fssrv { SFUNC(0xC8, IFileSystemProxy, OpenDataStorageByCurrentProcess), SFUNC(0xCA, IFileSystemProxy, OpenDataStorageByDataId), SFUNC(0xCB, IFileSystemProxy, OpenPatchDataStorageByCurrentProcess), - SFUNC(0x3ED, IFileSystemProxy, GetGlobalAccessLogMode) + SFUNC(0x3ED, IFileSystemProxy, GetGlobalAccessLogMode), + SFUNC(0x4B0, IFileSystemProxy, OpenMultiCommitManager) ) }; } diff --git a/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.cpp b/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.cpp new file mode 100644 index 00000000..64b18981 --- /dev/null +++ b/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.cpp @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#include "IMultiCommitManager.h" + +namespace skyline::service::fssrv { + IMultiCommitManager::IMultiCommitManager(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {} + + Result IMultiCommitManager::Add(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } + + Result IMultiCommitManager::Commit(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } +} diff --git a/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.h b/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.h new file mode 100644 index 00000000..274637af --- /dev/null +++ b/app/src/main/cpp/skyline/services/fssrv/IMultiCommitManager.h @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#pragma once + +#include + +namespace skyline::service::fssrv { + /** + * @url https://switchbrew.org/wiki/Filesystem_services#IMultiCommitManager + */ + class IMultiCommitManager : public BaseService { + public: + IMultiCommitManager(const DeviceState &state, ServiceManager &manager); + + /** + * @url https://switchbrew.org/wiki/Filesystem_services#Add + */ + Result Add(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + /** + * @url https://switchbrew.org/wiki/Filesystem_services#Commit + */ + Result Commit(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + SERVICE_DECL( + SFUNC(0x1, IMultiCommitManager, Add), + SFUNC(0x2, IMultiCommitManager, Commit) + ) + }; +} diff --git a/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.cpp b/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.cpp new file mode 100644 index 00000000..c190574c --- /dev/null +++ b/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.cpp @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2022 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#include "IOlscServiceForApplication.h" + +namespace skyline::service::olsc { + IOlscServiceForApplication::IOlscServiceForApplication(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {} +} diff --git a/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.h b/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.h new file mode 100644 index 00000000..8cef9383 --- /dev/null +++ b/app/src/main/cpp/skyline/services/olsc/IOlscServiceForApplication.h @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2022 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#pragma once + +#include + +namespace skyline::service::olsc { + /** + * @url https://switchbrew.org/wiki/OLSC_services#olsc:u + */ + class IOlscServiceForApplication : public BaseService { + public: + IOlscServiceForApplication(const DeviceState &state, ServiceManager &manager); + }; +} diff --git a/app/src/main/cpp/skyline/services/prepo/IPrepoService.cpp b/app/src/main/cpp/skyline/services/prepo/IPrepoService.cpp index 52754a5a..f5e00c1c 100644 --- a/app/src/main/cpp/skyline/services/prepo/IPrepoService.cpp +++ b/app/src/main/cpp/skyline/services/prepo/IPrepoService.cpp @@ -14,6 +14,10 @@ namespace skyline::service::prepo { return {}; } + Result IPrepoService::SaveReport (type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } + Result IPrepoService::SaveReportWithUser(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { return {}; } diff --git a/app/src/main/cpp/skyline/services/prepo/IPrepoService.h b/app/src/main/cpp/skyline/services/prepo/IPrepoService.h index 66524fc9..0e396c00 100644 --- a/app/src/main/cpp/skyline/services/prepo/IPrepoService.h +++ b/app/src/main/cpp/skyline/services/prepo/IPrepoService.h @@ -21,6 +21,8 @@ namespace skyline::service::prepo { Result SaveReportWithUserOld2 (type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result SaveReport (type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result SaveReportWithUser(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); Result RequestImmediateTransmission(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); @@ -28,6 +30,7 @@ namespace skyline::service::prepo { SERVICE_DECL( SFUNC(0x2775, IPrepoService, SaveReportWithUserOld), SFUNC(0x2777, IPrepoService, SaveReportWithUserOld2), + SFUNC(0x2778, IPrepoService, SaveReport), SFUNC(0x2779, IPrepoService, SaveReportWithUser), SFUNC(0x27D8, IPrepoService, RequestImmediateTransmission) ) diff --git a/app/src/main/cpp/skyline/services/serviceman.cpp b/app/src/main/cpp/skyline/services/serviceman.cpp index f5c16e63..3381f64d 100644 --- a/app/src/main/cpp/skyline/services/serviceman.cpp +++ b/app/src/main/cpp/skyline/services/serviceman.cpp @@ -56,6 +56,7 @@ #include "capsrv/IScreenShotApplicationService.h" #include "ro/IRoInterface.h" #include "mii/IStaticService.h" +#include "olsc/IOlscServiceForApplication.h" #include "serviceman.h" #define SERVICE_CASE(class, name, ...) \ @@ -142,6 +143,7 @@ namespace skyline::service { SERVICE_CASE(ro::IRoInterface, "ldr:ro") SERVICE_CASE(mii::IStaticService, "mii:e") SERVICE_CASE(mii::IStaticService, "mii:u") + SERVICE_CASE(olsc::IOlscServiceForApplication, "olsc:u") default: std::string_view nameString(span(reinterpret_cast(&name), sizeof(name)).as_string(true)); throw std::out_of_range(fmt::format("CreateService called with an unknown service name: {}", nameString));