Revert "[hle] constexpr handler dispatch maps, introduce version gating (#4480)" (#4532)

This reverts commit 218c6705d9.

- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md).
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.

-------------------

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4532
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
This commit is contained in:
PavelBARABANOV
2026-10-15 08:45:15 +02:00
committed by crueter
parent 14da4482a4
commit e255c20db4
588 changed files with 14723 additions and 12534 deletions
+34 -8
View File
@@ -35,6 +35,22 @@ std::optional<u64> GetTitleIDForProcessID(Core::System& system, u64 process_id)
ARP_R::ARP_R(Core::System& system_, const ARPManager& manager_)
: ServiceFramework{system_, "arp:r"}, manager{manager_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ARP_R::GetApplicationLaunchProperty, "GetApplicationLaunchProperty"},
{1, &ARP_R::GetApplicationLaunchPropertyWithApplicationId, "GetApplicationLaunchPropertyWithApplicationId"},
{2, &ARP_R::GetApplicationControlProperty, "GetApplicationControlProperty"},
{3, &ARP_R::GetApplicationControlPropertyWithApplicationId, "GetApplicationControlPropertyWithApplicationId"},
{4, nullptr, "GetApplicationInstanceUnregistrationNotifier"},
{5, nullptr, "ListApplicationInstanceId"},
{6, nullptr, "GetMicroApplicationInstanceId"},
{7, nullptr, "GetApplicationCertificate"},
{9998, nullptr, "GetPreomiaApplicationLaunchProperty"},
{9999, nullptr, "GetPreomiaApplicationControlProperty"},
};
// clang-format on
RegisterHandlers(functions);
}
ARP_R::~ARP_R() = default;
@@ -148,10 +164,16 @@ public:
using IssuerFn = std::function<Result(u64, ApplicationLaunchProperty, std::vector<u8>)>;
explicit IRegistrar(Core::System& system_, IssuerFn&& issuer)
: ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {}
: ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IRegistrar::Issue, "Issue"},
{1, &IRegistrar::SetApplicationLaunchProperty, "SetApplicationLaunchProperty"},
{2, &IRegistrar::SetApplicationControlProperty, "SetApplicationControlProperty"},
};
// clang-format on
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
RegisterHandlers(functions);
}
private:
@@ -216,11 +238,6 @@ private:
rb.Push(ResultSuccess);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, &IRegistrar::Issue, "Issue"},
FunctionInfo{1, &IRegistrar::SetApplicationLaunchProperty, "SetApplicationLaunchProperty"},
FunctionInfo{2, &IRegistrar::SetApplicationControlProperty, "SetApplicationControlProperty"}
);
IssuerFn issue_process_id;
bool issued = false;
ApplicationLaunchProperty launch{};
@@ -229,6 +246,15 @@ private:
ARP_W::ARP_W(Core::System& system_, ARPManager& manager_)
: ServiceFramework{system_, "arp:w"}, manager{manager_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ARP_W::AcquireRegistrar, "AcquireRegistrar"},
{1, &ARP_W::UnregisterApplicationInstance , "UnregisterApplicationInstance "},
{2, nullptr, "AcquireUpdater"},
};
// clang-format on
RegisterHandlers(functions);
}
ARP_W::~ARP_W() = default;
-23
View File
@@ -24,21 +24,6 @@ private:
void GetApplicationControlProperty(HLERequestContext& ctx);
void GetApplicationControlPropertyWithApplicationId(HLERequestContext& ctx);
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, &ARP_R::GetApplicationLaunchProperty, "GetApplicationLaunchProperty"},
FunctionInfo{1, &ARP_R::GetApplicationLaunchPropertyWithApplicationId, "GetApplicationLaunchPropertyWithApplicationId"},
FunctionInfo{2, &ARP_R::GetApplicationControlProperty, "GetApplicationControlProperty"},
FunctionInfo{3, &ARP_R::GetApplicationControlPropertyWithApplicationId, "GetApplicationControlPropertyWithApplicationId"},
FunctionInfo{4, nullptr, "GetApplicationInstanceUnregistrationNotifier"},
FunctionInfo{5, nullptr, "ListApplicationInstanceId"},
FunctionInfo{6, nullptr, "GetMicroApplicationInstanceId"},
FunctionInfo{7, nullptr, "GetApplicationCertificate"},
FunctionInfo{9998, nullptr, "GetPreomiaApplicationLaunchProperty"},
FunctionInfo{9999, nullptr, "GetPreomiaApplicationControlProperty"}
);
const ARPManager& manager;
};
@@ -51,14 +36,6 @@ private:
void AcquireRegistrar(HLERequestContext& ctx);
void UnregisterApplicationInstance(HLERequestContext& ctx);
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, &ARP_W::AcquireRegistrar, "AcquireRegistrar"},
FunctionInfo{1, &ARP_W::UnregisterApplicationInstance , "UnregisterApplicationInstance "},
FunctionInfo{2, nullptr, "AcquireUpdater"}
);
ARPManager& manager;
std::shared_ptr<IRegistrar> registrar;
};
+42 -1
View File
@@ -11,7 +11,15 @@
namespace Service::Glue {
BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} {}
BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} {
// clang-format off
static const FunctionInfo functions[] = {
{100, &BGTC_T::OpenTaskService, "OpenTaskService"},
};
// clang-format on
RegisterHandlers(functions);
}
BGTC_T::~BGTC_T() = default;
@@ -24,11 +32,44 @@ void BGTC_T::OpenTaskService(HLERequestContext& ctx) {
}
ITaskService::ITaskService(Core::System& system_) : ServiceFramework{system_, "ITaskService"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "NotifyTaskStarting"},
{2, nullptr, "NotifyTaskFinished"},
{3, nullptr, "GetTriggerEvent"},
{4, nullptr, "IsInHalfAwake"},
{5, nullptr, "NotifyClientName"},
{6, nullptr, "IsInFullAwake"},
{11, nullptr, "ScheduleTask"},
{12, nullptr, "GetScheduledTaskInterval"},
{13, nullptr, "UnscheduleTask"},
{14, nullptr, "GetScheduleEvent"},
{15, nullptr, "SchedulePeriodicTask"},
{16, nullptr, "Unknown16"},
{101, nullptr, "GetOperationMode"},
{102, nullptr, "WillDisconnectNetworkWhenEnteringSleep"},
{103, nullptr, "WillStayHalfAwakeInsteadSleep"},
{200, nullptr, "Unknown200"},
};
// clang-format on
RegisterHandlers(functions);
}
ITaskService::~ITaskService() = default;
BGTC_SC::BGTC_SC(Core::System& system_) : ServiceFramework{system_, "bgtc:sc"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "GetState"},
{2, nullptr, "GetStateChangedEvent"},
{3, nullptr, "NotifyEnteringHalfAwake"},
{4, nullptr, "NotifyLeavingHalfAwake"},
{5, nullptr, "SetIsUsingSleepUnsupportedDevices"},
};
// clang-format on
RegisterHandlers(functions);
}
BGTC_SC::~BGTC_SC() = default;
-39
View File
@@ -20,57 +20,18 @@ public:
~BGTC_T() override;
void OpenTaskService(HLERequestContext& ctx);
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{100, &BGTC_T::OpenTaskService, "OpenTaskService"}
);
};
class ITaskService final : public ServiceFramework<ITaskService> {
public:
explicit ITaskService(Core::System& system_);
~ITaskService() override;
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{1, nullptr, "NotifyTaskStarting"},
FunctionInfo{2, nullptr, "NotifyTaskFinished"},
FunctionInfo{3, nullptr, "GetTriggerEvent"},
FunctionInfo{4, nullptr, "IsInHalfAwake"},
FunctionInfo{5, nullptr, "NotifyClientName"},
FunctionInfo{6, nullptr, "IsInFullAwake"},
FunctionInfo{11, nullptr, "ScheduleTask"},
FunctionInfo{12, nullptr, "GetScheduledTaskInterval"},
FunctionInfo{13, nullptr, "UnscheduleTask"},
FunctionInfo{14, nullptr, "GetScheduleEvent"},
FunctionInfo{15, nullptr, "SchedulePeriodicTask"},
FunctionInfo{16, nullptr, "Unknown16"},
FunctionInfo{101, nullptr, "GetOperationMode"},
FunctionInfo{102, nullptr, "WillDisconnectNetworkWhenEnteringSleep"},
FunctionInfo{103, nullptr, "WillStayHalfAwakeInsteadSleep"},
FunctionInfo{200, nullptr, "Unknown200"}
);
};
class BGTC_SC final : public ServiceFramework<BGTC_SC> {
public:
explicit BGTC_SC(Core::System& system_);
~BGTC_SC() override;
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{1, nullptr, "GetState"},
FunctionInfo{2, nullptr, "GetStateChangedEvent"},
FunctionInfo{3, nullptr, "NotifyEnteringHalfAwake"},
FunctionInfo{4, nullptr, "NotifyLeavingHalfAwake"},
FunctionInfo{5, nullptr, "SetIsUsingSleepUnsupportedDevices"}
);
};
} // namespace Service::Glue
+31 -7
View File
@@ -12,10 +12,14 @@ namespace Service::Glue {
// This is nn::err::context::IContextRegistrar
class IContextRegistrar : public ServiceFramework<IContextRegistrar> {
public:
IContextRegistrar(Core::System& system_) : ServiceFramework{system_, "IContextRegistrar"} {}
IContextRegistrar(Core::System& system_) : ServiceFramework{system_, "IContextRegistrar"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IContextRegistrar::Complete, "Complete"},
};
// clang-format on
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
RegisterHandlers(functions);
}
~IContextRegistrar() override = default;
@@ -37,21 +41,41 @@ private:
rb.Push(ResultSuccess);
rb.Push(0);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, &IContextRegistrar::Complete, "Complete"}
);
};
ECTX_W::ECTX_W(Core::System& system_) : ServiceFramework{system_, "ectx:w"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "CreateContextRegistrar"},
{1, nullptr, "CommitContext"},
{2, nullptr, "RemoveContext"},
};
// clang-format on
RegisterHandlers(functions);
}
ECTX_W::~ECTX_W() = default;
ECTX_R::ECTX_R(Core::System& system_) : ServiceFramework{system_, "ectx:r"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetContextInfo"},
{1, nullptr, "PullContext"},
{2, nullptr, "ListContextDescriptorWithResultForDebug"},
};
// clang-format on
RegisterHandlers(functions);
}
ECTX_R::~ECTX_R() = default;
ECTX_AW::ECTX_AW(Core::System& system_) : ServiceFramework{system_, "ectx:aw"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ECTX_AW::CreateContextRegistrar, "CreateContextRegistrar"},
{1, nullptr, "CommitContext"},
};
// clang-format on
RegisterHandlers(functions);
}
ECTX_AW::~ECTX_AW() = default;
-26
View File
@@ -18,30 +18,12 @@ class ECTX_W final : public ServiceFramework<ECTX_W> {
public:
explicit ECTX_W(Core::System& system_);
~ECTX_W() override;
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, nullptr, "CreateContextRegistrar"},
FunctionInfo{1, nullptr, "CommitContext"},
FunctionInfo{2, nullptr, "RemoveContext"}
);
};
class ECTX_R final : public ServiceFramework<ECTX_R> {
public:
explicit ECTX_R(Core::System& system_);
~ECTX_R() override;
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, nullptr, "GetContextInfo"},
FunctionInfo{1, nullptr, "PullContext"},
FunctionInfo{2, nullptr, "ListContextDescriptorWithResultForDebug"}
);
};
class ECTX_AW final : public ServiceFramework<ECTX_AW> {
@@ -51,14 +33,6 @@ public:
private:
void CreateContextRegistrar(HLERequestContext& ctx);
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, &ECTX_AW::CreateContextRegistrar, "CreateContextRegistrar"},
FunctionInfo{1, nullptr, "CommitContext"}
);
};
} // namespace Service::Glue
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+50 -46
View File
@@ -17,45 +17,9 @@
namespace Service::Glue {
namespace {
constexpr inline std::size_t MaxAlarms = 8;
}
std::optional<ServiceFrameworkBase::FunctionInfoBase> INotificationServicesForApplication::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{500, D<&INotificationServicesForApplication::RegisterAlarmSetting>, "RegisterAlarmSetting"},
FunctionInfo{510, D<&INotificationServicesForApplication::UpdateAlarmSetting>, "UpdateAlarmSetting"},
FunctionInfo{520, D<&INotificationServicesForApplication::ListAlarmSettings>, "ListAlarmSettings"},
FunctionInfo{530, D<&INotificationServicesForApplication::LoadApplicationParameter>, "LoadApplicationParameter"},
FunctionInfo{540, D<&INotificationServicesForApplication::DeleteAlarmSetting>, "DeleteAlarmSetting"},
FunctionInfo{1000, D<&INotificationServicesForApplication::Initialize>, "Initialize"}
);
return HandlerTableGenerateWithFind(key, functions);
}
std::optional<ServiceFrameworkBase::FunctionInfoBase> INotificationServices::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{500, D<&INotificationServices::RegisterAlarmSetting>, "RegisterAlarmSetting"},
FunctionInfo{510, D<&INotificationServices::UpdateAlarmSetting>, "UpdateAlarmSetting"},
FunctionInfo{520, D<&INotificationServices::ListAlarmSettings>, "ListAlarmSettings"},
FunctionInfo{530, D<&INotificationServices::LoadApplicationParameter>, "LoadApplicationParameter"},
FunctionInfo{540, D<&INotificationServices::DeleteAlarmSetting>, "DeleteAlarmSetting"},
FunctionInfo{1000, D<&INotificationServices::Initialize>, "Initialize"},
FunctionInfo{1010, nullptr, "ListNotifications"},
FunctionInfo{1020, nullptr, "DeleteNotification"},
FunctionInfo{1030, nullptr, "ClearNotifications"},
FunctionInfo{1040, D<&INotificationServices::OpenNotificationSystemEventAccessor>, "OpenNotificationSystemEventAccessor"},
FunctionInfo{1500, nullptr, "SetNotificationPresentationSetting"},
FunctionInfo{1510, D<&INotificationServices::GetNotificationPresentationSetting>, "GetNotificationPresentationSetting"},
FunctionInfo{2000, nullptr, "GetAlarmSetting"},
FunctionInfo{2001, nullptr, "GetAlarmSettingWithApplicationParameter"},
FunctionInfo{2010, nullptr, "MuteAlarmSetting"},
FunctionInfo{2020, nullptr, "IsAlarmSettingReady"},
FunctionInfo{8000, nullptr, "RegisterAppletResourceUserId"},
FunctionInfo{8010, nullptr, "UnregisterAppletResourceUserId"},
FunctionInfo{8999, nullptr, "GetCurrentTime"},
FunctionInfo{9000, nullptr, "GetAlarmSettingNextNotificationTime"}
);
return HandlerTableGenerateWithFind(key, functions);
}
Result NotificationServiceImpl::RegisterAlarmSetting(AlarmSettingId* out_alarm_setting_id,
@@ -160,6 +124,18 @@ std::vector<AlarmSetting>::iterator NotificationServiceImpl::GetAlarmFromId(Alar
INotificationServicesForApplication::INotificationServicesForApplication(Core::System& system_)
: ServiceFramework{system_, "notif:a"} {
// clang-format off
static const FunctionInfo functions[] = {
{500, D<&INotificationServicesForApplication::RegisterAlarmSetting>, "RegisterAlarmSetting"},
{510, D<&INotificationServicesForApplication::UpdateAlarmSetting>, "UpdateAlarmSetting"},
{520, D<&INotificationServicesForApplication::ListAlarmSettings>, "ListAlarmSettings"},
{530, D<&INotificationServicesForApplication::LoadApplicationParameter>, "LoadApplicationParameter"},
{540, D<&INotificationServicesForApplication::DeleteAlarmSetting>, "DeleteAlarmSetting"},
{1000, D<&INotificationServicesForApplication::Initialize>, "Initialize"},
};
// clang-format on
RegisterHandlers(functions);
}
INotificationServicesForApplication::~INotificationServicesForApplication() = default;
@@ -202,13 +178,18 @@ class INotificationSystemEventAccessor final
: public ServiceFramework<INotificationSystemEventAccessor> {
public:
explicit INotificationSystemEventAccessor(Core::System& system_)
: ServiceFramework{system_, "INotificationSystemEventAccessor"}
, service_context{system_, "INotificationSystemEventAccessor"} {
notification_event = service_context.CreateEvent("INotificationSystemEventAccessor:NotificationEvent");
}
: ServiceFramework{system_, "INotificationSystemEventAccessor"},
service_context{system_, "INotificationSystemEventAccessor"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"},
};
// clang-format on
std::optional<FunctionInfoBase> FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key, functions);
RegisterHandlers(functions);
notification_event =
service_context.CreateEvent("INotificationSystemEventAccessor:NotificationEvent");
}
~INotificationSystemEventAccessor() {
@@ -223,15 +204,38 @@ private:
R_SUCCEED();
}
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"}
);
KernelHelpers::ServiceContext service_context;
Kernel::KEvent* notification_event;
};
INotificationServices::INotificationServices(Core::System& system_)
: ServiceFramework{system_, "notif:s"} {
// clang-format off
static const FunctionInfo functions[] = {
{500, D<&INotificationServices::RegisterAlarmSetting>, "RegisterAlarmSetting"},
{510, D<&INotificationServices::UpdateAlarmSetting>, "UpdateAlarmSetting"},
{520, D<&INotificationServices::ListAlarmSettings>, "ListAlarmSettings"},
{530, D<&INotificationServices::LoadApplicationParameter>, "LoadApplicationParameter"},
{540, D<&INotificationServices::DeleteAlarmSetting>, "DeleteAlarmSetting"},
{1000, D<&INotificationServices::Initialize>, "Initialize"},
{1010, nullptr, "ListNotifications"},
{1020, nullptr, "DeleteNotification"},
{1030, nullptr, "ClearNotifications"},
{1040, D<&INotificationServices::OpenNotificationSystemEventAccessor>, "OpenNotificationSystemEventAccessor"},
{1500, nullptr, "SetNotificationPresentationSetting"},
{1510, D<&INotificationServices::GetNotificationPresentationSetting>, "GetNotificationPresentationSetting"},
{2000, nullptr, "GetAlarmSetting"},
{2001, nullptr, "GetAlarmSettingWithApplicationParameter"},
{2010, nullptr, "MuteAlarmSetting"},
{2020, nullptr, "IsAlarmSettingReady"},
{8000, nullptr, "RegisterAppletResourceUserId"},
{8010, nullptr, "UnregisterAppletResourceUserId"},
{8999, nullptr, "GetCurrentTime"},
{9000, nullptr, "GetAlarmSettingNextNotificationTime"},
};
// clang-format on
RegisterHandlers(functions);
}
INotificationServices::~INotificationServices() = default;
-2
View File
@@ -101,7 +101,6 @@ private:
Result DeleteAlarmSetting(AlarmSettingId alarm_setting_id);
Result Initialize(ClientAppletResourceUserId aruid);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
NotificationServiceImpl impl;
};
@@ -131,7 +130,6 @@ private:
Out<NotificationPresentationSetting> out_notification_presentation_setting,
NotificationChannel notification_channel);
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
NotificationServiceImpl impl;
};
} // namespace Service::Glue
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+28 -28
View File
@@ -24,42 +24,42 @@
namespace Service::Glue::Time {
std::optional<ServiceFrameworkBase::FunctionInfoBase> StaticService::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&StaticService::GetStandardUserSystemClock>, "GetStandardUserSystemClock"},
FunctionInfo{1, D<&StaticService::GetStandardNetworkSystemClock>, "GetStandardNetworkSystemClock"},
FunctionInfo{2, D<&StaticService::GetStandardSteadyClock>, "GetStandardSteadyClock"},
FunctionInfo{3, D<&StaticService::GetTimeZoneService>, "GetTimeZoneService"},
FunctionInfo{4, D<&StaticService::GetStandardLocalSystemClock>, "GetStandardLocalSystemClock"},
FunctionInfo{5, D<&StaticService::GetEphemeralNetworkSystemClock>, "GetEphemeralNetworkSystemClock"},
FunctionInfo{20, D<&StaticService::GetSharedMemoryNativeHandle>, "GetSharedMemoryNativeHandle"},
FunctionInfo{50, D<&StaticService::SetStandardSteadyClockInternalOffset>, "SetStandardSteadyClockInternalOffset"},
FunctionInfo{51, D<&StaticService::GetStandardSteadyClockRtcValue>, "GetStandardSteadyClockRtcValue"},
FunctionInfo{100, D<&StaticService::IsStandardUserSystemClockAutomaticCorrectionEnabled>, "IsStandardUserSystemClockAutomaticCorrectionEnabled"},
FunctionInfo{101, D<&StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled>, "SetStandardUserSystemClockAutomaticCorrectionEnabled"},
FunctionInfo{102, D<&StaticService::GetStandardUserSystemClockInitialYear>, "GetStandardUserSystemClockInitialYear"},
FunctionInfo{200, D<&StaticService::IsStandardNetworkSystemClockAccuracySufficient>, "IsStandardNetworkSystemClockAccuracySufficient"},
FunctionInfo{201, D<&StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime>, "GetStandardUserSystemClockAutomaticCorrectionUpdatedTime"},
FunctionInfo{300, D<&StaticService::CalculateMonotonicSystemClockBaseTimePoint>, "CalculateMonotonicSystemClockBaseTimePoint"},
FunctionInfo{400, D<&StaticService::GetClockSnapshot>, "GetClockSnapshot"},
FunctionInfo{401, D<&StaticService::GetClockSnapshotFromSystemClockContext>, "GetClockSnapshotFromSystemClockContext"},
FunctionInfo{500, D<&StaticService::CalculateStandardUserSystemClockDifferenceByUser>, "CalculateStandardUserSystemClockDifferenceByUser"},
FunctionInfo{501, D<&StaticService::CalculateSpanBetween>, "CalculateSpanBetween"}
);
return HandlerTableGenerateWithFind(key, functions);
}
StaticService::StaticService(Core::System& system_,
Service::PSC::Time::StaticServiceSetupInfo setup_info,
std::shared_ptr<TimeManager> time, const char* name)
: ServiceFramework{system_, name}, m_time_m{time->m_time_m},
: ServiceFramework{system_, name}, m_system{system_}, m_time_m{time->m_time_m},
m_setup_info{setup_info}, m_time_sm{time->m_time_sm},
m_file_timestamp_worker{time->m_file_timestamp_worker},
m_standard_steady_clock_resource{time->m_steady_clock_resource},
m_time_zone_binary{time->m_time_zone_binary} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&StaticService::GetStandardUserSystemClock>, "GetStandardUserSystemClock"},
{1, D<&StaticService::GetStandardNetworkSystemClock>, "GetStandardNetworkSystemClock"},
{2, D<&StaticService::GetStandardSteadyClock>, "GetStandardSteadyClock"},
{3, D<&StaticService::GetTimeZoneService>, "GetTimeZoneService"},
{4, D<&StaticService::GetStandardLocalSystemClock>, "GetStandardLocalSystemClock"},
{5, D<&StaticService::GetEphemeralNetworkSystemClock>, "GetEphemeralNetworkSystemClock"},
{20, D<&StaticService::GetSharedMemoryNativeHandle>, "GetSharedMemoryNativeHandle"},
{50, D<&StaticService::SetStandardSteadyClockInternalOffset>, "SetStandardSteadyClockInternalOffset"},
{51, D<&StaticService::GetStandardSteadyClockRtcValue>, "GetStandardSteadyClockRtcValue"},
{100, D<&StaticService::IsStandardUserSystemClockAutomaticCorrectionEnabled>, "IsStandardUserSystemClockAutomaticCorrectionEnabled"},
{101, D<&StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled>, "SetStandardUserSystemClockAutomaticCorrectionEnabled"},
{102, D<&StaticService::GetStandardUserSystemClockInitialYear>, "GetStandardUserSystemClockInitialYear"},
{200, D<&StaticService::IsStandardNetworkSystemClockAccuracySufficient>, "IsStandardNetworkSystemClockAccuracySufficient"},
{201, D<&StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime>, "GetStandardUserSystemClockAutomaticCorrectionUpdatedTime"},
{300, D<&StaticService::CalculateMonotonicSystemClockBaseTimePoint>, "CalculateMonotonicSystemClockBaseTimePoint"},
{400, D<&StaticService::GetClockSnapshot>, "GetClockSnapshot"},
{401, D<&StaticService::GetClockSnapshotFromSystemClockContext>, "GetClockSnapshotFromSystemClockContext"},
{500, D<&StaticService::CalculateStandardUserSystemClockDifferenceByUser>, "CalculateStandardUserSystemClockDifferenceByUser"},
{501, D<&StaticService::CalculateSpanBetween>, "CalculateSpanBetween"},
};
// clang-format on
RegisterHandlers(functions);
m_set_sys =
system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
m_system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
if (m_setup_info.can_write_local_clock && m_setup_info.can_write_user_clock &&
!m_setup_info.can_write_network_clock && m_setup_info.can_write_timezone_device_location &&
@@ -109,7 +109,7 @@ Result StaticService::GetTimeZoneService(OutInterface<TimeZoneService> out_servi
LOG_DEBUG(Service_Time, "called.");
*out_service = std::make_shared<TimeZoneService>(
system, m_file_timestamp_worker, m_setup_info.can_write_timezone_device_location,
m_system, m_file_timestamp_worker, m_setup_info.can_write_timezone_device_location,
m_time_zone_binary, m_time_zone);
R_SUCCEED();
}
+2 -1
View File
@@ -72,11 +72,12 @@ public:
Result CalculateSpanBetween(Out<s64> out_time, InClockSnapshot a, InClockSnapshot b);
private:
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
Core::System& m_system;
std::shared_ptr<Service::Set::ISystemSettingsServer> m_set_sys;
std::shared_ptr<Service::PSC::Time::ServiceManager> m_time_m;
std::shared_ptr<Service::PSC::Time::StaticService> m_wrapped_service;
Service::PSC::Time::StaticServiceSetupInfo m_setup_info;
std::shared_ptr<Service::PSC::Time::StaticService> m_time_sm;
std::shared_ptr<Service::PSC::Time::TimeZoneService> m_time_zone;
+20 -20
View File
@@ -19,26 +19,6 @@
namespace Service::Glue::Time {
std::optional<ServiceFrameworkBase::FunctionInfoBase> TimeZoneService::FindRequest(u32 key) {
static constexpr auto functions = CreateStaticMap(
FunctionInfo{0, D<&TimeZoneService::GetDeviceLocationName>, "GetDeviceLocationName"},
FunctionInfo{1, D<&TimeZoneService::SetDeviceLocationName>, "SetDeviceLocationName"},
FunctionInfo{2, D<&TimeZoneService::GetTotalLocationNameCount>, "GetTotalLocationNameCount"},
FunctionInfo{3, D<&TimeZoneService::LoadLocationNameList>, "LoadLocationNameList"},
FunctionInfo{4, D<&TimeZoneService::LoadTimeZoneRule>, "LoadTimeZoneRule"},
FunctionInfo{5, D<&TimeZoneService::GetTimeZoneRuleVersion>, "GetTimeZoneRuleVersion"},
FunctionInfo{6, D<&TimeZoneService::GetDeviceLocationNameAndUpdatedTime>, "GetDeviceLocationNameAndUpdatedTime"},
FunctionInfo{7, D<&TimeZoneService::SetDeviceLocationNameWithTimeZoneRule>, "SetDeviceLocationNameWithTimeZoneRule"},
FunctionInfo{8, D<&TimeZoneService::ParseTimeZoneBinary>, "ParseTimeZoneBinary"},
FunctionInfo{20, D<&TimeZoneService::GetDeviceLocationNameOperationEventReadableHandle>, "GetDeviceLocationNameOperationEventReadableHandle"},
FunctionInfo{100, D<&TimeZoneService::ToCalendarTime>, "ToCalendarTime"},
FunctionInfo{101, D<&TimeZoneService::ToCalendarTimeWithMyRule>, "ToCalendarTimeWithMyRule"},
FunctionInfo{201, D<&TimeZoneService::ToPosixTime>, "ToPosixTime"},
FunctionInfo{202, D<&TimeZoneService::ToPosixTimeWithMyRule>, "ToPosixTimeWithMyRule"}
);
return HandlerTableGenerateWithFind(key, functions);
}
TimeZoneService::TimeZoneService(
Core::System& system_, FileTimestampWorker& file_timestamp_worker,
bool can_write_timezone_device_location, TimeZoneBinary& time_zone_binary,
@@ -50,6 +30,26 @@ TimeZoneService::TimeZoneService(
, m_operation_event{system}
, m_time_zone_binary{time_zone_binary}
{
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&TimeZoneService::GetDeviceLocationName>, "GetDeviceLocationName"},
{1, D<&TimeZoneService::SetDeviceLocationName>, "SetDeviceLocationName"},
{2, D<&TimeZoneService::GetTotalLocationNameCount>, "GetTotalLocationNameCount"},
{3, D<&TimeZoneService::LoadLocationNameList>, "LoadLocationNameList"},
{4, D<&TimeZoneService::LoadTimeZoneRule>, "LoadTimeZoneRule"},
{5, D<&TimeZoneService::GetTimeZoneRuleVersion>, "GetTimeZoneRuleVersion"},
{6, D<&TimeZoneService::GetDeviceLocationNameAndUpdatedTime>, "GetDeviceLocationNameAndUpdatedTime"},
{7, D<&TimeZoneService::SetDeviceLocationNameWithTimeZoneRule>, "SetDeviceLocationNameWithTimeZoneRule"},
{8, D<&TimeZoneService::ParseTimeZoneBinary>, "ParseTimeZoneBinary"},
{20, D<&TimeZoneService::GetDeviceLocationNameOperationEventReadableHandle>, "GetDeviceLocationNameOperationEventReadableHandle"},
{100, D<&TimeZoneService::ToCalendarTime>, "ToCalendarTime"},
{101, D<&TimeZoneService::ToCalendarTimeWithMyRule>, "ToCalendarTimeWithMyRule"},
{201, D<&TimeZoneService::ToPosixTime>, "ToPosixTime"},
{202, D<&TimeZoneService::ToPosixTimeWithMyRule>, "ToPosixTimeWithMyRule"},
};
// clang-format on
RegisterHandlers(functions);
m_set_sys = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
}
@@ -80,7 +80,6 @@ public:
const Service::PSC::Time::CalendarTime& calendar_time);
private:
std::optional<FunctionInfoBase> FindRequest(u32 key) override;
std::shared_ptr<Service::Set::ISystemSettingsServer> m_set_sys;
bool m_can_write_timezone_device_location;
FileTimestampWorker& m_file_timestamp_worker;
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later