Browse Source
[hle/service] stub missing homebrew services, fix NPad/caps crashes (#4264)
[hle/service] stub missing homebrew services, fix NPad/caps crashes (#4264)
Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- this PR adds various missing services (acc:e, accpull/4270/headu1) to expand homebrew compatibility notably this also fixes NPad related crashes due to nullref Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4264 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
60 changed files with 2063 additions and 571 deletions
-
16src/core/CMakeLists.txt
-
417src/core/hle/service/acc/acc.cpp
-
25src/core/hle/service/acc/acc_aa.cpp
-
17src/core/hle/service/acc/acc_aa.h
-
83src/core/hle/service/acc/acc_su.cpp
-
17src/core/hle/service/acc/acc_su.h
-
49src/core/hle/service/acc/acc_u0.cpp
-
17src/core/hle/service/acc/acc_u0.h
-
59src/core/hle/service/acc/acc_u1.cpp
-
17src/core/hle/service/acc/acc_u1.h
-
27src/core/hle/service/apm/apm_controller.cpp
-
176src/core/hle/service/audio/audio.cpp
-
6src/core/hle/service/audio/audio_renderer_manager.cpp
-
50src/core/hle/service/bpc/bpc.cpp
-
42src/core/hle/service/caps/caps.cpp
-
18src/core/hle/service/caps/caps_manager.cpp
-
91src/core/hle/service/es/es.cpp
-
79src/core/hle/service/friend/friend.cpp
-
24src/core/hle/service/glue/ectx.cpp
-
15src/core/hle/service/glue/ectx.h
-
34src/core/hle/service/glue/glue.cpp
-
10src/core/hle/service/glue/notif.cpp
-
18src/core/hle/service/grc/grc.cpp
-
73src/core/hle/service/hid/hid.cpp
-
24src/core/hle/service/hid/hid_system_server.cpp
-
8src/core/hle/service/hle_ipc.h
-
16src/core/hle/service/lm/lm.cpp
-
6src/core/hle/service/mii/mii.cpp
-
86src/core/hle/service/mnpp/mnpp.cpp
-
3src/core/hle/service/mnpp/mnpp.h
-
51src/core/hle/service/mnpp/mnpp_app.cpp
-
15src/core/hle/service/ncm/ncm.cpp
-
43src/core/hle/service/ngc/ngc.cpp
-
14src/core/hle/service/nim/nim.cpp
-
55src/core/hle/service/ns/ns.cpp
-
6src/core/hle/service/ns/query_service.cpp
-
85src/core/hle/service/nvdrv/nvdrv.cpp
-
30src/core/hle/service/olsc/olsc.cpp
-
26src/core/hle/service/pcie/pcie.cpp
-
26src/core/hle/service/pcv/pcv.cpp
-
103src/core/hle/service/psc/psc.cpp
-
2src/core/hle/service/psc/time/service_manager.cpp
-
35src/core/hle/service/ptm/ptm.cpp
-
28src/core/hle/service/ro/ro.cpp
-
6src/core/hle/service/services.cpp
-
64src/core/hle/service/sockets/bsd.cpp
-
15src/core/hle/service/sockets/bsd.h
-
17src/core/hle/service/sockets/sfdnsres.cpp
-
9src/core/hle/service/sockets/sfdnsres.h
-
66src/core/hle/service/sockets/sockets.cpp
-
20src/core/hle/service/spl/spl.cpp
-
3src/core/hle/service/spl/spl.h
-
36src/core/hle/service/tma/tma.cpp
-
15src/core/hle/service/tma/tma.h
-
48src/core/hle/service/usb/usb.cpp
-
260src/core/hle/service/wlan/wlan.cpp
-
12src/core/hle/service/wlan/wlan.h
-
5src/hid_core/resources/abstracted_pad/abstract_battery_handler.cpp
-
13src/hid_core/resources/npad/npad.cpp
-
3src/hid_core/resources/npad/npad_resource.cpp
@ -1,25 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/acc/acc_aa.h"
|
|||
|
|||
namespace Service::Account { |
|||
|
|||
ACC_AA::ACC_AA(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager> profile_manager_, |
|||
Core::System& system_) |
|||
: Interface(std::move(module_), std::move(profile_manager_), system_, "acc:aa") { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, nullptr, "EnsureCacheAsync"}, |
|||
{1, nullptr, "LoadCache"}, |
|||
{2, nullptr, "GetDeviceAccountId"}, |
|||
{50, nullptr, "RegisterNotificationTokenAsync"}, // 1.0.0 - 6.2.0
|
|||
{51, nullptr, "UnregisterNotificationTokenAsync"}, // 1.0.0 - 6.2.0
|
|||
}; |
|||
// clang-format on
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
ACC_AA::~ACC_AA() = default; |
|||
|
|||
} // namespace Service::Account
|
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/acc/acc.h" |
|||
|
|||
namespace Service::Account { |
|||
|
|||
class ACC_AA final : public Module::Interface { |
|||
public: |
|||
explicit ACC_AA(std::shared_ptr<Module> module_, |
|||
std::shared_ptr<ProfileManager> profile_manager_, Core::System& system_); |
|||
~ACC_AA() override; |
|||
}; |
|||
|
|||
} // namespace Service::Account |
|||
@ -1,83 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/acc/acc_su.h"
|
|||
|
|||
namespace Service::Account { |
|||
|
|||
ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager> profile_manager_, |
|||
Core::System& system_) |
|||
: Interface(std::move(module_), std::move(profile_manager_), system_, "acc:su") { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, &ACC_SU::GetUserCount, "GetUserCount"}, |
|||
{1, &ACC_SU::GetUserExistence, "GetUserExistence"}, |
|||
{2, &ACC_SU::ListAllUsers, "ListAllUsers"}, |
|||
{3, &ACC_SU::ListOpenUsers, "ListOpenUsers"}, |
|||
{4, &ACC_SU::GetLastOpenedUser, "GetLastOpenedUser"}, |
|||
{5, &ACC_SU::GetProfile, "GetProfile"}, |
|||
{6, nullptr, "GetProfileDigest"}, |
|||
{50, &ACC_SU::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, |
|||
{51, &ACC_SU::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, |
|||
{52, &ACC_SU::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, // 19.0.0+
|
|||
{60, &ACC_SU::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, |
|||
{99, nullptr, "DebugActivateOpenContextRetention"}, |
|||
{100, nullptr, "GetUserRegistrationNotifier"}, |
|||
{101, nullptr, "GetUserStateChangeNotifier"}, |
|||
{102, &ACC_SU::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, |
|||
{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, |
|||
{104, nullptr, "GetProfileUpdateNotifier"}, |
|||
{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, |
|||
{106, nullptr, "GetProfileSyncNotifier"}, |
|||
{110, &ACC_SU::StoreSaveDataThumbnailSystem, "StoreSaveDataThumbnail"}, |
|||
{111, nullptr, "ClearSaveDataThumbnail"}, |
|||
{112, nullptr, "LoadSaveDataThumbnail"}, |
|||
{113, nullptr, "GetSaveDataThumbnailExistence"}, |
|||
{120, nullptr, "ListOpenUsersInApplication"}, |
|||
{130, nullptr, "ActivateOpenContextRetention"}, |
|||
{140, &ACC_SU::ListQualifiedUsers, "ListQualifiedUsers"}, |
|||
{150, nullptr, "AuthenticateApplicationAsync"}, |
|||
{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, |
|||
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, |
|||
{190, nullptr, "GetUserLastOpenedApplication"}, |
|||
{191, nullptr, "ActivateOpenContextHolder"}, |
|||
{200, &ACC_SU::BeginUserRegistration, "BeginUserRegistration"}, |
|||
{201, &ACC_SU::CompleteUserRegistration, "CompleteUserRegistration"}, |
|||
{202, nullptr, "CancelUserRegistration"}, |
|||
{203, &ACC_SU::DeleteUser, "DeleteUser"}, |
|||
{204, &ACC_SU::SetUserPosition, "SetUserPosition"}, |
|||
{205, &ACC_SU::GetProfileEditor, "GetProfileEditor"}, |
|||
{206, nullptr, "CompleteUserRegistrationForcibly"}, |
|||
{210, nullptr, "CreateFloatingRegistrationRequest"}, |
|||
{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"}, |
|||
{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"}, |
|||
{230, nullptr, "AuthenticateServiceAsync"}, |
|||
{250, &ACC_SU::GetBaasAccountAdministrator, "GetBaasAccountAdministrator"}, |
|||
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, |
|||
{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, |
|||
{299, nullptr, "SuspendBackgroundDaemon"}, |
|||
{400, nullptr, "SetPinCode"}, // 18.0.0+
|
|||
{401, &ACC_SU::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+
|
|||
{402, nullptr, "GetPinCode"}, // 18.0.0+
|
|||
{410, nullptr, "GetPinCodeErrorCount"}, // 18.0.0+
|
|||
{411, nullptr, "ResetPinCodeErrorCount"}, // 18.0.0+
|
|||
{412, nullptr, "IncrementPinCodeErrorCount"}, // 18.0.0+
|
|||
{900, nullptr, "SetUserUnqualifiedForDebug"}, |
|||
{901, nullptr, "UnsetUserUnqualifiedForDebug"}, |
|||
{902, nullptr, "ListUsersUnqualifiedForDebug"}, |
|||
{910, nullptr, "RefreshFirmwareSettingsForDebug"}, |
|||
{997, nullptr, "DebugInvalidateTokenCacheForUser"}, |
|||
{998, nullptr, "DebugSetUserStateClose"}, |
|||
{999, nullptr, "DebugSetUserStateOpen"}, |
|||
}; |
|||
// clang-format on
|
|||
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
ACC_SU::~ACC_SU() = default; |
|||
|
|||
} // namespace Service::Account
|
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/acc/acc.h" |
|||
|
|||
namespace Service::Account { |
|||
|
|||
class ACC_SU final : public Module::Interface { |
|||
public: |
|||
explicit ACC_SU(std::shared_ptr<Module> module_, |
|||
std::shared_ptr<ProfileManager> profile_manager_, Core::System& system_); |
|||
~ACC_SU() override; |
|||
}; |
|||
|
|||
} // namespace Service::Account |
|||
@ -1,49 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/acc/acc_u0.h"
|
|||
|
|||
namespace Service::Account { |
|||
|
|||
ACC_U0::ACC_U0(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager> profile_manager_, |
|||
Core::System& system_) |
|||
: Interface(std::move(module_), std::move(profile_manager_), system_, "acc:u0") { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, &ACC_U0::GetUserCount, "GetUserCount"}, |
|||
{1, &ACC_U0::GetUserExistence, "GetUserExistence"}, |
|||
{2, &ACC_U0::ListAllUsers, "ListAllUsers"}, |
|||
{3, &ACC_U0::ListOpenUsers, "ListOpenUsers"}, |
|||
{4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"}, |
|||
{5, &ACC_U0::GetProfile, "GetProfile"}, |
|||
{6, nullptr, "GetProfileDigest"}, // 3.0.0+
|
|||
{50, &ACC_U0::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, |
|||
{51, &ACC_U0::TrySelectUserWithoutInteractionDeprecated, "TrySelectUserWithoutInteractionDeprecated"}, |
|||
{52, &ACC_U0::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, |
|||
{60, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 5.0.0 - 5.1.0
|
|||
{99, nullptr, "DebugActivateOpenContextRetention"}, // 6.0.0+
|
|||
{100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"}, |
|||
{101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"}, |
|||
{102, nullptr, "AuthenticateApplicationAsync"}, |
|||
{103, nullptr, "CheckNetworkServiceAvailabilityAsync"}, // 4.0.0+
|
|||
{110, &ACC_U0::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, |
|||
{111, nullptr, "ClearSaveDataThumbnail"}, |
|||
{120, nullptr, "CreateGuestLoginRequest"}, |
|||
{130, nullptr, "LoadOpenContext"}, // 5.0.0+
|
|||
{131, &ACC_U0::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, // 6.0.0+
|
|||
{140, &ACC_U0::InitializeApplicationInfoRestricted, "InitializeApplicationInfoRestricted"}, // 6.0.0+
|
|||
{141, &ACC_U0::ListQualifiedUsers, "ListQualifiedUsers"}, // 6.0.0+
|
|||
{150, &ACC_U0::IsUserAccountSwitchLocked, "IsUserAccountSwitchLocked"}, // 6.0.0+
|
|||
{160, &ACC_U0::InitializeApplicationInfoV2, "InitializeApplicationInfoV2"}, |
|||
}; |
|||
// clang-format on
|
|||
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
ACC_U0::~ACC_U0() = default; |
|||
|
|||
} // namespace Service::Account
|
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/acc/acc.h" |
|||
|
|||
namespace Service::Account { |
|||
|
|||
class ACC_U0 final : public Module::Interface { |
|||
public: |
|||
explicit ACC_U0(std::shared_ptr<Module> module_, |
|||
std::shared_ptr<ProfileManager> profile_manager_, Core::System& system_); |
|||
~ACC_U0() override; |
|||
}; |
|||
|
|||
} // namespace Service::Account |
|||
@ -1,59 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/acc/acc_u1.h"
|
|||
|
|||
namespace Service::Account { |
|||
|
|||
ACC_U1::ACC_U1(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager> profile_manager_, |
|||
Core::System& system_) |
|||
: Interface(std::move(module_), std::move(profile_manager_), system_, "acc:u1") { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, &ACC_U1::GetUserCount, "GetUserCount"}, |
|||
{1, &ACC_U1::GetUserExistence, "GetUserExistence"}, |
|||
{2, &ACC_U1::ListAllUsers, "ListAllUsers"}, |
|||
{3, &ACC_U1::ListOpenUsers, "ListOpenUsers"}, |
|||
{4, &ACC_U1::GetLastOpenedUser, "GetLastOpenedUser"}, |
|||
{5, &ACC_U1::GetProfile, "GetProfile"}, |
|||
{6, nullptr, "GetProfileDigest"}, |
|||
{50, &ACC_U1::IsUserRegistrationRequestPermitted, "IsUserRegistrationRequestPermitted"}, |
|||
{51, &ACC_U1::TrySelectUserWithoutInteraction, "TrySelectUserWithoutInteraction"}, |
|||
{60, &ACC_U1::ListOpenContextStoredUsers, "ListOpenContextStoredUsers"}, |
|||
{99, nullptr, "DebugActivateOpenContextRetention"}, |
|||
{100, nullptr, "GetUserRegistrationNotifier"}, |
|||
{101, nullptr, "GetUserStateChangeNotifier"}, |
|||
{102, &ACC_U1::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"}, |
|||
{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"}, |
|||
{104, nullptr, "GetProfileUpdateNotifier"}, |
|||
{105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, |
|||
{106, nullptr, "GetProfileSyncNotifier"}, |
|||
{110, &ACC_U1::StoreSaveDataThumbnailApplication, "StoreSaveDataThumbnail"}, |
|||
{111, nullptr, "ClearSaveDataThumbnail"}, |
|||
{112, nullptr, "LoadSaveDataThumbnail"}, |
|||
{113, nullptr, "GetSaveDataThumbnailExistence"}, |
|||
{120, nullptr, "ListOpenUsersInApplication"}, |
|||
{130, nullptr, "ActivateOpenContextRetention"}, |
|||
{140, &ACC_U1::ListQualifiedUsers, "ListQualifiedUsers"}, |
|||
{150, nullptr, "AuthenticateApplicationAsync"}, |
|||
{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"}, |
|||
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"}, |
|||
{190, nullptr, "GetUserLastOpenedApplication"}, |
|||
{191, nullptr, "ActivateOpenContextHolder"}, |
|||
{401, &ACC_U1::GetPinCodeLength, "GetPinCodeLength"}, // 18.0.0+
|
|||
{402, nullptr, "GetPinCode"}, // 18.0.0+
|
|||
{997, nullptr, "DebugInvalidateTokenCacheForUser"}, |
|||
{998, nullptr, "DebugSetUserStateClose"}, |
|||
{999, nullptr, "DebugSetUserStateOpen"}, |
|||
}; |
|||
// clang-format on
|
|||
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
ACC_U1::~ACC_U1() = default; |
|||
|
|||
} // namespace Service::Account
|
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/acc/acc.h" |
|||
|
|||
namespace Service::Account { |
|||
|
|||
class ACC_U1 final : public Module::Interface { |
|||
public: |
|||
explicit ACC_U1(std::shared_ptr<Module> module_, |
|||
std::shared_ptr<ProfileManager> profile_manager_, Core::System& system_); |
|||
~ACC_U1() override; |
|||
}; |
|||
|
|||
} // namespace Service::Account |
|||
@ -0,0 +1,86 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "common/logging.h"
|
|||
#include "core/hle/service/ipc_helpers.h"
|
|||
#include "core/hle/service/mnpp/mnpp.h"
|
|||
#include "core/hle/service/server_manager.h"
|
|||
#include "core/hle/service/service.h"
|
|||
|
|||
namespace Service::MNPP { |
|||
|
|||
class MNPP_APP final : public ServiceFramework<MNPP_APP> { |
|||
public: |
|||
explicit MNPP_APP(Core::System& system_) : ServiceFramework{system_, "mnpp:app"} { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, &MNPP_APP::Cmd0, "Cmd0"}, |
|||
{1, &MNPP_APP::Cmd1, "Cmd1"}, |
|||
}; |
|||
// clang-format on
|
|||
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
private: |
|||
void Cmd0(HLERequestContext& ctx) { |
|||
LOG_WARNING(Service_MNPP, "(STUBBED) called"); |
|||
|
|||
IPC::ResponseBuilder rb{ctx, 2}; |
|||
rb.Push(ResultSuccess); |
|||
} |
|||
|
|||
void Cmd1(HLERequestContext& ctx) { |
|||
LOG_WARNING(Service_MNPP, "(STUBBED) called"); |
|||
|
|||
IPC::ResponseBuilder rb{ctx, 2}; |
|||
rb.Push(ResultSuccess); |
|||
} |
|||
}; |
|||
|
|||
class MNPP_SYS final : public ServiceFramework<MNPP_SYS> { |
|||
public: |
|||
explicit MNPP_SYS(Core::System& system_) : ServiceFramework{system_, "mnpp:sys"} { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, nullptr, "Cmd0"}, |
|||
{10, nullptr, "Cmd10"}, |
|||
{100, nullptr, "Cmd100"}, |
|||
{200, nullptr, "Cmd200"}, |
|||
{300, nullptr, "Cmd300"}, |
|||
{400, nullptr, "Cmd400"}, |
|||
}; |
|||
// clang-format on
|
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class MNPP_WEB final : public ServiceFramework<MNPP_WEB> { |
|||
public: |
|||
explicit MNPP_WEB(Core::System& system_) : ServiceFramework{system_, "mnpp:web"} { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, nullptr, "Cmd0"}, |
|||
{1, nullptr, "Cmd1"}, |
|||
{10, nullptr, "Cmd10"}, |
|||
{20, nullptr, "Cmd20"}, |
|||
{100, nullptr, "Cmd100"}, |
|||
}; |
|||
// clang-format on
|
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
void LoopProcess(Core::System& system) { |
|||
auto server_manager = std::make_unique<ServerManager>(system); |
|||
|
|||
server_manager->RegisterNamedService("mnpp:app", std::make_shared<MNPP_APP>(system)); |
|||
server_manager->RegisterNamedService("mnpp:sys", std::make_shared<MNPP_SYS>(system)); |
|||
server_manager->RegisterNamedService("mnpp:web", std::make_shared<MNPP_WEB>(system)); |
|||
ServerManager::RunServer(std::move(server_manager)); |
|||
} |
|||
|
|||
} // namespace Service::MNPP
|
|||
@ -1,3 +1,6 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
@ -1,51 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "common/logging.h"
|
|||
#include "core/hle/service/ipc_helpers.h"
|
|||
#include "core/hle/service/mnpp/mnpp_app.h"
|
|||
#include "core/hle/service/server_manager.h"
|
|||
#include "core/hle/service/service.h"
|
|||
|
|||
namespace Service::MNPP { |
|||
|
|||
class MNPP_APP final : public ServiceFramework<MNPP_APP> { |
|||
public: |
|||
explicit MNPP_APP(Core::System& system_) : ServiceFramework{system_, "mnpp:app"} { |
|||
// clang-format off
|
|||
static const FunctionInfo functions[] = { |
|||
{0, &MNPP_APP::Unknown0, "unknown0"}, |
|||
{1, &MNPP_APP::Unknown1, "unknown1"}, |
|||
}; |
|||
// clang-format on
|
|||
|
|||
RegisterHandlers(functions); |
|||
} |
|||
|
|||
private: |
|||
void Unknown0(HLERequestContext& ctx) { |
|||
LOG_WARNING(Service_MNPP, "(STUBBED) called"); |
|||
|
|||
IPC::ResponseBuilder rb{ctx, 2}; |
|||
rb.Push(ResultSuccess); |
|||
} |
|||
|
|||
void Unknown1(HLERequestContext& ctx) { |
|||
LOG_WARNING(Service_MNPP, "(STUBBED) called"); |
|||
|
|||
IPC::ResponseBuilder rb{ctx, 2}; |
|||
rb.Push(ResultSuccess); |
|||
} |
|||
}; |
|||
|
|||
void LoopProcess(Core::System& system) { |
|||
auto server_manager = std::make_unique<ServerManager>(system); |
|||
|
|||
server_manager->RegisterNamedService("mnpp:app", std::make_shared<MNPP_APP>(system)); |
|||
ServerManager::RunServer(std::move(server_manager)); |
|||
} |
|||
|
|||
} // namespace Service::MNPP
|
|||
@ -0,0 +1,36 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core.h"
|
|||
#include "core/hle/result.h"
|
|||
#include "core/hle/service/tma/tma.h"
|
|||
#include "core/hle/service/ipc_helpers.h"
|
|||
#include "core/hle/service/cmif_serialization.h"
|
|||
#include "core/hle/service/cmif_types.h"
|
|||
#include "core/hle/service/service.h"
|
|||
#include "core/hle/service/server_manager.h"
|
|||
|
|||
namespace Service::TMA { |
|||
|
|||
class HTC_TENV final : public ServiceFramework<HTC_TENV> { |
|||
public: |
|||
explicit HTC_TENV(Core::System& system_) |
|||
: ServiceFramework{system_, "htc:tenv"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{0, nullptr, "GetServiceInterface"}, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
void LoopProcess(Core::System& system) { |
|||
auto server_manager = std::make_unique<ServerManager>(system); |
|||
server_manager->RegisterNamedService("htc:tenv", std::make_shared<HTC_TENV>(system)); |
|||
ServerManager::RunServer(std::move(server_manager)); |
|||
} |
|||
|
|||
} // namespace Service::TMA
|
|||
@ -0,0 +1,15 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
namespace Core { |
|||
class System; |
|||
} |
|||
|
|||
namespace Service::TMA { |
|||
void LoopProcess(Core::System& system); |
|||
} // namespace Service::TMA |
|||
@ -0,0 +1,260 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
#include "core/core.h"
|
|||
#include "core/hle/result.h"
|
|||
#include "core/hle/service/wlan/wlan.h"
|
|||
#include "core/hle/service/ipc_helpers.h"
|
|||
#include "core/hle/service/cmif_serialization.h"
|
|||
#include "core/hle/service/cmif_types.h"
|
|||
#include "core/hle/service/service.h"
|
|||
#include "core/hle/service/server_manager.h"
|
|||
|
|||
namespace Service::WLAN { |
|||
|
|||
class ILocalManager final : public ServiceFramework<ILocalManager> { |
|||
public: |
|||
explicit ILocalManager(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:lcl"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "OpenMasterMode" }, |
|||
{ 0, nullptr, "OpenMode_2" }, |
|||
{ 1, nullptr, "CloseMasterMode" }, |
|||
{ 1, nullptr, "CloseMode_2" }, |
|||
{ 2, nullptr, "OpenClientMode" }, |
|||
{ 2, nullptr, "GetMacAddress_2" }, |
|||
{ 3, nullptr, "CloseClientMode" }, |
|||
{ 3, nullptr, "CreateBss" }, |
|||
{ 4, nullptr, "OpenSpectatorMode" }, |
|||
{ 4, nullptr, "DestroyBss" }, |
|||
{ 5, nullptr, "CloseSpectatorMode" }, |
|||
{ 5, nullptr, "StartScan_2" }, |
|||
{ 6, nullptr, "GetMacAddress_2" }, |
|||
{ 6, nullptr, "StopScan_2" }, |
|||
{ 7, nullptr, "CreateBss" }, |
|||
{ 7, nullptr, "Connect_2" }, |
|||
{ 8, nullptr, "DestroyBss" }, |
|||
{ 8, nullptr, "CancelConnect_2" }, |
|||
{ 9, nullptr, "StartScan_2" }, |
|||
{ 9, nullptr, "Join" }, |
|||
{ 10, nullptr, "StopScan_2" }, |
|||
{ 10, nullptr, "CancelJoin" }, |
|||
{ 11, nullptr, "Connect_2" }, |
|||
{ 11, nullptr, "Disconnect_2" }, |
|||
{ 12, nullptr, "CancelConnect_2" }, |
|||
{ 12, nullptr, "SetBeaconLostCount" }, |
|||
{ 13, nullptr, "Join" }, |
|||
{ 13, nullptr, "GetSystemEvent_2" }, |
|||
{ 14, nullptr, "CancelJoin" }, |
|||
{ 14, nullptr, "GetConnectionStatus_2" }, |
|||
{ 15, nullptr, "Disconnect_2" }, |
|||
{ 15, nullptr, "GetClientStatus" }, |
|||
{ 16, nullptr, "SetBeaconLostCount" }, |
|||
{ 16, nullptr, "GetBssIndicationEvent" }, |
|||
{ 17, nullptr, "GetSystemEvent_2" }, |
|||
{ 17, nullptr, "GetBssIndicationInfo" }, |
|||
{ 18, nullptr, "GetConnectionStatus_2" }, |
|||
{ 18, nullptr, "GetState_2" }, |
|||
{ 19, nullptr, "GetClientStatus" }, |
|||
{ 19, nullptr, "GetAllowedChannels" }, |
|||
{ 20, nullptr, "GetBssIndicationEvent" }, |
|||
{ 20, nullptr, "AddIe" }, |
|||
{ 21, nullptr, "GetBssIndicationInfo" }, |
|||
{ 21, nullptr, "DeleteIe" }, |
|||
{ 22, nullptr, "GetState_2" }, |
|||
{ 22, nullptr, "PutFrameRaw" }, |
|||
{ 23, nullptr, "GetAllowedChannels" }, |
|||
{ 23, nullptr, "CancelGetFrame" }, |
|||
{ 24, nullptr, "AddIe" }, |
|||
{ 24, nullptr, "CreateRxEntry" }, |
|||
{ 25, nullptr, "DeleteIe" }, |
|||
{ 25, nullptr, "DeleteRxEntry" }, |
|||
{ 26, nullptr, "PutFrameRaw" }, |
|||
{ 26, nullptr, "AddEthertypeToRxEntry" }, |
|||
{ 27, nullptr, "CancelGetFrame" }, |
|||
{ 27, nullptr, "DeleteEthertypeFromRxEntry" }, |
|||
{ 28, nullptr, "CreateRxEntry" }, |
|||
{ 28, nullptr, "AddMatchingDataToRxEntry" }, |
|||
{ 29, nullptr, "DeleteRxEntry" }, |
|||
{ 29, nullptr, "RemoveMatchingDataFromRxEntry" }, |
|||
{ 30, nullptr, "AddEthertypeToRxEntry" }, |
|||
{ 30, nullptr, "GetScanResult_2" }, |
|||
{ 31, nullptr, "DeleteEthertypeFromRxEntry" }, |
|||
{ 31, nullptr, "PutActionFrameOneShot" }, |
|||
{ 32, nullptr, "AddMatchingDataToRxEntry" }, |
|||
{ 32, nullptr, "SetActionFrameWithBeacon" }, |
|||
{ 33, nullptr, "RemoveMatchingDataFromRxEntry" }, |
|||
{ 33, nullptr, "CancelActionFrameWithBeacon" }, |
|||
{ 34, nullptr, "GetScanResult_2" }, |
|||
{ 34, nullptr, "CreateRxEntryForActionFrame" }, |
|||
{ 35, nullptr, "PutActionFrameOneShot" }, |
|||
{ 35, nullptr, "DeleteRxEntryForActionFrame" }, |
|||
{ 36, nullptr, "SetActionFrameWithBeacon" }, |
|||
{ 36, nullptr, "AddSubtypeToRxEntryForActionFrame" }, |
|||
{ 37, nullptr, "CancelActionFrameWithBeacon" }, |
|||
{ 37, nullptr, "DeleteSubtypeFromRxEntryForActionFrame" }, |
|||
{ 38, nullptr, "CreateRxEntryForActionFrame" }, |
|||
{ 38, nullptr, "CancelGetActionFrame" }, |
|||
{ 39, nullptr, "DeleteRxEntryForActionFrame" }, |
|||
{ 39, nullptr, "GetRssi_2" }, |
|||
{ 40, nullptr, "AddSubtypeToRxEntryForActionFrame" }, |
|||
{ 40, nullptr, "SetMaxAssociationNumber" }, |
|||
{ 41, nullptr, "DeleteSubtypeFromRxEntryForActionFrame" }, |
|||
{ 41, nullptr, "Cmd41" }, |
|||
{ 42, nullptr, "CancelGetActionFrame" }, |
|||
{ 42, nullptr, "Cmd42" }, |
|||
{ 43, nullptr, "GetRssi_2" }, |
|||
{ 43, nullptr, "Cmd43" }, |
|||
{ 44, nullptr, "SetMaxAssociationNumber" }, |
|||
{ 45, nullptr, "OpenLcsMasterMode" }, |
|||
{ 46, nullptr, "CloseLcsMasterMode" }, |
|||
{ 47, nullptr, "OpenLcsClientMode" }, |
|||
{ 48, nullptr, "CloseLcsClientMode" }, |
|||
{ 49, nullptr, "GetChannelStats" }, |
|||
{ 50, nullptr, "Cmd50" }, |
|||
{ 51, nullptr, "Cmd51" }, |
|||
{ 52, nullptr, "Cmd52" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class ILocalGetFrame final : public ServiceFramework<ILocalGetFrame> { |
|||
public: |
|||
explicit ILocalGetFrame(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:lg"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "GetFrameRaw" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class ILocalGetActionFrame final : public ServiceFramework<ILocalGetActionFrame> { |
|||
public: |
|||
explicit ILocalGetActionFrame(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:lga"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "GetActionFrame" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class ISocketGetFrame final : public ServiceFramework<ISocketGetFrame> { |
|||
public: |
|||
explicit ISocketGetFrame(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:sg"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "GetFrameRaw" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class ISocketManager final : public ServiceFramework<ISocketManager> { |
|||
public: |
|||
explicit ISocketManager(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:soc"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "PutFrameRaw_2" }, |
|||
{ 1, nullptr, "CancelGetFrame_2" }, |
|||
{ 2, nullptr, "CreateRxEntry_2" }, |
|||
{ 3, nullptr, "DeleteRxEntry_2" }, |
|||
{ 4, nullptr, "AddEthertypeToRxEntry_2" }, |
|||
{ 5, nullptr, "DeleteEthertypeFromRxEntry_2" }, |
|||
{ 6, nullptr, "GetMacAddress_3" }, |
|||
{ 7, nullptr, "SwitchTsfTimerFunction" }, |
|||
{ 8, nullptr, "GetDeltaTimeBetweenSystemAndTsf" }, |
|||
{ 9, nullptr, "RegisterSharedMemory" }, |
|||
{ 10, nullptr, "UnregisterSharedMemory" }, |
|||
{ 11, nullptr, "EnableSharedMemory" }, |
|||
{ 12, nullptr, "SetMulticastFilter" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class IDetectManager final : public ServiceFramework<IDetectManager> { |
|||
public: |
|||
explicit IDetectManager(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:dtc"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "Cmd0" }, |
|||
{ 1, nullptr, "Cmd1" }, |
|||
{ 2, nullptr, "Cmd2" }, |
|||
{ 3, nullptr, "Cmd3" }, |
|||
{ 4, nullptr, "Cmd4" }, |
|||
{ 5, nullptr, "Cmd5" }, |
|||
{ 6, nullptr, "Cmd6" }, |
|||
{ 7, nullptr, "Cmd7" }, |
|||
{ 8, nullptr, "Cmd8" }, |
|||
{ 9, nullptr, "Cmd9" }, |
|||
{ 10, nullptr, "Cmd10" }, |
|||
{ 11, nullptr, "Cmd11" }, |
|||
{ 12, nullptr, "Cmd12" }, |
|||
{ 13, nullptr, "Cmd13" }, |
|||
{ 14, nullptr, "Cmd14" }, |
|||
{ 15, nullptr, "Cmd15" }, |
|||
{ 16, nullptr, "Cmd16" }, |
|||
{ 17, nullptr, "Cmd17" }, |
|||
{ 18, nullptr, "Cmd18" }, |
|||
{ 19, nullptr, "Cmd19" }, |
|||
{ 20, nullptr, "Cmd20" }, |
|||
{ 21, nullptr, "Cmd21" }, |
|||
{ 22, nullptr, "Cmd22" }, |
|||
{ 23, nullptr, "Cmd23" }, |
|||
{ 24, nullptr, "Cmd24" }, |
|||
{ 25, nullptr, "Cmd25" }, |
|||
{ 26, nullptr, "Cmd26" }, |
|||
{ 27, nullptr, "Cmd27" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class IPrivateServiceCreator final : public ServiceFramework<IPrivateServiceCreator> { |
|||
public: |
|||
explicit IPrivateServiceCreator(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:p"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "CreateWirelessCommunicationService" }, |
|||
{ 1, nullptr, "CreatePrivateWirelessCommunicationService" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
class ISfDriverServiceCreator final : public ServiceFramework<ISfDriverServiceCreator> { |
|||
public: |
|||
explicit ISfDriverServiceCreator(Core::System& system_) |
|||
: ServiceFramework{system_, "wlan:nd"} |
|||
{ |
|||
static const FunctionInfo functions[] = { |
|||
{ 0, nullptr, "CreateDriverService" }, |
|||
}; |
|||
RegisterHandlers(functions); |
|||
} |
|||
}; |
|||
|
|||
void LoopProcess(Core::System& system) { |
|||
auto server_manager = std::make_unique<ServerManager>(system); |
|||
server_manager->RegisterNamedService("wlan:lcl", std::make_shared<ILocalManager>(system)); |
|||
server_manager->RegisterNamedService("wlan:lg", std::make_shared<ILocalGetFrame>(system)); |
|||
server_manager->RegisterNamedService("wlan:lga", std::make_shared<ILocalGetActionFrame>(system)); |
|||
server_manager->RegisterNamedService("wlan:sg", std::make_shared<ISocketGetFrame>(system)); |
|||
server_manager->RegisterNamedService("wlan:soc", std::make_shared<ISocketManager>(system)); |
|||
server_manager->RegisterNamedService("wlan:dtc", std::make_shared<IDetectManager>(system)); |
|||
server_manager->RegisterNamedService("wlan:p", std::make_shared<IPrivateServiceCreator>(system)); |
|||
server_manager->RegisterNamedService("wlan:nd", std::make_shared<ISfDriverServiceCreator>(system)); |
|||
ServerManager::RunServer(std::move(server_manager)); |
|||
} |
|||
|
|||
} // namespace Service::WLAN
|
|||
@ -0,0 +1,12 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
namespace Core { |
|||
class System; |
|||
} |
|||
|
|||
namespace Service::WLAN { |
|||
void LoopProcess(Core::System& system); |
|||
} // namespace Service::WLAN |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue
