// Copyright 2019 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include "common/common_types.h" #include "core/file_sys/control_metadata.h" #include "core/file_sys/romfs_factory.h" #include "core/hle/result.h" namespace Service::Glue { struct ApplicationLaunchProperty { u64 title_id; u32 version; FileSys::StorageId base_game_storage_id; FileSys::StorageId update_storage_id; u8 program_index; u8 reserved; }; static_assert(sizeof(ApplicationLaunchProperty) == 0x10, "ApplicationLaunchProperty has incorrect size."); // A class to manage state related to the arp:w and arp:r services, specifically the registration // and unregistration of launch and control properties. class ARPManager { public: ARPManager(); ~ARPManager(); // Returns the ApplicationLaunchProperty corresponding to the provided title ID if it was // previously registered, otherwise ERR_NOT_REGISTERED if it was never registered or // ERR_INVALID_PROCESS_ID if the title ID is 0. ResultVal GetLaunchProperty(u64 title_id) const; // Returns a vector of the raw bytes of NACP data (necessarily 0x4000 in size) corresponding to // the provided title ID if it was previously registered, otherwise ERR_NOT_REGISTERED if it was // never registered or ERR_INVALID_PROCESS_ID if the title ID is 0. ResultVal> GetControlProperty(u64 title_id) const; // Adds a new entry to the internal database with the provided parameters, returning // ERR_INVALID_ACCESS if attempting to re-register a title ID without an intermediate Unregister // step, and ERR_INVALID_PROCESS_ID if the title ID is 0. ResultCode Register(u64 title_id, ApplicationLaunchProperty launch, std::vector control); // Removes the registration for the provided title ID from the database, returning // ERR_NOT_REGISTERED if it doesn't exist in the database and ERR_INVALID_PROCESS_ID if the // title ID is 0. ResultCode Unregister(u64 title_id); // Removes all entries from the database, always succeeds. Should only be used when resetting // system state. void ResetAll(); private: struct MapEntry; std::map entries; }; } // namespace Service::Glue