summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/glue/manager.h
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-06-26 04:25:10 +0200
committerZach Hilman <zachhilman@gmail.com>2019-06-26 04:25:10 +0200
commitd10fc2d7277cf075f875fe2831501cb79c50e21a (patch)
treea1ef0e65dfd79f8badde8dcd24014432428c51f8 /src/core/hle/service/glue/manager.h
parentcore: Keep track of ARPManager and register current application on boot (diff)
downloadyuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.gz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.bz2
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.lz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.xz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.zst
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.zip
Diffstat (limited to 'src/core/hle/service/glue/manager.h')
-rw-r--r--src/core/hle/service/glue/manager.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/core/hle/service/glue/manager.h b/src/core/hle/service/glue/manager.h
index 561ebf4e0..a7f5ce3ee 100644
--- a/src/core/hle/service/glue/manager.h
+++ b/src/core/hle/service/glue/manager.h
@@ -4,6 +4,9 @@
#pragma once
+#include <map>
+#include <vector>
+#include "common/common_types.h"
#include "core/file_sys/control_metadata.h"
#include "core/file_sys/romfs_factory.h"
#include "core/hle/result.h"
@@ -15,31 +18,45 @@ struct ApplicationLaunchProperty {
u32 version;
FileSys::StorageId base_game_storage_id;
FileSys::StorageId update_storage_id;
- INSERT_PADDING_BYTES(0x2);
+ 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<ApplicationLaunchProperty> 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<std::vector<u8>> 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<u8> 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 {
- ApplicationLaunchProperty launch;
- std::vector<u8> control;
- };
-
+ struct MapEntry;
std::map<u64, MapEntry> entries;
};