|
|
@@ -2,12 +2,459 @@
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
+#include "core/hle/ipc_helpers.h"
|
|
|
+#include "core/hle/kernel/hle_ipc.h"
|
|
|
#include "core/hle/service/ns/ns.h"
|
|
|
#include "core/hle/service/ns/pl_u.h"
|
|
|
|
|
|
namespace Service::NS {
|
|
|
|
|
|
+class IAccountProxyInterface final : public ServiceFramework<IAccountProxyInterface> {
|
|
|
+public:
|
|
|
+ explicit IAccountProxyInterface() : ServiceFramework{"IAccountProxyInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "CreateUserAccount"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IApplicationManagerInterface final : public ServiceFramework<IApplicationManagerInterface> {
|
|
|
+public:
|
|
|
+ explicit IApplicationManagerInterface() : ServiceFramework{"IApplicationManagerInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "ListApplicationRecord"},
|
|
|
+ {1, nullptr, "GenerateApplicationRecordCount"},
|
|
|
+ {2, nullptr, "GetApplicationRecordUpdateSystemEvent"},
|
|
|
+ {3, nullptr, "GetApplicationViewDeprecated"},
|
|
|
+ {4, nullptr, "DeleteApplicationEntity"},
|
|
|
+ {5, nullptr, "DeleteApplicationCompletely"},
|
|
|
+ {6, nullptr, "IsAnyApplicationEntityRedundant"},
|
|
|
+ {7, nullptr, "DeleteRedundantApplicationEntity"},
|
|
|
+ {8, nullptr, "IsApplicationEntityMovable"},
|
|
|
+ {9, nullptr, "MoveApplicationEntity"},
|
|
|
+ {11, nullptr, "CalculateApplicationOccupiedSize"},
|
|
|
+ {16, nullptr, "PushApplicationRecord"},
|
|
|
+ {17, nullptr, "ListApplicationRecordContentMeta"},
|
|
|
+ {19, nullptr, "LaunchApplication"},
|
|
|
+ {21, nullptr, "GetApplicationContentPath"},
|
|
|
+ {22, nullptr, "TerminateApplication"},
|
|
|
+ {23, nullptr, "ResolveApplicationContentPath"},
|
|
|
+ {26, nullptr, "BeginInstallApplication"},
|
|
|
+ {27, nullptr, "DeleteApplicationRecord"},
|
|
|
+ {30, nullptr, "RequestApplicationUpdateInfo"},
|
|
|
+ {32, nullptr, "CancelApplicationDownload"},
|
|
|
+ {33, nullptr, "ResumeApplicationDownload"},
|
|
|
+ {35, nullptr, "UpdateVersionList"},
|
|
|
+ {36, nullptr, "PushLaunchVersion"},
|
|
|
+ {37, nullptr, "ListRequiredVersion"},
|
|
|
+ {38, nullptr, "CheckApplicationLaunchVersion"},
|
|
|
+ {39, nullptr, "CheckApplicationLaunchRights"},
|
|
|
+ {40, nullptr, "GetApplicationLogoData"},
|
|
|
+ {41, nullptr, "CalculateApplicationDownloadRequiredSize"},
|
|
|
+ {42, nullptr, "CleanupSdCard"},
|
|
|
+ {43, nullptr, "CheckSdCardMountStatus"},
|
|
|
+ {44, nullptr, "GetSdCardMountStatusChangedEvent"},
|
|
|
+ {45, nullptr, "GetGameCardAttachmentEvent"},
|
|
|
+ {46, nullptr, "GetGameCardAttachmentInfo"},
|
|
|
+ {47, nullptr, "GetTotalSpaceSize"},
|
|
|
+ {48, nullptr, "GetFreeSpaceSize"},
|
|
|
+ {49, nullptr, "GetSdCardRemovedEvent"},
|
|
|
+ {52, nullptr, "GetGameCardUpdateDetectionEvent"},
|
|
|
+ {53, nullptr, "DisableApplicationAutoDelete"},
|
|
|
+ {54, nullptr, "EnableApplicationAutoDelete"},
|
|
|
+ {55, nullptr, "GetApplicationDesiredLanguage"},
|
|
|
+ {56, nullptr, "SetApplicationTerminateResult"},
|
|
|
+ {57, nullptr, "ClearApplicationTerminateResult"},
|
|
|
+ {58, nullptr, "GetLastSdCardMountUnexpectedResult"},
|
|
|
+ {59, nullptr, "ConvertApplicationLanguageToLanguageCode"},
|
|
|
+ {60, nullptr, "ConvertLanguageCodeToApplicationLanguage"},
|
|
|
+ {61, nullptr, "GetBackgroundDownloadStressTaskInfo"},
|
|
|
+ {62, nullptr, "GetGameCardStopper"},
|
|
|
+ {63, nullptr, "IsSystemProgramInstalled"},
|
|
|
+ {64, nullptr, "StartApplyDeltaTask"},
|
|
|
+ {65, nullptr, "GetRequestServerStopper"},
|
|
|
+ {66, nullptr, "GetBackgroundApplyDeltaStressTaskInfo"},
|
|
|
+ {67, nullptr, "CancelApplicationApplyDelta"},
|
|
|
+ {68, nullptr, "ResumeApplicationApplyDelta"},
|
|
|
+ {69, nullptr, "CalculateApplicationApplyDeltaRequiredSize"},
|
|
|
+ {70, nullptr, "ResumeAll"},
|
|
|
+ {71, nullptr, "GetStorageSize"},
|
|
|
+ {80, nullptr, "RequestDownloadApplication"},
|
|
|
+ {81, nullptr, "RequestDownloadAddOnContent"},
|
|
|
+ {82, nullptr, "DownloadApplication"},
|
|
|
+ {83, nullptr, "CheckApplicationResumeRights"},
|
|
|
+ {84, nullptr, "GetDynamicCommitEvent"},
|
|
|
+ {85, nullptr, "RequestUpdateApplication2"},
|
|
|
+ {86, nullptr, "EnableApplicationCrashReport"},
|
|
|
+ {87, nullptr, "IsApplicationCrashReportEnabled"},
|
|
|
+ {90, nullptr, "BoostSystemMemoryResourceLimit"},
|
|
|
+ {100, nullptr, "ResetToFactorySettings"},
|
|
|
+ {101, nullptr, "ResetToFactorySettingsWithoutUserSaveData"},
|
|
|
+ {102, nullptr, "ResetToFactorySettingsForRefurbishment"},
|
|
|
+ {200, nullptr, "CalculateUserSaveDataStatistics"},
|
|
|
+ {201, nullptr, "DeleteUserSaveDataAll"},
|
|
|
+ {210, nullptr, "DeleteUserSystemSaveData"},
|
|
|
+ {220, nullptr, "UnregisterNetworkServiceAccount"},
|
|
|
+ {300, nullptr, "GetApplicationShellEvent"},
|
|
|
+ {301, nullptr, "PopApplicationShellEventInfo"},
|
|
|
+ {302, nullptr, "LaunchLibraryApplet"},
|
|
|
+ {303, nullptr, "TerminateLibraryApplet"},
|
|
|
+ {304, nullptr, "LaunchSystemApplet"},
|
|
|
+ {305, nullptr, "TerminateSystemApplet"},
|
|
|
+ {306, nullptr, "LaunchOverlayApplet"},
|
|
|
+ {307, nullptr, "TerminateOverlayApplet"},
|
|
|
+ {400, nullptr, "GetApplicationControlData"},
|
|
|
+ {401, nullptr, "InvalidateAllApplicationControlCache"},
|
|
|
+ {402, nullptr, "RequestDownloadApplicationControlData"},
|
|
|
+ {403, nullptr, "GetMaxApplicationControlCacheCount"},
|
|
|
+ {404, nullptr, "InvalidateApplicationControlCache"},
|
|
|
+ {405, nullptr, "ListApplicationControlCacheEntryInfo"},
|
|
|
+ {502, nullptr, "RequestCheckGameCardRegistration"},
|
|
|
+ {503, nullptr, "RequestGameCardRegistrationGoldPoint"},
|
|
|
+ {504, nullptr, "RequestRegisterGameCard"},
|
|
|
+ {505, nullptr, "GetGameCardMountFailureEvent"},
|
|
|
+ {506, nullptr, "IsGameCardInserted"},
|
|
|
+ {507, nullptr, "EnsureGameCardAccess"},
|
|
|
+ {508, nullptr, "GetLastGameCardMountFailureResult"},
|
|
|
+ {509, nullptr, "ListApplicationIdOnGameCard"},
|
|
|
+ {600, nullptr, "CountApplicationContentMeta"},
|
|
|
+ {601, nullptr, "ListApplicationContentMetaStatus"},
|
|
|
+ {602, nullptr, "ListAvailableAddOnContent"},
|
|
|
+ {603, nullptr, "GetOwnedApplicationContentMetaStatus"},
|
|
|
+ {604, nullptr, "RegisterContentsExternalKey"},
|
|
|
+ {605, nullptr, "ListApplicationContentMetaStatusWithRightsCheck"},
|
|
|
+ {606, nullptr, "GetContentMetaStorage"},
|
|
|
+ {700, nullptr, "PushDownloadTaskList"},
|
|
|
+ {701, nullptr, "ClearTaskStatusList"},
|
|
|
+ {702, nullptr, "RequestDownloadTaskList"},
|
|
|
+ {703, nullptr, "RequestEnsureDownloadTask"},
|
|
|
+ {704, nullptr, "ListDownloadTaskStatus"},
|
|
|
+ {705, nullptr, "RequestDownloadTaskListData"},
|
|
|
+ {800, nullptr, "RequestVersionList"},
|
|
|
+ {801, nullptr, "ListVersionList"},
|
|
|
+ {802, nullptr, "RequestVersionListData"},
|
|
|
+ {900, nullptr, "GetApplicationRecord"},
|
|
|
+ {901, nullptr, "GetApplicationRecordProperty"},
|
|
|
+ {902, nullptr, "EnableApplicationAutoUpdate"},
|
|
|
+ {903, nullptr, "DisableApplicationAutoUpdate"},
|
|
|
+ {904, nullptr, "TouchApplication"},
|
|
|
+ {905, nullptr, "RequestApplicationUpdate"},
|
|
|
+ {906, nullptr, "IsApplicationUpdateRequested"},
|
|
|
+ {907, nullptr, "WithdrawApplicationUpdateRequest"},
|
|
|
+ {908, nullptr, "ListApplicationRecordInstalledContentMeta"},
|
|
|
+ {909, nullptr, "WithdrawCleanupAddOnContentsWithNoRightsRecommendation"},
|
|
|
+ {1000, nullptr, "RequestVerifyApplicationDeprecated"},
|
|
|
+ {1001, nullptr, "CorruptApplicationForDebug"},
|
|
|
+ {1002, nullptr, "RequestVerifyAddOnContentsRights"},
|
|
|
+ {1003, nullptr, "RequestVerifyApplication"},
|
|
|
+ {1004, nullptr, "CorruptContentForDebug"},
|
|
|
+ {1200, nullptr, "NeedsUpdateVulnerability"},
|
|
|
+ {1300, nullptr, "IsAnyApplicationEntityInstalled"},
|
|
|
+ {1301, nullptr, "DeleteApplicationContentEntities"},
|
|
|
+ {1302, nullptr, "CleanupUnrecordedApplicationEntity"},
|
|
|
+ {1303, nullptr, "CleanupAddOnContentsWithNoRights"},
|
|
|
+ {1304, nullptr, "DeleteApplicationContentEntity"},
|
|
|
+ {1305, nullptr, "TryDeleteRunningApplicationEntity"},
|
|
|
+ {1306, nullptr, "TryDeleteRunningApplicationCompletely"},
|
|
|
+ {1307, nullptr, "TryDeleteRunningApplicationContentEntities"},
|
|
|
+ {1400, nullptr, "PrepareShutdown"},
|
|
|
+ {1500, nullptr, "FormatSdCard"},
|
|
|
+ {1501, nullptr, "NeedsSystemUpdateToFormatSdCard"},
|
|
|
+ {1502, nullptr, "GetLastSdCardFormatUnexpectedResult"},
|
|
|
+ {1504, nullptr, "InsertSdCard"},
|
|
|
+ {1505, nullptr, "RemoveSdCard"},
|
|
|
+ {1600, nullptr, "GetSystemSeedForPseudoDeviceId"},
|
|
|
+ {1601, nullptr, "ResetSystemSeedForPseudoDeviceId"},
|
|
|
+ {1700, nullptr, "ListApplicationDownloadingContentMeta"},
|
|
|
+ {1701, nullptr, "GetApplicationView"},
|
|
|
+ {1702, nullptr, "GetApplicationDownloadTaskStatus"},
|
|
|
+ {1703, nullptr, "GetApplicationViewDownloadErrorContext"},
|
|
|
+ {1800, nullptr, "IsNotificationSetupCompleted"},
|
|
|
+ {1801, nullptr, "GetLastNotificationInfoCount"},
|
|
|
+ {1802, nullptr, "ListLastNotificationInfo"},
|
|
|
+ {1803, nullptr, "ListNotificationTask"},
|
|
|
+ {1900, nullptr, "IsActiveAccount"},
|
|
|
+ {1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"},
|
|
|
+ {1902, nullptr, "GetApplicationTicketInfo"},
|
|
|
+ {2000, nullptr, "GetSystemDeliveryInfo"},
|
|
|
+ {2001, nullptr, "SelectLatestSystemDeliveryInfo"},
|
|
|
+ {2002, nullptr, "VerifyDeliveryProtocolVersion"},
|
|
|
+ {2003, nullptr, "GetApplicationDeliveryInfo"},
|
|
|
+ {2004, nullptr, "HasAllContentsToDeliver"},
|
|
|
+ {2005, nullptr, "CompareApplicationDeliveryInfo"},
|
|
|
+ {2006, nullptr, "CanDeliverApplication"},
|
|
|
+ {2007, nullptr, "ListContentMetaKeyToDeliverApplication"},
|
|
|
+ {2008, nullptr, "NeedsSystemUpdateToDeliverApplication"},
|
|
|
+ {2009, nullptr, "EstimateRequiredSize"},
|
|
|
+ {2010, nullptr, "RequestReceiveApplication"},
|
|
|
+ {2011, nullptr, "CommitReceiveApplication"},
|
|
|
+ {2012, nullptr, "GetReceiveApplicationProgress"},
|
|
|
+ {2013, nullptr, "RequestSendApplication"},
|
|
|
+ {2014, nullptr, "GetSendApplicationProgress"},
|
|
|
+ {2015, nullptr, "CompareSystemDeliveryInfo"},
|
|
|
+ {2016, nullptr, "ListNotCommittedContentMeta"},
|
|
|
+ {2017, nullptr, "CreateDownloadTask"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IApplicationVersionInterface final : public ServiceFramework<IApplicationVersionInterface> {
|
|
|
+public:
|
|
|
+ explicit IApplicationVersionInterface() : ServiceFramework{"IApplicationVersionInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "GetLaunchRequiredVersion"},
|
|
|
+ {1, nullptr, "UpgradeLaunchRequiredVersion"},
|
|
|
+ {35, nullptr, "UpdateVersionList"},
|
|
|
+ {36, nullptr, "PushLaunchVersion"},
|
|
|
+ {37, nullptr, "ListRequiredVersion"},
|
|
|
+ {800, nullptr, "RequestVersionList"},
|
|
|
+ {801, nullptr, "ListVersionList"},
|
|
|
+ {802, nullptr, "RequestVersionListData"},
|
|
|
+ {1000, nullptr, "PerformAutoUpdate"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IContentManagerInterface final : public ServiceFramework<IContentManagerInterface> {
|
|
|
+public:
|
|
|
+ explicit IContentManagerInterface() : ServiceFramework{"IContentManagerInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {11, nullptr, "CalculateApplicationOccupiedSize"},
|
|
|
+ {43, nullptr, "CheckSdCardMountStatus"},
|
|
|
+ {47, nullptr, "GetTotalSpaceSize"},
|
|
|
+ {48, nullptr, "GetFreeSpaceSize"},
|
|
|
+ {600, nullptr, "CountApplicationContentMeta"},
|
|
|
+ {601, nullptr, "ListApplicationContentMetaStatus"},
|
|
|
+ {605, nullptr, "ListApplicationContentMetaStatusWithRightsCheck"},
|
|
|
+ {607, nullptr, "IsAnyApplicationRunning"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IDocumentInterface final : public ServiceFramework<IDocumentInterface> {
|
|
|
+public:
|
|
|
+ explicit IDocumentInterface() : ServiceFramework{"IDocumentInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {21, nullptr, "GetApplicationContentPath"},
|
|
|
+ {23, nullptr, "ResolveApplicationContentPath"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IDownloadTaskInterface final : public ServiceFramework<IDownloadTaskInterface> {
|
|
|
+public:
|
|
|
+ explicit IDownloadTaskInterface() : ServiceFramework{"IDownloadTaskInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {701, nullptr, "ClearTaskStatusList"},
|
|
|
+ {702, nullptr, "RequestDownloadTaskList"},
|
|
|
+ {703, nullptr, "RequestEnsureDownloadTask"},
|
|
|
+ {704, nullptr, "ListDownloadTaskStatus"},
|
|
|
+ {705, nullptr, "RequestDownloadTaskListData"},
|
|
|
+ {706, nullptr, "TryCommitCurrentApplicationDownloadTask"},
|
|
|
+ {707, nullptr, "EnableAutoCommit"},
|
|
|
+ {708, nullptr, "DisableAutoCommit"},
|
|
|
+ {709, nullptr, "TriggerDynamicCommitEvent"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IECommerceInterface final : public ServiceFramework<IECommerceInterface> {
|
|
|
+public:
|
|
|
+ explicit IECommerceInterface() : ServiceFramework{"IECommerceInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "RequestLinkDevice"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class IFactoryResetInterface final : public ServiceFramework<IFactoryResetInterface> {
|
|
|
+public:
|
|
|
+ explicit IFactoryResetInterface() : ServiceFramework{"IFactoryResetInterface"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {100, nullptr, "ResetToFactorySettings"},
|
|
|
+ {101, nullptr, "ResetToFactorySettingsWithoutUserSaveData"},
|
|
|
+ {102, nullptr, "ResetToFactorySettingsForRefurbishment "},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class NS final : public ServiceFramework<NS> {
|
|
|
+public:
|
|
|
+ explicit NS(const char* name) : ServiceFramework{name} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {7992, &NS::PushInterface<IECommerceInterface>, "GetECommerceInterface"},
|
|
|
+ {7993, &NS::PushInterface<IApplicationVersionInterface>, "GetApplicationVersionInterface"},
|
|
|
+ {7994, &NS::PushInterface<IFactoryResetInterface>, "GetFactoryResetInterface"},
|
|
|
+ {7995, &NS::PushInterface<IAccountProxyInterface>, "GetAccountProxyInterface"},
|
|
|
+ {7996, &NS::PushInterface<IApplicationManagerInterface>, "GetApplicationManagerInterface"},
|
|
|
+ {7997, &NS::PushInterface<IDownloadTaskInterface>, "GetDownloadTaskInterface"},
|
|
|
+ {7998, &NS::PushInterface<IContentManagerInterface>, "GetContentManagementInterface"},
|
|
|
+ {7999, &NS::PushInterface<IDocumentInterface>, "GetDocumentInterface"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+
|
|
|
+private:
|
|
|
+ template <typename T>
|
|
|
+ void PushInterface(Kernel::HLERequestContext& ctx) {
|
|
|
+ IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
|
|
+ rb.Push(RESULT_SUCCESS);
|
|
|
+ rb.PushIpcInterface<T>();
|
|
|
+
|
|
|
+ LOG_DEBUG(Service_NS, "called");
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class NS_DEV final : public ServiceFramework<NS_DEV> {
|
|
|
+public:
|
|
|
+ explicit NS_DEV() : ServiceFramework{"ns:dev"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "LaunchProgram"},
|
|
|
+ {1, nullptr, "TerminateProcess"},
|
|
|
+ {2, nullptr, "TerminateProgram"},
|
|
|
+ {3, nullptr, "GetShellEventHandle"},
|
|
|
+ {4, nullptr, "GetShellEventInfo"},
|
|
|
+ {5, nullptr, "TerminateApplication"},
|
|
|
+ {6, nullptr, "PrepareLaunchProgramFromHost"},
|
|
|
+ {7, nullptr, "LaunchApplication"},
|
|
|
+ {8, nullptr, "LaunchApplicationWithStorageId"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class ISystemUpdateControl final : public ServiceFramework<ISystemUpdateControl> {
|
|
|
+public:
|
|
|
+ explicit ISystemUpdateControl() : ServiceFramework{"ISystemUpdateControl"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {0, nullptr, "HasDownloaded"},
|
|
|
+ {1, nullptr, "RequestCheckLatestUpdate"},
|
|
|
+ {2, nullptr, "RequestDownloadLatestUpdate"},
|
|
|
+ {3, nullptr, "GetDownloadProgress"},
|
|
|
+ {4, nullptr, "ApplyDownloadedUpdate"},
|
|
|
+ {5, nullptr, "RequestPrepareCardUpdate"},
|
|
|
+ {6, nullptr, "GetPrepareCardUpdateProgress"},
|
|
|
+ {7, nullptr, "HasPreparedCardUpdate"},
|
|
|
+ {8, nullptr, "ApplyCardUpdate"},
|
|
|
+ {9, nullptr, "GetDownloadedEulaDataSize"},
|
|
|
+ {10, nullptr, "GetDownloadedEulaData"},
|
|
|
+ {11, nullptr, "SetupCardUpdate"},
|
|
|
+ {12, nullptr, "GetPreparedCardUpdateEulaDataSize"},
|
|
|
+ {13, nullptr, "GetPreparedCardUpdateEulaData"},
|
|
|
+ {14, nullptr, "SetupCardUpdateViaSystemUpdater"},
|
|
|
+ {15, nullptr, "HasReceived"},
|
|
|
+ {16, nullptr, "RequestReceiveSystemUpdate"},
|
|
|
+ {17, nullptr, "GetReceiveProgress"},
|
|
|
+ {18, nullptr, "ApplyReceivedUpdate"},
|
|
|
+ {19, nullptr, "GetReceivedEulaDataSize"},
|
|
|
+ {20, nullptr, "GetReceivedEulaData"},
|
|
|
+ {21, nullptr, "SetupToReceiveSystemUpdate"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class NS_SU final : public ServiceFramework<NS_SU> {
|
|
|
+public:
|
|
|
+ explicit NS_SU() : ServiceFramework{"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"},
|
|
|
+ {16, nullptr, "DestroySystemUpdateTask"},
|
|
|
+ {17, nullptr, "RequestSendSystemUpdate"},
|
|
|
+ {18, nullptr, "GetSendSystemUpdateProgress"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+
|
|
|
+private:
|
|
|
+ void OpenSystemUpdateControl(Kernel::HLERequestContext& ctx) {
|
|
|
+ IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
|
|
+ rb.Push(RESULT_SUCCESS);
|
|
|
+ rb.PushIpcInterface<ISystemUpdateControl>();
|
|
|
+
|
|
|
+ LOG_DEBUG(Service_NS, "called");
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+class NS_VM final : public ServiceFramework<NS_VM> {
|
|
|
+public:
|
|
|
+ explicit NS_VM() : ServiceFramework{"ns:vm"} {
|
|
|
+ // clang-format off
|
|
|
+ static const FunctionInfo functions[] = {
|
|
|
+ {1200, nullptr, "NeedsUpdateVulnerability"},
|
|
|
+ {1201, nullptr, "UpdateSafeSystemVersionForDebug"},
|
|
|
+ {1202, nullptr, "GetSafeSystemVersion"},
|
|
|
+ };
|
|
|
+ // clang-format on
|
|
|
+
|
|
|
+ RegisterHandlers(functions);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
|
|
+ std::make_shared<NS>("ns:am2")->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS>("ns:ec")->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS>("ns:rid")->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS>("ns:rt")->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS>("ns:web")->InstallAsService(service_manager);
|
|
|
+
|
|
|
+ std::make_shared<NS_DEV>()->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS_SU>()->InstallAsService(service_manager);
|
|
|
+ std::make_shared<NS_VM>()->InstallAsService(service_manager);
|
|
|
+
|
|
|
std::make_shared<PL_U>()->InstallAsService(service_manager);
|
|
|
}
|
|
|
|