mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-02 23:59:49 -04:00
sf: Change interface definition methodology (#1074)
* sf: Begin experimenting with new interface declaration format * sf: convert fs interfaces to new format * sf: finish conversion of libstrat to new definitions * sf: convert loader to new format * sf: convert spl to new format * sf: update ncm for new format * sf: convert pm to new format * sf: convert ro/sm to new format * sf: update fatal for new format * sf: support building dmnt under new scheme * sf: update ams.mitm for new format * sf: correct invocation def for pointer holder * fs: correct 10.x+ user bindings for Get*SpaceSize
This commit is contained in:
parent
94eb2195d3
commit
9fde97cfdd
190 changed files with 3220 additions and 3172 deletions
|
@ -20,19 +20,20 @@ namespace ams::erpt::srv {
|
|||
|
||||
class Attachment;
|
||||
|
||||
class AttachmentImpl final : public erpt::sf::IAttachment {
|
||||
class AttachmentImpl final {
|
||||
private:
|
||||
Attachment *attachment;
|
||||
public:
|
||||
AttachmentImpl();
|
||||
~AttachmentImpl();
|
||||
public:
|
||||
virtual Result Open(const AttachmentId &attachment_id) override final;
|
||||
virtual Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer) override final;
|
||||
virtual Result SetFlags(AttachmentFlagSet flags) override final;
|
||||
virtual Result GetFlags(ams::sf::Out<AttachmentFlagSet> out) override final;
|
||||
virtual Result Close() override final;
|
||||
virtual Result GetSize(ams::sf::Out<s64> out) override final;
|
||||
Result Open(const AttachmentId &attachment_id);
|
||||
Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer);
|
||||
Result SetFlags(AttachmentFlagSet flags);
|
||||
Result GetFlags(ams::sf::Out<AttachmentFlagSet> out);
|
||||
Result Close();
|
||||
Result GetSize(ams::sf::Out<s64> out);
|
||||
};
|
||||
static_assert(erpt::sf::IsIAttachment<AttachmentImpl>);
|
||||
|
||||
}
|
||||
|
|
|
@ -18,19 +18,20 @@
|
|||
|
||||
namespace ams::erpt::srv {
|
||||
|
||||
class ContextImpl final : public erpt::sf::IContext {
|
||||
class ContextImpl final {
|
||||
public:
|
||||
virtual Result SubmitContext(const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer) override final;
|
||||
virtual Result CreateReport(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer, const ams::sf::InBuffer &meta_buffer) override final;
|
||||
virtual Result SetInitialLaunchSettingsCompletionTime(const time::SteadyClockTimePoint &time_point) override final;
|
||||
virtual Result ClearInitialLaunchSettingsCompletionTime() override final;
|
||||
virtual Result UpdatePowerOnTime() override final;
|
||||
virtual Result UpdateAwakeTime() override final;
|
||||
virtual Result SubmitMultipleCategoryContext(const MultipleCategoryContextEntry &ctx_entry, const ams::sf::InBuffer &str_buffer) override final;
|
||||
virtual Result UpdateApplicationLaunchTime() override final;
|
||||
virtual Result ClearApplicationLaunchTime() override final;
|
||||
virtual Result SubmitAttachment(ams::sf::Out<AttachmentId> out, const ams::sf::InBuffer &attachment_name, const ams::sf::InBuffer &attachment_data) override final;
|
||||
virtual Result CreateReportWithAttachments(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer, const ams::sf::InBuffer &attachment_ids_buffer) override final;
|
||||
Result SubmitContext(const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer);
|
||||
Result CreateReport(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer, const ams::sf::InBuffer &meta_buffer);
|
||||
Result SetInitialLaunchSettingsCompletionTime(const time::SteadyClockTimePoint &time_point);
|
||||
Result ClearInitialLaunchSettingsCompletionTime();
|
||||
Result UpdatePowerOnTime();
|
||||
Result UpdateAwakeTime();
|
||||
Result SubmitMultipleCategoryContext(const MultipleCategoryContextEntry &ctx_entry, const ams::sf::InBuffer &str_buffer);
|
||||
Result UpdateApplicationLaunchTime();
|
||||
Result ClearApplicationLaunchTime();
|
||||
Result SubmitAttachment(ams::sf::Out<AttachmentId> out, const ams::sf::InBuffer &attachment_name, const ams::sf::InBuffer &attachment_data);
|
||||
Result CreateReportWithAttachments(ReportType report_type, const ams::sf::InBuffer &ctx_buffer, const ams::sf::InBuffer &data_buffer, const ams::sf::InBuffer &attachment_ids_buffer);
|
||||
};
|
||||
static_assert(erpt::sf::IsIContext<ContextImpl>);
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
namespace ams::erpt::srv {
|
||||
|
||||
class ManagerImpl final : public erpt::sf::IManager, public util::IntrusiveListBaseNode<ManagerImpl> {
|
||||
class ManagerImpl final : public util::IntrusiveListBaseNode<ManagerImpl> {
|
||||
private:
|
||||
os::SystemEvent system_event;
|
||||
public:
|
||||
|
@ -29,12 +29,13 @@ namespace ams::erpt::srv {
|
|||
public:
|
||||
static Result NotifyAll();
|
||||
public:
|
||||
virtual Result GetReportList(const ams::sf::OutBuffer &out_list, ReportType type_filter) override final;
|
||||
virtual Result GetEvent(ams::sf::OutCopyHandle out) override final;
|
||||
virtual Result CleanupReports() override final;
|
||||
virtual Result DeleteReport(const ReportId &report_id) override final;
|
||||
virtual Result GetStorageUsageStatistics(ams::sf::Out<StorageUsageStatistics> out) override final;
|
||||
virtual Result GetAttachmentList(const ams::sf::OutBuffer &out_buf, const ReportId &report_id) override final;
|
||||
Result GetReportList(const ams::sf::OutBuffer &out_list, ReportType type_filter);
|
||||
Result GetEvent(ams::sf::OutCopyHandle out);
|
||||
Result CleanupReports();
|
||||
Result DeleteReport(const ReportId &report_id);
|
||||
Result GetStorageUsageStatistics(ams::sf::Out<StorageUsageStatistics> out);
|
||||
Result GetAttachmentList(const ams::sf::OutBuffer &out_buf, const ReportId &report_id);
|
||||
};
|
||||
static_assert(erpt::sf::IsIManager<ManagerImpl>);
|
||||
|
||||
}
|
||||
|
|
|
@ -20,19 +20,20 @@ namespace ams::erpt::srv {
|
|||
|
||||
class Report;
|
||||
|
||||
class ReportImpl final : public erpt::sf::IReport {
|
||||
class ReportImpl final {
|
||||
private:
|
||||
Report *report;
|
||||
public:
|
||||
ReportImpl();
|
||||
~ReportImpl();
|
||||
public:
|
||||
virtual Result Open(const ReportId &report_id) override final;
|
||||
virtual Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer) override final;
|
||||
virtual Result SetFlags(ReportFlagSet flags) override final;
|
||||
virtual Result GetFlags(ams::sf::Out<ReportFlagSet> out) override final;
|
||||
virtual Result Close() override final;
|
||||
virtual Result GetSize(ams::sf::Out<s64> out) override final;
|
||||
Result Open(const ReportId &report_id);
|
||||
Result Read(ams::sf::Out<u32> out_count, const ams::sf::OutBuffer &out_buffer);
|
||||
Result SetFlags(ReportFlagSet flags);
|
||||
Result GetFlags(ams::sf::Out<ReportFlagSet> out);
|
||||
Result Close();
|
||||
Result GetSize(ams::sf::Out<s64> out);
|
||||
};
|
||||
static_assert(erpt::sf::IsIReport<ReportImpl>);
|
||||
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace ams::erpt::srv {
|
|||
class ErrorReportServiceManager : public ams::sf::hipc::ServerManager<ErrorReportNumServers, ErrorReportServerOptions, ErrorReportMaxSessions> {
|
||||
private:
|
||||
os::ThreadType thread;
|
||||
std::shared_ptr<erpt::srv::ContextImpl> context_session_object;
|
||||
std::shared_ptr<erpt::sf::IContext> context_session_object;
|
||||
private:
|
||||
static void ThreadFunction(void *_this) {
|
||||
reinterpret_cast<ErrorReportServiceManager *>(_this)->SetupAndLoopProcess();
|
||||
|
@ -51,14 +51,14 @@ namespace ams::erpt::srv {
|
|||
void SetupAndLoopProcess();
|
||||
public:
|
||||
ErrorReportServiceManager(erpt::srv::ContextImpl *c)
|
||||
: context_session_object(ams::sf::ServiceObjectTraits<erpt::srv::ContextImpl>::SharedPointerHelper::GetEmptyDeleteSharedPointer(c))
|
||||
: context_session_object(ams::sf::GetSharedPointerTo<erpt::sf::IContext, erpt::srv::ContextImpl>(c))
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
Result Initialize() {
|
||||
R_ABORT_UNLESS(this->RegisterServer<erpt::srv::ContextImpl>(ErrorReportContextServiceName, ErrorReportContextSessions, this->context_session_object));
|
||||
R_ABORT_UNLESS(this->RegisterServer<erpt::srv::SessionImpl>(ErrorReportReportServiceName, ErrorReportReportSessions));
|
||||
R_ABORT_UNLESS((this->RegisterServer<erpt::sf::IContext, erpt::srv::ContextImpl>(ErrorReportContextServiceName, ErrorReportContextSessions, this->context_session_object)));
|
||||
R_ABORT_UNLESS((this->RegisterServer<erpt::sf::ISession, erpt::srv::SessionImpl>(ErrorReportReportServiceName, ErrorReportReportSessions)));
|
||||
|
||||
this->ResumeProcessing();
|
||||
|
||||
|
@ -117,7 +117,7 @@ namespace ams::erpt::srv {
|
|||
}
|
||||
}
|
||||
|
||||
erpt::srv::ContextImpl g_context_object;
|
||||
constinit erpt::srv::ContextImpl g_context_object;
|
||||
ErrorReportServiceManager g_erpt_server_manager(std::addressof(g_context_object));
|
||||
|
||||
}
|
||||
|
|
|
@ -21,34 +21,34 @@
|
|||
|
||||
namespace ams::erpt::srv {
|
||||
|
||||
Result SessionImpl::OpenReport(ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out) {
|
||||
/* Create an interface. */
|
||||
auto intf = std::shared_ptr<ReportImpl>(new (std::nothrow) ReportImpl);
|
||||
R_UNLESS(intf != nullptr, erpt::ResultOutOfMemory());
|
||||
namespace {
|
||||
|
||||
/* Return it. */
|
||||
out.SetValue(std::move(intf));
|
||||
return ResultSuccess();
|
||||
template<typename Interface, typename Impl>
|
||||
ALWAYS_INLINE Result OpenInterface(ams::sf::Out<std::shared_ptr<Interface>> &out) {
|
||||
/* Define holder type. */
|
||||
using Holder = typename Interface::ImplHolder<Impl>;
|
||||
|
||||
/* Create an interface holder. */
|
||||
auto intf = std::shared_ptr<Holder>(new (std::nothrow) Holder);
|
||||
R_UNLESS(intf != nullptr, erpt::ResultOutOfMemory());
|
||||
|
||||
/* Return it. */
|
||||
out.SetValue(std::move(intf));
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Result SessionImpl::OpenReport(ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out) {
|
||||
return OpenInterface<erpt::sf::IReport, ReportImpl>(out);
|
||||
}
|
||||
|
||||
Result SessionImpl::OpenManager(ams::sf::Out<std::shared_ptr<erpt::sf::IManager>> out) {
|
||||
/* Create an interface. */
|
||||
auto intf = std::shared_ptr<ManagerImpl>(new (std::nothrow) ManagerImpl);
|
||||
R_UNLESS(intf != nullptr, erpt::ResultOutOfMemory());
|
||||
|
||||
/* Return it. */
|
||||
out.SetValue(std::move(intf));
|
||||
return ResultSuccess();
|
||||
return OpenInterface<erpt::sf::IManager, ManagerImpl>(out);
|
||||
}
|
||||
|
||||
Result SessionImpl::OpenAttachment(ams::sf::Out<std::shared_ptr<erpt::sf::IAttachment>> out) {
|
||||
/* Create an interface. */
|
||||
auto intf = std::shared_ptr<AttachmentImpl>(new (std::nothrow) AttachmentImpl);
|
||||
R_UNLESS(intf != nullptr, erpt::ResultOutOfMemory());
|
||||
|
||||
/* Return it. */
|
||||
out.SetValue(std::move(intf));
|
||||
return ResultSuccess();
|
||||
return OpenInterface<erpt::sf::IAttachment, AttachmentImpl>(out);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,11 +18,12 @@
|
|||
|
||||
namespace ams::erpt::srv {
|
||||
|
||||
class SessionImpl final : public erpt::sf::ISession {
|
||||
class SessionImpl final {
|
||||
public:
|
||||
virtual Result OpenReport(ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out) override final;
|
||||
virtual Result OpenManager(ams::sf::Out<std::shared_ptr<erpt::sf::IManager>> out) override final;
|
||||
virtual Result OpenAttachment(ams::sf::Out<std::shared_ptr<erpt::sf::IAttachment>> out) override final;
|
||||
Result OpenReport(ams::sf::Out<std::shared_ptr<erpt::sf::IReport>> out);
|
||||
Result OpenManager(ams::sf::Out<std::shared_ptr<erpt::sf::IManager>> out);
|
||||
Result OpenAttachment(ams::sf::Out<std::shared_ptr<erpt::sf::IAttachment>> out);
|
||||
};
|
||||
static_assert(erpt::sf::IsISession<SessionImpl>);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue