11 changed files with 633 additions and 489 deletions
-
2src/core/CMakeLists.txt
-
3src/core/hle/service/am/service/application_functions.cpp
-
3src/core/hle/service/am/service/library_applet_self_accessor.cpp
-
518src/core/hle/service/ns/application_manager_interface.cpp
-
62src/core/hle/service/ns/application_manager_interface.h
-
2src/core/hle/service/ns/content_management_interface.h
-
465src/core/hle/service/ns/ns.cpp
-
49src/core/hle/service/ns/ns.h
-
9src/core/hle/service/ns/ns_types.h
-
4src/core/hle/service/ns/read_only_application_control_data_interface.cpp
-
5src/core/hle/service/ns/read_only_application_control_data_interface.h
@ -0,0 +1,518 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include "core/file_sys/nca_metadata.h"
|
||||
|
#include "core/file_sys/registered_cache.h"
|
||||
|
#include "core/hle/service/cmif_serialization.h"
|
||||
|
#include "core/hle/service/filesystem/filesystem.h"
|
||||
|
#include "core/hle/service/ns/application_manager_interface.h"
|
||||
|
#include "core/hle/service/ns/content_management_interface.h"
|
||||
|
#include "core/hle/service/ns/read_only_application_control_data_interface.h"
|
||||
|
|
||||
|
namespace Service::NS { |
||||
|
|
||||
|
IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_) |
||||
|
: ServiceFramework{system_, "IApplicationManagerInterface"}, |
||||
|
service_context{system, "IApplicationManagerInterface"}, |
||||
|
record_update_system_event{service_context}, sd_card_mount_status_event{service_context}, |
||||
|
gamecard_update_detection_event{service_context}, |
||||
|
gamecard_mount_status_event{service_context}, gamecard_mount_failure_event{service_context} { |
||||
|
// clang-format off
|
||||
|
static const FunctionInfo functions[] = { |
||||
|
{0, D<&IApplicationManagerInterface::ListApplicationRecord>, "ListApplicationRecord"}, |
||||
|
{1, nullptr, "GenerateApplicationRecordCount"}, |
||||
|
{2, D<&IApplicationManagerInterface::GetApplicationRecordUpdateSystemEvent>, "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, "LaunchApplicationOld"}, |
||||
|
{21, nullptr, "GetApplicationContentPath"}, |
||||
|
{22, nullptr, "TerminateApplication"}, |
||||
|
{23, nullptr, "ResolveApplicationContentPath"}, |
||||
|
{26, nullptr, "BeginInstallApplication"}, |
||||
|
{27, nullptr, "DeleteApplicationRecord"}, |
||||
|
{30, nullptr, "RequestApplicationUpdateInfo"}, |
||||
|
{31, nullptr, "Unknown31"}, |
||||
|
{32, nullptr, "CancelApplicationDownload"}, |
||||
|
{33, nullptr, "ResumeApplicationDownload"}, |
||||
|
{35, nullptr, "UpdateVersionList"}, |
||||
|
{36, nullptr, "PushLaunchVersion"}, |
||||
|
{37, nullptr, "ListRequiredVersion"}, |
||||
|
{38, D<&IApplicationManagerInterface::CheckApplicationLaunchVersion>, "CheckApplicationLaunchVersion"}, |
||||
|
{39, nullptr, "CheckApplicationLaunchRights"}, |
||||
|
{40, nullptr, "GetApplicationLogoData"}, |
||||
|
{41, nullptr, "CalculateApplicationDownloadRequiredSize"}, |
||||
|
{42, nullptr, "CleanupSdCard"}, |
||||
|
{43, D<&IApplicationManagerInterface::CheckSdCardMountStatus>, "CheckSdCardMountStatus"}, |
||||
|
{44, D<&IApplicationManagerInterface::GetSdCardMountStatusChangedEvent>, "GetSdCardMountStatusChangedEvent"}, |
||||
|
{45, nullptr, "GetGameCardAttachmentEvent"}, |
||||
|
{46, nullptr, "GetGameCardAttachmentInfo"}, |
||||
|
{47, nullptr, "GetTotalSpaceSize"}, |
||||
|
{48, D<&IApplicationManagerInterface::GetFreeSpaceSize>, "GetFreeSpaceSize"}, |
||||
|
{49, nullptr, "GetSdCardRemovedEvent"}, |
||||
|
{52, D<&IApplicationManagerInterface::GetGameCardUpdateDetectionEvent>, "GetGameCardUpdateDetectionEvent"}, |
||||
|
{53, nullptr, "DisableApplicationAutoDelete"}, |
||||
|
{54, nullptr, "EnableApplicationAutoDelete"}, |
||||
|
{55, D<&IApplicationManagerInterface::GetApplicationDesiredLanguage>, "GetApplicationDesiredLanguage"}, |
||||
|
{56, nullptr, "SetApplicationTerminateResult"}, |
||||
|
{57, nullptr, "ClearApplicationTerminateResult"}, |
||||
|
{58, nullptr, "GetLastSdCardMountUnexpectedResult"}, |
||||
|
{59, D<&IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode>, "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, D<&IApplicationManagerInterface::ResumeAll>, "ResumeAll"}, |
||||
|
{71, D<&IApplicationManagerInterface::GetStorageSize>, "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"}, |
||||
|
{91, nullptr, "DeprecatedLaunchApplication"}, |
||||
|
{92, nullptr, "GetRunningApplicationProgramId"}, |
||||
|
{93, nullptr, "GetMainApplicationProgramIndex"}, |
||||
|
{94, nullptr, "LaunchApplication"}, |
||||
|
{95, nullptr, "GetApplicationLaunchInfo"}, |
||||
|
{96, nullptr, "AcquireApplicationLaunchInfo"}, |
||||
|
{97, nullptr, "GetMainApplicationProgramIndexByApplicationLaunchInfo"}, |
||||
|
{98, nullptr, "EnableApplicationAllThreadDumpOnCrash"}, |
||||
|
{99, nullptr, "LaunchDevMenu"}, |
||||
|
{100, nullptr, "ResetToFactorySettings"}, |
||||
|
{101, nullptr, "ResetToFactorySettingsWithoutUserSaveData"}, |
||||
|
{102, nullptr, "ResetToFactorySettingsForRefurbishment"}, |
||||
|
{103, nullptr, "ResetToFactorySettingsWithPlatformRegion"}, |
||||
|
{104, nullptr, "ResetToFactorySettingsWithPlatformRegionAuthentication"}, |
||||
|
{105, nullptr, "RequestResetToFactorySettingsSecurely"}, |
||||
|
{106, nullptr, "RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely"}, |
||||
|
{200, nullptr, "CalculateUserSaveDataStatistics"}, |
||||
|
{201, nullptr, "DeleteUserSaveDataAll"}, |
||||
|
{210, nullptr, "DeleteUserSystemSaveData"}, |
||||
|
{211, nullptr, "DeleteSaveData"}, |
||||
|
{220, nullptr, "UnregisterNetworkServiceAccount"}, |
||||
|
{221, nullptr, "UnregisterNetworkServiceAccountWithUserSaveDataDeletion"}, |
||||
|
{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, D<&IApplicationManagerInterface::GetApplicationControlData>, "GetApplicationControlData"}, |
||||
|
{401, nullptr, "InvalidateAllApplicationControlCache"}, |
||||
|
{402, nullptr, "RequestDownloadApplicationControlData"}, |
||||
|
{403, nullptr, "GetMaxApplicationControlCacheCount"}, |
||||
|
{404, nullptr, "InvalidateApplicationControlCache"}, |
||||
|
{405, nullptr, "ListApplicationControlCacheEntryInfo"}, |
||||
|
{406, nullptr, "GetApplicationControlProperty"}, |
||||
|
{407, nullptr, "ListApplicationTitle"}, |
||||
|
{408, nullptr, "ListApplicationIcon"}, |
||||
|
{502, nullptr, "RequestCheckGameCardRegistration"}, |
||||
|
{503, nullptr, "RequestGameCardRegistrationGoldPoint"}, |
||||
|
{504, nullptr, "RequestRegisterGameCard"}, |
||||
|
{505, D<&IApplicationManagerInterface::GetGameCardMountFailureEvent>, "GetGameCardMountFailureEvent"}, |
||||
|
{506, nullptr, "IsGameCardInserted"}, |
||||
|
{507, nullptr, "EnsureGameCardAccess"}, |
||||
|
{508, nullptr, "GetLastGameCardMountFailureResult"}, |
||||
|
{509, nullptr, "ListApplicationIdOnGameCard"}, |
||||
|
{510, nullptr, "GetGameCardPlatformRegion"}, |
||||
|
{600, nullptr, "CountApplicationContentMeta"}, |
||||
|
{601, nullptr, "ListApplicationContentMetaStatus"}, |
||||
|
{602, nullptr, "ListAvailableAddOnContent"}, |
||||
|
{603, nullptr, "GetOwnedApplicationContentMetaStatus"}, |
||||
|
{604, nullptr, "RegisterContentsExternalKey"}, |
||||
|
{605, nullptr, "ListApplicationContentMetaStatusWithRightsCheck"}, |
||||
|
{606, nullptr, "GetContentMetaStorage"}, |
||||
|
{607, nullptr, "ListAvailableAddOnContent"}, |
||||
|
{609, nullptr, "ListAvailabilityAssuredAddOnContent"}, |
||||
|
{610, nullptr, "GetInstalledContentMetaStorage"}, |
||||
|
{611, nullptr, "PrepareAddOnContent"}, |
||||
|
{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, D<&IApplicationManagerInterface::IsApplicationUpdateRequested>, "IsApplicationUpdateRequested"}, |
||||
|
{907, nullptr, "WithdrawApplicationUpdateRequest"}, |
||||
|
{908, nullptr, "ListApplicationRecordInstalledContentMeta"}, |
||||
|
{909, nullptr, "WithdrawCleanupAddOnContentsWithNoRightsRecommendation"}, |
||||
|
{910, nullptr, "HasApplicationRecord"}, |
||||
|
{911, nullptr, "SetPreInstalledApplication"}, |
||||
|
{912, nullptr, "ClearPreInstalledApplicationFlag"}, |
||||
|
{913, nullptr, "ListAllApplicationRecord"}, |
||||
|
{914, nullptr, "HideApplicationRecord"}, |
||||
|
{915, nullptr, "ShowApplicationRecord"}, |
||||
|
{916, nullptr, "IsApplicationAutoDeleteDisabled"}, |
||||
|
{1000, nullptr, "RequestVerifyApplicationDeprecated"}, |
||||
|
{1001, nullptr, "CorruptApplicationForDebug"}, |
||||
|
{1002, nullptr, "RequestVerifyAddOnContentsRights"}, |
||||
|
{1003, nullptr, "RequestVerifyApplication"}, |
||||
|
{1004, nullptr, "CorruptContentForDebug"}, |
||||
|
{1200, nullptr, "NeedsUpdateVulnerability"}, |
||||
|
{1300, D<&IApplicationManagerInterface::IsAnyApplicationEntityInstalled>, "IsAnyApplicationEntityInstalled"}, |
||||
|
{1301, nullptr, "DeleteApplicationContentEntities"}, |
||||
|
{1302, nullptr, "CleanupUnrecordedApplicationEntity"}, |
||||
|
{1303, nullptr, "CleanupAddOnContentsWithNoRights"}, |
||||
|
{1304, nullptr, "DeleteApplicationContentEntity"}, |
||||
|
{1305, nullptr, "TryDeleteRunningApplicationEntity"}, |
||||
|
{1306, nullptr, "TryDeleteRunningApplicationCompletely"}, |
||||
|
{1307, nullptr, "TryDeleteRunningApplicationContentEntities"}, |
||||
|
{1308, nullptr, "DeleteApplicationCompletelyForDebug"}, |
||||
|
{1309, nullptr, "CleanupUnavailableAddOnContents"}, |
||||
|
{1310, nullptr, "RequestMoveApplicationEntity"}, |
||||
|
{1311, nullptr, "EstimateSizeToMove"}, |
||||
|
{1312, nullptr, "HasMovableEntity"}, |
||||
|
{1313, nullptr, "CleanupOrphanContents"}, |
||||
|
{1314, nullptr, "CheckPreconditionSatisfiedToMove"}, |
||||
|
{1400, nullptr, "PrepareShutdown"}, |
||||
|
{1500, nullptr, "FormatSdCard"}, |
||||
|
{1501, nullptr, "NeedsSystemUpdateToFormatSdCard"}, |
||||
|
{1502, nullptr, "GetLastSdCardFormatUnexpectedResult"}, |
||||
|
{1504, nullptr, "InsertSdCard"}, |
||||
|
{1505, nullptr, "RemoveSdCard"}, |
||||
|
{1506, nullptr, "GetSdCardStartupStatus"}, |
||||
|
{1600, nullptr, "GetSystemSeedForPseudoDeviceId"}, |
||||
|
{1601, nullptr, "ResetSystemSeedForPseudoDeviceId"}, |
||||
|
{1700, nullptr, "ListApplicationDownloadingContentMeta"}, |
||||
|
{1701, D<&IApplicationManagerInterface::GetApplicationView>, "GetApplicationView"}, |
||||
|
{1702, nullptr, "GetApplicationDownloadTaskStatus"}, |
||||
|
{1703, nullptr, "GetApplicationViewDownloadErrorContext"}, |
||||
|
{1704, D<&IApplicationManagerInterface::GetApplicationViewWithPromotionInfo>, "GetApplicationViewWithPromotionInfo"}, |
||||
|
{1705, nullptr, "IsPatchAutoDeletableApplication"}, |
||||
|
{1800, nullptr, "IsNotificationSetupCompleted"}, |
||||
|
{1801, nullptr, "GetLastNotificationInfoCount"}, |
||||
|
{1802, nullptr, "ListLastNotificationInfo"}, |
||||
|
{1803, nullptr, "ListNotificationTask"}, |
||||
|
{1900, nullptr, "IsActiveAccount"}, |
||||
|
{1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"}, |
||||
|
{1902, nullptr, "GetApplicationTicketInfo"}, |
||||
|
{1903, nullptr, "RequestDownloadApplicationPrepurchasedRightsForAccount"}, |
||||
|
{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"}, |
||||
|
{2018, nullptr, "GetApplicationDeliveryInfoHash"}, |
||||
|
{2050, D<&IApplicationManagerInterface::GetApplicationRightsOnClient>, "GetApplicationRightsOnClient"}, |
||||
|
{2051, nullptr, "InvalidateRightsIdCache"}, |
||||
|
{2100, D<&IApplicationManagerInterface::GetApplicationTerminateResult>, "GetApplicationTerminateResult"}, |
||||
|
{2101, nullptr, "GetRawApplicationTerminateResult"}, |
||||
|
{2150, nullptr, "CreateRightsEnvironment"}, |
||||
|
{2151, nullptr, "DestroyRightsEnvironment"}, |
||||
|
{2152, nullptr, "ActivateRightsEnvironment"}, |
||||
|
{2153, nullptr, "DeactivateRightsEnvironment"}, |
||||
|
{2154, nullptr, "ForceActivateRightsContextForExit"}, |
||||
|
{2155, nullptr, "UpdateRightsEnvironmentStatus"}, |
||||
|
{2156, nullptr, "CreateRightsEnvironmentForMicroApplication"}, |
||||
|
{2160, nullptr, "AddTargetApplicationToRightsEnvironment"}, |
||||
|
{2161, nullptr, "SetUsersToRightsEnvironment"}, |
||||
|
{2170, nullptr, "GetRightsEnvironmentStatus"}, |
||||
|
{2171, nullptr, "GetRightsEnvironmentStatusChangedEvent"}, |
||||
|
{2180, nullptr, "RequestExtendRightsInRightsEnvironment"}, |
||||
|
{2181, nullptr, "GetResultOfExtendRightsInRightsEnvironment"}, |
||||
|
{2182, nullptr, "SetActiveRightsContextUsingStateToRightsEnvironment"}, |
||||
|
{2190, nullptr, "GetRightsEnvironmentHandleForApplication"}, |
||||
|
{2199, nullptr, "GetRightsEnvironmentCountForDebug"}, |
||||
|
{2200, nullptr, "GetGameCardApplicationCopyIdentifier"}, |
||||
|
{2201, nullptr, "GetInstalledApplicationCopyIdentifier"}, |
||||
|
{2250, nullptr, "RequestReportActiveELicence"}, |
||||
|
{2300, nullptr, "ListEventLog"}, |
||||
|
{2350, nullptr, "PerformAutoUpdateByApplicationId"}, |
||||
|
{2351, nullptr, "RequestNoDownloadRightsErrorResolution"}, |
||||
|
{2352, nullptr, "RequestResolveNoDownloadRightsError"}, |
||||
|
{2353, nullptr, "GetApplicationDownloadTaskInfo"}, |
||||
|
{2354, nullptr, "PrioritizeApplicationBackgroundTask"}, |
||||
|
{2355, nullptr, "PreferStorageEfficientUpdate"}, |
||||
|
{2356, nullptr, "RequestStorageEfficientUpdatePreferable"}, |
||||
|
{2357, nullptr, "EnableMultiCoreDownload"}, |
||||
|
{2358, nullptr, "DisableMultiCoreDownload"}, |
||||
|
{2359, nullptr, "IsMultiCoreDownloadEnabled"}, |
||||
|
{2400, nullptr, "GetPromotionInfo"}, |
||||
|
{2401, nullptr, "CountPromotionInfo"}, |
||||
|
{2402, nullptr, "ListPromotionInfo"}, |
||||
|
{2403, nullptr, "ImportPromotionJsonForDebug"}, |
||||
|
{2404, nullptr, "ClearPromotionInfoForDebug"}, |
||||
|
{2500, nullptr, "ConfirmAvailableTime"}, |
||||
|
{2510, nullptr, "CreateApplicationResource"}, |
||||
|
{2511, nullptr, "GetApplicationResource"}, |
||||
|
{2513, nullptr, "LaunchMicroApplication"}, |
||||
|
{2514, nullptr, "ClearTaskOfAsyncTaskManager"}, |
||||
|
{2515, nullptr, "CleanupAllPlaceHolderAndFragmentsIfNoTask"}, |
||||
|
{2516, nullptr, "EnsureApplicationCertificate"}, |
||||
|
{2517, nullptr, "CreateApplicationInstance"}, |
||||
|
{2518, nullptr, "UpdateQualificationForDebug"}, |
||||
|
{2519, nullptr, "IsQualificationTransitionSupported"}, |
||||
|
{2520, nullptr, "IsQualificationTransitionSupportedByProcessId"}, |
||||
|
{2521, nullptr, "GetRightsUserChangedEvent"}, |
||||
|
{2522, nullptr, "IsRomRedirectionAvailable"}, |
||||
|
{2800, nullptr, "GetApplicationIdOfPreomia"}, |
||||
|
{3000, nullptr, "RegisterDeviceLockKey"}, |
||||
|
{3001, nullptr, "UnregisterDeviceLockKey"}, |
||||
|
{3002, nullptr, "VerifyDeviceLockKey"}, |
||||
|
{3003, nullptr, "HideApplicationIcon"}, |
||||
|
{3004, nullptr, "ShowApplicationIcon"}, |
||||
|
{3005, nullptr, "HideApplicationTitle"}, |
||||
|
{3006, nullptr, "ShowApplicationTitle"}, |
||||
|
{3007, nullptr, "EnableGameCard"}, |
||||
|
{3008, nullptr, "DisableGameCard"}, |
||||
|
{3009, nullptr, "EnableLocalContentShare"}, |
||||
|
{3010, nullptr, "DisableLocalContentShare"}, |
||||
|
{3011, nullptr, "IsApplicationIconHidden"}, |
||||
|
{3012, nullptr, "IsApplicationTitleHidden"}, |
||||
|
{3013, nullptr, "IsGameCardEnabled"}, |
||||
|
{3014, nullptr, "IsLocalContentShareEnabled"}, |
||||
|
{3050, nullptr, "ListAssignELicenseTaskResult"}, |
||||
|
{9999, nullptr, "GetApplicationCertificate"}, |
||||
|
}; |
||||
|
// clang-format on
|
||||
|
|
||||
|
RegisterHandlers(functions); |
||||
|
} |
||||
|
|
||||
|
IApplicationManagerInterface::~IApplicationManagerInterface() = default; |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationControlData( |
||||
|
OutBuffer<BufferAttr_HipcMapAlias> out_buffer, Out<u32> out_actual_size, |
||||
|
ApplicationControlSource application_control_source, u64 application_id) { |
||||
|
LOG_DEBUG(Service_NS, "called"); |
||||
|
R_RETURN(IReadOnlyApplicationControlDataInterface(system).GetApplicationControlData( |
||||
|
out_buffer, out_actual_size, application_control_source, application_id)); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationDesiredLanguage( |
||||
|
Out<ApplicationLanguage> out_desired_language, u32 supported_languages) { |
||||
|
LOG_DEBUG(Service_NS, "called"); |
||||
|
R_RETURN(IReadOnlyApplicationControlDataInterface(system).GetApplicationDesiredLanguage( |
||||
|
out_desired_language, supported_languages)); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode( |
||||
|
Out<u64> out_language_code, ApplicationLanguage application_language) { |
||||
|
LOG_DEBUG(Service_NS, "called"); |
||||
|
R_RETURN( |
||||
|
IReadOnlyApplicationControlDataInterface(system).ConvertApplicationLanguageToLanguageCode( |
||||
|
out_language_code, application_language)); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::ListApplicationRecord( |
||||
|
OutArray<ApplicationRecord, BufferAttr_HipcMapAlias> out_records, Out<s32> out_count, |
||||
|
s32 offset) { |
||||
|
const auto limit = out_records.size(); |
||||
|
|
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
const auto& cache = system.GetContentProviderUnion(); |
||||
|
const auto installed_games = cache.ListEntriesFilterOrigin( |
||||
|
std::nullopt, FileSys::TitleType::Application, FileSys::ContentRecordType::Program); |
||||
|
|
||||
|
size_t i = 0; |
||||
|
u8 ii = 24; |
||||
|
|
||||
|
for (const auto& [slot, game] : installed_games) { |
||||
|
if (i >= limit) { |
||||
|
break; |
||||
|
} |
||||
|
if (game.title_id == 0 || game.title_id < 0x0100000000001FFFull) { |
||||
|
continue; |
||||
|
} |
||||
|
if (offset > 0) { |
||||
|
offset--; |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
ApplicationRecord record{}; |
||||
|
record.application_id = game.title_id; |
||||
|
record.type = ApplicationRecordType::Installed; |
||||
|
record.unknown = 0; // 2 = needs update
|
||||
|
record.unknown2 = ii++; |
||||
|
|
||||
|
out_records[i++] = record; |
||||
|
} |
||||
|
|
||||
|
*out_count = static_cast<s32>(i); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationRecordUpdateSystemEvent( |
||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
|
||||
|
record_update_system_event.Signal(); |
||||
|
*out_event = record_update_system_event.GetHandle(); |
||||
|
|
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetGameCardMountFailureEvent( |
||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
*out_event = gamecard_mount_failure_event.GetHandle(); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::IsAnyApplicationEntityInstalled( |
||||
|
Out<bool> out_is_any_application_entity_installed) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
*out_is_any_application_entity_installed = true; |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationView( |
||||
|
OutArray<ApplicationView, BufferAttr_HipcMapAlias> out_application_views, |
||||
|
InArray<u64, BufferAttr_HipcMapAlias> application_ids) { |
||||
|
const auto size = std::min(out_application_views.size(), application_ids.size()); |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called, size={}", application_ids.size()); |
||||
|
|
||||
|
for (size_t i = 0; i < size; i++) { |
||||
|
ApplicationView view{}; |
||||
|
view.application_id = application_ids[i]; |
||||
|
view.unk = 0x70000; |
||||
|
view.flags = 0x401f17; |
||||
|
|
||||
|
out_application_views[i] = view; |
||||
|
} |
||||
|
|
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationViewWithPromotionInfo( |
||||
|
OutArray<ApplicationViewWithPromotionInfo, BufferAttr_HipcMapAlias> out_application_views, |
||||
|
InArray<u64, BufferAttr_HipcMapAlias> application_ids) { |
||||
|
const auto size = std::min(out_application_views.size(), application_ids.size()); |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called, size={}", application_ids.size()); |
||||
|
|
||||
|
for (size_t i = 0; i < size; i++) { |
||||
|
ApplicationViewWithPromotionInfo view{}; |
||||
|
view.view.application_id = application_ids[i]; |
||||
|
view.view.unk = 0x70000; |
||||
|
view.view.flags = 0x401f17; |
||||
|
view.promotion = {}; |
||||
|
|
||||
|
out_application_views[i] = view; |
||||
|
} |
||||
|
|
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationRightsOnClient( |
||||
|
OutArray<ApplicationRightsOnClient, BufferAttr_HipcMapAlias> out_rights, Out<u32> out_count, |
||||
|
Common::UUID account_id, u32 flags, u64 application_id) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called, flags={}, application_id={:016X}, account_id={}", |
||||
|
flags, application_id, account_id.FormattedString()); |
||||
|
|
||||
|
if (!out_rights.empty()) { |
||||
|
out_rights[0] = { |
||||
|
.application_id = application_id, |
||||
|
.uid = account_id, |
||||
|
.flags = 0, |
||||
|
.flags2 = 0, |
||||
|
}; |
||||
|
*out_count = 1; |
||||
|
} else { |
||||
|
*out_count = 0; |
||||
|
} |
||||
|
|
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::CheckSdCardMountStatus() { |
||||
|
LOG_DEBUG(Service_NS, "called"); |
||||
|
R_RETURN(IContentManagementInterface(system).CheckSdCardMountStatus()); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetSdCardMountStatusChangedEvent( |
||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
*out_event = sd_card_mount_status_event.GetHandle(); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetFreeSpaceSize(Out<s64> out_free_space_size, |
||||
|
FileSys::StorageId storage_id) { |
||||
|
LOG_DEBUG(Service_NS, "called"); |
||||
|
R_RETURN(IContentManagementInterface(system).GetFreeSpaceSize(out_free_space_size, storage_id)); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetGameCardUpdateDetectionEvent( |
||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
*out_event = gamecard_update_detection_event.GetHandle(); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::ResumeAll() { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called"); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetStorageSize(Out<s64> out_total_space_size, |
||||
|
Out<s64> out_free_space_size, |
||||
|
FileSys::StorageId storage_id) { |
||||
|
LOG_INFO(Service_NS, "called, storage_id={}", storage_id); |
||||
|
*out_total_space_size = system.GetFileSystemController().GetTotalSpaceSize(storage_id); |
||||
|
*out_free_space_size = system.GetFileSystemController().GetFreeSpaceSize(storage_id); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::IsApplicationUpdateRequested(Out<bool> out_update_required, |
||||
|
Out<u32> out_update_version, |
||||
|
u64 application_id) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called. application_id={:016X}", application_id); |
||||
|
*out_update_required = false; |
||||
|
*out_update_version = 0; |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::CheckApplicationLaunchVersion(u64 application_id) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called. application_id={:016X}", application_id); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IApplicationManagerInterface::GetApplicationTerminateResult(Out<Result> out_result, |
||||
|
u64 application_id) { |
||||
|
LOG_WARNING(Service_NS, "(STUBBED) called. application_id={:016X}", application_id); |
||||
|
*out_result = ResultSuccess; |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Service::NS
|
||||
@ -0,0 +1,62 @@ |
|||||
|
// 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/language.h" |
||||
|
#include "core/hle/service/ns/ns_types.h" |
||||
|
#include "core/hle/service/os/event.h" |
||||
|
#include "core/hle/service/service.h" |
||||
|
|
||||
|
namespace Service::NS { |
||||
|
|
||||
|
class IApplicationManagerInterface final : public ServiceFramework<IApplicationManagerInterface> { |
||||
|
public: |
||||
|
explicit IApplicationManagerInterface(Core::System& system_); |
||||
|
~IApplicationManagerInterface() override; |
||||
|
|
||||
|
Result GetApplicationControlData(OutBuffer<BufferAttr_HipcMapAlias> out_buffer, |
||||
|
Out<u32> out_actual_size, |
||||
|
ApplicationControlSource application_control_source, |
||||
|
u64 application_id); |
||||
|
Result GetApplicationDesiredLanguage(Out<ApplicationLanguage> out_desired_language, |
||||
|
u32 supported_languages); |
||||
|
Result ConvertApplicationLanguageToLanguageCode(Out<u64> out_language_code, |
||||
|
ApplicationLanguage application_language); |
||||
|
Result ListApplicationRecord(OutArray<ApplicationRecord, BufferAttr_HipcMapAlias> out_records, |
||||
|
Out<s32> out_count, s32 offset); |
||||
|
Result GetApplicationRecordUpdateSystemEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); |
||||
|
Result GetGameCardMountFailureEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); |
||||
|
Result IsAnyApplicationEntityInstalled(Out<bool> out_is_any_application_entity_installed); |
||||
|
Result GetApplicationView( |
||||
|
OutArray<ApplicationView, BufferAttr_HipcMapAlias> out_application_views, |
||||
|
InArray<u64, BufferAttr_HipcMapAlias> application_ids); |
||||
|
Result GetApplicationViewWithPromotionInfo( |
||||
|
OutArray<ApplicationViewWithPromotionInfo, BufferAttr_HipcMapAlias> out_application_views, |
||||
|
InArray<u64, BufferAttr_HipcMapAlias> application_ids); |
||||
|
Result GetApplicationRightsOnClient( |
||||
|
OutArray<ApplicationRightsOnClient, BufferAttr_HipcMapAlias> out_rights, Out<u32> out_count, |
||||
|
Common::UUID account_id, u32 flags, u64 application_id); |
||||
|
Result CheckSdCardMountStatus(); |
||||
|
Result GetSdCardMountStatusChangedEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); |
||||
|
Result GetFreeSpaceSize(Out<s64> out_free_space_size, FileSys::StorageId storage_id); |
||||
|
Result GetGameCardUpdateDetectionEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); |
||||
|
Result ResumeAll(); |
||||
|
Result GetStorageSize(Out<s64> out_total_space_size, Out<s64> out_free_space_size, |
||||
|
FileSys::StorageId storage_id); |
||||
|
Result IsApplicationUpdateRequested(Out<bool> out_update_required, Out<u32> out_update_version, |
||||
|
u64 application_id); |
||||
|
Result CheckApplicationLaunchVersion(u64 application_id); |
||||
|
Result GetApplicationTerminateResult(Out<Result> out_result, u64 application_id); |
||||
|
|
||||
|
private: |
||||
|
KernelHelpers::ServiceContext service_context; |
||||
|
Event record_update_system_event; |
||||
|
Event sd_card_mount_status_event; |
||||
|
Event gamecard_update_detection_event; |
||||
|
Event gamecard_mount_status_event; |
||||
|
Event gamecard_mount_failure_event; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Service::NS |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue