mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-08-06 08:08:59 +00:00
sf: Begin experimenting with new interface declaration format
This commit is contained in:
parent
b08ccd7341
commit
c174d12216
25 changed files with 505 additions and 723 deletions
|
@ -19,33 +19,14 @@
|
||||||
|
|
||||||
namespace ams::erpt::sf {
|
namespace ams::erpt::sf {
|
||||||
|
|
||||||
class IAttachment : public ams::sf::IServiceObject {
|
#define AMS_ERPT_I_ATTACHMENT_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, Open, (const AttachmentId &attachment_id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, Read, (ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer)) \
|
||||||
Open = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, SetFlags, (AttachmentFlagSet flags)) \
|
||||||
Read = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, GetFlags, (ams::sf::Out<AttachmentFlagSet> out)) \
|
||||||
SetFlags = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, Close, ()) \
|
||||||
GetFlags = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, GetSize, (ams::sf::Out<s64> out))
|
||||||
Close = 4,
|
|
||||||
GetSize = 5,
|
AMS_SF_DEFINE_INTERFACE(IAttachment, AMS_ERPT_I_ATTACHMENT_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result Open(const AttachmentId &attachment_id) = 0;
|
|
||||||
virtual Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer) = 0;
|
|
||||||
virtual Result SetFlags(AttachmentFlagSet flags) = 0;
|
|
||||||
virtual Result GetFlags(ams::sf::Out<AttachmentFlagSet> out) = 0;
|
|
||||||
virtual Result Close() = 0;
|
|
||||||
virtual Result GetSize(ams::sf::Out<s64> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(Open),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Read),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SetFlags),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetFlags),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Close),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetSize),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -22,48 +22,20 @@
|
||||||
|
|
||||||
namespace ams::erpt::sf {
|
namespace ams::erpt::sf {
|
||||||
|
|
||||||
class IContext : public ams::sf::IServiceObject {
|
#define AMS_ERPT_I_CONTEXT_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, SubmitContext, (const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, CreateReport, (ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer, const ams::sf::InBuffer &meta_buffer)) \
|
||||||
SubmitContext = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, SetInitialLaunchSettingsCompletionTime, (const time::SteadyClockTimePoint &time_point), hos::Version_3_0_0) \
|
||||||
CreateReport = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, ClearInitialLaunchSettingsCompletionTime, (), hos::Version_3_0_0) \
|
||||||
SetInitialLaunchSettingsCompletionTime = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, UpdatePowerOnTime, (), hos::Version_3_0_0) \
|
||||||
ClearInitialLaunchSettingsCompletionTime = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, UpdateAwakeTime, (), hos::Version_3_0_0) \
|
||||||
UpdatePowerOnTime = 4,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, SubmitMultipleCategoryContext, (const MultipleCategoryContextEntry &ctx_entry, const ams::sf::InBuffer &str_buffer), hos::Version_5_0_0) \
|
||||||
UpdateAwakeTime = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, UpdateApplicationLaunchTime, (), hos::Version_6_0_0) \
|
||||||
SubmitMultipleCategoryContext = 6,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, ClearApplicationLaunchTime, (), hos::Version_6_0_0) \
|
||||||
UpdateApplicationLaunchTime = 7,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, SubmitAttachment, (ams::sf::Out<AttachmentId> out, const ams::sf::InBuffer &attachment_name, const ams::sf::InBuffer &attachment_data), hos::Version_8_0_0) \
|
||||||
ClearApplicationLaunchTime = 8,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, CreateReportWithAttachments, (ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer, const ams::sf::InBuffer &attachment_ids_buffer), hos::Version_8_0_0)
|
||||||
SubmitAttachment = 9,
|
|
||||||
CreateReportWithAttachments = 10,
|
|
||||||
};
|
AMS_SF_DEFINE_INTERFACE(IContext, AMS_ERPT_I_CONTEXT_INTERFACE_INFO)
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result SubmitContext(const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer) = 0;
|
|
||||||
virtual Result CreateReport(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer, const ams::sf::InBuffer &meta_buffer) = 0;
|
|
||||||
virtual Result SetInitialLaunchSettingsCompletionTime(const time::SteadyClockTimePoint &time_point) = 0;
|
|
||||||
virtual Result ClearInitialLaunchSettingsCompletionTime() = 0;
|
|
||||||
virtual Result UpdatePowerOnTime() = 0;
|
|
||||||
virtual Result UpdateAwakeTime() = 0;
|
|
||||||
virtual Result SubmitMultipleCategoryContext(const MultipleCategoryContextEntry &ctx_entry, const ams::sf::InBuffer &str_buffer) = 0;
|
|
||||||
virtual Result UpdateApplicationLaunchTime() = 0;
|
|
||||||
virtual Result ClearApplicationLaunchTime() = 0;
|
|
||||||
virtual Result SubmitAttachment(ams::sf::Out<AttachmentId> out, const ams::sf::InBuffer &attachment_name, const ams::sf::InBuffer &attachment_data) = 0;
|
|
||||||
virtual Result CreateReportWithAttachments(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &str_buffer, const ams::sf::InBuffer &attachment_ids_buffer) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(SubmitContext),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CreateReport),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SetInitialLaunchSettingsCompletionTime, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ClearInitialLaunchSettingsCompletionTime, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UpdatePowerOnTime, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UpdateAwakeTime, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SubmitMultipleCategoryContext, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UpdateApplicationLaunchTime, hos::Version_6_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ClearApplicationLaunchTime, hos::Version_6_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SubmitAttachment, hos::Version_8_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CreateReportWithAttachments, hos::Version_8_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -19,33 +19,15 @@
|
||||||
|
|
||||||
namespace ams::erpt::sf {
|
namespace ams::erpt::sf {
|
||||||
|
|
||||||
class IManager : public ams::sf::IServiceObject {
|
#define AMS_ERPT_I_MANAGER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, GetReportList, (const ams::sf::OutBuffer &out_list, ReportType type_filter)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, GetEvent, (ams::sf::OutCopyHandle out)) \
|
||||||
GetReportList = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, CleanupReports, (), hos::Version_4_0_0) \
|
||||||
GetEvent = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, DeleteReport, (const ReportId &report_id), hos::Version_5_0_0) \
|
||||||
CleanupReports = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, GetStorageUsageStatistics, (ams::sf::Out<StorageUsageStatistics> out), hos::Version_5_0_0) \
|
||||||
DeleteReport = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, GetAttachmentList, (const ams::sf::OutBuffer &out_buf, const ReportId &report_id), hos::Version_8_0_0)
|
||||||
GetStorageUsageStatistics = 4,
|
|
||||||
GetAttachmentList = 5,
|
|
||||||
};
|
AMS_SF_DEFINE_INTERFACE(IManager, AMS_ERPT_I_MANAGER_INTERFACE_INFO)
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result GetReportList(const ams::sf::OutBuffer &out_list, ReportType type_filter) = 0;
|
|
||||||
virtual Result GetEvent(ams::sf::OutCopyHandle out) = 0;
|
|
||||||
virtual Result CleanupReports() = 0;
|
|
||||||
virtual Result DeleteReport(const ReportId &report_id) = 0;
|
|
||||||
virtual Result GetStorageUsageStatistics(ams::sf::Out<StorageUsageStatistics> out) = 0;
|
|
||||||
virtual Result GetAttachmentList(const ams::sf::OutBuffer &out_buf, const ReportId &report_id) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetReportList),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetEvent),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CleanupReports, hos::Version_4_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(DeleteReport, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetStorageUsageStatistics, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetAttachmentList, hos::Version_8_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -19,33 +19,15 @@
|
||||||
|
|
||||||
namespace ams::erpt::sf {
|
namespace ams::erpt::sf {
|
||||||
|
|
||||||
class IReport : public ams::sf::IServiceObject {
|
#define AMS_ERPT_I_REPORT_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, Open, (const ReportId &report_id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, Read, (ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer)) \
|
||||||
Open = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, SetFlags, (ReportFlagSet flags)) \
|
||||||
Read = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, GetFlags, (ams::sf::Out<ReportFlagSet> out)) \
|
||||||
SetFlags = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, Close, ()) \
|
||||||
GetFlags = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, GetSize, (ams::sf::Out<s64> out))
|
||||||
Close = 4,
|
|
||||||
GetSize = 5,
|
|
||||||
};
|
AMS_SF_DEFINE_INTERFACE(IReport, AMS_ERPT_I_REPORT_INTERFACE_INFO)
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result Open(const ReportId &report_id) = 0;
|
|
||||||
virtual Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer) = 0;
|
|
||||||
virtual Result SetFlags(ReportFlagSet flags) = 0;
|
|
||||||
virtual Result GetFlags(ams::sf::Out<ReportFlagSet> out) = 0;
|
|
||||||
virtual Result Close() = 0;
|
|
||||||
virtual Result GetSize(ams::sf::Out<s64> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(Open),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Read),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SetFlags),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetFlags),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Close),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetSize),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -22,24 +22,11 @@
|
||||||
|
|
||||||
namespace ams::erpt::sf {
|
namespace ams::erpt::sf {
|
||||||
|
|
||||||
class ISession : public ams::sf::IServiceObject {
|
#define AMS_ERPT_I_SESSION_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, OpenReport, (ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, OpenManager, (ams::sf::Out<std::shared_ptr<erpt::sf::IManager>> out)) \
|
||||||
OpenReport = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, OpenAttachment, (ams::sf::Out<std::shared_ptr<erpt::sf::IAttachment>> out), hos::Version_8_0_0)
|
||||||
OpenManager = 1,
|
|
||||||
OpenAttachment = 2,
|
AMS_SF_DEFINE_INTERFACE(ISession, AMS_ERPT_I_SESSION_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result OpenReport(ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out) = 0;
|
|
||||||
virtual Result OpenManager(ams::sf::Out<std::shared_ptr<erpt::sf::IManager>> out) = 0;
|
|
||||||
virtual Result OpenAttachment(ams::sf::Out<std::shared_ptr<erpt::sf::IAttachment>> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenReport),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenManager),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenAttachment, hos::Version_8_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -60,6 +60,4 @@ namespace ams::hos {
|
||||||
Version_Max = ::ams::TargetFirmware_Max,
|
Version_Max = ::ams::TargetFirmware_Max,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,34 +19,14 @@
|
||||||
|
|
||||||
namespace ams::lr {
|
namespace ams::lr {
|
||||||
|
|
||||||
class IAddOnContentLocationResolver : public sf::IServiceObject {
|
#define AMS_LR_I_ADD_ON_CONTENT_LOCATION_RESOLVER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, ResolveAddOnContentPath, (sf::Out<Path> out, ncm::DataId id), hos::Version_2_0_0) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, RegisterAddOnContentStorageDeprecated, (ncm::DataId id, ncm::StorageId storage_id), hos::Version_2_0_0, hos::Version_8_1_1) \
|
||||||
ResolveAddOnContentPath = 0,
|
AMS_SF_METHOD_INFO(C, H, 1, Result, RegisterAddOnContentStorage, (ncm::DataId id, ncm::ApplicationId application_id, ncm::StorageId storage_id), hos::Version_9_0_0) \
|
||||||
RegisterAddOnContentStorageDeprecated = 1,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, UnregisterAllAddOnContentPath, (), hos::Version_2_0_0) \
|
||||||
RegisterAddOnContentStorage = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, RefreshApplicationAddOnContent, (const sf::InArray<ncm::ApplicationId> &ids), hos::Version_9_0_0) \
|
||||||
UnregisterAllAddOnContentPath = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, UnregisterApplicationAddOnContent, (ncm::ApplicationId id), hos::Version_9_0_0)
|
||||||
RefreshApplicationAddOnContent = 3,
|
|
||||||
UnregisterApplicationAddOnContent = 4,
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result ResolveAddOnContentPath(sf::Out<Path> out, ncm::DataId id) = 0;
|
|
||||||
virtual Result RegisterAddOnContentStorageDeprecated(ncm::DataId id, ncm::StorageId storage_id) = 0;
|
|
||||||
virtual Result RegisterAddOnContentStorage(ncm::DataId id, ncm::ApplicationId application_id, ncm::StorageId storage_id) = 0;
|
|
||||||
virtual Result UnregisterAllAddOnContentPath() = 0;
|
|
||||||
virtual Result RefreshApplicationAddOnContent(const sf::InArray<ncm::ApplicationId> &ids) = 0;
|
|
||||||
virtual Result UnregisterApplicationAddOnContent(ncm::ApplicationId id) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveAddOnContentPath, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterAddOnContentStorageDeprecated, hos::Version_2_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterAddOnContentStorage, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UnregisterAllAddOnContentPath, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RefreshApplicationAddOnContent, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UnregisterApplicationAddOnContent, hos::Version_9_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
AMS_SF_DEFINE_INTERFACE(IAddOnContentLocationResolver, AMS_LR_I_ADD_ON_CONTENT_LOCATION_RESOLVER_INTERFACE_INFO)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,97 +19,35 @@
|
||||||
|
|
||||||
namespace ams::lr {
|
namespace ams::lr {
|
||||||
|
|
||||||
class ILocationResolver : public sf::IServiceObject {
|
#define AMS_LR_I_LOCATION_RESOLVER_INTERFACE_INFO(C, H) \
|
||||||
NON_COPYABLE(ILocationResolver);
|
AMS_SF_METHOD_INFO(C, H, 0, Result, ResolveProgramPath, (sf::Out<Path> out, ncm::ProgramId id)) \
|
||||||
NON_MOVEABLE(ILocationResolver);
|
AMS_SF_METHOD_INFO(C, H, 1, Result, RedirectProgramPath, (const Path &path, ncm::ProgramId id)) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 2, Result, ResolveApplicationControlPath, (sf::Out<Path> out, ncm::ProgramId id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 3, Result, ResolveApplicationHtmlDocumentPath, (sf::Out<Path> out, ncm::ProgramId id)) \
|
||||||
ResolveProgramPath = 0,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, ResolveDataPath, (sf::Out<Path> out, ncm::DataId id)) \
|
||||||
RedirectProgramPath = 1,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, RedirectApplicationControlPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_1_0_0, hos::Version_8_1_1) \
|
||||||
ResolveApplicationControlPath = 2,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, RedirectApplicationControlPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
ResolveApplicationHtmlDocumentPath = 3,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, RedirectApplicationHtmlDocumentPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_1_0_0, hos::Version_8_1_1) \
|
||||||
ResolveDataPath = 4,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, RedirectApplicationHtmlDocumentPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RedirectApplicationControlPathDeprecated = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, ResolveApplicationLegalInformationPath, (sf::Out<Path> out, ncm::ProgramId id)) \
|
||||||
RedirectApplicationControlPath = 5,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, RedirectApplicationLegalInformationPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_1_0_0, hos::Version_8_1_1) \
|
||||||
RedirectApplicationHtmlDocumentPathDeprecated = 6,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, RedirectApplicationLegalInformationPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RedirectApplicationHtmlDocumentPath = 6,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, Refresh, ()) \
|
||||||
ResolveApplicationLegalInformationPath = 7,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, RedirectApplicationProgramPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_5_0_0, hos::Version_8_1_1) \
|
||||||
RedirectApplicationLegalInformationPathDeprecated = 8,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, RedirectApplicationProgramPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RedirectApplicationLegalInformationPath = 8,
|
AMS_SF_METHOD_INFO(C, H, 11, Result, ClearApplicationRedirectionDeprecated, (), hos::Version_5_0_0, hos::Version_8_1_1) \
|
||||||
Refresh = 9,
|
AMS_SF_METHOD_INFO(C, H, 11, Result, ClearApplicationRedirection, (const sf::InArray<ncm::ProgramId> &excluding_ids), hos::Version_9_0_0) \
|
||||||
RedirectApplicationProgramPathDeprecated = 10,
|
AMS_SF_METHOD_INFO(C, H, 12, Result, EraseProgramRedirection, (ncm::ProgramId id), hos::Version_5_0_0) \
|
||||||
RedirectApplicationProgramPath = 10,
|
AMS_SF_METHOD_INFO(C, H, 13, Result, EraseApplicationControlRedirection, (ncm::ProgramId id), hos::Version_5_0_0) \
|
||||||
ClearApplicationRedirectionDeprecated = 11,
|
AMS_SF_METHOD_INFO(C, H, 14, Result, EraseApplicationHtmlDocumentRedirection, (ncm::ProgramId id), hos::Version_5_0_0) \
|
||||||
ClearApplicationRedirection = 11,
|
AMS_SF_METHOD_INFO(C, H, 15, Result, EraseApplicationLegalInformationRedirection, (ncm::ProgramId id), hos::Version_5_0_0) \
|
||||||
EraseProgramRedirection = 12,
|
AMS_SF_METHOD_INFO(C, H, 16, Result, ResolveProgramPathForDebug, (sf::Out<Path> out, ncm::ProgramId id), hos::Version_7_0_0) \
|
||||||
EraseApplicationControlRedirection = 13,
|
AMS_SF_METHOD_INFO(C, H, 17, Result, RedirectProgramPathForDebug, (const Path &path, ncm::ProgramId id), hos::Version_7_0_0) \
|
||||||
EraseApplicationHtmlDocumentRedirection = 14,
|
AMS_SF_METHOD_INFO(C, H, 18, Result, RedirectApplicationProgramPathForDebugDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_7_0_0, hos::Version_8_1_1) \
|
||||||
EraseApplicationLegalInformationRedirection = 15,
|
AMS_SF_METHOD_INFO(C, H, 18, Result, RedirectApplicationProgramPathForDebug, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
ResolveProgramPathForDebug = 16,
|
AMS_SF_METHOD_INFO(C, H, 19, Result, EraseProgramRedirectionForDebug, (ncm::ProgramId id), hos::Version_7_0_0)
|
||||||
RedirectProgramPathForDebug = 17,
|
|
||||||
RedirectApplicationProgramPathForDebugDeprecated = 18,
|
|
||||||
RedirectApplicationProgramPathForDebug = 18,
|
AMS_SF_DEFINE_INTERFACE(ILocationResolver, AMS_LR_I_LOCATION_RESOLVER_INTERFACE_INFO)
|
||||||
EraseProgramRedirectionForDebug = 19,
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
ILocationResolver() { /* ... */ }
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::DataId id) = 0;
|
|
||||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result Refresh() = 0;
|
|
||||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result ClearApplicationRedirectionDeprecated() = 0;
|
|
||||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) = 0;
|
|
||||||
virtual Result EraseProgramRedirection(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId id) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectProgramPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveApplicationControlPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveApplicationHtmlDocumentPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveDataPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationControlPathDeprecated, hos::Version_1_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationControlPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationHtmlDocumentPathDeprecated, hos::Version_1_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationHtmlDocumentPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveApplicationLegalInformationPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationLegalInformationPathDeprecated, hos::Version_1_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationLegalInformationPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Refresh),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationProgramPathDeprecated, hos::Version_5_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationProgramPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ClearApplicationRedirectionDeprecated, hos::Version_5_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ClearApplicationRedirection, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EraseProgramRedirection, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EraseApplicationControlRedirection, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EraseApplicationHtmlDocumentRedirection, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EraseApplicationLegalInformationRedirection, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPathForDebug, hos::Version_7_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectProgramPathForDebug, hos::Version_7_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationProgramPathForDebugDeprecated, hos::Version_7_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectApplicationProgramPathForDebug, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EraseProgramRedirectionForDebug, hos::Version_7_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,20 +22,12 @@
|
||||||
|
|
||||||
namespace ams::lr {
|
namespace ams::lr {
|
||||||
|
|
||||||
class ILocationResolverManager : public sf::IServiceObject {
|
#define AMS_LR_I_LOCATION_RESOLVER_MANAGER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, OpenLocationResolver, (sf::Out<std::shared_ptr<ILocationResolver>> out, ncm::StorageId storage_id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, OpenRegisteredLocationResolver, (sf::Out<std::shared_ptr<IRegisteredLocationResolver>> out)) \
|
||||||
OpenLocationResolver = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, RefreshLocationResolver, (ncm::StorageId storage_id)) \
|
||||||
OpenRegisteredLocationResolver = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, OpenAddOnContentLocationResolver, (sf::Out<std::shared_ptr<IAddOnContentLocationResolver>> out), hos::Version_2_0_0)
|
||||||
RefreshLocationResolver = 2,
|
|
||||||
OpenAddOnContentLocationResolver = 3,
|
AMS_SF_DEFINE_INTERFACE(ILocationResolverManager, AMS_LR_I_LOCATION_RESOLVER_MANAGER_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result OpenLocationResolver(sf::Out<std::shared_ptr<ILocationResolver>> out, ncm::StorageId storage_id) = 0;
|
|
||||||
virtual Result OpenRegisteredLocationResolver(sf::Out<std::shared_ptr<IRegisteredLocationResolver>> out) = 0;
|
|
||||||
virtual Result RefreshLocationResolver(ncm::StorageId storage_id) = 0;
|
|
||||||
virtual Result OpenAddOnContentLocationResolver(sf::Out<std::shared_ptr<IAddOnContentLocationResolver>> out) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,57 +19,22 @@
|
||||||
|
|
||||||
namespace ams::lr {
|
namespace ams::lr {
|
||||||
|
|
||||||
class IRegisteredLocationResolver : public sf::IServiceObject {
|
#define AMS_LR_I_REGISTERED_LOCATION_RESOLVER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, ResolveProgramPath, (sf::Out<Path> out, ncm::ProgramId id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, RegisterProgramPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_1_0_0, hos::Version_8_1_1) \
|
||||||
ResolveProgramPath = 0,
|
AMS_SF_METHOD_INFO(C, H, 1, Result, RegisterProgramPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RegisterProgramPathDeprecated = 1,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, UnregisterProgramPath, (ncm::ProgramId id)) \
|
||||||
RegisterProgramPath = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, RedirectProgramPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_1_0_0, hos::Version_8_1_1) \
|
||||||
UnregisterProgramPath = 2,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, RedirectProgramPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RedirectProgramPathDeprecated = 3,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, ResolveHtmlDocumentPath, (sf::Out<Path> out, ncm::ProgramId id), hos::Version_2_0_0) \
|
||||||
RedirectProgramPath = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, RegisterHtmlDocumentPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_2_0_0, hos::Version_8_1_1) \
|
||||||
ResolveHtmlDocumentPath = 4,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, RegisterHtmlDocumentPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RegisterHtmlDocumentPathDeprecated = 5,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, UnregisterHtmlDocumentPath, (ncm::ProgramId id), hos::Version_2_0_0) \
|
||||||
RegisterHtmlDocumentPath = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, RedirectHtmlDocumentPathDeprecated, (const Path &path, ncm::ProgramId id), hos::Version_2_0_0, hos::Version_8_1_1) \
|
||||||
UnregisterHtmlDocumentPath = 6,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, RedirectHtmlDocumentPath, (const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id), hos::Version_9_0_0) \
|
||||||
RedirectHtmlDocumentPathDeprecated = 7,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, Refresh, (), hos::Version_7_0_0) \
|
||||||
RedirectHtmlDocumentPath = 7,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, RefreshExcluding, (const sf::InArray<ncm::ProgramId> &ids), hos::Version_9_0_0)
|
||||||
Refresh = 8,
|
|
||||||
RefreshExcluding = 9,
|
AMS_SF_DEFINE_INTERFACE(IRegisteredLocationResolver, AMS_LR_I_REGISTERED_LOCATION_RESOLVER_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RegisterProgramPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RegisterProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result UnregisterProgramPath(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectProgramPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result ResolveHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RegisterHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RegisterHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result UnregisterHtmlDocumentPath(ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
|
||||||
virtual Result RedirectHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
|
||||||
virtual Result Refresh() = 0;
|
|
||||||
virtual Result RefreshExcluding(const sf::InArray<ncm::ProgramId> &ids) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterProgramPathDeprecated, hos::Version_1_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterProgramPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UnregisterProgramPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectProgramPathDeprecated, hos::Version_1_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectProgramPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ResolveHtmlDocumentPath, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterHtmlDocumentPathDeprecated, hos::Version_2_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RegisterHtmlDocumentPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(UnregisterHtmlDocumentPath, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectHtmlDocumentPathDeprecated, hos::Version_2_0_0, hos::Version_8_1_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RedirectHtmlDocumentPath, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Refresh, hos::Version_7_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RefreshExcluding, hos::Version_9_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace ams::lr {
|
namespace ams::lr {
|
||||||
|
|
||||||
class LocationResolverManagerImpl final : public ILocationResolverManager {
|
class LocationResolverManagerImpl final {
|
||||||
private:
|
private:
|
||||||
/* Resolver storage. */
|
/* Resolver storage. */
|
||||||
ncm::BoundedMap<ncm::StorageId, std::shared_ptr<ILocationResolver>, 5> location_resolvers;
|
ncm::BoundedMap<ncm::StorageId, std::shared_ptr<ILocationResolver>, 5> location_resolvers;
|
||||||
|
@ -31,17 +31,11 @@ namespace ams::lr {
|
||||||
os::Mutex mutex{false};
|
os::Mutex mutex{false};
|
||||||
public:
|
public:
|
||||||
/* Actual commands. */
|
/* Actual commands. */
|
||||||
virtual Result OpenLocationResolver(sf::Out<std::shared_ptr<ILocationResolver>> out, ncm::StorageId storage_id) override;
|
Result OpenLocationResolver(sf::Out<std::shared_ptr<ILocationResolver>> out, ncm::StorageId storage_id);
|
||||||
virtual Result OpenRegisteredLocationResolver(sf::Out<std::shared_ptr<IRegisteredLocationResolver>> out) override;
|
Result OpenRegisteredLocationResolver(sf::Out<std::shared_ptr<IRegisteredLocationResolver>> out);
|
||||||
virtual Result RefreshLocationResolver(ncm::StorageId storage_id) override;
|
Result RefreshLocationResolver(ncm::StorageId storage_id);
|
||||||
virtual Result OpenAddOnContentLocationResolver(sf::Out<std::shared_ptr<IAddOnContentLocationResolver>> out) override;
|
Result OpenAddOnContentLocationResolver(sf::Out<std::shared_ptr<IAddOnContentLocationResolver>> out);
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenLocationResolver),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenRegisteredLocationResolver),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RefreshLocationResolver),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenAddOnContentLocationResolver, hos::Version_2_0_0),
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
static_assert(IsILocationResolverManager<LocationResolverManagerImpl>);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace ams::ncm {
|
||||||
};
|
};
|
||||||
static_assert(util::is_pod<SystemSaveDataInfo>::value);
|
static_assert(util::is_pod<SystemSaveDataInfo>::value);
|
||||||
|
|
||||||
class ContentManagerImpl final : public IContentManager {
|
class ContentManagerImpl final {
|
||||||
private:
|
private:
|
||||||
constexpr static size_t MaxContentStorageRoots = 8;
|
constexpr static size_t MaxContentStorageRoots = 8;
|
||||||
constexpr static size_t MaxContentMetaDatabaseRoots = 8;
|
constexpr static size_t MaxContentMetaDatabaseRoots = 8;
|
||||||
|
@ -131,21 +131,22 @@ namespace ams::ncm {
|
||||||
Result EnsureAndMountSystemSaveData(const char *mount, const SystemSaveDataInfo &info) const;
|
Result EnsureAndMountSystemSaveData(const char *mount, const SystemSaveDataInfo &info) const;
|
||||||
public:
|
public:
|
||||||
/* Actual commands. */
|
/* Actual commands. */
|
||||||
virtual Result CreateContentStorage(StorageId storage_id) override;
|
Result CreateContentStorage(StorageId storage_id);
|
||||||
virtual Result CreateContentMetaDatabase(StorageId storage_id) override;
|
Result CreateContentMetaDatabase(StorageId storage_id);
|
||||||
virtual Result VerifyContentStorage(StorageId storage_id) override;
|
Result VerifyContentStorage(StorageId storage_id);
|
||||||
virtual Result VerifyContentMetaDatabase(StorageId storage_id) override;
|
Result VerifyContentMetaDatabase(StorageId storage_id);
|
||||||
virtual Result OpenContentStorage(sf::Out<std::shared_ptr<IContentStorage>> out, StorageId storage_id) override;
|
Result OpenContentStorage(sf::Out<std::shared_ptr<IContentStorage>> out, StorageId storage_id);
|
||||||
virtual Result OpenContentMetaDatabase(sf::Out<std::shared_ptr<IContentMetaDatabase>> out, StorageId storage_id) override;
|
Result OpenContentMetaDatabase(sf::Out<std::shared_ptr<IContentMetaDatabase>> out, StorageId storage_id);
|
||||||
virtual Result CloseContentStorageForcibly(StorageId storage_id) override;
|
Result CloseContentStorageForcibly(StorageId storage_id);
|
||||||
virtual Result CloseContentMetaDatabaseForcibly(StorageId storage_id) override;
|
Result CloseContentMetaDatabaseForcibly(StorageId storage_id);
|
||||||
virtual Result CleanupContentMetaDatabase(StorageId storage_id) override;
|
Result CleanupContentMetaDatabase(StorageId storage_id);
|
||||||
virtual Result ActivateContentStorage(StorageId storage_id) override;
|
Result ActivateContentStorage(StorageId storage_id);
|
||||||
virtual Result InactivateContentStorage(StorageId storage_id) override;
|
Result InactivateContentStorage(StorageId storage_id);
|
||||||
virtual Result ActivateContentMetaDatabase(StorageId storage_id) override;
|
Result ActivateContentMetaDatabase(StorageId storage_id);
|
||||||
virtual Result InactivateContentMetaDatabase(StorageId storage_id) override;
|
Result InactivateContentMetaDatabase(StorageId storage_id);
|
||||||
virtual Result InvalidateRightsIdCache() override;
|
Result InvalidateRightsIdCache();
|
||||||
virtual Result GetMemoryReport(sf::Out<MemoryReport> out) override;
|
Result GetMemoryReport(sf::Out<MemoryReport> out);
|
||||||
};
|
};
|
||||||
|
static_assert(IsIContentManager<ContentManagerImpl>);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,59 +20,23 @@
|
||||||
|
|
||||||
namespace ams::ncm {
|
namespace ams::ncm {
|
||||||
|
|
||||||
class IContentManager : public sf::IServiceObject {
|
#define AMS_NCM_I_CONTENT_MANAGER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, CreateContentStorage, (StorageId storage_id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, CreateContentMetaDatabase, (StorageId storage_id)) \
|
||||||
CreateContentStorage = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, VerifyContentStorage, (StorageId storage_id)) \
|
||||||
CreateContentMetaDatabase = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, VerifyContentMetaDatabase, (StorageId storage_id)) \
|
||||||
VerifyContentStorage = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, OpenContentStorage, (sf::Out<std::shared_ptr<IContentStorage>> out, StorageId storage_id)) \
|
||||||
VerifyContentMetaDatabase = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, OpenContentMetaDatabase, (sf::Out<std::shared_ptr<IContentMetaDatabase>> out, StorageId storage_id)) \
|
||||||
OpenContentStorage = 4,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, CloseContentStorageForcibly, (StorageId storage_id), hos::Version_1_0_0, hos::Version_1_0_0) \
|
||||||
OpenContentMetaDatabase = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, CloseContentMetaDatabaseForcibly, (StorageId storage_id), hos::Version_1_0_0, hos::Version_1_0_0) \
|
||||||
CloseContentStorageForcibly = 6,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, CleanupContentMetaDatabase, (StorageId storage_id)) \
|
||||||
CloseContentMetaDatabaseForcibly = 7,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, ActivateContentStorage, (StorageId storage_id), hos::Version_2_0_0) \
|
||||||
CleanupContentMetaDatabase = 8,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, InactivateContentStorage, (StorageId storage_id), hos::Version_2_0_0) \
|
||||||
ActivateContentStorage = 9,
|
AMS_SF_METHOD_INFO(C, H, 11, Result, ActivateContentMetaDatabase, (StorageId storage_id), hos::Version_2_0_0) \
|
||||||
InactivateContentStorage = 10,
|
AMS_SF_METHOD_INFO(C, H, 12, Result, InactivateContentMetaDatabase, (StorageId storage_id), hos::Version_2_0_0) \
|
||||||
ActivateContentMetaDatabase = 11,
|
AMS_SF_METHOD_INFO(C, H, 13, Result, InvalidateRightsIdCache, (), hos::Version_9_0_0) \
|
||||||
InactivateContentMetaDatabase = 12,
|
AMS_SF_METHOD_INFO(C, H, 14, Result, GetMemoryReport, (sf::Out<MemoryReport> out), hos::Version_10_0_0)
|
||||||
InvalidateRightsIdCache = 13,
|
|
||||||
GetMemoryReport = 14,
|
AMS_SF_DEFINE_INTERFACE(IContentManager, AMS_NCM_I_CONTENT_MANAGER_INTERFACE_INFO);
|
||||||
};
|
|
||||||
public:
|
|
||||||
virtual Result CreateContentStorage(StorageId storage_id) = 0;
|
|
||||||
virtual Result CreateContentMetaDatabase(StorageId storage_id) = 0;
|
|
||||||
virtual Result VerifyContentStorage(StorageId storage_id) = 0;
|
|
||||||
virtual Result VerifyContentMetaDatabase(StorageId storage_id) = 0;
|
|
||||||
virtual Result OpenContentStorage(sf::Out<std::shared_ptr<IContentStorage>> out, StorageId storage_id) = 0;
|
|
||||||
virtual Result OpenContentMetaDatabase(sf::Out<std::shared_ptr<IContentMetaDatabase>> out, StorageId storage_id) = 0;
|
|
||||||
virtual Result CloseContentStorageForcibly(StorageId storage_id) = 0;
|
|
||||||
virtual Result CloseContentMetaDatabaseForcibly(StorageId storage_id) = 0;
|
|
||||||
virtual Result CleanupContentMetaDatabase(StorageId storage_id) = 0;
|
|
||||||
virtual Result ActivateContentStorage(StorageId storage_id) = 0;
|
|
||||||
virtual Result InactivateContentStorage(StorageId storage_id) = 0;
|
|
||||||
virtual Result ActivateContentMetaDatabase(StorageId storage_id) = 0;
|
|
||||||
virtual Result InactivateContentMetaDatabase(StorageId storage_id) = 0;
|
|
||||||
virtual Result InvalidateRightsIdCache() = 0;
|
|
||||||
virtual Result GetMemoryReport(sf::Out<MemoryReport> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(CreateContentStorage),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CreateContentMetaDatabase),
|
|
||||||
MAKE_SERVICE_COMMAND_META(VerifyContentStorage),
|
|
||||||
MAKE_SERVICE_COMMAND_META(VerifyContentMetaDatabase),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenContentStorage),
|
|
||||||
MAKE_SERVICE_COMMAND_META(OpenContentMetaDatabase),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CloseContentStorageForcibly, hos::Version_1_0_0, hos::Version_1_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CloseContentMetaDatabaseForcibly, hos::Version_1_0_0, hos::Version_1_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CleanupContentMetaDatabase),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ActivateContentStorage, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(InactivateContentStorage, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ActivateContentMetaDatabase, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(InactivateContentMetaDatabase, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(InvalidateRightsIdCache, hos::Version_9_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetMemoryReport, hos::Version_10_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,84 +19,31 @@
|
||||||
|
|
||||||
namespace ams::ncm {
|
namespace ams::ncm {
|
||||||
|
|
||||||
class IContentMetaDatabase : public sf::IServiceObject {
|
#define AMS_NCM_I_CONTENT_META_DATABASE_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, Set, (const ContentMetaKey &key, sf::InBuffer value)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, Get, (sf::Out<u64> out_size, const ContentMetaKey &key, sf::OutBuffer out_value)) \
|
||||||
Set = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, Remove, (const ContentMetaKey &key)) \
|
||||||
Get = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, GetContentIdByType, (sf::Out<ContentId> out_content_id, const ContentMetaKey &key, ContentType type)) \
|
||||||
Remove = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, ListContentInfo, (sf::Out<s32> out_entries_written, const sf::OutArray<ContentInfo> &out_info, const ContentMetaKey &key, s32 offset)) \
|
||||||
GetContentIdByType = 3,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, List, (sf::Out<s32> out_entries_total, sf::Out<s32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType meta_type, ApplicationId application_id, u64 min, u64 max, ContentInstallType install_type)) \
|
||||||
ListContentInfo = 4,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, GetLatestContentMetaKey, (sf::Out<ContentMetaKey> out_key, u64 id)) \
|
||||||
List = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, ListApplication, (sf::Out<s32> out_entries_total, sf::Out<s32> out_entries_written, const sf::OutArray<ApplicationContentMetaKey> &out_keys, ContentMetaType meta_type)) \
|
||||||
GetLatestContentMetaKey = 6,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, Has, (sf::Out<bool> out, const ContentMetaKey &key)) \
|
||||||
ListApplication = 7,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, HasAll, (sf::Out<bool> out, const sf::InArray<ContentMetaKey> &keys)) \
|
||||||
Has = 8,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, GetSize, (sf::Out<u64> out_size, const ContentMetaKey &key)) \
|
||||||
HasAll = 9,
|
AMS_SF_METHOD_INFO(C, H, 11, Result, GetRequiredSystemVersion, (sf::Out<u32> out_version, const ContentMetaKey &key)) \
|
||||||
GetSize = 10,
|
AMS_SF_METHOD_INFO(C, H, 12, Result, GetPatchId, (sf::Out<PatchId> out_patch_id, const ContentMetaKey &key)) \
|
||||||
GetRequiredSystemVersion = 11,
|
AMS_SF_METHOD_INFO(C, H, 13, Result, DisableForcibly, ()) \
|
||||||
GetPatchId = 12,
|
AMS_SF_METHOD_INFO(C, H, 14, Result, LookupOrphanContent, (const sf::OutArray<bool> &out_orphaned, const sf::InArray<ContentId> &content_ids)) \
|
||||||
DisableForcibly = 13,
|
AMS_SF_METHOD_INFO(C, H, 15, Result, Commit, ()) \
|
||||||
LookupOrphanContent = 14,
|
AMS_SF_METHOD_INFO(C, H, 16, Result, HasContent, (sf::Out<bool> out, const ContentMetaKey &key, const ContentId &content_id)) \
|
||||||
Commit = 15,
|
AMS_SF_METHOD_INFO(C, H, 17, Result, ListContentMetaInfo, (sf::Out<s32> out_entries_written, const sf::OutArray<ContentMetaInfo> &out_meta_info, const ContentMetaKey &key, s32 offset)) \
|
||||||
HasContent = 16,
|
AMS_SF_METHOD_INFO(C, H, 18, Result, GetAttributes, (sf::Out<u8> out_attributes, const ContentMetaKey &key)) \
|
||||||
ListContentMetaInfo = 17,
|
AMS_SF_METHOD_INFO(C, H, 19, Result, GetRequiredApplicationVersion, (sf::Out<u32> out_version, const ContentMetaKey &key), hos::Version_2_0_0) \
|
||||||
GetAttributes = 18,
|
AMS_SF_METHOD_INFO(C, H, 20, Result, GetContentIdByTypeAndIdOffset, (sf::Out<ContentId> out_content_id, const ContentMetaKey &key, ContentType type, u8 id_offset), hos::Version_5_0_0) \
|
||||||
GetRequiredApplicationVersion = 19,
|
AMS_SF_METHOD_INFO(C, H, 21, Result, GetCount, (sf::Out<u32> out_count), hos::Version_10_0_0) \
|
||||||
GetContentIdByTypeAndIdOffset = 20,
|
AMS_SF_METHOD_INFO(C, H, 22, Result, GetOwnerApplicationId, (sf::Out<ApplicationId> out_id, const ContentMetaKey &key), hos::Version_10_0_0)
|
||||||
GetCount = 21,
|
|
||||||
GetOwnerApplicationId = 22,
|
AMS_SF_DEFINE_INTERFACE(IContentMetaDatabase, AMS_NCM_I_CONTENT_META_DATABASE_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result Set(const ContentMetaKey &key, sf::InBuffer value) = 0;
|
|
||||||
virtual Result Get(sf::Out<u64> out_size, const ContentMetaKey &key, sf::OutBuffer out_value) = 0;
|
|
||||||
virtual Result Remove(const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result GetContentIdByType(sf::Out<ContentId> out_content_id, const ContentMetaKey &key, ContentType type) = 0;
|
|
||||||
virtual Result ListContentInfo(sf::Out<s32> out_entries_written, const sf::OutArray<ContentInfo> &out_info, const ContentMetaKey &key, s32 offset) = 0;
|
|
||||||
virtual Result List(sf::Out<s32> out_entries_total, sf::Out<s32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType meta_type, ApplicationId application_id, u64 min, u64 max, ContentInstallType install_type) = 0;
|
|
||||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, u64 id) = 0;
|
|
||||||
virtual Result ListApplication(sf::Out<s32> out_entries_total, sf::Out<s32> out_entries_written, const sf::OutArray<ApplicationContentMetaKey> &out_keys, ContentMetaType meta_type) = 0;
|
|
||||||
virtual Result Has(sf::Out<bool> out, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result HasAll(sf::Out<bool> out, const sf::InArray<ContentMetaKey> &keys) = 0;
|
|
||||||
virtual Result GetSize(sf::Out<u64> out_size, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result GetRequiredSystemVersion(sf::Out<u32> out_version, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result GetPatchId(sf::Out<PatchId> out_patch_id, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result DisableForcibly() = 0;
|
|
||||||
virtual Result LookupOrphanContent(const sf::OutArray<bool> &out_orphaned, const sf::InArray<ContentId> &content_ids) = 0;
|
|
||||||
virtual Result Commit() = 0;
|
|
||||||
virtual Result HasContent(sf::Out<bool> out, const ContentMetaKey &key, const ContentId &content_id) = 0;
|
|
||||||
virtual Result ListContentMetaInfo(sf::Out<s32> out_entries_written, const sf::OutArray<ContentMetaInfo> &out_meta_info, const ContentMetaKey &key, s32 offset) = 0;
|
|
||||||
virtual Result GetAttributes(sf::Out<u8> out_attributes, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result GetRequiredApplicationVersion(sf::Out<u32> out_version, const ContentMetaKey &key) = 0;
|
|
||||||
virtual Result GetContentIdByTypeAndIdOffset(sf::Out<ContentId> out_content_id, const ContentMetaKey &key, ContentType type, u8 id_offset) = 0;
|
|
||||||
virtual Result GetCount(sf::Out<u32> out_count) = 0;
|
|
||||||
virtual Result GetOwnerApplicationId(sf::Out<ApplicationId> out_id, const ContentMetaKey &key) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(Set),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Get),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Remove),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetContentIdByType),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ListContentInfo),
|
|
||||||
MAKE_SERVICE_COMMAND_META(List),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetLatestContentMetaKey),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ListApplication),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Has),
|
|
||||||
MAKE_SERVICE_COMMAND_META(HasAll),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetSize),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRequiredSystemVersion),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetPatchId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(DisableForcibly),
|
|
||||||
MAKE_SERVICE_COMMAND_META(LookupOrphanContent),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Commit),
|
|
||||||
MAKE_SERVICE_COMMAND_META(HasContent),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ListContentMetaInfo),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetAttributes),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRequiredApplicationVersion, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetContentIdByTypeAndIdOffset, hos::Version_5_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetCount, hos::Version_10_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetOwnerApplicationId, hos::Version_10_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,109 +22,38 @@
|
||||||
|
|
||||||
namespace ams::ncm {
|
namespace ams::ncm {
|
||||||
|
|
||||||
class IContentStorage : public sf::IServiceObject {
|
#define AMS_NCM_I_CONTENT_STORAGE_INTERFACE_INFO(C, H) \
|
||||||
NON_COPYABLE(IContentStorage);
|
AMS_SF_METHOD_INFO(C, H, 0, Result, GeneratePlaceHolderId, (sf::Out<PlaceHolderId> out)) \
|
||||||
NON_MOVEABLE(IContentStorage);
|
AMS_SF_METHOD_INFO(C, H, 1, Result, CreatePlaceHolder, (PlaceHolderId placeholder_id, ContentId content_id, s64 size)) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 2, Result, DeletePlaceHolder, (PlaceHolderId placeholder_id)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 3, Result, HasPlaceHolder, (sf::Out<bool> out, PlaceHolderId placeholder_id)) \
|
||||||
GeneratePlaceHolderId = 0,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, WritePlaceHolder, (PlaceHolderId placeholder_id, s64 offset, sf::InBuffer data)) \
|
||||||
CreatePlaceHolder = 1,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, Register, (PlaceHolderId placeholder_id, ContentId content_id)) \
|
||||||
DeletePlaceHolder = 2,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, Delete, (ContentId content_id)) \
|
||||||
HasPlaceHolder = 3,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, Has, (sf::Out<bool> out, ContentId content_id)) \
|
||||||
WritePlaceHolder = 4,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, GetPath, (sf::Out<Path> out, ContentId content_id)) \
|
||||||
Register = 5,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, GetPlaceHolderPath, (sf::Out<Path> out, PlaceHolderId placeholder_id)) \
|
||||||
Delete = 6,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, CleanupAllPlaceHolder, ()) \
|
||||||
Has = 7,
|
AMS_SF_METHOD_INFO(C, H, 11, Result, ListPlaceHolder, (sf::Out<s32> out_count, const sf::OutArray<PlaceHolderId> &out_buf)) \
|
||||||
GetPath = 8,
|
AMS_SF_METHOD_INFO(C, H, 12, Result, GetContentCount, (sf::Out<s32> out_count)) \
|
||||||
GetPlaceHolderPath = 9,
|
AMS_SF_METHOD_INFO(C, H, 13, Result, ListContentId, (sf::Out<s32> out_count, const sf::OutArray<ContentId> &out_buf, s32 start_offset)) \
|
||||||
CleanupAllPlaceHolder = 10,
|
AMS_SF_METHOD_INFO(C, H, 14, Result, GetSizeFromContentId, (sf::Out<s64> out_size, ContentId content_id)) \
|
||||||
ListPlaceHolder = 11,
|
AMS_SF_METHOD_INFO(C, H, 15, Result, DisableForcibly, ()) \
|
||||||
GetContentCount = 12,
|
AMS_SF_METHOD_INFO(C, H, 16, Result, RevertToPlaceHolder, (PlaceHolderId placeholder_id, ContentId old_content_id, ContentId new_content_id), hos::Version_2_0_0) \
|
||||||
ListContentId = 13,
|
AMS_SF_METHOD_INFO(C, H, 17, Result, SetPlaceHolderSize, (PlaceHolderId placeholder_id, s64 size), hos::Version_2_0_0) \
|
||||||
GetSizeFromContentId = 14,
|
AMS_SF_METHOD_INFO(C, H, 18, Result, ReadContentIdFile, (sf::OutBuffer buf, ContentId content_id, s64 offset), hos::Version_2_0_0) \
|
||||||
DisableForcibly = 15,
|
AMS_SF_METHOD_INFO(C, H, 19, Result, GetRightsIdFromPlaceHolderIdDeprecated, (sf::Out<ams::fs::RightsId> out_rights_id, PlaceHolderId placeholder_id), hos::Version_2_0_0, hos::Version_2_3_0) \
|
||||||
RevertToPlaceHolder = 16,
|
AMS_SF_METHOD_INFO(C, H, 19, Result, GetRightsIdFromPlaceHolderId, (sf::Out<ncm::RightsId> out_rights_id, PlaceHolderId placeholder_id), hos::Version_3_0_0) \
|
||||||
SetPlaceHolderSize = 17,
|
AMS_SF_METHOD_INFO(C, H, 20, Result, GetRightsIdFromContentIdDeprecated, (sf::Out<ams::fs::RightsId> out_rights_id, ContentId content_id), hos::Version_2_0_0, hos::Version_2_3_0) \
|
||||||
ReadContentIdFile = 18,
|
AMS_SF_METHOD_INFO(C, H, 20, Result, GetRightsIdFromContentId, (sf::Out<ncm::RightsId> out_rights_id, ContentId content_id), hos::Version_3_0_0) \
|
||||||
GetRightsIdFromPlaceHolderIdDeprecated = 19,
|
AMS_SF_METHOD_INFO(C, H, 21, Result, WriteContentForDebug, (ContentId content_id, s64 offset, sf::InBuffer data), hos::Version_2_0_0) \
|
||||||
GetRightsIdFromPlaceHolderId = 19,
|
AMS_SF_METHOD_INFO(C, H, 22, Result, GetFreeSpaceSize, (sf::Out<s64> out_size), hos::Version_2_0_0) \
|
||||||
GetRightsIdFromContentIdDeprecated = 20,
|
AMS_SF_METHOD_INFO(C, H, 23, Result, GetTotalSpaceSize, (sf::Out<s64> out_size), hos::Version_2_0_0) \
|
||||||
GetRightsIdFromContentId = 20,
|
AMS_SF_METHOD_INFO(C, H, 24, Result, FlushPlaceHolder, (), hos::Version_3_0_0) \
|
||||||
WriteContentForDebug = 21,
|
AMS_SF_METHOD_INFO(C, H, 25, Result, GetSizeFromPlaceHolderId, (sf::Out<s64> out, PlaceHolderId placeholder_id), hos::Version_4_0_0) \
|
||||||
GetFreeSpaceSize = 22,
|
AMS_SF_METHOD_INFO(C, H, 26, Result, RepairInvalidFileAttribute, (), hos::Version_4_0_0) \
|
||||||
GetTotalSpaceSize = 23,
|
AMS_SF_METHOD_INFO(C, H, 27, Result, GetRightsIdFromPlaceHolderIdWithCache, (sf::Out<ncm::RightsId> out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id), hos::Version_8_0_0)
|
||||||
FlushPlaceHolder = 24,
|
|
||||||
GetSizeFromPlaceHolderId = 25,
|
AMS_SF_DEFINE_INTERFACE(IContentStorage, AMS_NCM_I_CONTENT_STORAGE_INTERFACE_INFO)
|
||||||
RepairInvalidFileAttribute = 26,
|
|
||||||
GetRightsIdFromPlaceHolderIdWithCache = 27,
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
IContentStorage() { /* ... */ }
|
|
||||||
public:
|
|
||||||
virtual Result GeneratePlaceHolderId(sf::Out<PlaceHolderId> out) = 0;
|
|
||||||
virtual Result CreatePlaceHolder(PlaceHolderId placeholder_id, ContentId content_id, s64 size) = 0;
|
|
||||||
virtual Result DeletePlaceHolder(PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result HasPlaceHolder(sf::Out<bool> out, PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result WritePlaceHolder(PlaceHolderId placeholder_id, s64 offset, sf::InBuffer data) = 0;
|
|
||||||
virtual Result Register(PlaceHolderId placeholder_id, ContentId content_id) = 0;
|
|
||||||
virtual Result Delete(ContentId content_id) = 0;
|
|
||||||
virtual Result Has(sf::Out<bool> out, ContentId content_id) = 0;
|
|
||||||
virtual Result GetPath(sf::Out<Path> out, ContentId content_id) = 0;
|
|
||||||
virtual Result GetPlaceHolderPath(sf::Out<Path> out, PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result CleanupAllPlaceHolder() = 0;
|
|
||||||
virtual Result ListPlaceHolder(sf::Out<s32> out_count, const sf::OutArray<PlaceHolderId> &out_buf) = 0;
|
|
||||||
virtual Result GetContentCount(sf::Out<s32> out_count) = 0;
|
|
||||||
virtual Result ListContentId(sf::Out<s32> out_count, const sf::OutArray<ContentId> &out_buf, s32 start_offset) = 0;
|
|
||||||
virtual Result GetSizeFromContentId(sf::Out<s64> out_size, ContentId content_id) = 0;
|
|
||||||
virtual Result DisableForcibly() = 0;
|
|
||||||
virtual Result RevertToPlaceHolder(PlaceHolderId placeholder_id, ContentId old_content_id, ContentId new_content_id) = 0;
|
|
||||||
virtual Result SetPlaceHolderSize(PlaceHolderId placeholder_id, s64 size) = 0;
|
|
||||||
virtual Result ReadContentIdFile(sf::OutBuffer buf, ContentId content_id, s64 offset) = 0;
|
|
||||||
virtual Result GetRightsIdFromPlaceHolderIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result GetRightsIdFromPlaceHolderId(sf::Out<ncm::RightsId> out_rights_id, PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result GetRightsIdFromContentIdDeprecated(sf::Out<ams::fs::RightsId> out_rights_id, ContentId content_id) = 0;
|
|
||||||
virtual Result GetRightsIdFromContentId(sf::Out<ncm::RightsId> out_rights_id, ContentId content_id) = 0;
|
|
||||||
virtual Result WriteContentForDebug(ContentId content_id, s64 offset, sf::InBuffer data) = 0;
|
|
||||||
virtual Result GetFreeSpaceSize(sf::Out<s64> out_size) = 0;
|
|
||||||
virtual Result GetTotalSpaceSize(sf::Out<s64> out_size) = 0;
|
|
||||||
virtual Result FlushPlaceHolder() = 0;
|
|
||||||
virtual Result GetSizeFromPlaceHolderId(sf::Out<s64> out, PlaceHolderId placeholder_id) = 0;
|
|
||||||
virtual Result RepairInvalidFileAttribute() = 0;
|
|
||||||
virtual Result GetRightsIdFromPlaceHolderIdWithCache(sf::Out<ncm::RightsId> out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(GeneratePlaceHolderId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CreatePlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(DeletePlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(HasPlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(WritePlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Register),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Delete),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Has),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetPlaceHolderPath),
|
|
||||||
MAKE_SERVICE_COMMAND_META(CleanupAllPlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ListPlaceHolder),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GeneratePlaceHolderId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetContentCount),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ListContentId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetSizeFromContentId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(DisableForcibly),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RevertToPlaceHolder, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(SetPlaceHolderSize, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(ReadContentIdFile, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRightsIdFromPlaceHolderIdDeprecated, hos::Version_2_0_0, hos::Version_2_3_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRightsIdFromPlaceHolderId, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRightsIdFromContentIdDeprecated, hos::Version_2_0_0, hos::Version_2_3_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRightsIdFromContentId, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(WriteContentForDebug, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetFreeSpaceSize, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetTotalSpaceSize, hos::Version_2_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(FlushPlaceHolder, hos::Version_3_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetSizeFromPlaceHolderId, hos::Version_4_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(RepairInvalidFileAttribute, hos::Version_4_0_0),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRightsIdFromPlaceHolderIdWithCache, hos::Version_8_0_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,21 +22,10 @@
|
||||||
|
|
||||||
namespace ams::pgl::sf {
|
namespace ams::pgl::sf {
|
||||||
|
|
||||||
class IEventObserver : public ams::sf::IServiceObject {
|
#define AMS_PGL_I_EVENT_OBSERVER_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, GetProcessEventHandle, (ams::sf::OutCopyHandle out)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, GetProcessEventInfo, (ams::sf::Out<pm::ProcessEventInfo> out))
|
||||||
GetProcessEventHandle = 0,
|
|
||||||
GetProcessEventInfo = 1,
|
AMS_SF_DEFINE_INTERFACE(IEventObserver, AMS_PGL_I_EVENT_OBSERVER_INTERFACE_INFO);
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result GetProcessEventHandle(ams::sf::OutCopyHandle out) = 0;
|
|
||||||
virtual Result GetProcessEventInfo(ams::sf::Out<pm::ProcessEventInfo> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetProcessEventHandle),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetProcessEventInfo),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -23,52 +23,22 @@
|
||||||
|
|
||||||
namespace ams::pgl::sf {
|
namespace ams::pgl::sf {
|
||||||
|
|
||||||
class IShellInterface : public ams::sf::IServiceObject {
|
#define AMS_PGL_I_SHELL_INTERFACE_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, LaunchProgram, (ams::sf::Out<os::ProcessId> out, const ncm::ProgramLocation &loc, u32 pm_flags, u8 pgl_flags)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, TerminateProcess, (os::ProcessId process_id)) \
|
||||||
LaunchProgram = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, LaunchProgramFromHost, (ams::sf::Out<os::ProcessId> out, const ams::sf::InBuffer &content_path, u32 pm_flags)) \
|
||||||
TerminateProcess = 1,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, GetHostContentMetaInfo, (ams::sf::Out<pgl::ContentMetaInfo> out, const ams::sf::InBuffer &content_path)) \
|
||||||
LaunchProgramFromHost = 2,
|
AMS_SF_METHOD_INFO(C, H, 5, Result, GetApplicationProcessId, (ams::sf::Out<os::ProcessId> out)) \
|
||||||
GetHostContentMetaInfo = 4,
|
AMS_SF_METHOD_INFO(C, H, 6, Result, BoostSystemMemoryResourceLimit, (u64 size)) \
|
||||||
GetApplicationProcessId = 5,
|
AMS_SF_METHOD_INFO(C, H, 7, Result, IsProcessTracked, (ams::sf::Out<bool> out, os::ProcessId process_id)) \
|
||||||
BoostSystemMemoryResourceLimit = 6,
|
AMS_SF_METHOD_INFO(C, H, 8, Result, EnableApplicationCrashReport, (bool enabled)) \
|
||||||
IsProcessTracked = 7,
|
AMS_SF_METHOD_INFO(C, H, 9, Result, IsApplicationCrashReportEnabled, (ams::sf::Out<bool> out)) \
|
||||||
EnableApplicationCrashReport = 8,
|
AMS_SF_METHOD_INFO(C, H, 10, Result, EnableApplicationAllThreadDumpOnCrash, (bool enabled)) \
|
||||||
IsApplicationCrashReportEnabled = 9,
|
AMS_SF_METHOD_INFO(C, H, 12, Result, TriggerApplicationSnapShotDumper, (SnapShotDumpType dump_type, const ams::sf::InBuffer &arg)) \
|
||||||
EnableApplicationAllThreadDumpOnCrash = 10,
|
AMS_SF_METHOD_INFO(C, H, 20, Result, GetShellEventObserver, (ams::sf::Out<std::shared_ptr<pgl::sf::IEventObserver>> out))
|
||||||
TriggerApplicationSnapShotDumper = 12,
|
|
||||||
GetShellEventObserver = 20,
|
AMS_SF_DEFINE_INTERFACE(IShellInterface, AMS_PGL_I_SHELL_INTERFACE_INTERFACE_INFO);
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result LaunchProgram(ams::sf::Out<os::ProcessId> out, const ncm::ProgramLocation &loc, u32 pm_flags, u8 pgl_flags) = 0;
|
|
||||||
virtual Result TerminateProcess(os::ProcessId process_id) = 0;
|
|
||||||
virtual Result LaunchProgramFromHost(ams::sf::Out<os::ProcessId> out, const ams::sf::InBuffer &content_path, u32 pm_flags) = 0;
|
|
||||||
virtual Result GetHostContentMetaInfo(ams::sf::Out<pgl::ContentMetaInfo> out, const ams::sf::InBuffer &content_path) = 0;
|
|
||||||
virtual Result GetApplicationProcessId(ams::sf::Out<os::ProcessId> out) = 0;
|
|
||||||
virtual Result BoostSystemMemoryResourceLimit(u64 size) = 0;
|
|
||||||
virtual Result IsProcessTracked(ams::sf::Out<bool> out, os::ProcessId process_id) = 0;
|
|
||||||
virtual Result EnableApplicationCrashReport(bool enabled) = 0;
|
|
||||||
virtual Result IsApplicationCrashReportEnabled(ams::sf::Out<bool> out) = 0;
|
|
||||||
virtual Result EnableApplicationAllThreadDumpOnCrash(bool enabled) = 0;
|
|
||||||
virtual Result TriggerApplicationSnapShotDumper(SnapShotDumpType dump_type, const ams::sf::InBuffer &arg) = 0;
|
|
||||||
|
|
||||||
virtual Result GetShellEventObserver(ams::sf::Out<std::shared_ptr<pgl::sf::IEventObserver>> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(LaunchProgram),
|
|
||||||
MAKE_SERVICE_COMMAND_META(TerminateProcess),
|
|
||||||
MAKE_SERVICE_COMMAND_META(LaunchProgramFromHost),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetHostContentMetaInfo),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetApplicationProcessId),
|
|
||||||
MAKE_SERVICE_COMMAND_META(BoostSystemMemoryResourceLimit),
|
|
||||||
MAKE_SERVICE_COMMAND_META(IsProcessTracked),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EnableApplicationCrashReport),
|
|
||||||
MAKE_SERVICE_COMMAND_META(IsApplicationCrashReportEnabled),
|
|
||||||
MAKE_SERVICE_COMMAND_META(EnableApplicationAllThreadDumpOnCrash),
|
|
||||||
MAKE_SERVICE_COMMAND_META(TriggerApplicationSnapShotDumper),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetShellEventObserver),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
namespace ams::pgl::srv {
|
namespace ams::pgl::srv {
|
||||||
|
|
||||||
class ShellInterface final : public pgl::sf::IShellInterface {
|
class ShellInterface final {
|
||||||
NON_COPYABLE(ShellInterface);
|
NON_COPYABLE(ShellInterface);
|
||||||
NON_MOVEABLE(ShellInterface);
|
NON_MOVEABLE(ShellInterface);
|
||||||
private:
|
private:
|
||||||
|
@ -34,19 +34,20 @@ namespace ams::pgl::srv {
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
/* Interface commands. */
|
/* Interface commands. */
|
||||||
virtual Result LaunchProgram(ams::sf::Out<os::ProcessId> out, const ncm::ProgramLocation &loc, u32 pm_flags, u8 pgl_flags) override final;
|
Result LaunchProgram(ams::sf::Out<os::ProcessId> out, const ncm::ProgramLocation &loc, u32 pm_flags, u8 pgl_flags);
|
||||||
virtual Result TerminateProcess(os::ProcessId process_id) override final;
|
Result TerminateProcess(os::ProcessId process_id);
|
||||||
virtual Result LaunchProgramFromHost(ams::sf::Out<os::ProcessId> out, const ams::sf::InBuffer &content_path, u32 pm_flags) override final;
|
Result LaunchProgramFromHost(ams::sf::Out<os::ProcessId> out, const ams::sf::InBuffer &content_path, u32 pm_flags);
|
||||||
virtual Result GetHostContentMetaInfo(ams::sf::Out<pgl::ContentMetaInfo> out, const ams::sf::InBuffer &content_path) override final;
|
Result GetHostContentMetaInfo(ams::sf::Out<pgl::ContentMetaInfo> out, const ams::sf::InBuffer &content_path);
|
||||||
virtual Result GetApplicationProcessId(ams::sf::Out<os::ProcessId> out) override final;
|
Result GetApplicationProcessId(ams::sf::Out<os::ProcessId> out);
|
||||||
virtual Result BoostSystemMemoryResourceLimit(u64 size) override final;
|
Result BoostSystemMemoryResourceLimit(u64 size);
|
||||||
virtual Result IsProcessTracked(ams::sf::Out<bool> out, os::ProcessId process_id) override final;
|
Result IsProcessTracked(ams::sf::Out<bool> out, os::ProcessId process_id);
|
||||||
virtual Result EnableApplicationCrashReport(bool enabled) override final;
|
Result EnableApplicationCrashReport(bool enabled);
|
||||||
virtual Result IsApplicationCrashReportEnabled(ams::sf::Out<bool> out) override final;
|
Result IsApplicationCrashReportEnabled(ams::sf::Out<bool> out);
|
||||||
virtual Result EnableApplicationAllThreadDumpOnCrash(bool enabled) override final;
|
Result EnableApplicationAllThreadDumpOnCrash(bool enabled);
|
||||||
virtual Result TriggerApplicationSnapShotDumper(SnapShotDumpType dump_type, const ams::sf::InBuffer &arg) override final;
|
Result TriggerApplicationSnapShotDumper(SnapShotDumpType dump_type, const ams::sf::InBuffer &arg);
|
||||||
|
|
||||||
virtual Result GetShellEventObserver(ams::sf::Out<std::shared_ptr<pgl::sf::IEventObserver>> out) override final;
|
Result GetShellEventObserver(ams::sf::Out<std::shared_ptr<pgl::sf::IEventObserver>> out);
|
||||||
};
|
};
|
||||||
|
static_assert(pgl::sf::IsIShellInterface<ShellInterface>);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,30 +21,13 @@
|
||||||
|
|
||||||
namespace ams::psc::sf {
|
namespace ams::psc::sf {
|
||||||
|
|
||||||
class IPmModule : public ams::sf::IServiceObject {
|
#define AMS_PSC_I_PM_MODULE_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, Initialize, (ams::sf::OutCopyHandle out, psc::PmModuleId module_id, const ams::sf::InBuffer &child_list)) \
|
||||||
enum class CommandId {
|
AMS_SF_METHOD_INFO(C, H, 1, Result, GetRequest, (ams::sf::Out<PmState> out_state, ams::sf::Out<PmFlagSet> out_flags)) \
|
||||||
Initialize = 0,
|
AMS_SF_METHOD_INFO(C, H, 2, Result, Acknowledge, ()) \
|
||||||
GetRequest = 1,
|
AMS_SF_METHOD_INFO(C, H, 3, Result, Finalize, ()) \
|
||||||
Acknowledge = 2,
|
AMS_SF_METHOD_INFO(C, H, 4, Result, AcknowledgeEx, (PmState state), hos::Version_5_1_0)
|
||||||
Finalize = 3,
|
|
||||||
AcknowledgeEx = 4,
|
AMS_SF_DEFINE_INTERFACE(IPmModule, AMS_PSC_I_PM_MODULE_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result Initialize(ams::sf::OutCopyHandle out, psc::PmModuleId module_id, const ams::sf::InBuffer &child_list) = 0;
|
|
||||||
virtual Result GetRequest(ams::sf::Out<PmState> out_state, ams::sf::Out<PmFlagSet> out_flags) = 0;
|
|
||||||
virtual Result Acknowledge() = 0;
|
|
||||||
virtual Result Finalize() = 0;
|
|
||||||
virtual Result AcknowledgeEx(PmState state) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(Initialize),
|
|
||||||
MAKE_SERVICE_COMMAND_META(GetRequest),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Acknowledge),
|
|
||||||
MAKE_SERVICE_COMMAND_META(Finalize),
|
|
||||||
MAKE_SERVICE_COMMAND_META(AcknowledgeEx, hos::Version_5_1_0),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -20,18 +20,9 @@
|
||||||
|
|
||||||
namespace ams::psc::sf {
|
namespace ams::psc::sf {
|
||||||
|
|
||||||
class IPmService : public ams::sf::IServiceObject {
|
#define AMS_PSC_I_PM_SERVICE_INTERFACE_INFO(C, H) \
|
||||||
protected:
|
AMS_SF_METHOD_INFO(C, H, 0, Result, Initialize, (ams::sf::Out<std::shared_ptr<psc::sf::IPmModule>> out))
|
||||||
enum class CommandId {
|
|
||||||
Initialize = 0,
|
AMS_SF_DEFINE_INTERFACE(IPmService, AMS_PSC_I_PM_SERVICE_INTERFACE_INFO)
|
||||||
};
|
|
||||||
public:
|
|
||||||
/* Actual commands. */
|
|
||||||
virtual Result Initialize(ams::sf::Out<std::shared_ptr<psc::sf::IPmModule>> out) = 0;
|
|
||||||
public:
|
|
||||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
|
||||||
MAKE_SERVICE_COMMAND_META(Initialize),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -28,6 +28,7 @@
|
||||||
#include <stratosphere/sf/sf_out.hpp>
|
#include <stratosphere/sf/sf_out.hpp>
|
||||||
#include <stratosphere/sf/sf_buffers.hpp>
|
#include <stratosphere/sf/sf_buffers.hpp>
|
||||||
#include <stratosphere/sf/impl/sf_impl_command_serialization.hpp>
|
#include <stratosphere/sf/impl/sf_impl_command_serialization.hpp>
|
||||||
|
#include <stratosphere/sf/impl/sf_impl_service_object_macros.hpp>
|
||||||
|
|
||||||
#include <stratosphere/sf/hipc/sf_hipc_server_manager.hpp>
|
#include <stratosphere/sf/hipc/sf_hipc_server_manager.hpp>
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ namespace ams::sf::cmif {
|
||||||
explicit constexpr ServiceDispatchTable(Entries... entries) : impl::ServiceDispatchTableImpl<sizeof...(Entries)>(entries...) { /* ... */ }
|
explicit constexpr ServiceDispatchTable(Entries... entries) : impl::ServiceDispatchTableImpl<sizeof...(Entries)>(entries...) { /* ... */ }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFINE_SERVICE_DISPATCH_TABLE \
|
#define AMS_SF_CMIF_IMPL_DEFINE_SERVICE_DISPATCH_TABLE \
|
||||||
template<typename ServiceImpl> \
|
template<typename ServiceImpl> \
|
||||||
static constexpr inline ::ams::sf::cmif::ServiceDispatchTable s_CmifServiceDispatchTable
|
static constexpr inline ::ams::sf::cmif::ServiceDispatchTable s_CmifServiceDispatchTable
|
||||||
|
|
||||||
|
|
|
@ -1148,18 +1148,16 @@ namespace ams::sf::impl {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace ams::sf {
|
namespace ams::sf::impl {
|
||||||
|
|
||||||
template <auto CommandId, auto CommandImpl, hos::Version Low = hos::Version_Min, hos::Version High = hos::Version_Max>
|
template<hos::Version Low, hos::Version High, u32 CommandId, auto CommandImpl>
|
||||||
inline static constexpr cmif::ServiceCommandMeta MakeServiceCommandMeta() {
|
consteval inline cmif::ServiceCommandMeta MakeServiceCommandMeta() {
|
||||||
return {
|
return {
|
||||||
.hosver_low = Low,
|
.hosver_low = Low,
|
||||||
.hosver_high = High,
|
.hosver_high = High,
|
||||||
.cmd_id = static_cast<u32>(CommandId),
|
.cmd_id = static_cast<u32>(CommandId),
|
||||||
.handler = ::ams::sf::impl::InvokeServiceCommandImpl<CommandImpl>,
|
.handler = ::ams::sf::impl::InvokeServiceCommandImpl<CommandImpl>,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAKE_SERVICE_COMMAND_META(Name, ...) ::ams::sf::MakeServiceCommandMeta<ServiceImpl::CommandId::Name, &ServiceImpl::Name, ##__VA_ARGS__>()
|
|
||||||
|
|
|
@ -0,0 +1,237 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <vapours.hpp>
|
||||||
|
|
||||||
|
namespace ams::sf::impl {
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
concept ServiceCommandResult = std::same_as<::ams::Result, T> || std::same_as<void, T>;
|
||||||
|
|
||||||
|
template<auto F, typename ...Arguments>
|
||||||
|
concept Invokable = requires (Arguments &&... args) {
|
||||||
|
{ F(std::forward<Arguments>(args)...) };
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FunctionTraits {
|
||||||
|
public:
|
||||||
|
template<typename R, typename... A>
|
||||||
|
static std::tuple<A...> GetArgsImpl(R(A...));
|
||||||
|
};
|
||||||
|
|
||||||
|
template<auto F>
|
||||||
|
using FunctionArgsType = decltype(FunctionTraits::GetArgsImpl(F));
|
||||||
|
|
||||||
|
template<typename Class, typename Return, typename ArgsTuple>
|
||||||
|
struct ClassFunctionPointerHelper;
|
||||||
|
|
||||||
|
template<typename Class, typename Return, typename... Arguments>
|
||||||
|
struct ClassFunctionPointerHelper<Class, Return, std::tuple<Arguments...>> {
|
||||||
|
using Type = Return (*)(Class *, Arguments &&...);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Class, typename Return, typename ArgsTuple>
|
||||||
|
using ClassFunctionPointer = typename ClassFunctionPointerHelper<Class, Return, ArgsTuple>::Type;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct TypeTag{};
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_HELPER_FUNCTION_NAME_IMPL(CLASSNAME, FUNCNAME, SUFFIX) \
|
||||||
|
__ams_sf_impl_helper_##CLASSNAME##_##FUNCNAME##_##SUFFIX
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_HELPER_FUNCTION_NAME(CLASSNAME, FUNCNAME) \
|
||||||
|
AMS_SF_IMPL_HELPER_FUNCTION_NAME_IMPL(CLASSNAME, FUNCNAME, intf)
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, FUNCNAME) \
|
||||||
|
::ams::sf::impl::FunctionArgsType<AMS_SF_IMPL_HELPER_FUNCTION_NAME(CLASSNAME, FUNCNAME)>
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_CONCEPT_HELPER_FUNCTION_NAME(CLASSNAME, FUNCNAME) \
|
||||||
|
AMS_SF_IMPL_HELPER_FUNCTION_NAME_IMPL(CLASSNAME, FUNCNAME, intf_for_concept)
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_HELPER_FUNCTIONS(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
static void AMS_SF_IMPL_HELPER_FUNCTION_NAME(CLASSNAME, NAME) ARGS { __builtin_unreachable(); } \
|
||||||
|
template<typename T, typename... Arguments> \
|
||||||
|
requires std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)> \
|
||||||
|
static auto AMS_SF_IMPL_CONCEPT_HELPER_FUNCTION_NAME(CLASSNAME, NAME) (T &t, std::tuple<Arguments...> a) { \
|
||||||
|
return [&]<size_t... Ix>(std::index_sequence<Ix...>) { \
|
||||||
|
return t.NAME(std::forward<typename std::tuple_element<Ix, decltype(a)>::type>(std::get<Ix>(a))...); \
|
||||||
|
}(std::make_index_sequence<sizeof...(Arguments)>()); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_HELPERS(CLASSNAME, CMD_MACRO) \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_HELPER_FUNCTIONS)
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_CONCEPT_REQUIREMENT(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
{ AMS_SF_IMPL_CONCEPT_HELPER_FUNCTION_NAME(CLASSNAME, NAME) (impl, std::declval<AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>()) } -> ::ams::sf::impl::ServiceCommandResult;
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_CONCEPT(CLASSNAME, CMD_MACRO) \
|
||||||
|
template<typename Impl> \
|
||||||
|
concept Is##CLASSNAME = requires (Impl &impl) { \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_CONCEPT_REQUIREMENT) \
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_FUNCTION_POINTER_TYPE(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
::ams::sf::impl::ClassFunctionPointer<CLASSNAME, RETURN, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_FUNCTION_POINTER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
AMS_SF_IMPL_FUNCTION_POINTER_TYPE(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) NAME;
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
template<typename ...Arguments> \
|
||||||
|
requires (::ams::sf::impl::Invokable<AMS_SF_IMPL_HELPER_FUNCTION_NAME(CLASSNAME, NAME), Arguments...> && \
|
||||||
|
std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>) \
|
||||||
|
RETURN NAME (Arguments &&... args) { \
|
||||||
|
return this->cmd_table->NAME(this, std::forward<Arguments>(args)...); \
|
||||||
|
} \
|
||||||
|
template<typename ...Arguments> \
|
||||||
|
requires (::ams::sf::impl::Invokable<AMS_SF_IMPL_HELPER_FUNCTION_NAME(CLASSNAME, NAME), Arguments...> && \
|
||||||
|
!std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>) \
|
||||||
|
ALWAYS_INLINE RETURN NAME (Arguments &&... args) { \
|
||||||
|
return [this] <typename... CorrectArguments, typename... PassedArguments> ALWAYS_INLINE_LAMBDA (::ams::sf::impl::TypeTag<std::tuple<CorrectArguments...>>, PassedArguments &&...args_) -> RETURN { \
|
||||||
|
return this->template NAME<CorrectArguments...>(std::forward<CorrectArguments>(args_)...); \
|
||||||
|
}(::ams::sf::impl::TypeTag<AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>{}, std::forward<Arguments>(args)...); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION_INVOKER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
template<typename ...Arguments> \
|
||||||
|
requires std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)> \
|
||||||
|
static RETURN NAME##Invoker (CLASSNAME *_this, Arguments &&... args) { \
|
||||||
|
return static_cast<ImplHolder *>(_this)->NAME(std::forward<Arguments>(args)...); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION_IMPL(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
template<typename ...Arguments> \
|
||||||
|
requires (std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)> && \
|
||||||
|
std::same_as<RETURN, decltype(impl.NAME(std::declval<Arguments>()...))>) \
|
||||||
|
RETURN NAME (Arguments &&... args) { \
|
||||||
|
return this->impl.NAME(std::forward<Arguments>(args)...); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_INTERFACE_IMPL_FUNCTION_POINTER_HOLDER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
template<typename A> struct NAME##FunctionPointerHolder; \
|
||||||
|
\
|
||||||
|
template<typename ...Arguments> \
|
||||||
|
requires std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)> \
|
||||||
|
struct NAME##FunctionPointerHolder<std::tuple<Arguments...>> { \
|
||||||
|
static constexpr auto Value = static_cast<AMS_SF_IMPL_FUNCTION_POINTER_TYPE(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX)>(&ImplHolder::NAME##Invoker<Arguments...>); \
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_INTERFACE_SERVICE_COMMAND_META_HOLDER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
template<typename ServiceImpl, typename A> struct NAME##ServiceCommandMetaHolder; \
|
||||||
|
\
|
||||||
|
template<typename ServiceImpl, typename ...Arguments> \
|
||||||
|
requires std::same_as<std::tuple<Arguments...>, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)> \
|
||||||
|
struct NAME##ServiceCommandMetaHolder<ServiceImpl, std::tuple<Arguments...>> { \
|
||||||
|
static constexpr auto Value = ::ams::sf::impl::MakeServiceCommandMeta<VERSION_MIN, VERSION_MAX, CMD_ID, ServiceImpl::template NAME<Arguments...>>(); \
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_INTERFACE_COMMAND_POINTER_TABLE_MEMBER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
.NAME = NAME##FunctionPointerHolder<AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>::Value,
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_CMIF_SERVICE_COMMAND_META_TABLE_ENTRY(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
NAME##ServiceCommandMetaHolder<ServiceImpl, AMS_SF_IMPL_HELPER_FUNCTION_ARGS(CLASSNAME, NAME)>::Value,
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DEFINE_CLASS(BASECLASS, CLASSNAME, CMD_MACRO) \
|
||||||
|
class CLASSNAME : public BASECLASS { \
|
||||||
|
NON_COPYABLE(CLASSNAME); \
|
||||||
|
NON_MOVEABLE(CLASSNAME); \
|
||||||
|
private: \
|
||||||
|
struct CommandPointerTable { \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_FUNCTION_POINTER) \
|
||||||
|
}; \
|
||||||
|
private: \
|
||||||
|
const CommandPointerTable * const cmd_table; \
|
||||||
|
private: \
|
||||||
|
CLASSNAME() = delete; \
|
||||||
|
protected: \
|
||||||
|
constexpr CLASSNAME(const CommandPointerTable *ct) \
|
||||||
|
: cmd_table(ct) { /* ... */ } \
|
||||||
|
virtual ~CLASSNAME() { /* ... */ } \
|
||||||
|
public: \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION) \
|
||||||
|
private: \
|
||||||
|
template<typename S, typename T> requires (std::same_as<CLASSNAME, S> && !std::same_as<CLASSNAME, T>&& Is##CLASSNAME<T>) \
|
||||||
|
struct ImplGenerator { \
|
||||||
|
public: \
|
||||||
|
class ImplHolder : public S { \
|
||||||
|
private: \
|
||||||
|
T impl; \
|
||||||
|
public: \
|
||||||
|
template<typename... Args> requires std::constructible_from<T, Args...> \
|
||||||
|
constexpr ImplHolder(Args &&... args) \
|
||||||
|
: S(std::addressof(CommandPointerTableImpl)), impl(std::forward<Args>(args)...) \
|
||||||
|
{ \
|
||||||
|
/* ... */ \
|
||||||
|
} \
|
||||||
|
private: \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION_INVOKER) \
|
||||||
|
public: \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DECLARE_INTERFACE_FUNCTION_IMPL) \
|
||||||
|
private: \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DEFINE_INTERFACE_IMPL_FUNCTION_POINTER_HOLDER) \
|
||||||
|
public: \
|
||||||
|
static constexpr CommandPointerTable CommandPointerTableImpl = { \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DEFINE_INTERFACE_COMMAND_POINTER_TABLE_MEMBER) \
|
||||||
|
}; \
|
||||||
|
}; \
|
||||||
|
static_assert(Is##CLASSNAME<ImplHolder>); \
|
||||||
|
\
|
||||||
|
}; \
|
||||||
|
private: \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DEFINE_INTERFACE_SERVICE_COMMAND_META_HOLDER) \
|
||||||
|
public: \
|
||||||
|
template<typename T> requires (!std::same_as<CLASSNAME, T>&& Is##CLASSNAME<T>) \
|
||||||
|
using Impl = typename ImplGenerator<CLASSNAME, T>::ImplHolder; \
|
||||||
|
\
|
||||||
|
AMS_SF_CMIF_IMPL_DEFINE_SERVICE_DISPATCH_TABLE { \
|
||||||
|
CMD_MACRO(CLASSNAME, AMS_SF_IMPL_DEFINE_CMIF_SERVICE_COMMAND_META_TABLE_ENTRY) \
|
||||||
|
}; \
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AMS_SF_METHOD_INFO_6(CLASSNAME, HANDLER, CMD_ID, RETURN, NAME, ARGS) \
|
||||||
|
HANDLER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, hos::Version_Min, hos::Version_Max)
|
||||||
|
|
||||||
|
#define AMS_SF_METHOD_INFO_7(CLASSNAME, HANDLER, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN) \
|
||||||
|
HANDLER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, hos::Version_Max)
|
||||||
|
|
||||||
|
#define AMS_SF_METHOD_INFO_8(CLASSNAME, HANDLER, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
HANDLER(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX)
|
||||||
|
|
||||||
|
#define AMS_SF_METHOD_INFO_X(_, _0, _1, _2, _3, _4, _5, _6, _7, FUNC, ...) FUNC
|
||||||
|
|
||||||
|
#define AMS_SF_METHOD_INFO(...) \
|
||||||
|
AMS_SF_METHOD_INFO_X(, ## __VA_ARGS__, AMS_SF_METHOD_INFO_8(__VA_ARGS__), AMS_SF_METHOD_INFO_7(__VA_ARGS__), AMS_SF_METHOD_INFO_6(__VA_ARGS__))
|
||||||
|
|
||||||
|
#define AMS_SF_DEFINE_INTERFACE(CLASSNAME, CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DECLARE_HELPERS(CLASSNAME,CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DEFINE_CONCEPT(CLASSNAME, CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DEFINE_CLASS( ::ams::sf::IServiceObject, CLASSNAME, CMD_MACRO) \
|
||||||
|
static_assert(Is##CLASSNAME<CLASSNAME>);
|
||||||
|
|
||||||
|
#define AMS_SF_DEFINE_MITM_INTERFACE(CLASSNAME, CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DECLARE_HELPERS(CLASSNAME,CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DEFINE_CONCEPT(CLASSNAME, CMD_MACRO) \
|
||||||
|
AMS_SF_IMPL_DEFINE_CLASS(::ams::sf::IMitmServiceObject, CLASSNAME, CMD_MACRO) \
|
||||||
|
static_assert(Is##CLASSNAME<CLASSNAME>);
|
||||||
|
|
||||||
|
#define AMS_SF_IMPL_DECLARE_INTERFACE_METHODS(CLASSNAME, CMD_ID, RETURN, NAME, ARGS, VERSION_MIN, VERSION_MAX) \
|
||||||
|
RETURN NAME ARGS;
|
||||||
|
|
||||||
|
#define AMS_SF_DECLARE_INTERFACE_METHODS(CMD_MACRO) \
|
||||||
|
CMD_MACRO(_, AMS_SF_IMPL_DECLARE_INTERFACE_METHODS)
|
||||||
|
|
||||||
|
}
|
|
@ -38,7 +38,7 @@ namespace ams::sf {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Utility. */
|
/* Utility. */
|
||||||
#define SF_MITM_SERVICE_OBJECT_CTOR(cls) cls(std::shared_ptr<::Service> &&s, const sm::MitmProcessInfo &c) : ::ams::sf::IMitmServiceObject(std::forward<std::shared_ptr<::Service>>(s), c)
|
#define AMS_SF_MITM_SERVICE_OBJECT_CTOR(cls) cls(std::shared_ptr<::Service> &&s, const sm::MitmProcessInfo &c) : ::ams::sf::IMitmServiceObject(std::forward<std::shared_ptr<::Service>>(s), c)
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct ServiceObjectTraits {
|
struct ServiceObjectTraits {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue