From bb334249645b8ad12dbcb22393bd82d24334f384 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 26 Sep 2026 06:34:09 +0000 Subject: [PATCH] 2026-09-26 06:34:09 Signed-off-by: lizzie --- docs/SubsystemHLE.md | 5 +- src/core/hle/service/acc/acc.cpp | 1501 +++++++++-------- src/core/hle/service/acc/acc.h | 64 - src/core/hle/service/audio/audio.cpp | 50 +- .../audio/final_output_recorder_manager.cpp | 5 +- src/core/hle/service/bpc/bpc.cpp | 30 +- src/core/hle/service/btdrv/btdrv.cpp | 294 ++-- src/core/hle/service/btm/btm.cpp | 5 +- src/core/hle/service/caps/caps.cpp | 5 +- src/core/hle/service/erpt/erpt.cpp | 52 +- src/core/hle/service/es/es.cpp | 203 +-- src/core/hle/service/eupld/eupld.cpp | 10 +- src/core/hle/service/fgm/fgm.cpp | 34 +- src/core/hle/service/friend/friend.cpp | 332 ++-- src/core/hle/service/glue/arp.cpp | 11 +- src/core/hle/service/glue/ectx.cpp | 8 +- src/core/hle/service/glue/notif.cpp | 7 +- src/core/hle/service/grc/grc.cpp | 10 +- src/core/hle/service/hid/hid.cpp | 15 +- src/core/hle/service/jit/jit.cpp | 22 +- src/core/hle/service/lbl/lbl.cpp | 65 +- src/core/hle/service/ldn/ldn.cpp | 73 +- src/core/hle/service/ldr/ldr.cpp | 15 +- src/core/hle/service/lm/lm.cpp | 29 +- src/core/hle/service/mig/mig.cpp | 78 +- src/core/hle/service/mii/mii.cpp | 95 +- src/core/hle/service/mm/mm_u.cpp | 21 +- src/core/hle/service/mnpp/mnpp.cpp | 20 +- src/core/hle/service/ncm/ncm.cpp | 88 +- src/core/hle/service/nfc/nfc.cpp | 43 +- src/core/hle/service/nfp/nfp.cpp | 24 +- src/core/hle/service/ngc/ngc.cpp | 95 +- src/core/hle/service/nim/nim.cpp | 540 +++--- src/core/hle/service/npns/npns.cpp | 184 +- src/core/hle/service/ns/ns.cpp | 49 +- src/core/hle/service/pcie/pcie.cpp | 15 +- src/core/hle/service/pcv/pcv.cpp | 67 +- src/core/hle/service/pm/pm.cpp | 50 +- src/core/hle/service/prepo/prepo.cpp | 85 +- src/core/hle/service/psc/psc.cpp | 47 +- src/core/hle/service/ptm/psm.cpp | 17 +- src/core/hle/service/ptm/ptm.cpp | 10 +- src/core/hle/service/ptm/ts.cpp | 12 +- src/core/hle/service/ro/ro.cpp | 17 +- src/core/hle/service/service.h | 27 +- src/core/hle/service/sockets/sockets.cpp | 15 +- src/core/hle/service/ssl/ssl.cpp | 105 +- src/core/hle/service/usb/usb.cpp | 71 +- 48 files changed, 2390 insertions(+), 2230 deletions(-) diff --git a/docs/SubsystemHLE.md b/docs/SubsystemHLE.md index df035b6193..4ebe333c53 100644 --- a/docs/SubsystemHLE.md +++ b/docs/SubsystemHLE.md @@ -51,8 +51,7 @@ public: // Define here your functions and methods, please order them. // Use FindRequestTipc for TIPC handlers. - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetSessionId"}, FunctionInfo{12, nullptr, "GetAccountId"}, FunctionInfo{13, nullptr, "GetLinkedNintendoAccountId"}, @@ -67,6 +66,8 @@ public: FunctionInfo{110, nullptr, "SetSystemProgramIdentification"}, FunctionInfo{111, nullptr, "EnsureIdTokenCacheAsync"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; ``` diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index da48f60524..04977c27d8 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp @@ -108,8 +108,7 @@ private: R_SUCCEED(); } - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, D<&IManagerForSystemService::CheckAvailability>, "CheckAvailability"}, FunctionInfo{1, D<&IManagerForSystemService::GetAccountId>, "GetAccountId"}, FunctionInfo{2, nullptr, "EnsureIdTokenCacheAsync"}, @@ -140,6 +139,8 @@ private: FunctionInfo{170, nullptr, "CreateDeviceHistoryRequest"}, // 17.0.0+ FunctionInfo{180, nullptr, "GetRequestForNintendoAccountReauthentication"} // 18.0.0+ ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } Common::UUID account_id; }; @@ -151,22 +152,23 @@ public: : ServiceFramework{system_, "IFloatingRegistrationRequest"} { } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetSessionId"}, + FunctionInfo{12, nullptr, "GetAccountId"}, + FunctionInfo{13, nullptr, "GetLinkedNintendoAccountId"}, + FunctionInfo{14, nullptr, "GetNickname"}, + FunctionInfo{15, nullptr, "GetProfileImage"}, + FunctionInfo{16, nullptr, "GetProfileLargeImage", MakeVersionGate({18,0,0})}, + FunctionInfo{21, nullptr, "LoadIdTokenCache"}, + FunctionInfo{100, nullptr, "RegisterUser"}, // [1.0.0-3.0.2] RegisterAsync + FunctionInfo{101, nullptr, "RegisterUserWithUid"}, // [1.0.0-3.0.2] RegisterWithUidAsync + FunctionInfo{102, nullptr, "RegisterNetworkServiceAccountAsync", MakeVersionGate({4,0,0})}, + FunctionInfo{103, nullptr, "RegisterNetworkServiceAccountWithUidAsync", MakeVersionGate({4,0,0})}, + FunctionInfo{110, nullptr, "SetSystemProgramIdentification"}, + FunctionInfo{111, nullptr, "EnsureIdTokenCacheAsync"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetSessionId"}, - FunctionInfo{12, nullptr, "GetAccountId"}, - FunctionInfo{13, nullptr, "GetLinkedNintendoAccountId"}, - FunctionInfo{14, nullptr, "GetNickname"}, - FunctionInfo{15, nullptr, "GetProfileImage"}, - FunctionInfo{16, nullptr, "GetProfileLargeImage", MakeVersionGate({18,0,0})}, - FunctionInfo{21, nullptr, "LoadIdTokenCache"}, - FunctionInfo{100, nullptr, "RegisterUser"}, // [1.0.0-3.0.2] RegisterAsync - FunctionInfo{101, nullptr, "RegisterUserWithUid"}, // [1.0.0-3.0.2] RegisterWithUidAsync - FunctionInfo{102, nullptr, "RegisterNetworkServiceAccountAsync", MakeVersionGate({4,0,0})}, - FunctionInfo{103, nullptr, "RegisterNetworkServiceAccountWithUidAsync", MakeVersionGate({4,0,0})}, - FunctionInfo{110, nullptr, "SetSystemProgramIdentification"}, - FunctionInfo{111, nullptr, "EnsureIdTokenCacheAsync"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -183,8 +185,7 @@ private: rb.Push(false); } - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "CheckAvailability"}, FunctionInfo{1, nullptr, "GetAccountId"}, FunctionInfo{2, nullptr, "EnsureIdTokenCacheAsync"}, @@ -236,6 +237,8 @@ private: FunctionInfo{997, nullptr, "DebugUnlinkNintendoAccountAsync"}, FunctionInfo{998, nullptr, "DebugSetAvailabilityErrorDetail"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -245,8 +248,7 @@ public: : ServiceFramework{system_, "IAuthorizationRequest"} { } - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetSessionId"}, FunctionInfo{10, nullptr, "InvokeWithoutInteractionAsync"}, FunctionInfo{19, nullptr, "IsAuthorized"}, @@ -254,6 +256,8 @@ public: FunctionInfo{21, nullptr, "GetIdToken"}, FunctionInfo{22, nullptr, "GetState"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -262,14 +266,15 @@ public: explicit IOAuthProcedure(Core::System& system_, Common::UUID) : ServiceFramework{system_, "IOAuthProcedure"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "PrepareAsync"}, FunctionInfo{1, nullptr, "GetRequest"}, FunctionInfo{2, nullptr, "ApplyResponse"}, FunctionInfo{3, nullptr, "ApplyResponseAsync"}, FunctionInfo{10, nullptr, "Suspend"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -280,8 +285,7 @@ public: : ServiceFramework{system_, "IOAuthProcedureForExternalNsa"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "PrepareAsync"}, FunctionInfo{1, nullptr, "GetRequest"}, FunctionInfo{2, nullptr, "ApplyResponse"}, @@ -293,6 +297,8 @@ public: FunctionInfo{103, nullptr, "GetProfileImage"}, FunctionInfo{104, nullptr, "GetProfileLargeImage"} // 18.0.0+ ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -302,8 +308,7 @@ public: : ServiceFramework{system_, "IOAuthProcedureForNintendoAccountLinkage"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "PrepareAsync"}, FunctionInfo{1, nullptr, "GetRequest"}, FunctionInfo{2, nullptr, "ApplyResponse"}, @@ -318,6 +323,8 @@ public: FunctionInfo{221, nullptr, "RegisterUserWithProfileAsync"}, // 17.0.0+ FunctionInfo{230, nullptr, "RegisterUserWithLargeImageProfileAsync"} // 18.0.0+ ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -326,10 +333,11 @@ public: explicit INotifier(Core::System& system_, Common::UUID) : ServiceFramework{system_, "INotifier"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetSystemEvent"} - ); + ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -610,10 +618,11 @@ public: explicit ISessionObject(Core::System& system_, Common::UUID) : ServiceFramework{system_, "ISessionObject"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{999, nullptr, "Dummy"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -622,8 +631,7 @@ public: explicit IGuestLoginRequest(Core::System& system_, Common::UUID) : ServiceFramework{system_, "IGuestLoginRequest"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetSessionId"}, FunctionInfo{11, nullptr, "Unknown"}, // 1.0.0 - 2.3.0 (the name is blank on Switchbrew) FunctionInfo{12, nullptr, "GetAccountId"}, @@ -633,6 +641,8 @@ public: FunctionInfo{16, nullptr, "GetProfileLargeImage"}, // 18.0.0+ FunctionInfo{21, nullptr, "LoadIdTokenCache"} // 3.0.0+ ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -672,18 +682,7 @@ public: profile_manager{profile_manager_} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IManagerForApplication::CheckAvailability, "CheckAvailability"}, - FunctionInfo{1, &IManagerForApplication::GetAccountId, "GetAccountId"}, - FunctionInfo{2, &IManagerForApplication::EnsureIdTokenCacheAsync, "EnsureIdTokenCacheAsync"}, - FunctionInfo{3, &IManagerForApplication::LoadIdTokenCacheDeprecated, "LoadIdTokenCacheDeprecated"}, - FunctionInfo{4, &IManagerForApplication::LoadIdTokenCache, "LoadIdTokenCache"}, - FunctionInfo{130, &IManagerForApplication::GetNintendoAccountUserResourceCacheForApplication, "GetNintendoAccountUserResourceCacheForApplication"}, - FunctionInfo{136, &IManagerForApplication::GetNintendoAccountUserResourceCacheForApplication, "GetNintendoAccountUserResourceCache"}, // 19.0.0+ - FunctionInfo{150, nullptr, "CreateAuthorizationRequest"}, - FunctionInfo{160, &IManagerForApplication::StoreOpenContext, "StoreOpenContext"}, - FunctionInfo{170, nullptr, "LoadNetworkServiceLicenseKindAsync"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -753,6 +752,18 @@ private: rb.Push(ResultSuccess); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IManagerForApplication::CheckAvailability, "CheckAvailability"}, + FunctionInfo{1, &IManagerForApplication::GetAccountId, "GetAccountId"}, + FunctionInfo{2, &IManagerForApplication::EnsureIdTokenCacheAsync, "EnsureIdTokenCacheAsync"}, + FunctionInfo{3, &IManagerForApplication::LoadIdTokenCacheDeprecated, "LoadIdTokenCacheDeprecated"}, + FunctionInfo{4, &IManagerForApplication::LoadIdTokenCache, "LoadIdTokenCache"}, + FunctionInfo{130, &IManagerForApplication::GetNintendoAccountUserResourceCacheForApplication, "GetNintendoAccountUserResourceCacheForApplication"}, + FunctionInfo{136, &IManagerForApplication::GetNintendoAccountUserResourceCacheForApplication, "GetNintendoAccountUserResourceCache"}, // 19.0.0+ + FunctionInfo{150, nullptr, "CreateAuthorizationRequest"}, + FunctionInfo{160, &IManagerForApplication::StoreOpenContext, "StoreOpenContext"}, + FunctionInfo{170, nullptr, "LoadNetworkServiceLicenseKindAsync"} + ); std::shared_ptr ensure_token_id{}; std::shared_ptr profile_manager; }; @@ -764,14 +775,15 @@ public: explicit IAsyncNetworkServiceLicenseKindContext(Core::System& system_, Common::UUID) : ServiceFramework{system_, "IAsyncNetworkServiceLicenseKindContext"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetSystemEvent"}, + FunctionInfo{1, nullptr, "Cancel"}, + FunctionInfo{2, nullptr, "HasDone"}, + FunctionInfo{3, nullptr, "GetResult"}, + FunctionInfo{4, nullptr, "GetNetworkServiceLicenseKind"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetSystemEvent"}, - FunctionInfo{1, nullptr, "Cancel"}, - FunctionInfo{2, nullptr, "HasDone"}, - FunctionInfo{3, nullptr, "GetResult"}, - FunctionInfo{4, nullptr, "GetNetworkServiceLicenseKind"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -782,27 +794,28 @@ public: explicit IOAuthProcedureForUserRegistration(Core::System& system_, Common::UUID) : ServiceFramework{system_, "IOAuthProcedureForUserRegistration"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "PrepareAsync"}, + FunctionInfo{1, nullptr, "GetRequest"}, + FunctionInfo{2, nullptr, "ApplyResponse"}, + FunctionInfo{3, nullptr, "ApplyResponseAsync"}, + FunctionInfo{10, nullptr, "Suspend"}, + FunctionInfo{100, nullptr, "GetAccountId"}, + FunctionInfo{101, nullptr, "GetLinkedNintendoAccountId"}, + FunctionInfo{102, nullptr, "GetNickname"}, + FunctionInfo{103, nullptr, "GetProfileImage"}, + FunctionInfo{104, nullptr, "GetProfileLargeImage"}, // 18.0.0+ + FunctionInfo{110, nullptr, "RegisterUserAsync"}, + FunctionInfo{111, nullptr, "GetUid"}, + FunctionInfo{200, nullptr, "ApplyResponseForUserCreationAsync"}, // 17.0.0+ + FunctionInfo{205, nullptr, "SuspendAfterApplyResponse"}, // 17.0.0+ + FunctionInfo{210, nullptr, "IsProfileAvailable"}, // 17.0.0+ + FunctionInfo{220, nullptr, "RegisterUserAsyncWithoutProfile"}, // 17.0.0+ + FunctionInfo{221, nullptr, "RegisterUserWithProfileAsync"}, // 17.0.0+ + FunctionInfo{230, nullptr, "RegisterUserWithLargeImageProfileAsync"} // 18.0.0+ + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "PrepareAsync"}, - FunctionInfo{1, nullptr, "GetRequest"}, - FunctionInfo{2, nullptr, "ApplyResponse"}, - FunctionInfo{3, nullptr, "ApplyResponseAsync"}, - FunctionInfo{10, nullptr, "Suspend"}, - FunctionInfo{100, nullptr, "GetAccountId"}, - FunctionInfo{101, nullptr, "GetLinkedNintendoAccountId"}, - FunctionInfo{102, nullptr, "GetNickname"}, - FunctionInfo{103, nullptr, "GetProfileImage"}, - FunctionInfo{104, nullptr, "GetProfileLargeImage"}, // 18.0.0+ - FunctionInfo{110, nullptr, "RegisterUserAsync"}, - FunctionInfo{111, nullptr, "GetUid"}, - FunctionInfo{200, nullptr, "ApplyResponseForUserCreationAsync"}, // 17.0.0+ - FunctionInfo{205, nullptr, "SuspendAfterApplyResponse"}, // 17.0.0+ - FunctionInfo{210, nullptr, "IsProfileAvailable"}, // 17.0.0+ - FunctionInfo{220, nullptr, "RegisterUserAsyncWithoutProfile"}, // 17.0.0+ - FunctionInfo{221, nullptr, "RegisterUserWithProfileAsync"}, // 17.0.0+ - FunctionInfo{230, nullptr, "RegisterUserWithLargeImageProfileAsync"} // 18.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -810,22 +823,23 @@ class DAUTH_O final : public ServiceFramework { public: explicit DAUTH_O(Core::System& system_, Common::UUID) : ServiceFramework{system_, "dauth:o"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, + FunctionInfo{1, nullptr, "LoadAuthenticationTokenCache"}, + FunctionInfo{2, nullptr, "InvalidateAuthenticationTokenCache"}, + FunctionInfo{3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"}, + FunctionInfo{10, nullptr, "EnsureEdgeTokenCacheAsync"}, + FunctionInfo{11, nullptr, "LoadEdgeTokenCache"}, + FunctionInfo{12, nullptr, "InvalidateEdgeTokenCache"}, + FunctionInfo{13, nullptr, "IsEdgeTokenCacheAvailable"}, + FunctionInfo{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, + FunctionInfo{21, nullptr, "LoadApplicationAuthenticationTokenCache"}, + FunctionInfo{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, + FunctionInfo{23, nullptr, "IsApplicationAuthenticationCacheAvailable"}, + FunctionInfo{24, nullptr, "InvalidateApplicationAuthenticationCache"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, - FunctionInfo{1, nullptr, "LoadAuthenticationTokenCache"}, - FunctionInfo{2, nullptr, "InvalidateAuthenticationTokenCache"}, - FunctionInfo{3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"}, - FunctionInfo{10, nullptr, "EnsureEdgeTokenCacheAsync"}, - FunctionInfo{11, nullptr, "LoadEdgeTokenCache"}, - FunctionInfo{12, nullptr, "InvalidateEdgeTokenCache"}, - FunctionInfo{13, nullptr, "IsEdgeTokenCacheAvailable"}, - FunctionInfo{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, - FunctionInfo{21, nullptr, "LoadApplicationAuthenticationTokenCache"}, - FunctionInfo{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, - FunctionInfo{23, nullptr, "IsApplicationAuthenticationCacheAvailable"}, - FunctionInfo{24, nullptr, "InvalidateApplicationAuthenticationCache"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -835,383 +849,410 @@ public: explicit IAsyncResult(Core::System& system_, Common::UUID) : ServiceFramework{system_, "IAsyncResult"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetResult"}, + FunctionInfo{1, nullptr, "Cancel"}, + FunctionInfo{2, nullptr, "IsAvailable"}, + FunctionInfo{3, nullptr, "GetSystemEvent"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetResult"}, - FunctionInfo{1, nullptr, "Cancel"}, - FunctionInfo{2, nullptr, "IsAvailable"}, - FunctionInfo{3, nullptr, "GetSystemEvent"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; -void Module::Interface::GetUserCount(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(static_cast(profile_manager->GetUserCount())); -} +class Module final { +public: + class Interface : public ServiceFramework { + public: + explicit Interface(std::shared_ptr module_, std::shared_ptr profile_manager_, Core::System& system_, const char* name) + : ServiceFramework{system_, name} + , module{std::move(module_)} + , profile_manager{std::move(profile_manager_)} + {} + ~Interface() override = default; -void Module::Interface::GetUserExistence(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - Common::UUID user_id = rp.PopRaw(); - LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString()); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(profile_manager->UserExists(user_id)); -} - -void Module::Interface::ListAllUsers(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - ctx.WriteBuffer(profile_manager->GetAllUsers()); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void Module::Interface::ListOpenUsers(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - ctx.WriteBuffer(profile_manager->GetOpenUsers()); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void Module::Interface::GetLastOpenedUser(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(profile_manager->GetLastOpenedUser()); -} - -void Module::Interface::GetProfile(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - Common::UUID user_id = rp.PopRaw(); - LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString()); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface(ctx, system, user_id, *profile_manager); -} - -void Module::Interface::IsUserRegistrationRequestPermitted(HLERequestContext& ctx) { - LOG_WARNING(Service_ACC, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(profile_manager->CanSystemRegisterUser()); -} - -void Module::Interface::InitializeApplicationInfo(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(InitializeApplicationInfoBase()); -} - -void Module::Interface::InitializeApplicationInfoRestricted(HLERequestContext& ctx) { - LOG_WARNING(Service_ACC, "(Partial implementation) called"); - - // TODO(ogniK): We require checking if the user actually owns the title and what not. As of - // currently, we assume the user owns the title. InitializeApplicationInfoBase SHOULD be called - // first then we do extra checks if the game is a digital copy. - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(InitializeApplicationInfoBase()); -} - -Result Module::Interface::InitializeApplicationInfoBase() { - if (application_info) { - LOG_ERROR(Service_ACC, "Application already initialized"); - return Account::ResultApplicationInfoAlreadyInitialized; - } - - // TODO(ogniK): This should be changed to reflect the target process for when we have multiple - // processes emulated. As we don't actually have pid support we should assume we're just using - // our own process - Glue::ApplicationLaunchProperty launch_property{}; - const auto result = system.GetARPManager().GetLaunchProperty( - &launch_property, system.GetApplicationProcessProgramID()); - - if (result != ResultSuccess) { - LOG_ERROR(Service_ACC, "Failed to get launch property"); - return Account::ResultInvalidApplication; - } - - switch (launch_property.base_game_storage_id) { - case FileSys::StorageId::GameCard: - application_info.application_type = ApplicationType::GameCard; - break; - case FileSys::StorageId::Host: - case FileSys::StorageId::NandSystem: - case FileSys::StorageId::NandUser: - case FileSys::StorageId::SdCard: - case FileSys::StorageId::None: // Yuzu specific, differs from hardware - application_info.application_type = ApplicationType::Digital; - break; - default: - LOG_ERROR(Service_ACC, "Invalid game storage ID! storage_id={}", - launch_property.base_game_storage_id); - return Account::ResultInvalidApplication; - } - - LOG_WARNING(Service_ACC, "ApplicationInfo init required"); - // TODO(ogniK): Actual initialization here - - return ResultSuccess; -} - -void Module::Interface::GetBaasAccountManagerForApplication(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface(ctx, system, profile_manager); -} - -void Module::Interface::IsUserAccountSwitchLocked(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - FileSys::NACP nacp; - const auto res = system.GetAppLoader().ReadControlData(nacp); - - bool is_locked = false; - - if (res != Loader::ResultStatus::Success) { - const FileSys::PatchManager pm{system.GetApplicationProcessProgramID(), - system.GetFileSystemController(), - system.GetContentProvider()}; - const auto nacp_unique = pm.GetControlMetadata().first; - - if (nacp_unique != nullptr) { - is_locked = nacp_unique->GetUserAccountSwitchLock(); - } else { - LOG_ERROR(Service_ACC, "nacp_unique is null!"); + void GetUserCount(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(static_cast(profile_manager->GetUserCount())); } - } else { - is_locked = nacp.GetUserAccountSwitchLock(); - } - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(is_locked); -} + void GetUserExistence(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + Common::UUID user_id = rp.PopRaw(); + LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString()); -void Module::Interface::InitializeApplicationInfoV2(HLERequestContext& ctx) { - LOG_WARNING(Service_ACC, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(profile_manager->UserExists(user_id)); + } - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + void ListAllUsers(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + ctx.WriteBuffer(profile_manager->GetAllUsers()); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } -void Module::Interface::BeginUserRegistration(HLERequestContext& ctx) { - const auto user_id = Common::UUID::MakeRandom(); - profile_manager->CreateNewUser(user_id, "Eden"); + void ListOpenUsers(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + ctx.WriteBuffer(profile_manager->GetOpenUsers()); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); + void GetLastOpenedUser(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(profile_manager->GetLastOpenedUser()); + } - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(user_id); -} + void GetProfile(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + Common::UUID user_id = rp.PopRaw(); + LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString()); -void Module::Interface::CompleteUserRegistration(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - Common::UUID user_id = rp.PopRaw(); + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(ctx, system, user_id, *profile_manager); + } - LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); + void IsUserRegistrationRequestPermitted(HLERequestContext& ctx) { + LOG_WARNING(Service_ACC, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(profile_manager->CanSystemRegisterUser()); + } - profile_manager->WriteUserSaveFile(); + void InitializeApplicationInfo(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(InitializeApplicationInfoBase()); + } - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + void InitializeApplicationInfoRestricted(HLERequestContext& ctx) { + LOG_WARNING(Service_ACC, "(Partial implementation) called"); -void Module::Interface::DeleteUser(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - Common::UUID user_id = rp.PopRaw(); - LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); - if (!profile_manager->RemoveUser(user_id)) { - LOG_ERROR(Service_ACC, "Failed to delete user with uuid={}", user_id.RawString()); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(1U); - return; - } - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + // TODO(ogniK): We require checking if the user actually owns the title and what not. As of + // currently, we assume the user owns the title. InitializeApplicationInfoBase SHOULD be called + // first then we do extra checks if the game is a digital copy. -void Module::Interface::SetUserPosition(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(InitializeApplicationInfoBase()); + } - u64 position = rp.Pop(); - Common::UUID user_id = rp.PopRaw(); + void GetBaasAccountManagerForApplication(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(ctx, system, profile_manager); + } - LOG_DEBUG(Service_ACC, "called, position={} user_id={}", position, user_id.FormattedString()); + void IsUserAccountSwitchLocked(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + FileSys::NACP nacp; + const auto res = system.GetAppLoader().ReadControlData(nacp); - profile_manager->SetUserPosition(position, user_id); + bool is_locked = false; - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + if (res != Loader::ResultStatus::Success) { + const FileSys::PatchManager pm{system.GetApplicationProcessProgramID(), + system.GetFileSystemController(), + system.GetContentProvider()}; + const auto nacp_unique = pm.GetControlMetadata().first; -void Module::Interface::GetProfileEditor(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - Common::UUID user_id = rp.PopRaw(); + if (nacp_unique != nullptr) { + is_locked = nacp_unique->GetUserAccountSwitchLock(); + } else { + LOG_ERROR(Service_ACC, "nacp_unique is null!"); + } + } else { + is_locked = nacp.GetUserAccountSwitchLock(); + } - LOG_DEBUG(Service_ACC, "called, user_id=0x{}", user_id.RawString()); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(is_locked); + } - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface(ctx, system, user_id, *profile_manager); -} + void InitializeApplicationInfoV2(HLERequestContext& ctx) { + LOG_WARNING(Service_ACC, "(STUBBED) called"); -void Module::Interface::GetBaasAccountAdministrator(HLERequestContext &ctx) { - IPC::RequestParser rp{ctx}; - const auto uuid = rp.PopRaw(); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString()); + void BeginUserRegistration(HLERequestContext& ctx) { + const auto user_id = Common::UUID::MakeRandom(); + profile_manager->CreateNewUser(user_id, "Eden"); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface(ctx, system, uuid); -} + LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); -void Module::Interface::ListQualifiedUsers(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(user_id); + } - // All users should be qualified. We don't actually have parental control or anything to do with - // nintendo online currently. We're just going to assume the user running the game has access to - // the game regardless of parental control settings. - ctx.WriteBuffer(profile_manager->GetAllUsers()); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + void CompleteUserRegistration(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + Common::UUID user_id = rp.PopRaw(); -void Module::Interface::ListOpenContextStoredUsers(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); + LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); - ctx.WriteBuffer(profile_manager->GetStoredOpenedUsers()); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} + profile_manager->WriteUserSaveFile(); -void Module::Interface::StoreSaveDataThumbnailApplication(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto uuid = rp.PopRaw(); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}", uuid.RawString()); + void DeleteUser(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + Common::UUID user_id = rp.PopRaw(); + LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); + if (!profile_manager->RemoveUser(user_id)) { + LOG_ERROR(Service_ACC, "Failed to delete user with uuid={}", user_id.RawString()); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(1U); + return; + } + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - // TODO(ogniK): Check if application ID is zero on acc initialize. As we don't have a reliable - // way of confirming things like the TID, we're going to assume a non zero value for the time - // being. - constexpr u64 tid{1}; - StoreSaveDataThumbnail(ctx, uuid, tid); -} + void SetUserPosition(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; -void Module::Interface::GetBaasAccountManagerForSystemService(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto uuid = rp.PopRaw(); + u64 position = rp.Pop(); + Common::UUID user_id = rp.PopRaw(); - LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString()); + LOG_DEBUG(Service_ACC, "called, position={} user_id={}", position, user_id.FormattedString()); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface(ctx, system, uuid); -} + profile_manager->SetUserPosition(position, user_id); -void Module::Interface::StoreSaveDataThumbnailSystem(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto uuid = rp.PopRaw(); - const auto tid = rp.Pop(); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}, tid={:016X}", uuid.RawString(), tid); - StoreSaveDataThumbnail(ctx, uuid, tid); -} + void GetProfileEditor(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + Common::UUID user_id = rp.PopRaw(); -void Module::Interface::GetPinCodeLength(HLERequestContext& ctx) { - LOG_WARNING(Service_ACC, "(STUBBED) called"); + LOG_DEBUG(Service_ACC, "called, user_id=0x{}", user_id.RawString()); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(0); -} + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(ctx, system, user_id, *profile_manager); + } -void Module::Interface::StoreSaveDataThumbnail(HLERequestContext& ctx, const Common::UUID& uuid, - const u64 tid) { - IPC::ResponseBuilder rb{ctx, 2}; + void GetBaasAccountAdministrator(HLERequestContext &ctx) { + IPC::RequestParser rp{ctx}; + const auto uuid = rp.PopRaw(); - if (tid == 0) { - LOG_ERROR(Service_ACC, "TitleID is not valid!"); - rb.Push(Account::ResultInvalidApplication); - return; - } + LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString()); - if (uuid.IsInvalid()) { - LOG_ERROR(Service_ACC, "User ID is not valid!"); - rb.Push(Account::ResultInvalidUserId); - return; - } - const auto thumbnail_size = ctx.GetReadBufferSize(); - if (thumbnail_size != THUMBNAIL_SIZE) { - LOG_ERROR(Service_ACC, "Buffer size is empty! size={:X} expecting {:X}", thumbnail_size, - THUMBNAIL_SIZE); - rb.Push(Account::ResultInvalidArrayLength); - return; - } + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(ctx, system, uuid); + } - // TODO(ogniK): Construct save data thumbnail - rb.Push(ResultSuccess); -} + void ListQualifiedUsers(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); -void Module::Interface::TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - // A u8 is passed into this function which we can safely ignore. It's to determine if we have - // access to use the network or not by the looks of it - IPC::ResponseBuilder rb{ctx, 6}; - if (profile_manager->GetUserCount() != 1) { - rb.Push(ResultSuccess); - rb.PushRaw(Common::InvalidUUID); - return; - } + // All users should be qualified. We don't actually have parental control or anything to do with + // nintendo online currently. We're just going to assume the user running the game has access to + // the game regardless of parental control settings. + ctx.WriteBuffer(profile_manager->GetAllUsers()); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } - const auto user_list = profile_manager->GetAllUsers(); - if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) { - rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code - rb.PushRaw(Common::InvalidUUID); - return; - } + void ListOpenContextStoredUsers(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); - // Select the first user we have - rb.Push(ResultSuccess); - rb.PushRaw(profile_manager->GetUser(0)->uuid); -} + ctx.WriteBuffer(profile_manager->GetStoredOpenedUsers()); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } -void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx) { - LOG_DEBUG(Service_ACC, "called"); - // A u8 is passed into this function which we can safely ignore. It's to determine if we have - // access to use the network or not by the looks of it - IPC::ResponseBuilder rb{ctx, 6}; - if (profile_manager->GetUserCount() != 1) { - rb.Push(ResultSuccess); - rb.PushRaw(Common::InvalidUUID); - return; - } + void StoreSaveDataThumbnailApplication(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto uuid = rp.PopRaw(); - const auto user_list = profile_manager->GetAllUsers(); - if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) { - rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code - rb.PushRaw(Common::InvalidUUID); - return; - } + LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}", uuid.RawString()); - // Select the first user we have - rb.Push(ResultSuccess); - rb.PushRaw(profile_manager->GetUser(0)->uuid); -} + // TODO(ogniK): Check if application ID is zero on acc initialize. As we don't have a reliable + // way of confirming things like the TID, we're going to assume a non zero value for the time + // being. + constexpr u64 tid{1}; + StoreSaveDataThumbnail(ctx, uuid, tid); + } -Module::Interface::Interface(std::shared_ptr module_, - std::shared_ptr profile_manager_, - Core::System& system_, const char* name) - : ServiceFramework{system_, name}, module{std::move(module_)}, - profile_manager{std::move(profile_manager_)} {} + void GetBaasAccountManagerForSystemService(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto uuid = rp.PopRaw(); -Module::Interface::~Interface() = default; + LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString()); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(ctx, system, uuid); + } + + void StoreSaveDataThumbnailSystem(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto uuid = rp.PopRaw(); + const auto tid = rp.Pop(); + + LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}, tid={:016X}", uuid.RawString(), tid); + StoreSaveDataThumbnail(ctx, uuid, tid); + } + + void GetPinCodeLength(HLERequestContext& ctx) { + LOG_WARNING(Service_ACC, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(0); + } + + void TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + // A u8 is passed into this function which we can safely ignore. It's to determine if we have + // access to use the network or not by the looks of it + IPC::ResponseBuilder rb{ctx, 6}; + if (profile_manager->GetUserCount() != 1) { + rb.Push(ResultSuccess); + rb.PushRaw(Common::InvalidUUID); + return; + } + + const auto user_list = profile_manager->GetAllUsers(); + if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) { + rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code + rb.PushRaw(Common::InvalidUUID); + return; + } + + // Select the first user we have + rb.Push(ResultSuccess); + rb.PushRaw(profile_manager->GetUser(0)->uuid); + } + + void TrySelectUserWithoutInteraction(HLERequestContext& ctx) { + LOG_DEBUG(Service_ACC, "called"); + // A u8 is passed into this function which we can safely ignore. It's to determine if we have + // access to use the network or not by the looks of it + IPC::ResponseBuilder rb{ctx, 6}; + if (profile_manager->GetUserCount() != 1) { + rb.Push(ResultSuccess); + rb.PushRaw(Common::InvalidUUID); + return; + } + + const auto user_list = profile_manager->GetAllUsers(); + if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) { + rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code + rb.PushRaw(Common::InvalidUUID); + return; + } + + // Select the first user we have + rb.Push(ResultSuccess); + rb.PushRaw(profile_manager->GetUser(0)->uuid); + } + + private: + Result InitializeApplicationInfoBase() { + if (application_info) { + LOG_ERROR(Service_ACC, "Application already initialized"); + return Account::ResultApplicationInfoAlreadyInitialized; + } + + // TODO(ogniK): This should be changed to reflect the target process for when we have multiple + // processes emulated. As we don't actually have pid support we should assume we're just using + // our own process + Glue::ApplicationLaunchProperty launch_property{}; + const auto result = system.GetARPManager().GetLaunchProperty( + &launch_property, system.GetApplicationProcessProgramID()); + + if (result != ResultSuccess) { + LOG_ERROR(Service_ACC, "Failed to get launch property"); + return Account::ResultInvalidApplication; + } + + switch (launch_property.base_game_storage_id) { + case FileSys::StorageId::GameCard: + application_info.application_type = ApplicationType::GameCard; + break; + case FileSys::StorageId::Host: + case FileSys::StorageId::NandSystem: + case FileSys::StorageId::NandUser: + case FileSys::StorageId::SdCard: + case FileSys::StorageId::None: // Yuzu specific, differs from hardware + application_info.application_type = ApplicationType::Digital; + break; + default: + LOG_ERROR(Service_ACC, "Invalid game storage ID! storage_id={}", + launch_property.base_game_storage_id); + return Account::ResultInvalidApplication; + } + + LOG_WARNING(Service_ACC, "ApplicationInfo init required"); + // TODO(ogniK): Actual initialization here + + return ResultSuccess; + } + + void StoreSaveDataThumbnail(HLERequestContext& ctx, const Common::UUID& uuid, + const u64 tid) { + IPC::ResponseBuilder rb{ctx, 2}; + + if (tid == 0) { + LOG_ERROR(Service_ACC, "TitleID is not valid!"); + rb.Push(Account::ResultInvalidApplication); + return; + } + + if (uuid.IsInvalid()) { + LOG_ERROR(Service_ACC, "User ID is not valid!"); + rb.Push(Account::ResultInvalidUserId); + return; + } + const auto thumbnail_size = ctx.GetReadBufferSize(); + if (thumbnail_size != THUMBNAIL_SIZE) { + LOG_ERROR(Service_ACC, "Buffer size is empty! size={:X} expecting {:X}", thumbnail_size, + THUMBNAIL_SIZE); + rb.Push(Account::ResultInvalidArrayLength); + return; + } + + // TODO(ogniK): Construct save data thumbnail + rb.Push(ResultSuccess); + } + + enum class ApplicationType : u32_le { + GameCard = 0, + Digital = 1, + Unknown = 3, + }; + + struct ApplicationInfo { + Service::Glue::ApplicationLaunchProperty launch_property; + ApplicationType application_type; + + constexpr explicit operator bool() const { + return launch_property.title_id != 0x0; + } + }; + + ApplicationInfo application_info{}; + protected: + std::shared_ptr module; + std::shared_ptr profile_manager; + }; +}; class ACC_AA final : public Module::Interface { public: @@ -1219,15 +1260,17 @@ public: : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:aa") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "EnsureCacheAsync"}, - FunctionInfo{1, nullptr, "LoadCache"}, - FunctionInfo{2, nullptr, "GetDeviceAccountId"}, - FunctionInfo{50, nullptr, "RegisterNotificationTokenAsync"}, // 1.0.0 - 6.2.0 - FunctionInfo{51, nullptr, "UnregisterNotificationTokenAsync"} // 1.0.0 - 6.2.0 - ); + return HandlerTableGenerateWithFind(key, functions); } ~ACC_AA() override = default; + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "EnsureCacheAsync"}, + FunctionInfo{1, nullptr, "LoadCache"}, + FunctionInfo{2, nullptr, "GetDeviceAccountId"}, + FunctionInfo{50, nullptr, "RegisterNotificationTokenAsync"}, // 1.0.0 - 6.2.0 + FunctionInfo{51, nullptr, "UnregisterNotificationTokenAsync"} // 1.0.0 - 6.2.0 + ); }; class ACC_SU final : public Module::Interface { @@ -1235,73 +1278,76 @@ public: explicit ACC_SU(std::shared_ptr module_, std::shared_ptr profile_manager_, Core::System& system_) : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:su") {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &ACC_SU::GetUserCount, "GetUserCount"}, - FunctionInfo{1, &ACC_SU::GetUserExistence, "GetUserExistence"}, - FunctionInfo{2, &ACC_SU::ListAllUsers, "ListAllUsers"}, - FunctionInfo{3, &ACC_SU::ListOpenUsers, "ListOpenUsers"}, - FunctionInfo{4, &ACC_SU::GetLastOpenedUser, "GetLastOpenedUser"}, - FunctionInfo{5, &ACC_SU::GetProfile, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, - FunctionInfo{50, &ACC_SU::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, &ACC_SU::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{52, &ACC_SU::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, // 19.0.0+ - FunctionInfo{60, &ACC_SU::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, - FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, - FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, - FunctionInfo{102, &ACC_SU::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, - FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, - FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, - FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, - FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, - FunctionInfo{110, &ACC_SU::StoreSaveDataThumbnailSystem, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, - FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, - FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, - FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, - FunctionInfo{140, &ACC_SU::ListQualifiedUsers, "ListQualifiedUsers"}, - FunctionInfo{150, nullptr, "AuthenticateApplicationAsync"}, - FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, - FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, - FunctionInfo{190, nullptr, "GetUserLastOpenedApplication"}, - FunctionInfo{191, nullptr, "ActivateOpenContextHolder"}, - FunctionInfo{200, &ACC_SU::BeginUserRegistration, "BeginUserRegistration"}, - FunctionInfo{201, &ACC_SU::CompleteUserRegistration, "CompleteUserRegistration"}, - FunctionInfo{202, nullptr, "CancelUserRegistration"}, - FunctionInfo{203, &ACC_SU::DeleteUser, "DeleteUser"}, - FunctionInfo{204, &ACC_SU::SetUserPosition, "SetUserPosition"}, - FunctionInfo{205, &ACC_SU::GetProfileEditor, "GetProfileEditor"}, - FunctionInfo{206, nullptr, "CompleteUserRegistrationForcibly"}, - FunctionInfo{210, nullptr, "CreateFloatingRegistrationRequest"}, - FunctionInfo{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"}, - FunctionInfo{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"}, - FunctionInfo{230, nullptr, "AuthenticateServiceAsync"}, - FunctionInfo{250, &ACC_SU::GetBaasAccountAdministrator, "GetBaasAccountAdministrator"}, - FunctionInfo{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, - FunctionInfo{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, - FunctionInfo{299, nullptr, "SuspendBackgroundDaemon"}, - FunctionInfo{400, nullptr, "SetPinCode"}, // 18.0.0+ - FunctionInfo{401, &ACC_SU::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+ - FunctionInfo{402, nullptr, "GetPinCode"}, // 18.0.0+ - FunctionInfo{403, nullptr, "GetPinCodeParity"}, - FunctionInfo{404, nullptr, "VerifyPinCode"}, - FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, - FunctionInfo{410, nullptr, "GetPinCodeErrorCount"}, // 18.0.0+ - FunctionInfo{411, nullptr, "ResetPinCodeErrorCount"}, // 18.0.0+ - FunctionInfo{412, nullptr, "IncrementPinCodeErrorCount"}, // 18.0.0+ - FunctionInfo{900, nullptr, "SetUserUnqualifiedForDebug"}, - FunctionInfo{901, nullptr, "UnsetUserUnqualifiedForDebug"}, - FunctionInfo{902, nullptr, "ListUsersUnqualifiedForDebug"}, - FunctionInfo{910, nullptr, "RefreshFirmwareSettingsForDebug"}, - FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, - FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, - FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} - ); - } ~ACC_SU() override = default; + + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); + } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &ACC_SU::GetUserCount, "GetUserCount"}, + FunctionInfo{1, &ACC_SU::GetUserExistence, "GetUserExistence"}, + FunctionInfo{2, &ACC_SU::ListAllUsers, "ListAllUsers"}, + FunctionInfo{3, &ACC_SU::ListOpenUsers, "ListOpenUsers"}, + FunctionInfo{4, &ACC_SU::GetLastOpenedUser, "GetLastOpenedUser"}, + FunctionInfo{5, &ACC_SU::GetProfile, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, + FunctionInfo{50, &ACC_SU::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, &ACC_SU::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{52, &ACC_SU::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, // 19.0.0+ + FunctionInfo{60, &ACC_SU::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, + FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, + FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, + FunctionInfo{102, &ACC_SU::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, + FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, + FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, + FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, + FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, + FunctionInfo{110, &ACC_SU::StoreSaveDataThumbnailSystem, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, + FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, + FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, + FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, + FunctionInfo{140, &ACC_SU::ListQualifiedUsers, "ListQualifiedUsers"}, + FunctionInfo{150, nullptr, "AuthenticateApplicationAsync"}, + FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, + FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, + FunctionInfo{190, nullptr, "GetUserLastOpenedApplication"}, + FunctionInfo{191, nullptr, "ActivateOpenContextHolder"}, + FunctionInfo{200, &ACC_SU::BeginUserRegistration, "BeginUserRegistration"}, + FunctionInfo{201, &ACC_SU::CompleteUserRegistration, "CompleteUserRegistration"}, + FunctionInfo{202, nullptr, "CancelUserRegistration"}, + FunctionInfo{203, &ACC_SU::DeleteUser, "DeleteUser"}, + FunctionInfo{204, &ACC_SU::SetUserPosition, "SetUserPosition"}, + FunctionInfo{205, &ACC_SU::GetProfileEditor, "GetProfileEditor"}, + FunctionInfo{206, nullptr, "CompleteUserRegistrationForcibly"}, + FunctionInfo{210, nullptr, "CreateFloatingRegistrationRequest"}, + FunctionInfo{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"}, + FunctionInfo{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"}, + FunctionInfo{230, nullptr, "AuthenticateServiceAsync"}, + FunctionInfo{250, &ACC_SU::GetBaasAccountAdministrator, "GetBaasAccountAdministrator"}, + FunctionInfo{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, + FunctionInfo{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, + FunctionInfo{299, nullptr, "SuspendBackgroundDaemon"}, + FunctionInfo{400, nullptr, "SetPinCode"}, // 18.0.0+ + FunctionInfo{401, &ACC_SU::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+ + FunctionInfo{402, nullptr, "GetPinCode"}, // 18.0.0+ + FunctionInfo{403, nullptr, "GetPinCodeParity"}, + FunctionInfo{404, nullptr, "VerifyPinCode"}, + FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, + FunctionInfo{410, nullptr, "GetPinCodeErrorCount"}, // 18.0.0+ + FunctionInfo{411, nullptr, "ResetPinCodeErrorCount"}, // 18.0.0+ + FunctionInfo{412, nullptr, "IncrementPinCodeErrorCount"}, // 18.0.0+ + FunctionInfo{900, nullptr, "SetUserUnqualifiedForDebug"}, + FunctionInfo{901, nullptr, "UnsetUserUnqualifiedForDebug"}, + FunctionInfo{902, nullptr, "ListUsersUnqualifiedForDebug"}, + FunctionInfo{910, nullptr, "RefreshFirmwareSettingsForDebug"}, + FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, + FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, + FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} + ); }; class ACC_U0 final : public Module::Interface { @@ -1310,35 +1356,37 @@ public: : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:u0") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &ACC_U0::GetUserCount, "GetUserCount"}, - FunctionInfo{1, &ACC_U0::GetUserExistence, "GetUserExistence"}, - FunctionInfo{2, &ACC_U0::ListAllUsers, "ListAllUsers"}, - FunctionInfo{3, &ACC_U0::ListOpenUsers, "ListOpenUsers"}, - FunctionInfo{4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"}, - FunctionInfo{5, &ACC_U0::GetProfile, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, // 3.0.0+ - FunctionInfo{50, &ACC_U0::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, &ACC_U0::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{52, &ACC_U0::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, - FunctionInfo{60, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 5.0.0 - 5.1.0 - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, // 6.0.0+ - FunctionInfo{100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"}, - FunctionInfo{101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"}, - FunctionInfo{102, nullptr, "AuthenticateApplicationAsync"}, - FunctionInfo{103, nullptr, "CheckNetworkServiceAvailabilityAsync"}, // 4.0.0+ - FunctionInfo{110, &ACC_U0::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{120, nullptr, "CreateGuestLoginRequest"}, - FunctionInfo{130, nullptr, "LoadOpenContext"}, // 5.0.0+ - FunctionInfo{131, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 6.0.0+ - FunctionInfo{140, &ACC_U0::InitializeApplicationInfoRestricted, "InitializeApplicationInfoRestricted"}, // 6.0.0+ - FunctionInfo{141, &ACC_U0::ListQualifiedUsers, "ListQualifiedUsers"}, // 6.0.0+ - FunctionInfo{150, &ACC_U0::IsUserAccountSwitchLocked, "IsUserAccountSwitchLocked"}, // 6.0.0+ - FunctionInfo{160, &ACC_U0::InitializeApplicationInfoV2, "InitializeApplicationInfoV2"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~ACC_U0() override = default; + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &ACC_U0::GetUserCount, "GetUserCount"}, + FunctionInfo{1, &ACC_U0::GetUserExistence, "GetUserExistence"}, + FunctionInfo{2, &ACC_U0::ListAllUsers, "ListAllUsers"}, + FunctionInfo{3, &ACC_U0::ListOpenUsers, "ListOpenUsers"}, + FunctionInfo{4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"}, + FunctionInfo{5, &ACC_U0::GetProfile, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, // 3.0.0+ + FunctionInfo{50, &ACC_U0::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, &ACC_U0::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{52, &ACC_U0::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, + FunctionInfo{60, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 5.0.0 - 5.1.0 + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, // 6.0.0+ + FunctionInfo{100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"}, + FunctionInfo{101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"}, + FunctionInfo{102, nullptr, "AuthenticateApplicationAsync"}, + FunctionInfo{103, nullptr, "CheckNetworkServiceAvailabilityAsync"}, // 4.0.0+ + FunctionInfo{110, &ACC_U0::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{120, nullptr, "CreateGuestLoginRequest"}, + FunctionInfo{130, nullptr, "LoadOpenContext"}, // 5.0.0+ + FunctionInfo{131, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 6.0.0+ + FunctionInfo{140, &ACC_U0::InitializeApplicationInfoRestricted, "InitializeApplicationInfoRestricted"}, // 6.0.0+ + FunctionInfo{141, &ACC_U0::ListQualifiedUsers, "ListQualifiedUsers"}, // 6.0.0+ + FunctionInfo{150, &ACC_U0::IsUserAccountSwitchLocked, "IsUserAccountSwitchLocked"}, // 6.0.0+ + FunctionInfo{160, &ACC_U0::InitializeApplicationInfoV2, "InitializeApplicationInfoV2"} + ); }; class ACC_U1 final : public Module::Interface { @@ -1347,46 +1395,48 @@ public: : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:u1") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &ACC_U1::GetUserCount, "GetUserCount"}, - FunctionInfo{1, &ACC_U1::GetUserExistence, "GetUserExistence"}, - FunctionInfo{2, &ACC_U1::ListAllUsers, "ListAllUsers"}, - FunctionInfo{3, &ACC_U1::ListOpenUsers, "ListOpenUsers"}, - FunctionInfo{4, &ACC_U1::GetLastOpenedUser, "GetLastOpenedUser"}, - FunctionInfo{5, &ACC_U1::GetProfile, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, - FunctionInfo{50, &ACC_U1::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, &ACC_U1::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{52, &ACC_U1::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, - FunctionInfo{60, &ACC_U1::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, - FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, - FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, - FunctionInfo{102, &ACC_U1::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, - FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, - FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, - FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, - FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, - FunctionInfo{110, &ACC_U1::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, - FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, - FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, - FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, - FunctionInfo{140, &ACC_U1::ListQualifiedUsers, "ListQualifiedUsers"}, - FunctionInfo{150, nullptr, "AuthenticateApplicationAsync"}, - FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, - FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, - FunctionInfo{190, nullptr, "GetUserLastOpenedApplication"}, - FunctionInfo{191, nullptr, "ActivateOpenContextHolder"}, - FunctionInfo{401, &ACC_U1::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+ - FunctionInfo{402, nullptr, "GetPinCode"}, // 18.0.0+ - FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, - FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, - FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~ACC_U1() override = default; + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &ACC_U1::GetUserCount, "GetUserCount"}, + FunctionInfo{1, &ACC_U1::GetUserExistence, "GetUserExistence"}, + FunctionInfo{2, &ACC_U1::ListAllUsers, "ListAllUsers"}, + FunctionInfo{3, &ACC_U1::ListOpenUsers, "ListOpenUsers"}, + FunctionInfo{4, &ACC_U1::GetLastOpenedUser, "GetLastOpenedUser"}, + FunctionInfo{5, &ACC_U1::GetProfile, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, + FunctionInfo{50, &ACC_U1::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, &ACC_U1::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{52, &ACC_U1::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, + FunctionInfo{60, &ACC_U1::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, + FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, + FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, + FunctionInfo{102, &ACC_U1::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, + FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, + FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, + FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, + FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, + FunctionInfo{110, &ACC_U1::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, + FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, + FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, + FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, + FunctionInfo{140, &ACC_U1::ListQualifiedUsers, "ListQualifiedUsers"}, + FunctionInfo{150, nullptr, "AuthenticateApplicationAsync"}, + FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, + FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, + FunctionInfo{190, nullptr, "GetUserLastOpenedApplication"}, + FunctionInfo{191, nullptr, "ActivateOpenContextHolder"}, + FunctionInfo{401, &ACC_U1::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+ + FunctionInfo{402, nullptr, "GetPinCode"}, // 18.0.0+ + FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, + FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, + FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} + ); }; class DAUTH_0 final : public ServiceFramework { @@ -1394,29 +1444,31 @@ public: explicit DAUTH_0(Core::System& system_) : ServiceFramework{system_, "dauth:0"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, - FunctionInfo{1, nullptr, "LoadAuthenticationTokenCache"}, - FunctionInfo{2, nullptr, "InvalidateAuthenticationTokenCache"}, - FunctionInfo{3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"}, - FunctionInfo{10, nullptr, "EnsureEdgeTokenCacheAsync"}, - FunctionInfo{11, nullptr, "LoadEdgeTokenCache"}, - FunctionInfo{12, nullptr, "InvalidateEdgeTokenCache"}, - FunctionInfo{13, nullptr, "IsEdgeTokenCacheAvailable"}, - FunctionInfo{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, - FunctionInfo{21, nullptr, "LoadApplicationAuthenticationTokenCache"}, - FunctionInfo{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, - FunctionInfo{23, nullptr, "IsApplicationAuthenticationCacheAvailable"}, - FunctionInfo{24, nullptr, "InvalidateApplicationAuthenticationCache"}, - FunctionInfo{30, nullptr, "EnsureGameCardAuthenticationCacheAsync"}, - FunctionInfo{31, nullptr, "LoadGameCardAuthenticationTokenCache"}, - FunctionInfo{32, nullptr, "IsGameCardAuthenticationCacheAvailable"}, - FunctionInfo{33, nullptr, "InvalidateGameCardAuthenticationCache"}, - FunctionInfo{1000, nullptr, "GetInactiveElicenseUsedEvent"}, - FunctionInfo{9000, nullptr, "ImportVirtualClientCertificate"}, - FunctionInfo{9010, nullptr, "DeleteVirtualClientCertificate"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, + FunctionInfo{1, nullptr, "LoadAuthenticationTokenCache"}, + FunctionInfo{2, nullptr, "InvalidateAuthenticationTokenCache"}, + FunctionInfo{3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"}, + FunctionInfo{10, nullptr, "EnsureEdgeTokenCacheAsync"}, + FunctionInfo{11, nullptr, "LoadEdgeTokenCache"}, + FunctionInfo{12, nullptr, "InvalidateEdgeTokenCache"}, + FunctionInfo{13, nullptr, "IsEdgeTokenCacheAvailable"}, + FunctionInfo{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, + FunctionInfo{21, nullptr, "LoadApplicationAuthenticationTokenCache"}, + FunctionInfo{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, + FunctionInfo{23, nullptr, "IsApplicationAuthenticationCacheAvailable"}, + FunctionInfo{24, nullptr, "InvalidateApplicationAuthenticationCache"}, + FunctionInfo{30, nullptr, "EnsureGameCardAuthenticationCacheAsync"}, + FunctionInfo{31, nullptr, "LoadGameCardAuthenticationTokenCache"}, + FunctionInfo{32, nullptr, "IsGameCardAuthenticationCacheAvailable"}, + FunctionInfo{33, nullptr, "InvalidateGameCardAuthenticationCache"}, + FunctionInfo{1000, nullptr, "GetInactiveElicenseUsedEvent"}, + FunctionInfo{9000, nullptr, "ImportVirtualClientCertificate"}, + FunctionInfo{9010, nullptr, "DeleteVirtualClientCertificate"} + ); }; class ACC_E final : public Module::Interface { @@ -1424,86 +1476,87 @@ public: explicit ACC_E(std::shared_ptr module_, std::shared_ptr profile_manager_, Core::System& system_) : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:e") {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetUserCount"}, + FunctionInfo{1, nullptr, "GetUserExistence"}, + FunctionInfo{2, nullptr, "ListAllUsers"}, + FunctionInfo{3, nullptr, "ListOpenUsers"}, + FunctionInfo{4, nullptr, "GetLastOpenedUser"}, + FunctionInfo{5, nullptr, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, + FunctionInfo{50, nullptr, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{52, nullptr, "TrySelectUserWithoutInteraction"}, + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, + FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, + FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, + FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, + FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, + FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, + FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, + FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, + FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, + FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, + FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, + FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, + FunctionInfo{140, nullptr, "ListQualifiedUsers"}, + FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, + FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, + FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, + FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, + FunctionInfo{200, nullptr, "BeginUserRegistration"}, + FunctionInfo{201, nullptr, "CompleteUserRegistration"}, + FunctionInfo{202, nullptr, "CancelUserRegistration"}, + FunctionInfo{203, nullptr, "DeleteUser"}, + FunctionInfo{204, nullptr, "SetUserPosition"}, + FunctionInfo{205, nullptr, "GetProfileEditor"}, + FunctionInfo{206, nullptr, "CompleteUserRegistrationForcibly"}, + FunctionInfo{210, nullptr, "CreateFloatingRegistrationRequest"}, + FunctionInfo{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"}, + FunctionInfo{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"}, + FunctionInfo{213, nullptr, "CreateProcedureToCreateUserWithNintendoAccount"}, + FunctionInfo{214, nullptr, "ResumeProcedureToCreateUserWithNintendoAccount"}, + FunctionInfo{215, nullptr, "ResumeProcedureToCreateUserWithNintendoAccountAfterApplyResponse"}, + FunctionInfo{230, nullptr, "AuthenticateServiceAsync"}, + FunctionInfo{250, nullptr, "GetBaasAccountAdministrator"}, + FunctionInfo{251, nullptr, "SynchronizeNetworkServiceAccountsSnapshotAsync"}, + FunctionInfo{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, + FunctionInfo{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, + FunctionInfo{292, nullptr, "ProxyProcedureForDeviceMigrationAuthenticatingOperatingUser"}, + FunctionInfo{293, nullptr, "ProxyProcedureForDeviceMigrationDownload"}, + FunctionInfo{299, nullptr, "SuspendBackgroundDaemon"}, + FunctionInfo{350, nullptr, "CreateDeviceMigrationUserExportRequest"}, + FunctionInfo{351, nullptr, "UploadNasCredential"}, + FunctionInfo{352, nullptr, "CreateDeviceMigrationUserImportRequest"}, + FunctionInfo{353, nullptr, "DeleteUserMigrationSaveData"}, + FunctionInfo{400, nullptr, "SetPinCode"}, + FunctionInfo{401, nullptr, "GetPinCodeLength"}, + FunctionInfo{402, nullptr, "GetPinCode"}, + FunctionInfo{403, nullptr, "GetPinCodeParity"}, + FunctionInfo{404, nullptr, "VerifyPinCode"}, + FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, + FunctionInfo{410, nullptr, "GetPinCodeErrorCount"}, + FunctionInfo{411, nullptr, "ResetPinCodeErrorCount"}, + FunctionInfo{412, nullptr, "IncrementPinCodeErrorCount"}, + FunctionInfo{413, nullptr, "SetPinCodeErrorCount"}, + FunctionInfo{420, nullptr, "SetStartPenaltyTime"}, + FunctionInfo{421, nullptr, "GetStartPenaltyTime"}, + FunctionInfo{900, nullptr, "SetUserUnqualifiedForDebug"}, + FunctionInfo{901, nullptr, "UnsetUserUnqualifiedForDebug"}, + FunctionInfo{902, nullptr, "ListUsersUnqualifiedForDebug"}, + FunctionInfo{910, nullptr, "RefreshFirmwareSettingsForDebug"}, + FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, + FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, + FunctionInfo{999, nullptr, "DebugSetUserStateOpen"}, + FunctionInfo{1000, nullptr, "CreateIAccountEntityServiceForApplication"}, + FunctionInfo{1100, nullptr, "CreateIUserStateManager"}, + FunctionInfo{10050, nullptr, "IsUserRegistrationRequestPermittedForAccountPolicy"}, + FunctionInfo{10105, nullptr, "CheckNetworkServiceAvailabilityAsyncForAccountPolicy"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetUserCount"}, - FunctionInfo{1, nullptr, "GetUserExistence"}, - FunctionInfo{2, nullptr, "ListAllUsers"}, - FunctionInfo{3, nullptr, "ListOpenUsers"}, - FunctionInfo{4, nullptr, "GetLastOpenedUser"}, - FunctionInfo{5, nullptr, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, - FunctionInfo{50, nullptr, "IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{52, nullptr, "TrySelectUserWithoutInteraction"}, - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, - FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, - FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, - FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, - FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, - FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, - FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, - FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, - FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, - FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, - FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, - FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, - FunctionInfo{140, nullptr, "ListQualifiedUsers"}, - FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, - FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, - FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, - FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, - FunctionInfo{200, nullptr, "BeginUserRegistration"}, - FunctionInfo{201, nullptr, "CompleteUserRegistration"}, - FunctionInfo{202, nullptr, "CancelUserRegistration"}, - FunctionInfo{203, nullptr, "DeleteUser"}, - FunctionInfo{204, nullptr, "SetUserPosition"}, - FunctionInfo{205, nullptr, "GetProfileEditor"}, - FunctionInfo{206, nullptr, "CompleteUserRegistrationForcibly"}, - FunctionInfo{210, nullptr, "CreateFloatingRegistrationRequest"}, - FunctionInfo{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"}, - FunctionInfo{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"}, - FunctionInfo{213, nullptr, "CreateProcedureToCreateUserWithNintendoAccount"}, - FunctionInfo{214, nullptr, "ResumeProcedureToCreateUserWithNintendoAccount"}, - FunctionInfo{215, nullptr, "ResumeProcedureToCreateUserWithNintendoAccountAfterApplyResponse"}, - FunctionInfo{230, nullptr, "AuthenticateServiceAsync"}, - FunctionInfo{250, nullptr, "GetBaasAccountAdministrator"}, - FunctionInfo{251, nullptr, "SynchronizeNetworkServiceAccountsSnapshotAsync"}, - FunctionInfo{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, - FunctionInfo{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, - FunctionInfo{292, nullptr, "ProxyProcedureForDeviceMigrationAuthenticatingOperatingUser"}, - FunctionInfo{293, nullptr, "ProxyProcedureForDeviceMigrationDownload"}, - FunctionInfo{299, nullptr, "SuspendBackgroundDaemon"}, - FunctionInfo{350, nullptr, "CreateDeviceMigrationUserExportRequest"}, - FunctionInfo{351, nullptr, "UploadNasCredential"}, - FunctionInfo{352, nullptr, "CreateDeviceMigrationUserImportRequest"}, - FunctionInfo{353, nullptr, "DeleteUserMigrationSaveData"}, - FunctionInfo{400, nullptr, "SetPinCode"}, - FunctionInfo{401, nullptr, "GetPinCodeLength"}, - FunctionInfo{402, nullptr, "GetPinCode"}, - FunctionInfo{403, nullptr, "GetPinCodeParity"}, - FunctionInfo{404, nullptr, "VerifyPinCode"}, - FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, - FunctionInfo{410, nullptr, "GetPinCodeErrorCount"}, - FunctionInfo{411, nullptr, "ResetPinCodeErrorCount"}, - FunctionInfo{412, nullptr, "IncrementPinCodeErrorCount"}, - FunctionInfo{413, nullptr, "SetPinCodeErrorCount"}, - FunctionInfo{420, nullptr, "SetStartPenaltyTime"}, - FunctionInfo{421, nullptr, "GetStartPenaltyTime"}, - FunctionInfo{900, nullptr, "SetUserUnqualifiedForDebug"}, - FunctionInfo{901, nullptr, "UnsetUserUnqualifiedForDebug"}, - FunctionInfo{902, nullptr, "ListUsersUnqualifiedForDebug"}, - FunctionInfo{910, nullptr, "RefreshFirmwareSettingsForDebug"}, - FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, - FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, - FunctionInfo{999, nullptr, "DebugSetUserStateOpen"}, - FunctionInfo{1000, nullptr, "CreateIAccountEntityServiceForApplication"}, - FunctionInfo{1100, nullptr, "CreateIUserStateManager"}, - FunctionInfo{10050, nullptr, "IsUserRegistrationRequestPermittedForAccountPolicy"}, - FunctionInfo{10105, nullptr, "CheckNetworkServiceAvailabilityAsyncForAccountPolicy"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -1512,40 +1565,41 @@ public: explicit ACC_E_U1(std::shared_ptr module_, std::shared_ptr profile_manager_, Core::System& system_) : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:e:u1") {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetUserCount"}, + FunctionInfo{1, nullptr, "GetUserExistence"}, + FunctionInfo{2, nullptr, "ListAllUsers"}, + FunctionInfo{3, nullptr, "ListOpenUsers"}, + FunctionInfo{4, nullptr, "GetLastOpenedUser"}, + FunctionInfo{5, nullptr, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, + FunctionInfo{50, nullptr, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, + FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, + FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, + FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, + FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, + FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, + FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, + FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, + FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, + FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, + FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, + FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, + FunctionInfo{140, nullptr, "ListQualifiedUsers"}, + FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, + FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, + FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, + FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, + FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, + FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, + FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetUserCount"}, - FunctionInfo{1, nullptr, "GetUserExistence"}, - FunctionInfo{2, nullptr, "ListAllUsers"}, - FunctionInfo{3, nullptr, "ListOpenUsers"}, - FunctionInfo{4, nullptr, "GetLastOpenedUser"}, - FunctionInfo{5, nullptr, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, - FunctionInfo{50, nullptr, "IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, - FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, - FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, - FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, - FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, - FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, - FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, - FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, - FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, - FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, - FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, - FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, - FunctionInfo{140, nullptr, "ListQualifiedUsers"}, - FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, - FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, - FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, - FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, - FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, - FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, - FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -1554,47 +1608,48 @@ public: explicit ACC_E_U2(std::shared_ptr module_, std::shared_ptr profile_manager_, Core::System& system_) : Interface(std::move(module_), std::move(profile_manager_), system_, "acc:e:u2") {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetUserCount"}, + FunctionInfo{1, nullptr, "GetUserExistence"}, + FunctionInfo{2, nullptr, "ListAllUsers"}, + FunctionInfo{3, nullptr, "ListOpenUsers"}, + FunctionInfo{4, nullptr, "GetLastOpenedUser"}, + FunctionInfo{5, nullptr, "GetProfile"}, + FunctionInfo{6, nullptr, "GetProfileDigest"}, + FunctionInfo{50, nullptr, "IsUserRegistrationRequestPermitted"}, + FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, + FunctionInfo{52, nullptr, "TrySelectUserWithoutInteraction"}, + FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, + FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, + FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, + FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, + FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, + FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, + FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, + FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, + FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, + FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, + FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, + FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, + FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, + FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, + FunctionInfo{140, nullptr, "ListQualifiedUsers"}, + FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, + FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, + FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, + FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, + FunctionInfo{205, nullptr, "GetProfileEditor"}, + FunctionInfo{401, nullptr, "GetPinCodeLength"}, + FunctionInfo{402, nullptr, "GetPinCode"}, + FunctionInfo{403, nullptr, "GetPinCodeParity"}, + FunctionInfo{404, nullptr, "VerifyPinCode"}, + FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, + FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, + FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, + FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetUserCount"}, - FunctionInfo{1, nullptr, "GetUserExistence"}, - FunctionInfo{2, nullptr, "ListAllUsers"}, - FunctionInfo{3, nullptr, "ListOpenUsers"}, - FunctionInfo{4, nullptr, "GetLastOpenedUser"}, - FunctionInfo{5, nullptr, "GetProfile"}, - FunctionInfo{6, nullptr, "GetProfileDigest"}, - FunctionInfo{50, nullptr, "#IsUserRegistrationRequestPermitted"}, - FunctionInfo{51, nullptr, "TrySelectUserWithoutInteractionDeprecated"}, - FunctionInfo{52, nullptr, "TrySelectUserWithoutInteraction"}, - FunctionInfo{99, nullptr, "DebugActivateOpenContextRetention"}, - FunctionInfo{100, nullptr, "GetUserRegistrationNotifier"}, - FunctionInfo{101, nullptr, "GetUserStateChangeNotifier"}, - FunctionInfo{102, nullptr, "GetBaasAccountManagerForSystemService"}, - FunctionInfo{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, - FunctionInfo{104, nullptr, "GetProfileUpdateNotifier"}, - FunctionInfo{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, - FunctionInfo{106, nullptr, "GetProfileSyncNotifier"}, - FunctionInfo{110, nullptr, "StoreSaveDataThumbnail"}, - FunctionInfo{111, nullptr, "ClearSaveDataThumbnail"}, - FunctionInfo{112, nullptr, "LoadSaveDataThumbnail"}, - FunctionInfo{113, nullptr, "GetSaveDataThumbnailExistence"}, - FunctionInfo{120, nullptr, "ListOpenUsersInApplication"}, - FunctionInfo{130, nullptr, "ActivateOpenContextRetention"}, - FunctionInfo{140, nullptr, "ListQualifiedUsers"}, - FunctionInfo{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, - FunctionInfo{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, - FunctionInfo{170, nullptr, "GetNasOp2MembershipStateChangeNotifier"}, - FunctionInfo{191, nullptr, "UpdateNotificationReceiverInfo"}, - FunctionInfo{205, nullptr, "GetProfileEditor"}, - FunctionInfo{401, nullptr, "GetPinCodeLength"}, - FunctionInfo{402, nullptr, "GetPinCode"}, - FunctionInfo{403, nullptr, "GetPinCodeParity"}, - FunctionInfo{404, nullptr, "VerifyPinCode"}, - FunctionInfo{405, nullptr, "IsPinCodeVerificationForbidden"}, - FunctionInfo{997, nullptr, "DebugInvalidateTokenCacheForUser"}, - FunctionInfo{998, nullptr, "DebugSetUserStateClose"}, - FunctionInfo{999, nullptr, "DebugSetUserStateOpen"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/acc/acc.h b/src/core/hle/service/acc/acc.h index 19af7c74c9..9c2c96acdb 100644 --- a/src/core/hle/service/acc/acc.h +++ b/src/core/hle/service/acc/acc.h @@ -14,70 +14,6 @@ namespace Service::Account { class ProfileManager; -class Module final { -public: - class Interface : public ServiceFramework { - public: - explicit Interface(std::shared_ptr module_, - std::shared_ptr profile_manager_, Core::System& system_, - const char* name); - ~Interface() override; - - void GetUserCount(HLERequestContext& ctx); - void GetUserExistence(HLERequestContext& ctx); - void ListAllUsers(HLERequestContext& ctx); - void ListOpenUsers(HLERequestContext& ctx); - void GetLastOpenedUser(HLERequestContext& ctx); - void GetProfile(HLERequestContext& ctx); - void InitializeApplicationInfo(HLERequestContext& ctx); - void InitializeApplicationInfoRestricted(HLERequestContext& ctx); - void GetBaasAccountManagerForApplication(HLERequestContext& ctx); - void IsUserRegistrationRequestPermitted(HLERequestContext& ctx); - void TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx); - void TrySelectUserWithoutInteraction(HLERequestContext& ctx); - void IsUserAccountSwitchLocked(HLERequestContext& ctx); - void InitializeApplicationInfoV2(HLERequestContext& ctx); - void BeginUserRegistration(HLERequestContext& ctx); - void CompleteUserRegistration(HLERequestContext& ctx); - void DeleteUser(HLERequestContext& ctx); - void SetUserPosition(HLERequestContext& ctx); - void GetProfileEditor(HLERequestContext& ctx); - void GetBaasAccountAdministrator(HLERequestContext &ctx); - void ListQualifiedUsers(HLERequestContext& ctx); - void ListOpenContextStoredUsers(HLERequestContext& ctx); - void StoreSaveDataThumbnailApplication(HLERequestContext& ctx); - void GetBaasAccountManagerForSystemService(HLERequestContext& ctx); - void StoreSaveDataThumbnailSystem(HLERequestContext& ctx); - void GetPinCodeLength(HLERequestContext& ctx); - - private: - Result InitializeApplicationInfoBase(); - void StoreSaveDataThumbnail(HLERequestContext& ctx, const Common::UUID& uuid, - const u64 tid); - - enum class ApplicationType : u32_le { - GameCard = 0, - Digital = 1, - Unknown = 3, - }; - - struct ApplicationInfo { - Service::Glue::ApplicationLaunchProperty launch_property; - ApplicationType application_type; - - constexpr explicit operator bool() const { - return launch_property.title_id != 0x0; - } - }; - - ApplicationInfo application_info{}; - - protected: - std::shared_ptr module; - std::shared_ptr profile_manager; - }; -}; - void LoopProcess(Core::System& system); } // namespace Service::Account diff --git a/src/core/hle/service/audio/audio.cpp b/src/core/hle/service/audio/audio.cpp index c20e2c33b5..e2bba36546 100644 --- a/src/core/hle/service/audio/audio.cpp +++ b/src/core/hle/service/audio/audio.cpp @@ -23,8 +23,7 @@ public: explicit IAudioOutManagerForApplet(Core::System& system_) : ServiceFramework{system_, "audout:a"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"}, FunctionInfo{2, nullptr, "GetProcessMasterVolume"}, @@ -32,6 +31,8 @@ public: FunctionInfo{4, nullptr, "GetProcessRecordVolume"}, FunctionInfo{5, nullptr, "SetProcessRecordVolume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -40,14 +41,15 @@ public: explicit IAudioSnoopManager(Core::System& system_) : ServiceFramework{system_, "auddev"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetDspStatistics"}, FunctionInfo{1, nullptr, "GetAppletStateSummaries"}, FunctionInfo{2, nullptr, "SetDspStatisticsParameter"}, FunctionInfo{3, nullptr, "GetDspStatisticsParameter"}, FunctionInfo{6, nullptr, "GetDspUsage"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -56,13 +58,14 @@ public: explicit IAudioInManagerForApplet(Core::System& system_) : ServiceFramework{system_, "audin:a"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"}, FunctionInfo{2, nullptr, "GetProcessMasterVolume"}, FunctionInfo{3, nullptr, "SetProcessMasterVolume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -71,8 +74,7 @@ public: explicit IAudioRendererManagerForApplet(Core::System& system_) : ServiceFramework{system_, "audren:a"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"}, FunctionInfo{2, nullptr, "GetProcessMasterVolume"}, @@ -82,6 +84,8 @@ public: FunctionInfo{6, nullptr, "GetProcessRecordVolume"}, FunctionInfo{7, nullptr, "SetProcessRecordVolume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -90,11 +94,12 @@ public: explicit IAudioOutManagerForDebugger(Core::System& system_) : ServiceFramework{system_, "audout:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -103,11 +108,12 @@ public: explicit IAudioInManagerForDebugger(Core::System& system_) : ServiceFramework{system_, "audin:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -116,11 +122,12 @@ public: explicit IFinalOutputRecorderManagerForDebugger(Core::System& system_) : ServiceFramework{system_, "audrec:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -129,11 +136,12 @@ public: explicit IAudioRendererManagerForDebugger(Core::System& system_) : ServiceFramework{system_, "audren:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspend"}, FunctionInfo{1, nullptr, "RequestResume"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -142,8 +150,7 @@ public: explicit IAudioSystemManagerForApplet(Core::System& system_) : ServiceFramework{system_, "aud:a"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RegisterAppletResourceUserId"}, FunctionInfo{1, nullptr, "UnregisterAppletResourceUserId"}, FunctionInfo{2, nullptr, "RequestSuspendAudio"}, @@ -156,6 +163,8 @@ public: FunctionInfo{9, nullptr, "SetAudioOutputProcessRecordVolume"}, FunctionInfo{10, nullptr, "GetAppletStateSummaries"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -164,11 +173,12 @@ public: explicit IAudioSystemManagerForDebugger(Core::System& system_) : ServiceFramework{system_, "aud:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestSuspendAudioForDebug"}, FunctionInfo{1, nullptr, "RequestResumeAudioForDebug"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/audio/final_output_recorder_manager.cpp b/src/core/hle/service/audio/final_output_recorder_manager.cpp index 79b2cb76cf..fea2daad2a 100644 --- a/src/core/hle/service/audio/final_output_recorder_manager.cpp +++ b/src/core/hle/service/audio/final_output_recorder_manager.cpp @@ -13,8 +13,7 @@ public: explicit IFinalOutputRecorder(Core::System& system_) : ServiceFramework{system_, "IFinalOutputRecorder"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetFinalOutputRecorderState"}, FunctionInfo{1, nullptr, "Start"}, FunctionInfo{2, nullptr, "Stop"}, @@ -28,6 +27,8 @@ public: FunctionInfo{10, nullptr, "FlushFinalOutputRecorderBuffers"}, FunctionInfo{11, nullptr, "AttachWorkBuffer"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/bpc/bpc.cpp b/src/core/hle/service/bpc/bpc.cpp index 9e7e131452..7547bee7b3 100644 --- a/src/core/hle/service/bpc/bpc.cpp +++ b/src/core/hle/service/bpc/bpc.cpp @@ -16,8 +16,7 @@ class BPC final : public ServiceFramework { public: explicit BPC(Core::System& system_) : ServiceFramework{system_, "bpc"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ShutdownSystem"}, FunctionInfo{1, nullptr, "RebootSystem"}, FunctionInfo{2, nullptr, "GetWakeupReason"}, @@ -35,6 +34,8 @@ public: FunctionInfo{14, nullptr, "GetPowerButton"}, FunctionInfo{15, nullptr, "SetEnableWakeupTimer"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -42,14 +43,15 @@ class BPC_R final : public ServiceFramework { public: explicit BPC_R(Core::System& system_) : ServiceFramework{system_, "bpc:r"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetRtcTime"}, FunctionInfo{1, nullptr, "SetRtcTime"}, FunctionInfo{2, nullptr, "GetRtcResetDetected"}, FunctionInfo{3, nullptr, "ClearRtcResetDetected"}, FunctionInfo{4, nullptr, "SetUpRtcResetOnShutdown"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -57,8 +59,7 @@ class BPC_C final : public ServiceFramework { public: explicit BPC_C(Core::System& system_) : ServiceFramework{system_, "bpc:c"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ShutdownSystem"}, FunctionInfo{1, nullptr, "RebootSystem"}, FunctionInfo{2, nullptr, "GetWakeupReason"}, @@ -66,6 +67,8 @@ public: FunctionInfo{4, nullptr, "GetAcOk"}, FunctionInfo{5, nullptr, "GetPowerEvent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -73,11 +76,12 @@ class BPC_B final : public ServiceFramework { public: explicit BPC_B(Core::System& system_) : ServiceFramework{system_, "bpc:b"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetSleepButtonState"}, FunctionInfo{1, nullptr, "GetPowerButtonEvent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -85,12 +89,13 @@ class BPC_W final : public ServiceFramework { public: explicit BPC_W(Core::System& system_) : ServiceFramework{system_, "bpc:w"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "CreateWakeupTimer"}, FunctionInfo{1, nullptr, "CancelWakeupTimer"}, FunctionInfo{2, nullptr, "EnableWakeupTimerOnDevice"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -98,11 +103,12 @@ class BPC_AMS final : public ServiceFramework { public: explicit BPC_AMS(Core::System& system_) : ServiceFramework{system_, "bpc:ams"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{65000, nullptr, "RebootToFatalError"}, FunctionInfo{65001, nullptr, "SetRebootPayload"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/btdrv/btdrv.cpp b/src/core/hle/service/btdrv/btdrv.cpp index c9fcdf6f76..7693abbbef 100644 --- a/src/core/hle/service/btdrv/btdrv.cpp +++ b/src/core/hle/service/btdrv/btdrv.cpp @@ -26,18 +26,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "LeClientReadCharacteristic"}, - FunctionInfo{1, nullptr, "LeClientReadDescriptor"}, - FunctionInfo{2, nullptr, "LeClientWriteCharacteristic"}, - FunctionInfo{3, nullptr, "LeClientWriteDescriptor"}, - FunctionInfo{4, nullptr, "LeClientRegisterNotification"}, - FunctionInfo{5, nullptr, "LeClientDeregisterNotification"}, - FunctionInfo{6, nullptr, "SetLeResponse"}, - FunctionInfo{7, nullptr, "LeSendIndication"}, - FunctionInfo{8, nullptr, "GetLeEventInfo"}, - FunctionInfo{9, C<&IBluetoothUser::RegisterBleEvent>, "RegisterBleEvent"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IBluetoothUser() override { @@ -52,8 +41,19 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "LeClientReadCharacteristic"}, + FunctionInfo{1, nullptr, "LeClientReadDescriptor"}, + FunctionInfo{2, nullptr, "LeClientWriteCharacteristic"}, + FunctionInfo{3, nullptr, "LeClientWriteDescriptor"}, + FunctionInfo{4, nullptr, "LeClientRegisterNotification"}, + FunctionInfo{5, nullptr, "LeClientDeregisterNotification"}, + FunctionInfo{6, nullptr, "SetLeResponse"}, + FunctionInfo{7, nullptr, "LeSendIndication"}, + FunctionInfo{8, nullptr, "GetLeEventInfo"}, + FunctionInfo{9, C<&IBluetoothUser::RegisterBleEvent>, "RegisterBleEvent"} + ); KernelHelpers::ServiceContext service_context; - Kernel::KEvent* register_event; }; @@ -62,139 +62,7 @@ public: explicit IBluetoothDriver(Core::System& system_) : ServiceFramework{system_, "btdrv"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "InitializeBluetoothDriver"}, - FunctionInfo{1, nullptr, "InitializeBluetooth"}, - FunctionInfo{2, nullptr, "EnableBluetooth"}, - FunctionInfo{3, nullptr, "DisableBluetooth"}, - FunctionInfo{4, nullptr, "FinalizeBluetooth"}, - FunctionInfo{5, nullptr, "GetAdapterProperties"}, - FunctionInfo{6, nullptr, "GetAdapterProperty"}, - FunctionInfo{7, nullptr, "SetAdapterProperty"}, - FunctionInfo{8, nullptr, "StartInquiry"}, - FunctionInfo{9, nullptr, "StopInquiry"}, - FunctionInfo{10, nullptr, "CreateBond"}, - FunctionInfo{11, nullptr, "RemoveBond"}, - FunctionInfo{12, nullptr, "CancelBond"}, - FunctionInfo{13, nullptr, "RespondToPinRequest"}, - FunctionInfo{14, nullptr, "RespondToSspRequest"}, - FunctionInfo{15, nullptr, "GetEventInfo"}, - FunctionInfo{16, nullptr, "InitializeHid"}, - FunctionInfo{17, nullptr, "OpenHidConnection"}, - FunctionInfo{18, nullptr, "CloseHidConnection"}, - FunctionInfo{19, nullptr, "WriteHidData"}, - FunctionInfo{20, nullptr, "WriteHidData2"}, - FunctionInfo{21, nullptr, "SetHidReport"}, - FunctionInfo{22, nullptr, "GetHidReport"}, - FunctionInfo{23, nullptr, "TriggerConnection"}, - FunctionInfo{24, nullptr, "AddPairedDeviceInfo"}, - FunctionInfo{25, nullptr, "GetPairedDeviceInfo"}, - FunctionInfo{26, nullptr, "FinalizeHid"}, - FunctionInfo{27, nullptr, "GetHidEventInfo"}, - FunctionInfo{28, nullptr, "SetTsi"}, - FunctionInfo{29, nullptr, "EnableBurstMode"}, - FunctionInfo{30, nullptr, "SetZeroRetransmission"}, - FunctionInfo{31, nullptr, "EnableMcMode"}, - FunctionInfo{32, nullptr, "EnableLlrScan"}, - FunctionInfo{33, nullptr, "DisableLlrScan"}, - FunctionInfo{34, C<&IBluetoothDriver::EnableRadio>, "EnableRadio"}, - FunctionInfo{35, nullptr, "SetVisibility"}, - FunctionInfo{36, nullptr, "EnableTbfcScan"}, - FunctionInfo{37, nullptr, "RegisterHidReportEvent"}, - FunctionInfo{38, nullptr, "GetHidReportEventInfo"}, - FunctionInfo{39, nullptr, "GetLatestPlr"}, - FunctionInfo{40, nullptr, "GetPendingConnections"}, - FunctionInfo{41, nullptr, "GetChannelMap"}, - FunctionInfo{42, nullptr, "EnableTxPowerBoostSetting"}, - FunctionInfo{43, nullptr, "IsTxPowerBoostSettingEnabled"}, - FunctionInfo{44, nullptr, "EnableAfhSetting"}, - FunctionInfo{45, nullptr, "IsAfhSettingEnabled"}, - FunctionInfo{46, nullptr, "InitializeBle"}, - FunctionInfo{47, nullptr, "EnableBle"}, - FunctionInfo{48, nullptr, "DisableBle"}, - FunctionInfo{49, nullptr, "FinalizeBle"}, - FunctionInfo{50, nullptr, "SetBleVisibility"}, - FunctionInfo{51, nullptr, "SetBleConnectionParameter"}, - FunctionInfo{52, nullptr, "SetBleDefaultConnectionParameter"}, - FunctionInfo{53, nullptr, "SetBleAdvertiseData"}, - FunctionInfo{54, nullptr, "SetBleAdvertiseParameter"}, - FunctionInfo{55, nullptr, "StartBleScan"}, - FunctionInfo{56, nullptr, "StopBleScan"}, - FunctionInfo{57, nullptr, "AddBleScanFilterCondition"}, - FunctionInfo{58, nullptr, "DeleteBleScanFilterCondition"}, - FunctionInfo{59, nullptr, "DeleteBleScanFilter"}, - FunctionInfo{60, nullptr, "ClearBleScanFilters"}, - FunctionInfo{61, nullptr, "EnableBleScanFilter"}, - FunctionInfo{62, nullptr, "RegisterGattClient"}, - FunctionInfo{63, nullptr, "UnregisterGattClient"}, - FunctionInfo{64, nullptr, "UnregisterAllGattClients"}, - FunctionInfo{65, nullptr, "ConnectGattServer"}, - FunctionInfo{66, nullptr, "CancelConnectGattServer"}, - FunctionInfo{67, nullptr, "DisconnectGattServer"}, - FunctionInfo{68, nullptr, "GetGattAttribute"}, - FunctionInfo{69, nullptr, "GetGattService"}, - FunctionInfo{70, nullptr, "ConfigureAttMtu"}, - FunctionInfo{71, nullptr, "RegisterGattServer"}, - FunctionInfo{72, nullptr, "UnregisterGattServer"}, - FunctionInfo{73, nullptr, "ConnectGattClient"}, - FunctionInfo{74, nullptr, "DisconnectGattClient"}, - FunctionInfo{75, nullptr, "AddGattService"}, - FunctionInfo{76, nullptr, "EnableGattService"}, - FunctionInfo{77, nullptr, "AddGattCharacteristic"}, - FunctionInfo{78, nullptr, "AddGattDescriptor"}, - FunctionInfo{79, nullptr, "GetBleManagedEventInfo"}, - FunctionInfo{80, nullptr, "GetGattFirstCharacteristic"}, - FunctionInfo{81, nullptr, "GetGattNextCharacteristic"}, - FunctionInfo{82, nullptr, "GetGattFirstDescriptor"}, - FunctionInfo{83, nullptr, "GetGattNextDescriptor"}, - FunctionInfo{84, nullptr, "RegisterGattManagedDataPath"}, - FunctionInfo{85, nullptr, "UnregisterGattManagedDataPath"}, - FunctionInfo{86, nullptr, "RegisterGattHidDataPath"}, - FunctionInfo{87, nullptr, "UnregisterGattHidDataPath"}, - FunctionInfo{88, nullptr, "RegisterGattDataPath"}, - FunctionInfo{89, nullptr, "UnregisterGattDataPath"}, - FunctionInfo{90, nullptr, "ReadGattCharacteristic"}, - FunctionInfo{91, nullptr, "ReadGattDescriptor"}, - FunctionInfo{92, nullptr, "WriteGattCharacteristic"}, - FunctionInfo{93, nullptr, "WriteGattDescriptor"}, - FunctionInfo{94, nullptr, "RegisterGattNotification"}, - FunctionInfo{95, nullptr, "UnregisterGattNotification"}, - FunctionInfo{96, nullptr, "GetLeHidEventInfo"}, - FunctionInfo{97, nullptr, "RegisterBleHidEvent"}, - FunctionInfo{98, nullptr, "SetBleScanParameter"}, - FunctionInfo{99, nullptr, "MoveToSecondaryPiconet"}, - FunctionInfo{100, nullptr, "IsBluetoothEnabled"}, - FunctionInfo{128, nullptr, "AcquireAudioEvent"}, - FunctionInfo{129, nullptr, "GetAudioEventInfo"}, - FunctionInfo{130, nullptr, "OpenAudioConnection"}, - FunctionInfo{131, nullptr, "CloseAudioConnection"}, - FunctionInfo{132, nullptr, "OpenAudioOut"}, - FunctionInfo{133, nullptr, "CloseAudioOut"}, - FunctionInfo{134, nullptr, "AcquireAudioOutStateChangedEvent"}, - FunctionInfo{135, nullptr, "StartAudioOut"}, - FunctionInfo{136, nullptr, "StopAudioOut"}, - FunctionInfo{137, nullptr, "GetAudioOutState"}, - FunctionInfo{138, nullptr, "GetAudioOutFeedingCodec"}, - FunctionInfo{139, nullptr, "GetAudioOutFeedingParameter"}, - FunctionInfo{140, nullptr, "AcquireAudioOutBufferAvailableEvent"}, - FunctionInfo{141, nullptr, "SendAudioData"}, - FunctionInfo{142, nullptr, "AcquireAudioControlInputStateChangedEvent"}, - FunctionInfo{143, nullptr, "GetAudioControlInputState"}, - FunctionInfo{144, nullptr, "AcquireAudioConnectionStateChangedEvent"}, - FunctionInfo{145, nullptr, "GetConnectedAudioDevice"}, - FunctionInfo{146, nullptr, "CloseAudioControlInput"}, - FunctionInfo{147, nullptr, "RegisterAudioControlNotification"}, - FunctionInfo{148, nullptr, "SendAudioControlPassthroughCommand"}, - FunctionInfo{149, nullptr, "SendAudioControlSetAbsoluteVolumeCommand"}, - FunctionInfo{150, nullptr, "AcquireAudioSinkVolumeLocallyChangedEvent"}, - FunctionInfo{151, nullptr, "AcquireAudioSinkVolumeUpdateRequestCompletedEvent"}, - FunctionInfo{152, nullptr, "GetAudioSinkVolume"}, - FunctionInfo{153, nullptr, "RequestUpdateAudioSinkVolume"}, - FunctionInfo{154, nullptr, "IsAudioSinkVolumeSupported"}, - FunctionInfo{256, nullptr, "IsManufacturingMode"}, - FunctionInfo{257, nullptr, "EmulateBluetoothCrash"}, - FunctionInfo{258, nullptr, "GetBleChannelMap"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -202,6 +70,140 @@ private: LOG_WARNING(Service_BTDRV, "(STUBBED) called"); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "InitializeBluetoothDriver"}, + FunctionInfo{1, nullptr, "InitializeBluetooth"}, + FunctionInfo{2, nullptr, "EnableBluetooth"}, + FunctionInfo{3, nullptr, "DisableBluetooth"}, + FunctionInfo{4, nullptr, "FinalizeBluetooth"}, + FunctionInfo{5, nullptr, "GetAdapterProperties"}, + FunctionInfo{6, nullptr, "GetAdapterProperty"}, + FunctionInfo{7, nullptr, "SetAdapterProperty"}, + FunctionInfo{8, nullptr, "StartInquiry"}, + FunctionInfo{9, nullptr, "StopInquiry"}, + FunctionInfo{10, nullptr, "CreateBond"}, + FunctionInfo{11, nullptr, "RemoveBond"}, + FunctionInfo{12, nullptr, "CancelBond"}, + FunctionInfo{13, nullptr, "RespondToPinRequest"}, + FunctionInfo{14, nullptr, "RespondToSspRequest"}, + FunctionInfo{15, nullptr, "GetEventInfo"}, + FunctionInfo{16, nullptr, "InitializeHid"}, + FunctionInfo{17, nullptr, "OpenHidConnection"}, + FunctionInfo{18, nullptr, "CloseHidConnection"}, + FunctionInfo{19, nullptr, "WriteHidData"}, + FunctionInfo{20, nullptr, "WriteHidData2"}, + FunctionInfo{21, nullptr, "SetHidReport"}, + FunctionInfo{22, nullptr, "GetHidReport"}, + FunctionInfo{23, nullptr, "TriggerConnection"}, + FunctionInfo{24, nullptr, "AddPairedDeviceInfo"}, + FunctionInfo{25, nullptr, "GetPairedDeviceInfo"}, + FunctionInfo{26, nullptr, "FinalizeHid"}, + FunctionInfo{27, nullptr, "GetHidEventInfo"}, + FunctionInfo{28, nullptr, "SetTsi"}, + FunctionInfo{29, nullptr, "EnableBurstMode"}, + FunctionInfo{30, nullptr, "SetZeroRetransmission"}, + FunctionInfo{31, nullptr, "EnableMcMode"}, + FunctionInfo{32, nullptr, "EnableLlrScan"}, + FunctionInfo{33, nullptr, "DisableLlrScan"}, + FunctionInfo{34, C<&IBluetoothDriver::EnableRadio>, "EnableRadio"}, + FunctionInfo{35, nullptr, "SetVisibility"}, + FunctionInfo{36, nullptr, "EnableTbfcScan"}, + FunctionInfo{37, nullptr, "RegisterHidReportEvent"}, + FunctionInfo{38, nullptr, "GetHidReportEventInfo"}, + FunctionInfo{39, nullptr, "GetLatestPlr"}, + FunctionInfo{40, nullptr, "GetPendingConnections"}, + FunctionInfo{41, nullptr, "GetChannelMap"}, + FunctionInfo{42, nullptr, "EnableTxPowerBoostSetting"}, + FunctionInfo{43, nullptr, "IsTxPowerBoostSettingEnabled"}, + FunctionInfo{44, nullptr, "EnableAfhSetting"}, + FunctionInfo{45, nullptr, "IsAfhSettingEnabled"}, + FunctionInfo{46, nullptr, "InitializeBle"}, + FunctionInfo{47, nullptr, "EnableBle"}, + FunctionInfo{48, nullptr, "DisableBle"}, + FunctionInfo{49, nullptr, "FinalizeBle"}, + FunctionInfo{50, nullptr, "SetBleVisibility"}, + FunctionInfo{51, nullptr, "SetBleConnectionParameter"}, + FunctionInfo{52, nullptr, "SetBleDefaultConnectionParameter"}, + FunctionInfo{53, nullptr, "SetBleAdvertiseData"}, + FunctionInfo{54, nullptr, "SetBleAdvertiseParameter"}, + FunctionInfo{55, nullptr, "StartBleScan"}, + FunctionInfo{56, nullptr, "StopBleScan"}, + FunctionInfo{57, nullptr, "AddBleScanFilterCondition"}, + FunctionInfo{58, nullptr, "DeleteBleScanFilterCondition"}, + FunctionInfo{59, nullptr, "DeleteBleScanFilter"}, + FunctionInfo{60, nullptr, "ClearBleScanFilters"}, + FunctionInfo{61, nullptr, "EnableBleScanFilter"}, + FunctionInfo{62, nullptr, "RegisterGattClient"}, + FunctionInfo{63, nullptr, "UnregisterGattClient"}, + FunctionInfo{64, nullptr, "UnregisterAllGattClients"}, + FunctionInfo{65, nullptr, "ConnectGattServer"}, + FunctionInfo{66, nullptr, "CancelConnectGattServer"}, + FunctionInfo{67, nullptr, "DisconnectGattServer"}, + FunctionInfo{68, nullptr, "GetGattAttribute"}, + FunctionInfo{69, nullptr, "GetGattService"}, + FunctionInfo{70, nullptr, "ConfigureAttMtu"}, + FunctionInfo{71, nullptr, "RegisterGattServer"}, + FunctionInfo{72, nullptr, "UnregisterGattServer"}, + FunctionInfo{73, nullptr, "ConnectGattClient"}, + FunctionInfo{74, nullptr, "DisconnectGattClient"}, + FunctionInfo{75, nullptr, "AddGattService"}, + FunctionInfo{76, nullptr, "EnableGattService"}, + FunctionInfo{77, nullptr, "AddGattCharacteristic"}, + FunctionInfo{78, nullptr, "AddGattDescriptor"}, + FunctionInfo{79, nullptr, "GetBleManagedEventInfo"}, + FunctionInfo{80, nullptr, "GetGattFirstCharacteristic"}, + FunctionInfo{81, nullptr, "GetGattNextCharacteristic"}, + FunctionInfo{82, nullptr, "GetGattFirstDescriptor"}, + FunctionInfo{83, nullptr, "GetGattNextDescriptor"}, + FunctionInfo{84, nullptr, "RegisterGattManagedDataPath"}, + FunctionInfo{85, nullptr, "UnregisterGattManagedDataPath"}, + FunctionInfo{86, nullptr, "RegisterGattHidDataPath"}, + FunctionInfo{87, nullptr, "UnregisterGattHidDataPath"}, + FunctionInfo{88, nullptr, "RegisterGattDataPath"}, + FunctionInfo{89, nullptr, "UnregisterGattDataPath"}, + FunctionInfo{90, nullptr, "ReadGattCharacteristic"}, + FunctionInfo{91, nullptr, "ReadGattDescriptor"}, + FunctionInfo{92, nullptr, "WriteGattCharacteristic"}, + FunctionInfo{93, nullptr, "WriteGattDescriptor"}, + FunctionInfo{94, nullptr, "RegisterGattNotification"}, + FunctionInfo{95, nullptr, "UnregisterGattNotification"}, + FunctionInfo{96, nullptr, "GetLeHidEventInfo"}, + FunctionInfo{97, nullptr, "RegisterBleHidEvent"}, + FunctionInfo{98, nullptr, "SetBleScanParameter"}, + FunctionInfo{99, nullptr, "MoveToSecondaryPiconet"}, + FunctionInfo{100, nullptr, "IsBluetoothEnabled"}, + FunctionInfo{128, nullptr, "AcquireAudioEvent"}, + FunctionInfo{129, nullptr, "GetAudioEventInfo"}, + FunctionInfo{130, nullptr, "OpenAudioConnection"}, + FunctionInfo{131, nullptr, "CloseAudioConnection"}, + FunctionInfo{132, nullptr, "OpenAudioOut"}, + FunctionInfo{133, nullptr, "CloseAudioOut"}, + FunctionInfo{134, nullptr, "AcquireAudioOutStateChangedEvent"}, + FunctionInfo{135, nullptr, "StartAudioOut"}, + FunctionInfo{136, nullptr, "StopAudioOut"}, + FunctionInfo{137, nullptr, "GetAudioOutState"}, + FunctionInfo{138, nullptr, "GetAudioOutFeedingCodec"}, + FunctionInfo{139, nullptr, "GetAudioOutFeedingParameter"}, + FunctionInfo{140, nullptr, "AcquireAudioOutBufferAvailableEvent"}, + FunctionInfo{141, nullptr, "SendAudioData"}, + FunctionInfo{142, nullptr, "AcquireAudioControlInputStateChangedEvent"}, + FunctionInfo{143, nullptr, "GetAudioControlInputState"}, + FunctionInfo{144, nullptr, "AcquireAudioConnectionStateChangedEvent"}, + FunctionInfo{145, nullptr, "GetConnectedAudioDevice"}, + FunctionInfo{146, nullptr, "CloseAudioControlInput"}, + FunctionInfo{147, nullptr, "RegisterAudioControlNotification"}, + FunctionInfo{148, nullptr, "SendAudioControlPassthroughCommand"}, + FunctionInfo{149, nullptr, "SendAudioControlSetAbsoluteVolumeCommand"}, + FunctionInfo{150, nullptr, "AcquireAudioSinkVolumeLocallyChangedEvent"}, + FunctionInfo{151, nullptr, "AcquireAudioSinkVolumeUpdateRequestCompletedEvent"}, + FunctionInfo{152, nullptr, "GetAudioSinkVolume"}, + FunctionInfo{153, nullptr, "RequestUpdateAudioSinkVolume"}, + FunctionInfo{154, nullptr, "IsAudioSinkVolumeSupported"}, + FunctionInfo{256, nullptr, "IsManufacturingMode"}, + FunctionInfo{257, nullptr, "EmulateBluetoothCrash"}, + FunctionInfo{258, nullptr, "GetBleChannelMap"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/btm/btm.cpp b/src/core/hle/service/btm/btm.cpp index 1410631292..c643ab4b63 100644 --- a/src/core/hle/service/btm/btm.cpp +++ b/src/core/hle/service/btm/btm.cpp @@ -19,8 +19,7 @@ class IBtm final : public ServiceFramework { public: explicit IBtm(Core::System& system_) : ServiceFramework{system_, "btm"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetState"}, FunctionInfo{1, nullptr, "GetHostDeviceProperty"}, FunctionInfo{2, nullptr, "AcquireDeviceConditionEvent"}, @@ -109,6 +108,8 @@ public: FunctionInfo{116, nullptr, "SetAudioSinkVolume"}, //15.0.0+ FunctionInfo{117, nullptr, "GetAudioSinkVolume"} //15.0.0+ ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/caps/caps.cpp b/src/core/hle/service/caps/caps.cpp index 88d0981da7..cf325ab9f0 100644 --- a/src/core/hle/service/caps/caps.cpp +++ b/src/core/hle/service/caps/caps.cpp @@ -22,12 +22,13 @@ class IDecoderControlService final : public ServiceFramework, "SubmitContext"}, - FunctionInfo{1, C<&ErrorReportContext::CreateReportV0>, "CreateReportV0"}, - FunctionInfo{2, nullptr, "SetInitialLaunchSettingsCompletionTime"}, - FunctionInfo{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"}, - FunctionInfo{4, nullptr, "UpdatePowerOnTime"}, - FunctionInfo{5, D<&ErrorReportContext::UpdateAwakeTime>, "UpdateAwakeTime"}, - FunctionInfo{6, nullptr, "SubmitMultipleCategoryContext"}, - FunctionInfo{7, nullptr, "UpdateApplicationLaunchTime"}, - FunctionInfo{8, nullptr, "ClearApplicationLaunchTime"}, - FunctionInfo{9, nullptr, "SubmitAttachment"}, - FunctionInfo{10, nullptr, "CreateReportWithAttachments"}, - FunctionInfo{11, C<&ErrorReportContext::CreateReportV1>, "CreateReportV1"}, - FunctionInfo{12, C<&ErrorReportContext::CreateReport>, "CreateReport"}, - FunctionInfo{20, nullptr, "RegisterRunningApplet"}, - FunctionInfo{21, nullptr, "UnregisterRunningApplet"}, - FunctionInfo{22, nullptr, "UpdateAppletSuspendedDuration"}, - FunctionInfo{30, nullptr, "InvalidateForcedShutdownDetection"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -83,6 +65,26 @@ private: data_a.size(), data_b.size(), flag_a, flag_b); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"}, + FunctionInfo{1, C<&ErrorReportContext::CreateReportV0>, "CreateReportV0"}, + FunctionInfo{2, nullptr, "SetInitialLaunchSettingsCompletionTime"}, + FunctionInfo{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"}, + FunctionInfo{4, nullptr, "UpdatePowerOnTime"}, + FunctionInfo{5, D<&ErrorReportContext::UpdateAwakeTime>, "UpdateAwakeTime"}, + FunctionInfo{6, nullptr, "SubmitMultipleCategoryContext"}, + FunctionInfo{7, nullptr, "UpdateApplicationLaunchTime"}, + FunctionInfo{8, nullptr, "ClearApplicationLaunchTime"}, + FunctionInfo{9, nullptr, "SubmitAttachment"}, + FunctionInfo{10, nullptr, "CreateReportWithAttachments"}, + FunctionInfo{11, C<&ErrorReportContext::CreateReportV1>, "CreateReportV1"}, + FunctionInfo{12, C<&ErrorReportContext::CreateReport>, "CreateReport"}, + FunctionInfo{20, nullptr, "RegisterRunningApplet"}, + FunctionInfo{21, nullptr, "UnregisterRunningApplet"}, + FunctionInfo{22, nullptr, "UpdateAppletSuspendedDuration"}, + FunctionInfo{30, nullptr, "InvalidateForcedShutdownDetection"} + ); }; class ErrorReportSession final : public ServiceFramework { @@ -90,12 +92,14 @@ public: explicit ErrorReportSession(Core::System& system_) : ServiceFramework{system_, "erpt:r"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "OpenReport"}, - FunctionInfo{1, nullptr, "OpenManager"}, - FunctionInfo{2, nullptr, "OpenAttachment"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "OpenReport"}, + FunctionInfo{1, nullptr, "OpenManager"}, + FunctionInfo{2, nullptr, "OpenAttachment"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/es/es.cpp b/src/core/hle/service/es/es.cpp index c380d67404..a8df226143 100644 --- a/src/core/hle/service/es/es.cpp +++ b/src/core/hle/service/es/es.cpp @@ -24,102 +24,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{1, &ETicket::ImportTicket, "ImportTicket"}, - FunctionInfo{2, nullptr, "ImportTicketCertificateSet"}, - FunctionInfo{3, nullptr, "DeleteTicket"}, - FunctionInfo{4, nullptr, "DeletePersonalizedTicket"}, - FunctionInfo{5, nullptr, "DeleteAllCommonTicket"}, - FunctionInfo{6, nullptr, "DeleteAllPersonalizedTicket"}, - FunctionInfo{7, nullptr, "DeleteAllPersonalizedTicketEx"}, - FunctionInfo{8, &ETicket::GetTitleKey, "GetTitleKey"}, - FunctionInfo{9, &ETicket::CountCommonTicket, "CountCommonTicket"}, - FunctionInfo{10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"}, - FunctionInfo{11, &ETicket::ListCommonTicketRightsIds, "ListCommonTicketRightsIds"}, - FunctionInfo{12, &ETicket::ListPersonalizedTicketRightsIds, "ListPersonalizedTicketRightsIds"}, - FunctionInfo{13, nullptr, "ListMissingPersonalizedTicket"}, - FunctionInfo{14, &ETicket::GetCommonTicketSize, "GetCommonTicketSize"}, - FunctionInfo{15, &ETicket::GetPersonalizedTicketSize, "GetPersonalizedTicketSize"}, - FunctionInfo{16, &ETicket::GetCommonTicketData, "GetCommonTicketData"}, - FunctionInfo{17, &ETicket::GetPersonalizedTicketData, "GetPersonalizedTicketData"}, - FunctionInfo{18, nullptr, "OwnTicket"}, - FunctionInfo{19, nullptr, "GetTicketInfo"}, - FunctionInfo{20, nullptr, "ListLightTicketInfo"}, - FunctionInfo{21, nullptr, "SignData"}, - FunctionInfo{22, nullptr, "GetCommonTicketAndCertificateSize"}, - FunctionInfo{23, nullptr, "GetCommonTicketAndCertificateData"}, - FunctionInfo{24, nullptr, "ImportPrepurchaseRecord"}, - FunctionInfo{25, nullptr, "DeletePrepurchaseRecord"}, - FunctionInfo{26, nullptr, "DeleteAllPrepurchaseRecord"}, - FunctionInfo{27, nullptr, "CountPrepurchaseRecord"}, - FunctionInfo{28, nullptr, "ListPrepurchaseRecordRightsIds"}, - FunctionInfo{29, nullptr, "ListPrepurchaseRecordInfo"}, - FunctionInfo{30, nullptr, "CountTicket"}, - FunctionInfo{31, nullptr, "ListTicketRightsIds"}, - FunctionInfo{32, nullptr, "CountPrepurchaseRecordEx"}, - FunctionInfo{33, nullptr, "ListPrepurchaseRecordRightsIdsEx"}, - FunctionInfo{34, nullptr, "GetEncryptedTicketSize"}, - FunctionInfo{35, nullptr, "GetEncryptedTicketData"}, - FunctionInfo{36, nullptr, "DeleteAllInactiveELicenseRequiredPersonalizedTicket"}, - FunctionInfo{37, nullptr, "OwnTicket2"}, - FunctionInfo{38, nullptr, "OwnTicket3"}, - FunctionInfo{39, nullptr, "DeleteAllInactivePersonalizedTicket"}, - FunctionInfo{40, nullptr, "DeletePrepurchaseRecordByNintendoAccountId"}, - FunctionInfo{101, nullptr, "Unknown101"}, //18.0.0+ - FunctionInfo{102, nullptr, "Unknown102"}, //18.0.0+ - FunctionInfo{103, nullptr, "Unknown103"}, //18.0.0+ - FunctionInfo{104, nullptr, "Unknown104"}, //18.0.0+ - FunctionInfo{105, nullptr, "Unknown105"}, //20.0.0+ - FunctionInfo{201, nullptr, "Unknown201"}, //18.0.0+ - FunctionInfo{202, nullptr, "Unknown202"}, //18.0.0+ - FunctionInfo{203, nullptr, "Unknown203"}, //18.0.0+ - FunctionInfo{204, nullptr, "Unknown204"}, //18.0.0+ - FunctionInfo{205, nullptr, "Unknown205"}, //18.0.0+ - FunctionInfo{501, nullptr, "Unknown501"}, - FunctionInfo{502, nullptr, "Unknown502"}, - FunctionInfo{503, nullptr, "GetTitleKey"}, - FunctionInfo{504, nullptr, "Unknown504"}, - FunctionInfo{508, nullptr, "Unknown508"}, - FunctionInfo{509, nullptr, "Unknown509"}, - FunctionInfo{510, nullptr, "Unknown510"}, - FunctionInfo{511, nullptr, "Unknown511"}, - FunctionInfo{1001, nullptr, "Unknown1001"}, - FunctionInfo{1002, nullptr, "Unknown1001"}, - FunctionInfo{1003, nullptr, "Unknown1003"}, - FunctionInfo{1004, nullptr, "Unknown1004"}, - FunctionInfo{1005, nullptr, "Unknown1005"}, - FunctionInfo{1006, nullptr, "Unknown1006"}, - FunctionInfo{1007, nullptr, "Unknown1007"}, - FunctionInfo{1009, nullptr, "Unknown1009"}, - FunctionInfo{1010, nullptr, "Unknown1010"}, - FunctionInfo{1011, nullptr, "Unknown1011"}, - FunctionInfo{1012, nullptr, "Unknown1012"}, - FunctionInfo{1013, nullptr, "Unknown1013"}, - FunctionInfo{1014, nullptr, "Unknown1014"}, - FunctionInfo{1015, nullptr, "Unknown1015"}, - FunctionInfo{1016, nullptr, "Unknown1016"}, - FunctionInfo{1017, nullptr, "Unknown1017"}, - FunctionInfo{1018, nullptr, "Unknown1018"}, - FunctionInfo{1019, nullptr, "Unknown1019"}, - FunctionInfo{1020, nullptr, "Unknown1020"}, - FunctionInfo{1021, nullptr, "Unknown1021"}, - FunctionInfo{1501, nullptr, "Unknown1501"}, - FunctionInfo{1502, nullptr, "Unknown1502"}, - FunctionInfo{1503, nullptr, "Unknown1503"}, - FunctionInfo{1504, nullptr, "Unknown1504"}, - FunctionInfo{1505, nullptr, "Unknown1505"}, - FunctionInfo{1506, nullptr, "Unknown1506"}, - FunctionInfo{2000, nullptr, "Unknown2000"}, - FunctionInfo{2001, nullptr, "Unknown2001"}, - FunctionInfo{2002, nullptr, "Unknown2002"}, - FunctionInfo{2003, nullptr, "Unknown2003"}, - FunctionInfo{2100, nullptr, "Unknown2100"}, - FunctionInfo{2501, nullptr, "Unknown2501"}, - FunctionInfo{2502, nullptr, "Unknown2502"}, - FunctionInfo{2601, nullptr, "Unknown2601"}, - FunctionInfo{3001, nullptr, "Unknown3001"}, - FunctionInfo{3002, nullptr, "Unknown3002"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -316,6 +221,102 @@ private: rb.Push(write_size); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{1, &ETicket::ImportTicket, "ImportTicket"}, + FunctionInfo{2, nullptr, "ImportTicketCertificateSet"}, + FunctionInfo{3, nullptr, "DeleteTicket"}, + FunctionInfo{4, nullptr, "DeletePersonalizedTicket"}, + FunctionInfo{5, nullptr, "DeleteAllCommonTicket"}, + FunctionInfo{6, nullptr, "DeleteAllPersonalizedTicket"}, + FunctionInfo{7, nullptr, "DeleteAllPersonalizedTicketEx"}, + FunctionInfo{8, &ETicket::GetTitleKey, "GetTitleKey"}, + FunctionInfo{9, &ETicket::CountCommonTicket, "CountCommonTicket"}, + FunctionInfo{10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"}, + FunctionInfo{11, &ETicket::ListCommonTicketRightsIds, "ListCommonTicketRightsIds"}, + FunctionInfo{12, &ETicket::ListPersonalizedTicketRightsIds, "ListPersonalizedTicketRightsIds"}, + FunctionInfo{13, nullptr, "ListMissingPersonalizedTicket"}, + FunctionInfo{14, &ETicket::GetCommonTicketSize, "GetCommonTicketSize"}, + FunctionInfo{15, &ETicket::GetPersonalizedTicketSize, "GetPersonalizedTicketSize"}, + FunctionInfo{16, &ETicket::GetCommonTicketData, "GetCommonTicketData"}, + FunctionInfo{17, &ETicket::GetPersonalizedTicketData, "GetPersonalizedTicketData"}, + FunctionInfo{18, nullptr, "OwnTicket"}, + FunctionInfo{19, nullptr, "GetTicketInfo"}, + FunctionInfo{20, nullptr, "ListLightTicketInfo"}, + FunctionInfo{21, nullptr, "SignData"}, + FunctionInfo{22, nullptr, "GetCommonTicketAndCertificateSize"}, + FunctionInfo{23, nullptr, "GetCommonTicketAndCertificateData"}, + FunctionInfo{24, nullptr, "ImportPrepurchaseRecord"}, + FunctionInfo{25, nullptr, "DeletePrepurchaseRecord"}, + FunctionInfo{26, nullptr, "DeleteAllPrepurchaseRecord"}, + FunctionInfo{27, nullptr, "CountPrepurchaseRecord"}, + FunctionInfo{28, nullptr, "ListPrepurchaseRecordRightsIds"}, + FunctionInfo{29, nullptr, "ListPrepurchaseRecordInfo"}, + FunctionInfo{30, nullptr, "CountTicket"}, + FunctionInfo{31, nullptr, "ListTicketRightsIds"}, + FunctionInfo{32, nullptr, "CountPrepurchaseRecordEx"}, + FunctionInfo{33, nullptr, "ListPrepurchaseRecordRightsIdsEx"}, + FunctionInfo{34, nullptr, "GetEncryptedTicketSize"}, + FunctionInfo{35, nullptr, "GetEncryptedTicketData"}, + FunctionInfo{36, nullptr, "DeleteAllInactiveELicenseRequiredPersonalizedTicket"}, + FunctionInfo{37, nullptr, "OwnTicket2"}, + FunctionInfo{38, nullptr, "OwnTicket3"}, + FunctionInfo{39, nullptr, "DeleteAllInactivePersonalizedTicket"}, + FunctionInfo{40, nullptr, "DeletePrepurchaseRecordByNintendoAccountId"}, + FunctionInfo{101, nullptr, "Unknown101"}, //18.0.0+ + FunctionInfo{102, nullptr, "Unknown102"}, //18.0.0+ + FunctionInfo{103, nullptr, "Unknown103"}, //18.0.0+ + FunctionInfo{104, nullptr, "Unknown104"}, //18.0.0+ + FunctionInfo{105, nullptr, "Unknown105"}, //20.0.0+ + FunctionInfo{201, nullptr, "Unknown201"}, //18.0.0+ + FunctionInfo{202, nullptr, "Unknown202"}, //18.0.0+ + FunctionInfo{203, nullptr, "Unknown203"}, //18.0.0+ + FunctionInfo{204, nullptr, "Unknown204"}, //18.0.0+ + FunctionInfo{205, nullptr, "Unknown205"}, //18.0.0+ + FunctionInfo{501, nullptr, "Unknown501"}, + FunctionInfo{502, nullptr, "Unknown502"}, + FunctionInfo{503, nullptr, "GetTitleKey"}, + FunctionInfo{504, nullptr, "Unknown504"}, + FunctionInfo{508, nullptr, "Unknown508"}, + FunctionInfo{509, nullptr, "Unknown509"}, + FunctionInfo{510, nullptr, "Unknown510"}, + FunctionInfo{511, nullptr, "Unknown511"}, + FunctionInfo{1001, nullptr, "Unknown1001"}, + FunctionInfo{1002, nullptr, "Unknown1001"}, + FunctionInfo{1003, nullptr, "Unknown1003"}, + FunctionInfo{1004, nullptr, "Unknown1004"}, + FunctionInfo{1005, nullptr, "Unknown1005"}, + FunctionInfo{1006, nullptr, "Unknown1006"}, + FunctionInfo{1007, nullptr, "Unknown1007"}, + FunctionInfo{1009, nullptr, "Unknown1009"}, + FunctionInfo{1010, nullptr, "Unknown1010"}, + FunctionInfo{1011, nullptr, "Unknown1011"}, + FunctionInfo{1012, nullptr, "Unknown1012"}, + FunctionInfo{1013, nullptr, "Unknown1013"}, + FunctionInfo{1014, nullptr, "Unknown1014"}, + FunctionInfo{1015, nullptr, "Unknown1015"}, + FunctionInfo{1016, nullptr, "Unknown1016"}, + FunctionInfo{1017, nullptr, "Unknown1017"}, + FunctionInfo{1018, nullptr, "Unknown1018"}, + FunctionInfo{1019, nullptr, "Unknown1019"}, + FunctionInfo{1020, nullptr, "Unknown1020"}, + FunctionInfo{1021, nullptr, "Unknown1021"}, + FunctionInfo{1501, nullptr, "Unknown1501"}, + FunctionInfo{1502, nullptr, "Unknown1502"}, + FunctionInfo{1503, nullptr, "Unknown1503"}, + FunctionInfo{1504, nullptr, "Unknown1504"}, + FunctionInfo{1505, nullptr, "Unknown1505"}, + FunctionInfo{1506, nullptr, "Unknown1506"}, + FunctionInfo{2000, nullptr, "Unknown2000"}, + FunctionInfo{2001, nullptr, "Unknown2001"}, + FunctionInfo{2002, nullptr, "Unknown2002"}, + FunctionInfo{2003, nullptr, "Unknown2003"}, + FunctionInfo{2100, nullptr, "Unknown2100"}, + FunctionInfo{2501, nullptr, "Unknown2501"}, + FunctionInfo{2502, nullptr, "Unknown2502"}, + FunctionInfo{2601, nullptr, "Unknown2601"}, + FunctionInfo{3001, nullptr, "Unknown3001"}, + FunctionInfo{3002, nullptr, "Unknown3002"} + ); Core::Crypto::KeyManager& keys = Core::Crypto::KeyManager::Instance(); }; @@ -324,14 +325,15 @@ public: explicit NDRM_LU(Core::System& system_) : ServiceFramework{system_, "ndrm:lu"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{1, nullptr, "Cmd1"}, FunctionInfo{2, nullptr, "Cmd2"}, FunctionInfo{3, nullptr, "Cmd3"}, FunctionInfo{1000, nullptr, "Cmd1000"}, FunctionInfo{8000, nullptr, "Cmd8000"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -340,8 +342,7 @@ public: explicit NDRM_LA(Core::System& system_) : ServiceFramework{system_, "ndrm:la"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{1, nullptr, "Cmd1"}, FunctionInfo{2, nullptr, "Cmd2"}, FunctionInfo{3, nullptr, "Cmd3"}, @@ -397,6 +398,8 @@ public: FunctionInfo{8002, nullptr, "Cmd8002"}, FunctionInfo{8003, nullptr, "Cmd8003"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/eupld/eupld.cpp b/src/core/hle/service/eupld/eupld.cpp index 048a396f1d..46f771bb72 100644 --- a/src/core/hle/service/eupld/eupld.cpp +++ b/src/core/hle/service/eupld/eupld.cpp @@ -16,14 +16,15 @@ class ErrorUploadContext final : public ServiceFramework { public: explicit ErrorUploadContext(Core::System& system_) : ServiceFramework{system_, "eupld:c"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetUrl"}, FunctionInfo{1, nullptr, "ImportCrt"}, FunctionInfo{2, nullptr, "ImportPki"}, FunctionInfo{3, nullptr, "SetAutoUpload"}, FunctionInfo{4, nullptr, "GetAutoUpload"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -31,8 +32,7 @@ class ErrorUploadRequest final : public ServiceFramework { public: explicit ErrorUploadRequest(Core::System& system_) : ServiceFramework{system_, "eupld:r"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "Initialize"}, FunctionInfo{1, nullptr, "UploadAll"}, FunctionInfo{2, nullptr, "UploadSelected"}, @@ -40,6 +40,8 @@ public: FunctionInfo{4, nullptr, "CancelUpload"}, FunctionInfo{5, nullptr, "GetResult"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/fgm/fgm.cpp b/src/core/hle/service/fgm/fgm.cpp index 125e8f28b9..96bfd07bbe 100644 --- a/src/core/hle/service/fgm/fgm.cpp +++ b/src/core/hle/service/fgm/fgm.cpp @@ -19,13 +19,15 @@ public: explicit IRequest(Core::System& system_) : ServiceFramework{system_, "IRequest"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "Initialize"}, - FunctionInfo{1, nullptr, "Set"}, - FunctionInfo{2, nullptr, "Get"}, - FunctionInfo{3, nullptr, "Cancel"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "Initialize"}, + FunctionInfo{1, nullptr, "Set"}, + FunctionInfo{2, nullptr, "Get"}, + FunctionInfo{3, nullptr, "Cancel"} + ); }; class FGM final : public ServiceFramework { @@ -33,9 +35,7 @@ public: explicit FGM(Core::System& system_, const char* name) : ServiceFramework{system_, name} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &FGM::Initialize, "Initialize"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -46,6 +46,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &FGM::Initialize, "Initialize"} + ); }; class FGM_DBG final : public ServiceFramework { @@ -53,12 +57,14 @@ public: explicit FGM_DBG(Core::System& system_) : ServiceFramework{system_, "fgm:dbg"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "Initialize"}, - FunctionInfo{1, nullptr, "Read"}, - FunctionInfo{2, nullptr, "Cancel"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "Initialize"}, + FunctionInfo{1, nullptr, "Read"}, + FunctionInfo{2, nullptr, "Cancel"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/friend/friend.cpp b/src/core/hle/service/friend/friend.cpp index f00dfc2237..e50a0d3b6b 100644 --- a/src/core/hle/service/friend/friend.cpp +++ b/src/core/hle/service/friend/friend.cpp @@ -26,120 +26,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IFriendService::GetCompletionEvent, "GetCompletionEvent"}, - FunctionInfo{1, &IFriendService::Cancel, "Cancel"}, - FunctionInfo{10100, nullptr, "GetFriendListIds"}, - FunctionInfo{10101, &IFriendService::GetFriendList, "GetFriendList"}, - FunctionInfo{10102, nullptr, "UpdateFriendInfo"}, - FunctionInfo{10110, nullptr, "GetFriendProfileImage"}, - FunctionInfo{10111, nullptr, "GetFriendProfileImageWithImageSize"}, // 18.0.0+ - FunctionInfo{10120, &IFriendService::CheckFriendListAvailability, "CheckFriendListAvailability"}, - FunctionInfo{10121, nullptr, "EnsureFriendListAvailable"}, - FunctionInfo{10200, nullptr, "SendFriendRequestForApplication"}, - FunctionInfo{10211, nullptr, "AddFacedFriendRequestForApplication"}, - FunctionInfo{10400, &IFriendService::GetBlockedUserListIds, "GetBlockedUserListIds"}, - FunctionInfo{10420, &IFriendService::CheckBlockedUserListAvailability, "CheckBlockedUserListAvailability"}, - FunctionInfo{10421, nullptr, "EnsureBlockedUserListAvailable"}, - FunctionInfo{10500, nullptr, "GetProfileList"}, - FunctionInfo{10501, nullptr, "GetProfileListV2"}, // 18.0.0+ - FunctionInfo{10600, nullptr, "DeclareOpenOnlinePlaySession"}, - FunctionInfo{10601, &IFriendService::DeclareCloseOnlinePlaySession, "DeclareCloseOnlinePlaySession"}, - FunctionInfo{10610, &IFriendService::UpdateUserPresence, "UpdateUserPresence"}, - FunctionInfo{10700, &IFriendService::GetPlayHistoryRegistrationKey, "GetPlayHistoryRegistrationKey"}, - FunctionInfo{10701, nullptr, "GetPlayHistoryRegistrationKeyWithNetworkServiceAccountId"}, - FunctionInfo{10702, nullptr, "AddPlayHistory"}, - FunctionInfo{11000, nullptr, "GetProfileImageUrl"}, - FunctionInfo{11001, nullptr, "GetProfileImageUrlV2"}, // 18.0.0+ - FunctionInfo{20100, &IFriendService::GetFriendCount, "GetFriendCount"}, - FunctionInfo{20101, &IFriendService::GetNewlyFriendCount, "GetNewlyFriendCount"}, - FunctionInfo{20102, nullptr, "GetFriendDetailedInfo"}, - FunctionInfo{20103, nullptr, "SyncFriendList"}, - FunctionInfo{20104, &IFriendService::RequestSyncFriendList, "RequestSyncFriendList"}, - FunctionInfo{20105, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV1"}, - FunctionInfo{20106, nullptr, "UpdateFriendInfoForViewerV1"}, - FunctionInfo{20107, nullptr, "GetFriendDetailedInfoV2"}, // 20.0.0+ - FunctionInfo{20108, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV2"}, // 22.0.0+ - FunctionInfo{20109, nullptr, "UpdateFriendInfoForViewerV2"}, // 22.0.0+ - FunctionInfo{20110, nullptr, "LoadFriendSettingV1"}, - FunctionInfo{20111, nullptr, "LoadFriendSettingV2"}, // 22.0.0+ - FunctionInfo{20200, &IFriendService::GetReceivedFriendRequestCount, "GetReceivedFriendRequestCount"}, - FunctionInfo{20201, nullptr, "GetFriendRequestListV1"}, - FunctionInfo{20202, nullptr, "GetFriendRequestListV2"}, // 20.0.0+ - FunctionInfo{20203, nullptr, "GetFriendRequestReceivedNotificationCount"}, // 22.0.0+ - FunctionInfo{20300, nullptr, "GetFriendCandidateList"}, - FunctionInfo{20301, nullptr, "GetNintendoNetworkIdInfo"}, - FunctionInfo{20302, nullptr, "GetSnsAccountLinkage"}, // 5.0.0-19.0.1 - FunctionInfo{20303, nullptr, "GetSnsAccountProfile"}, // 5.0.0-19.0.1 - FunctionInfo{20304, nullptr, "GetSnsAccountFriendList"}, // 5.0.0-19.0.1 - FunctionInfo{20400, nullptr, "GetBlockedUserListV1"}, - FunctionInfo{20401, nullptr, "SyncBlockedUserList"}, - FunctionInfo{20402, nullptr, "GetBlockedUserListV2"}, // 20.0.0+ - FunctionInfo{20500, nullptr, "GetProfileExtraListV1"}, - FunctionInfo{20501, nullptr, "GetRelationship"}, - FunctionInfo{20502, nullptr, "GetProfileExtraListV2"}, // 19.0.0+ - FunctionInfo{20600, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV1"}, - FunctionInfo{20601, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV2"}, // 19.0.0+ - FunctionInfo{20700, nullptr, "GetPlayHistoryListV1"}, - FunctionInfo{20701, &IFriendService::GetPlayHistoryStatistics, "GetPlayHistoryStatistics"}, - FunctionInfo{20702, nullptr, "GetPlayHistoryListV2"}, // 19.0.0+ - FunctionInfo{20800, &IFriendService::LoadUserSetting, "LoadUserSettingV1"}, - FunctionInfo{20801, nullptr, "SyncUserSetting"}, - FunctionInfo{20802, &IFriendService::LoadUserSetting, "LoadUserSettingV2"}, // 19.0.0+ - FunctionInfo{20900, &IFriendService::RequestListSummaryOverlayNotification, "RequestListSummaryOverlayNotification"}, - FunctionInfo{21000, nullptr, "GetExternalApplicationCatalog"}, - FunctionInfo{22000, nullptr, "GetReceivedFriendInvitationListV1"}, - FunctionInfo{22001, nullptr, "GetReceivedFriendInvitationDetailedInfoV1"}, - FunctionInfo{22002, nullptr, "GetReceivedFriendInvitationListV2"}, // 19.0.0+ - FunctionInfo{22003, nullptr, "GetReceivedFriendInvitationDetailedInfoV2"}, // 19.0.0+ - FunctionInfo{22010, &IFriendService::GetReceivedFriendInvitationCountCache, "GetReceivedFriendInvitationCountCache"}, - FunctionInfo{30100, nullptr, "DropFriendNewlyFlags"}, - FunctionInfo{30101, nullptr, "DeleteFriend"}, - FunctionInfo{30110, nullptr, "DropFriendNewlyFlag"}, - FunctionInfo{30120, nullptr, "ChangeFriendFavoriteFlag"}, - FunctionInfo{30121, nullptr, "ChangeFriendOnlineNotificationFlag"}, - FunctionInfo{30130, nullptr, "SetFriendNote"}, // 22.0.0+ - FunctionInfo{30131, nullptr, "RequestUploadPendingNote"}, // 22.0.0+ - FunctionInfo{30190, nullptr, "RequestSyncLocalUpdates"}, // 22.0.0+ - FunctionInfo{30200, nullptr, "SendFriendRequest"}, - FunctionInfo{30201, nullptr, "SendFriendRequestWithApplicationInfoV1"}, - FunctionInfo{30202, nullptr, "CancelFriendRequest"}, - FunctionInfo{30203, nullptr, "AcceptFriendRequest"}, - FunctionInfo{30204, nullptr, "RejectFriendRequest"}, - FunctionInfo{30205, nullptr, "ReadFriendRequest"}, - FunctionInfo{30210, nullptr, "GetFacedFriendRequestRegistrationKey"}, - FunctionInfo{30211, nullptr, "AddFacedFriendRequest"}, - FunctionInfo{30212, nullptr, "CancelFacedFriendRequest"}, - FunctionInfo{30213, nullptr, "GetFacedFriendRequestProfileImage"}, - FunctionInfo{30214, nullptr, "GetFacedFriendRequestProfileImageFromPath"}, - FunctionInfo{30215, nullptr, "SendFriendRequestWithExternalApplicationCatalogId"}, - FunctionInfo{30216, nullptr, "ResendFacedFriendRequest"}, - FunctionInfo{30217, nullptr, "SendFriendRequestWithNintendoNetworkIdInfo"}, - FunctionInfo{30218, nullptr, "SendFriendRequestWithApplicationInfoV2"}, // 20.0.0+ - FunctionInfo{30300, nullptr, "GetSnsAccountLinkPageUrl"}, // 5.0.0-19.0.1 - FunctionInfo{30301, nullptr, "UnlinkSnsAccount"}, // 5.0.0-19.0.1 - FunctionInfo{30400, nullptr, "BlockUser"}, - FunctionInfo{30401, nullptr, "BlockUserWithApplicationInfoV1"}, - FunctionInfo{30402, nullptr, "UnblockUser"}, - FunctionInfo{30403, nullptr, "BlockUserWithApplicationInfoV2"}, // 20.0.0+ - FunctionInfo{30500, nullptr, "GetProfileExtraFromFriendCodeV1"}, - FunctionInfo{30501, nullptr, "GetProfileExtraFromFriendCodeV2"}, // 19.0.0+ - FunctionInfo{30700, nullptr, "DeletePlayHistory"}, - FunctionInfo{30701, nullptr, "AddPlayHistoryWithApplication"}, // 19.0.0+ - FunctionInfo{30810, nullptr, "ChangePresencePermission"}, - FunctionInfo{30811, nullptr, "ChangeFriendRequestReception"}, - FunctionInfo{30812, nullptr, "ChangePlayLogPermission"}, - FunctionInfo{30820, nullptr, "IssueFriendCode"}, - FunctionInfo{30830, nullptr, "ClearPlayLog"}, - FunctionInfo{30900, nullptr, "SendFriendInvitationV1"}, - FunctionInfo{30901, nullptr, "SendFriendInvitationV2"}, // 19.0.0+ - FunctionInfo{30910, nullptr, "ReadFriendInvitation"}, - FunctionInfo{30911, nullptr, "ReadAllFriendInvitations"}, - FunctionInfo{31000, nullptr, "OpenUser"}, // 19.0.0+ - FunctionInfo{40100, nullptr, "DeleteFriendListCache"}, - FunctionInfo{40400, nullptr, "DeleteBlockedUserListCache"}, - FunctionInfo{49900, nullptr, "DeleteNetworkServiceAccountCache"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IFriendService() override { @@ -365,8 +252,121 @@ private: rb.Push(0); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IFriendService::GetCompletionEvent, "GetCompletionEvent"}, + FunctionInfo{1, &IFriendService::Cancel, "Cancel"}, + FunctionInfo{10100, nullptr, "GetFriendListIds"}, + FunctionInfo{10101, &IFriendService::GetFriendList, "GetFriendList"}, + FunctionInfo{10102, nullptr, "UpdateFriendInfo"}, + FunctionInfo{10110, nullptr, "GetFriendProfileImage"}, + FunctionInfo{10111, nullptr, "GetFriendProfileImageWithImageSize"}, // 18.0.0+ + FunctionInfo{10120, &IFriendService::CheckFriendListAvailability, "CheckFriendListAvailability"}, + FunctionInfo{10121, nullptr, "EnsureFriendListAvailable"}, + FunctionInfo{10200, nullptr, "SendFriendRequestForApplication"}, + FunctionInfo{10211, nullptr, "AddFacedFriendRequestForApplication"}, + FunctionInfo{10400, &IFriendService::GetBlockedUserListIds, "GetBlockedUserListIds"}, + FunctionInfo{10420, &IFriendService::CheckBlockedUserListAvailability, "CheckBlockedUserListAvailability"}, + FunctionInfo{10421, nullptr, "EnsureBlockedUserListAvailable"}, + FunctionInfo{10500, nullptr, "GetProfileList"}, + FunctionInfo{10501, nullptr, "GetProfileListV2"}, // 18.0.0+ + FunctionInfo{10600, nullptr, "DeclareOpenOnlinePlaySession"}, + FunctionInfo{10601, &IFriendService::DeclareCloseOnlinePlaySession, "DeclareCloseOnlinePlaySession"}, + FunctionInfo{10610, &IFriendService::UpdateUserPresence, "UpdateUserPresence"}, + FunctionInfo{10700, &IFriendService::GetPlayHistoryRegistrationKey, "GetPlayHistoryRegistrationKey"}, + FunctionInfo{10701, nullptr, "GetPlayHistoryRegistrationKeyWithNetworkServiceAccountId"}, + FunctionInfo{10702, nullptr, "AddPlayHistory"}, + FunctionInfo{11000, nullptr, "GetProfileImageUrl"}, + FunctionInfo{11001, nullptr, "GetProfileImageUrlV2"}, // 18.0.0+ + FunctionInfo{20100, &IFriendService::GetFriendCount, "GetFriendCount"}, + FunctionInfo{20101, &IFriendService::GetNewlyFriendCount, "GetNewlyFriendCount"}, + FunctionInfo{20102, nullptr, "GetFriendDetailedInfo"}, + FunctionInfo{20103, nullptr, "SyncFriendList"}, + FunctionInfo{20104, &IFriendService::RequestSyncFriendList, "RequestSyncFriendList"}, + FunctionInfo{20105, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV1"}, + FunctionInfo{20106, nullptr, "UpdateFriendInfoForViewerV1"}, + FunctionInfo{20107, nullptr, "GetFriendDetailedInfoV2"}, // 20.0.0+ + FunctionInfo{20108, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV2"}, // 22.0.0+ + FunctionInfo{20109, nullptr, "UpdateFriendInfoForViewerV2"}, // 22.0.0+ + FunctionInfo{20110, nullptr, "LoadFriendSettingV1"}, + FunctionInfo{20111, nullptr, "LoadFriendSettingV2"}, // 22.0.0+ + FunctionInfo{20200, &IFriendService::GetReceivedFriendRequestCount, "GetReceivedFriendRequestCount"}, + FunctionInfo{20201, nullptr, "GetFriendRequestListV1"}, + FunctionInfo{20202, nullptr, "GetFriendRequestListV2"}, // 20.0.0+ + FunctionInfo{20203, nullptr, "GetFriendRequestReceivedNotificationCount"}, // 22.0.0+ + FunctionInfo{20300, nullptr, "GetFriendCandidateList"}, + FunctionInfo{20301, nullptr, "GetNintendoNetworkIdInfo"}, + FunctionInfo{20302, nullptr, "GetSnsAccountLinkage"}, // 5.0.0-19.0.1 + FunctionInfo{20303, nullptr, "GetSnsAccountProfile"}, // 5.0.0-19.0.1 + FunctionInfo{20304, nullptr, "GetSnsAccountFriendList"}, // 5.0.0-19.0.1 + FunctionInfo{20400, nullptr, "GetBlockedUserListV1"}, + FunctionInfo{20401, nullptr, "SyncBlockedUserList"}, + FunctionInfo{20402, nullptr, "GetBlockedUserListV2"}, // 20.0.0+ + FunctionInfo{20500, nullptr, "GetProfileExtraListV1"}, + FunctionInfo{20501, nullptr, "GetRelationship"}, + FunctionInfo{20502, nullptr, "GetProfileExtraListV2"}, // 19.0.0+ + FunctionInfo{20600, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV1"}, + FunctionInfo{20601, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV2"}, // 19.0.0+ + FunctionInfo{20700, nullptr, "GetPlayHistoryListV1"}, + FunctionInfo{20701, &IFriendService::GetPlayHistoryStatistics, "GetPlayHistoryStatistics"}, + FunctionInfo{20702, nullptr, "GetPlayHistoryListV2"}, // 19.0.0+ + FunctionInfo{20800, &IFriendService::LoadUserSetting, "LoadUserSettingV1"}, + FunctionInfo{20801, nullptr, "SyncUserSetting"}, + FunctionInfo{20802, &IFriendService::LoadUserSetting, "LoadUserSettingV2"}, // 19.0.0+ + FunctionInfo{20900, &IFriendService::RequestListSummaryOverlayNotification, "RequestListSummaryOverlayNotification"}, + FunctionInfo{21000, nullptr, "GetExternalApplicationCatalog"}, + FunctionInfo{22000, nullptr, "GetReceivedFriendInvitationListV1"}, + FunctionInfo{22001, nullptr, "GetReceivedFriendInvitationDetailedInfoV1"}, + FunctionInfo{22002, nullptr, "GetReceivedFriendInvitationListV2"}, // 19.0.0+ + FunctionInfo{22003, nullptr, "GetReceivedFriendInvitationDetailedInfoV2"}, // 19.0.0+ + FunctionInfo{22010, &IFriendService::GetReceivedFriendInvitationCountCache, "GetReceivedFriendInvitationCountCache"}, + FunctionInfo{30100, nullptr, "DropFriendNewlyFlags"}, + FunctionInfo{30101, nullptr, "DeleteFriend"}, + FunctionInfo{30110, nullptr, "DropFriendNewlyFlag"}, + FunctionInfo{30120, nullptr, "ChangeFriendFavoriteFlag"}, + FunctionInfo{30121, nullptr, "ChangeFriendOnlineNotificationFlag"}, + FunctionInfo{30130, nullptr, "SetFriendNote"}, // 22.0.0+ + FunctionInfo{30131, nullptr, "RequestUploadPendingNote"}, // 22.0.0+ + FunctionInfo{30190, nullptr, "RequestSyncLocalUpdates"}, // 22.0.0+ + FunctionInfo{30200, nullptr, "SendFriendRequest"}, + FunctionInfo{30201, nullptr, "SendFriendRequestWithApplicationInfoV1"}, + FunctionInfo{30202, nullptr, "CancelFriendRequest"}, + FunctionInfo{30203, nullptr, "AcceptFriendRequest"}, + FunctionInfo{30204, nullptr, "RejectFriendRequest"}, + FunctionInfo{30205, nullptr, "ReadFriendRequest"}, + FunctionInfo{30210, nullptr, "GetFacedFriendRequestRegistrationKey"}, + FunctionInfo{30211, nullptr, "AddFacedFriendRequest"}, + FunctionInfo{30212, nullptr, "CancelFacedFriendRequest"}, + FunctionInfo{30213, nullptr, "GetFacedFriendRequestProfileImage"}, + FunctionInfo{30214, nullptr, "GetFacedFriendRequestProfileImageFromPath"}, + FunctionInfo{30215, nullptr, "SendFriendRequestWithExternalApplicationCatalogId"}, + FunctionInfo{30216, nullptr, "ResendFacedFriendRequest"}, + FunctionInfo{30217, nullptr, "SendFriendRequestWithNintendoNetworkIdInfo"}, + FunctionInfo{30218, nullptr, "SendFriendRequestWithApplicationInfoV2"}, // 20.0.0+ + FunctionInfo{30300, nullptr, "GetSnsAccountLinkPageUrl"}, // 5.0.0-19.0.1 + FunctionInfo{30301, nullptr, "UnlinkSnsAccount"}, // 5.0.0-19.0.1 + FunctionInfo{30400, nullptr, "BlockUser"}, + FunctionInfo{30401, nullptr, "BlockUserWithApplicationInfoV1"}, + FunctionInfo{30402, nullptr, "UnblockUser"}, + FunctionInfo{30403, nullptr, "BlockUserWithApplicationInfoV2"}, // 20.0.0+ + FunctionInfo{30500, nullptr, "GetProfileExtraFromFriendCodeV1"}, + FunctionInfo{30501, nullptr, "GetProfileExtraFromFriendCodeV2"}, // 19.0.0+ + FunctionInfo{30700, nullptr, "DeletePlayHistory"}, + FunctionInfo{30701, nullptr, "AddPlayHistoryWithApplication"}, // 19.0.0+ + FunctionInfo{30810, nullptr, "ChangePresencePermission"}, + FunctionInfo{30811, nullptr, "ChangeFriendRequestReception"}, + FunctionInfo{30812, nullptr, "ChangePlayLogPermission"}, + FunctionInfo{30820, nullptr, "IssueFriendCode"}, + FunctionInfo{30830, nullptr, "ClearPlayLog"}, + FunctionInfo{30900, nullptr, "SendFriendInvitationV1"}, + FunctionInfo{30901, nullptr, "SendFriendInvitationV2"}, // 19.0.0+ + FunctionInfo{30910, nullptr, "ReadFriendInvitation"}, + FunctionInfo{30911, nullptr, "ReadAllFriendInvitations"}, + FunctionInfo{31000, nullptr, "OpenUser"}, // 19.0.0+ + FunctionInfo{40100, nullptr, "DeleteFriendListCache"}, + FunctionInfo{40400, nullptr, "DeleteBlockedUserListCache"}, + FunctionInfo{49900, nullptr, "DeleteNetworkServiceAccountCache"} + ); KernelHelpers::ServiceContext service_context; - Kernel::KEvent* completion_event; }; @@ -379,11 +379,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &INotificationService::GetEvent, "GetEvent"}, - FunctionInfo{1, &INotificationService::Clear, "Clear"}, - FunctionInfo{2, &INotificationService::Pop, "Pop"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~INotificationService() override { @@ -461,9 +457,13 @@ private: bool has_received_friend_request; }; + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &INotificationService::GetEvent, "GetEvent"}, + FunctionInfo{1, &INotificationService::Clear, "Clear"}, + FunctionInfo{2, &INotificationService::Pop, "Pop"} + ); Common::UUID uuid; KernelHelpers::ServiceContext service_context; - Kernel::KEvent* notification_event; std::queue notifications; States states{}; @@ -500,11 +500,13 @@ public: {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetReceivableNeighborInfoCountMax"}, - FunctionInfo{10, nullptr, "IsNeighborDetectionEnabled"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetReceivableNeighborInfoCountMax"}, + FunctionInfo{10, nullptr, "IsNeighborDetectionEnabled"} + ); }; class IServiceForSystem final : public ServiceFramework { @@ -514,46 +516,48 @@ public: {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetReceivableNeighborInfoCountMax"}, - FunctionInfo{10, nullptr, "IsNeighborDetectionEnabled"}, - FunctionInfo{200, nullptr, "SetSystemData"}, - FunctionInfo{201, nullptr, "ClearSystemData"}, - FunctionInfo{203, nullptr, "GetReceivableNeighborInfoCountForSystem"}, - FunctionInfo{204, nullptr, "ReceiveNeighborInfoForSystem"}, - FunctionInfo{205, nullptr, "SetSender"}, - FunctionInfo{206, nullptr, "GetSender"}, - FunctionInfo{207, nullptr, "CreateScannerForSystem"}, - FunctionInfo{208, nullptr, "CreateReceiveEventHolderForSystem"}, - FunctionInfo{223, nullptr, "EnableNeighborDetection"}, - FunctionInfo{224, nullptr, "DisableNeighborDetection"}, - FunctionInfo{226, nullptr, "EnablePowerSave"}, - FunctionInfo{227, nullptr, "DisablePowerSave"}, - FunctionInfo{228, nullptr, "IsPowerSaveEnabled"}, - FunctionInfo{232, nullptr, "ClearBlockedUsers"}, - FunctionInfo{233, nullptr, "GetBlockedUserCount"}, - FunctionInfo{234, nullptr, "BlockUserByLocalUserId"}, - FunctionInfo{235, nullptr, "BlockUserByNetworkUserId"}, - FunctionInfo{236, nullptr, "UnblockUserByLocalUserId"}, - FunctionInfo{237, nullptr, "UnblockUserByNetworkUserId"}, - FunctionInfo{240, nullptr, "DeleteApplication"}, - FunctionInfo{250, nullptr, "InitializeApplicationInfo"}, - FunctionInfo{260, nullptr, "CreateAccountSystemSaveDataAccessSuppressor"}, - FunctionInfo{300, nullptr, "AddReceivedNeighborInfoForSystemForDebug"}, - FunctionInfo{301, nullptr, "GetSendDataForDebug"}, - FunctionInfo{302, nullptr, "ClearReceiveCounterForDebug"}, - FunctionInfo{303, nullptr, "GetNextReceiveCounterForDebug"}, - FunctionInfo{304, nullptr, "ListBlockedUsersForDebug"}, - FunctionInfo{305, nullptr, "RefreshSendDataIdForDebug"}, - FunctionInfo{306, nullptr, "ReloadFwdbgSettingsForDebug"}, - FunctionInfo{307, nullptr, "EnableApplicationForDebug"}, - FunctionInfo{308, nullptr, "GetNextReceiveCountersForDebug"}, - FunctionInfo{309, nullptr, "ListApplicationInfoForDebug"}, - FunctionInfo{310, nullptr, "SetApplicationDataForDebug"}, - FunctionInfo{400, nullptr, "GetNetworkUserId"}, - FunctionInfo{401, nullptr, "DeleteNetworkUserId"} - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetReceivableNeighborInfoCountMax"}, + FunctionInfo{10, nullptr, "IsNeighborDetectionEnabled"}, + FunctionInfo{200, nullptr, "SetSystemData"}, + FunctionInfo{201, nullptr, "ClearSystemData"}, + FunctionInfo{203, nullptr, "GetReceivableNeighborInfoCountForSystem"}, + FunctionInfo{204, nullptr, "ReceiveNeighborInfoForSystem"}, + FunctionInfo{205, nullptr, "SetSender"}, + FunctionInfo{206, nullptr, "GetSender"}, + FunctionInfo{207, nullptr, "CreateScannerForSystem"}, + FunctionInfo{208, nullptr, "CreateReceiveEventHolderForSystem"}, + FunctionInfo{223, nullptr, "EnableNeighborDetection"}, + FunctionInfo{224, nullptr, "DisableNeighborDetection"}, + FunctionInfo{226, nullptr, "EnablePowerSave"}, + FunctionInfo{227, nullptr, "DisablePowerSave"}, + FunctionInfo{228, nullptr, "IsPowerSaveEnabled"}, + FunctionInfo{232, nullptr, "ClearBlockedUsers"}, + FunctionInfo{233, nullptr, "GetBlockedUserCount"}, + FunctionInfo{234, nullptr, "BlockUserByLocalUserId"}, + FunctionInfo{235, nullptr, "BlockUserByNetworkUserId"}, + FunctionInfo{236, nullptr, "UnblockUserByLocalUserId"}, + FunctionInfo{237, nullptr, "UnblockUserByNetworkUserId"}, + FunctionInfo{240, nullptr, "DeleteApplication"}, + FunctionInfo{250, nullptr, "InitializeApplicationInfo"}, + FunctionInfo{260, nullptr, "CreateAccountSystemSaveDataAccessSuppressor"}, + FunctionInfo{300, nullptr, "AddReceivedNeighborInfoForSystemForDebug"}, + FunctionInfo{301, nullptr, "GetSendDataForDebug"}, + FunctionInfo{302, nullptr, "ClearReceiveCounterForDebug"}, + FunctionInfo{303, nullptr, "GetNextReceiveCounterForDebug"}, + FunctionInfo{304, nullptr, "ListBlockedUsersForDebug"}, + FunctionInfo{305, nullptr, "RefreshSendDataIdForDebug"}, + FunctionInfo{306, nullptr, "ReloadFwdbgSettingsForDebug"}, + FunctionInfo{307, nullptr, "EnableApplicationForDebug"}, + FunctionInfo{308, nullptr, "GetNextReceiveCountersForDebug"}, + FunctionInfo{309, nullptr, "ListApplicationInfoForDebug"}, + FunctionInfo{310, nullptr, "SetApplicationDataForDebug"}, + FunctionInfo{400, nullptr, "GetNetworkUserId"}, + FunctionInfo{401, nullptr, "DeleteNetworkUserId"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/glue/arp.cpp b/src/core/hle/service/glue/arp.cpp index ae5d428a1f..37a31a7347 100644 --- a/src/core/hle/service/glue/arp.cpp +++ b/src/core/hle/service/glue/arp.cpp @@ -167,11 +167,7 @@ public: : ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IRegistrar::Issue, "Issue"}, - FunctionInfo{1, &IRegistrar::SetApplicationLaunchProperty, "SetApplicationLaunchProperty"}, - FunctionInfo{2, &IRegistrar::SetApplicationControlProperty, "SetApplicationControlProperty"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -236,6 +232,11 @@ 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{}; diff --git a/src/core/hle/service/glue/ectx.cpp b/src/core/hle/service/glue/ectx.cpp index 8c8e51f687..7ec8df68a0 100644 --- a/src/core/hle/service/glue/ectx.cpp +++ b/src/core/hle/service/glue/ectx.cpp @@ -15,9 +15,7 @@ public: IContextRegistrar(Core::System& system_) : ServiceFramework{system_, "IContextRegistrar"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IContextRegistrar::Complete, "Complete"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IContextRegistrar() override = default; @@ -39,6 +37,10 @@ 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"} { diff --git a/src/core/hle/service/glue/notif.cpp b/src/core/hle/service/glue/notif.cpp index dbfd9f35a5..7eb2ec85b2 100644 --- a/src/core/hle/service/glue/notif.cpp +++ b/src/core/hle/service/glue/notif.cpp @@ -184,9 +184,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~INotificationSystemEventAccessor() { @@ -201,6 +199,9 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"} + ); KernelHelpers::ServiceContext service_context; Kernel::KEvent* notification_event; }; diff --git a/src/core/hle/service/grc/grc.cpp b/src/core/hle/service/grc/grc.cpp index 4de9a7261d..0624ccddab 100644 --- a/src/core/hle/service/grc/grc.cpp +++ b/src/core/hle/service/grc/grc.cpp @@ -16,14 +16,15 @@ class GRC final : public ServiceFramework { public: explicit GRC(Core::System& system_) : ServiceFramework{system_, "grc:c"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{1, nullptr, "OpenContinuousRecorder"}, FunctionInfo{2, nullptr, "OpenGameMovieTrimmer"}, FunctionInfo{3, nullptr, "OpenOffscreenRecorder"}, FunctionInfo{101, nullptr, "CreateMovieMaker"}, FunctionInfo{9903, nullptr, "SetOffscreenRecordingMarker"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -31,12 +32,13 @@ class GRC_D final : public ServiceFramework { public: explicit GRC_D(Core::System& system_) : ServiceFramework{system_, "grc:d"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{1, nullptr, "Initialize"}, FunctionInfo{2, nullptr, "Transfer"}, FunctionInfo{3, nullptr, "Cmd3"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index e20ef43c87..859a153dd3 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -24,10 +24,11 @@ public: explicit IHidTemporaryServer(Core::System& system_) : ServiceFramework{system_, "hid:tmp"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetConsoleSixAxisSensorCalibrationValues"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } ~IHidTemporaryServer() override = default; }; @@ -37,14 +38,15 @@ public: explicit AHID_CD(Core::System& system_) : ServiceFramework{system_, "ahid:cd"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "AcquireDevice"}, FunctionInfo{1, nullptr, "ReleaseDevice"}, FunctionInfo{2, nullptr, "GetCtrlSession"}, FunctionInfo{3, nullptr, "GetReadSession"}, FunctionInfo{4, nullptr, "GetWriteSession"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } ~AHID_CD() override = default; }; @@ -54,8 +56,7 @@ public: explicit AHID_HDR(Core::System& system_) : ServiceFramework{system_, "ahid:hdr"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetDeviceEntries"}, FunctionInfo{1, nullptr, "GetDeviceList"}, FunctionInfo{2, nullptr, "GetDeviceParameters"}, @@ -63,6 +64,8 @@ public: FunctionInfo{4, nullptr, "DetachDevice"}, FunctionInfo{5, nullptr, "SetDeviceFilter"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } ~AHID_HDR() override = default; }; diff --git a/src/core/hle/service/jit/jit.cpp b/src/core/hle/service/jit/jit.cpp index 814c5b1334..f201e82d1e 100644 --- a/src/core/hle/service/jit/jit.cpp +++ b/src/core/hle/service/jit/jit.cpp @@ -48,12 +48,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&IJitEnvironment::GenerateCode>, "GenerateCode"}, - FunctionInfo{1, C<&IJitEnvironment::Control>, "Control"}, - FunctionInfo{1000, C<&IJitEnvironment::LoadPlugin>, "LoadPlugin"}, - FunctionInfo{1001, C<&IJitEnvironment::GetCodeAddress>, "GetCodeAddress"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IJitEnvironment() { @@ -245,6 +240,13 @@ private: return in; } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&IJitEnvironment::GenerateCode>, "GenerateCode"}, + FunctionInfo{1, C<&IJitEnvironment::Control>, "Control"}, + FunctionInfo{1000, C<&IJitEnvironment::LoadPlugin>, "LoadPlugin"}, + FunctionInfo{1001, C<&IJitEnvironment::GetCodeAddress>, "GetCodeAddress"} + ); + Kernel::KScopedAutoObject process; CodeMemory user_rx; CodeMemory user_ro; @@ -258,9 +260,7 @@ public: explicit JITU(Core::System& system_) : ServiceFramework{system_, "jit:u"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&JITU::CreateJitEnvironment>, "CreateJitEnvironment"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -289,6 +289,10 @@ private: } private: + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&JITU::CreateJitEnvironment>, "CreateJitEnvironment"} + ); + std::mt19937_64 generate_random{}; }; diff --git a/src/core/hle/service/lbl/lbl.cpp b/src/core/hle/service/lbl/lbl.cpp index e75b963a06..560360a495 100644 --- a/src/core/hle/service/lbl/lbl.cpp +++ b/src/core/hle/service/lbl/lbl.cpp @@ -21,38 +21,7 @@ public: explicit LBL(Core::System& system_) : ServiceFramework{system_, "lbl"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &LBL::SaveCurrentSetting, "SaveCurrentSetting"}, - FunctionInfo{1, &LBL::LoadCurrentSetting, "LoadCurrentSetting"}, - FunctionInfo{2, &LBL::SetCurrentBrightnessSetting, "SetCurrentBrightnessSetting"}, - FunctionInfo{3, &LBL::GetCurrentBrightnessSetting, "GetCurrentBrightnessSetting"}, - FunctionInfo{4, nullptr, "ApplyCurrentBrightnessSettingToBacklight"}, - FunctionInfo{5, nullptr, "GetBrightnessSettingAppliedToBacklight"}, - FunctionInfo{6, &LBL::SwitchBacklightOn, "SwitchBacklightOn"}, - FunctionInfo{7, &LBL::SwitchBacklightOff, "SwitchBacklightOff"}, - FunctionInfo{8, &LBL::GetBacklightSwitchStatus, "GetBacklightSwitchStatus"}, - FunctionInfo{9, &LBL::EnableDimming, "EnableDimming"}, - FunctionInfo{10, &LBL::DisableDimming, "DisableDimming"}, - FunctionInfo{11, &LBL::IsDimmingEnabled, "IsDimmingEnabled"}, - FunctionInfo{12, &LBL::EnableAutoBrightnessControl, "EnableAutoBrightnessControl"}, - FunctionInfo{13, &LBL::DisableAutoBrightnessControl, "DisableAutoBrightnessControl"}, - FunctionInfo{14, &LBL::IsAutoBrightnessControlEnabled, "IsAutoBrightnessControlEnabled"}, - FunctionInfo{15, &LBL::SetAmbientLightSensorValue, "SetAmbientLightSensorValue"}, - FunctionInfo{16, &LBL::GetAmbientLightSensorValue, "GetAmbientLightSensorValue"}, - FunctionInfo{17, &LBL::SetBrightnessReflectionDelayLevel, "SetBrightnessReflectionDelayLevel"}, - FunctionInfo{18, &LBL::GetBrightnessReflectionDelayLevel, "GetBrightnessReflectionDelayLevel"}, - FunctionInfo{19, &LBL::SetCurrentBrightnessMapping, "SetCurrentBrightnessMapping"}, - FunctionInfo{20, &LBL::GetCurrentBrightnessMapping, "GetCurrentBrightnessMapping"}, - FunctionInfo{21, &LBL::SetCurrentAmbientLightSensorMapping, "SetCurrentAmbientLightSensorMapping"}, - FunctionInfo{22, &LBL::GetCurrentAmbientLightSensorMapping, "GetCurrentAmbientLightSensorMapping"}, - FunctionInfo{23, &LBL::IsAmbientLightSensorAvailable, "IsAmbientLightSensorAvailable"}, - FunctionInfo{24, &LBL::SetCurrentBrightnessSettingForVrMode, "SetCurrentBrightnessSettingForVrMode"}, - FunctionInfo{25, &LBL::GetCurrentBrightnessSettingForVrMode, "GetCurrentBrightnessSettingForVrMode"}, - FunctionInfo{26, &LBL::EnableVrMode, "EnableVrMode"}, - FunctionInfo{27, &LBL::DisableVrMode, "DisableVrMode"}, - FunctionInfo{28, &LBL::IsVrModeEnabled, "IsVrModeEnabled"}, - FunctionInfo{29, &LBL::IsAutoBrightnessControlSupported, "IsAutoBrightnessControlSupported"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -333,6 +302,38 @@ private: rb.Push(auto_brightness_supported); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &LBL::SaveCurrentSetting, "SaveCurrentSetting"}, + FunctionInfo{1, &LBL::LoadCurrentSetting, "LoadCurrentSetting"}, + FunctionInfo{2, &LBL::SetCurrentBrightnessSetting, "SetCurrentBrightnessSetting"}, + FunctionInfo{3, &LBL::GetCurrentBrightnessSetting, "GetCurrentBrightnessSetting"}, + FunctionInfo{4, nullptr, "ApplyCurrentBrightnessSettingToBacklight"}, + FunctionInfo{5, nullptr, "GetBrightnessSettingAppliedToBacklight"}, + FunctionInfo{6, &LBL::SwitchBacklightOn, "SwitchBacklightOn"}, + FunctionInfo{7, &LBL::SwitchBacklightOff, "SwitchBacklightOff"}, + FunctionInfo{8, &LBL::GetBacklightSwitchStatus, "GetBacklightSwitchStatus"}, + FunctionInfo{9, &LBL::EnableDimming, "EnableDimming"}, + FunctionInfo{10, &LBL::DisableDimming, "DisableDimming"}, + FunctionInfo{11, &LBL::IsDimmingEnabled, "IsDimmingEnabled"}, + FunctionInfo{12, &LBL::EnableAutoBrightnessControl, "EnableAutoBrightnessControl"}, + FunctionInfo{13, &LBL::DisableAutoBrightnessControl, "DisableAutoBrightnessControl"}, + FunctionInfo{14, &LBL::IsAutoBrightnessControlEnabled, "IsAutoBrightnessControlEnabled"}, + FunctionInfo{15, &LBL::SetAmbientLightSensorValue, "SetAmbientLightSensorValue"}, + FunctionInfo{16, &LBL::GetAmbientLightSensorValue, "GetAmbientLightSensorValue"}, + FunctionInfo{17, &LBL::SetBrightnessReflectionDelayLevel, "SetBrightnessReflectionDelayLevel"}, + FunctionInfo{18, &LBL::GetBrightnessReflectionDelayLevel, "GetBrightnessReflectionDelayLevel"}, + FunctionInfo{19, &LBL::SetCurrentBrightnessMapping, "SetCurrentBrightnessMapping"}, + FunctionInfo{20, &LBL::GetCurrentBrightnessMapping, "GetCurrentBrightnessMapping"}, + FunctionInfo{21, &LBL::SetCurrentAmbientLightSensorMapping, "SetCurrentAmbientLightSensorMapping"}, + FunctionInfo{22, &LBL::GetCurrentAmbientLightSensorMapping, "GetCurrentAmbientLightSensorMapping"}, + FunctionInfo{23, &LBL::IsAmbientLightSensorAvailable, "IsAmbientLightSensorAvailable"}, + FunctionInfo{24, &LBL::SetCurrentBrightnessSettingForVrMode, "SetCurrentBrightnessSettingForVrMode"}, + FunctionInfo{25, &LBL::GetCurrentBrightnessSettingForVrMode, "GetCurrentBrightnessSettingForVrMode"}, + FunctionInfo{26, &LBL::EnableVrMode, "EnableVrMode"}, + FunctionInfo{27, &LBL::DisableVrMode, "DisableVrMode"}, + FunctionInfo{28, &LBL::IsVrModeEnabled, "IsVrModeEnabled"}, + FunctionInfo{29, &LBL::IsAutoBrightnessControlSupported, "IsAutoBrightnessControlSupported"} + ); bool vr_mode_enabled = false; float current_brightness = 1.0f; float ambient_light_value = 0.0f; diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index 9bfe42bd3a..2b3c85ec56 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp @@ -19,13 +19,10 @@ namespace Service::LDN { class IClientProcessMonitor final : public ServiceFramework { public: - explicit IClientProcessMonitor(Core::System& system_) - : ServiceFramework{system_, "IClientProcessMonitor"} {} + explicit IClientProcessMonitor(Core::System& system_) : ServiceFramework{system_, "IClientProcessMonitor"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IClientProcessMonitor::RegisterClient>, "RegisterClient"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IClientProcessMonitor() override = default; private: @@ -33,6 +30,10 @@ private: LOG_WARNING(Service_LDN, "(STUBBED) called"); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IClientProcessMonitor::RegisterClient>, "RegisterClient"} + ); }; class IMonitorServiceCreator final : public ServiceFramework { @@ -40,11 +41,8 @@ public: explicit IMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:m"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&IMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"} - ); + return HandlerTableGenerateWithFind(key, functions); } - private: Result CreateMonitorService(OutInterface out_interface) { LOG_DEBUG(Service_LDN, "called"); @@ -52,6 +50,10 @@ private: *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&IMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"} + ); }; class ISystemServiceCreator final : public ServiceFramework { @@ -59,12 +61,8 @@ public: explicit ISystemServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:s"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&ISystemServiceCreator::CreateSystemLocalCommunicationService>, "CreateSystemLocalCommunicationService"}, - FunctionInfo{1, C<&ISystemServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } - private: Result CreateSystemLocalCommunicationService( OutInterface out_interface) { @@ -81,6 +79,11 @@ private: *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&ISystemServiceCreator::CreateSystemLocalCommunicationService>, "CreateSystemLocalCommunicationService"}, + FunctionInfo{1, C<&ISystemServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+ + ); }; class IUserServiceCreator final : public ServiceFramework { @@ -88,12 +91,8 @@ public: explicit IUserServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:u"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IUserServiceCreator::CreateUserLocalCommunicationService>, "CreateUserLocalCommunicationService"}, - FunctionInfo{1, D<&IUserServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } - private: Result CreateUserLocalCommunicationService( OutInterface out_interface) { @@ -110,20 +109,20 @@ private: *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IUserServiceCreator::CreateUserLocalCommunicationService>, "CreateUserLocalCommunicationService"}, + FunctionInfo{1, D<&IUserServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+ + ); }; class ISfServiceCreator final : public ServiceFramework { public: - explicit ISfServiceCreator(Core::System& system_, bool is_system_, const char* name_) - : ServiceFramework{system_, name_}, is_system{is_system_} {} + explicit ISfServiceCreator(Core::System& system_, bool is_system_, const char* name_) : ServiceFramework{system_, name_}, is_system{is_system_} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&ISfServiceCreator::CreateNetworkService>, "CreateNetworkService"}, - FunctionInfo{8, C<&ISfServiceCreator::CreateNetworkServiceMonitor>, "CreateNetworkServiceMonitor"} - ); + return HandlerTableGenerateWithFind(key, functions); } - private: Result CreateNetworkService(OutInterface out_interface, u32 input, u64 reserved_input) { @@ -142,6 +141,10 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&ISfServiceCreator::CreateNetworkService>, "CreateNetworkService"}, + FunctionInfo{8, C<&ISfServiceCreator::CreateNetworkServiceMonitor>, "CreateNetworkServiceMonitor"} + ); bool is_system{}; }; @@ -150,11 +153,8 @@ public: explicit ISfMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "lp2p:m"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&ISfMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"} - ); + return HandlerTableGenerateWithFind(key, functions); } - private: Result CreateMonitorService(OutInterface out_interface, u64 reserved_input) { LOG_INFO(Service_LDN, "called, reserved_input={}", reserved_input); @@ -162,6 +162,10 @@ private: *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&ISfMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"} + ); }; void LoopProcess(Core::System& system) { @@ -171,12 +175,9 @@ void LoopProcess(Core::System& system) { server_manager->RegisterNamedService("ldn:s", std::make_shared(system)); server_manager->RegisterNamedService("ldn:u", std::make_shared(system)); - server_manager->RegisterNamedService( - "lp2p:app", std::make_shared(system, false, "lp2p:app")); - server_manager->RegisterNamedService( - "lp2p:sys", std::make_shared(system, true, "lp2p:sys")); - server_manager->RegisterNamedService("lp2p:m", - std::make_shared(system)); + server_manager->RegisterNamedService("lp2p:app", std::make_shared(system, false, "lp2p:app")); + server_manager->RegisterNamedService("lp2p:sys", std::make_shared(system, true, "lp2p:sys")); + server_manager->RegisterNamedService("lp2p:m", std::make_shared(system)); ServerManager::RunServer(std::move(server_manager)); } diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 15b2c36bca..900df0c00e 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp @@ -14,12 +14,13 @@ class DebugMonitor final : public ServiceFramework { public: explicit DebugMonitor(Core::System& system_) : ServiceFramework{system_, "ldr:dmnt"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetProgramArgument"}, FunctionInfo{1, nullptr, "FlushArguments"}, FunctionInfo{2, nullptr, "GetProcessModuleInfo"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -27,14 +28,15 @@ class ProcessManager final : public ServiceFramework { public: explicit ProcessManager(Core::System& system_) : ServiceFramework{system_, "ldr:pm"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "CreateProcess"}, FunctionInfo{1, nullptr, "GetProgramInfo"}, FunctionInfo{2, nullptr, "PinProgram"}, FunctionInfo{3, nullptr, "UnpinProgram"}, FunctionInfo{4, nullptr, "SetEnabledProgramVerification"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -42,11 +44,12 @@ class Shell final : public ServiceFramework { public: explicit Shell(Core::System& system_) : ServiceFramework{system_, "ldr:shel"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetProgramArgument"}, FunctionInfo{1, nullptr, "FlushArguments"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp index 235782ada8..d6f51ed308 100644 --- a/src/core/hle/service/lm/lm.cpp +++ b/src/core/hle/service/lm/lm.cpp @@ -340,9 +340,7 @@ public: explicit LM(Core::System& system_) : ServiceFramework{system_, "lm"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &LM::OpenLogger, "OpenLogger"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -353,21 +351,26 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &LM::OpenLogger, "OpenLogger"} + ); }; class LM_GET final : public ServiceFramework { public: - explicit LM_GET(Core::System& system_) - : ServiceFramework{system_, "lm:get"} - { - static const FunctionInfo functions[] = { - FunctionInfo{0, nullptr, "StartLogging"}, - FunctionInfo{1, nullptr, "StopLogging"}, - FunctionInfo{2, nullptr, "GetLog"}, - FunctionInfo{100, nullptr, "CreateDevNotificationReceiver"} - }; - RegisterHandlers(functions); + explicit LM_GET(Core::System& system_) : ServiceFramework{system_, "lm:get"} {} + + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "StartLogging"}, + FunctionInfo{1, nullptr, "StopLogging"}, + FunctionInfo{2, nullptr, "GetLog"}, + FunctionInfo{100, nullptr, "CreateDevNotificationReceiver"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/mig/mig.cpp b/src/core/hle/service/mig/mig.cpp index 99f54c136c..a17a404311 100644 --- a/src/core/hle/service/mig/mig.cpp +++ b/src/core/hle/service/mig/mig.cpp @@ -17,45 +17,47 @@ public: explicit MIG_USR(Core::System& system_) : ServiceFramework{system_, "mig:usr"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "Unknown0"}, //19.0.0+ - FunctionInfo{1, nullptr, "Unknown1"}, //20.0.0+ - FunctionInfo{2, nullptr, "Unknown2"}, //20.0.0+ - FunctionInfo{10, nullptr, "TryGetLastMigrationInfo"}, - FunctionInfo{11, nullptr, "Unknown11"}, //20.0.0+ - FunctionInfo{100, nullptr, "CreateUserMigrationServer"}, //7.0.0+ - FunctionInfo{101, nullptr, "ResumeUserMigrationServer"}, //7.0.0+ - FunctionInfo{200, nullptr, "CreateUserMigrationClient"}, //7.0.0+ - FunctionInfo{201, nullptr, "ResumeUserMigrationClient"}, //7.0.0+ - FunctionInfo{1001, nullptr, "GetSaveDataMigrationPolicyInfoAsync"}, //8.0.0-20.5.0 - FunctionInfo{1010, nullptr, "TryGetLastSaveDataMigrationInfo"}, //7.0.0+ - FunctionInfo{1100, nullptr, "CreateSaveDataMigrationServer"}, //7.0.0-19.0.1 - FunctionInfo{1101, nullptr, "ResumeSaveDataMigrationServer"}, //7.0.0+ - FunctionInfo{1110, nullptr, "Unknown1101"}, //17.0.0+ - FunctionInfo{1200, nullptr, "CreateSaveDataMigrationClient"}, //7.0.0+ - FunctionInfo{1201, nullptr, "ResumeSaveDataMigrationClient"}, //7.0.0+ - FunctionInfo{2001, nullptr, "Unknown2001"}, //20.0.0+ - FunctionInfo{2010, nullptr, "Unknown2010"}, //20.0.0+ - FunctionInfo{2100, nullptr, "Unknown2100"}, //20.0.0+ - FunctionInfo{2110, nullptr, "Unknown2110"}, //20.0.0+ - FunctionInfo{2200, nullptr, "Unknown2200"}, //20.0.0+ - FunctionInfo{2210, nullptr, "Unknown2210"}, //20.0.0+ - FunctionInfo{2220, nullptr, "Unknown2220"}, //20.0.0+ - FunctionInfo{2230, nullptr, "Unknown2230"}, //20.0.0+ - FunctionInfo{2231, nullptr, "Unknown2231"}, //20.0.0+ - FunctionInfo{2232, nullptr, "Unknown2232"}, //20.0.0+ - FunctionInfo{2233, nullptr, "Unknown2233"}, //20.0.0+ - FunctionInfo{2234, nullptr, "Unknown2234"}, //20.0.0+ - FunctionInfo{2250, nullptr, "Unknown2250"}, //20.0.0+ - FunctionInfo{2260, nullptr, "Unknown2260"}, //20.0.0+ - FunctionInfo{2270, nullptr, "Unknown2270"}, //20.0.0+ - FunctionInfo{2280, nullptr, "Unknown2280"}, //20.0.0+ - FunctionInfo{2300, nullptr, "Unknown2300"}, //20.0.0+ - FunctionInfo{2310, nullptr, "Unknown2310"}, //20.0.0+ - FunctionInfo{2400, nullptr, "Unknown2400"}, //20.0.0+ - FunctionInfo{2420, nullptr, "Unknown2420"} //20.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "Unknown0"}, //19.0.0+ + FunctionInfo{1, nullptr, "Unknown1"}, //20.0.0+ + FunctionInfo{2, nullptr, "Unknown2"}, //20.0.0+ + FunctionInfo{10, nullptr, "TryGetLastMigrationInfo"}, + FunctionInfo{11, nullptr, "Unknown11"}, //20.0.0+ + FunctionInfo{100, nullptr, "CreateUserMigrationServer"}, //7.0.0+ + FunctionInfo{101, nullptr, "ResumeUserMigrationServer"}, //7.0.0+ + FunctionInfo{200, nullptr, "CreateUserMigrationClient"}, //7.0.0+ + FunctionInfo{201, nullptr, "ResumeUserMigrationClient"}, //7.0.0+ + FunctionInfo{1001, nullptr, "GetSaveDataMigrationPolicyInfoAsync"}, //8.0.0-20.5.0 + FunctionInfo{1010, nullptr, "TryGetLastSaveDataMigrationInfo"}, //7.0.0+ + FunctionInfo{1100, nullptr, "CreateSaveDataMigrationServer"}, //7.0.0-19.0.1 + FunctionInfo{1101, nullptr, "ResumeSaveDataMigrationServer"}, //7.0.0+ + FunctionInfo{1110, nullptr, "Unknown1101"}, //17.0.0+ + FunctionInfo{1200, nullptr, "CreateSaveDataMigrationClient"}, //7.0.0+ + FunctionInfo{1201, nullptr, "ResumeSaveDataMigrationClient"}, //7.0.0+ + FunctionInfo{2001, nullptr, "Unknown2001"}, //20.0.0+ + FunctionInfo{2010, nullptr, "Unknown2010"}, //20.0.0+ + FunctionInfo{2100, nullptr, "Unknown2100"}, //20.0.0+ + FunctionInfo{2110, nullptr, "Unknown2110"}, //20.0.0+ + FunctionInfo{2200, nullptr, "Unknown2200"}, //20.0.0+ + FunctionInfo{2210, nullptr, "Unknown2210"}, //20.0.0+ + FunctionInfo{2220, nullptr, "Unknown2220"}, //20.0.0+ + FunctionInfo{2230, nullptr, "Unknown2230"}, //20.0.0+ + FunctionInfo{2231, nullptr, "Unknown2231"}, //20.0.0+ + FunctionInfo{2232, nullptr, "Unknown2232"}, //20.0.0+ + FunctionInfo{2233, nullptr, "Unknown2233"}, //20.0.0+ + FunctionInfo{2234, nullptr, "Unknown2234"}, //20.0.0+ + FunctionInfo{2250, nullptr, "Unknown2250"}, //20.0.0+ + FunctionInfo{2260, nullptr, "Unknown2260"}, //20.0.0+ + FunctionInfo{2270, nullptr, "Unknown2270"}, //20.0.0+ + FunctionInfo{2280, nullptr, "Unknown2280"}, //20.0.0+ + FunctionInfo{2300, nullptr, "Unknown2300"}, //20.0.0+ + FunctionInfo{2310, nullptr, "Unknown2310"}, //20.0.0+ + FunctionInfo{2400, nullptr, "Unknown2400"}, //20.0.0+ + FunctionInfo{2420, nullptr, "Unknown2420"} //20.0.0+ + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/mii/mii.cpp b/src/core/hle/service/mii/mii.cpp index 9a7d8645fc..aea67a971a 100644 --- a/src/core/hle/service/mii/mii.cpp +++ b/src/core/hle/service/mii/mii.cpp @@ -33,35 +33,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IDatabaseService::IsUpdated>, "IsUpdated"}, - FunctionInfo{1, D<&IDatabaseService::IsFullDatabase>, "IsFullDatabase"}, - FunctionInfo{2, D<&IDatabaseService::GetCount>, "GetCount"}, - FunctionInfo{3, D<&IDatabaseService::Get>, "Get"}, - FunctionInfo{4, D<&IDatabaseService::Get1>, "Get1"}, - FunctionInfo{5, D<&IDatabaseService::UpdateLatest>, "UpdateLatest"}, - FunctionInfo{6, D<&IDatabaseService::BuildRandom>, "BuildRandom"}, - FunctionInfo{7, D<&IDatabaseService::BuildDefault>, "BuildDefault"}, - FunctionInfo{8, D<&IDatabaseService::Get2>, "Get2"}, - FunctionInfo{9, D<&IDatabaseService::Get3>, "Get3"}, - FunctionInfo{10, D<&IDatabaseService::UpdateLatest1>, "UpdateLatest1"}, - FunctionInfo{11, D<&IDatabaseService::FindIndex>, "FindIndex"}, - FunctionInfo{12, D<&IDatabaseService::Move>, "Move"}, - FunctionInfo{13, D<&IDatabaseService::AddOrReplace>, "AddOrReplace"}, - FunctionInfo{14, D<&IDatabaseService::Delete>, "Delete"}, - FunctionInfo{15, D<&IDatabaseService::DestroyFile>, "DestroyFile"}, - FunctionInfo{16, D<&IDatabaseService::DeleteFile>, "DeleteFile"}, - FunctionInfo{17, D<&IDatabaseService::Format>, "Format"}, - FunctionInfo{18, nullptr, "Import"}, - FunctionInfo{19, nullptr, "Export"}, - FunctionInfo{20, D<&IDatabaseService::IsBrokenDatabaseWithClearFlag>, "IsBrokenDatabaseWithClearFlag"}, - FunctionInfo{21, D<&IDatabaseService::GetIndex>, "GetIndex"}, - FunctionInfo{22, D<&IDatabaseService::SetInterfaceVersion>, "SetInterfaceVersion"}, - FunctionInfo{23, D<&IDatabaseService::Convert>, "Convert"}, - FunctionInfo{24, D<&IDatabaseService::ConvertCoreDataToCharInfo>, "ConvertCoreDataToCharInfo"}, - FunctionInfo{25, D<&IDatabaseService::ConvertCharInfoToCoreData>, "ConvertCharInfoToCoreData"}, - FunctionInfo{26, D<&IDatabaseService::Append>, "Append"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -285,10 +257,39 @@ private: R_RETURN(manager->Append(metadata, char_info)); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IDatabaseService::IsUpdated>, "IsUpdated"}, + FunctionInfo{1, D<&IDatabaseService::IsFullDatabase>, "IsFullDatabase"}, + FunctionInfo{2, D<&IDatabaseService::GetCount>, "GetCount"}, + FunctionInfo{3, D<&IDatabaseService::Get>, "Get"}, + FunctionInfo{4, D<&IDatabaseService::Get1>, "Get1"}, + FunctionInfo{5, D<&IDatabaseService::UpdateLatest>, "UpdateLatest"}, + FunctionInfo{6, D<&IDatabaseService::BuildRandom>, "BuildRandom"}, + FunctionInfo{7, D<&IDatabaseService::BuildDefault>, "BuildDefault"}, + FunctionInfo{8, D<&IDatabaseService::Get2>, "Get2"}, + FunctionInfo{9, D<&IDatabaseService::Get3>, "Get3"}, + FunctionInfo{10, D<&IDatabaseService::UpdateLatest1>, "UpdateLatest1"}, + FunctionInfo{11, D<&IDatabaseService::FindIndex>, "FindIndex"}, + FunctionInfo{12, D<&IDatabaseService::Move>, "Move"}, + FunctionInfo{13, D<&IDatabaseService::AddOrReplace>, "AddOrReplace"}, + FunctionInfo{14, D<&IDatabaseService::Delete>, "Delete"}, + FunctionInfo{15, D<&IDatabaseService::DestroyFile>, "DestroyFile"}, + FunctionInfo{16, D<&IDatabaseService::DeleteFile>, "DeleteFile"}, + FunctionInfo{17, D<&IDatabaseService::Format>, "Format"}, + FunctionInfo{18, nullptr, "Import"}, + FunctionInfo{19, nullptr, "Export"}, + FunctionInfo{20, D<&IDatabaseService::IsBrokenDatabaseWithClearFlag>, "IsBrokenDatabaseWithClearFlag"}, + FunctionInfo{21, D<&IDatabaseService::GetIndex>, "GetIndex"}, + FunctionInfo{22, D<&IDatabaseService::SetInterfaceVersion>, "SetInterfaceVersion"}, + FunctionInfo{23, D<&IDatabaseService::Convert>, "Convert"}, + FunctionInfo{24, D<&IDatabaseService::ConvertCoreDataToCharInfo>, "ConvertCoreDataToCharInfo"}, + FunctionInfo{25, D<&IDatabaseService::ConvertCharInfoToCoreData>, "ConvertCharInfoToCoreData"}, + FunctionInfo{26, D<&IDatabaseService::Append>, "Append"} + ); + std::shared_ptr manager = nullptr; DatabaseSessionMetadata metadata{}; bool is_system{}; - std::shared_ptr m_set_sys; }; @@ -324,22 +325,7 @@ public: explicit IImageDatabaseService(Core::System& system_) : ServiceFramework{system_, "miiimg"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IImageDatabaseService::Initialize>, "Initialize"}, - FunctionInfo{10, nullptr, "Reload"}, - FunctionInfo{11, D<&IImageDatabaseService::GetCount>, "GetCount"}, - FunctionInfo{12, nullptr, "IsEmpty"}, - FunctionInfo{13, nullptr, "IsFull"}, - FunctionInfo{14, nullptr, "GetAttribute"}, - FunctionInfo{15, nullptr, "LoadImage"}, - FunctionInfo{16, nullptr, "AddOrUpdateImage"}, - FunctionInfo{17, nullptr, "DeleteImages"}, - FunctionInfo{100, nullptr, "DeleteFile"}, - FunctionInfo{101, nullptr, "DestroyFile"}, - FunctionInfo{102, nullptr, "ImportFile"}, - FunctionInfo{103, nullptr, "ExportFile"}, - FunctionInfo{104, nullptr, "ForceInitialize"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -356,6 +342,23 @@ private: R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IImageDatabaseService::Initialize>, "Initialize"}, + FunctionInfo{10, nullptr, "Reload"}, + FunctionInfo{11, D<&IImageDatabaseService::GetCount>, "GetCount"}, + FunctionInfo{12, nullptr, "IsEmpty"}, + FunctionInfo{13, nullptr, "IsFull"}, + FunctionInfo{14, nullptr, "GetAttribute"}, + FunctionInfo{15, nullptr, "LoadImage"}, + FunctionInfo{16, nullptr, "AddOrUpdateImage"}, + FunctionInfo{17, nullptr, "DeleteImages"}, + FunctionInfo{100, nullptr, "DeleteFile"}, + FunctionInfo{101, nullptr, "DestroyFile"}, + FunctionInfo{102, nullptr, "ImportFile"}, + FunctionInfo{103, nullptr, "ExportFile"}, + FunctionInfo{104, nullptr, "ForceInitialize"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/mm/mm_u.cpp b/src/core/hle/service/mm/mm_u.cpp index 108cbf87a7..a28a6450fb 100644 --- a/src/core/hle/service/mm/mm_u.cpp +++ b/src/core/hle/service/mm/mm_u.cpp @@ -52,16 +52,7 @@ public: explicit MM_U(Core::System& system_) : ServiceFramework{system_, "mm:u"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &MM_U::InitializeOld, "InitializeOld"}, - FunctionInfo{1, &MM_U::FinalizeOld, "FinalizeOld"}, - FunctionInfo{2, &MM_U::SetAndWaitOld, "SetAndWaitOld"}, - FunctionInfo{3, &MM_U::GetOld, "GetOld"}, - FunctionInfo{4, &MM_U::Initialize, "Initialize"}, - FunctionInfo{5, &MM_U::Finalize, "Finalize"}, - FunctionInfo{6, &MM_U::SetAndWait, "SetAndWait"}, - FunctionInfo{7, &MM_U::Get, "Get"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -210,6 +201,16 @@ private: rb.Push(0); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &MM_U::InitializeOld, "InitializeOld"}, + FunctionInfo{1, &MM_U::FinalizeOld, "FinalizeOld"}, + FunctionInfo{2, &MM_U::SetAndWaitOld, "SetAndWaitOld"}, + FunctionInfo{3, &MM_U::GetOld, "GetOld"}, + FunctionInfo{4, &MM_U::Initialize, "Initialize"}, + FunctionInfo{5, &MM_U::Finalize, "Finalize"}, + FunctionInfo{6, &MM_U::SetAndWait, "SetAndWait"}, + FunctionInfo{7, &MM_U::Get, "Get"} + ); std::vector sessions; u32 request_id{1}; }; diff --git a/src/core/hle/service/mnpp/mnpp.cpp b/src/core/hle/service/mnpp/mnpp.cpp index 5417de6de9..86389ca829 100644 --- a/src/core/hle/service/mnpp/mnpp.cpp +++ b/src/core/hle/service/mnpp/mnpp.cpp @@ -17,10 +17,7 @@ public: explicit MNPP_APP(Core::System& system_) : ServiceFramework{system_, "mnpp:app"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &MNPP_APP::Cmd0, "Cmd0"}, - FunctionInfo{1, &MNPP_APP::Cmd1, "Cmd1"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -37,14 +34,18 @@ private: IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &MNPP_APP::Cmd0, "Cmd0"}, + FunctionInfo{1, &MNPP_APP::Cmd1, "Cmd1"} + ); }; class MNPP_SYS final : public ServiceFramework { public: explicit MNPP_SYS(Core::System& system_) : ServiceFramework{system_, "mnpp:sys"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "Cmd0"}, FunctionInfo{10, nullptr, "Cmd10"}, FunctionInfo{100, nullptr, "Cmd100"}, @@ -52,6 +53,8 @@ public: FunctionInfo{300, nullptr, "Cmd300"}, FunctionInfo{400, nullptr, "Cmd400"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -59,14 +62,15 @@ class MNPP_WEB final : public ServiceFramework { public: explicit MNPP_WEB(Core::System& system_) : ServiceFramework{system_, "mnpp:web"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "Cmd0"}, FunctionInfo{1, nullptr, "Cmd1"}, FunctionInfo{10, nullptr, "Cmd10"}, FunctionInfo{20, nullptr, "Cmd20"}, FunctionInfo{100, nullptr, "Cmd100"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/ncm/ncm.cpp b/src/core/hle/service/ncm/ncm.cpp index b58845b53b..2ad7738b16 100644 --- a/src/core/hle/service/ncm/ncm.cpp +++ b/src/core/hle/service/ncm/ncm.cpp @@ -26,8 +26,7 @@ public: explicit ILocationResolver(Core::System& system_, FileSys::StorageId id) : ServiceFramework{system_, "ILocationResolver"}, storage{id} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ResolveProgramPath"}, FunctionInfo{1, nullptr, "RedirectProgramPath"}, FunctionInfo{2, nullptr, "ResolveApplicationControlPath"}, @@ -49,6 +48,8 @@ public: FunctionInfo{18, nullptr, "RedirectApplicationProgramPathForDebug"}, FunctionInfo{19, nullptr, "EraseProgramRedirectionForDebug"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } private: @@ -60,8 +61,7 @@ public: explicit IRegisteredLocationResolver(Core::System& system_) : ServiceFramework{system_, "IRegisteredLocationResolver"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ResolveProgramPath"}, FunctionInfo{1, nullptr, "RegisterProgramPath"}, FunctionInfo{2, nullptr, "UnregisterProgramPath"}, @@ -73,6 +73,8 @@ public: FunctionInfo{8, nullptr, "Refresh"}, FunctionInfo{9, nullptr, "RefreshExcluding"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -81,14 +83,15 @@ public: explicit IAddOnContentLocationResolver(Core::System& system_) : ServiceFramework{system_, "IAddOnContentLocationResolver"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ResolveAddOnContentPath"}, FunctionInfo{1, nullptr, "RegisterAddOnContentStorage"}, FunctionInfo{2, nullptr, "UnregisterAllAddOnContentPath"}, FunctionInfo{3, nullptr, "RefreshApplicationAddOnContent"}, FunctionInfo{4, nullptr, "UnregisterApplicationAddOnContent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -98,14 +101,7 @@ public: : ServiceFramework{system_, "IContentStorage"}, storage{id} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IContentStorage::GeneratePlaceHolderId, "GeneratePlaceHolderId"}, - FunctionInfo{1, &IContentStorage::CreatePlaceHolder, "CreatePlaceHolder"}, - FunctionInfo{2, &IContentStorage::DeletePlaceHolder, "DeletePlaceHolder"}, - FunctionInfo{4, &IContentStorage::WritePlaceHolder, "WritePlaceHolder"}, - FunctionInfo{5, &IContentStorage::Register, "Register"}, - FunctionInfo{6, &IContentStorage::Delete, "Delete"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -244,6 +240,14 @@ private: rb.Push(succeeded ? ResultSuccess : ResultUnknown); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IContentStorage::GeneratePlaceHolderId, "GeneratePlaceHolderId"}, + FunctionInfo{1, &IContentStorage::CreatePlaceHolder, "CreatePlaceHolder"}, + FunctionInfo{2, &IContentStorage::DeletePlaceHolder, "DeletePlaceHolder"}, + FunctionInfo{4, &IContentStorage::WritePlaceHolder, "WritePlaceHolder"}, + FunctionInfo{5, &IContentStorage::Register, "Register"}, + FunctionInfo{6, &IContentStorage::Delete, "Delete"} + ); FileSys::StorageId storage; }; @@ -253,12 +257,7 @@ public: : ServiceFramework{system_, "IContentMetaDatabase"}, storage{id} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IContentMetaDatabase::Set, "Set"}, - FunctionInfo{2, &IContentMetaDatabase::Remove, "Remove"}, - FunctionInfo{8, &IContentMetaDatabase::Has, "Has"}, - FunctionInfo{15, &IContentMetaDatabase::Commit, "Commit"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -346,6 +345,12 @@ private: rb.Push(ResultSuccess); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IContentMetaDatabase::Set, "Set"}, + FunctionInfo{2, &IContentMetaDatabase::Remove, "Remove"}, + FunctionInfo{8, &IContentMetaDatabase::Has, "Has"}, + FunctionInfo{15, &IContentMetaDatabase::Commit, "Commit"} + ); FileSys::StorageId storage; std::vector entries; }; @@ -354,13 +359,14 @@ class LR final : public ServiceFramework { public: explicit LR(Core::System& system_) : ServiceFramework{system_, "lr"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "OpenLocationResolver"}, FunctionInfo{1, nullptr, "OpenRegisteredLocationResolver"}, FunctionInfo{2, nullptr, "RefreshLocationResolver"}, FunctionInfo{3, nullptr, "OpenAddOnContentLocationResolver"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -369,24 +375,7 @@ public: explicit NCM(Core::System& system_) : ServiceFramework{system_, "ncm"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "CreateContentStorage"}, - FunctionInfo{1, nullptr, "CreateContentMetaDatabase"}, - FunctionInfo{2, nullptr, "VerifyContentStorage"}, - FunctionInfo{3, nullptr, "VerifyContentMetaDatabase"}, - FunctionInfo{4, &NCM::OpenContentStorage, "OpenContentStorage"}, - FunctionInfo{5, &NCM::OpenContentMetaDatabase, "OpenContentMetaDatabase"}, - FunctionInfo{6, nullptr, "CloseContentStorageForcibly"}, - FunctionInfo{7, nullptr, "CloseContentMetaDatabaseForcibly"}, - FunctionInfo{8, nullptr, "CleanupContentMetaDatabase"}, - FunctionInfo{9, nullptr, "ActivateContentStorage"}, - FunctionInfo{10, nullptr, "InactivateContentStorage"}, - FunctionInfo{11, nullptr, "ActivateContentMetaDatabase"}, - FunctionInfo{12, nullptr, "InactivateContentMetaDatabase"}, - FunctionInfo{13, nullptr, "InvalidateRightsIdCache"}, - FunctionInfo{14, nullptr, "GetMemoryReport"}, - FunctionInfo{15, nullptr, "ActivateFsContentStorage"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -411,6 +400,25 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system, storage_id); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "CreateContentStorage"}, + FunctionInfo{1, nullptr, "CreateContentMetaDatabase"}, + FunctionInfo{2, nullptr, "VerifyContentStorage"}, + FunctionInfo{3, nullptr, "VerifyContentMetaDatabase"}, + FunctionInfo{4, &NCM::OpenContentStorage, "OpenContentStorage"}, + FunctionInfo{5, &NCM::OpenContentMetaDatabase, "OpenContentMetaDatabase"}, + FunctionInfo{6, nullptr, "CloseContentStorageForcibly"}, + FunctionInfo{7, nullptr, "CloseContentMetaDatabaseForcibly"}, + FunctionInfo{8, nullptr, "CleanupContentMetaDatabase"}, + FunctionInfo{9, nullptr, "ActivateContentStorage"}, + FunctionInfo{10, nullptr, "InactivateContentStorage"}, + FunctionInfo{11, nullptr, "ActivateContentMetaDatabase"}, + FunctionInfo{12, nullptr, "InactivateContentMetaDatabase"}, + FunctionInfo{13, nullptr, "InvalidateRightsIdCache"}, + FunctionInfo{14, nullptr, "GetMemoryReport"}, + FunctionInfo{15, nullptr, "ActivateFsContentStorage"} + ); }; class NCM_V final : public ServiceFramework { diff --git a/src/core/hle/service/nfc/nfc.cpp b/src/core/hle/service/nfc/nfc.cpp index b53cde23ba..d28fd7890a 100644 --- a/src/core/hle/service/nfc/nfc.cpp +++ b/src/core/hle/service/nfc/nfc.cpp @@ -112,12 +112,13 @@ class IAm final : public ServiceFramework { public: explicit IAm(Core::System& system_) : ServiceFramework{system_, "NFC::IAm"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "Initialize"}, + FunctionInfo{1, nullptr, "Finalize"}, + FunctionInfo{2, nullptr, "NotifyForegroundApplet"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "Initialize"}, - FunctionInfo{1, nullptr, "Finalize"}, - FunctionInfo{2, nullptr, "NotifyForegroundApplet"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -126,9 +127,7 @@ public: explicit NFC_AM(Core::System& system_) : ServiceFramework{system_, "nfc:am"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NFC_AM::CreateAmNfcInterface, "CreateAmNfcInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -139,6 +138,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NFC_AM::CreateAmNfcInterface, "CreateAmNfcInterface"} + ); }; class NFC_MF_U final : public ServiceFramework { @@ -146,9 +149,7 @@ public: explicit NFC_MF_U(Core::System& system_) : ServiceFramework{system_, "nfc:mf:u"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NFC_MF_U::CreateUserNfcInterface, "CreateUserNfcInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -159,6 +160,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NFC_MF_U::CreateUserNfcInterface, "CreateUserNfcInterface"} + ); }; class NFC_U final : public ServiceFramework { @@ -166,9 +171,7 @@ public: explicit NFC_U(Core::System& system_) : ServiceFramework{system_, "nfc:user"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NFC_U::CreateUserNfcInterface, "CreateUserNfcInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -179,6 +182,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NFC_U::CreateUserNfcInterface, "CreateUserNfcInterface"} + ); }; class NFC_SYS final : public ServiceFramework { @@ -186,9 +193,7 @@ public: explicit NFC_SYS(Core::System& system_) : ServiceFramework{system_, "nfc:sys"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NFC_SYS::CreateSystemNfcInterface, "CreateSystemNfcInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -199,6 +204,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NFC_SYS::CreateSystemNfcInterface, "CreateSystemNfcInterface"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index 815efb6522..fe7cbe583a 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp @@ -138,9 +138,7 @@ public: explicit IUserManager(Core::System& system_) : ServiceFramework{system_, "nfp:user"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IUserManager::CreateUserInterface, "CreateUserInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -151,6 +149,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IUserManager::CreateUserInterface, "CreateUserInterface"} + ); }; class ISystemManager final : public ServiceFramework { @@ -158,9 +160,7 @@ public: explicit ISystemManager(Core::System& system_) : ServiceFramework{system_, "nfp:sys"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &ISystemManager::CreateSystemInterface, "CreateSystemInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -171,6 +171,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &ISystemManager::CreateSystemInterface, "CreateSystemInterface"} + ); }; class IDebugManager final : public ServiceFramework { @@ -178,9 +182,7 @@ public: explicit IDebugManager(Core::System& system_) : ServiceFramework{system_, "nfp:dbg"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IDebugManager::CreateDebugInterface, "CreateDebugInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -191,6 +193,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IDebugManager::CreateDebugInterface, "CreateDebugInterface"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/ngc/ngc.cpp b/src/core/hle/service/ngc/ngc.cpp index 41662f5a12..c1cd7b932f 100644 --- a/src/core/hle/service/ngc/ngc.cpp +++ b/src/core/hle/service/ngc/ngc.cpp @@ -24,10 +24,7 @@ public: explicit IService(Core::System& system_) : ServiceFramework{system_, "ngct:u"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IService::Match, "Match"}, - FunctionInfo{1, &IService::Filter, "Filter"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -59,6 +56,11 @@ private: IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IService::Match, "Match"}, + FunctionInfo{1, &IService::Filter, "Filter"} + ); }; class NgcServiceImpl final : public ServiceFramework { @@ -66,14 +68,7 @@ public: explicit NgcServiceImpl(Core::System& system_) : ServiceFramework(system_, "ngc:u") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NgcServiceImpl::GetContentVersion, "GetContentVersion"}, - FunctionInfo{1, &NgcServiceImpl::Check, "Check"}, - FunctionInfo{2, &NgcServiceImpl::Mask, "Mask"}, - FunctionInfo{3, &NgcServiceImpl::Reload, "Reload"}, - FunctionInfo{4, &NgcServiceImpl::Check, "Check2"}, - FunctionInfo{5, &NgcServiceImpl::Mask, "Mask2"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -146,14 +141,22 @@ private: IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NgcServiceImpl::GetContentVersion, "GetContentVersion"}, + FunctionInfo{1, &NgcServiceImpl::Check, "Check"}, + FunctionInfo{2, &NgcServiceImpl::Mask, "Mask"}, + FunctionInfo{3, &NgcServiceImpl::Reload, "Reload"}, + FunctionInfo{4, &NgcServiceImpl::Check, "Check2"}, + FunctionInfo{5, &NgcServiceImpl::Mask, "Mask2"} + ); }; class IServiceWithManagementApi final : public ServiceFramework { public: explicit IServiceWithManagementApi(Core::System& system_) : ServiceFramework(system_, "ngct:s") {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "Match"}, FunctionInfo{1, nullptr, "Filter"}, FunctionInfo{100, nullptr, "ConfigureAutoUpdateSetting"}, @@ -164,6 +167,8 @@ public: FunctionInfo{120, nullptr, "CalculateContentFingerprint"}, FunctionInfo{130, nullptr, "TryEnableTemporalPassThrough"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -177,16 +182,7 @@ public: explicit IUserShimScopedObject(Core::System& system_) : ServiceFramework(system_, "IUserShimScopedObject") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{450, nullptr, "InitializeForSaveData"}, - FunctionInfo{451, nullptr, "FinalizeForSaveData"}, - FunctionInfo{452, D<&IUserShimScopedObject::OpenSaveData>, "OpenSaveData"}, - FunctionInfo{453, nullptr, "CloseSaveData"}, - FunctionInfo{454, D<&IUserShimScopedObject::ReadSaveSlot>, "ReadSaveSlot"}, - FunctionInfo{455, D<&IUserShimScopedObject::WriteSaveSlot>, "WriteSaveSlot"}, - FunctionInfo{456, nullptr, "FlushSaveSlot"}, - FunctionInfo{457, nullptr, "CommitSaveData"} - ); + return HandlerTableGenerateWithFind(key, functions); } Result OpenSaveData(Account::Uid unk0, Out unk1) { @@ -204,6 +200,17 @@ public: // to implement R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{450, nullptr, "InitializeForSaveData"}, + FunctionInfo{451, nullptr, "FinalizeForSaveData"}, + FunctionInfo{452, D<&IUserShimScopedObject::OpenSaveData>, "OpenSaveData"}, + FunctionInfo{453, nullptr, "CloseSaveData"}, + FunctionInfo{454, D<&IUserShimScopedObject::ReadSaveSlot>, "ReadSaveSlot"}, + FunctionInfo{455, D<&IUserShimScopedObject::WriteSaveSlot>, "WriteSaveSlot"}, + FunctionInfo{456, nullptr, "FlushSaveSlot"}, + FunctionInfo{457, nullptr, "CommitSaveData"} + ); }; class IUserService final : public ServiceFramework { @@ -211,15 +218,17 @@ public: explicit IUserService(Core::System& system_) : ServiceFramework(system_, "stpl:u") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IUserService::Cmd0>, "Cmd0"} - ); + return HandlerTableGenerateWithFind(key, functions); } Result Cmd0(u32 unk0, OutInterface out_interface) { LOG_WARNING(Service_NGC, "stubbed"); *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IUserService::Cmd0>, "Cmd0"} + ); }; class ISystemShimScopedObject final : public ServiceFramework { @@ -227,17 +236,7 @@ public: explicit ISystemShimScopedObject(Core::System& system_) : ServiceFramework(system_, "ISystemShimScopedObject") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{106, nullptr, "Cmd106"}, - FunctionInfo{107, nullptr, "Cmd107"}, - FunctionInfo{108, D<&ISystemShimScopedObject::Cmd108>, "Cmd108"}, - FunctionInfo{207, nullptr, "Cmd207"}, - FunctionInfo{208, D<&ISystemShimScopedObject::Cmd208>, "Cmd208"}, - FunctionInfo{209, nullptr, "Cmd209"}, - FunctionInfo{210, nullptr, "Cmd210"}, - FunctionInfo{211, nullptr, "Cmd211"}, - FunctionInfo{212, nullptr, "Cmd212"} - ); + return HandlerTableGenerateWithFind(key, functions); } Result Cmd108() { @@ -249,6 +248,18 @@ public: LOG_WARNING(Service_NGC, "stubbed"); R_THROW(IPC::ResultNotSupported); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{106, nullptr, "Cmd106"}, + FunctionInfo{107, nullptr, "Cmd107"}, + FunctionInfo{108, D<&ISystemShimScopedObject::Cmd108>, "Cmd108"}, + FunctionInfo{207, nullptr, "Cmd207"}, + FunctionInfo{208, D<&ISystemShimScopedObject::Cmd208>, "Cmd208"}, + FunctionInfo{209, nullptr, "Cmd209"}, + FunctionInfo{210, nullptr, "Cmd210"}, + FunctionInfo{211, nullptr, "Cmd211"}, + FunctionInfo{212, nullptr, "Cmd212"} + ); }; class ISystemService final : public ServiceFramework { @@ -256,15 +267,17 @@ public: explicit ISystemService(Core::System& system_) : ServiceFramework(system_, "stpl:sys") {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&ISystemService::Cmd0>, "Cmd0"} - ); + return HandlerTableGenerateWithFind(key, functions); } Result Cmd0(OutInterface out_interface) { LOG_WARNING(Service_NGC, "stubbed"); *out_interface = std::make_shared(system); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&ISystemService::Cmd0>, "Cmd0"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index b0197c8a93..907f86caea 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp @@ -30,14 +30,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&IShopServiceAsync::Cancel>, "Cancel"}, - FunctionInfo{1, D<&IShopServiceAsync::GetSize>, "GetSize"}, - FunctionInfo{2, D<&IShopServiceAsync::Read>, "Read"}, - FunctionInfo{3, D<&IShopServiceAsync::GetErrorCode>, "GetErrorCode"}, - FunctionInfo{4, D<&IShopServiceAsync::Request>, "Request"}, - FunctionInfo{5, D<&IShopServiceAsync::Prepare>, "Prepare"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IShopServiceAsync() override { @@ -50,15 +43,6 @@ public: } private: - KernelHelpers::ServiceContext service_context; - Kernel::KEvent* completion_event; - - std::jthread worker; - std::atomic error_code{0}; - - std::mutex data_mutex; - std::vector download_data; - void CancelImpl() { worker.request_stop(); if (worker.joinable()) { @@ -134,6 +118,21 @@ private: } R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&IShopServiceAsync::Cancel>, "Cancel"}, + FunctionInfo{1, D<&IShopServiceAsync::GetSize>, "GetSize"}, + FunctionInfo{2, D<&IShopServiceAsync::Read>, "Read"}, + FunctionInfo{3, D<&IShopServiceAsync::GetErrorCode>, "GetErrorCode"}, + FunctionInfo{4, D<&IShopServiceAsync::Request>, "Request"}, + FunctionInfo{5, D<&IShopServiceAsync::Prepare>, "Prepare"} + ); + KernelHelpers::ServiceContext service_context; + Kernel::KEvent* completion_event; + std::jthread worker; + std::atomic error_code{0}; + std::mutex data_mutex; + std::vector download_data; }; class IShopServiceAccessor final : public ServiceFramework { @@ -142,9 +141,7 @@ public: : ServiceFramework{system_, "IShopServiceAccessor"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IShopServiceAccessor::CreateAsyncInterface, "CreateAsyncInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -156,6 +153,10 @@ private: rb.PushCopyObjects(ctx, async_interface->GetEvent()); rb.PushIpcInterface(ctx, std::move(async_interface)); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IShopServiceAccessor::CreateAsyncInterface, "CreateAsyncInterface"} + ); }; class IShopServiceAccessServer final : public ServiceFramework { @@ -164,9 +165,7 @@ public: : ServiceFramework{system_, "IShopServiceAccessServer"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IShopServiceAccessServer::CreateAccessorInterface, "CreateAccessorInterface"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -176,238 +175,243 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IShopServiceAccessServer::CreateAccessorInterface, "CreateAccessorInterface"} + ); }; class NIM final : public ServiceFramework { public: explicit NIM(Core::System& system_) : ServiceFramework{system_, "nim"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "CreateSystemUpdateTask"}, + FunctionInfo{1, nullptr, "DestroySystemUpdateTask"}, + FunctionInfo{2, nullptr, "ListSystemUpdateTask"}, + FunctionInfo{3, nullptr, "RequestSystemUpdateTaskRun"}, + FunctionInfo{4, nullptr, "GetSystemUpdateTaskInfo"}, + FunctionInfo{5, nullptr, "CommitSystemUpdateTask"}, + FunctionInfo{6, nullptr, "CreateNetworkInstallTask"}, + FunctionInfo{7, nullptr, "DestroyNetworkInstallTask"}, + FunctionInfo{8, nullptr, "ListNetworkInstallTask"}, + FunctionInfo{9, nullptr, "RequestNetworkInstallTaskRun"}, + FunctionInfo{10, nullptr, "GetNetworkInstallTaskInfo"}, + FunctionInfo{11, nullptr, "CommitNetworkInstallTask"}, + FunctionInfo{12, nullptr, "RequestLatestSystemUpdateMeta"}, + FunctionInfo{14, nullptr, "ListApplicationNetworkInstallTask"}, + FunctionInfo{15, nullptr, "ListNetworkInstallTaskContentMeta"}, + FunctionInfo{16, nullptr, "RequestLatestVersion"}, + FunctionInfo{17, nullptr, "SetNetworkInstallTaskAttribute"}, + FunctionInfo{18, nullptr, "AddNetworkInstallTaskContentMeta"}, + FunctionInfo{19, nullptr, "GetDownloadedSystemDataPath"}, + FunctionInfo{20, nullptr, "CalculateNetworkInstallTaskRequiredSize"}, + FunctionInfo{21, nullptr, "IsExFatDriverIncluded"}, + FunctionInfo{22, nullptr, "GetBackgroundDownloadStressTaskInfo"}, + FunctionInfo{23, nullptr, "RequestDeviceAuthenticationToken"}, + FunctionInfo{24, nullptr, "RequestGameCardRegistrationStatus"}, + FunctionInfo{25, nullptr, "RequestRegisterGameCard"}, + FunctionInfo{26, nullptr, "RequestRegisterNotificationToken"}, + FunctionInfo{27, nullptr, "RequestDownloadTaskList"}, + FunctionInfo{28, nullptr, "RequestApplicationControl"}, + FunctionInfo{29, nullptr, "RequestLatestApplicationControl"}, + FunctionInfo{30, nullptr, "RequestVersionList"}, + FunctionInfo{31, nullptr, "CreateApplyDeltaTask"}, + FunctionInfo{32, nullptr, "DestroyApplyDeltaTask"}, + FunctionInfo{33, nullptr, "ListApplicationApplyDeltaTask"}, + FunctionInfo{34, nullptr, "RequestApplyDeltaTaskRun"}, + FunctionInfo{35, nullptr, "GetApplyDeltaTaskInfo"}, + FunctionInfo{36, nullptr, "ListApplyDeltaTask"}, + FunctionInfo{37, nullptr, "CommitApplyDeltaTask"}, + FunctionInfo{38, nullptr, "CalculateApplyDeltaTaskRequiredSize"}, + FunctionInfo{39, nullptr, "PrepareShutdown"}, + FunctionInfo{40, nullptr, "ListApplyDeltaTask"}, + FunctionInfo{41, nullptr, "ClearNotEnoughSpaceStateOfApplyDeltaTask"}, + FunctionInfo{42, nullptr, "CreateApplyDeltaTaskFromDownloadTask"}, + FunctionInfo{43, nullptr, "GetBackgroundApplyDeltaStressTaskInfo"}, + FunctionInfo{44, nullptr, "GetApplyDeltaTaskRequiredStorage"}, + FunctionInfo{45, nullptr, "CalculateNetworkInstallTaskContentsSize"}, + FunctionInfo{46, nullptr, "PrepareShutdownForSystemUpdate"}, + FunctionInfo{47, nullptr, "FindMaxRequiredApplicationVersionOfTask"}, + FunctionInfo{48, nullptr, "CommitNetworkInstallTaskPartially"}, + FunctionInfo{49, nullptr, "ListNetworkInstallTaskCommittedContentMeta"}, + FunctionInfo{50, nullptr, "ListNetworkInstallTaskNotCommittedContentMeta"}, + FunctionInfo{51, nullptr, "FindMaxRequiredSystemVersionOfTask"}, + FunctionInfo{52, nullptr, "GetNetworkInstallTaskErrorContext"}, + FunctionInfo{53, nullptr, "CreateLocalCommunicationReceiveApplicationTask"}, + FunctionInfo{54, nullptr, "DestroyLocalCommunicationReceiveApplicationTask"}, + FunctionInfo{55, nullptr, "ListLocalCommunicationReceiveApplicationTask"}, + FunctionInfo{56, nullptr, "RequestLocalCommunicationReceiveApplicationTaskRun"}, + FunctionInfo{57, nullptr, "GetLocalCommunicationReceiveApplicationTaskInfo"}, + FunctionInfo{58, nullptr, "CommitLocalCommunicationReceiveApplicationTask"}, + FunctionInfo{59, nullptr, "ListLocalCommunicationReceiveApplicationTaskContentMeta"}, + FunctionInfo{60, nullptr, "CreateLocalCommunicationSendApplicationTask"}, + FunctionInfo{61, nullptr, "RequestLocalCommunicationSendApplicationTaskRun"}, + FunctionInfo{62, nullptr, "GetLocalCommunicationReceiveApplicationTaskErrorContext"}, + FunctionInfo{63, nullptr, "GetLocalCommunicationSendApplicationTaskInfo"}, + FunctionInfo{64, nullptr, "DestroyLocalCommunicationSendApplicationTask"}, + FunctionInfo{65, nullptr, "GetLocalCommunicationSendApplicationTaskErrorContext"}, + FunctionInfo{66, nullptr, "CalculateLocalCommunicationReceiveApplicationTaskRequiredSize"}, + FunctionInfo{67, nullptr, "ListApplicationLocalCommunicationReceiveApplicationTask"}, + FunctionInfo{68, nullptr, "ListApplicationLocalCommunicationSendApplicationTask"}, + FunctionInfo{69, nullptr, "CreateLocalCommunicationReceiveSystemUpdateTask"}, + FunctionInfo{70, nullptr, "DestroyLocalCommunicationReceiveSystemUpdateTask"}, + FunctionInfo{71, nullptr, "ListLocalCommunicationReceiveSystemUpdateTask"}, + FunctionInfo{72, nullptr, "RequestLocalCommunicationReceiveSystemUpdateTaskRun"}, + FunctionInfo{73, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskInfo"}, + FunctionInfo{74, nullptr, "CommitLocalCommunicationReceiveSystemUpdateTask"}, + FunctionInfo{75, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskErrorContext"}, + FunctionInfo{76, nullptr, "CreateLocalCommunicationSendSystemUpdateTask"}, + FunctionInfo{77, nullptr, "RequestLocalCommunicationSendSystemUpdateTaskRun"}, + FunctionInfo{78, nullptr, "GetLocalCommunicationSendSystemUpdateTaskInfo"}, + FunctionInfo{79, nullptr, "DestroyLocalCommunicationSendSystemUpdateTask"}, + FunctionInfo{80, nullptr, "GetLocalCommunicationSendSystemUpdateTaskErrorContext"}, + FunctionInfo{81, nullptr, "ListLocalCommunicationSendSystemUpdateTask"}, + FunctionInfo{82, nullptr, "GetReceivedSystemDataPath"}, + FunctionInfo{83, nullptr, "CalculateApplyDeltaTaskOccupiedSize"}, + FunctionInfo{84, nullptr, "ReloadErrorSimulation"}, + FunctionInfo{85, nullptr, "ListNetworkInstallTaskContentMetaFromInstallMeta"}, + FunctionInfo{86, nullptr, "ListNetworkInstallTaskOccupiedSize"}, + FunctionInfo{87, nullptr, "RequestQueryAvailableELicenses"}, + FunctionInfo{88, nullptr, "RequestAssignELicenses"}, + FunctionInfo{89, nullptr, "RequestExtendELicenses"}, + FunctionInfo{90, nullptr, "RequestSyncELicenses"}, + FunctionInfo{91, nullptr, "Unknown91"}, //6.0.0-14.1.2 + FunctionInfo{92, nullptr, "Unknown92"}, //21.0.0+ + FunctionInfo{93, nullptr, "RequestReportActiveELicenses"}, + FunctionInfo{94, nullptr, "RequestReportActiveELicensesPassively"}, + FunctionInfo{95, nullptr, "RequestRegisterDynamicRightsNotificationToken"}, + FunctionInfo{96, nullptr, "RequestAssignAllDeviceLinkedELicenses"}, + FunctionInfo{97, nullptr, "RequestRevokeAllELicenses"}, + FunctionInfo{98, nullptr, "RequestPrefetchForDynamicRights"}, + FunctionInfo{99, nullptr, "CreateNetworkInstallTask"}, + FunctionInfo{100, nullptr, "ListNetworkInstallTaskRightsIds"}, + FunctionInfo{101, nullptr, "RequestDownloadETickets"}, + FunctionInfo{102, nullptr, "RequestQueryDownloadableContents"}, + FunctionInfo{103, nullptr, "DeleteNetworkInstallTaskContentMeta"}, + FunctionInfo{104, nullptr, "RequestIssueEdgeTokenForDebug"}, + FunctionInfo{105, nullptr, "RequestQueryAvailableELicenses2"}, + FunctionInfo{106, nullptr, "RequestAssignELicenses2"}, + FunctionInfo{107, nullptr, "GetNetworkInstallTaskStateCounter"}, + FunctionInfo{108, nullptr, "InvalidateDynamicRightsNaIdTokenCacheForDebug"}, + FunctionInfo{109, nullptr, "ListNetworkInstallTaskPartialInstallContentMeta"}, + FunctionInfo{110, nullptr, "ListNetworkInstallTaskRightsIdsFromIndex"}, + FunctionInfo{111, nullptr, "AddNetworkInstallTaskContentMetaForUser"}, + FunctionInfo{112, nullptr, "RequestAssignELicensesAndDownloadETickets"}, + FunctionInfo{113, nullptr, "RequestQueryAvailableCommonELicenses"}, + FunctionInfo{114, nullptr, "SetNetworkInstallTaskExtendedAttribute"}, + FunctionInfo{115, nullptr, "GetNetworkInstallTaskExtendedAttribute"}, + FunctionInfo{116, nullptr, "GetAllocatorInfo"}, + FunctionInfo{117, nullptr, "RequestQueryDownloadableContentsByApplicationId"}, + FunctionInfo{118, nullptr, "MarkNoDownloadRightsErrorResolved"}, + FunctionInfo{119, nullptr, "GetApplyDeltaTaskAllAppliedContentMeta"}, + FunctionInfo{120, nullptr, "PrioritizeNetworkInstallTask"}, + FunctionInfo{121, nullptr, "RequestQueryAvailableCommonELicenses2"}, + FunctionInfo{122, nullptr, "RequestAssignCommonELicenses"}, + FunctionInfo{123, nullptr, "RequestAssignCommonELicenses2"}, + FunctionInfo{124, nullptr, "IsNetworkInstallTaskFrontOfQueue"}, + FunctionInfo{125, nullptr, "PrioritizeApplyDeltaTask"}, + FunctionInfo{126, nullptr, "RerouteDownloadingPatch"}, + FunctionInfo{127, nullptr, "UnmarkNoDownloadRightsErrorResolved"}, + FunctionInfo{128, nullptr, "RequestContentsSize"}, + FunctionInfo{129, nullptr, "RequestContentsAuthorizationToken"}, + FunctionInfo{130, nullptr, "RequestCdnVendorDiscovery"}, + FunctionInfo{131, nullptr, "RefreshDebugAvailability"}, + FunctionInfo{132, nullptr, "ClearResponseSimulationEntry"}, + FunctionInfo{133, nullptr, "RegisterResponseSimulationEntry"}, + FunctionInfo{134, nullptr, "GetProcessedCdnVendors"}, + FunctionInfo{135, nullptr, "RefreshRuntimeBehaviorsForDebug"}, + FunctionInfo{136, nullptr, "RequestOnlineSubscriptionFreeTrialAvailability"}, + FunctionInfo{137, nullptr, "GetNetworkInstallTaskContentMetaCount"}, + FunctionInfo{138, nullptr, "RequestRevokeELicenses"}, + FunctionInfo{139, nullptr, "EnableNetworkConnectionToUseApplicationCore"}, + FunctionInfo{140, nullptr, "DisableNetworkConnectionToUseApplicationCore"}, + FunctionInfo{141, nullptr, "IsNetworkConnectionEnabledToUseApplicationCore"}, + FunctionInfo{142, nullptr, "RequestCheckSafeSystemVersion"}, + FunctionInfo{143, nullptr, "RequestApplicationIcon"}, + FunctionInfo{144, nullptr, "RequestDownloadIdbeIconFile"}, + FunctionInfo{147, nullptr, "Unknown147"}, //18.0.0+ + FunctionInfo{148, nullptr, "Unknown148"}, //18.0.0+ + FunctionInfo{150, nullptr, "Unknown150"}, //19.0.0+ + FunctionInfo{151, nullptr, "Unknown151"}, //20.0.0+ + FunctionInfo{152, nullptr, "Unknown152"}, //20.0.0+ + FunctionInfo{153, nullptr, "Unknown153"}, //20.0.0+ + FunctionInfo{154, nullptr, "Unknown154"}, //20.0.0+ + FunctionInfo{155, nullptr, "Unknown155"}, //20.0.0+ + FunctionInfo{156, nullptr, "Unknown156"}, //20.0.0+ + FunctionInfo{157, nullptr, "Unknown157"}, //20.0.0+ + FunctionInfo{158, nullptr, "Unknown158"}, //20.0.0+ + FunctionInfo{159, nullptr, "Unknown159"}, //20.0.0+ + FunctionInfo{160, nullptr, "Unknown160"}, //20.0.0+ + FunctionInfo{161, nullptr, "Unknown161"}, //20.0.0+ + FunctionInfo{162, nullptr, "Unknown162"}, //20.0.0+ + FunctionInfo{163, nullptr, "Unknown163"}, //20.0.0+ + FunctionInfo{164, nullptr, "Unknown164"}, //20.0.0+ + FunctionInfo{165, nullptr, "Unknown165"}, //20.0.0+ + FunctionInfo{166, nullptr, "Unknown166"}, //20.0.0+ + FunctionInfo{167, nullptr, "Unknown167"}, //20.0.0+ + FunctionInfo{168, nullptr, "Unknown168"}, //20.0.0+ + FunctionInfo{169, nullptr, "Unknown169"}, //20.0.0+ + FunctionInfo{170, nullptr, "Unknown170"}, //20.0.0+ + FunctionInfo{171, nullptr, "Unknown171"}, //20.0.0+ + FunctionInfo{172, nullptr, "Unknown172"}, //20.0.0+ + FunctionInfo{173, nullptr, "Unknown173"}, //20.0.0+ + FunctionInfo{174, nullptr, "Unknown174"}, //20.0.0+ + FunctionInfo{175, nullptr, "Unknown175"}, //20.0.0+ + FunctionInfo{176, nullptr, "Unknown176"}, //20.0.0+ + FunctionInfo{177, nullptr, "Unknown177"}, //20.0.0+ + FunctionInfo{2000, nullptr, "Unknown2000"}, //20.0.0+ + FunctionInfo{2001, nullptr, "Unknown2001"}, //20.0.0+ + FunctionInfo{2002, nullptr, "Unknown2002"}, //20.0.0+ + FunctionInfo{2003, nullptr, "Unknown2003"}, //20.0.0+ + FunctionInfo{2004, nullptr, "Unknown2004"}, //20.0.0+ + FunctionInfo{2007, nullptr, "Unknown2007"}, //20.0.0+ + FunctionInfo{2011, nullptr, "Unknown2011"}, //20.0.0+ + FunctionInfo{2012, nullptr, "Unknown2012"}, //20.0.0+ + FunctionInfo{2013, nullptr, "Unknown2013"}, //20.0.0+ + FunctionInfo{2014, nullptr, "Unknown2014"}, //20.0.0+ + FunctionInfo{2015, nullptr, "Unknown2015"}, //20.0.0+ + FunctionInfo{2016, nullptr, "Unknown2016"}, //20.0.0+ + FunctionInfo{2017, nullptr, "Unknown2017"}, //20.0.0+ + FunctionInfo{2018, nullptr, "Unknown2018"}, //20.0.0+ + FunctionInfo{2019, nullptr, "Unknown2019"}, //20.0.0+ + FunctionInfo{2020, nullptr, "Unknown2020"}, //20.0.0+ + FunctionInfo{2021, nullptr, "Unknown2021"}, //20.0.0+ + FunctionInfo{2022, nullptr, "Unknown2022"}, //20.0.0+ + FunctionInfo{2023, nullptr, "Unknown2023"}, //20.0.0+ + FunctionInfo{2024, nullptr, "Unknown2024"}, //20.0.0+ + FunctionInfo{2025, nullptr, "Unknown2025"}, //20.0.0+ + FunctionInfo{2026, nullptr, "Unknown2026"}, //20.0.0+ + FunctionInfo{2027, nullptr, "Unknown2027"}, //20.0.0+ + FunctionInfo{2028, nullptr, "Unknown2028"}, //20.0.0+ + FunctionInfo{2029, nullptr, "Unknown2029"}, //20.0.0+ + FunctionInfo{2030, nullptr, "Unknown2030"}, //20.0.0+ + FunctionInfo{2031, nullptr, "Unknown2031"}, //20.0.0+ + FunctionInfo{2032, nullptr, "Unknown2032"}, //20.0.0+ + FunctionInfo{2033, nullptr, "Unknown2033"}, //20.0.0+ + FunctionInfo{2034, nullptr, "Unknown2034"}, //20.0.0+ + FunctionInfo{2035, nullptr, "Unknown2035"}, //20.0.0+ + FunctionInfo{2036, nullptr, "Unknown2036"}, //20.0.0+ + FunctionInfo{2037, nullptr, "Unknown2037"}, //20.0.0+ + FunctionInfo{2038, nullptr, "Unknown2038"}, //20.0.0+ + FunctionInfo{2039, nullptr, "Unknown2039"}, //20.0.0+ + FunctionInfo{2040, nullptr, "Unknown2040"}, //20.0.0+ + FunctionInfo{2041, nullptr, "Unknown2041"}, //20.0.0+ + FunctionInfo{2042, nullptr, "Unknown2042"}, //20.0.0+ + FunctionInfo{2043, nullptr, "Unknown2043"}, //20.0.0+ + FunctionInfo{2044, nullptr, "Unknown2044"}, //20.0.0+ + FunctionInfo{2045, nullptr, "Unknown2045"}, //20.0.0+ + FunctionInfo{2046, nullptr, "Unknown2046"}, //20.0.0+ + FunctionInfo{2047, nullptr, "Unknown2047"}, //20.0.0+ + FunctionInfo{2048, nullptr, "Unknown2048"}, //20.0.0+ + FunctionInfo{2049, nullptr, "Unknown2049"}, //20.0.0+ + FunctionInfo{2050, nullptr, "Unknown2050"}, //20.0.0+ + FunctionInfo{2051, nullptr, "Unknown2051"}, //20.0.0+ + FunctionInfo{3000, nullptr, "RequestLatestApplicationIcon"}, //17.0.0+ + FunctionInfo{3001, nullptr, "RequestDownloadIdbeLatestIconFile"} //17.0.0+ + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "CreateSystemUpdateTask"}, - FunctionInfo{1, nullptr, "DestroySystemUpdateTask"}, - FunctionInfo{2, nullptr, "ListSystemUpdateTask"}, - FunctionInfo{3, nullptr, "RequestSystemUpdateTaskRun"}, - FunctionInfo{4, nullptr, "GetSystemUpdateTaskInfo"}, - FunctionInfo{5, nullptr, "CommitSystemUpdateTask"}, - FunctionInfo{6, nullptr, "CreateNetworkInstallTask"}, - FunctionInfo{7, nullptr, "DestroyNetworkInstallTask"}, - FunctionInfo{8, nullptr, "ListNetworkInstallTask"}, - FunctionInfo{9, nullptr, "RequestNetworkInstallTaskRun"}, - FunctionInfo{10, nullptr, "GetNetworkInstallTaskInfo"}, - FunctionInfo{11, nullptr, "CommitNetworkInstallTask"}, - FunctionInfo{12, nullptr, "RequestLatestSystemUpdateMeta"}, - FunctionInfo{14, nullptr, "ListApplicationNetworkInstallTask"}, - FunctionInfo{15, nullptr, "ListNetworkInstallTaskContentMeta"}, - FunctionInfo{16, nullptr, "RequestLatestVersion"}, - FunctionInfo{17, nullptr, "SetNetworkInstallTaskAttribute"}, - FunctionInfo{18, nullptr, "AddNetworkInstallTaskContentMeta"}, - FunctionInfo{19, nullptr, "GetDownloadedSystemDataPath"}, - FunctionInfo{20, nullptr, "CalculateNetworkInstallTaskRequiredSize"}, - FunctionInfo{21, nullptr, "IsExFatDriverIncluded"}, - FunctionInfo{22, nullptr, "GetBackgroundDownloadStressTaskInfo"}, - FunctionInfo{23, nullptr, "RequestDeviceAuthenticationToken"}, - FunctionInfo{24, nullptr, "RequestGameCardRegistrationStatus"}, - FunctionInfo{25, nullptr, "RequestRegisterGameCard"}, - FunctionInfo{26, nullptr, "RequestRegisterNotificationToken"}, - FunctionInfo{27, nullptr, "RequestDownloadTaskList"}, - FunctionInfo{28, nullptr, "RequestApplicationControl"}, - FunctionInfo{29, nullptr, "RequestLatestApplicationControl"}, - FunctionInfo{30, nullptr, "RequestVersionList"}, - FunctionInfo{31, nullptr, "CreateApplyDeltaTask"}, - FunctionInfo{32, nullptr, "DestroyApplyDeltaTask"}, - FunctionInfo{33, nullptr, "ListApplicationApplyDeltaTask"}, - FunctionInfo{34, nullptr, "RequestApplyDeltaTaskRun"}, - FunctionInfo{35, nullptr, "GetApplyDeltaTaskInfo"}, - FunctionInfo{36, nullptr, "ListApplyDeltaTask"}, - FunctionInfo{37, nullptr, "CommitApplyDeltaTask"}, - FunctionInfo{38, nullptr, "CalculateApplyDeltaTaskRequiredSize"}, - FunctionInfo{39, nullptr, "PrepareShutdown"}, - FunctionInfo{40, nullptr, "ListApplyDeltaTask"}, - FunctionInfo{41, nullptr, "ClearNotEnoughSpaceStateOfApplyDeltaTask"}, - FunctionInfo{42, nullptr, "CreateApplyDeltaTaskFromDownloadTask"}, - FunctionInfo{43, nullptr, "GetBackgroundApplyDeltaStressTaskInfo"}, - FunctionInfo{44, nullptr, "GetApplyDeltaTaskRequiredStorage"}, - FunctionInfo{45, nullptr, "CalculateNetworkInstallTaskContentsSize"}, - FunctionInfo{46, nullptr, "PrepareShutdownForSystemUpdate"}, - FunctionInfo{47, nullptr, "FindMaxRequiredApplicationVersionOfTask"}, - FunctionInfo{48, nullptr, "CommitNetworkInstallTaskPartially"}, - FunctionInfo{49, nullptr, "ListNetworkInstallTaskCommittedContentMeta"}, - FunctionInfo{50, nullptr, "ListNetworkInstallTaskNotCommittedContentMeta"}, - FunctionInfo{51, nullptr, "FindMaxRequiredSystemVersionOfTask"}, - FunctionInfo{52, nullptr, "GetNetworkInstallTaskErrorContext"}, - FunctionInfo{53, nullptr, "CreateLocalCommunicationReceiveApplicationTask"}, - FunctionInfo{54, nullptr, "DestroyLocalCommunicationReceiveApplicationTask"}, - FunctionInfo{55, nullptr, "ListLocalCommunicationReceiveApplicationTask"}, - FunctionInfo{56, nullptr, "RequestLocalCommunicationReceiveApplicationTaskRun"}, - FunctionInfo{57, nullptr, "GetLocalCommunicationReceiveApplicationTaskInfo"}, - FunctionInfo{58, nullptr, "CommitLocalCommunicationReceiveApplicationTask"}, - FunctionInfo{59, nullptr, "ListLocalCommunicationReceiveApplicationTaskContentMeta"}, - FunctionInfo{60, nullptr, "CreateLocalCommunicationSendApplicationTask"}, - FunctionInfo{61, nullptr, "RequestLocalCommunicationSendApplicationTaskRun"}, - FunctionInfo{62, nullptr, "GetLocalCommunicationReceiveApplicationTaskErrorContext"}, - FunctionInfo{63, nullptr, "GetLocalCommunicationSendApplicationTaskInfo"}, - FunctionInfo{64, nullptr, "DestroyLocalCommunicationSendApplicationTask"}, - FunctionInfo{65, nullptr, "GetLocalCommunicationSendApplicationTaskErrorContext"}, - FunctionInfo{66, nullptr, "CalculateLocalCommunicationReceiveApplicationTaskRequiredSize"}, - FunctionInfo{67, nullptr, "ListApplicationLocalCommunicationReceiveApplicationTask"}, - FunctionInfo{68, nullptr, "ListApplicationLocalCommunicationSendApplicationTask"}, - FunctionInfo{69, nullptr, "CreateLocalCommunicationReceiveSystemUpdateTask"}, - FunctionInfo{70, nullptr, "DestroyLocalCommunicationReceiveSystemUpdateTask"}, - FunctionInfo{71, nullptr, "ListLocalCommunicationReceiveSystemUpdateTask"}, - FunctionInfo{72, nullptr, "RequestLocalCommunicationReceiveSystemUpdateTaskRun"}, - FunctionInfo{73, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskInfo"}, - FunctionInfo{74, nullptr, "CommitLocalCommunicationReceiveSystemUpdateTask"}, - FunctionInfo{75, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskErrorContext"}, - FunctionInfo{76, nullptr, "CreateLocalCommunicationSendSystemUpdateTask"}, - FunctionInfo{77, nullptr, "RequestLocalCommunicationSendSystemUpdateTaskRun"}, - FunctionInfo{78, nullptr, "GetLocalCommunicationSendSystemUpdateTaskInfo"}, - FunctionInfo{79, nullptr, "DestroyLocalCommunicationSendSystemUpdateTask"}, - FunctionInfo{80, nullptr, "GetLocalCommunicationSendSystemUpdateTaskErrorContext"}, - FunctionInfo{81, nullptr, "ListLocalCommunicationSendSystemUpdateTask"}, - FunctionInfo{82, nullptr, "GetReceivedSystemDataPath"}, - FunctionInfo{83, nullptr, "CalculateApplyDeltaTaskOccupiedSize"}, - FunctionInfo{84, nullptr, "ReloadErrorSimulation"}, - FunctionInfo{85, nullptr, "ListNetworkInstallTaskContentMetaFromInstallMeta"}, - FunctionInfo{86, nullptr, "ListNetworkInstallTaskOccupiedSize"}, - FunctionInfo{87, nullptr, "RequestQueryAvailableELicenses"}, - FunctionInfo{88, nullptr, "RequestAssignELicenses"}, - FunctionInfo{89, nullptr, "RequestExtendELicenses"}, - FunctionInfo{90, nullptr, "RequestSyncELicenses"}, - FunctionInfo{91, nullptr, "Unknown91"}, //6.0.0-14.1.2 - FunctionInfo{92, nullptr, "Unknown92"}, //21.0.0+ - FunctionInfo{93, nullptr, "RequestReportActiveELicenses"}, - FunctionInfo{94, nullptr, "RequestReportActiveELicensesPassively"}, - FunctionInfo{95, nullptr, "RequestRegisterDynamicRightsNotificationToken"}, - FunctionInfo{96, nullptr, "RequestAssignAllDeviceLinkedELicenses"}, - FunctionInfo{97, nullptr, "RequestRevokeAllELicenses"}, - FunctionInfo{98, nullptr, "RequestPrefetchForDynamicRights"}, - FunctionInfo{99, nullptr, "CreateNetworkInstallTask"}, - FunctionInfo{100, nullptr, "ListNetworkInstallTaskRightsIds"}, - FunctionInfo{101, nullptr, "RequestDownloadETickets"}, - FunctionInfo{102, nullptr, "RequestQueryDownloadableContents"}, - FunctionInfo{103, nullptr, "DeleteNetworkInstallTaskContentMeta"}, - FunctionInfo{104, nullptr, "RequestIssueEdgeTokenForDebug"}, - FunctionInfo{105, nullptr, "RequestQueryAvailableELicenses2"}, - FunctionInfo{106, nullptr, "RequestAssignELicenses2"}, - FunctionInfo{107, nullptr, "GetNetworkInstallTaskStateCounter"}, - FunctionInfo{108, nullptr, "InvalidateDynamicRightsNaIdTokenCacheForDebug"}, - FunctionInfo{109, nullptr, "ListNetworkInstallTaskPartialInstallContentMeta"}, - FunctionInfo{110, nullptr, "ListNetworkInstallTaskRightsIdsFromIndex"}, - FunctionInfo{111, nullptr, "AddNetworkInstallTaskContentMetaForUser"}, - FunctionInfo{112, nullptr, "RequestAssignELicensesAndDownloadETickets"}, - FunctionInfo{113, nullptr, "RequestQueryAvailableCommonELicenses"}, - FunctionInfo{114, nullptr, "SetNetworkInstallTaskExtendedAttribute"}, - FunctionInfo{115, nullptr, "GetNetworkInstallTaskExtendedAttribute"}, - FunctionInfo{116, nullptr, "GetAllocatorInfo"}, - FunctionInfo{117, nullptr, "RequestQueryDownloadableContentsByApplicationId"}, - FunctionInfo{118, nullptr, "MarkNoDownloadRightsErrorResolved"}, - FunctionInfo{119, nullptr, "GetApplyDeltaTaskAllAppliedContentMeta"}, - FunctionInfo{120, nullptr, "PrioritizeNetworkInstallTask"}, - FunctionInfo{121, nullptr, "RequestQueryAvailableCommonELicenses2"}, - FunctionInfo{122, nullptr, "RequestAssignCommonELicenses"}, - FunctionInfo{123, nullptr, "RequestAssignCommonELicenses2"}, - FunctionInfo{124, nullptr, "IsNetworkInstallTaskFrontOfQueue"}, - FunctionInfo{125, nullptr, "PrioritizeApplyDeltaTask"}, - FunctionInfo{126, nullptr, "RerouteDownloadingPatch"}, - FunctionInfo{127, nullptr, "UnmarkNoDownloadRightsErrorResolved"}, - FunctionInfo{128, nullptr, "RequestContentsSize"}, - FunctionInfo{129, nullptr, "RequestContentsAuthorizationToken"}, - FunctionInfo{130, nullptr, "RequestCdnVendorDiscovery"}, - FunctionInfo{131, nullptr, "RefreshDebugAvailability"}, - FunctionInfo{132, nullptr, "ClearResponseSimulationEntry"}, - FunctionInfo{133, nullptr, "RegisterResponseSimulationEntry"}, - FunctionInfo{134, nullptr, "GetProcessedCdnVendors"}, - FunctionInfo{135, nullptr, "RefreshRuntimeBehaviorsForDebug"}, - FunctionInfo{136, nullptr, "RequestOnlineSubscriptionFreeTrialAvailability"}, - FunctionInfo{137, nullptr, "GetNetworkInstallTaskContentMetaCount"}, - FunctionInfo{138, nullptr, "RequestRevokeELicenses"}, - FunctionInfo{139, nullptr, "EnableNetworkConnectionToUseApplicationCore"}, - FunctionInfo{140, nullptr, "DisableNetworkConnectionToUseApplicationCore"}, - FunctionInfo{141, nullptr, "IsNetworkConnectionEnabledToUseApplicationCore"}, - FunctionInfo{142, nullptr, "RequestCheckSafeSystemVersion"}, - FunctionInfo{143, nullptr, "RequestApplicationIcon"}, - FunctionInfo{144, nullptr, "RequestDownloadIdbeIconFile"}, - FunctionInfo{147, nullptr, "Unknown147"}, //18.0.0+ - FunctionInfo{148, nullptr, "Unknown148"}, //18.0.0+ - FunctionInfo{150, nullptr, "Unknown150"}, //19.0.0+ - FunctionInfo{151, nullptr, "Unknown151"}, //20.0.0+ - FunctionInfo{152, nullptr, "Unknown152"}, //20.0.0+ - FunctionInfo{153, nullptr, "Unknown153"}, //20.0.0+ - FunctionInfo{154, nullptr, "Unknown154"}, //20.0.0+ - FunctionInfo{155, nullptr, "Unknown155"}, //20.0.0+ - FunctionInfo{156, nullptr, "Unknown156"}, //20.0.0+ - FunctionInfo{157, nullptr, "Unknown157"}, //20.0.0+ - FunctionInfo{158, nullptr, "Unknown158"}, //20.0.0+ - FunctionInfo{159, nullptr, "Unknown159"}, //20.0.0+ - FunctionInfo{160, nullptr, "Unknown160"}, //20.0.0+ - FunctionInfo{161, nullptr, "Unknown161"}, //20.0.0+ - FunctionInfo{162, nullptr, "Unknown162"}, //20.0.0+ - FunctionInfo{163, nullptr, "Unknown163"}, //20.0.0+ - FunctionInfo{164, nullptr, "Unknown164"}, //20.0.0+ - FunctionInfo{165, nullptr, "Unknown165"}, //20.0.0+ - FunctionInfo{166, nullptr, "Unknown166"}, //20.0.0+ - FunctionInfo{167, nullptr, "Unknown167"}, //20.0.0+ - FunctionInfo{168, nullptr, "Unknown168"}, //20.0.0+ - FunctionInfo{169, nullptr, "Unknown169"}, //20.0.0+ - FunctionInfo{170, nullptr, "Unknown170"}, //20.0.0+ - FunctionInfo{171, nullptr, "Unknown171"}, //20.0.0+ - FunctionInfo{172, nullptr, "Unknown172"}, //20.0.0+ - FunctionInfo{173, nullptr, "Unknown173"}, //20.0.0+ - FunctionInfo{174, nullptr, "Unknown174"}, //20.0.0+ - FunctionInfo{175, nullptr, "Unknown175"}, //20.0.0+ - FunctionInfo{176, nullptr, "Unknown176"}, //20.0.0+ - FunctionInfo{177, nullptr, "Unknown177"}, //20.0.0+ - FunctionInfo{2000, nullptr, "Unknown2000"}, //20.0.0+ - FunctionInfo{2001, nullptr, "Unknown2001"}, //20.0.0+ - FunctionInfo{2002, nullptr, "Unknown2002"}, //20.0.0+ - FunctionInfo{2003, nullptr, "Unknown2003"}, //20.0.0+ - FunctionInfo{2004, nullptr, "Unknown2004"}, //20.0.0+ - FunctionInfo{2007, nullptr, "Unknown2007"}, //20.0.0+ - FunctionInfo{2011, nullptr, "Unknown2011"}, //20.0.0+ - FunctionInfo{2012, nullptr, "Unknown2012"}, //20.0.0+ - FunctionInfo{2013, nullptr, "Unknown2013"}, //20.0.0+ - FunctionInfo{2014, nullptr, "Unknown2014"}, //20.0.0+ - FunctionInfo{2015, nullptr, "Unknown2015"}, //20.0.0+ - FunctionInfo{2016, nullptr, "Unknown2016"}, //20.0.0+ - FunctionInfo{2017, nullptr, "Unknown2017"}, //20.0.0+ - FunctionInfo{2018, nullptr, "Unknown2018"}, //20.0.0+ - FunctionInfo{2019, nullptr, "Unknown2019"}, //20.0.0+ - FunctionInfo{2020, nullptr, "Unknown2020"}, //20.0.0+ - FunctionInfo{2021, nullptr, "Unknown2021"}, //20.0.0+ - FunctionInfo{2022, nullptr, "Unknown2022"}, //20.0.0+ - FunctionInfo{2023, nullptr, "Unknown2023"}, //20.0.0+ - FunctionInfo{2024, nullptr, "Unknown2024"}, //20.0.0+ - FunctionInfo{2025, nullptr, "Unknown2025"}, //20.0.0+ - FunctionInfo{2026, nullptr, "Unknown2026"}, //20.0.0+ - FunctionInfo{2027, nullptr, "Unknown2027"}, //20.0.0+ - FunctionInfo{2028, nullptr, "Unknown2028"}, //20.0.0+ - FunctionInfo{2029, nullptr, "Unknown2029"}, //20.0.0+ - FunctionInfo{2030, nullptr, "Unknown2030"}, //20.0.0+ - FunctionInfo{2031, nullptr, "Unknown2031"}, //20.0.0+ - FunctionInfo{2032, nullptr, "Unknown2032"}, //20.0.0+ - FunctionInfo{2033, nullptr, "Unknown2033"}, //20.0.0+ - FunctionInfo{2034, nullptr, "Unknown2034"}, //20.0.0+ - FunctionInfo{2035, nullptr, "Unknown2035"}, //20.0.0+ - FunctionInfo{2036, nullptr, "Unknown2036"}, //20.0.0+ - FunctionInfo{2037, nullptr, "Unknown2037"}, //20.0.0+ - FunctionInfo{2038, nullptr, "Unknown2038"}, //20.0.0+ - FunctionInfo{2039, nullptr, "Unknown2039"}, //20.0.0+ - FunctionInfo{2040, nullptr, "Unknown2040"}, //20.0.0+ - FunctionInfo{2041, nullptr, "Unknown2041"}, //20.0.0+ - FunctionInfo{2042, nullptr, "Unknown2042"}, //20.0.0+ - FunctionInfo{2043, nullptr, "Unknown2043"}, //20.0.0+ - FunctionInfo{2044, nullptr, "Unknown2044"}, //20.0.0+ - FunctionInfo{2045, nullptr, "Unknown2045"}, //20.0.0+ - FunctionInfo{2046, nullptr, "Unknown2046"}, //20.0.0+ - FunctionInfo{2047, nullptr, "Unknown2047"}, //20.0.0+ - FunctionInfo{2048, nullptr, "Unknown2048"}, //20.0.0+ - FunctionInfo{2049, nullptr, "Unknown2049"}, //20.0.0+ - FunctionInfo{2050, nullptr, "Unknown2050"}, //20.0.0+ - FunctionInfo{2051, nullptr, "Unknown2051"}, //20.0.0+ - FunctionInfo{3000, nullptr, "RequestLatestApplicationIcon"}, //17.0.0+ - FunctionInfo{3001, nullptr, "RequestDownloadIdbeLatestIconFile"} //17.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -416,14 +420,7 @@ public: explicit NIM_ECA(Core::System& system_) : ServiceFramework{system_, "nim:eca"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NIM_ECA::CreateServerInterface, "CreateServerInterface"}, - FunctionInfo{1, nullptr, "RefreshDebugAvailability"}, - FunctionInfo{2, nullptr, "ClearDebugResponse"}, - FunctionInfo{3, nullptr, "RegisterDebugResponse"}, - FunctionInfo{4, &NIM_ECA::IsLargeResourceAvailable, "IsLargeResourceAvailable"}, - FunctionInfo{5, &NIM_ECA::CreateServerInterface2, "CreateServerInterface2"} // 17.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -453,14 +450,22 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NIM_ECA::CreateServerInterface, "CreateServerInterface"}, + FunctionInfo{1, nullptr, "RefreshDebugAvailability"}, + FunctionInfo{2, nullptr, "ClearDebugResponse"}, + FunctionInfo{3, nullptr, "RegisterDebugResponse"}, + FunctionInfo{4, &NIM_ECA::IsLargeResourceAvailable, "IsLargeResourceAvailable"}, + FunctionInfo{5, &NIM_ECA::CreateServerInterface2, "CreateServerInterface2"} // 17.0.0+ + ); }; class NIM_SHP final : public ServiceFramework { public: explicit NIM_SHP(Core::System& system_) : ServiceFramework{system_, "nim:shp"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RequestDeviceAuthenticationToken"}, FunctionInfo{1, nullptr, "RequestCachedDeviceAuthenticationToken"}, FunctionInfo{2, nullptr, "RequestEdgeToken"}, @@ -490,6 +495,8 @@ public: FunctionInfo{504, nullptr, "RequestDownloadTicketForPrepurchasedContents2"}, FunctionInfo{505, nullptr, "RequestDownloadTicketForPrepurchasedContentsForAccount"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -578,11 +585,7 @@ public: explicit NTC(Core::System& system_) : ServiceFramework{system_, "ntc"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &NTC::OpenEnsureNetworkClockAvailabilityService, "OpenEnsureNetworkClockAvailabilityService"}, - FunctionInfo{100, &NTC::SuspendAutonomicTimeCorrection, "SuspendAutonomicTimeCorrection"}, - FunctionInfo{101, &NTC::ResumeAutonomicTimeCorrection, "ResumeAutonomicTimeCorrection"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -608,17 +611,24 @@ private: IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &NTC::OpenEnsureNetworkClockAvailabilityService, "OpenEnsureNetworkClockAvailabilityService"}, + FunctionInfo{100, &NTC::SuspendAutonomicTimeCorrection, "SuspendAutonomicTimeCorrection"}, + FunctionInfo{101, &NTC::ResumeAutonomicTimeCorrection, "ResumeAutonomicTimeCorrection"} + ); }; class NIM_ECAS final : public ServiceFramework { public: explicit NIM_ECAS(Core::System& system_) : ServiceFramework{system_, "nim:ecas"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RegisterSpecialClient"}, FunctionInfo{1, nullptr, "UnregisterSpecialClient"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/npns/npns.cpp b/src/core/hle/service/npns/npns.cpp index cbf7c2ad3c..63f2c86032 100644 --- a/src/core/hle/service/npns/npns.cpp +++ b/src/core/hle/service/npns/npns.cpp @@ -22,74 +22,7 @@ public: get_receive_event{service_context}, get_request_change_state_cancel_event{service_context} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{1, nullptr, "ListenAll"}, - FunctionInfo{2, C<&INpnsSystem::ListenTo>, "ListenTo"}, - FunctionInfo{3, nullptr, "Receive"}, - FunctionInfo{4, nullptr, "ReceiveRaw"}, - FunctionInfo{5, C<&INpnsSystem::GetReceiveEvent>, "GetReceiveEvent"}, - FunctionInfo{6, nullptr, "ListenUndelivered"}, - FunctionInfo{7, nullptr, "GetStateChangeEvent"}, - FunctionInfo{8, C<&INpnsSystem::ListenToByName>, "ListenToByName"}, - FunctionInfo{11, nullptr, "SubscribeTopic"}, - FunctionInfo{12, nullptr, "UnsubscribeTopic"}, - FunctionInfo{13, nullptr, "QueryIsTopicExist"}, - FunctionInfo{14, nullptr, "SubscribeTopicByAccount"}, // 18.0.0+ - FunctionInfo{15, nullptr, "UnsubscribeTopicByAccount"}, // 18.0.0+ - FunctionInfo{16, nullptr, "DownloadSubscriptionList"}, // 18.0.0+ - FunctionInfo{21, nullptr, "CreateToken"}, - FunctionInfo{22, nullptr, "CreateTokenWithApplicationId"}, - FunctionInfo{23, nullptr, "DestroyToken"}, - FunctionInfo{24, nullptr, "DestroyTokenWithApplicationId"}, - FunctionInfo{25, nullptr, "QueryIsTokenValid"}, - FunctionInfo{26, nullptr, "ListenToMyApplicationId"}, - FunctionInfo{27, nullptr, "DestroyTokenAll"}, - FunctionInfo{28, nullptr, "CreateTokenWithName"}, // 18.0.0+ - FunctionInfo{29, nullptr, "DestroyTokenWithName"}, // 18.0.0+ - FunctionInfo{31, nullptr, "UploadTokenToBaaS"}, - FunctionInfo{32, nullptr, "DestroyTokenForBaaS"}, - FunctionInfo{33, nullptr, "CreateTokenForBaaS"}, - FunctionInfo{34, nullptr, "SetBaaSDeviceAccountIdList"}, - FunctionInfo{35, nullptr, "LinkNsaId"}, // 17.0.0+ - FunctionInfo{36, nullptr, "UnlinkNsaId"}, // 17.0.0+ - FunctionInfo{37, nullptr, "RelinkNsaId"}, // 18.0.0+ - FunctionInfo{40, nullptr, "GetNetworkServiceAccountIdTokenRequestEvent"}, // 17.0.0+ - FunctionInfo{41, nullptr, "TryPopNetworkServiceAccountIdTokenRequestUid"}, // 17.0.0+ - FunctionInfo{42, nullptr, "SetNetworkServiceAccountIdTokenSuccess"}, // 17.0.0+ - FunctionInfo{43, nullptr, "SetNetworkServiceAccountIdTokenFailure"}, // 17.0.0+ - FunctionInfo{44, nullptr, "SetUidList"}, // 17.0.0+ - FunctionInfo{45, nullptr, "PutDigitalTwinKeyValue"}, // 17.0.0+ - FunctionInfo{51, nullptr, "DeleteDigitalTwinKeyValue"}, // 18.0.0+ - FunctionInfo{101, nullptr, "Suspend"}, - FunctionInfo{102, nullptr, "Resume"}, - FunctionInfo{103, C<&INpnsSystem::GetState>, "GetState"}, - FunctionInfo{104, nullptr, "GetStatistics"}, - FunctionInfo{105, nullptr, "GetPlayReportRequestEvent"}, - FunctionInfo{106, C<&INpnsSystem::GetLastNotifiedTime>, "GetLastNotifiedTime"}, // 18.0.0+ - FunctionInfo{107, nullptr, "SetLastNotifiedTime"}, // 18.0.0+ - FunctionInfo{111, nullptr, "GetJid"}, - FunctionInfo{112, nullptr, "CreateJid"}, - FunctionInfo{113, nullptr, "DestroyJid"}, - FunctionInfo{114, nullptr, "AttachJid"}, - FunctionInfo{115, nullptr, "DetachJid"}, - FunctionInfo{120, nullptr, "CreateNotificationReceiver"}, - FunctionInfo{151, nullptr, "GetStateWithHandover"}, - FunctionInfo{152, nullptr, "GetStateChangeEventWithHandover"}, - FunctionInfo{153, nullptr, "GetDropEventWithHandover"}, - FunctionInfo{154, nullptr, "CreateTokenAsync"}, - FunctionInfo{155, nullptr, "CreateTokenAsyncWithApplicationId"}, - FunctionInfo{156, nullptr, "CreateTokenWithNameAsync"}, // 18.0.0+ - FunctionInfo{161, C<&INpnsSystem::GetRequestChangeStateCancelEvent>, "GetRequestChangeStateCancelEvent"}, // 10.0.0+ - FunctionInfo{162, nullptr, "RequestChangeStateForceTimedWithCancelEvent"}, - FunctionInfo{201, nullptr, "RequestChangeStateForceTimed"}, - FunctionInfo{202, nullptr, "RequestChangeStateForceAsync"}, - FunctionInfo{301, nullptr, "GetPassword"}, // 18.0.0+ - FunctionInfo{302, nullptr, "GetAllImmigration"}, // 18.0.0+ - FunctionInfo{303, nullptr, "GetNotificationHistories"}, // 18.0.0+ - FunctionInfo{304, nullptr, "GetPersistentConnectionSummary"}, // 18.0.0+ - FunctionInfo{305, nullptr, "GetDigitalTwinSummary"}, // 18.0.0+ - FunctionInfo{306, nullptr, "GetDigitalTwinValue"} // 18.0.0+ - ); + return HandlerTableGenerateWithFind(key, functions); } ~INpnsSystem() override = default; @@ -138,6 +71,74 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{1, nullptr, "ListenAll"}, + FunctionInfo{2, C<&INpnsSystem::ListenTo>, "ListenTo"}, + FunctionInfo{3, nullptr, "Receive"}, + FunctionInfo{4, nullptr, "ReceiveRaw"}, + FunctionInfo{5, C<&INpnsSystem::GetReceiveEvent>, "GetReceiveEvent"}, + FunctionInfo{6, nullptr, "ListenUndelivered"}, + FunctionInfo{7, nullptr, "GetStateChangeEvent"}, + FunctionInfo{8, C<&INpnsSystem::ListenToByName>, "ListenToByName"}, + FunctionInfo{11, nullptr, "SubscribeTopic"}, + FunctionInfo{12, nullptr, "UnsubscribeTopic"}, + FunctionInfo{13, nullptr, "QueryIsTopicExist"}, + FunctionInfo{14, nullptr, "SubscribeTopicByAccount"}, // 18.0.0+ + FunctionInfo{15, nullptr, "UnsubscribeTopicByAccount"}, // 18.0.0+ + FunctionInfo{16, nullptr, "DownloadSubscriptionList"}, // 18.0.0+ + FunctionInfo{21, nullptr, "CreateToken"}, + FunctionInfo{22, nullptr, "CreateTokenWithApplicationId"}, + FunctionInfo{23, nullptr, "DestroyToken"}, + FunctionInfo{24, nullptr, "DestroyTokenWithApplicationId"}, + FunctionInfo{25, nullptr, "QueryIsTokenValid"}, + FunctionInfo{26, nullptr, "ListenToMyApplicationId"}, + FunctionInfo{27, nullptr, "DestroyTokenAll"}, + FunctionInfo{28, nullptr, "CreateTokenWithName"}, // 18.0.0+ + FunctionInfo{29, nullptr, "DestroyTokenWithName"}, // 18.0.0+ + FunctionInfo{31, nullptr, "UploadTokenToBaaS"}, + FunctionInfo{32, nullptr, "DestroyTokenForBaaS"}, + FunctionInfo{33, nullptr, "CreateTokenForBaaS"}, + FunctionInfo{34, nullptr, "SetBaaSDeviceAccountIdList"}, + FunctionInfo{35, nullptr, "LinkNsaId"}, // 17.0.0+ + FunctionInfo{36, nullptr, "UnlinkNsaId"}, // 17.0.0+ + FunctionInfo{37, nullptr, "RelinkNsaId"}, // 18.0.0+ + FunctionInfo{40, nullptr, "GetNetworkServiceAccountIdTokenRequestEvent"}, // 17.0.0+ + FunctionInfo{41, nullptr, "TryPopNetworkServiceAccountIdTokenRequestUid"}, // 17.0.0+ + FunctionInfo{42, nullptr, "SetNetworkServiceAccountIdTokenSuccess"}, // 17.0.0+ + FunctionInfo{43, nullptr, "SetNetworkServiceAccountIdTokenFailure"}, // 17.0.0+ + FunctionInfo{44, nullptr, "SetUidList"}, // 17.0.0+ + FunctionInfo{45, nullptr, "PutDigitalTwinKeyValue"}, // 17.0.0+ + FunctionInfo{51, nullptr, "DeleteDigitalTwinKeyValue"}, // 18.0.0+ + FunctionInfo{101, nullptr, "Suspend"}, + FunctionInfo{102, nullptr, "Resume"}, + FunctionInfo{103, C<&INpnsSystem::GetState>, "GetState"}, + FunctionInfo{104, nullptr, "GetStatistics"}, + FunctionInfo{105, nullptr, "GetPlayReportRequestEvent"}, + FunctionInfo{106, C<&INpnsSystem::GetLastNotifiedTime>, "GetLastNotifiedTime"}, // 18.0.0+ + FunctionInfo{107, nullptr, "SetLastNotifiedTime"}, // 18.0.0+ + FunctionInfo{111, nullptr, "GetJid"}, + FunctionInfo{112, nullptr, "CreateJid"}, + FunctionInfo{113, nullptr, "DestroyJid"}, + FunctionInfo{114, nullptr, "AttachJid"}, + FunctionInfo{115, nullptr, "DetachJid"}, + FunctionInfo{120, nullptr, "CreateNotificationReceiver"}, + FunctionInfo{151, nullptr, "GetStateWithHandover"}, + FunctionInfo{152, nullptr, "GetStateChangeEventWithHandover"}, + FunctionInfo{153, nullptr, "GetDropEventWithHandover"}, + FunctionInfo{154, nullptr, "CreateTokenAsync"}, + FunctionInfo{155, nullptr, "CreateTokenAsyncWithApplicationId"}, + FunctionInfo{156, nullptr, "CreateTokenWithNameAsync"}, // 18.0.0+ + FunctionInfo{161, C<&INpnsSystem::GetRequestChangeStateCancelEvent>, "GetRequestChangeStateCancelEvent"}, // 10.0.0+ + FunctionInfo{162, nullptr, "RequestChangeStateForceTimedWithCancelEvent"}, + FunctionInfo{201, nullptr, "RequestChangeStateForceTimed"}, + FunctionInfo{202, nullptr, "RequestChangeStateForceAsync"}, + FunctionInfo{301, nullptr, "GetPassword"}, // 18.0.0+ + FunctionInfo{302, nullptr, "GetAllImmigration"}, // 18.0.0+ + FunctionInfo{303, nullptr, "GetNotificationHistories"}, // 18.0.0+ + FunctionInfo{304, nullptr, "GetPersistentConnectionSummary"}, // 18.0.0+ + FunctionInfo{305, nullptr, "GetDigitalTwinSummary"}, // 18.0.0+ + FunctionInfo{306, nullptr, "GetDigitalTwinValue"} // 18.0.0+ + ); KernelHelpers::ServiceContext service_context; Event get_receive_event; Event get_request_change_state_cancel_event; @@ -149,29 +150,7 @@ public: : ServiceFramework{system_, "npns:u"}, service_context{system, "npns:u"}, get_receive_event{service_context} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{1, nullptr, "ListenAll"}, - FunctionInfo{2, nullptr, "ListenTo"}, - FunctionInfo{3, nullptr, "Receive"}, - FunctionInfo{4, nullptr, "ReceiveRaw"}, - FunctionInfo{5, C<&INpnsUser::GetReceiveEvent>, "GetReceiveEvent"}, - FunctionInfo{7, nullptr, "GetStateChangeEvent"}, - FunctionInfo{8, C<&INpnsUser::ListenToByName>, "ListenToByName"}, // 18.0.0+ - FunctionInfo{21, nullptr, "CreateToken"}, - FunctionInfo{23, nullptr, "DestroyToken"}, - FunctionInfo{25, nullptr, "QueryIsTokenValid"}, - FunctionInfo{26, nullptr, "ListenToMyApplicationId"}, - FunctionInfo{101, nullptr, "Suspend"}, - FunctionInfo{102, nullptr, "Resume"}, - FunctionInfo{103, nullptr, "GetState"}, - FunctionInfo{104, nullptr, "GetStatistics"}, - FunctionInfo{111, nullptr, "GetJid"}, - FunctionInfo{120, nullptr, "CreateNotificationReceiver"}, - FunctionInfo{151, nullptr, "GetStateWithHandover"}, - FunctionInfo{152, nullptr, "GetStateChangeEventWithHandover"}, - FunctionInfo{153, nullptr, "GetDropEventWithHandover"}, - FunctionInfo{154, nullptr, "CreateTokenAsync"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -191,6 +170,29 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{1, nullptr, "ListenAll"}, + FunctionInfo{2, nullptr, "ListenTo"}, + FunctionInfo{3, nullptr, "Receive"}, + FunctionInfo{4, nullptr, "ReceiveRaw"}, + FunctionInfo{5, C<&INpnsUser::GetReceiveEvent>, "GetReceiveEvent"}, + FunctionInfo{7, nullptr, "GetStateChangeEvent"}, + FunctionInfo{8, C<&INpnsUser::ListenToByName>, "ListenToByName"}, // 18.0.0+ + FunctionInfo{21, nullptr, "CreateToken"}, + FunctionInfo{23, nullptr, "DestroyToken"}, + FunctionInfo{25, nullptr, "QueryIsTokenValid"}, + FunctionInfo{26, nullptr, "ListenToMyApplicationId"}, + FunctionInfo{101, nullptr, "Suspend"}, + FunctionInfo{102, nullptr, "Resume"}, + FunctionInfo{103, nullptr, "GetState"}, + FunctionInfo{104, nullptr, "GetStatistics"}, + FunctionInfo{111, nullptr, "GetJid"}, + FunctionInfo{120, nullptr, "CreateNotificationReceiver"}, + FunctionInfo{151, nullptr, "GetStateWithHandover"}, + FunctionInfo{152, nullptr, "GetStateChangeEventWithHandover"}, + FunctionInfo{153, nullptr, "GetDropEventWithHandover"}, + FunctionInfo{154, nullptr, "CreateTokenAsync"} + ); KernelHelpers::ServiceContext service_context; Event get_receive_event; }; diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp index 7c8cab8563..03bad32709 100644 --- a/src/core/hle/service/ns/ns.cpp +++ b/src/core/hle/service/ns/ns.cpp @@ -21,22 +21,23 @@ class INotifyService final : public ServiceFramework { public: explicit INotifyService(Core::System& system_) : ServiceFramework{system_, "pdm:ntfy"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "NotifyAppletEvent" }, + FunctionInfo{2, nullptr, "NotifyOperationModeChangeEvent" }, + FunctionInfo{3, nullptr, "NotifyPowerStateChangeEvent" }, + FunctionInfo{4, nullptr, "NotifyClearAllEvent" }, + FunctionInfo{5, nullptr, "NotifyEventForDebug" }, + FunctionInfo{6, nullptr, "SuspendUserAccountEventService" }, + FunctionInfo{7, nullptr, "ResumeUserAccountEventService" }, + FunctionInfo{8, nullptr, "NotifyLibraryAppletEvent" }, + FunctionInfo{9, nullptr, "Cmd9" }, + FunctionInfo{20, nullptr, "Cmd20" }, + FunctionInfo{30, nullptr, "Cmd30" }, + FunctionInfo{100, nullptr, "Cmd100" }, + FunctionInfo{101, nullptr, "Cmd101" } + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "NotifyAppletEvent" }, - FunctionInfo{2, nullptr, "NotifyOperationModeChangeEvent" }, - FunctionInfo{3, nullptr, "NotifyPowerStateChangeEvent" }, - FunctionInfo{4, nullptr, "NotifyClearAllEvent" }, - FunctionInfo{5, nullptr, "NotifyEventForDebug" }, - FunctionInfo{6, nullptr, "SuspendUserAccountEventService" }, - FunctionInfo{7, nullptr, "ResumeUserAccountEventService" }, - FunctionInfo{8, nullptr, "NotifyLibraryAppletEvent" }, - FunctionInfo{9, nullptr, "Cmd9" }, - FunctionInfo{20, nullptr, "Cmd20" }, - FunctionInfo{30, nullptr, "Cmd30" }, - FunctionInfo{100, nullptr, "Cmd100" }, - FunctionInfo{101, nullptr, "Cmd101" } - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -47,14 +48,7 @@ public: : ServiceFramework{system_, "ns:vm"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{1200, D<&IVulnerabilityManagerInterface::NeedsUpdateVulnerability>, "NeedsUpdateVulnerability"}, - FunctionInfo{1201, nullptr, "UpdateSafeSystemVersionForDebug"}, - FunctionInfo{1202, nullptr, "GetSafeSystemVersion"}, - FunctionInfo{3100, D<&IVulnerabilityManagerInterface::GetSafeSystemVersionCheckInfo>, "GetSafeSystemVersionCheckInfo"}, - FunctionInfo{3101, nullptr, "RequestUpdateSafeSystemVersionCheckInfo"}, - FunctionInfo{3102, D<&IVulnerabilityManagerInterface::ResetSafeSystemVersionCheckInfo>, "ResetSafeSystemVersionCheckInfo"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IVulnerabilityManagerInterface() override = default; @@ -74,6 +68,15 @@ public: LOG_WARNING(Service_NS, "(STUBBED)"); R_SUCCEED(); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{1200, D<&IVulnerabilityManagerInterface::NeedsUpdateVulnerability>, "NeedsUpdateVulnerability"}, + FunctionInfo{1201, nullptr, "UpdateSafeSystemVersionForDebug"}, + FunctionInfo{1202, nullptr, "GetSafeSystemVersion"}, + FunctionInfo{3100, D<&IVulnerabilityManagerInterface::GetSafeSystemVersionCheckInfo>, "GetSafeSystemVersionCheckInfo"}, + FunctionInfo{3101, nullptr, "RequestUpdateSafeSystemVersionCheckInfo"}, + FunctionInfo{3102, D<&IVulnerabilityManagerInterface::ResetSafeSystemVersionCheckInfo>, "ResetSafeSystemVersionCheckInfo"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/pcie/pcie.cpp b/src/core/hle/service/pcie/pcie.cpp index 92582b8744..f350c37039 100644 --- a/src/core/hle/service/pcie/pcie.cpp +++ b/src/core/hle/service/pcie/pcie.cpp @@ -17,8 +17,7 @@ class ISession final : public ServiceFramework { public: explicit ISession(Core::System& system_) : ServiceFramework{system_, "ISession"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "QueryFunctions"}, FunctionInfo{1, nullptr, "AcquireFunction"}, FunctionInfo{2, nullptr, "ReleaseFunction"}, @@ -44,6 +43,8 @@ public: FunctionInfo{22, nullptr, "SetResetUponResumeEnable"}, FunctionInfo{23, nullptr, "ResetFunction"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -51,11 +52,12 @@ class PCIE final : public ServiceFramework { public: explicit PCIE(Core::System& system_) : ServiceFramework{system_, "pcie"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "RegisterClassDriver"}, FunctionInfo{1, nullptr, "QueryFunctionsUnregistered"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -63,11 +65,12 @@ class PCIE_LOG final : public ServiceFramework { public: explicit PCIE_LOG(Core::System& system_) : ServiceFramework{system_, "pcie:log"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetLoggedState"}, FunctionInfo{1, nullptr, "GetLoggedStateEvent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/pcv/pcv.cpp b/src/core/hle/service/pcv/pcv.cpp index 9b0a7dee9f..3070fadd3c 100644 --- a/src/core/hle/service/pcv/pcv.cpp +++ b/src/core/hle/service/pcv/pcv.cpp @@ -17,8 +17,7 @@ class PCV final : public ServiceFramework { public: explicit PCV(Core::System& system_) : ServiceFramework{system_, "pcv"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetPowerEnabled"}, FunctionInfo{1, nullptr, "SetClockEnabled"}, FunctionInfo{2, nullptr, "SetClockRate"}, @@ -50,6 +49,8 @@ public: FunctionInfo{28, nullptr, "IsPoweredOn"}, FunctionInfo{29, nullptr, "GetVoltage"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -57,10 +58,11 @@ class PCV_ARB final : public ServiceFramework { public: explicit PCV_ARB(Core::System& system_) : ServiceFramework{system_, "pcv:arb"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ReleaseControl"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -68,10 +70,11 @@ class PCV_IMM final : public ServiceFramework { public: explicit PCV_IMM(Core::System& system_) : ServiceFramework{system_, "pcv:imm"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetClockRate"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -81,20 +84,7 @@ public: : ServiceFramework{system_, "IClkrstSession"}, device_code(device_code_) {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "SetClockEnabled"}, - FunctionInfo{1, nullptr, "SetClockDisabled"}, - FunctionInfo{2, nullptr, "SetResetAsserted"}, - FunctionInfo{3, nullptr, "SetResetDeasserted"}, - FunctionInfo{4, nullptr, "SetPowerEnabled"}, - FunctionInfo{5, nullptr, "SetPowerDisabled"}, - FunctionInfo{6, nullptr, "GetState"}, - FunctionInfo{7, &IClkrstSession::SetClockRate, "SetClockRate"}, - FunctionInfo{8, &IClkrstSession::GetClockRate, "GetClockRate"}, - FunctionInfo{9, nullptr, "SetMinVClockRate"}, - FunctionInfo{10, nullptr, "GetPossibleClockRates"}, - FunctionInfo{11, nullptr, "GetDvfsTable"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -115,6 +105,20 @@ private: rb.Push(clock_rate); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "SetClockEnabled"}, + FunctionInfo{1, nullptr, "SetClockDisabled"}, + FunctionInfo{2, nullptr, "SetResetAsserted"}, + FunctionInfo{3, nullptr, "SetResetDeasserted"}, + FunctionInfo{4, nullptr, "SetPowerEnabled"}, + FunctionInfo{5, nullptr, "SetPowerDisabled"}, + FunctionInfo{6, nullptr, "GetState"}, + FunctionInfo{7, &IClkrstSession::SetClockRate, "SetClockRate"}, + FunctionInfo{8, &IClkrstSession::GetClockRate, "GetClockRate"}, + FunctionInfo{9, nullptr, "SetMinVClockRate"}, + FunctionInfo{10, nullptr, "GetPossibleClockRates"}, + FunctionInfo{11, nullptr, "GetDvfsTable"} + ); DeviceCode device_code; u32 clock_rate{}; }; @@ -124,14 +128,7 @@ public: explicit CLKRST(Core::System& system_, const char* name) : ServiceFramework{system_, name} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &CLKRST::OpenSession, "OpenSession"}, - FunctionInfo{1, nullptr, "GetTemperatureThresholds"}, - FunctionInfo{2, nullptr, "SetTemperature"}, - FunctionInfo{3, nullptr, "GetModuleStateTable"}, - FunctionInfo{4, nullptr, "GetModuleStateTableEvent"}, - FunctionInfo{5, nullptr, "GetModuleStateTableMaxCount"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -146,16 +143,26 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system, device_code); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &CLKRST::OpenSession, "OpenSession"}, + FunctionInfo{1, nullptr, "GetTemperatureThresholds"}, + FunctionInfo{2, nullptr, "SetTemperature"}, + FunctionInfo{3, nullptr, "GetModuleStateTable"}, + FunctionInfo{4, nullptr, "GetModuleStateTableEvent"}, + FunctionInfo{5, nullptr, "GetModuleStateTableMaxCount"} + ); }; class CLKRST_A final : public ServiceFramework { public: explicit CLKRST_A(Core::System& system_) : ServiceFramework{system_, "clkrst:a"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ReleaseControl"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/pm/pm.cpp b/src/core/hle/service/pm/pm.cpp index d243cf8d36..be7a96aa10 100644 --- a/src/core/hle/service/pm/pm.cpp +++ b/src/core/hle/service/pm/pm.cpp @@ -81,17 +81,7 @@ public: explicit DebugMonitor(Core::System& system_) : ServiceFramework{system_, "pm:dmnt"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetJitDebugProcessIdList"}, - FunctionInfo{1, nullptr, "StartProcess"}, - FunctionInfo{2, &DebugMonitor::GetProcessId, "GetProcessId"}, - FunctionInfo{3, nullptr, "HookToCreateProcess"}, - FunctionInfo{4, &DebugMonitor::GetApplicationProcessId, "GetApplicationProcessId"}, - FunctionInfo{5, nullptr, "HookToCreateApplicationProgress"}, - FunctionInfo{6, nullptr, "ClearHook"}, - FunctionInfo{65000, &DebugMonitor::AtmosphereGetProcessInfo, "AtmosphereGetProcessInfo"}, - FunctionInfo{65001, nullptr, "AtmosphereGetCurrentLimitInfo"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -162,6 +152,18 @@ private: rb.PushRaw(program_location); rb.PushRaw(override_status); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetJitDebugProcessIdList"}, + FunctionInfo{1, nullptr, "StartProcess"}, + FunctionInfo{2, &DebugMonitor::GetProcessId, "GetProcessId"}, + FunctionInfo{3, nullptr, "HookToCreateProcess"}, + FunctionInfo{4, &DebugMonitor::GetApplicationProcessId, "GetApplicationProcessId"}, + FunctionInfo{5, nullptr, "HookToCreateApplicationProgress"}, + FunctionInfo{6, nullptr, "ClearHook"}, + FunctionInfo{65000, &DebugMonitor::AtmosphereGetProcessInfo, "AtmosphereGetProcessInfo"}, + FunctionInfo{65001, nullptr, "AtmosphereGetCurrentLimitInfo"} + ); }; class Info final : public ServiceFramework { @@ -223,18 +225,7 @@ public: explicit Shell(Core::System& system_) : ServiceFramework{system_, "pm:shell"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "LaunchProgram"}, - FunctionInfo{1, nullptr, "TerminateProcess"}, - FunctionInfo{2, nullptr, "TerminateProgram"}, - FunctionInfo{3, nullptr, "GetProcessEventHandle"}, - FunctionInfo{4, nullptr, "GetProcessEventInfo"}, - FunctionInfo{5, nullptr, "NotifyBootFinished"}, - FunctionInfo{6, &Shell::GetApplicationProcessIdForShell, "GetApplicationProcessIdForShell"}, - FunctionInfo{7, nullptr, "BoostSystemMemoryResourceLimit"}, - FunctionInfo{8, nullptr, "BoostApplicationThreadResourceLimit"}, - FunctionInfo{9, nullptr, "GetBootFinishedEventHandle"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -243,6 +234,19 @@ private: auto list = kernel.GetProcessList(); GetApplicationPidGeneric(system.Kernel(), ctx, list); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "LaunchProgram"}, + FunctionInfo{1, nullptr, "TerminateProcess"}, + FunctionInfo{2, nullptr, "TerminateProgram"}, + FunctionInfo{3, nullptr, "GetProcessEventHandle"}, + FunctionInfo{4, nullptr, "GetProcessEventInfo"}, + FunctionInfo{5, nullptr, "NotifyBootFinished"}, + FunctionInfo{6, &Shell::GetApplicationProcessIdForShell, "GetApplicationProcessIdForShell"}, + FunctionInfo{7, nullptr, "BoostSystemMemoryResourceLimit"}, + FunctionInfo{8, nullptr, "BoostApplicationThreadResourceLimit"}, + FunctionInfo{9, nullptr, "GetBootFinishedEventHandle"} + ); }; void LoopProcess(Core::System& system) { diff --git a/src/core/hle/service/prepo/prepo.cpp b/src/core/hle/service/prepo/prepo.cpp index ddf270823d..6068d6392a 100644 --- a/src/core/hle/service/prepo/prepo.cpp +++ b/src/core/hle/service/prepo/prepo.cpp @@ -24,40 +24,7 @@ public: explicit PlayReport(const char* name, Core::System& system_) : ServiceFramework{system_, name} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{10100, &PlayReport::SaveReport, "SaveReportOld"}, - FunctionInfo{10101, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld"}, - FunctionInfo{10102, &PlayReport::SaveReport, "SaveReportOld2"}, - FunctionInfo{10103, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld2"}, - FunctionInfo{10104, &PlayReport::SaveReport, "SaveReportOld3"}, - FunctionInfo{10105, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld3"}, - FunctionInfo{10106, &PlayReport::SaveReport, "SaveReport"}, - FunctionInfo{10107, &PlayReport::SaveReportWithUser, "SaveReportWithUser"}, - FunctionInfo{10200, &PlayReport::RequestImmediateTransmission, "RequestImmediateTransmission"}, - FunctionInfo{10300, &PlayReport::GetTransmissionStatus, "GetTransmissionStatus"}, - FunctionInfo{10400, &PlayReport::GetSystemSessionId, "GetSystemSessionId"}, - FunctionInfo{20100, &PlayReport::SaveSystemReportOld, "SaveSystemReport"}, - FunctionInfo{20101, &PlayReport::SaveSystemReportWithUserOld, "SaveSystemReportWithUser"}, - FunctionInfo{20102, &PlayReport::SaveSystemReport, "SaveSystemReport"}, - FunctionInfo{20103, &PlayReport::SaveSystemReportWithUser, "SaveSystemReportWithUser"}, - FunctionInfo{20200, nullptr, "SetOperationMode"}, - FunctionInfo{30100, nullptr, "ClearStorage"}, - FunctionInfo{30200, nullptr, "ClearStatistics"}, - FunctionInfo{30300, nullptr, "GetStorageUsage"}, - FunctionInfo{30400, nullptr, "GetStatistics"}, - FunctionInfo{30401, nullptr, "GetThroughputHistory"}, - FunctionInfo{30500, nullptr, "GetLastUploadError"}, - FunctionInfo{30600, nullptr, "GetApplicationUploadSummary"}, - FunctionInfo{40100, nullptr, "IsUserAgreementCheckEnabled"}, - FunctionInfo{40101, nullptr, "SetUserAgreementCheckEnabled"}, - FunctionInfo{50100, nullptr, "ReadAllApplicationReportFiles"}, - FunctionInfo{90100, nullptr, "ReadAllReportFiles"}, - FunctionInfo{90101, nullptr, "Unknown90101"}, - FunctionInfo{90102, nullptr, "Unknown90102"}, - FunctionInfo{90200, nullptr, "GetStatistics"}, - FunctionInfo{90201, nullptr, "GetThroughputHistory"}, - FunctionInfo{90300, nullptr, "GetLastUploadError"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -212,21 +179,51 @@ private: IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{10100, &PlayReport::SaveReport, "SaveReportOld"}, + FunctionInfo{10101, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld"}, + FunctionInfo{10102, &PlayReport::SaveReport, "SaveReportOld2"}, + FunctionInfo{10103, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld2"}, + FunctionInfo{10104, &PlayReport::SaveReport, "SaveReportOld3"}, + FunctionInfo{10105, &PlayReport::SaveReportWithUser, "SaveReportWithUserOld3"}, + FunctionInfo{10106, &PlayReport::SaveReport, "SaveReport"}, + FunctionInfo{10107, &PlayReport::SaveReportWithUser, "SaveReportWithUser"}, + FunctionInfo{10200, &PlayReport::RequestImmediateTransmission, "RequestImmediateTransmission"}, + FunctionInfo{10300, &PlayReport::GetTransmissionStatus, "GetTransmissionStatus"}, + FunctionInfo{10400, &PlayReport::GetSystemSessionId, "GetSystemSessionId"}, + FunctionInfo{20100, &PlayReport::SaveSystemReportOld, "SaveSystemReport"}, + FunctionInfo{20101, &PlayReport::SaveSystemReportWithUserOld, "SaveSystemReportWithUser"}, + FunctionInfo{20102, &PlayReport::SaveSystemReport, "SaveSystemReport"}, + FunctionInfo{20103, &PlayReport::SaveSystemReportWithUser, "SaveSystemReportWithUser"}, + FunctionInfo{20200, nullptr, "SetOperationMode"}, + FunctionInfo{30100, nullptr, "ClearStorage"}, + FunctionInfo{30200, nullptr, "ClearStatistics"}, + FunctionInfo{30300, nullptr, "GetStorageUsage"}, + FunctionInfo{30400, nullptr, "GetStatistics"}, + FunctionInfo{30401, nullptr, "GetThroughputHistory"}, + FunctionInfo{30500, nullptr, "GetLastUploadError"}, + FunctionInfo{30600, nullptr, "GetApplicationUploadSummary"}, + FunctionInfo{40100, nullptr, "IsUserAgreementCheckEnabled"}, + FunctionInfo{40101, nullptr, "SetUserAgreementCheckEnabled"}, + FunctionInfo{50100, nullptr, "ReadAllApplicationReportFiles"}, + FunctionInfo{90100, nullptr, "ReadAllReportFiles"}, + FunctionInfo{90101, nullptr, "Unknown90101"}, + FunctionInfo{90102, nullptr, "Unknown90102"}, + FunctionInfo{90200, nullptr, "GetStatistics"}, + FunctionInfo{90201, nullptr, "GetThroughputHistory"}, + FunctionInfo{90300, nullptr, "GetLastUploadError"} + ); }; void LoopProcess(Core::System& system) { auto server_manager = std::make_unique(system); - server_manager->RegisterNamedService("prepo:a", - std::make_shared("prepo:a", system)); - server_manager->RegisterNamedService("prepo:a2", - std::make_shared("prepo:a2", system)); - server_manager->RegisterNamedService("prepo:m", - std::make_shared("prepo:m", system)); - server_manager->RegisterNamedService("prepo:s", - std::make_shared("prepo:s", system)); - server_manager->RegisterNamedService("prepo:u", - std::make_shared("prepo:u", system)); + server_manager->RegisterNamedService("prepo:a", std::make_shared("prepo:a", system)); + server_manager->RegisterNamedService("prepo:a2", std::make_shared("prepo:a2", system)); + server_manager->RegisterNamedService("prepo:m", std::make_shared("prepo:m", system)); + server_manager->RegisterNamedService("prepo:s", std::make_shared("prepo:s", system)); + server_manager->RegisterNamedService("prepo:u", std::make_shared("prepo:u", system)); ServerManager::RunServer(std::move(server_manager)); } diff --git a/src/core/hle/service/psc/psc.cpp b/src/core/hle/service/psc/psc.cpp index 2891f5ce9e..01f65ff32d 100644 --- a/src/core/hle/service/psc/psc.cpp +++ b/src/core/hle/service/psc/psc.cpp @@ -21,14 +21,15 @@ class PSC_L final : public ServiceFramework { public: explicit PSC_L(Core::System& system_) : ServiceFramework{system_, "psc:l"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "Initialize_3"}, + FunctionInfo{1, nullptr, "Lock"}, + FunctionInfo{2, nullptr, "Unlock"}, + FunctionInfo{3, nullptr, "IsLocked"}, + FunctionInfo{4, nullptr, "GetRelatedState"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "Initialize_3"}, - FunctionInfo{1, nullptr, "Lock"}, - FunctionInfo{2, nullptr, "Unlock"}, - FunctionInfo{3, nullptr, "IsLocked"}, - FunctionInfo{4, nullptr, "GetRelatedState"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; @@ -36,11 +37,12 @@ class INS_R final : public ServiceFramework { public: explicit INS_R(Core::System& system_) : ServiceFramework{system_, "ins:r"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetInputSourceState"}, FunctionInfo{1, nullptr, "GetTriggerTargetEvent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -48,10 +50,11 @@ class INS_S final : public ServiceFramework { public: explicit INS_S(Core::System& system_) : ServiceFramework{system_, "ins:s"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetNotifyEvent"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -59,8 +62,7 @@ class HSHL_SYS final : public ServiceFramework { public: explicit HSHL_SYS(Core::System& system_) : ServiceFramework{system_, "hshl:sys"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetBatteryPercentage"}, FunctionInfo{1, nullptr, "GetChargerType"}, FunctionInfo{2, nullptr, "OpenChargeSession"}, @@ -78,6 +80,8 @@ public: FunctionInfo{14, nullptr, "Cmd14"}, FunctionInfo{15, nullptr, "Cmd15"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -85,15 +89,16 @@ class HSHL_SET final : public ServiceFramework { public: explicit HSHL_SET(Core::System& system_) : ServiceFramework{system_, "hshl:set"} {} + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "OpenChargeSession_2"}, + FunctionInfo{1, nullptr, "OpenThermalSession_2"}, + FunctionInfo{2, nullptr, "SetClockRate"}, + FunctionInfo{3, nullptr, "SetBridgePowerSupply"}, + FunctionInfo{4, nullptr, "Cmd4"}, + FunctionInfo{5, nullptr, "Cmd5"} + ); FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "OpenChargeSession_2"}, - FunctionInfo{1, nullptr, "OpenThermalSession_2"}, - FunctionInfo{2, nullptr, "SetClockRate"}, - FunctionInfo{3, nullptr, "SetBridgePowerSupply"}, - FunctionInfo{4, nullptr, "Cmd4"}, - FunctionInfo{5, nullptr, "Cmd5"} - ); + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/ptm/psm.cpp b/src/core/hle/service/ptm/psm.cpp index 6b4c21707a..896b236d41 100644 --- a/src/core/hle/service/ptm/psm.cpp +++ b/src/core/hle/service/ptm/psm.cpp @@ -27,13 +27,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IPsmSession::BindStateChangeEvent, "BindStateChangeEvent"}, - FunctionInfo{1, &IPsmSession::UnbindStateChangeEvent, "UnbindStateChangeEvent"}, - FunctionInfo{2, &IPsmSession::SetChargerTypeChangeEventEnabled, "SetChargerTypeChangeEventEnabled"}, - FunctionInfo{3, &IPsmSession::SetPowerSupplyChangeEventEnabled, "SetPowerSupplyChangeEventEnabled"}, - FunctionInfo{4, &IPsmSession::SetBatteryVoltageStateChangeEventEnabled, "SetBatteryVoltageStateChangeEventEnabled"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~IPsmSession() override { @@ -111,8 +105,15 @@ private: rb.Push(ResultSuccess); } - KernelHelpers::ServiceContext service_context; + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IPsmSession::BindStateChangeEvent, "BindStateChangeEvent"}, + FunctionInfo{1, &IPsmSession::UnbindStateChangeEvent, "UnbindStateChangeEvent"}, + FunctionInfo{2, &IPsmSession::SetChargerTypeChangeEventEnabled, "SetChargerTypeChangeEventEnabled"}, + FunctionInfo{3, &IPsmSession::SetPowerSupplyChangeEventEnabled, "SetPowerSupplyChangeEventEnabled"}, + FunctionInfo{4, &IPsmSession::SetBatteryVoltageStateChangeEventEnabled, "SetBatteryVoltageStateChangeEventEnabled"} + ); + KernelHelpers::ServiceContext service_context; bool should_signal_charger_type{}; bool should_signal_power_supply{}; bool should_signal_battery_voltage{}; diff --git a/src/core/hle/service/ptm/ptm.cpp b/src/core/hle/service/ptm/ptm.cpp index ab039975d1..07cd6318a1 100644 --- a/src/core/hle/service/ptm/ptm.cpp +++ b/src/core/hle/service/ptm/ptm.cpp @@ -19,12 +19,13 @@ public: explicit PSM_MANU(Core::System& system_) : ServiceFramework{system_, "psm:manu"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "EnableVdd50StateControl"}, FunctionInfo{1, nullptr, "DisableVdd50StateControl"}, FunctionInfo{2, nullptr, "SetVdd50State"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -33,10 +34,11 @@ public: explicit POWCTL(Core::System& system_) : ServiceFramework{system_, "powctl"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "OpenSession"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/ptm/ts.cpp b/src/core/hle/service/ptm/ts.cpp index 1ea126c9ff..d90126305a 100644 --- a/src/core/hle/service/ptm/ts.cpp +++ b/src/core/hle/service/ptm/ts.cpp @@ -22,11 +22,7 @@ public: explicit ISession(Core::System& system_) : ServiceFramework{system_, "ISession"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, nullptr, "GetTemperatureRange"}, - FunctionInfo{2, nullptr, "SetMeasurementMode"}, - FunctionInfo{4, &ISession::GetTemperature, "GetTemperature"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -37,6 +33,12 @@ private: rb.Push(ResultSuccess); rb.Push(temperature); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, nullptr, "GetTemperatureRange"}, + FunctionInfo{2, nullptr, "SetMeasurementMode"}, + FunctionInfo{4, &ISession::GetTemperature, "GetTemperature"} + ); }; TS::TS(Core::System& system_) : ServiceFramework{system_, "ts"} { diff --git a/src/core/hle/service/ro/ro.cpp b/src/core/hle/service/ro/ro.cpp index 5ab91b8f33..6be1ba8ca5 100644 --- a/src/core/hle/service/ro/ro.cpp +++ b/src/core/hle/service/ro/ro.cpp @@ -513,14 +513,7 @@ public: {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, C<&RoInterface::MapManualLoadModuleMemory>, "MapManualLoadModuleMemory"}, - FunctionInfo{1, C<&RoInterface::UnmapManualLoadModuleMemory>, "UnmapManualLoadModuleMemory"}, - FunctionInfo{2, C<&RoInterface::RegisterModuleInfo>, "RegisterModuleInfo"}, - FunctionInfo{3, C<&RoInterface::UnregisterModuleInfo>, "UnregisterModuleInfo"}, - FunctionInfo{4, C<&RoInterface::RegisterProcessHandle>, "RegisterProcessHandle"}, - FunctionInfo{10, C<&RoInterface::RegisterProcessModuleInfo>, "RegisterProcessModuleInfo"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~RoInterface() { @@ -563,6 +556,14 @@ public: } private: + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, C<&RoInterface::MapManualLoadModuleMemory>, "MapManualLoadModuleMemory"}, + FunctionInfo{1, C<&RoInterface::UnmapManualLoadModuleMemory>, "UnmapManualLoadModuleMemory"}, + FunctionInfo{2, C<&RoInterface::RegisterModuleInfo>, "RegisterModuleInfo"}, + FunctionInfo{3, C<&RoInterface::UnregisterModuleInfo>, "UnregisterModuleInfo"}, + FunctionInfo{4, C<&RoInterface::RegisterProcessHandle>, "RegisterProcessHandle"}, + FunctionInfo{10, C<&RoInterface::RegisterProcessModuleInfo>, "RegisterProcessModuleInfo"} + ); std::shared_ptr m_ro{}; size_t m_context_id{}; NrrKind m_nrr_kind{}; diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 14d1de1a1f..4e63aa8a50 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "frozen/map.h" #include "common/container/unordered_map.h" #include "common/common_types.h" @@ -94,6 +95,7 @@ protected: const char* name; u32 version_gating; }; + static_assert(std::is_trivially_constructible_v); private: template friend class ServiceFramework; @@ -153,6 +155,9 @@ protected: /// @param expected_header_ request header in the command buffer which will trigger dispatch to this handler /// @param handler_callback_ member function in this service which will be called to handle the request /// @param name_ human-friendly name for the request. Used mostly for logging purposes. +#ifndef _MSC_VER + constexpr +#endif FunctionInfoTyped(u32 expected_header_, HandlerFnP handler_callback_, const char* name_, u32 version_gating_ = 0) : FunctionInfoBase{expected_header_, HandlerFnP(handler_callback_), name_, version_gating_} {} @@ -161,10 +166,14 @@ protected: template requires (std::same_as && ...) - static FunctionInfoBase const* HandlerTableGenerateWithFind(u32 key, Ts... args) { - static auto const map = frozen::map{ + static constexpr frozen::map CreateStaticMap(Ts... args) { + return frozen::map{ {args.expected_header, FunctionInfo(args)}... }; + } + + template + static FunctionInfoBase const* HandlerTableGenerateWithFind(u32 key, T const& map) { auto const it = map.find(key); return it != map.end() ? std::addressof(it->second) : nullptr; } @@ -208,25 +217,21 @@ protected: RegisterHandlers(functions, N); } - /** - * Registers handlers in the service. Usually prefer using the other RegisterHandlers - * overload in order to avoid needing to specify the array size. - */ + /// @brief Registers handlers in the service. Usually prefer using the other RegisterHandlers + /// overload in order to avoid needing to specify the array size. template constexpr void RegisterHandlers(const FunctionInfoTyped* functions, std::size_t n) { RegisterHandlersBase(functions, n); } - /// Registers handlers in the service. + /// @brief Registers handlers in the service. template constexpr void RegisterHandlersTipc(const FunctionInfoTyped (&functions)[N]) { RegisterHandlersTipc(functions, N); } - /** - * Registers handlers in the service. Usually prefer using the other RegisterHandlers - * overload in order to avoid needing to specify the array size. - */ + /// @brief Registers handlers in the service. Usually prefer using the other RegisterHandlers + /// overload in order to avoid needing to specify the array size. template constexpr void RegisterHandlersTipc(const FunctionInfoTyped* functions, std::size_t n) { RegisterHandlersBaseTipc(functions, n); diff --git a/src/core/hle/service/sockets/sockets.cpp b/src/core/hle/service/sockets/sockets.cpp index 9b4cdd3727..61112e3316 100644 --- a/src/core/hle/service/sockets/sockets.cpp +++ b/src/core/hle/service/sockets/sockets.cpp @@ -17,8 +17,7 @@ public: explicit ETHC_C(Core::System& system_) : ServiceFramework{system_, "ethc:c"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "Initialize"}, FunctionInfo{1, nullptr, "Cancel"}, FunctionInfo{2, nullptr, "GetResult"}, @@ -27,6 +26,8 @@ public: FunctionInfo{5, nullptr, "GetMediaType"}, FunctionInfo{6, nullptr, "GetMacAddress"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -35,14 +36,15 @@ public: explicit ETHC_I(Core::System& system_) : ServiceFramework{system_, "ethc:i"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetReadableHandle"}, FunctionInfo{1, nullptr, "Cancel"}, FunctionInfo{2, nullptr, "GetResult"}, FunctionInfo{3, nullptr, "GetInterfaceList"}, FunctionInfo{4, nullptr, "GetInterfaceCount"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -51,10 +53,11 @@ public: explicit ISfDriverServiceCreator(Core::System& system_) : ServiceFramework{system_, "eth:nd"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "CreateDriverService"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp index edbea72e99..a86d879178 100644 --- a/src/core/hle/service/ssl/ssl.cpp +++ b/src/core/hle/service/ssl/ssl.cpp @@ -84,44 +84,7 @@ public: } FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, D<&ISslConnection::SetSocketDescriptor>, "SetSocketDescriptor"}, - FunctionInfo{1, D<&ISslConnection::SetHostName>, "SetHostName"}, - FunctionInfo{2, D<&ISslConnection::SetVerifyOption>, "SetVerifyOption"}, - FunctionInfo{3, D<&ISslConnection::SetIoMode>, "SetIoMode"}, - FunctionInfo{4, D<&ISslConnection::GetSocketDescriptor>, "GetSocketDescriptor"}, - FunctionInfo{5, D<&ISslConnection::GetHostName>, "GetHostName"}, - FunctionInfo{6, nullptr, "GetVerifyOption"}, - FunctionInfo{7, D<&ISslConnection::GetIoMode>, "GetIoMode"}, - FunctionInfo{8, D<&ISslConnection::DoHandshake>, "DoHandshake"}, - FunctionInfo{9, &ISslConnection::DoHandshakeGetServerCert, "DoHandshakeGetServerCert"}, - FunctionInfo{10, D<&ISslConnection::Read>, "Read"}, - FunctionInfo{11, D<&ISslConnection::Write>, "Write"}, - FunctionInfo{12, D<&ISslConnection::Pending>, "Pending"}, - FunctionInfo{13, D<&ISslConnection::Peek>, "Peek"}, - FunctionInfo{14, D<&ISslConnection::Poll>, "Poll"}, - FunctionInfo{15, D<&ISslConnection::GetVerifyCertError>, "GetVerifyCertError"}, - FunctionInfo{16, D<&ISslConnection::GetNeededServerCertBufferSize>, "GetNeededServerCertBufferSize"}, - FunctionInfo{17, D<&ISslConnection::SetSessionCacheMode>, "SetSessionCacheMode"}, - FunctionInfo{18, D<&ISslConnection::GetSessionCacheMode>, "GetSessionCacheMode"}, - FunctionInfo{19, D<&ISslConnection::FlushSessionCache>, "FlushSessionCache"}, - FunctionInfo{20, D<&ISslConnection::SetRenegotiationMode>, "SetRenegotiationMode"}, - FunctionInfo{21, D<&ISslConnection::GetRenegotiationMode>, "GetRenegotiationMode"}, - FunctionInfo{22, D<&ISslConnection::SetOption>, "SetOption"}, - FunctionInfo{23, D<&ISslConnection::GetOption>, "GetOption"}, - FunctionInfo{24, nullptr, "GetVerifyCertErrors"}, - FunctionInfo{25, nullptr, "GetCipherInfo"}, - FunctionInfo{26, D<&ISslConnection::SetNextAlpnProto>, "SetNextAlpnProto"}, - FunctionInfo{27, D<&ISslConnection::GetNextAlpnProto>, "GetNextAlpnProto"}, - FunctionInfo{28, nullptr, "SetDtlsSocketDescriptor"}, - FunctionInfo{29, nullptr, "GetDtlsHandshakeTimeout"}, - FunctionInfo{30, nullptr, "SetPrivateOption"}, - FunctionInfo{31, nullptr, "SetSrtpCiphers"}, - FunctionInfo{32, nullptr, "GetSrtpCipher"}, - FunctionInfo{33, nullptr, "ExportKeyingMaterial"}, - FunctionInfo{34, nullptr, "SetIoTimeout"}, - FunctionInfo{35, nullptr, "GetIoTimeout"} - ); + return HandlerTableGenerateWithFind(key, functions); } ~ISslConnection() { @@ -429,6 +392,44 @@ private: R_SUCCEED(); } + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, D<&ISslConnection::SetSocketDescriptor>, "SetSocketDescriptor"}, + FunctionInfo{1, D<&ISslConnection::SetHostName>, "SetHostName"}, + FunctionInfo{2, D<&ISslConnection::SetVerifyOption>, "SetVerifyOption"}, + FunctionInfo{3, D<&ISslConnection::SetIoMode>, "SetIoMode"}, + FunctionInfo{4, D<&ISslConnection::GetSocketDescriptor>, "GetSocketDescriptor"}, + FunctionInfo{5, D<&ISslConnection::GetHostName>, "GetHostName"}, + FunctionInfo{6, nullptr, "GetVerifyOption"}, + FunctionInfo{7, D<&ISslConnection::GetIoMode>, "GetIoMode"}, + FunctionInfo{8, D<&ISslConnection::DoHandshake>, "DoHandshake"}, + FunctionInfo{9, &ISslConnection::DoHandshakeGetServerCert, "DoHandshakeGetServerCert"}, + FunctionInfo{10, D<&ISslConnection::Read>, "Read"}, + FunctionInfo{11, D<&ISslConnection::Write>, "Write"}, + FunctionInfo{12, D<&ISslConnection::Pending>, "Pending"}, + FunctionInfo{13, D<&ISslConnection::Peek>, "Peek"}, + FunctionInfo{14, D<&ISslConnection::Poll>, "Poll"}, + FunctionInfo{15, D<&ISslConnection::GetVerifyCertError>, "GetVerifyCertError"}, + FunctionInfo{16, D<&ISslConnection::GetNeededServerCertBufferSize>, "GetNeededServerCertBufferSize"}, + FunctionInfo{17, D<&ISslConnection::SetSessionCacheMode>, "SetSessionCacheMode"}, + FunctionInfo{18, D<&ISslConnection::GetSessionCacheMode>, "GetSessionCacheMode"}, + FunctionInfo{19, D<&ISslConnection::FlushSessionCache>, "FlushSessionCache"}, + FunctionInfo{20, D<&ISslConnection::SetRenegotiationMode>, "SetRenegotiationMode"}, + FunctionInfo{21, D<&ISslConnection::GetRenegotiationMode>, "GetRenegotiationMode"}, + FunctionInfo{22, D<&ISslConnection::SetOption>, "SetOption"}, + FunctionInfo{23, D<&ISslConnection::GetOption>, "GetOption"}, + FunctionInfo{24, nullptr, "GetVerifyCertErrors"}, + FunctionInfo{25, nullptr, "GetCipherInfo"}, + FunctionInfo{26, D<&ISslConnection::SetNextAlpnProto>, "SetNextAlpnProto"}, + FunctionInfo{27, D<&ISslConnection::GetNextAlpnProto>, "GetNextAlpnProto"}, + FunctionInfo{28, nullptr, "SetDtlsSocketDescriptor"}, + FunctionInfo{29, nullptr, "GetDtlsHandshakeTimeout"}, + FunctionInfo{30, nullptr, "SetPrivateOption"}, + FunctionInfo{31, nullptr, "SetSrtpCiphers"}, + FunctionInfo{32, nullptr, "GetSrtpCipher"}, + FunctionInfo{33, nullptr, "ExportKeyingMaterial"}, + FunctionInfo{34, nullptr, "SetIoTimeout"}, + FunctionInfo{35, nullptr, "GetIoTimeout"} + ); SslVersion ssl_version; std::shared_ptr shared_data; std::unique_ptr backend; @@ -562,22 +563,10 @@ private: class ISslService final : public ServiceFramework { public: - explicit ISslService(Core::System& system_) - : ServiceFramework{system_, "ssl"}, cert_store{system} {} + explicit ISslService(Core::System& system_) : ServiceFramework{system_, "ssl"}, cert_store{system} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &ISslService::CreateContext, "CreateContext"}, - FunctionInfo{1, nullptr, "GetContextCount"}, - FunctionInfo{2, D<&ISslService::GetCertificates>, "GetCertificates"}, - FunctionInfo{3, D<&ISslService::GetCertificateBufSize>, "GetCertificateBufSize"}, - FunctionInfo{4, nullptr, "DebugIoctl"}, - FunctionInfo{5, &ISslService::SetInterfaceVersion, "SetInterfaceVersion"}, - FunctionInfo{6, nullptr, "FlushSessionCache"}, - FunctionInfo{7, nullptr, "SetDebugOption"}, - FunctionInfo{8, nullptr, "GetDebugOption"}, - FunctionInfo{8, nullptr, "ClearTls12FallbackFlag"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -623,6 +612,18 @@ private: } private: + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &ISslService::CreateContext, "CreateContext"}, + FunctionInfo{1, nullptr, "GetContextCount"}, + FunctionInfo{2, D<&ISslService::GetCertificates>, "GetCertificates"}, + FunctionInfo{3, D<&ISslService::GetCertificateBufSize>, "GetCertificateBufSize"}, + FunctionInfo{4, nullptr, "DebugIoctl"}, + FunctionInfo{5, &ISslService::SetInterfaceVersion, "SetInterfaceVersion"}, + FunctionInfo{6, nullptr, "FlushSessionCache"}, + FunctionInfo{7, nullptr, "SetDebugOption"}, + FunctionInfo{8, nullptr, "GetDebugOption"}, + FunctionInfo{8, nullptr, "ClearTls12FallbackFlag"} + ); CertStore cert_store; }; diff --git a/src/core/hle/service/usb/usb.cpp b/src/core/hle/service/usb/usb.cpp index 5ec69a903d..2b0fb043df 100644 --- a/src/core/hle/service/usb/usb.cpp +++ b/src/core/hle/service/usb/usb.cpp @@ -19,8 +19,7 @@ class IDsInterface final : public ServiceFramework { public: explicit IDsInterface(Core::System& system_) : ServiceFramework{system_, "IDsInterface"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "AddEndpoint"}, FunctionInfo{1, nullptr, "GetSetupEvent"}, FunctionInfo{2, nullptr, "GetSetupPacket"}, @@ -35,6 +34,8 @@ public: FunctionInfo{11, nullptr, "CtrlStall"}, FunctionInfo{12, nullptr, "AppendConfigurationData"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -42,10 +43,11 @@ class IDsRootSession final : public ServiceFramework { public: explicit IDsRootSession(Core::System& system_) : ServiceFramework{system_, "usb:ds"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "OpenDsService"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -54,8 +56,7 @@ public: explicit IClientEpSession(Core::System& system_) : ServiceFramework{system_, "IClientEpSession"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ReOpen"}, FunctionInfo{1, nullptr, "Close"}, FunctionInfo{2, nullptr, "GetCompletionEvent"}, @@ -66,6 +67,8 @@ public: FunctionInfo{7, nullptr, "CreateSmmuSpace"}, FunctionInfo{8, nullptr, "ShareReportRing"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -74,8 +77,7 @@ public: explicit IClientIfSession(Core::System& system_) : ServiceFramework{system_, "IClientIfSession"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetStateChangeEvent"}, FunctionInfo{1, nullptr, "SetInterface"}, FunctionInfo{2, nullptr, "GetInterface"}, @@ -87,6 +89,8 @@ public: FunctionInfo{8, nullptr, "ResetDevice"}, FunctionInfo{9, nullptr, "OpenUsbEp"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -94,8 +98,7 @@ class IClientRootSession final : public ServiceFramework { public: explicit IClientRootSession(Core::System& system_) : ServiceFramework{system_, "usb:hs"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "BindClientProcess"}, FunctionInfo{1, nullptr, "QueryAllInterfaces"}, FunctionInfo{2, nullptr, "QueryAvailableInterfaces"}, @@ -106,6 +109,8 @@ public: FunctionInfo{7, nullptr, "AcquireUsbIf"}, FunctionInfo{8, nullptr, "SetTestMode"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -113,8 +118,7 @@ class IPdSession final : public ServiceFramework { public: explicit IPdSession(Core::System& system_) : ServiceFramework{system_, "IPdSession"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "BindNoticeEvent"}, FunctionInfo{1, nullptr, "UnbindNoticeEvent"}, FunctionInfo{2, nullptr, "GetStatus"}, @@ -123,6 +127,8 @@ public: FunctionInfo{5, nullptr, "DisablePowerRequestNotice"}, FunctionInfo{6, nullptr, "ReplyPowerRequest"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -131,9 +137,7 @@ public: explicit IPdManager(Core::System& system_) : ServiceFramework{system_, "usb:pd"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IPdManager::OpenSession, "OpenSession"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -144,6 +148,10 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IPdManager::OpenSession, "OpenSession"} + ); }; class IPdCradleSession final : public ServiceFramework { @@ -151,8 +159,7 @@ public: explicit IPdCradleSession(Core::System& system_) : ServiceFramework{system_, "IPdCradleSession"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "SetCradleVdo"}, FunctionInfo{1, nullptr, "GetCradleVdo"}, FunctionInfo{2, nullptr, "ResetCradleUsbHub"}, @@ -163,6 +170,8 @@ public: FunctionInfo{7, nullptr, "EnableCradleRecovery"}, FunctionInfo{8, nullptr, "DisableCradleRecovery"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -171,9 +180,7 @@ public: explicit IPdCradleManager(Core::System& system_) : ServiceFramework{system_, "usb:pd:c"} {} FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, - FunctionInfo{0, &IPdCradleManager::OpenCradleSession, "OpenCradleSession"} - ); + return HandlerTableGenerateWithFind(key, functions); } private: @@ -184,14 +191,17 @@ private: rb.Push(ResultSuccess); rb.PushIpcInterface(ctx, system); } + + static constexpr auto functions = CreateStaticMap( + FunctionInfo{0, &IPdCradleManager::OpenCradleSession, "OpenCradleSession"} + ); }; class IPmMainService final : public ServiceFramework { public: explicit IPmMainService(Core::System& system_) : ServiceFramework{system_, "usb:pm"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetPowerEvent"}, FunctionInfo{1, nullptr, "GetPowerState"}, FunctionInfo{2, nullptr, "GetDataEvent"}, @@ -199,6 +209,8 @@ public: FunctionInfo{4, nullptr, "SetDiagData"}, FunctionInfo{5, nullptr, "GetDiagData"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -206,10 +218,11 @@ class IPdManufactureManager final : public ServiceFramework { public: explicit IQdbManager(Core::System& system_) : ServiceFramework{system_, "usb:qdb"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "ImportQuirkDevices"}, FunctionInfo{1, nullptr, "HasQuirk"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } }; @@ -229,11 +243,12 @@ class IPmObserverService final : public ServiceFramework { public: explicit IPmObserverService(Core::System& system_) : ServiceFramework{system_, "usb:obsv"} {} - FunctionInfoBase const* FindRequest(u32 key) override { - return HandlerTableGenerateWithFind(key, + static constexpr auto functions = CreateStaticMap( FunctionInfo{0, nullptr, "GetTopologyChangeEvent"}, FunctionInfo{1, nullptr, "GetFlattenedTopology"} ); + FunctionInfoBase const* FindRequest(u32 key) override { + return HandlerTableGenerateWithFind(key, functions); } };