Compare commits

..

20 Commits

Author SHA1 Message Date
lizzie 411dc2054b 2026-09-25 16:58:17
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 16:58:18 +00:00
lizzie f0190a1643 Fix license headers 2026-09-25 16:57:53 +00:00
lizzie f232a351cb 2026-09-25 16:35:03
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 16:35:03 +00:00
lizzie a1fd05e855 2026-09-25 16:26:18
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 16:26:18 +00:00
lizzie 33a6f339a2 2026-09-25 15:57:13
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 15:57:13 +00:00
lizzie 1f784d5541 2026-09-25 15:53:30
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 15:53:30 +00:00
lizzie 9375aeaacf 2026-09-25 15:49:56
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 15:49:56 +00:00
lizzie 9e59b4132a 2026-09-25 15:39:00
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 15:39:00 +00:00
lizzie bebc19da32 [common] Use std::make_unique_for_overwrite<T> in ScratchBuffer, remove polyfill (#4432)
Original `make_unique_for_overwrite.h` is well defined acc. to standard https://en.cppreference.com/cpp/memory/unique_ptr/make_unique, but by now most libc++ supports the function, so no need for polyfill.

Test that this didn't break anything (for example, Megaman game that has video at the start), or anything using VIC/IPC.

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.

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

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4432
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
2026-09-25 07:54:49 +02:00
PavelBARABANOV 99bf8cf51a [am, renderer_vulkan] Fix overlay darkening and SGSR black screen on applets (#4475)
- [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.

-------------------
- Overlay applet: use IsOverlayOpenLocked to pick the Z-index, so the darkening background is only layered above the game while the overlay is open.
- Vulkan: skip the SGSR pass for applet layers to avoid presenting a black frame.
- Partial revert fix crashes in games on UE with the overlay applet enabled.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4475
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: lizzie <lizzie@eden-emu.dev>
2026-09-25 05:29:08 +02:00
xbzk dbeb73ee01 [video_core] cpu buffer fix + kepler uploads / maxwell macro dirty tracking fixes (#4473)
- [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.

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

Aimed to fix two known UE5 crashes: Kepler uploads and Maxwell macros, both caused by CPU/GPU races due dirty tracking issues.

Kepler ComputeInline: preserved dirty tracking across dma continuations and async readback.
Maxwell macros: preserved gpu owned subranges during page granular cpu uploads.
DiscardWrite: stopped clearing neighboring macro arguments by rounding up ranges.
DMA Step: improved continuation aware dirty sampling.

To the Ender Magnolia crew (maybe 1 or 2 persons): This will fix the dash crash, and the random / shackled beast vaper crashes.

There are some more UE5 issues to go next.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4473
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2026-09-24 18:44:14 +02:00
PavelBARABANOV cb73a4dcc7 [renderer_vulkan] Skip post-processing on applet layers (#4474)
- [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.

-------------------
Detect applet layers via the absence of the Recording bit in layer_stack_mask (only AppletId::Application sets it) and skip PostProcessChain creation and application for them.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4474
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: lizzie <lizzie@eden-emu.dev>
2026-09-24 02:48:46 +02:00
lizzie 278f411dad [frontend] Unify cmdline parsing (#4424)
Addresses #4383.

Makes it so both the Qt and SDL frontends now share the same options (bar `-hlaunch` and `-qlaunch`).

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.

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

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4424
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
2026-09-23 14:51:51 +02:00
lizzie 3d37a816c6 [glsl] fix clang 23 build error for unused function SetDefinition (#4389)
Reported by @gixel

> unused function template SetDefinition  in: src/shader_recompiler/backend/glsl/emit_glsl.cpp:32:6: error: unused function template 'SetDefinition' [-Werror,-Wunused-template]

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

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

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4389
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
2026-09-23 14:51:18 +02:00
lizzie a25e32676f [hle] Use correct audren:d service framework (#4472)
Trivial change.

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.

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

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4472
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
2026-09-23 14:39:12 +02:00
Exverge 38df54edfe [common/sparse_large_vector] decommit unused pages + fix first page in zeroed region (#4471)
- [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.

-------------------
Fixes a bug where the first page of a zeroed out region would not be properly zeroed, and now frees unused memory.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4471
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2026-09-23 13:52:29 +02:00
PavelBARABANOV 3266c20e3f [ips_layer] read magic from IPS file and fix EOF check (#4469)
- [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.

-------------------
PatchIPS was reading the magic bytes from the target file instead
of the IPS patch, and IsEOF used a strict > comparison that never
matched for 3-byte IPS EOF markers. This caused IPS patches to be
silently skipped, breaking the Russian localization mod for
Persona 5.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4469
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
2026-09-23 00:36:47 +02:00
Eden CI 9cd24e85c2 [dist, android] Update translations from Transifex for Sep 21 (#4466)
Automatic translation update for Sep 21

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4466
2026-09-21 19:25:54 +02:00
xbzk 74b5e10dc5 [native] doesUpdateMatchProgram update mask fix (#4465)
- [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.

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

Old silly bug i've been neglecting:
On Android, installing content to NAND, under some content id conditions (ie MK8D DLC), base/update IDs mismatch, and UI prompts "The content that you selected does not match this game. Install anyway?
Useless, yet fixed.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4465
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2026-09-20 22:56:06 +02:00
xbzk a277b62fe4 [fs] revert #4319 savedata_factory changes (#4462)
- [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 one reverts part of the PR 4319 which was aimed to allow child titles to inherit bundle settings.
The fix seems good so far, but by applying it to save folders caused a trap:
Now child's save folders move to bundle folder, hence saves will vanish, and the android/qt save tools are still pointing to old folders.
Since the save part was only a compliance fix, instead of fiddle in master i'd rather revert this part now, then only touch this again if any bug show up.
No worries. I'll be right here waiting.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4462
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2026-09-20 04:40:14 +02:00
139 changed files with 18970 additions and 17790 deletions
+628 -583
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+548 -503
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+550 -508
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+573 -527
View File
File diff suppressed because it is too large Load Diff
+547 -502
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
# Design Overview
Modern game consoles require heavy power to be emulated appropriately. This is why the emulator uses an approach known as HLE (High-Level-Emulation), in a nutshell: Instead of accurately emulating every subsystem that forms part of a component, emulate the resulting visible I/O interface instead.
Modern game consoles require heavy power to emulate. This is why the emulator uses an approach known as HLE (High-Level-Emulation), in a nutshell: Instead of accurately emulating every subsystem that forms part of a component, emulate the resulting visible output of said interface instead.
For example, take a disk write, instead of emulating a proper SD card we instead use the C++ standard library for I/O. Additionally we use the abstractions provided by the `fs` service to "lie" to programs about certain SD card properties. Notably this includes making up sizes for the fake SD card, giving "realistic" values or expected outputs for a given card, and so on. And instead of writing to an actual SD card, the emulator simply writes to a file.
+1 -1
View File
@@ -21,7 +21,7 @@ This contains documentation created by developers, build instructions, guideline
- Subsystems:
- **[Design Overview](./DesignOverview.md)**
- **[Dynarmic](./dynarmic/README.md)**
- **[HOS Kernel](./HosKernel.md)**
- **[Subsystem: HLE](./SubsystemHLE.md)**
- **[Settings](./Settings.md)**
## Policies
+42 -1
View File
@@ -1,4 +1,6 @@
# HOS Kernel
# Subsystem: HLE
## HOS Kernel
In brief, the HOS kernel is a microkernel, all services and programs run in userspace, the primary way to do communication between these is via `HIPC` (not covered here); otherwise most of the primitives reside in the forms of syscalls invoked via `svc #imm`. The kernel supports both 32-bit and 64-bit programs, and has the capacity to use 32, 36 and 39 bits of address space for spawned processes. Most of the networking stack is based off FreeBSD's network stack.
@@ -29,3 +31,42 @@ Every process keeps it's own tracking of the following structures:
The emulator willingly restricts itself to only use 4 threads (to emulate 4 cores), this is because most existing applications do not benefit greatly from the added core count, and in fact can be detrimental due to extra contention. This translates equitatively to about 4 `ArmInterface` slots for each process, these are then redirected to whatever is the last `pc` of the last thread running on the core is meant to be; proceed to run it, then when returning (due to halt or interruption), proceed to reschedule the thread.
The scheduler as-is isn't 100% faithful to the original (for example the original is cooperative and not preemptive), and has great timing variance (especially due to the fact the emulator can run in systems with wildly different timings).
## Services
Consult [SwitchBrew](https://switchbrew.org/) for per-service methods, and implementation details.
All services are instatiated implicitly using `ServiceFramework`. To register a new interface or service, you can inherit from said class, providing additionally a template parameter that references `Self`, for example:
```c++
// Follows as:
// class MyInterface [final] : public ServiceFramework<MyInterface> { ... };
// [final] is optional, but should be used whenever there is no intention of this class itself being inherited.
class IFloatingRegistrationRequest final : public ServiceFramework<IFloatingRegistrationRequest> {
public:
// ctor, you can pass extra parameters here (if so required)
explicit IFloatingRegistrationRequest(Core::System& system_)
: ServiceFramework{system_, "IFloatingRegistrationRequest"}
{}
// Define here your functions and methods, please order them.
// Use FindRequestTipc for TIPC handlers.
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"},
FunctionInfo{101, nullptr, "RegisterUserWithUid"},
FunctionInfo{102, nullptr, "RegisterNetworkServiceAccountAsync", MakeVersionGate({4,0,0})},
FunctionInfo{103, nullptr, "RegisterNetworkServiceAccountWithUidAsync", MakeVersionGate({4,0,0})},
FunctionInfo{110, nullptr, "SetSystemProgramIdentification"},
FunctionInfo{111, nullptr, "EnsureIdTokenCacheAsync"}
);
}
};
```
+33 -21
View File
@@ -1,32 +1,44 @@
# User Handbook - Command Line
There are two main applications, an SDL-based app (`eden-cli`) and a Qt based app (`eden`); both accept command line arguments.
## eden
There are two main applications, an SDL-based app (`eden-cli`) and a Qt based app (`eden`); both accept the same command line arguments.
- `./eden <path>`: Running with a single argument and nothing else, will make the emulator look for the given file and load it, this behavior is similar to `eden-cli`; allows dragging and dropping games into the application.
- `-g <path>`: Alternate way to specify what to load, overrides. However let it be noted that arguments that use `-` will be treated as options/ignored, if your game, for some reason, starts with `-`, in order to safely handle it you may need to specify it as an argument.
- `-f`: Use fullscreen.
- `-u <number>`: Select the index of the user to load as.
- `-input-profile <name>`: Specifies input profile name to use (for player #0 only).
- `--debug/-d`: Enter debug mode, allow gdb stub at port `1234`
- `--config/-c`: Specify alternate configuration file.
- `--fullscreen/-f`: Use fullscreen.
- `--help/-h`: Display help.
- `--game/-g <path>`: Alternate way to specify what to load, overrides. However let it be noted that arguments that use `-` will be treated as options/ignored, if your game, for some reason, starts with `-`, in order to safely handle it you may need to specify it as an argument.
- `--multiplayer/-m`: Specify multiplayer options.
- `--program/-p`: Specify the program arguments to pass (optional).
- `--user/-u <number>`: Specify the user index.
- `--version/-v`: Display version and quit.
- `--input-profile/-i <name>`: Specifies input profile name to use (for player #0 only).
- `--null-render/-n`: Forces the usage of the "Null" render backend irrespective of settings.
- `--filter/-x`: Sets the debug log filter irrespective of settings.
- `--singlecore/-s`: Forces single-core regardless of settings.
Only the Qt frontend supports the following arguments:
- `-qlaunch`: Launch QLaunch.
- `-hlaunch`: Launch homebrew launcher `nx-hbloader`.
- Requires a copy of Atmosphere to be extracted onto `sdmc`.
- This is a shorthand for `<eden folder>/sdmc/atmosphere/hbl.nsp`.
- `-setup`: Launch setup applet.
## eden-cli
`eden` (provided with `--room`), and `eden-room` supports the following options as well:
- `--debug/-d`: Enter debug mode, allow gdb stub at port `1234`
- `--config/-c`: Specify alternate configuration file.
- `--fullscreen/-f`: Set fullscreen.
- `--help/-h`: Display help.
- `--game/-g`: Specify the game to run.
- `--multiplayer/-m`: Specify multiplayer options.
- `--program/-p`: Specify the program arguments to pass (optional).
- `--user/-u`: Specify the user index.
- `--version/-v`: Display version and quit.
- `--input-profile/-i`: Specifies input profile name to use (for player #0 only).
- `--null-render/-n`: Forces the usage of the "Null" render backend irrespective of settings.
- `--filter/-x`: Sets the debug log filter irrespective of settings.
- `--singlecore/-s`: Forces single-core regardless of settings.
- `-n/--room-name`: The name of the room.
- `-d/--room-description`: The room description.
- `-s/--bind-address`: The bind address for the room.
- `-p/--port`: The port used for the room.
- `-m/--max-members`: The maximum number of players for this room.
- `-w/--password`: The password for the room.
- `-g/--preferred-game`: The preferred game for this room.
- `-i/--preferred-game-id`: The preferred game-id for this room.
- `-u/--username`: The username used for announce.
- `-t/--token`: The token used for announce.
- `-a/--web-api-url`: yuzu Web API url.
- `-b/--ban-list-file`: The file for storing the room ban list.
- `-l/--log-file`: The file for storing the room log.
- `-h/--help`: Display this help and exit.
- `-v/--version`: Output version information and exit.
+2 -2
View File
@@ -788,7 +788,7 @@ int Java_org_yuzu_yuzu_1emu_NativeLibrary_installFileToNand(JNIEnv* env, jobject
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_doesUpdateMatchProgram(JNIEnv* env, jobject jobj,
jstring jprogramId,
jstring jupdatePath) {
u64 program_id = EmulationSession::GetProgramId(env, jprogramId);
const u64 program_id = FileSys::GetBaseTitleID(EmulationSession::GetProgramId(env, jprogramId));
std::string updatePath = Common::Android::GetJString(env, jupdatePath);
std::shared_ptr<FileSys::NSP> nsp = std::make_shared<FileSys::NSP>(
EmulationSession::GetInstance().System().GetFilesystem()->OpenFile(
@@ -796,7 +796,7 @@ jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_doesUpdateMatchProgram(JNIEnv* en
for (const auto& item : nsp->GetNCAs()) {
for (const auto& nca_details : item.second) {
if (nca_details.second->GetName().ends_with(".cnmt.nca")) {
auto update_id = nca_details.second->GetTitleId() & ~0xFFFULL;
const auto update_id = FileSys::GetBaseTitleID(nca_details.second->GetTitleId());
if (update_id == program_id) {
return true;
}
@@ -289,6 +289,7 @@
<string name="gpu_driver_fetcher">Obtenedor de controladores de la GPU</string>
<string name="gpu_driver_manager">Gestor de controladores de la GPU</string>
<string name="install_gpu_driver_description">Instale los controladores alternativos para obtener un posible mejor rendimiento o precisión</string>
<string name="post_processing_add">Añadir efecto</string>
<string name="post_processing_open_list">Abrir lista</string>
<string name="post_processing_close_list">Cerrar lista</string>
<string name="post_processing_reset">Restablecer a predeterminado</string>
@@ -318,6 +318,13 @@
<string name="frame_gen_target_rate">Целевая частота кадров</string>
<string name="frame_gen_target_rate_description">Выберите значение под ваш дисплей. Множитель подстроится сам, чтобы его держать, и откатит изменения, если игра начнёт тормозить.</string>
<string name="frame_gen_target_rate_off">Использовать фиксированный множитель</string>
<string name="frame_gen_on">Вкл.</string>
<string name="frame_gen_off">Выкл.</string>
<string name="frame_gen_fixed">Фикс.</string>
<string name="frame_gen_flow_auto">Авто</string>
<string name="frame_gen_quick_description">Включите или выключите генерацию кадров и выберите множитель кадров.</string>
<string name="frame_gen_target_rate_quick_description">Генерация кадров с заданной частотой кадров. Множитель регулируется автоматически.</string>
<string name="frame_gen_flow_scale_quick_description">Разрешение, используемое для оценки движения между кадрами. Меньшие значения экономят время ГПУ.</string>
<string name="frame_gen_queue_target">Целевой размер очереди кадров</string>
<string name="frame_gen_queue_target_description">Сколько готовых кадров может ожидать перед выводом на экран. Более длинные очереди сглаживают скачки ГПУ ценой задержки ввода.</string>
<string name="frame_gen_queue_target_0">Минимальная задержка (Без буферизации)</string>
@@ -328,12 +335,14 @@
<string name="frame_gen_flow_scale">Разрешение оценки движения</string>
<string name="frame_gen_flow_scale_description">Разрешение прохода оптического потока в долях от выходного разрешения. Его понижение — самый дешёвый способ вернуть производительность.</string>
<string name="frame_gen_unsupported">Генерация кадров недоступна</string>
<string name="frame_gen_unsupported_description">В этом ГПУ драйвере отсутствует поддержка модели памяти Vulkan или половинной точности (float16), которая требуется шейдерам Lossless Scaling.</string>
<string name="lossless_scaling_setup_description">Опционально. Укажите свой Lossless.dll для включения генерации кадров позже.</string>
<string name="lossless_scaling_install">Установить Lossless.dll</string>
<string name="lossless_scaling_install_description">Для генерации кадров требуется ваша собственная легальная копия Lossless.dll из Lossless Scaling</string>
<string name="lossless_scaling_replace_description">Выбрать другой файл Lossless.dll</string>
<string name="frame_generation_support">Генерация кадров</string>
<string name="frame_generation_supported">Поддерживается</string>
<string name="frame_generation_unsupported">Не поддерживается (нет модели памяти Vulkan или float16)</string>
<string name="lossless_scaling_description">Предоставьте свою копию Lossless.dll для включения генерации кадров</string>
<string name="lossless_scaling_installed">Установлена</string>
<string name="lossless_scaling_not_installed">Не установлена</string>
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_disclaimer">本软件可以运行用于 Nintendo Switch 游戏机的游戏。不包含任何游戏或密钥。<br /><br />在您开始之前, 请定位您设备存储上的 <![CDATA[<b> prod.keys </b>]]> 文件。<br /><br /><![CDATA[<a href=\"https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/QuickStart.md\">了解更多</a>]]></string>
<string name="notice_notification_channel_name">错误与注意事项</string>
<string name="notice_notification_channel_description">当发生错误时显示通知。</string>
<string name="notification_permission_not_granted">未授予通知权限!</string>
@@ -290,6 +291,25 @@
<string name="gpu_driver_fetcher">GPU驱动获取器</string>
<string name="gpu_driver_manager">GPU 驱动管理器</string>
<string name="install_gpu_driver_description">安装替代的驱动程序以获得更好的性能和精度</string>
<string name="post_processing">后处理效果</string>
<string name="post_processing_description">在渲染完成后应用 ReShade FX 效果</string>
<string name="post_processing_per_game_description">配置此游戏的效果链</string>
<string name="post_processing_add">添加效果</string>
<string name="post_processing_remove">移除</string>
<string name="post_processing_open_list">打开列表</string>
<string name="post_processing_close_list">关闭列表</string>
<string name="post_processing_remove_all">移除效果</string>
<string name="post_processing_preset_locked">预设已激活。在开始游戏前可以在后处理效果中编辑它。</string>
<string name="post_processing_preset_modified">数值已从原始预设被更改。</string>
<string name="post_processing_presets">预设</string>
<string name="post_processing_preset_new">新建预设</string>
<string name="post_processing_preset_new_description">把您加载的效果及当前数值保存为一个预设,以便今后选用。</string>
<string name="post_processing_preset_name_invalid">请给预设起一个不含等号的名称。</string>
<string name="post_processing_preset_none">无预设</string>
<string name="post_processing_preset_delete">删除预设</string>
<string name="post_processing_preset_reset">重置预设值</string>
<string name="post_processing_reset">重置为默认值</string>
<string name="post_processing_empty">找不到效果。请在此文件中放置 .fx 文件:</string>
<string name="frame_gen">帧生成</string>
<string name="frame_gen_per_game_description">配置针对此游戏的帧生成设定</string>
<string name="frame_gen_description">设定要在使用无损缩放渲染的帧之间应用的插帧。启用后强制采用FIFO呈现模式 。</string>
@@ -304,6 +324,13 @@
<string name="frame_gen_target_rate_60">60 FPS</string>
<string name="frame_gen_target_rate_90">90 FPS</string>
<string name="frame_gen_target_rate_120">120 FPS</string>
<string name="frame_gen_on">开</string>
<string name="frame_gen_off">关</string>
<string name="frame_gen_fixed">固定</string>
<string name="frame_gen_flow_auto">自动</string>
<string name="frame_gen_quick_description">打开或关闭帧生成并选择帧生成倍数。</string>
<string name="frame_gen_target_rate_quick_description">生成帧到目标帧率。倍率会自动调整。</string>
<string name="frame_gen_flow_scale_quick_description">用来估算帧间运动的分辨率。较低的值可以节省 GPU 时间。</string>
<string name="frame_gen_queue_target">帧队列目标</string>
<string name="frame_gen_queue_target_description">在显示之前有多少已完成渲染的帧正在等待。较大的队列可以缓解 GPU 突发的压力,但会增加输入延迟。</string>
<string name="frame_gen_queue_target_0">最低延迟 (无缓冲)</string>
@@ -314,12 +341,14 @@
<string name="frame_gen_flow_scale">运动预估分辨率</string>
<string name="frame_gen_flow_scale_description">光流通道的分辨率,以输出的比例表示。降低它是提升性能最经济的做法。</string>
<string name="frame_gen_unsupported">帧生成不可用</string>
<string name="frame_gen_unsupported_description">这个 GPU 驱动缺少 Lossless Scaling 着色器所需的 Vulkan 内存模型或半精度 (float16) 支持。</string>
<string name="lossless_scaling_setup_description">作为可选项。请提供您自己的 Lossless.dll 以便在之后可以启用帧生成。</string>
<string name="lossless_scaling_install">安装 Lossless.dll</string>
<string name="lossless_scaling_install_description">帧生成需要您自己从 Lossless Scaling 获得合法的 Lossless.dll 副本</string>
<string name="lossless_scaling_replace_description">选择其它 Lossless.dll 副本</string>
<string name="frame_generation_support">帧生成</string>
<string name="frame_generation_supported">支持</string>
<string name="frame_generation_unsupported">不支持 (无 Vulkan 内存模型或 float16)</string>
<string name="lossless_scaling">无损缩放</string>
<string name="lossless_scaling_description">提供您自己的 Lossless.dll 文件以启用帧生成</string>
<string name="lossless_scaling_installed">已安装</string>
@@ -611,6 +640,11 @@
<string name="log">日志记录</string>
<string name="flush_by_line">按行刷新调试日志</string>
<string name="flush_by_line_description">在每行写入时刷新调试日志,使在崩溃或冻结时调试更容易。</string>
<string name="extended_logging">开启扩展日志</string>
<string name="extended_logging_description">将最大日志文件大小从 100 MiB 提升至 1GiB。</string>
<string name="log_filter">日志筛选器</string>
<string name="log_filter_description">控制 Eden 的日志类别。例如: *:Info Service.LM:Debug</string>
<!-- GPU Logging strings -->
<string name="gpu_logging_header">GPU 日志</string>
<string name="gpu_log_level">日志等级</string>
@@ -894,6 +928,8 @@
<string name="loader_error_file_not_found">ROM 文件不存在</string>
<string name="loader_requires_firmware">游戏需要固件</string>
<string name="loader_requires_firmware_description"><![CDATA[这个游戏可能需要固件才能正常运行,但您还没有安装任何固件。请在启动前安装固件,或者按 “确定” 继续启动。]]></string>
<!-- Intent Launch strings -->
<string name="searching_for_game">正在搜索游戏...</string>
<string name="game_not_found_for_title_id">未找到标题ID的游戏: %1$s</string>
@@ -229,7 +229,7 @@
<string name="add_directory_success">遊戲目錄新增成功</string>
<string name="enable_update_checks">檢查更新</string>
<string name="enable_update_checks_description">在Eden啟動時檢查有無新版本並選擇是否要下載與安裝更新</string>
<string name="update_available">偵測到新版本</string>
<string name="update_available">發現新版本</string>
<string name="update_available_description">有更新可供安裝:%1$s\n\n您要進行更新嗎?</string>
<string name="downloading_update">下載更新中</string>
<string name="update_download_failed">更新下載失敗</string>
@@ -1020,9 +1020,40 @@
<string name="memory_6gb">6GB (不穩定)</string>
<string name="memory_8gb">8GB (不穩定)</string>
<!-- CPU clock levels -->
<string name="clock_normal">正常</string>
<string name="clock_boost">加速</string>
<string name="clock_fast">超頻</string>
<!-- GPU clock levels -->
<string name="fast_gpu_normal">正常</string>
<string name="fast_gpu_medium">加速</string>
<string name="fast_gpu_high">超頻</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">極小 (16MB)</string>
<string name="gpu_texturesizeswizzle_small">小(32MB)</string>
<string name="gpu_texturesizeswizzle_normal">正常(128MB)</string>
<string name="gpu_texturesizeswizzle_large">大(256MB)</string>
<string name="gpu_texturesizeswizzle_verylarge">極大(512MB)</string>
<!-- GPU swizzle streams -->
<string name="gpu_swizzle_verylow">極小(4MB)</string>
<string name="gpu_swizzle_low">小(8MB)</string>
<string name="gpu_swizzle_normal">正常(16MB)</string>
<string name="gpu_swizzle_medium">中(32MB)</string>
<string name="gpu_swizzle_high">大(64MB)</string>
<!-- GPU swizzle chunks -->
<string name="gpu_swizzlechunk_verylow">極小(32)</string>
<string name="gpu_swizzlechunk_low">小(64)</string>
<string name="gpu_swizzlechunk_normal">正常(128)</string>
<string name="gpu_swizzlechunk_medium">中(256)</string>
<string name="gpu_swizzlechunk_high">大(512)</string>
<!-- Temperature Units -->
<string name="temperature_celsius">攝氏度</string>
<string name="temperature_fahrenheit">華氏度</string>
<string name="temperature_celsius">攝氏</string>
<string name="temperature_fahrenheit">華氏</string>
<!-- Memory Sizes -->
<string name="memory_byte_shorthand">B</string>
@@ -1035,6 +1066,8 @@
<string name="renderer_none">無</string>
<!-- Renderer Accuracy -->
<string name="renderer_accuracy_low">效能</string>
<string name="renderer_accuracy_high">準確</string>
<!-- DMA Accuracy -->
-1
View File
@@ -76,7 +76,6 @@ add_library(
logging.h
lz4_compression.cpp
lz4_compression.h
make_unique_for_overwrite.h
math_util.h
memory_detect.cpp
memory_detect.h
-27
View File
@@ -1,27 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <memory>
#include <type_traits>
namespace Common {
template <class T>
requires(!std::is_array_v<T>)
std::unique_ptr<T> make_unique_for_overwrite() {
return std::unique_ptr<T>(new T);
}
template <class T>
requires std::is_unbounded_array_v<T>
std::unique_ptr<T> make_unique_for_overwrite(std::size_t n) {
return std::unique_ptr<T>(new std::remove_extent_t<T>[n]);
}
template <class T, class... Args>
requires std::is_bounded_array_v<T>
void make_unique_for_overwrite(Args&&...) = delete;
} // namespace Common
+6 -6
View File
@@ -8,8 +8,7 @@
#include <iterator>
#include <cstring>
#include "common/make_unique_for_overwrite.h"
#include <memory>
namespace Common {
@@ -38,8 +37,9 @@ public:
ScratchBuffer() = default;
explicit ScratchBuffer(size_type initial_capacity)
: last_requested_size{initial_capacity}, buffer_capacity{initial_capacity},
buffer{Common::make_unique_for_overwrite<T[]>(initial_capacity)} {}
: last_requested_size{initial_capacity}
, buffer_capacity{initial_capacity}
, buffer{std::make_unique_for_overwrite<T[]>(initial_capacity)} {}
~ScratchBuffer() = default;
ScratchBuffer(const ScratchBuffer&) = delete;
@@ -64,7 +64,7 @@ public:
/// The previously held data will remain intact.
void resize(size_type size) {
if (size > buffer_capacity) {
auto new_buffer = Common::make_unique_for_overwrite<T[]>(size);
auto new_buffer = std::make_unique_for_overwrite<T[]>(size);
std::memcpy(new_buffer.get(), buffer.get(), buffer_capacity * sizeof(T));
buffer = std::move(new_buffer);
buffer_capacity = size;
@@ -77,7 +77,7 @@ public:
void resize_destructive(size_type size) {
if (size > buffer_capacity) {
buffer_capacity = size;
buffer = Common::make_unique_for_overwrite<T[]>(buffer_capacity);
buffer = std::make_unique_for_overwrite<T[]>(buffer_capacity);
}
last_requested_size = size;
}
+15
View File
@@ -96,6 +96,21 @@ bool CommitVectorPage(uintptr_t addr, bool write) noexcept {
#ifndef MAP_NOCORE
#define MAP_NOCORE 0
#endif
#ifndef MADV_FREE
#define MADV_FREE MADV_DONTNEED
#endif
void DecommitVectorPage(uintptr_t base) noexcept {
#if defined(_WIN32)
VirtualFree(reinterpret_cast<LPVOID>(base), HostPageSize, MEM_DECOMMIT);
#elif defined(__linux__)
// Linux's MADV_DONTNEED zeros out pages for us
madvise(reinterpret_cast<void*>(base), HostPageSize, MADV_DONTNEED);
#else
madvise(reinterpret_cast<void*>(base), HostPageSize, MADV_FREE);
std::memset(reinterpret_cast<void*>(base), 0, HostPageSize);
#endif
}
void* AllocateMemoryPages(std::size_t size) noexcept {
if (auto page = HostPageSize; size % page != 0) {
+17 -3
View File
@@ -35,6 +35,7 @@ const u64 HostPageMask = ~(HostPageSize - 1);
void* AllocateMemoryPages(std::size_t size) noexcept;
void FreeMemoryPages(void* base, std::size_t size) noexcept;
void DecommitVectorPage(uintptr_t base) noexcept;
/// A large page-aligned buffer that has optimized memory usage for zero-writes.
template <typename T>
@@ -114,7 +115,7 @@ public:
const u64 end_page = AlignUp(base, HostPageSize);
const u64 first_size = (std::min)(end_page, end) - base;
if (IsCommittedPage(start / sizeof(T))) {
if (IsCommittedPage(start)) {
std::memset(reinterpret_cast<void*>(base), 0, first_size);
}
@@ -124,11 +125,16 @@ public:
base = end_page;
for (u64 page = base; page < end; page += HostPageSize) {
if (!IsCommittedPage((page - reinterpret_cast<u64>(base_ptr)) / sizeof(T))) {
auto index = (page - reinterpret_cast<u64>(base_ptr)) / sizeof(T);
if (!IsCommittedPage(index)) {
continue;
}
std::memset(reinterpret_cast<void*>(page), 0, (std::min)( HostPageSize, end - page));
if (end - page >= HostPageSize) {
DecommitPage(index);
} else {
std::memset(reinterpret_cast<void*>(page), 0, end - page);
}
}
}
@@ -183,6 +189,14 @@ private:
committed_pages[page_index >> 6].fetch_or(1ULL << (page_index & 63), std::memory_order_release);
}
constexpr void DecommitPage(std::size_t index) noexcept {
auto page_index = (index * sizeof(T)) >> HostPageBits;
auto page = reinterpret_cast<uintptr_t>(base_ptr + index) & HostPageMask;
committed_pages[page_index >> 6].fetch_and(~(1ULL << (page_index & 63)), std::memory_order_release);
DecommitVectorPage(page);
}
std::size_t alloc_size{};
T* base_ptr{};
+6 -1
View File
@@ -23,6 +23,8 @@ add_library(core STATIC
core_timing.h
cpu_manager.cpp
cpu_manager.h
launch_params.cpp
launch_params.h
crypto/aes_util.cpp
crypto/aes_util.h
crypto/ctr_encryption_layer.cpp
@@ -1203,6 +1205,9 @@ endif()
target_include_directories(core PRIVATE ${OPUS_INCLUDE_DIRS})
target_link_libraries(core PUBLIC common PRIVATE audio_core hid_core network video_core nx_tzdb tz)
if (MSVC)
target_link_libraries(core PRIVATE getopt)
endif()
if (BOOST_NO_HEADERS)
target_link_libraries(core PUBLIC Boost::container Boost::heap Boost::asio Boost::process Boost::crc)
@@ -1217,7 +1222,7 @@ target_link_libraries(core PRIVATE
RenderDoc::API
ZLIB::ZLIB)
target_link_libraries(core PUBLIC httplib::httplib zstd::zstd)
target_link_libraries(core PUBLIC httplib::httplib zstd::zstd frozen::frozen-headers)
if (ENABLE_WEB_SERVICE)
target_compile_definitions(core PUBLIC ENABLE_WEB_SERVICE)
+7 -4
View File
@@ -35,19 +35,22 @@ static IPSFileType IdentifyMagic(std::span<const u8> magic) {
}
static bool IsEOF(IPSFileType type, std::span<const u8> magic) {
return (type == IPSFileType::IPS && magic.size() > 3 && std::memcmp(magic.data(), "EOF", 3) == 0)
|| (type == IPSFileType::IPS32 && magic.size() > 4 && std::memcmp(magic.data(), "EEOF", 4) == 0);
return (type == IPSFileType::IPS && magic.size() >= 3 && std::memcmp(magic.data(), "EOF", 3) == 0)
|| (type == IPSFileType::IPS32 && magic.size() >= 4 && std::memcmp(magic.data(), "EEOF", 4) == 0);
}
VirtualFile PatchIPS(const VirtualFile& in, const VirtualFile& ips) {
if (in == nullptr || ips == nullptr)
return nullptr;
auto in_data = in->ReadAllBytes();
auto const type = IdentifyMagic(in_data);
const auto type = IdentifyMagic(ips->ReadBytes(0x5));
if (type == IPSFileType::Error)
return nullptr;
auto in_data = in->ReadAllBytes();
if (in_data.size() == 0)
return nullptr;
std::vector<u8> temp(type == IPSFileType::IPS ? 3 : 4);
u64 offset = 5; // After header
while (ips->Read(temp.data(), temp.size(), offset) == temp.size()) {
+8 -14
View File
@@ -9,7 +9,6 @@
#include "common/logging.h"
#include "common/uuid.h"
#include "core/core.h"
#include "core/file_sys/registered_cache.h"
#include "core/file_sys/savedata_factory.h"
#include "core/file_sys/vfs/vfs.h"
@@ -62,24 +61,17 @@ SaveDataFactory::SaveDataFactory(Core::System& system_, ProgramId program_id_,
SaveDataFactory::~SaveDataFactory() = default;
std::string SaveDataFactory::GetSaveDataPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, u128 user_id, u64 save_id) const {
if (type == SaveDataType::Account || type == SaveDataType::Device) {
const auto requested_id = title_id != 0 ? title_id : program_id;
const auto parent_id = system.GetContentProvider().GetParentApplicationId(requested_id);
title_id = parent_id.value_or(requested_id);
}
return GetFullPath(program_id, dir, space, type, title_id, user_id, save_id);
}
VirtualDir SaveDataFactory::Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const {
const auto save_directory = GetSaveDataPath(space, meta.type, meta.program_id, meta.user_id, meta.system_save_data_id);
const auto save_directory = GetFullPath(program_id, dir, space, meta.type, meta.program_id,
meta.user_id, meta.system_save_data_id);
return dir->CreateDirectoryRelative(save_directory);
}
VirtualDir SaveDataFactory::Open(SaveDataSpaceId space, const SaveDataAttribute& meta) const {
const auto save_directory = GetSaveDataPath(space, meta.type, meta.program_id, meta.user_id, meta.system_save_data_id);
const auto save_directory = GetFullPath(program_id, dir, space, meta.type, meta.program_id,
meta.user_id, meta.system_save_data_id);
auto out = dir->GetDirectoryRelative(save_directory);
@@ -162,7 +154,8 @@ std::string SaveDataFactory::GetUserGameSaveDataRoot(u128 user_id, bool future)
SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
u128 user_id) const {
const auto path = GetSaveDataPath(SaveDataSpaceId::User, type, title_id, user_id, 0);
const auto path =
GetFullPath(program_id, dir, SaveDataSpaceId::User, type, title_id, user_id, 0);
const auto relative_dir = GetOrCreateDirectoryRelative(dir, path);
const auto size_file = relative_dir->GetFile(GetSaveDataSizeFileName());
@@ -180,7 +173,8 @@ SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id,
SaveDataSize new_value) const {
const auto path = GetSaveDataPath(SaveDataSpaceId::User, type, title_id, user_id, 0);
const auto path =
GetFullPath(program_id, dir, SaveDataSpaceId::User, type, title_id, user_id, 0);
const auto relative_dir = GetOrCreateDirectoryRelative(dir, path);
const auto size_file = relative_dir->CreateFile(GetSaveDataSizeFileName());
-1
View File
@@ -50,7 +50,6 @@ public:
void SetAutoCreate(bool state);
private:
std::string GetSaveDataPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, u128 user_id, u64 save_id) const;
Core::System& system;
ProgramId program_id;
VirtualDir dir;
+3 -4
View File
@@ -109,8 +109,7 @@ VirtualFile RealVfsFilesystem::OpenFileFromEntry(std::string_view path_, std::op
auto reference = std::make_unique<FileReference>();
this->InsertReferenceIntoListLocked(*reference);
auto file = std::shared_ptr<RealVfsFile>(
new RealVfsFile(*this, std::move(reference), path, perms, size, std::move(parent_path)));
auto file = std::make_shared<RealVfsFile>(*this, std::move(reference), path, perms, size, std::move(parent_path));
cache[path] = file;
return file;
@@ -177,7 +176,7 @@ bool RealVfsFilesystem::DeleteFile(std::string_view path_) {
VirtualDir RealVfsFilesystem::OpenDirectory(std::string_view path_, OpenMode perms) {
const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault);
return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms));
return std::make_shared<RealVfsDirectory>(*this, path, perms);
}
VirtualDir RealVfsFilesystem::CreateDirectory(std::string_view path_, OpenMode perms) {
@@ -185,7 +184,7 @@ VirtualDir RealVfsFilesystem::CreateDirectory(std::string_view path_, OpenMode p
if (!FS::CreateDirs(path)) {
return nullptr;
}
return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms));
return std::make_shared<RealVfsDirectory>(*this, path, perms);
}
VirtualDir RealVfsFilesystem::CopyDirectory(std::string_view old_path_,
+5 -6
View File
@@ -82,6 +82,9 @@ class RealVfsFile : public VfsFile {
friend class RealVfsFilesystem;
public:
RealVfsFile(RealVfsFilesystem& base, std::unique_ptr<FileReference> reference,
const std::string& path, OpenMode perms = OpenMode::Read,
std::optional<u64> size = {}, std::optional<std::string> parent_path = {});
~RealVfsFile() override;
std::string GetName() const override;
@@ -95,9 +98,6 @@ public:
bool Rename(std::string_view name) override;
private:
RealVfsFile(RealVfsFilesystem& base, std::unique_ptr<FileReference> reference,
const std::string& path, OpenMode perms = OpenMode::Read,
std::optional<u64> size = {}, std::optional<std::string> parent_path = {});
RealVfsFilesystem& base;
std::unique_ptr<FileReference> reference;
@@ -113,6 +113,8 @@ class RealVfsDirectory : public VfsDirectory {
friend class RealVfsFilesystem;
public:
RealVfsDirectory(RealVfsFilesystem& base, const std::string& path,
OpenMode perms = OpenMode::Read);
~RealVfsDirectory() override;
VirtualFile GetFileRelative(std::string_view relative_path) const override;
@@ -138,9 +140,6 @@ public:
std::map<std::string, VfsEntryType, std::less<>> GetEntries() const override;
private:
RealVfsDirectory(RealVfsFilesystem& base, const std::string& path,
OpenMode perms = OpenMode::Read);
template <typename T, typename R>
std::vector<std::shared_ptr<R>> IterateEntries() const;
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -517,7 +517,7 @@ void WindowSystem::UpdateAppletStateLocked(Applet* applet, bool is_foreground, b
// Layer ordering. Composition sorts back-to-front. Now with enums for calrity.
s32 z_index = Background;
if (is_overlay) {
z_index = Overlay;
z_index = this->IsOverlayOpenLocked(*applet) ? Overlay : Background;
} else if (inherited_foreground) {
z_index = is_obscured ? Foreground : ForegroundVisible;
}
@@ -1,3 +1,6 @@
// 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
@@ -13,11 +16,11 @@ IPurchaseEventManager::IPurchaseEventManager(Core::System& system_)
"IPurchaseEventManager"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IPurchaseEventManager::SetDefaultDeliveryTarget>, "SetDefaultDeliveryTarget"},
{1, D<&IPurchaseEventManager::SetDeliveryTarget>, "SetDeliveryTarget"},
{2, D<&IPurchaseEventManager::GetPurchasedEvent>, "GetPurchasedEvent"},
{3, D<&IPurchaseEventManager::PopPurchasedProductInfo>, "PopPurchasedProductInfo"},
{4, D<&IPurchaseEventManager::PopPurchasedProductInfoWithUid>, "PopPurchasedProductInfoWithUid"},
FunctionInfo{0, D<&IPurchaseEventManager::SetDefaultDeliveryTarget>, "SetDefaultDeliveryTarget"},
FunctionInfo{1, D<&IPurchaseEventManager::SetDeliveryTarget>, "SetDeliveryTarget"},
FunctionInfo{2, D<&IPurchaseEventManager::GetPurchasedEvent>, "GetPurchasedEvent"},
FunctionInfo{3, D<&IPurchaseEventManager::PopPurchasedProductInfo>, "PopPurchasedProductInfo"},
FunctionInfo{4, D<&IPurchaseEventManager::PopPurchasedProductInfoWithUid>, "PopPurchasedProductInfoWithUid"}
};
// clang-format on
+3 -3
View File
@@ -17,9 +17,9 @@ public:
explicit ISession(Core::System& system_, Controller& controller_)
: ServiceFramework{system_, "ISession"}, controller{controller_} {
static const FunctionInfo functions[] = {
{0, &ISession::SetPerformanceConfiguration, "SetPerformanceConfiguration"},
{1, &ISession::GetPerformanceConfiguration, "GetPerformanceConfiguration"},
{2, &ISession::SetCpuOverclockEnabled, "SetCpuOverclockEnabled"},
FunctionInfo{0, &ISession::SetPerformanceConfiguration, "SetPerformanceConfiguration"},
FunctionInfo{1, &ISession::GetPerformanceConfiguration, "GetPerformanceConfiguration"},
FunctionInfo{2, &ISession::SetCpuOverclockEnabled, "SetCpuOverclockEnabled"}
};
RegisterHandlers(functions);
}
+95 -105
View File
@@ -21,164 +21,154 @@ namespace Service::Audio {
class IAudioOutManagerForApplet final : public ServiceFramework<IAudioOutManagerForApplet> {
public:
explicit IAudioOutManagerForApplet(Core::System& system_)
: ServiceFramework{system_, "audout:a"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
{2, nullptr, "GetProcessMasterVolume"},
{3, nullptr, "SetProcessMasterVolume"},
{4, nullptr, "GetProcessRecordVolume"},
{5, nullptr, "SetProcessRecordVolume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audout:a"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"},
FunctionInfo{2, nullptr, "GetProcessMasterVolume"},
FunctionInfo{3, nullptr, "SetProcessMasterVolume"},
FunctionInfo{4, nullptr, "GetProcessRecordVolume"},
FunctionInfo{5, nullptr, "SetProcessRecordVolume"}
);
}
};
class IAudioSnoopManager final : public ServiceFramework<IAudioSnoopManager> {
public:
explicit IAudioSnoopManager(Core::System& system_)
: ServiceFramework{system_, "auddev"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetDspStatistics"},
{1, nullptr, "GetAppletStateSummaries"},
{2, nullptr, "SetDspStatisticsParameter"},
{3, nullptr, "GetDspStatisticsParameter"},
{6, nullptr, "GetDspUsage"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "auddev"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetDspStatistics"},
FunctionInfo{1, nullptr, "GetAppletStateSummaries"},
FunctionInfo{2, nullptr, "SetDspStatisticsParameter"},
FunctionInfo{3, nullptr, "GetDspStatisticsParameter"},
FunctionInfo{6, nullptr, "GetDspUsage"}
);
}
};
class IAudioInManagerForApplet final : public ServiceFramework<IAudioInManagerForApplet> {
public:
explicit IAudioInManagerForApplet(Core::System& system_)
: ServiceFramework{system_, "audin:a"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
{2, nullptr, "GetProcessMasterVolume"},
{3, nullptr, "SetProcessMasterVolume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audin:a"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"},
FunctionInfo{2, nullptr, "GetProcessMasterVolume"},
FunctionInfo{3, nullptr, "SetProcessMasterVolume"}
);
}
};
class IAudioRendererManagerForApplet final : public ServiceFramework<IAudioRendererManagerForApplet> {
public:
explicit IAudioRendererManagerForApplet(Core::System& system_)
: ServiceFramework{system_, "audren:a"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
{2, nullptr, "GetProcessMasterVolume"},
{3, nullptr, "SetProcessMasterVolume"},
{4, nullptr, "RegisterAppletResourceUserId"},
{5, nullptr, "UnregisterAppletResourceUserId"},
{6, nullptr, "GetProcessRecordVolume"},
{7, nullptr, "SetProcessRecordVolume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audren:a"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"},
FunctionInfo{2, nullptr, "GetProcessMasterVolume"},
FunctionInfo{3, nullptr, "SetProcessMasterVolume"},
FunctionInfo{4, nullptr, "RegisterAppletResourceUserId"},
FunctionInfo{5, nullptr, "UnregisterAppletResourceUserId"},
FunctionInfo{6, nullptr, "GetProcessRecordVolume"},
FunctionInfo{7, nullptr, "SetProcessRecordVolume"}
);
}
};
class IAudioOutManagerForDebugger final : public ServiceFramework<IAudioOutManagerForDebugger> {
public:
explicit IAudioOutManagerForDebugger(Core::System& system_)
: ServiceFramework{system_, "audout:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audout:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"}
);
}
};
class IAudioInManagerForDebugger final : public ServiceFramework<IAudioInManagerForDebugger> {
public:
explicit IAudioInManagerForDebugger(Core::System& system_)
: ServiceFramework{system_, "audin:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audin:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"}
);
}
};
class IFinalOutputRecorderManagerForDebugger final : public ServiceFramework<IFinalOutputRecorderManagerForDebugger> {
public:
explicit IFinalOutputRecorderManagerForDebugger(Core::System& system_)
: ServiceFramework{system_, "audrec:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audrec:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"}
);
}
};
class IAudioRendererManagerForDebugger final : public ServiceFramework<IAudioRendererManagerForDebugger> {
public:
explicit IAudioRendererManagerForDebugger(Core::System& system_)
: ServiceFramework{system_, "audren:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspend"},
{1, nullptr, "RequestResume"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "audren:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspend"},
FunctionInfo{1, nullptr, "RequestResume"}
);
}
};
class IAudioSystemManagerForApplet final : public ServiceFramework<IAudioSystemManagerForApplet> {
public:
explicit IAudioSystemManagerForApplet(Core::System& system_)
: ServiceFramework{system_, "aud:a"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RegisterAppletResourceUserId"},
{1, nullptr, "UnregisterAppletResourceUserId"},
{2, nullptr, "RequestSuspendAudio"},
{3, nullptr, "RequestResumeAudio"},
{4, nullptr, "GetAudioOutputProcessMasterVolume"},
{5, nullptr, "SetAudioOutputProcessMasterVolume"},
{6, nullptr, "GetAudioInputProcessMasterVolume"},
{7, nullptr, "SetAudioInputProcessMasterVolume"},
{8, nullptr, "GetAudioOutputProcessRecordVolume"},
{9, nullptr, "SetAudioOutputProcessRecordVolume"},
{10, nullptr, "GetAppletStateSummaries"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "aud:a"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RegisterAppletResourceUserId"},
FunctionInfo{1, nullptr, "UnregisterAppletResourceUserId"},
FunctionInfo{2, nullptr, "RequestSuspendAudio"},
FunctionInfo{3, nullptr, "RequestResumeAudio"},
FunctionInfo{4, nullptr, "GetAudioOutputProcessMasterVolume"},
FunctionInfo{5, nullptr, "SetAudioOutputProcessMasterVolume"},
FunctionInfo{6, nullptr, "GetAudioInputProcessMasterVolume"},
FunctionInfo{7, nullptr, "SetAudioInputProcessMasterVolume"},
FunctionInfo{8, nullptr, "GetAudioOutputProcessRecordVolume"},
FunctionInfo{9, nullptr, "SetAudioOutputProcessRecordVolume"},
FunctionInfo{10, nullptr, "GetAppletStateSummaries"}
);
}
};
class IAudioSystemManagerForDebugger final : public ServiceFramework<IAudioSystemManagerForDebugger> {
public:
explicit IAudioSystemManagerForDebugger(Core::System& system_)
: ServiceFramework{system_, "aud:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestSuspendAudioForDebug"},
{1, nullptr, "RequestResumeAudioForDebug"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "aud:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestSuspendAudioForDebug"},
FunctionInfo{1, nullptr, "RequestResumeAudioForDebug"}
);
}
};
@@ -191,7 +181,7 @@ void LoopProcess(Core::System& system) {
server_manager->RegisterNamedService("audout:d", std::make_shared<IAudioOutManagerForDebugger>(system), 30);
server_manager->RegisterNamedService("audin:d", std::make_shared<IAudioInManagerForDebugger>(system), 30);
server_manager->RegisterNamedService("audrec:d", std::make_shared<IFinalOutputRecorderManagerForDebugger>(system), 30);
server_manager->RegisterNamedService("audren:d", std::make_shared<IAudioInManager>(system), 30);
server_manager->RegisterNamedService("audren:d", std::make_shared<IAudioRendererManagerForDebugger>(system), 30);
server_manager->RegisterNamedService("audin:u", std::make_shared<IAudioInManager>(system), 30);
server_manager->RegisterNamedService("audin:a", std::make_shared<IAudioInManagerForApplet>(system), 30);
@@ -1,3 +1,6 @@
// 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
@@ -8,25 +11,23 @@ namespace Service::Audio {
class IFinalOutputRecorder final : public ServiceFramework<IFinalOutputRecorder> {
public:
explicit IFinalOutputRecorder(Core::System& system_)
: ServiceFramework{system_, "IFinalOutputRecorder"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetFinalOutputRecorderState"},
{1, nullptr, "Start"},
{2, nullptr, "Stop"},
{3, nullptr, "AppendFinalOutputRecorderBuffer"},
{4, nullptr, "RegisterBufferEvent"},
{5, nullptr, "GetReleasedFinalOutputRecorderBuffers"},
{6, nullptr, "ContainsFinalOutputRecorderBuffer"},
{7, nullptr, "GetFinalOutputRecorderBufferEndTime"},
{8, nullptr, "AppendFinalOutputRecorderBufferAuto"},
{9, nullptr, "GetReleasedFinalOutputRecorderBufferAuto"},
{10, nullptr, "FlushFinalOutputRecorderBuffers"},
{11, nullptr, "AttachWorkBuffer"},
};
// clang-format on
: ServiceFramework{system_, "IFinalOutputRecorder"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetFinalOutputRecorderState"},
FunctionInfo{1, nullptr, "Start"},
FunctionInfo{2, nullptr, "Stop"},
FunctionInfo{3, nullptr, "AppendFinalOutputRecorderBuffer"},
FunctionInfo{4, nullptr, "RegisterBufferEvent"},
FunctionInfo{5, nullptr, "GetReleasedFinalOutputRecorderBuffers"},
FunctionInfo{6, nullptr, "ContainsFinalOutputRecorderBuffer"},
FunctionInfo{7, nullptr, "GetFinalOutputRecorderBufferEndTime"},
FunctionInfo{8, nullptr, "AppendFinalOutputRecorderBufferAuto"},
FunctionInfo{9, nullptr, "GetReleasedFinalOutputRecorderBufferAuto"},
FunctionInfo{10, nullptr, "FlushFinalOutputRecorderBuffers"},
FunctionInfo{11, nullptr, "AttachWorkBuffer"}
);
}
};
+26 -26
View File
@@ -32,32 +32,32 @@ IBcatService::IBcatService(Core::System& system_, BcatBackend& backend_, u64 pro
}} {
// clang-format off
static const FunctionInfo functions[] = {
{10100, D<&IBcatService::RequestSyncDeliveryCache>, "RequestSyncDeliveryCache"},
{10101, D<&IBcatService::RequestSyncDeliveryCacheWithDirectoryName>, "RequestSyncDeliveryCacheWithDirectoryName"},
{10200, nullptr, "CancelSyncDeliveryCacheRequest"},
{20100, nullptr, "RequestSyncDeliveryCacheWithApplicationId"},
{20101, nullptr, "RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName"},
{20300, nullptr, "GetDeliveryCacheStorageUpdateNotifier"},
{20301, nullptr, "RequestSuspendDeliveryTask"},
{20400, nullptr, "RegisterSystemApplicationDeliveryTask"},
{20401, nullptr, "UnregisterSystemApplicationDeliveryTask"},
{20410, nullptr, "SetSystemApplicationDeliveryTaskTimer"},
{30100, D<&IBcatService::SetPassphrase>, "SetPassphrase"},
{30101, nullptr, "Unknown30101"}, //2.0.0-2.3.0
{30102, nullptr, "Unknown30102"}, //2.0.0-2.3.0
{30200, nullptr, "RegisterBackgroundDeliveryTask"},
{30201, nullptr, "UnregisterBackgroundDeliveryTask"},
{30202, nullptr, "BlockDeliveryTask"},
{30203, nullptr, "UnblockDeliveryTask"},
{30210, nullptr, "SetDeliveryTaskTimer"},
{30300, D<&IBcatService::RegisterSystemApplicationDeliveryTasks>, "RegisterSystemApplicationDeliveryTasks"},
{90100, nullptr, "GetDeliveryTaskList"},
{90101, nullptr, "GetDeliveryTaskListForSystem"}, //11.0.0+
{90200, nullptr, "GetDeliveryList"},
{90201, D<&IBcatService::ClearDeliveryCacheStorage>, "ClearDeliveryCacheStorage"},
{90202, nullptr, "ClearDeliveryTaskSubscriptionStatus"},
{90300, nullptr, "GetPushNotificationLog"},
{90301, nullptr, "GetDeliveryCacheStorageUsage"}, //11.0.0+
FunctionInfo{10100, D<&IBcatService::RequestSyncDeliveryCache>, "RequestSyncDeliveryCache"},
FunctionInfo{10101, D<&IBcatService::RequestSyncDeliveryCacheWithDirectoryName>, "RequestSyncDeliveryCacheWithDirectoryName"},
FunctionInfo{10200, nullptr, "CancelSyncDeliveryCacheRequest"},
FunctionInfo{20100, nullptr, "RequestSyncDeliveryCacheWithApplicationId"},
FunctionInfo{20101, nullptr, "RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName"},
FunctionInfo{20300, nullptr, "GetDeliveryCacheStorageUpdateNotifier"},
FunctionInfo{20301, nullptr, "RequestSuspendDeliveryTask"},
FunctionInfo{20400, nullptr, "RegisterSystemApplicationDeliveryTask"},
FunctionInfo{20401, nullptr, "UnregisterSystemApplicationDeliveryTask"},
FunctionInfo{20410, nullptr, "SetSystemApplicationDeliveryTaskTimer"},
FunctionInfo{30100, D<&IBcatService::SetPassphrase>, "SetPassphrase"},
FunctionInfo{30101, nullptr, "Unknown30101"}, //2.0.0-2.3.0
FunctionInfo{30102, nullptr, "Unknown30102"}, //2.0.0-2.3.0
FunctionInfo{30200, nullptr, "RegisterBackgroundDeliveryTask"},
FunctionInfo{30201, nullptr, "UnregisterBackgroundDeliveryTask"},
FunctionInfo{30202, nullptr, "BlockDeliveryTask"},
FunctionInfo{30203, nullptr, "UnblockDeliveryTask"},
FunctionInfo{30210, nullptr, "SetDeliveryTaskTimer"},
FunctionInfo{30300, D<&IBcatService::RegisterSystemApplicationDeliveryTasks>, "RegisterSystemApplicationDeliveryTasks"},
FunctionInfo{90100, nullptr, "GetDeliveryTaskList"},
FunctionInfo{90101, nullptr, "GetDeliveryTaskListForSystem"}, //11.0.0+
FunctionInfo{90200, nullptr, "GetDeliveryList"},
FunctionInfo{90201, D<&IBcatService::ClearDeliveryCacheStorage>, "ClearDeliveryCacheStorage"},
FunctionInfo{90202, nullptr, "ClearDeliveryTaskSubscriptionStatus"},
FunctionInfo{90300, nullptr, "GetPushNotificationLog"},
FunctionInfo{90301, nullptr, "GetDeliveryCacheStorageUsage"}, //11.0.0+
};
// clang-format on
RegisterHandlers(functions);
+62 -70
View File
@@ -14,103 +14,95 @@ namespace Service::BPC {
class BPC final : public ServiceFramework<BPC> {
public:
explicit BPC(Core::System& system_) : ServiceFramework{system_, "bpc"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "ShutdownSystem"},
{1, nullptr, "RebootSystem"},
{2, nullptr, "GetWakeupReason"},
{3, nullptr, "GetShutdownReason"},
{4, nullptr, "GetAcOk"},
{5, nullptr, "GetBoardPowerControlEvent"},
{6, nullptr, "GetSleepButtonState"},
{7, nullptr, "GetPowerEvent"},
{8, nullptr, "CreateWakeupTimer"},
{9, nullptr, "CancelWakeupTimer"},
{10, nullptr, "EnableWakeupTimerOnDevice"},
{11, nullptr, "CreateWakeupTimerEx"},
{12, nullptr, "GetLastEnabledWakeupTimerType"},
{13, nullptr, "CleanAllWakeupTimers"},
{14, nullptr, "GetPowerButton"},
{15, nullptr, "SetEnableWakeupTimer"},
};
// clang-format on
explicit BPC(Core::System& system_) : ServiceFramework{system_, "bpc"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "ShutdownSystem"},
FunctionInfo{1, nullptr, "RebootSystem"},
FunctionInfo{2, nullptr, "GetWakeupReason"},
FunctionInfo{3, nullptr, "GetShutdownReason"},
FunctionInfo{4, nullptr, "GetAcOk"},
FunctionInfo{5, nullptr, "GetBoardPowerControlEvent"},
FunctionInfo{6, nullptr, "GetSleepButtonState"},
FunctionInfo{7, nullptr, "GetPowerEvent"},
FunctionInfo{8, nullptr, "CreateWakeupTimer"},
FunctionInfo{9, nullptr, "CancelWakeupTimer"},
FunctionInfo{10, nullptr, "EnableWakeupTimerOnDevice"},
FunctionInfo{11, nullptr, "CreateWakeupTimerEx"},
FunctionInfo{12, nullptr, "GetLastEnabledWakeupTimerType"},
FunctionInfo{13, nullptr, "CleanAllWakeupTimers"},
FunctionInfo{14, nullptr, "GetPowerButton"},
FunctionInfo{15, nullptr, "SetEnableWakeupTimer"}
);
}
};
class BPC_R final : public ServiceFramework<BPC_R> {
public:
explicit BPC_R(Core::System& system_) : ServiceFramework{system_, "bpc:r"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetRtcTime"},
{1, nullptr, "SetRtcTime"},
{2, nullptr, "GetRtcResetDetected"},
{3, nullptr, "ClearRtcResetDetected"},
{4, nullptr, "SetUpRtcResetOnShutdown"},
};
// clang-format on
explicit BPC_R(Core::System& system_) : ServiceFramework{system_, "bpc:r"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetRtcTime"},
FunctionInfo{1, nullptr, "SetRtcTime"},
FunctionInfo{2, nullptr, "GetRtcResetDetected"},
FunctionInfo{3, nullptr, "ClearRtcResetDetected"},
FunctionInfo{4, nullptr, "SetUpRtcResetOnShutdown"}
);
}
};
class BPC_C final : public ServiceFramework<BPC_C> {
public:
explicit BPC_C(Core::System& system_) : ServiceFramework{system_, "bpc:c"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "ShutdownSystem"},
{1, nullptr, "RebootSystem"},
{2, nullptr, "GetWakeupReason"},
{3, nullptr, "GetShutdownReason"},
{4, nullptr, "GetAcOk"},
{5, nullptr, "GetPowerEvent"},
};
// clang-format on
RegisterHandlers(functions);
explicit BPC_C(Core::System& system_) : ServiceFramework{system_, "bpc:c"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "ShutdownSystem"},
FunctionInfo{1, nullptr, "RebootSystem"},
FunctionInfo{2, nullptr, "GetWakeupReason"},
FunctionInfo{3, nullptr, "GetShutdownReason"},
FunctionInfo{4, nullptr, "GetAcOk"},
FunctionInfo{5, nullptr, "GetPowerEvent"}
);
}
};
class BPC_B final : public ServiceFramework<BPC_B> {
public:
explicit BPC_B(Core::System& system_) : ServiceFramework{system_, "bpc:b"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetSleepButtonState"},
{1, nullptr, "GetPowerButtonEvent"},
};
// clang-format on
RegisterHandlers(functions);
explicit BPC_B(Core::System& system_) : ServiceFramework{system_, "bpc:b"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetSleepButtonState"},
FunctionInfo{1, nullptr, "GetPowerButtonEvent"}
);
}
};
class BPC_W final : public ServiceFramework<BPC_W> {
public:
explicit BPC_W(Core::System& system_) : ServiceFramework{system_, "bpc:w"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "CreateWakeupTimer"},
{1, nullptr, "CancelWakeupTimer"},
{2, nullptr, "EnableWakeupTimerOnDevice"},
};
// clang-format on
RegisterHandlers(functions);
explicit BPC_W(Core::System& system_) : ServiceFramework{system_, "bpc:w"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "CreateWakeupTimer"},
FunctionInfo{1, nullptr, "CancelWakeupTimer"},
FunctionInfo{2, nullptr, "EnableWakeupTimerOnDevice"}
);
}
};
class BPC_AMS final : public ServiceFramework<BPC_AMS> {
public:
explicit BPC_AMS(Core::System& system_) : ServiceFramework{system_, "bpc:ams"} {
// clang-format off
static const FunctionInfo functions[] = {
{65000, nullptr, "RebootToFatalError"},
{65001, nullptr, "SetRebootPayload"},
};
// clang-format on
RegisterHandlers(functions);
explicit BPC_AMS(Core::System& system_) : ServiceFramework{system_, "bpc:ams"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{65000, nullptr, "RebootToFatalError"},
FunctionInfo{65001, nullptr, "SetRebootPayload"}
);
}
};
+152 -154
View File
@@ -20,26 +20,26 @@ namespace Service::BtDrv {
class IBluetoothUser final : public ServiceFramework<IBluetoothUser> {
public:
explicit IBluetoothUser(Core::System& system_)
: ServiceFramework{system_, "bt"}, service_context{system_, "bt"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "LeClientReadCharacteristic"},
{1, nullptr, "LeClientReadDescriptor"},
{2, nullptr, "LeClientWriteCharacteristic"},
{3, nullptr, "LeClientWriteDescriptor"},
{4, nullptr, "LeClientRegisterNotification"},
{5, nullptr, "LeClientDeregisterNotification"},
{6, nullptr, "SetLeResponse"},
{7, nullptr, "LeSendIndication"},
{8, nullptr, "GetLeEventInfo"},
{9, C<&IBluetoothUser::RegisterBleEvent>, "RegisterBleEvent"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "bt"}
, service_context{system_, "bt"} {
register_event = service_context.CreateEvent("BT:RegisterEvent");
}
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"}
);
}
~IBluetoothUser() override {
service_context.CloseEvent(register_event);
}
@@ -59,144 +59,142 @@ private:
class IBluetoothDriver final : public ServiceFramework<IBluetoothDriver> {
public:
explicit IBluetoothDriver(Core::System& system_) : ServiceFramework{system_, "btdrv"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "InitializeBluetoothDriver"},
{1, nullptr, "InitializeBluetooth"},
{2, nullptr, "EnableBluetooth"},
{3, nullptr, "DisableBluetooth"},
{4, nullptr, "FinalizeBluetooth"},
{5, nullptr, "GetAdapterProperties"},
{6, nullptr, "GetAdapterProperty"},
{7, nullptr, "SetAdapterProperty"},
{8, nullptr, "StartInquiry"},
{9, nullptr, "StopInquiry"},
{10, nullptr, "CreateBond"},
{11, nullptr, "RemoveBond"},
{12, nullptr, "CancelBond"},
{13, nullptr, "RespondToPinRequest"},
{14, nullptr, "RespondToSspRequest"},
{15, nullptr, "GetEventInfo"},
{16, nullptr, "InitializeHid"},
{17, nullptr, "OpenHidConnection"},
{18, nullptr, "CloseHidConnection"},
{19, nullptr, "WriteHidData"},
{20, nullptr, "WriteHidData2"},
{21, nullptr, "SetHidReport"},
{22, nullptr, "GetHidReport"},
{23, nullptr, "TriggerConnection"},
{24, nullptr, "AddPairedDeviceInfo"},
{25, nullptr, "GetPairedDeviceInfo"},
{26, nullptr, "FinalizeHid"},
{27, nullptr, "GetHidEventInfo"},
{28, nullptr, "SetTsi"},
{29, nullptr, "EnableBurstMode"},
{30, nullptr, "SetZeroRetransmission"},
{31, nullptr, "EnableMcMode"},
{32, nullptr, "EnableLlrScan"},
{33, nullptr, "DisableLlrScan"},
{34, C<&IBluetoothDriver::EnableRadio>, "EnableRadio"},
{35, nullptr, "SetVisibility"},
{36, nullptr, "EnableTbfcScan"},
{37, nullptr, "RegisterHidReportEvent"},
{38, nullptr, "GetHidReportEventInfo"},
{39, nullptr, "GetLatestPlr"},
{40, nullptr, "GetPendingConnections"},
{41, nullptr, "GetChannelMap"},
{42, nullptr, "EnableTxPowerBoostSetting"},
{43, nullptr, "IsTxPowerBoostSettingEnabled"},
{44, nullptr, "EnableAfhSetting"},
{45, nullptr, "IsAfhSettingEnabled"},
{46, nullptr, "InitializeBle"},
{47, nullptr, "EnableBle"},
{48, nullptr, "DisableBle"},
{49, nullptr, "FinalizeBle"},
{50, nullptr, "SetBleVisibility"},
{51, nullptr, "SetBleConnectionParameter"},
{52, nullptr, "SetBleDefaultConnectionParameter"},
{53, nullptr, "SetBleAdvertiseData"},
{54, nullptr, "SetBleAdvertiseParameter"},
{55, nullptr, "StartBleScan"},
{56, nullptr, "StopBleScan"},
{57, nullptr, "AddBleScanFilterCondition"},
{58, nullptr, "DeleteBleScanFilterCondition"},
{59, nullptr, "DeleteBleScanFilter"},
{60, nullptr, "ClearBleScanFilters"},
{61, nullptr, "EnableBleScanFilter"},
{62, nullptr, "RegisterGattClient"},
{63, nullptr, "UnregisterGattClient"},
{64, nullptr, "UnregisterAllGattClients"},
{65, nullptr, "ConnectGattServer"},
{66, nullptr, "CancelConnectGattServer"},
{67, nullptr, "DisconnectGattServer"},
{68, nullptr, "GetGattAttribute"},
{69, nullptr, "GetGattService"},
{70, nullptr, "ConfigureAttMtu"},
{71, nullptr, "RegisterGattServer"},
{72, nullptr, "UnregisterGattServer"},
{73, nullptr, "ConnectGattClient"},
{74, nullptr, "DisconnectGattClient"},
{75, nullptr, "AddGattService"},
{76, nullptr, "EnableGattService"},
{77, nullptr, "AddGattCharacteristic"},
{78, nullptr, "AddGattDescriptor"},
{79, nullptr, "GetBleManagedEventInfo"},
{80, nullptr, "GetGattFirstCharacteristic"},
{81, nullptr, "GetGattNextCharacteristic"},
{82, nullptr, "GetGattFirstDescriptor"},
{83, nullptr, "GetGattNextDescriptor"},
{84, nullptr, "RegisterGattManagedDataPath"},
{85, nullptr, "UnregisterGattManagedDataPath"},
{86, nullptr, "RegisterGattHidDataPath"},
{87, nullptr, "UnregisterGattHidDataPath"},
{88, nullptr, "RegisterGattDataPath"},
{89, nullptr, "UnregisterGattDataPath"},
{90, nullptr, "ReadGattCharacteristic"},
{91, nullptr, "ReadGattDescriptor"},
{92, nullptr, "WriteGattCharacteristic"},
{93, nullptr, "WriteGattDescriptor"},
{94, nullptr, "RegisterGattNotification"},
{95, nullptr, "UnregisterGattNotification"},
{96, nullptr, "GetLeHidEventInfo"},
{97, nullptr, "RegisterBleHidEvent"},
{98, nullptr, "SetBleScanParameter"},
{99, nullptr, "MoveToSecondaryPiconet"},
{100, nullptr, "IsBluetoothEnabled"},
{128, nullptr, "AcquireAudioEvent"},
{129, nullptr, "GetAudioEventInfo"},
{130, nullptr, "OpenAudioConnection"},
{131, nullptr, "CloseAudioConnection"},
{132, nullptr, "OpenAudioOut"},
{133, nullptr, "CloseAudioOut"},
{134, nullptr, "AcquireAudioOutStateChangedEvent"},
{135, nullptr, "StartAudioOut"},
{136, nullptr, "StopAudioOut"},
{137, nullptr, "GetAudioOutState"},
{138, nullptr, "GetAudioOutFeedingCodec"},
{139, nullptr, "GetAudioOutFeedingParameter"},
{140, nullptr, "AcquireAudioOutBufferAvailableEvent"},
{141, nullptr, "SendAudioData"},
{142, nullptr, "AcquireAudioControlInputStateChangedEvent"},
{143, nullptr, "GetAudioControlInputState"},
{144, nullptr, "AcquireAudioConnectionStateChangedEvent"},
{145, nullptr, "GetConnectedAudioDevice"},
{146, nullptr, "CloseAudioControlInput"},
{147, nullptr, "RegisterAudioControlNotification"},
{148, nullptr, "SendAudioControlPassthroughCommand"},
{149, nullptr, "SendAudioControlSetAbsoluteVolumeCommand"},
{150, nullptr, "AcquireAudioSinkVolumeLocallyChangedEvent"},
{151, nullptr, "AcquireAudioSinkVolumeUpdateRequestCompletedEvent"},
{152, nullptr, "GetAudioSinkVolume"},
{153, nullptr, "RequestUpdateAudioSinkVolume"},
{154, nullptr, "IsAudioSinkVolumeSupported"},
{256, nullptr, "IsManufacturingMode"},
{257, nullptr, "EmulateBluetoothCrash"},
{258, nullptr, "GetBleChannelMap"},
};
// clang-format on
explicit IBluetoothDriver(Core::System& system_) : ServiceFramework{system_, "btdrv"} {}
RegisterHandlers(functions);
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"}
);
}
private:
+92 -94
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
@@ -17,100 +17,98 @@ namespace Service::BTM {
class IBtm final : public ServiceFramework<IBtm> {
public:
explicit IBtm(Core::System& system_) : ServiceFramework{system_, "btm"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetState"},
{1, nullptr, "GetHostDeviceProperty"},
{2, nullptr, "AcquireDeviceConditionEvent"},
{3, nullptr, "GetDeviceCondition"},
{4, nullptr, "SetBurstMode"},
{5, nullptr, "SetSlotMode"},
{6, nullptr, "SetBluetoothMode"},
{7, nullptr, "SetWlanMode"},
{8, nullptr, "AcquireDeviceInfoEvent"},
{9, nullptr, "GetDeviceInfo"},
{10, nullptr, "AddDeviceInfo"},
{11, nullptr, "RemoveDeviceInfo"},
{12, nullptr, "IncreaseDeviceInfoOrder"},
{13, nullptr, "LlrNotify"},
{14, nullptr, "EnableRadio"},
{15, nullptr, "DisableRadio"},
{16, nullptr, "HidDisconnect"},
{17, nullptr, "HidSetRetransmissionMode"},
{18, nullptr, "AcquireAwakeReqEvent"},
{19, nullptr, "AcquireLlrStateEvent"},
{20, nullptr, "IsLlrStarted"},
{21, nullptr, "EnableSlotSaving"},
{22, nullptr, "ProtectDeviceInfo"},
{23, nullptr, "AcquireBleScanEvent"},
{24, nullptr, "GetBleScanParameterGeneral"},
{25, nullptr, "GetBleScanParameterSmartDevice"},
{26, nullptr, "StartBleScanForGeneral"},
{27, nullptr, "StopBleScanForGeneral"},
{28, nullptr, "GetBleScanResultsForGeneral"},
{29, nullptr, "StartBleScanForPairedDevice"},
{30, nullptr, "StopBleScanForPairedDevice"},
{31, nullptr, "StartBleScanForSmartDevice"},
{32, nullptr, "StopBleScanForSmartDevice"},
{33, nullptr, "GetBleScanResultsForSmartDevice"},
{34, nullptr, "AcquireBleConnectionEvent"},
{35, nullptr, "BleConnect"},
{36, nullptr, "BleOverrideConnection"},
{37, nullptr, "BleDisconnect"},
{38, nullptr, "BleGetConnectionState"},
{39, nullptr, "BleGetGattClientConditionList"},
{40, nullptr, "AcquireBlePairingEvent"},
{41, nullptr, "BlePairDevice"},
{42, nullptr, "BleUnpairDeviceOnBoth"},
{43, nullptr, "BleUnpairDevice"},
{44, nullptr, "BleGetPairedAddresses"},
{45, nullptr, "AcquireBleServiceDiscoveryEvent"},
{46, nullptr, "GetGattServices"},
{47, nullptr, "GetGattService"},
{48, nullptr, "GetGattIncludedServices"},
{49, nullptr, "GetBelongingService"},
{50, nullptr, "GetGattCharacteristics"},
{51, nullptr, "GetGattDescriptors"},
{52, nullptr, "AcquireBleMtuConfigEvent"},
{53, nullptr, "ConfigureBleMtu"},
{54, nullptr, "GetBleMtu"},
{55, nullptr, "RegisterBleGattDataPath"},
{56, nullptr, "UnregisterBleGattDataPath"},
{57, nullptr, "RegisterAppletResourceUserId"},
{58, nullptr, "UnregisterAppletResourceUserId"},
{59, nullptr, "SetAppletResourceUserId"},
{60, nullptr, "AcquireBleConnectionParameterUpdateEvent"}, //8.0.0+
{61, nullptr, "SetCeLength"}, //8.0.0+
{62, nullptr, "EnsureSlotExpansion"}, //9.0.0+
{63, nullptr, "IsSlotExpansionEnsured"}, //9.0.0+
{64, nullptr, "CancelConnectionTrigger"}, //10.0.0+
{65, nullptr, "GetConnectionCapacity"}, //13.0.0+
{66, nullptr, "GetWlanMode"}, //13.0.0+
{67, nullptr, "IsSlotSavingEnabled"}, //13.0.0+
{68, nullptr, "IsSlotSavingForPairingEnabled"}, //13.0.0+
{69, nullptr, "AcquireAudioDeviceConnectionEvent"}, //13.0.0+
{70, nullptr, "GetConnectedAudioDevices"}, //13.0.0+
{71, nullptr, "SetAudioSourceVolume"}, //13.0.0+
{72, nullptr, "GetAudioSourceVolume"}, //13.0.0+
{73, nullptr, "RequestAudioDeviceConnectionRejection"}, //13.0.0+
{74, nullptr, "CancelAudioDeviceConnectionRejection"}, //13.0.0+
{75, nullptr, "GetPairedAudioDevices"}, //13.0.0+
{76, nullptr, "SetWlanModeWithOption"}, //13.1.0+
{100, nullptr, "AcquireConnectionDisallowedEvent"}, //13.0.0+
{101, nullptr, "GetUsecaseViolationFactor"}, //13.0.0+
{110, nullptr, "GetShortenedDeviceInfo"}, //13.0.0+
{111, nullptr, "AcquirePairingCountUpdateEvent"},//13.0.0+
{112, nullptr, "Unknown112"}, //14.0.0-14.1.2
{113, nullptr, "Unknown113"}, //14.0.0-14.1.2
{114, nullptr, "IsFirstAudioControlConnection"}, //14.0.0+
{115, nullptr, "GetShortenedDeviceCondition"}, //14.0.0+
{116, nullptr, "SetAudioSinkVolume"}, //15.0.0+
{117, nullptr, "GetAudioSinkVolume"}, //15.0.0+
};
// clang-format on
explicit IBtm(Core::System& system_) : ServiceFramework{system_, "btm"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetState"},
FunctionInfo{1, nullptr, "GetHostDeviceProperty"},
FunctionInfo{2, nullptr, "AcquireDeviceConditionEvent"},
FunctionInfo{3, nullptr, "GetDeviceCondition"},
FunctionInfo{4, nullptr, "SetBurstMode"},
FunctionInfo{5, nullptr, "SetSlotMode"},
FunctionInfo{6, nullptr, "SetBluetoothMode"},
FunctionInfo{7, nullptr, "SetWlanMode"},
FunctionInfo{8, nullptr, "AcquireDeviceInfoEvent"},
FunctionInfo{9, nullptr, "GetDeviceInfo"},
FunctionInfo{10, nullptr, "AddDeviceInfo"},
FunctionInfo{11, nullptr, "RemoveDeviceInfo"},
FunctionInfo{12, nullptr, "IncreaseDeviceInfoOrder"},
FunctionInfo{13, nullptr, "LlrNotify"},
FunctionInfo{14, nullptr, "EnableRadio"},
FunctionInfo{15, nullptr, "DisableRadio"},
FunctionInfo{16, nullptr, "HidDisconnect"},
FunctionInfo{17, nullptr, "HidSetRetransmissionMode"},
FunctionInfo{18, nullptr, "AcquireAwakeReqEvent"},
FunctionInfo{19, nullptr, "AcquireLlrStateEvent"},
FunctionInfo{20, nullptr, "IsLlrStarted"},
FunctionInfo{21, nullptr, "EnableSlotSaving"},
FunctionInfo{22, nullptr, "ProtectDeviceInfo"},
FunctionInfo{23, nullptr, "AcquireBleScanEvent"},
FunctionInfo{24, nullptr, "GetBleScanParameterGeneral"},
FunctionInfo{25, nullptr, "GetBleScanParameterSmartDevice"},
FunctionInfo{26, nullptr, "StartBleScanForGeneral"},
FunctionInfo{27, nullptr, "StopBleScanForGeneral"},
FunctionInfo{28, nullptr, "GetBleScanResultsForGeneral"},
FunctionInfo{29, nullptr, "StartBleScanForPairedDevice"},
FunctionInfo{30, nullptr, "StopBleScanForPairedDevice"},
FunctionInfo{31, nullptr, "StartBleScanForSmartDevice"},
FunctionInfo{32, nullptr, "StopBleScanForSmartDevice"},
FunctionInfo{33, nullptr, "GetBleScanResultsForSmartDevice"},
FunctionInfo{34, nullptr, "AcquireBleConnectionEvent"},
FunctionInfo{35, nullptr, "BleConnect"},
FunctionInfo{36, nullptr, "BleOverrideConnection"},
FunctionInfo{37, nullptr, "BleDisconnect"},
FunctionInfo{38, nullptr, "BleGetConnectionState"},
FunctionInfo{39, nullptr, "BleGetGattClientConditionList"},
FunctionInfo{40, nullptr, "AcquireBlePairingEvent"},
FunctionInfo{41, nullptr, "BlePairDevice"},
FunctionInfo{42, nullptr, "BleUnpairDeviceOnBoth"},
FunctionInfo{43, nullptr, "BleUnpairDevice"},
FunctionInfo{44, nullptr, "BleGetPairedAddresses"},
FunctionInfo{45, nullptr, "AcquireBleServiceDiscoveryEvent"},
FunctionInfo{46, nullptr, "GetGattServices"},
FunctionInfo{47, nullptr, "GetGattService"},
FunctionInfo{48, nullptr, "GetGattIncludedServices"},
FunctionInfo{49, nullptr, "GetBelongingService"},
FunctionInfo{50, nullptr, "GetGattCharacteristics"},
FunctionInfo{51, nullptr, "GetGattDescriptors"},
FunctionInfo{52, nullptr, "AcquireBleMtuConfigEvent"},
FunctionInfo{53, nullptr, "ConfigureBleMtu"},
FunctionInfo{54, nullptr, "GetBleMtu"},
FunctionInfo{55, nullptr, "RegisterBleGattDataPath"},
FunctionInfo{56, nullptr, "UnregisterBleGattDataPath"},
FunctionInfo{57, nullptr, "RegisterAppletResourceUserId"},
FunctionInfo{58, nullptr, "UnregisterAppletResourceUserId"},
FunctionInfo{59, nullptr, "SetAppletResourceUserId"},
FunctionInfo{60, nullptr, "AcquireBleConnectionParameterUpdateEvent"}, //8.0.0+
FunctionInfo{61, nullptr, "SetCeLength"}, //8.0.0+
FunctionInfo{62, nullptr, "EnsureSlotExpansion"}, //9.0.0+
FunctionInfo{63, nullptr, "IsSlotExpansionEnsured"}, //9.0.0+
FunctionInfo{64, nullptr, "CancelConnectionTrigger"}, //10.0.0+
FunctionInfo{65, nullptr, "GetConnectionCapacity"}, //13.0.0+
FunctionInfo{66, nullptr, "GetWlanMode"}, //13.0.0+
FunctionInfo{67, nullptr, "IsSlotSavingEnabled"}, //13.0.0+
FunctionInfo{68, nullptr, "IsSlotSavingForPairingEnabled"}, //13.0.0+
FunctionInfo{69, nullptr, "AcquireAudioDeviceConnectionEvent"}, //13.0.0+
FunctionInfo{70, nullptr, "GetConnectedAudioDevices"}, //13.0.0+
FunctionInfo{71, nullptr, "SetAudioSourceVolume"}, //13.0.0+
FunctionInfo{72, nullptr, "GetAudioSourceVolume"}, //13.0.0+
FunctionInfo{73, nullptr, "RequestAudioDeviceConnectionRejection"}, //13.0.0+
FunctionInfo{74, nullptr, "CancelAudioDeviceConnectionRejection"}, //13.0.0+
FunctionInfo{75, nullptr, "GetPairedAudioDevices"}, //13.0.0+
FunctionInfo{76, nullptr, "SetWlanModeWithOption"}, //13.1.0+
FunctionInfo{100, nullptr, "AcquireConnectionDisallowedEvent"}, //13.0.0+
FunctionInfo{101, nullptr, "GetUsecaseViolationFactor"}, //13.0.0+
FunctionInfo{110, nullptr, "GetShortenedDeviceInfo"}, //13.0.0+
FunctionInfo{111, nullptr, "AcquirePairingCountUpdateEvent"},//13.0.0+
FunctionInfo{112, nullptr, "Unknown112"}, //14.0.0-14.1.2
FunctionInfo{113, nullptr, "Unknown113"}, //14.0.0-14.1.2
FunctionInfo{114, nullptr, "IsFirstAudioControlConnection"}, //14.0.0+
FunctionInfo{115, nullptr, "GetShortenedDeviceCondition"}, //14.0.0+
FunctionInfo{116, nullptr, "SetAudioSinkVolume"}, //15.0.0+
FunctionInfo{117, nullptr, "GetAudioSinkVolume"} //15.0.0+
);
}
};
+8 -9
View File
@@ -20,15 +20,14 @@ namespace Service::Capture {
class IDecoderControlService final : public ServiceFramework<IDecoderControlService> {
public:
explicit IDecoderControlService(Core::System& system_) : ServiceFramework{system_, "grc:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{3001, nullptr, "DecodeJpeg"},
{4001, nullptr, "ShrinkJpeg"},
{4002, nullptr, "ShrinkJpegEx"},
};
// clang-format on
RegisterHandlers(functions);
explicit IDecoderControlService(Core::System& system_) : ServiceFramework{system_, "grc:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{3001, nullptr, "DecodeJpeg"},
FunctionInfo{4001, nullptr, "ShrinkJpeg"},
FunctionInfo{4002, nullptr, "ShrinkJpegEx"}
);
}
};
+28 -32
View File
@@ -17,30 +17,28 @@ namespace Service::ERPT {
class ErrorReportContext final : public ServiceFramework<ErrorReportContext> {
public:
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"},
{1, C<&ErrorReportContext::CreateReportV0>, "CreateReportV0"},
{2, nullptr, "SetInitialLaunchSettingsCompletionTime"},
{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"},
{4, nullptr, "UpdatePowerOnTime"},
{5, D<&ErrorReportContext::UpdateAwakeTime>, "UpdateAwakeTime"},
{6, nullptr, "SubmitMultipleCategoryContext"},
{7, nullptr, "UpdateApplicationLaunchTime"},
{8, nullptr, "ClearApplicationLaunchTime"},
{9, nullptr, "SubmitAttachment"},
{10, nullptr, "CreateReportWithAttachments"},
{11, C<&ErrorReportContext::CreateReportV1>, "CreateReportV1"},
{12, C<&ErrorReportContext::CreateReport>, "CreateReport"},
{20, nullptr, "RegisterRunningApplet"},
{21, nullptr, "UnregisterRunningApplet"},
{22, nullptr, "UpdateAppletSuspendedDuration"},
{30, nullptr, "InvalidateForcedShutdownDetection"},
};
// clang-format on
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
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"}
);
}
private:
@@ -89,16 +87,14 @@ private:
class ErrorReportSession final : public ServiceFramework<ErrorReportSession> {
public:
explicit ErrorReportSession(Core::System& system_) : ServiceFramework{system_, "erpt:r"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "OpenReport"},
{1, nullptr, "OpenManager"},
{2, nullptr, "OpenAttachment"},
};
// clang-format on
explicit ErrorReportSession(Core::System& system_) : ServiceFramework{system_, "erpt:r"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "OpenReport"},
FunctionInfo{1, nullptr, "OpenManager"},
FunctionInfo{2, nullptr, "OpenAttachment"}
);
}
};
+168 -171
View File
@@ -19,110 +19,109 @@ constexpr Result ERROR_INVALID_RIGHTS_ID{ErrorModule::ETicket, 3};
class ETicket final : public ServiceFramework<ETicket> {
public:
explicit ETicket(Core::System& system_) : ServiceFramework{system_, "es"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, &ETicket::ImportTicket, "ImportTicket"},
{2, nullptr, "ImportTicketCertificateSet"},
{3, nullptr, "DeleteTicket"},
{4, nullptr, "DeletePersonalizedTicket"},
{5, nullptr, "DeleteAllCommonTicket"},
{6, nullptr, "DeleteAllPersonalizedTicket"},
{7, nullptr, "DeleteAllPersonalizedTicketEx"},
{8, &ETicket::GetTitleKey, "GetTitleKey"},
{9, &ETicket::CountCommonTicket, "CountCommonTicket"},
{10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"},
{11, &ETicket::ListCommonTicketRightsIds, "ListCommonTicketRightsIds"},
{12, &ETicket::ListPersonalizedTicketRightsIds, "ListPersonalizedTicketRightsIds"},
{13, nullptr, "ListMissingPersonalizedTicket"},
{14, &ETicket::GetCommonTicketSize, "GetCommonTicketSize"},
{15, &ETicket::GetPersonalizedTicketSize, "GetPersonalizedTicketSize"},
{16, &ETicket::GetCommonTicketData, "GetCommonTicketData"},
{17, &ETicket::GetPersonalizedTicketData, "GetPersonalizedTicketData"},
{18, nullptr, "OwnTicket"},
{19, nullptr, "GetTicketInfo"},
{20, nullptr, "ListLightTicketInfo"},
{21, nullptr, "SignData"},
{22, nullptr, "GetCommonTicketAndCertificateSize"},
{23, nullptr, "GetCommonTicketAndCertificateData"},
{24, nullptr, "ImportPrepurchaseRecord"},
{25, nullptr, "DeletePrepurchaseRecord"},
{26, nullptr, "DeleteAllPrepurchaseRecord"},
{27, nullptr, "CountPrepurchaseRecord"},
{28, nullptr, "ListPrepurchaseRecordRightsIds"},
{29, nullptr, "ListPrepurchaseRecordInfo"},
{30, nullptr, "CountTicket"},
{31, nullptr, "ListTicketRightsIds"},
{32, nullptr, "CountPrepurchaseRecordEx"},
{33, nullptr, "ListPrepurchaseRecordRightsIdsEx"},
{34, nullptr, "GetEncryptedTicketSize"},
{35, nullptr, "GetEncryptedTicketData"},
{36, nullptr, "DeleteAllInactiveELicenseRequiredPersonalizedTicket"},
{37, nullptr, "OwnTicket2"},
{38, nullptr, "OwnTicket3"},
{39, nullptr, "DeleteAllInactivePersonalizedTicket"},
{40, nullptr, "DeletePrepurchaseRecordByNintendoAccountId"},
{101, nullptr, "Unknown101"}, //18.0.0+
{102, nullptr, "Unknown102"}, //18.0.0+
{103, nullptr, "Unknown103"}, //18.0.0+
{104, nullptr, "Unknown104"}, //18.0.0+
{105, nullptr, "Unknown105"}, //20.0.0+
{201, nullptr, "Unknown201"}, //18.0.0+
{202, nullptr, "Unknown202"}, //18.0.0+
{203, nullptr, "Unknown203"}, //18.0.0+
{204, nullptr, "Unknown204"}, //18.0.0+
{205, nullptr, "Unknown205"}, //18.0.0+
{501, nullptr, "Unknown501"},
{502, nullptr, "Unknown502"},
{503, nullptr, "GetTitleKey"},
{504, nullptr, "Unknown504"},
{508, nullptr, "Unknown508"},
{509, nullptr, "Unknown509"},
{510, nullptr, "Unknown510"},
{511, nullptr, "Unknown511"},
{1001, nullptr, "Unknown1001"},
{1002, nullptr, "Unknown1001"},
{1003, nullptr, "Unknown1003"},
{1004, nullptr, "Unknown1004"},
{1005, nullptr, "Unknown1005"},
{1006, nullptr, "Unknown1006"},
{1007, nullptr, "Unknown1007"},
{1009, nullptr, "Unknown1009"},
{1010, nullptr, "Unknown1010"},
{1011, nullptr, "Unknown1011"},
{1012, nullptr, "Unknown1012"},
{1013, nullptr, "Unknown1013"},
{1014, nullptr, "Unknown1014"},
{1015, nullptr, "Unknown1015"},
{1016, nullptr, "Unknown1016"},
{1017, nullptr, "Unknown1017"},
{1018, nullptr, "Unknown1018"},
{1019, nullptr, "Unknown1019"},
{1020, nullptr, "Unknown1020"},
{1021, nullptr, "Unknown1021"},
{1501, nullptr, "Unknown1501"},
{1502, nullptr, "Unknown1502"},
{1503, nullptr, "Unknown1503"},
{1504, nullptr, "Unknown1504"},
{1505, nullptr, "Unknown1505"},
{1506, nullptr, "Unknown1506"},
{2000, nullptr, "Unknown2000"},
{2001, nullptr, "Unknown2001"},
{2002, nullptr, "Unknown2002"},
{2003, nullptr, "Unknown2003"},
{2100, nullptr, "Unknown2100"},
{2501, nullptr, "Unknown2501"},
{2502, nullptr, "Unknown2502"},
{2601, nullptr, "Unknown2601"},
{3001, nullptr, "Unknown3001"},
{3002, nullptr, "Unknown3002"},
};
// clang-format on
RegisterHandlers(functions);
keys.PopulateTickets();
keys.SynthesizeTickets();
}
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"}
);
}
private:
bool CheckRightsId(HLERequestContext& ctx, const u128& rights_id) {
if (rights_id == u128{}) {
@@ -323,83 +322,81 @@ private:
class NDRM_LU final : public ServiceFramework<NDRM_LU> {
public:
explicit NDRM_LU(Core::System& system_)
: ServiceFramework{system_, "ndrm:lu"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "Cmd1"},
{2, nullptr, "Cmd2"},
{3, nullptr, "Cmd3"},
{1000, nullptr, "Cmd1000"},
{8000, nullptr, "Cmd8000"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "ndrm:lu"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{1, nullptr, "Cmd1"},
FunctionInfo{2, nullptr, "Cmd2"},
FunctionInfo{3, nullptr, "Cmd3"},
FunctionInfo{1000, nullptr, "Cmd1000"},
FunctionInfo{8000, nullptr, "Cmd8000"}
);
}
};
class NDRM_LA final : public ServiceFramework<NDRM_LA> {
public:
explicit NDRM_LA(Core::System& system_)
: ServiceFramework{system_, "ndrm:la"} {
// clang-format off
static const FunctionInfo functions[] = {
{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"},
{28, nullptr, "Cmd28"},
{29, nullptr, "Cmd29"},
{30, nullptr, "Cmd30"},
{31, nullptr, "Cmd31"},
{32, nullptr, "Cmd32"},
{33, nullptr, "Cmd33"},
{34, nullptr, "Cmd34"},
{35, nullptr, "Cmd35"},
{36, nullptr, "Cmd36"},
{37, nullptr, "Cmd37"},
{38, nullptr, "Cmd38"},
{39, nullptr, "Cmd39"},
{40, nullptr, "Cmd40"},
{42, nullptr, "Cmd42"},
{43, nullptr, "Cmd43"},
{44, nullptr, "Cmd44"},
{45, nullptr, "Cmd45"},
{46, nullptr, "Cmd46"},
{47, nullptr, "Cmd47"},
{48, nullptr, "Cmd48"},
{49, nullptr, "Cmd49"},
{50, nullptr, "Cmd50"},
{51, nullptr, "Cmd51"},
{8000, nullptr, "Cmd8000"},
{8001, nullptr, "Cmd8001"},
{8002, nullptr, "Cmd8002"},
{8003, nullptr, "Cmd8003"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "ndrm:la"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{1, nullptr, "Cmd1"},
FunctionInfo{2, nullptr, "Cmd2"},
FunctionInfo{3, nullptr, "Cmd3"},
FunctionInfo{4, nullptr, "Cmd4"},
FunctionInfo{5, nullptr, "Cmd5"},
FunctionInfo{6, nullptr, "Cmd6"},
FunctionInfo{7, nullptr, "Cmd7"},
FunctionInfo{8, nullptr, "Cmd8"},
FunctionInfo{9, nullptr, "Cmd9"},
FunctionInfo{10, nullptr, "Cmd10"},
FunctionInfo{11, nullptr, "Cmd11"},
FunctionInfo{12, nullptr, "Cmd12"},
FunctionInfo{13, nullptr, "Cmd13"},
FunctionInfo{14, nullptr, "Cmd14"},
FunctionInfo{15, nullptr, "Cmd15"},
FunctionInfo{16, nullptr, "Cmd16"},
FunctionInfo{17, nullptr, "Cmd17"},
FunctionInfo{18, nullptr, "Cmd18"},
FunctionInfo{19, nullptr, "Cmd19"},
FunctionInfo{20, nullptr, "Cmd20"},
FunctionInfo{21, nullptr, "Cmd21"},
FunctionInfo{22, nullptr, "Cmd22"},
FunctionInfo{23, nullptr, "Cmd23"},
FunctionInfo{24, nullptr, "Cmd24"},
FunctionInfo{25, nullptr, "Cmd25"},
FunctionInfo{26, nullptr, "Cmd26"},
FunctionInfo{27, nullptr, "Cmd27"},
FunctionInfo{28, nullptr, "Cmd28"},
FunctionInfo{29, nullptr, "Cmd29"},
FunctionInfo{30, nullptr, "Cmd30"},
FunctionInfo{31, nullptr, "Cmd31"},
FunctionInfo{32, nullptr, "Cmd32"},
FunctionInfo{33, nullptr, "Cmd33"},
FunctionInfo{34, nullptr, "Cmd34"},
FunctionInfo{35, nullptr, "Cmd35"},
FunctionInfo{36, nullptr, "Cmd36"},
FunctionInfo{37, nullptr, "Cmd37"},
FunctionInfo{38, nullptr, "Cmd38"},
FunctionInfo{39, nullptr, "Cmd39"},
FunctionInfo{40, nullptr, "Cmd40"},
FunctionInfo{42, nullptr, "Cmd42"},
FunctionInfo{43, nullptr, "Cmd43"},
FunctionInfo{44, nullptr, "Cmd44"},
FunctionInfo{45, nullptr, "Cmd45"},
FunctionInfo{46, nullptr, "Cmd46"},
FunctionInfo{47, nullptr, "Cmd47"},
FunctionInfo{48, nullptr, "Cmd48"},
FunctionInfo{49, nullptr, "Cmd49"},
FunctionInfo{50, nullptr, "Cmd50"},
FunctionInfo{51, nullptr, "Cmd51"},
FunctionInfo{8000, nullptr, "Cmd8000"},
FunctionInfo{8001, nullptr, "Cmd8001"},
FunctionInfo{8002, nullptr, "Cmd8002"},
FunctionInfo{8003, nullptr, "Cmd8003"}
);
}
};
+22 -23
View File
@@ -1,3 +1,6 @@
// 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
@@ -11,36 +14,32 @@ namespace Service::EUPLD {
class ErrorUploadContext final : public ServiceFramework<ErrorUploadContext> {
public:
explicit ErrorUploadContext(Core::System& system_) : ServiceFramework{system_, "eupld:c"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "SetUrl"},
{1, nullptr, "ImportCrt"},
{2, nullptr, "ImportPki"},
{3, nullptr, "SetAutoUpload"},
{4, nullptr, "GetAutoUpload"},
};
// clang-format on
explicit ErrorUploadContext(Core::System& system_) : ServiceFramework{system_, "eupld:c"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "SetUrl"},
FunctionInfo{1, nullptr, "ImportCrt"},
FunctionInfo{2, nullptr, "ImportPki"},
FunctionInfo{3, nullptr, "SetAutoUpload"},
FunctionInfo{4, nullptr, "GetAutoUpload"}
);
}
};
class ErrorUploadRequest final : public ServiceFramework<ErrorUploadRequest> {
public:
explicit ErrorUploadRequest(Core::System& system_) : ServiceFramework{system_, "eupld:r"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "UploadAll"},
{2, nullptr, "UploadSelected"},
{3, nullptr, "GetUploadStatus"},
{4, nullptr, "CancelUpload"},
{5, nullptr, "GetResult"},
};
// clang-format on
explicit ErrorUploadRequest(Core::System& system_) : ServiceFramework{system_, "eupld:r"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{1, nullptr, "UploadAll"},
FunctionInfo{2, nullptr, "UploadSelected"},
FunctionInfo{3, nullptr, "GetUploadStatus"},
FunctionInfo{4, nullptr, "CancelUpload"},
FunctionInfo{5, nullptr, "GetResult"}
);
}
};
+20 -26
View File
@@ -16,30 +16,26 @@ namespace Service::FGM {
class IRequest final : public ServiceFramework<IRequest> {
public:
explicit IRequest(Core::System& system_) : ServiceFramework{system_, "IRequest"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "Set"},
{2, nullptr, "Get"},
{3, nullptr, "Cancel"},
};
// clang-format on
explicit IRequest(Core::System& system_) : ServiceFramework{system_, "IRequest"} {}
RegisterHandlers(functions);
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"}
);
}
};
class FGM final : public ServiceFramework<FGM> {
public:
explicit FGM(Core::System& system_, const char* name) : ServiceFramework{system_, name} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &FGM::Initialize, "Initialize"},
};
// clang-format on
explicit FGM(Core::System& system_, const char* name) : ServiceFramework{system_, name} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &FGM::Initialize, "Initialize"}
);
}
private:
@@ -54,16 +50,14 @@ private:
class FGM_DBG final : public ServiceFramework<FGM_DBG> {
public:
explicit FGM_DBG(Core::System& system_) : ServiceFramework{system_, "fgm:dbg"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "Read"},
{2, nullptr, "Cancel"},
};
// clang-format on
explicit FGM_DBG(Core::System& system_) : ServiceFramework{system_, "fgm:dbg"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{1, nullptr, "Read"},
FunctionInfo{2, nullptr, "Cancel"}
);
}
};
+176 -178
View File
@@ -22,128 +22,126 @@ class IFriendService final : public ServiceFramework<IFriendService> {
public:
explicit IFriendService(Core::System& system_)
: ServiceFramework{system_, "IFriendService"}, service_context{system, "IFriendService"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IFriendService::GetCompletionEvent, "GetCompletionEvent"},
{1, &IFriendService::Cancel, "Cancel"},
{10100, nullptr, "GetFriendListIds"},
{10101, &IFriendService::GetFriendList, "GetFriendList"},
{10102, nullptr, "UpdateFriendInfo"},
{10110, nullptr, "GetFriendProfileImage"},
{10111, nullptr, "GetFriendProfileImageWithImageSize"}, // 18.0.0+
{10120, &IFriendService::CheckFriendListAvailability, "CheckFriendListAvailability"},
{10121, nullptr, "EnsureFriendListAvailable"},
{10200, nullptr, "SendFriendRequestForApplication"},
{10211, nullptr, "AddFacedFriendRequestForApplication"},
{10400, &IFriendService::GetBlockedUserListIds, "GetBlockedUserListIds"},
{10420, &IFriendService::CheckBlockedUserListAvailability, "CheckBlockedUserListAvailability"},
{10421, nullptr, "EnsureBlockedUserListAvailable"},
{10500, nullptr, "GetProfileList"},
{10501, nullptr, "GetProfileListV2"}, // 18.0.0+
{10600, nullptr, "DeclareOpenOnlinePlaySession"},
{10601, &IFriendService::DeclareCloseOnlinePlaySession, "DeclareCloseOnlinePlaySession"},
{10610, &IFriendService::UpdateUserPresence, "UpdateUserPresence"},
{10700, &IFriendService::GetPlayHistoryRegistrationKey, "GetPlayHistoryRegistrationKey"},
{10701, nullptr, "GetPlayHistoryRegistrationKeyWithNetworkServiceAccountId"},
{10702, nullptr, "AddPlayHistory"},
{11000, nullptr, "GetProfileImageUrl"},
{11001, nullptr, "GetProfileImageUrlV2"}, // 18.0.0+
{20100, &IFriendService::GetFriendCount, "GetFriendCount"},
{20101, &IFriendService::GetNewlyFriendCount, "GetNewlyFriendCount"},
{20102, nullptr, "GetFriendDetailedInfo"},
{20103, nullptr, "SyncFriendList"},
{20104, &IFriendService::RequestSyncFriendList, "RequestSyncFriendList"},
{20105, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV1"},
{20106, nullptr, "UpdateFriendInfoForViewerV1"},
{20107, nullptr, "GetFriendDetailedInfoV2"}, // 20.0.0+
{20108, &IFriendService::GetFriendListForViewer, "GetFriendListForViewerV2"}, // 22.0.0+
{20109, nullptr, "UpdateFriendInfoForViewerV2"}, // 22.0.0+
{20110, nullptr, "LoadFriendSettingV1"},
{20111, nullptr, "LoadFriendSettingV2"}, // 22.0.0+
{20200, &IFriendService::GetReceivedFriendRequestCount, "GetReceivedFriendRequestCount"},
{20201, nullptr, "GetFriendRequestListV1"},
{20202, nullptr, "GetFriendRequestListV2"}, // 20.0.0+
{20203, nullptr, "GetFriendRequestReceivedNotificationCount"}, // 22.0.0+
{20300, nullptr, "GetFriendCandidateList"},
{20301, nullptr, "GetNintendoNetworkIdInfo"},
{20302, nullptr, "GetSnsAccountLinkage"}, // 5.0.0-19.0.1
{20303, nullptr, "GetSnsAccountProfile"}, // 5.0.0-19.0.1
{20304, nullptr, "GetSnsAccountFriendList"}, // 5.0.0-19.0.1
{20400, nullptr, "GetBlockedUserListV1"},
{20401, nullptr, "SyncBlockedUserList"},
{20402, nullptr, "GetBlockedUserListV2"}, // 20.0.0+
{20500, nullptr, "GetProfileExtraListV1"},
{20501, nullptr, "GetRelationship"},
{20502, nullptr, "GetProfileExtraListV2"}, // 19.0.0+
{20600, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV1"},
{20601, &IFriendService::GetUserPresenceView, "GetUserPresenceViewV2"}, // 19.0.0+
{20700, nullptr, "GetPlayHistoryListV1"},
{20701, &IFriendService::GetPlayHistoryStatistics, "GetPlayHistoryStatistics"},
{20702, nullptr, "GetPlayHistoryListV2"}, // 19.0.0+
{20800, &IFriendService::LoadUserSetting, "LoadUserSettingV1"},
{20801, nullptr, "SyncUserSetting"},
{20802, &IFriendService::LoadUserSetting, "LoadUserSettingV2"}, // 19.0.0+
{20900, &IFriendService::RequestListSummaryOverlayNotification, "RequestListSummaryOverlayNotification"},
{21000, nullptr, "GetExternalApplicationCatalog"},
{22000, nullptr, "GetReceivedFriendInvitationListV1"},
{22001, nullptr, "GetReceivedFriendInvitationDetailedInfoV1"},
{22002, nullptr, "GetReceivedFriendInvitationListV2"}, // 19.0.0+
{22003, nullptr, "GetReceivedFriendInvitationDetailedInfoV2"}, // 19.0.0+
{22010, &IFriendService::GetReceivedFriendInvitationCountCache, "GetReceivedFriendInvitationCountCache"},
{30100, nullptr, "DropFriendNewlyFlags"},
{30101, nullptr, "DeleteFriend"},
{30110, nullptr, "DropFriendNewlyFlag"},
{30120, nullptr, "ChangeFriendFavoriteFlag"},
{30121, nullptr, "ChangeFriendOnlineNotificationFlag"},
{30130, nullptr, "SetFriendNote"}, // 22.0.0+
{30131, nullptr, "RequestUploadPendingNote"}, // 22.0.0+
{30190, nullptr, "RequestSyncLocalUpdates"}, // 22.0.0+
{30200, nullptr, "SendFriendRequest"},
{30201, nullptr, "SendFriendRequestWithApplicationInfoV1"},
{30202, nullptr, "CancelFriendRequest"},
{30203, nullptr, "AcceptFriendRequest"},
{30204, nullptr, "RejectFriendRequest"},
{30205, nullptr, "ReadFriendRequest"},
{30210, nullptr, "GetFacedFriendRequestRegistrationKey"},
{30211, nullptr, "AddFacedFriendRequest"},
{30212, nullptr, "CancelFacedFriendRequest"},
{30213, nullptr, "GetFacedFriendRequestProfileImage"},
{30214, nullptr, "GetFacedFriendRequestProfileImageFromPath"},
{30215, nullptr, "SendFriendRequestWithExternalApplicationCatalogId"},
{30216, nullptr, "ResendFacedFriendRequest"},
{30217, nullptr, "SendFriendRequestWithNintendoNetworkIdInfo"},
{30218, nullptr, "SendFriendRequestWithApplicationInfoV2"}, // 20.0.0+
{30300, nullptr, "GetSnsAccountLinkPageUrl"}, // 5.0.0-19.0.1
{30301, nullptr, "UnlinkSnsAccount"}, // 5.0.0-19.0.1
{30400, nullptr, "BlockUser"},
{30401, nullptr, "BlockUserWithApplicationInfoV1"},
{30402, nullptr, "UnblockUser"},
{30403, nullptr, "BlockUserWithApplicationInfoV2"}, // 20.0.0+
{30500, nullptr, "GetProfileExtraFromFriendCodeV1"},
{30501, nullptr, "GetProfileExtraFromFriendCodeV2"}, // 19.0.0+
{30700, nullptr, "DeletePlayHistory"},
{30701, nullptr, "AddPlayHistoryWithApplication"}, // 19.0.0+
{30810, nullptr, "ChangePresencePermission"},
{30811, nullptr, "ChangeFriendRequestReception"},
{30812, nullptr, "ChangePlayLogPermission"},
{30820, nullptr, "IssueFriendCode"},
{30830, nullptr, "ClearPlayLog"},
{30900, nullptr, "SendFriendInvitationV1"},
{30901, nullptr, "SendFriendInvitationV2"}, // 19.0.0+
{30910, nullptr, "ReadFriendInvitation"},
{30911, nullptr, "ReadAllFriendInvitations"},
{31000, nullptr, "OpenUser"}, // 19.0.0+
{40100, nullptr, "DeleteFriendListCache"},
{40400, nullptr, "DeleteBlockedUserListCache"},
{49900, nullptr, "DeleteNetworkServiceAccountCache"},
};
// clang-format on
RegisterHandlers(functions);
completion_event = service_context.CreateEvent("IFriendService:CompletionEvent");
}
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"}
);
}
~IFriendService() override {
service_context.CloseEvent(completion_event);
}
@@ -375,21 +373,19 @@ private:
class INotificationService final : public ServiceFramework<INotificationService> {
public:
explicit INotificationService(Core::System& system_, Common::UUID uuid_)
: ServiceFramework{system_, "INotificationService"}, uuid{uuid_},
service_context{system_, "INotificationService"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &INotificationService::GetEvent, "GetEvent"},
{1, &INotificationService::Clear, "Clear"},
{2, &INotificationService::Pop, "Pop"}
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "INotificationService"}, uuid{uuid_}
, service_context{system_, "INotificationService"} {
notification_event = service_context.CreateEvent("INotificationService:NotifyEvent");
}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &INotificationService::GetEvent, "GetEvent"},
FunctionInfo{1, &INotificationService::Clear, "Clear"},
FunctionInfo{2, &INotificationService::Pop, "Pop"}
);
}
~INotificationService() override {
service_context.CloseEvent(notification_event);
}
@@ -501,12 +497,13 @@ class IServiceForApplication final : public ServiceFramework<IServiceForApplicat
public:
explicit IServiceForApplication(Core::System& system_)
: ServiceFramework{system_, "nd:app"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "GetReceivableNeighborInfoCountMax"},
{10, nullptr, "IsNeighborDetectionEnabled"},
};
RegisterHandlers(functions);
{}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetReceivableNeighborInfoCountMax"},
FunctionInfo{10, nullptr, "IsNeighborDetectionEnabled"}
);
}
};
@@ -514,47 +511,48 @@ class IServiceForSystem final : public ServiceFramework<IServiceForSystem> {
public:
explicit IServiceForSystem(Core::System& system_)
: ServiceFramework{system_, "nd:sys"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "GetReceivableNeighborInfoCountMax"},
{10, nullptr, "IsNeighborDetectionEnabled"},
{200, nullptr, "SetSystemData"},
{201, nullptr, "ClearSystemData"},
{203, nullptr, "GetReceivableNeighborInfoCountForSystem"},
{204, nullptr, "ReceiveNeighborInfoForSystem"},
{205, nullptr, "SetSender"},
{206, nullptr, "GetSender"},
{207, nullptr, "CreateScannerForSystem"},
{208, nullptr, "CreateReceiveEventHolderForSystem"},
{223, nullptr, "EnableNeighborDetection"},
{224, nullptr, "DisableNeighborDetection"},
{226, nullptr, "EnablePowerSave"},
{227, nullptr, "DisablePowerSave"},
{228, nullptr, "IsPowerSaveEnabled"},
{232, nullptr, "ClearBlockedUsers"},
{233, nullptr, "GetBlockedUserCount"},
{234, nullptr, "BlockUserByLocalUserId"},
{235, nullptr, "BlockUserByNetworkUserId"},
{236, nullptr, "UnblockUserByLocalUserId"},
{237, nullptr, "UnblockUserByNetworkUserId"},
{240, nullptr, "DeleteApplication"},
{250, nullptr, "InitializeApplicationInfo"},
{260, nullptr, "CreateAccountSystemSaveDataAccessSuppressor"},
{300, nullptr, "AddReceivedNeighborInfoForSystemForDebug"},
{301, nullptr, "GetSendDataForDebug"},
{302, nullptr, "ClearReceiveCounterForDebug"},
{303, nullptr, "GetNextReceiveCounterForDebug"},
{304, nullptr, "ListBlockedUsersForDebug"},
{305, nullptr, "RefreshSendDataIdForDebug"},
{306, nullptr, "ReloadFwdbgSettingsForDebug"},
{307, nullptr, "EnableApplicationForDebug"},
{308, nullptr, "GetNextReceiveCountersForDebug"},
{309, nullptr, "ListApplicationInfoForDebug"},
{310, nullptr, "SetApplicationDataForDebug"},
{400, nullptr, "GetNetworkUserId"},
{401, nullptr, "DeleteNetworkUserId"},
};
RegisterHandlers(functions);
{}
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"}
);
}
};
+10 -12
View File
@@ -164,16 +164,14 @@ public:
using IssuerFn = std::function<Result(u64, ApplicationLaunchProperty, std::vector<u8>)>;
explicit IRegistrar(Core::System& system_, IssuerFn&& issuer)
: ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IRegistrar::Issue, "Issue"},
{1, &IRegistrar::SetApplicationLaunchProperty, "SetApplicationLaunchProperty"},
{2, &IRegistrar::SetApplicationControlProperty, "SetApplicationControlProperty"},
};
// clang-format on
: ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IRegistrar::Issue, "Issue"},
FunctionInfo{1, &IRegistrar::SetApplicationLaunchProperty, "SetApplicationLaunchProperty"},
FunctionInfo{2, &IRegistrar::SetApplicationControlProperty, "SetApplicationControlProperty"}
);
}
private:
@@ -248,9 +246,9 @@ ARP_W::ARP_W(Core::System& system_, ARPManager& manager_)
: ServiceFramework{system_, "arp:w"}, manager{manager_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ARP_W::AcquireRegistrar, "AcquireRegistrar"},
{1, &ARP_W::UnregisterApplicationInstance , "UnregisterApplicationInstance "},
{2, nullptr, "AcquireUpdater"},
FunctionInfo{0, &ARP_W::AcquireRegistrar, "AcquireRegistrar"},
FunctionInfo{1, &ARP_W::UnregisterApplicationInstance , "UnregisterApplicationInstance "},
FunctionInfo{2, nullptr, "AcquireUpdater"}
};
// clang-format on
+5 -7
View File
@@ -12,14 +12,12 @@ namespace Service::Glue {
// This is nn::err::context::IContextRegistrar
class IContextRegistrar : public ServiceFramework<IContextRegistrar> {
public:
IContextRegistrar(Core::System& system_) : ServiceFramework{system_, "IContextRegistrar"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IContextRegistrar::Complete, "Complete"},
};
// clang-format on
IContextRegistrar(Core::System& system_) : ServiceFramework{system_, "IContextRegistrar"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IContextRegistrar::Complete, "Complete"}
);
}
~IContextRegistrar() override = default;
+8 -11
View File
@@ -178,18 +178,15 @@ class INotificationSystemEventAccessor final
: public ServiceFramework<INotificationSystemEventAccessor> {
public:
explicit INotificationSystemEventAccessor(Core::System& system_)
: ServiceFramework{system_, "INotificationSystemEventAccessor"},
service_context{system_, "INotificationSystemEventAccessor"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"},
};
// clang-format on
: ServiceFramework{system_, "INotificationSystemEventAccessor"}
, service_context{system_, "INotificationSystemEventAccessor"} {
notification_event = service_context.CreateEvent("INotificationSystemEventAccessor:NotificationEvent");
}
RegisterHandlers(functions);
notification_event =
service_context.CreateEvent("INotificationSystemEventAccessor:NotificationEvent");
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"}
);
}
~INotificationSystemEventAccessor() {
+22 -19
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -31,25 +34,25 @@ StaticService::StaticService(Core::System& system_,
m_time_zone_binary{time->m_time_zone_binary} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&StaticService::GetStandardUserSystemClock>, "GetStandardUserSystemClock"},
{1, D<&StaticService::GetStandardNetworkSystemClock>, "GetStandardNetworkSystemClock"},
{2, D<&StaticService::GetStandardSteadyClock>, "GetStandardSteadyClock"},
{3, D<&StaticService::GetTimeZoneService>, "GetTimeZoneService"},
{4, D<&StaticService::GetStandardLocalSystemClock>, "GetStandardLocalSystemClock"},
{5, D<&StaticService::GetEphemeralNetworkSystemClock>, "GetEphemeralNetworkSystemClock"},
{20, D<&StaticService::GetSharedMemoryNativeHandle>, "GetSharedMemoryNativeHandle"},
{50, D<&StaticService::SetStandardSteadyClockInternalOffset>, "SetStandardSteadyClockInternalOffset"},
{51, D<&StaticService::GetStandardSteadyClockRtcValue>, "GetStandardSteadyClockRtcValue"},
{100, D<&StaticService::IsStandardUserSystemClockAutomaticCorrectionEnabled>, "IsStandardUserSystemClockAutomaticCorrectionEnabled"},
{101, D<&StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled>, "SetStandardUserSystemClockAutomaticCorrectionEnabled"},
{102, D<&StaticService::GetStandardUserSystemClockInitialYear>, "GetStandardUserSystemClockInitialYear"},
{200, D<&StaticService::IsStandardNetworkSystemClockAccuracySufficient>, "IsStandardNetworkSystemClockAccuracySufficient"},
{201, D<&StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime>, "GetStandardUserSystemClockAutomaticCorrectionUpdatedTime"},
{300, D<&StaticService::CalculateMonotonicSystemClockBaseTimePoint>, "CalculateMonotonicSystemClockBaseTimePoint"},
{400, D<&StaticService::GetClockSnapshot>, "GetClockSnapshot"},
{401, D<&StaticService::GetClockSnapshotFromSystemClockContext>, "GetClockSnapshotFromSystemClockContext"},
{500, D<&StaticService::CalculateStandardUserSystemClockDifferenceByUser>, "CalculateStandardUserSystemClockDifferenceByUser"},
{501, D<&StaticService::CalculateSpanBetween>, "CalculateSpanBetween"},
FunctionInfo{0, D<&StaticService::GetStandardUserSystemClock>, "GetStandardUserSystemClock"},
FunctionInfo{1, D<&StaticService::GetStandardNetworkSystemClock>, "GetStandardNetworkSystemClock"},
FunctionInfo{2, D<&StaticService::GetStandardSteadyClock>, "GetStandardSteadyClock"},
FunctionInfo{3, D<&StaticService::GetTimeZoneService>, "GetTimeZoneService"},
FunctionInfo{4, D<&StaticService::GetStandardLocalSystemClock>, "GetStandardLocalSystemClock"},
FunctionInfo{5, D<&StaticService::GetEphemeralNetworkSystemClock>, "GetEphemeralNetworkSystemClock"},
FunctionInfo{20, D<&StaticService::GetSharedMemoryNativeHandle>, "GetSharedMemoryNativeHandle"},
FunctionInfo{50, D<&StaticService::SetStandardSteadyClockInternalOffset>, "SetStandardSteadyClockInternalOffset"},
FunctionInfo{51, D<&StaticService::GetStandardSteadyClockRtcValue>, "GetStandardSteadyClockRtcValue"},
FunctionInfo{100, D<&StaticService::IsStandardUserSystemClockAutomaticCorrectionEnabled>, "IsStandardUserSystemClockAutomaticCorrectionEnabled"},
FunctionInfo{101, D<&StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled>, "SetStandardUserSystemClockAutomaticCorrectionEnabled"},
FunctionInfo{102, D<&StaticService::GetStandardUserSystemClockInitialYear>, "GetStandardUserSystemClockInitialYear"},
FunctionInfo{200, D<&StaticService::IsStandardNetworkSystemClockAccuracySufficient>, "IsStandardNetworkSystemClockAccuracySufficient"},
FunctionInfo{201, D<&StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime>, "GetStandardUserSystemClockAutomaticCorrectionUpdatedTime"},
FunctionInfo{300, D<&StaticService::CalculateMonotonicSystemClockBaseTimePoint>, "CalculateMonotonicSystemClockBaseTimePoint"},
FunctionInfo{400, D<&StaticService::GetClockSnapshot>, "GetClockSnapshot"},
FunctionInfo{401, D<&StaticService::GetClockSnapshotFromSystemClockContext>, "GetClockSnapshotFromSystemClockContext"},
FunctionInfo{500, D<&StaticService::CalculateStandardUserSystemClockDifferenceByUser>, "CalculateStandardUserSystemClockDifferenceByUser"},
FunctionInfo{501, D<&StaticService::CalculateSpanBetween>, "CalculateSpanBetween"}
};
// clang-format on
+1 -1
View File
@@ -17,7 +17,7 @@ public:
: ServiceFramework{system_, "gpio"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "Cmd0"},
FunctionInfo{0, nullptr, "Cmd0"}
};
RegisterHandlers(functions);
}
+17 -20
View File
@@ -14,32 +14,29 @@ namespace Service::GRC {
class GRC final : public ServiceFramework<GRC> {
public:
explicit GRC(Core::System& system_) : ServiceFramework{system_, "grc:c"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "OpenContinuousRecorder"},
{2, nullptr, "OpenGameMovieTrimmer"},
{3, nullptr, "OpenOffscreenRecorder"},
{101, nullptr, "CreateMovieMaker"},
{9903, nullptr, "SetOffscreenRecordingMarker"}
};
// clang-format on
explicit GRC(Core::System& system_) : ServiceFramework{system_, "grc:c"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{1, nullptr, "OpenContinuousRecorder"},
FunctionInfo{2, nullptr, "OpenGameMovieTrimmer"},
FunctionInfo{3, nullptr, "OpenOffscreenRecorder"},
FunctionInfo{101, nullptr, "CreateMovieMaker"},
FunctionInfo{9903, nullptr, "SetOffscreenRecordingMarker"}
);
}
};
class GRC_D final : public ServiceFramework<GRC_D> {
public:
explicit GRC_D(Core::System& system_) : ServiceFramework{system_, "grc:d"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "Initialize"},
{2, nullptr, "Transfer"},
{3, nullptr, "Cmd3"},
};
// clang-format on
RegisterHandlers(functions);
explicit GRC_D(Core::System& system_) : ServiceFramework{system_, "grc:d"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{1, nullptr, "Initialize"},
FunctionInfo{2, nullptr, "Transfer"},
FunctionInfo{3, nullptr, "Cmd3"}
);
}
};
@@ -19,7 +19,7 @@ IActiveVibrationDeviceList::IActiveVibrationDeviceList(Core::System& system_,
: ServiceFramework{system_, "IActiveVibrationDeviceList"}, resource_manager(resource) {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&IActiveVibrationDeviceList::ActivateVibrationDevice>, "ActivateVibrationDevice"},
FunctionInfo{0, C<&IActiveVibrationDeviceList::ActivateVibrationDevice>, "ActivateVibrationDevice"}
};
// clang-format on
+27 -30
View File
@@ -22,13 +22,12 @@ namespace Service::HID {
class IHidTemporaryServer final : public ServiceFramework<IHidTemporaryServer> {
public:
explicit IHidTemporaryServer(Core::System& system_)
: ServiceFramework{system_, "hid:tmp"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetConsoleSixAxisSensorCalibrationValues"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "hid:tmp"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetConsoleSixAxisSensorCalibrationValues"}
);
}
~IHidTemporaryServer() override = default;
};
@@ -36,17 +35,16 @@ public:
class AHID_CD final : public ServiceFramework<AHID_CD> {
public:
explicit AHID_CD(Core::System& system_)
: ServiceFramework{system_, "ahid:cd"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "AcquireDevice"},
{1, nullptr, "ReleaseDevice"},
{2, nullptr, "GetCtrlSession"},
{3, nullptr, "GetReadSession"},
{4, nullptr, "GetWriteSession"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "ahid:cd"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "AcquireDevice"},
FunctionInfo{1, nullptr, "ReleaseDevice"},
FunctionInfo{2, nullptr, "GetCtrlSession"},
FunctionInfo{3, nullptr, "GetReadSession"},
FunctionInfo{4, nullptr, "GetWriteSession"}
);
}
~AHID_CD() override = default;
};
@@ -54,18 +52,17 @@ public:
class AHID_HDR final : public ServiceFramework<AHID_HDR> {
public:
explicit AHID_HDR(Core::System& system_)
: ServiceFramework{system_, "ahid:hdr"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetDeviceEntries"},
{1, nullptr, "GetDeviceList"},
{2, nullptr, "GetDeviceParameters"},
{3, nullptr, "AttachDevice"},
{4, nullptr, "DetachDevice"},
{5, nullptr, "SetDeviceFilter"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "ahid:hdr"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "GetDeviceEntries"},
FunctionInfo{1, nullptr, "GetDeviceList"},
FunctionInfo{2, nullptr, "GetDeviceParameters"},
FunctionInfo{3, nullptr, "AttachDevice"},
FunctionInfo{4, nullptr, "DetachDevice"},
FunctionInfo{5, nullptr, "SetDeviceFilter"}
);
}
~AHID_HDR() override = default;
};
+14 -14
View File
@@ -31,20 +31,20 @@ Hidbus::Hidbus(Core::System& system_)
// clang-format off
static const FunctionInfo functions[] = {
{1, C<&Hidbus::GetBusHandle>, "GetBusHandle"},
{2, C<&Hidbus::IsExternalDeviceConnected>, "IsExternalDeviceConnected"},
{3, C<&Hidbus::Initialize>, "Initialize"},
{4, C<&Hidbus::Finalize>, "Finalize"},
{5, C<&Hidbus::EnableExternalDevice>, "EnableExternalDevice"},
{6, C<&Hidbus::GetExternalDeviceId>, "GetExternalDeviceId"},
{7, C<&Hidbus::SendCommandAsync>, "SendCommandAsync"},
{8, C<&Hidbus::GetSendCommandAsynceResult>, "GetSendCommandAsynceResult"},
{9, C<&Hidbus::SetEventForSendCommandAsycResult>, "SetEventForSendCommandAsycResult"},
{10, C<&Hidbus::GetSharedMemoryHandle>, "GetSharedMemoryHandle"},
{11, C<&Hidbus::EnableJoyPollingReceiveMode>, "EnableJoyPollingReceiveMode"},
{12, C<&Hidbus::DisableJoyPollingReceiveMode>, "DisableJoyPollingReceiveMode"},
{13, nullptr, "GetPollingData"},
{14, C<&Hidbus::SetStatusManagerType>, "SetStatusManagerType"},
FunctionInfo{1, C<&Hidbus::GetBusHandle>, "GetBusHandle"},
FunctionInfo{2, C<&Hidbus::IsExternalDeviceConnected>, "IsExternalDeviceConnected"},
FunctionInfo{3, C<&Hidbus::Initialize>, "Initialize"},
FunctionInfo{4, C<&Hidbus::Finalize>, "Finalize"},
FunctionInfo{5, C<&Hidbus::EnableExternalDevice>, "EnableExternalDevice"},
FunctionInfo{6, C<&Hidbus::GetExternalDeviceId>, "GetExternalDeviceId"},
FunctionInfo{7, C<&Hidbus::SendCommandAsync>, "SendCommandAsync"},
FunctionInfo{8, C<&Hidbus::GetSendCommandAsynceResult>, "GetSendCommandAsynceResult"},
FunctionInfo{9, C<&Hidbus::SetEventForSendCommandAsycResult>, "SetEventForSendCommandAsycResult"},
FunctionInfo{10, C<&Hidbus::GetSharedMemoryHandle>, "GetSharedMemoryHandle"},
FunctionInfo{11, C<&Hidbus::EnableJoyPollingReceiveMode>, "EnableJoyPollingReceiveMode"},
FunctionInfo{12, C<&Hidbus::DisableJoyPollingReceiveMode>, "DisableJoyPollingReceiveMode"},
FunctionInfo{13, nullptr, "GetPollingData"},
FunctionInfo{14, C<&Hidbus::SetStatusManagerType>, "SetStatusManagerType"},
};
// clang-format on
+12 -12
View File
@@ -21,13 +21,13 @@ public:
: ServiceFramework{system_, "I2CSession"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "SendOld"},
{1, nullptr, "ReceiveOld"},
{2, nullptr, "ExecuteCommandListOld"},
{10, C<&I2CSession::Send>, "Send"},
{11, nullptr, "Receive"},
{12, nullptr, "ExecuteCommandList"},
{13, nullptr, "SetRetryPolicy"},
FunctionInfo{0, nullptr, "SendOld"},
FunctionInfo{1, nullptr, "ReceiveOld"},
FunctionInfo{2, nullptr, "ExecuteCommandListOld"},
FunctionInfo{10, C<&I2CSession::Send>, "Send"},
FunctionInfo{11, nullptr, "Receive"},
FunctionInfo{12, nullptr, "ExecuteCommandList"},
FunctionInfo{13, nullptr, "SetRetryPolicy"}
};
RegisterHandlers(functions);
}
@@ -49,11 +49,11 @@ public:
: ServiceFramework{system_, "i2c"}
{
static const FunctionInfo functions[] = {
{0, C<&I2C::OpenSessionForDev>, "OpenSessionForDev"},
{1, C<&I2C::OpenSession>, "OpenSession"},
{2, C<&I2C::HasDevice>, "HasDevice"},
{3, C<&I2C::HasDeviceForDev>, "HasDeviceForDev"},
{4, C<&I2C::OpenSession2>, "OpenSession2"},
FunctionInfo{0, C<&I2C::OpenSessionForDev>, "OpenSessionForDev"},
FunctionInfo{1, C<&I2C::OpenSession>, "OpenSession"},
FunctionInfo{2, C<&I2C::HasDevice>, "HasDevice"},
FunctionInfo{3, C<&I2C::HasDeviceForDev>, "HasDeviceForDev"},
FunctionInfo{4, C<&I2C::OpenSession2>, "OpenSession2"}
};
RegisterHandlers(functions);
}
+14 -19
View File
@@ -37,18 +37,6 @@ public:
, user_ro{std::move(user_ro_)}
, context{process_->GetMemory()}
{
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&IJitEnvironment::GenerateCode>, "GenerateCode"},
{1, C<&IJitEnvironment::Control>, "Control"},
{1000, C<&IJitEnvironment::LoadPlugin>, "LoadPlugin"},
{1001, C<&IJitEnvironment::GetCodeAddress>, "GetCodeAddress"},
};
// clang-format on
RegisterHandlers(functions);
// Identity map user code range into sysmodule context
configuration.user_rx_memory.size = user_rx.GetSize();
configuration.user_rx_memory.offset = user_rx.GetAddress();
@@ -59,6 +47,15 @@ public:
configuration.sys_ro_memory = configuration.user_ro_memory;
}
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"}
);
}
~IJitEnvironment() {
user_rx.Finalize(system.Kernel());
user_ro.Finalize(system.Kernel());
@@ -258,14 +255,12 @@ private:
class JITU final : public ServiceFramework<JITU> {
public:
explicit JITU(Core::System& system_) : ServiceFramework{system_, "jit:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&JITU::CreateJitEnvironment>, "CreateJitEnvironment"},
};
// clang-format on
explicit JITU(Core::System& system_) : ServiceFramework{system_, "jit:u"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, C<&JITU::CreateJitEnvironment>, "CreateJitEnvironment"}
);
}
private:
+34 -36
View File
@@ -18,43 +18,41 @@ namespace Service::LBL {
class LBL final : public ServiceFramework<LBL> {
public:
explicit LBL(Core::System& system_) : ServiceFramework{system_, "lbl"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &LBL::SaveCurrentSetting, "SaveCurrentSetting"},
{1, &LBL::LoadCurrentSetting, "LoadCurrentSetting"},
{2, &LBL::SetCurrentBrightnessSetting, "SetCurrentBrightnessSetting"},
{3, &LBL::GetCurrentBrightnessSetting, "GetCurrentBrightnessSetting"},
{4, nullptr, "ApplyCurrentBrightnessSettingToBacklight"},
{5, nullptr, "GetBrightnessSettingAppliedToBacklight"},
{6, &LBL::SwitchBacklightOn, "SwitchBacklightOn"},
{7, &LBL::SwitchBacklightOff, "SwitchBacklightOff"},
{8, &LBL::GetBacklightSwitchStatus, "GetBacklightSwitchStatus"},
{9, &LBL::EnableDimming, "EnableDimming"},
{10, &LBL::DisableDimming, "DisableDimming"},
{11, &LBL::IsDimmingEnabled, "IsDimmingEnabled"},
{12, &LBL::EnableAutoBrightnessControl, "EnableAutoBrightnessControl"},
{13, &LBL::DisableAutoBrightnessControl, "DisableAutoBrightnessControl"},
{14, &LBL::IsAutoBrightnessControlEnabled, "IsAutoBrightnessControlEnabled"},
{15, &LBL::SetAmbientLightSensorValue, "SetAmbientLightSensorValue"},
{16, &LBL::GetAmbientLightSensorValue, "GetAmbientLightSensorValue"},
{17, &LBL::SetBrightnessReflectionDelayLevel, "SetBrightnessReflectionDelayLevel"},
{18, &LBL::GetBrightnessReflectionDelayLevel, "GetBrightnessReflectionDelayLevel"},
{19, &LBL::SetCurrentBrightnessMapping, "SetCurrentBrightnessMapping"},
{20, &LBL::GetCurrentBrightnessMapping, "GetCurrentBrightnessMapping"},
{21, &LBL::SetCurrentAmbientLightSensorMapping, "SetCurrentAmbientLightSensorMapping"},
{22, &LBL::GetCurrentAmbientLightSensorMapping, "GetCurrentAmbientLightSensorMapping"},
{23, &LBL::IsAmbientLightSensorAvailable, "IsAmbientLightSensorAvailable"},
{24, &LBL::SetCurrentBrightnessSettingForVrMode, "SetCurrentBrightnessSettingForVrMode"},
{25, &LBL::GetCurrentBrightnessSettingForVrMode, "GetCurrentBrightnessSettingForVrMode"},
{26, &LBL::EnableVrMode, "EnableVrMode"},
{27, &LBL::DisableVrMode, "DisableVrMode"},
{28, &LBL::IsVrModeEnabled, "IsVrModeEnabled"},
{29, &LBL::IsAutoBrightnessControlSupported, "IsAutoBrightnessControlSupported"},
};
// clang-format on
explicit LBL(Core::System& system_) : ServiceFramework{system_, "lbl"} {}
RegisterHandlers(functions);
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"}
);
}
private:
+35 -45
View File
@@ -20,13 +20,12 @@ class IClientProcessMonitor final
: public ServiceFramework<IClientProcessMonitor> {
public:
explicit IClientProcessMonitor(Core::System& system_)
: ServiceFramework{system_, "IClientProcessMonitor"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IClientProcessMonitor::RegisterClient>, "RegisterClient"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "IClientProcessMonitor"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, D<&IClientProcessMonitor::RegisterClient>, "RegisterClient"}
);
}
~IClientProcessMonitor() override = default;
private:
@@ -38,13 +37,12 @@ private:
class IMonitorServiceCreator final : public ServiceFramework<IMonitorServiceCreator> {
public:
explicit IMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:m"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&IMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"}
};
// clang-format on
RegisterHandlers(functions);
explicit IMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:m"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, C<&IMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"}
);
}
private:
@@ -58,15 +56,13 @@ private:
class ISystemServiceCreator final : public ServiceFramework<ISystemServiceCreator> {
public:
explicit ISystemServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:s"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ISystemServiceCreator::CreateSystemLocalCommunicationService>, "CreateSystemLocalCommunicationService"},
{1, C<&ISystemServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+
};
// clang-format on
explicit ISystemServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:s"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, C<&ISystemServiceCreator::CreateSystemLocalCommunicationService>, "CreateSystemLocalCommunicationService"},
FunctionInfo{1, C<&ISystemServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+
);
}
private:
@@ -89,15 +85,13 @@ private:
class IUserServiceCreator final : public ServiceFramework<IUserServiceCreator> {
public:
explicit IUserServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IUserServiceCreator::CreateUserLocalCommunicationService>, "CreateUserLocalCommunicationService"},
{1, D<&IUserServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+
};
// clang-format on
explicit IUserServiceCreator(Core::System& system_) : ServiceFramework{system_, "ldn:u"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, D<&IUserServiceCreator::CreateUserLocalCommunicationService>, "CreateUserLocalCommunicationService"},
FunctionInfo{1, D<&IUserServiceCreator::CreateClientProcessMonitor>, "CreateClientProcessMonitor"} // 18.0.0+
);
}
private:
@@ -121,15 +115,13 @@ private:
class ISfServiceCreator final : public ServiceFramework<ISfServiceCreator> {
public:
explicit ISfServiceCreator(Core::System& system_, bool is_system_, const char* name_)
: ServiceFramework{system_, name_}, is_system{is_system_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ISfServiceCreator::CreateNetworkService>, "CreateNetworkService"},
{8, C<&ISfServiceCreator::CreateNetworkServiceMonitor>, "CreateNetworkServiceMonitor"},
};
// clang-format on
: ServiceFramework{system_, name_}, is_system{is_system_} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, C<&ISfServiceCreator::CreateNetworkService>, "CreateNetworkService"},
FunctionInfo{8, C<&ISfServiceCreator::CreateNetworkServiceMonitor>, "CreateNetworkServiceMonitor"}
);
}
private:
@@ -155,14 +147,12 @@ private:
class ISfMonitorServiceCreator final : public ServiceFramework<ISfMonitorServiceCreator> {
public:
explicit ISfMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "lp2p:m"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ISfMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"},
};
// clang-format on
explicit ISfMonitorServiceCreator(Core::System& system_) : ServiceFramework{system_, "lp2p:m"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, C<&ISfMonitorServiceCreator::CreateMonitorService>, "CreateMonitorService"}
);
}
private:
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -11,9 +14,9 @@ ISfMonitorService::ISfMonitorService(Core::System& system_)
: ServiceFramework{system_, "ISfMonitorService"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ISfMonitorService::Initialize>, "Initialize"},
{288, C<&ISfMonitorService::GetGroupInfo>, "GetGroupInfo"},
{320, nullptr, "GetLinkLevel"},
FunctionInfo{0, C<&ISfMonitorService::Initialize>, "Initialize"},
FunctionInfo{288, C<&ISfMonitorService::GetGroupInfo>, "GetGroupInfo"},
FunctionInfo{320, nullptr, "GetLinkLevel"}
};
// clang-format on
+21 -18
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -8,24 +11,24 @@ namespace Service::LDN {
ISfService::ISfService(Core::System& system_) : ServiceFramework{system_, "ISfService"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{256, nullptr, "AttachNetworkInterfaceStateChangeEvent"},
{264, nullptr, "GetNetworkInterfaceLastError"},
{272, nullptr, "GetRole"},
{280, nullptr, "GetAdvertiseData"},
{288, nullptr, "GetGroupInfo"},
{296, nullptr, "GetGroupInfo2"},
{304, nullptr, "GetGroupOwner"},
{312, nullptr, "GetIpConfig"},
{320, nullptr, "GetLinkLevel"},
{512, nullptr, "Scan"},
{768, nullptr, "CreateGroup"},
{776, nullptr, "DestroyGroup"},
{784, nullptr, "SetAdvertiseData"},
{1536, nullptr, "SendToOtherGroup"},
{1544, nullptr, "RecvFromOtherGroup"},
{1552, nullptr, "AddAcceptableGroupId"},
{1560, nullptr, "ClearAcceptableGroupId"},
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{256, nullptr, "AttachNetworkInterfaceStateChangeEvent"},
FunctionInfo{264, nullptr, "GetNetworkInterfaceLastError"},
FunctionInfo{272, nullptr, "GetRole"},
FunctionInfo{280, nullptr, "GetAdvertiseData"},
FunctionInfo{288, nullptr, "GetGroupInfo"},
FunctionInfo{296, nullptr, "GetGroupInfo2"},
FunctionInfo{304, nullptr, "GetGroupOwner"},
FunctionInfo{312, nullptr, "GetIpConfig"},
FunctionInfo{320, nullptr, "GetLinkLevel"},
FunctionInfo{512, nullptr, "Scan"},
FunctionInfo{768, nullptr, "CreateGroup"},
FunctionInfo{776, nullptr, "DestroyGroup"},
FunctionInfo{784, nullptr, "SetAdvertiseData"},
FunctionInfo{1536, nullptr, "SendToOtherGroup"},
FunctionInfo{1544, nullptr, "RecvFromOtherGroup"},
FunctionInfo{1552, nullptr, "AddAcceptableGroupId"},
FunctionInfo{1560, nullptr, "ClearAcceptableGroupId"},
};
// clang-format on
+16 -13
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -11,19 +14,19 @@ ISfServiceMonitor::ISfServiceMonitor(Core::System& system_)
: ServiceFramework{system_, "ISfServiceMonitor"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, C<&ISfServiceMonitor::Initialize>, "Initialize"},
{256, nullptr, "AttachNetworkInterfaceStateChangeEvent"},
{264, nullptr, "GetNetworkInterfaceLastError"},
{272, nullptr, "GetRole"},
{280, nullptr, "GetAdvertiseData"},
{281, nullptr, "GetAdvertiseData2"},
{288, C<&ISfServiceMonitor::GetGroupInfo>, "GetGroupInfo"},
{296, nullptr, "GetGroupInfo2"},
{304, nullptr, "GetGroupOwner"},
{312, nullptr, "GetIpConfig"},
{320, nullptr, "GetLinkLevel"},
{328, nullptr, "AttachJoinEvent"},
{336, nullptr, "GetMembers"},
FunctionInfo{0, C<&ISfServiceMonitor::Initialize>, "Initialize"},
FunctionInfo{256, nullptr, "AttachNetworkInterfaceStateChangeEvent"},
FunctionInfo{264, nullptr, "GetNetworkInterfaceLastError"},
FunctionInfo{272, nullptr, "GetRole"},
FunctionInfo{280, nullptr, "GetAdvertiseData"},
FunctionInfo{281, nullptr, "GetAdvertiseData2"},
FunctionInfo{288, C<&ISfServiceMonitor::GetGroupInfo>, "GetGroupInfo"},
FunctionInfo{296, nullptr, "GetGroupInfo2"},
FunctionInfo{304, nullptr, "GetGroupOwner"},
FunctionInfo{312, nullptr, "GetIpConfig"},
FunctionInfo{320, nullptr, "GetLinkLevel"},
FunctionInfo{328, nullptr, "AttachJoinEvent"},
FunctionInfo{336, nullptr, "GetMembers"}
};
// clang-format on
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -10,36 +13,36 @@ ISystemLocalCommunicationService::ISystemLocalCommunicationService(Core::System&
: ServiceFramework{system_, "ISystemLocalCommunicationService"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "GetState"},
{1, nullptr, "GetNetworkInfo"},
{2, nullptr, "GetIpv4Address"},
{3, nullptr, "GetDisconnectReason"},
{4, nullptr, "GetSecurityParameter"},
{5, nullptr, "GetNetworkConfig"},
{100, nullptr, "AttachStateChangeEvent"},
{101, nullptr, "GetNetworkInfoLatestUpdate"},
{102, nullptr, "Scan"},
{103, nullptr, "ScanPrivate"},
{104, nullptr, "SetWirelessControllerRestriction"},
{200, nullptr, "OpenAccessPoint"},
{201, nullptr, "CloseAccessPoint"},
{202, nullptr, "CreateNetwork"},
{203, nullptr, "CreateNetworkPrivate"},
{204, nullptr, "DestroyNetwork"},
{205, nullptr, "Reject"},
{206, nullptr, "SetAdvertiseData"},
{207, nullptr, "SetStationAcceptPolicy"},
{208, nullptr, "AddAcceptFilterEntry"},
{209, nullptr, "ClearAcceptFilter"},
{300, nullptr, "OpenStation"},
{301, nullptr, "CloseStation"},
{302, nullptr, "Connect"},
{303, nullptr, "ConnectPrivate"},
{304, nullptr, "Disconnect"},
{400, nullptr, "InitializeSystem"},
{401, nullptr, "FinalizeSystem"},
{402, nullptr, "SetOperationMode"},
{403, C<&ISystemLocalCommunicationService::InitializeSystem2>, "InitializeSystem2"},
FunctionInfo{0, nullptr, "GetState"},
FunctionInfo{1, nullptr, "GetNetworkInfo"},
FunctionInfo{2, nullptr, "GetIpv4Address"},
FunctionInfo{3, nullptr, "GetDisconnectReason"},
FunctionInfo{4, nullptr, "GetSecurityParameter"},
FunctionInfo{5, nullptr, "GetNetworkConfig"},
FunctionInfo{100, nullptr, "AttachStateChangeEvent"},
FunctionInfo{101, nullptr, "GetNetworkInfoLatestUpdate"},
FunctionInfo{102, nullptr, "Scan"},
FunctionInfo{103, nullptr, "ScanPrivate"},
FunctionInfo{104, nullptr, "SetWirelessControllerRestriction"},
FunctionInfo{200, nullptr, "OpenAccessPoint"},
FunctionInfo{201, nullptr, "CloseAccessPoint"},
FunctionInfo{202, nullptr, "CreateNetwork"},
FunctionInfo{203, nullptr, "CreateNetworkPrivate"},
FunctionInfo{204, nullptr, "DestroyNetwork"},
FunctionInfo{205, nullptr, "Reject"},
FunctionInfo{206, nullptr, "SetAdvertiseData"},
FunctionInfo{207, nullptr, "SetStationAcceptPolicy"},
FunctionInfo{208, nullptr, "AddAcceptFilterEntry"},
FunctionInfo{209, nullptr, "ClearAcceptFilter"},
FunctionInfo{300, nullptr, "OpenStation"},
FunctionInfo{301, nullptr, "CloseStation"},
FunctionInfo{302, nullptr, "Connect"},
FunctionInfo{303, nullptr, "ConnectPrivate"},
FunctionInfo{304, nullptr, "Disconnect"},
FunctionInfo{400, nullptr, "InitializeSystem"},
FunctionInfo{401, nullptr, "FinalizeSystem"},
FunctionInfo{402, nullptr, "SetOperationMode"},
FunctionInfo{403, C<&ISystemLocalCommunicationService::InitializeSystem2>, "InitializeSystem2"}
};
// clang-format on
@@ -27,36 +27,36 @@ IUserLocalCommunicationService::IUserLocalCommunicationService(Core::System& sys
lan_discovery{} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IUserLocalCommunicationService::GetState>, "GetState"},
{1, D<&IUserLocalCommunicationService::GetNetworkInfo>, "GetNetworkInfo"},
{2, D<&IUserLocalCommunicationService::GetIpv4Address>, "GetIpv4Address"},
{3, D<&IUserLocalCommunicationService::GetDisconnectReason>, "GetDisconnectReason"},
{4, D<&IUserLocalCommunicationService::GetSecurityParameter>, "GetSecurityParameter"},
{5, D<&IUserLocalCommunicationService::GetNetworkConfig>, "GetNetworkConfig"},
{100, D<&IUserLocalCommunicationService::AttachStateChangeEvent>, "AttachStateChangeEvent"},
{101, D<&IUserLocalCommunicationService::GetNetworkInfoLatestUpdate>, "GetNetworkInfoLatestUpdate"},
{102, D<&IUserLocalCommunicationService::Scan>, "Scan"},
{103, D<&IUserLocalCommunicationService::ScanPrivate>, "ScanPrivate"},
{104, D<&IUserLocalCommunicationService::SetWirelessControllerRestriction>, "SetWirelessControllerRestriction"},
{ 106, D<&IUserLocalCommunicationService::SetProtocol>, "SetProtocol" },
{200, D<&IUserLocalCommunicationService::OpenAccessPoint>, "OpenAccessPoint"},
{201, D<&IUserLocalCommunicationService::CloseAccessPoint>, "CloseAccessPoint"},
{202, D<&IUserLocalCommunicationService::CreateNetwork>, "CreateNetwork"},
{203, D<&IUserLocalCommunicationService::CreateNetworkPrivate>, "CreateNetworkPrivate"},
{204, D<&IUserLocalCommunicationService::DestroyNetwork>, "DestroyNetwork"},
{205, nullptr, "Reject"},
{206, D<&IUserLocalCommunicationService::SetAdvertiseData>, "SetAdvertiseData"},
{207, D<&IUserLocalCommunicationService::SetStationAcceptPolicy>, "SetStationAcceptPolicy"},
{208, D<&IUserLocalCommunicationService::AddAcceptFilterEntry>, "AddAcceptFilterEntry"},
{209, nullptr, "ClearAcceptFilter"},
{300, D<&IUserLocalCommunicationService::OpenStation>, "OpenStation"},
{301, D<&IUserLocalCommunicationService::CloseStation>, "CloseStation"},
{302, D<&IUserLocalCommunicationService::Connect>, "Connect"},
{303, nullptr, "ConnectPrivate"},
{304, D<&IUserLocalCommunicationService::Disconnect>, "Disconnect"},
{400, D<&IUserLocalCommunicationService::Initialize>, "Initialize"},
{401, D<&IUserLocalCommunicationService::Finalize>, "Finalize"},
{402, D<&IUserLocalCommunicationService::Initialize2>, "Initialize2"},
FunctionInfo{0, D<&IUserLocalCommunicationService::GetState>, "GetState"},
FunctionInfo{1, D<&IUserLocalCommunicationService::GetNetworkInfo>, "GetNetworkInfo"},
FunctionInfo{2, D<&IUserLocalCommunicationService::GetIpv4Address>, "GetIpv4Address"},
FunctionInfo{3, D<&IUserLocalCommunicationService::GetDisconnectReason>, "GetDisconnectReason"},
FunctionInfo{4, D<&IUserLocalCommunicationService::GetSecurityParameter>, "GetSecurityParameter"},
FunctionInfo{5, D<&IUserLocalCommunicationService::GetNetworkConfig>, "GetNetworkConfig"},
FunctionInfo{100, D<&IUserLocalCommunicationService::AttachStateChangeEvent>, "AttachStateChangeEvent"},
FunctionInfo{101, D<&IUserLocalCommunicationService::GetNetworkInfoLatestUpdate>, "GetNetworkInfoLatestUpdate"},
FunctionInfo{102, D<&IUserLocalCommunicationService::Scan>, "Scan"},
FunctionInfo{103, D<&IUserLocalCommunicationService::ScanPrivate>, "ScanPrivate"},
FunctionInfo{104, D<&IUserLocalCommunicationService::SetWirelessControllerRestriction>, "SetWirelessControllerRestriction"},
FunctionInfo{106, D<&IUserLocalCommunicationService::SetProtocol>, "SetProtocol" },
FunctionInfo{200, D<&IUserLocalCommunicationService::OpenAccessPoint>, "OpenAccessPoint"},
FunctionInfo{201, D<&IUserLocalCommunicationService::CloseAccessPoint>, "CloseAccessPoint"},
FunctionInfo{202, D<&IUserLocalCommunicationService::CreateNetwork>, "CreateNetwork"},
FunctionInfo{203, D<&IUserLocalCommunicationService::CreateNetworkPrivate>, "CreateNetworkPrivate"},
FunctionInfo{204, D<&IUserLocalCommunicationService::DestroyNetwork>, "DestroyNetwork"},
FunctionInfo{205, nullptr, "Reject"},
FunctionInfo{206, D<&IUserLocalCommunicationService::SetAdvertiseData>, "SetAdvertiseData"},
FunctionInfo{207, D<&IUserLocalCommunicationService::SetStationAcceptPolicy>, "SetStationAcceptPolicy"},
FunctionInfo{208, D<&IUserLocalCommunicationService::AddAcceptFilterEntry>, "AddAcceptFilterEntry"},
FunctionInfo{209, nullptr, "ClearAcceptFilter"},
FunctionInfo{300, D<&IUserLocalCommunicationService::OpenStation>, "OpenStation"},
FunctionInfo{301, D<&IUserLocalCommunicationService::CloseStation>, "CloseStation"},
FunctionInfo{302, D<&IUserLocalCommunicationService::Connect>, "Connect"},
FunctionInfo{303, nullptr, "ConnectPrivate"},
FunctionInfo{304, D<&IUserLocalCommunicationService::Disconnect>, "Disconnect"},
FunctionInfo{400, D<&IUserLocalCommunicationService::Initialize>, "Initialize"},
FunctionInfo{401, D<&IUserLocalCommunicationService::Finalize>, "Finalize"},
FunctionInfo{402, D<&IUserLocalCommunicationService::Initialize2>, "Initialize2"}
};
// clang-format on
+22 -28
View File
@@ -12,47 +12,41 @@ namespace Service::LDR {
class DebugMonitor final : public ServiceFramework<DebugMonitor> {
public:
explicit DebugMonitor(Core::System& system_) : ServiceFramework{system_, "ldr:dmnt"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "SetProgramArgument"},
{1, nullptr, "FlushArguments"},
{2, nullptr, "GetProcessModuleInfo"},
};
// clang-format on
explicit DebugMonitor(Core::System& system_) : ServiceFramework{system_, "ldr:dmnt"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "SetProgramArgument"},
FunctionInfo{1, nullptr, "FlushArguments"},
FunctionInfo{2, nullptr, "GetProcessModuleInfo"}
);
}
};
class ProcessManager final : public ServiceFramework<ProcessManager> {
public:
explicit ProcessManager(Core::System& system_) : ServiceFramework{system_, "ldr:pm"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "CreateProcess"},
{1, nullptr, "GetProgramInfo"},
{2, nullptr, "PinProgram"},
{3, nullptr, "UnpinProgram"},
{4, nullptr, "SetEnabledProgramVerification"},
};
// clang-format on
explicit ProcessManager(Core::System& system_) : ServiceFramework{system_, "ldr:pm"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "CreateProcess"},
FunctionInfo{1, nullptr, "GetProgramInfo"},
FunctionInfo{2, nullptr, "PinProgram"},
FunctionInfo{3, nullptr, "UnpinProgram"},
FunctionInfo{4, nullptr, "SetEnabledProgramVerification"}
);
}
};
class Shell final : public ServiceFramework<Shell> {
public:
explicit Shell(Core::System& system_) : ServiceFramework{system_, "ldr:shel"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "SetProgramArgument"},
{1, nullptr, "FlushArguments"},
};
// clang-format on
explicit Shell(Core::System& system_) : ServiceFramework{system_, "ldr:shel"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "SetProgramArgument"},
FunctionInfo{1, nullptr, "FlushArguments"}
);
}
};
+13 -15
View File
@@ -89,10 +89,10 @@ class ILogger final : public ServiceFramework<ILogger> {
public:
explicit ILogger(Core::System& system_) : ServiceFramework{system_, "ILogger"} {
static const FunctionInfo functions[] = {
{0, &ILogger::Log, "Log"},
{1, &ILogger::SetDestination, "SetDestination"},
{2, nullptr, "TransmitHashedLog"}, //20.0.0+
{3, nullptr, "DevNotify"}, //20.0.0+
FunctionInfo{0, &ILogger::Log, "Log"},
FunctionInfo{1, &ILogger::SetDestination, "SetDestination"},
FunctionInfo{2, nullptr, "TransmitHashedLog"}, //20.0.0+
FunctionInfo{3, nullptr, "DevNotify"}, //20.0.0+
};
RegisterHandlers(functions);
}
@@ -337,14 +337,12 @@ private:
class LM final : public ServiceFramework<LM> {
public:
explicit LM(Core::System& system_) : ServiceFramework{system_, "lm"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &LM::OpenLogger, "OpenLogger"},
};
// clang-format on
explicit LM(Core::System& system_) : ServiceFramework{system_, "lm"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &LM::OpenLogger, "OpenLogger"}
);
}
private:
@@ -363,10 +361,10 @@ public:
: ServiceFramework{system_, "lm:get"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "StartLogging"},
{1, nullptr, "StopLogging"},
{2, nullptr, "GetLog"},
{100, nullptr, "CreateDevNotificationReceiver"},
FunctionInfo{0, nullptr, "StartLogging"},
FunctionInfo{1, nullptr, "StopLogging"},
FunctionInfo{2, nullptr, "GetLog"},
FunctionInfo{100, nullptr, "CreateDevNotificationReceiver"}
};
RegisterHandlers(functions);
}
+41 -43
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
@@ -14,49 +14,47 @@ namespace Service::Migration {
class MIG_USR final : public ServiceFramework<MIG_USR> {
public:
explicit MIG_USR(Core::System& system_) : ServiceFramework{system_, "mig:usr"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Unknown0"}, //19.0.0+
{1, nullptr, "Unknown1"}, //20.0.0+
{2, nullptr, "Unknown2"}, //20.0.0+
{10, nullptr, "TryGetLastMigrationInfo"},
{11, nullptr, "Unknown11"}, //20.0.0+
{100, nullptr, "CreateUserMigrationServer"}, //7.0.0+
{101, nullptr, "ResumeUserMigrationServer"}, //7.0.0+
{200, nullptr, "CreateUserMigrationClient"}, //7.0.0+
{201, nullptr, "ResumeUserMigrationClient"}, //7.0.0+
{1001, nullptr, "GetSaveDataMigrationPolicyInfoAsync"}, //8.0.0-20.5.0
{1010, nullptr, "TryGetLastSaveDataMigrationInfo"}, //7.0.0+
{1100, nullptr, "CreateSaveDataMigrationServer"}, //7.0.0-19.0.1
{1101, nullptr, "ResumeSaveDataMigrationServer"}, //7.0.0+
{1110, nullptr, "Unknown1101"}, //17.0.0+
{1200, nullptr, "CreateSaveDataMigrationClient"}, //7.0.0+
{1201, nullptr, "ResumeSaveDataMigrationClient"}, //7.0.0+
{2001, nullptr, "Unknown2001"}, //20.0.0+
{2010, nullptr, "Unknown2010"}, //20.0.0+
{2100, nullptr, "Unknown2100"}, //20.0.0+
{2110, nullptr, "Unknown2110"}, //20.0.0+
{2200, nullptr, "Unknown2200"}, //20.0.0+
{2210, nullptr, "Unknown2210"}, //20.0.0+
{2220, nullptr, "Unknown2220"}, //20.0.0+
{2230, nullptr, "Unknown2230"}, //20.0.0+
{2231, nullptr, "Unknown2231"}, //20.0.0+
{2232, nullptr, "Unknown2232"}, //20.0.0+
{2233, nullptr, "Unknown2233"}, //20.0.0+
{2234, nullptr, "Unknown2234"}, //20.0.0+
{2250, nullptr, "Unknown2250"}, //20.0.0+
{2260, nullptr, "Unknown2260"}, //20.0.0+
{2270, nullptr, "Unknown2270"}, //20.0.0+
{2280, nullptr, "Unknown2280"}, //20.0.0+
{2300, nullptr, "Unknown2300"}, //20.0.0+
{2310, nullptr, "Unknown2310"}, //20.0.0+
{2400, nullptr, "Unknown2400"}, //20.0.0+
{2420, nullptr, "Unknown2420"}, //20.0.0+
};
// clang-format on
explicit MIG_USR(Core::System& system_) : ServiceFramework{system_, "mig:usr"} {}
RegisterHandlers(functions);
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+
);
}
};
+55 -60
View File
@@ -24,49 +24,46 @@ namespace Service::Mii {
class IDatabaseService final : public ServiceFramework<IDatabaseService> {
public:
explicit IDatabaseService(Core::System& system_, std::shared_ptr<MiiManager> mii_manager,
bool is_system_)
: ServiceFramework{system_, "IDatabaseService"}, manager{mii_manager}, is_system{
is_system_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IDatabaseService::IsUpdated>, "IsUpdated"},
{1, D<&IDatabaseService::IsFullDatabase>, "IsFullDatabase"},
{2, D<&IDatabaseService::GetCount>, "GetCount"},
{3, D<&IDatabaseService::Get>, "Get"},
{4, D<&IDatabaseService::Get1>, "Get1"},
{5, D<&IDatabaseService::UpdateLatest>, "UpdateLatest"},
{6, D<&IDatabaseService::BuildRandom>, "BuildRandom"},
{7, D<&IDatabaseService::BuildDefault>, "BuildDefault"},
{8, D<&IDatabaseService::Get2>, "Get2"},
{9, D<&IDatabaseService::Get3>, "Get3"},
{10, D<&IDatabaseService::UpdateLatest1>, "UpdateLatest1"},
{11, D<&IDatabaseService::FindIndex>, "FindIndex"},
{12, D<&IDatabaseService::Move>, "Move"},
{13, D<&IDatabaseService::AddOrReplace>, "AddOrReplace"},
{14, D<&IDatabaseService::Delete>, "Delete"},
{15, D<&IDatabaseService::DestroyFile>, "DestroyFile"},
{16, D<&IDatabaseService::DeleteFile>, "DeleteFile"},
{17, D<&IDatabaseService::Format>, "Format"},
{18, nullptr, "Import"},
{19, nullptr, "Export"},
{20, D<&IDatabaseService::IsBrokenDatabaseWithClearFlag>, "IsBrokenDatabaseWithClearFlag"},
{21, D<&IDatabaseService::GetIndex>, "GetIndex"},
{22, D<&IDatabaseService::SetInterfaceVersion>, "SetInterfaceVersion"},
{23, D<&IDatabaseService::Convert>, "Convert"},
{24, D<&IDatabaseService::ConvertCoreDataToCharInfo>, "ConvertCoreDataToCharInfo"},
{25, D<&IDatabaseService::ConvertCharInfoToCoreData>, "ConvertCharInfoToCoreData"},
{26, D<&IDatabaseService::Append>, "Append"},
};
// clang-format on
RegisterHandlers(functions);
m_set_sys = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>(
"set:sys", true);
explicit IDatabaseService(Core::System& system_, std::shared_ptr<MiiManager> mii_manager, bool is_system_)
: ServiceFramework{system_, "IDatabaseService"}
, manager{mii_manager}
, is_system{is_system_} {
m_set_sys = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
manager->Initialize(metadata);
}
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"}
);
}
private:
Result IsUpdated(Out<bool> out_is_updated, SourceFlag source_flag) {
LOG_DEBUG(Service_Mii, "called with source_flag={}", source_flag);
@@ -324,27 +321,25 @@ std::shared_ptr<MiiManager> IStaticService::GetMiiManager() {
class IImageDatabaseService final : public ServiceFramework<IImageDatabaseService> {
public:
explicit IImageDatabaseService(Core::System& system_) : ServiceFramework{system_, "miiimg"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IImageDatabaseService::Initialize>, "Initialize"},
{10, nullptr, "Reload"},
{11, D<&IImageDatabaseService::GetCount>, "GetCount"},
{12, nullptr, "IsEmpty"},
{13, nullptr, "IsFull"},
{14, nullptr, "GetAttribute"},
{15, nullptr, "LoadImage"},
{16, nullptr, "AddOrUpdateImage"},
{17, nullptr, "DeleteImages"},
{100, nullptr, "DeleteFile"},
{101, nullptr, "DestroyFile"},
{102, nullptr, "ImportFile"},
{103, nullptr, "ExportFile"},
{104, nullptr, "ForceInitialize"},
};
// clang-format on
explicit IImageDatabaseService(Core::System& system_) : ServiceFramework{system_, "miiimg"} {}
RegisterHandlers(functions);
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"}
);
}
private:
+12 -14
View File
@@ -49,21 +49,19 @@ public:
class MM_U final : public ServiceFramework<MM_U> {
public:
explicit MM_U(Core::System& system_) : ServiceFramework{system_, "mm:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &MM_U::InitializeOld, "InitializeOld"},
{1, &MM_U::FinalizeOld, "FinalizeOld"},
{2, &MM_U::SetAndWaitOld, "SetAndWaitOld"},
{3, &MM_U::GetOld, "GetOld"},
{4, &MM_U::Initialize, "Initialize"},
{5, &MM_U::Finalize, "Finalize"},
{6, &MM_U::SetAndWait, "SetAndWait"},
{7, &MM_U::Get, "Get"},
};
// clang-format on
explicit MM_U(Core::System& system_) : ServiceFramework{system_, "mm:u"} {}
RegisterHandlers(functions);
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"}
);
}
private:
+27 -31
View File
@@ -14,15 +14,13 @@ 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
explicit MNPP_APP(Core::System& system_) : ServiceFramework{system_, "mnpp:app"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &MNPP_APP::Cmd0, "Cmd0"},
FunctionInfo{1, &MNPP_APP::Cmd1, "Cmd1"}
);
}
private:
@@ -43,34 +41,32 @@ private:
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);
explicit MNPP_SYS(Core::System& system_) : ServiceFramework{system_, "mnpp:sys"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Cmd0"},
FunctionInfo{10, nullptr, "Cmd10"},
FunctionInfo{100, nullptr, "Cmd100"},
FunctionInfo{200, nullptr, "Cmd200"},
FunctionInfo{300, nullptr, "Cmd300"},
FunctionInfo{400, nullptr, "Cmd400"}
);
}
};
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);
explicit MNPP_WEB(Core::System& system_) : ServiceFramework{system_, "mnpp:web"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Cmd0"},
FunctionInfo{1, nullptr, "Cmd1"},
FunctionInfo{10, nullptr, "Cmd10"},
FunctionInfo{20, nullptr, "Cmd20"},
FunctionInfo{100, nullptr, "Cmd100"}
);
}
};
+94 -108
View File
@@ -24,33 +24,31 @@ namespace Service::NCM {
class ILocationResolver final : public ServiceFramework<ILocationResolver> {
public:
explicit ILocationResolver(Core::System& system_, FileSys::StorageId id)
: ServiceFramework{system_, "ILocationResolver"}, storage{id} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "ResolveProgramPath"},
{1, nullptr, "RedirectProgramPath"},
{2, nullptr, "ResolveApplicationControlPath"},
{3, nullptr, "ResolveApplicationHtmlDocumentPath"},
{4, nullptr, "ResolveDataPath"},
{5, nullptr, "RedirectApplicationControlPath"},
{6, nullptr, "RedirectApplicationHtmlDocumentPath"},
{7, nullptr, "ResolveApplicationLegalInformationPath"},
{8, nullptr, "RedirectApplicationLegalInformationPath"},
{9, nullptr, "Refresh"},
{10, nullptr, "RedirectApplicationProgramPath"},
{11, nullptr, "ClearApplicationRedirection"},
{12, nullptr, "EraseProgramRedirection"},
{13, nullptr, "EraseApplicationControlRedirection"},
{14, nullptr, "EraseApplicationHtmlDocumentRedirection"},
{15, nullptr, "EraseApplicationLegalInformationRedirection"},
{16, nullptr, "ResolveProgramPathForDebug"},
{17, nullptr, "RedirectProgramPathForDebug"},
{18, nullptr, "RedirectApplicationProgramPathForDebug"},
{19, nullptr, "EraseProgramRedirectionForDebug"},
};
// clang-format on
: ServiceFramework{system_, "ILocationResolver"}, storage{id} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "ResolveProgramPath"},
FunctionInfo{1, nullptr, "RedirectProgramPath"},
FunctionInfo{2, nullptr, "ResolveApplicationControlPath"},
FunctionInfo{3, nullptr, "ResolveApplicationHtmlDocumentPath"},
FunctionInfo{4, nullptr, "ResolveDataPath"},
FunctionInfo{5, nullptr, "RedirectApplicationControlPath"},
FunctionInfo{6, nullptr, "RedirectApplicationHtmlDocumentPath"},
FunctionInfo{7, nullptr, "ResolveApplicationLegalInformationPath"},
FunctionInfo{8, nullptr, "RedirectApplicationLegalInformationPath"},
FunctionInfo{9, nullptr, "Refresh"},
FunctionInfo{10, nullptr, "RedirectApplicationProgramPath"},
FunctionInfo{11, nullptr, "ClearApplicationRedirection"},
FunctionInfo{12, nullptr, "EraseProgramRedirection"},
FunctionInfo{13, nullptr, "EraseApplicationControlRedirection"},
FunctionInfo{14, nullptr, "EraseApplicationHtmlDocumentRedirection"},
FunctionInfo{15, nullptr, "EraseApplicationLegalInformationRedirection"},
FunctionInfo{16, nullptr, "ResolveProgramPathForDebug"},
FunctionInfo{17, nullptr, "RedirectProgramPathForDebug"},
FunctionInfo{18, nullptr, "RedirectApplicationProgramPathForDebug"},
FunctionInfo{19, nullptr, "EraseProgramRedirectionForDebug"}
);
}
private:
@@ -60,60 +58,54 @@ private:
class IRegisteredLocationResolver final : public ServiceFramework<IRegisteredLocationResolver> {
public:
explicit IRegisteredLocationResolver(Core::System& system_)
: ServiceFramework{system_, "IRegisteredLocationResolver"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "ResolveProgramPath"},
{1, nullptr, "RegisterProgramPath"},
{2, nullptr, "UnregisterProgramPath"},
{3, nullptr, "RedirectProgramPath"},
{4, nullptr, "ResolveHtmlDocumentPath"},
{5, nullptr, "RegisterHtmlDocumentPath"},
{6, nullptr, "UnregisterHtmlDocumentPath"},
{7, nullptr, "RedirectHtmlDocumentPath"},
{8, nullptr, "Refresh"},
{9, nullptr, "RefreshExcluding"},
};
// clang-format on
: ServiceFramework{system_, "IRegisteredLocationResolver"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "ResolveProgramPath"},
FunctionInfo{1, nullptr, "RegisterProgramPath"},
FunctionInfo{2, nullptr, "UnregisterProgramPath"},
FunctionInfo{3, nullptr, "RedirectProgramPath"},
FunctionInfo{4, nullptr, "ResolveHtmlDocumentPath"},
FunctionInfo{5, nullptr, "RegisterHtmlDocumentPath"},
FunctionInfo{6, nullptr, "UnregisterHtmlDocumentPath"},
FunctionInfo{7, nullptr, "RedirectHtmlDocumentPath"},
FunctionInfo{8, nullptr, "Refresh"},
FunctionInfo{9, nullptr, "RefreshExcluding"}
);
}
};
class IAddOnContentLocationResolver final : public ServiceFramework<IAddOnContentLocationResolver> {
public:
explicit IAddOnContentLocationResolver(Core::System& system_)
: ServiceFramework{system_, "IAddOnContentLocationResolver"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "ResolveAddOnContentPath"},
{1, nullptr, "RegisterAddOnContentStorage"},
{2, nullptr, "UnregisterAllAddOnContentPath"},
{3, nullptr, "RefreshApplicationAddOnContent"},
{4, nullptr, "UnregisterApplicationAddOnContent"},
};
// clang-format on
: ServiceFramework{system_, "IAddOnContentLocationResolver"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "ResolveAddOnContentPath"},
FunctionInfo{1, nullptr, "RegisterAddOnContentStorage"},
FunctionInfo{2, nullptr, "UnregisterAllAddOnContentPath"},
FunctionInfo{3, nullptr, "RefreshApplicationAddOnContent"},
FunctionInfo{4, nullptr, "UnregisterApplicationAddOnContent"}
);
}
};
class IContentStorage final : public ServiceFramework<IContentStorage> {
public:
explicit IContentStorage(Core::System& system_, FileSys::StorageId id)
: ServiceFramework{system_, "IContentStorage"}, storage{id} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IContentStorage::GeneratePlaceHolderId, "GeneratePlaceHolderId"},
{1, &IContentStorage::CreatePlaceHolder, "CreatePlaceHolder"},
{2, &IContentStorage::DeletePlaceHolder, "DeletePlaceHolder"},
{4, &IContentStorage::WritePlaceHolder, "WritePlaceHolder"},
{5, &IContentStorage::Register, "Register"},
{6, &IContentStorage::Delete, "Delete"},
};
// clang-format on
: ServiceFramework{system_, "IContentStorage"}, storage{id} {}
RegisterHandlers(functions);
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"}
);
}
private:
@@ -258,17 +250,15 @@ private:
class IContentMetaDatabase final : public ServiceFramework<IContentMetaDatabase> {
public:
explicit IContentMetaDatabase(Core::System& system_, FileSys::StorageId id)
: ServiceFramework{system_, "IContentMetaDatabase"}, storage{id} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IContentMetaDatabase::Set, "Set"},
{2, &IContentMetaDatabase::Remove, "Remove"},
{8, &IContentMetaDatabase::Has, "Has"},
{15, &IContentMetaDatabase::Commit, "Commit"},
};
// clang-format on
: ServiceFramework{system_, "IContentMetaDatabase"}, storage{id} {}
RegisterHandlers(functions);
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"}
);
}
private:
@@ -362,45 +352,41 @@ private:
class LR final : public ServiceFramework<LR> {
public:
explicit LR(Core::System& system_) : ServiceFramework{system_, "lr"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "OpenLocationResolver"},
{1, nullptr, "OpenRegisteredLocationResolver"},
{2, nullptr, "RefreshLocationResolver"},
{3, nullptr, "OpenAddOnContentLocationResolver"},
};
// clang-format on
explicit LR(Core::System& system_) : ServiceFramework{system_, "lr"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "OpenLocationResolver"},
FunctionInfo{1, nullptr, "OpenRegisteredLocationResolver"},
FunctionInfo{2, nullptr, "RefreshLocationResolver"},
FunctionInfo{3, nullptr, "OpenAddOnContentLocationResolver"}
);
}
};
class NCM final : public ServiceFramework<NCM> {
public:
explicit NCM(Core::System& system_) : ServiceFramework{system_, "ncm"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "CreateContentStorage"},
{1, nullptr, "CreateContentMetaDatabase"},
{2, nullptr, "VerifyContentStorage"},
{3, nullptr, "VerifyContentMetaDatabase"},
{4, &NCM::OpenContentStorage, "OpenContentStorage"},
{5, &NCM::OpenContentMetaDatabase, "OpenContentMetaDatabase"},
{6, nullptr, "CloseContentStorageForcibly"},
{7, nullptr, "CloseContentMetaDatabaseForcibly"},
{8, nullptr, "CleanupContentMetaDatabase"},
{9, nullptr, "ActivateContentStorage"},
{10, nullptr, "InactivateContentStorage"},
{11, nullptr, "ActivateContentMetaDatabase"},
{12, nullptr, "InactivateContentMetaDatabase"},
{13, nullptr, "InvalidateRightsIdCache"},
{14, nullptr, "GetMemoryReport"},
{15, nullptr, "ActivateFsContentStorage"},
};
// clang-format on
explicit NCM(Core::System& system_) : ServiceFramework{system_, "ncm"} {}
RegisterHandlers(functions);
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"}
);
}
private:
@@ -433,7 +419,7 @@ public:
: ServiceFramework{system_, "ncm:v"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "GetSystemVersion"},
FunctionInfo{0, nullptr, "GetSystemVersion"}
};
RegisterHandlers(functions);
}
+33 -53
View File
@@ -19,8 +19,7 @@ namespace Service::NFC {
class IUser final : public NfcInterface {
public:
explicit IUser(Core::System& system_) : NfcInterface(system_, "NFC::IUser", BackendType::Nfc) {
// clang-format off
static const FunctionInfo functions[] = {
static const FunctionInfoTyped<IUser> functions[] = {
{0, &NfcInterface::Initialize, "InitializeOld"},
{1, &NfcInterface::Finalize, "FinalizeOld"},
{2, &NfcInterface::GetState, "GetStateOld"},
@@ -42,10 +41,8 @@ public:
{1001, &NfcInterface::WriteMifare ,"WriteMifare"},
{1300, &NfcInterface::SendCommandByPassThrough, "SendCommandByPassThrough"},
{1301, nullptr, "KeepPassThroughSession"},
{1302, nullptr, "ReleasePassThroughSession"},
{1302, nullptr, "ReleasePassThroughSession"}
};
// clang-format on
RegisterHandlers(functions);
}
};
@@ -54,8 +51,7 @@ class ISystem final : public NfcInterface {
public:
explicit ISystem(Core::System& system_)
: NfcInterface{system_, "NFC::ISystem", BackendType::Nfc} {
// clang-format off
static const FunctionInfo functions[] = {
static const FunctionInfoTyped<ISystem> functions[] = {
{0, &NfcInterface::Initialize, "InitializeOld"},
{1, &NfcInterface::Finalize, "FinalizeOld"},
{2, &NfcInterface::GetState, "GetStateOld"},
@@ -80,10 +76,8 @@ public:
{1001, &NfcInterface::WriteMifare, "WriteMifare"},
{1300, &NfcInterface::SendCommandByPassThrough, "SendCommandByPassThrough"},
{1301, nullptr, "KeepPassThroughSession"},
{1302, nullptr, "ReleasePassThroughSession"},
{1302, nullptr, "ReleasePassThroughSession"}
};
// clang-format on
RegisterHandlers(functions);
}
};
@@ -93,9 +87,7 @@ public:
using MFInterface = NfcInterface;
class MFIUser final : public MFInterface {
public:
explicit MFIUser(Core::System& system_)
: MFInterface{system_, "NFC::MFInterface", BackendType::Mifare} {
// clang-format off
explicit MFIUser(Core::System& system_) : MFInterface{system_, "NFC::MFInterface", BackendType::Mifare} {
static const FunctionInfoTyped<MFIUser> functions[] = {
{0, &MFIUser::Initialize, "Initialize"},
{1, &MFIUser::Finalize, "Finalize"},
@@ -110,39 +102,33 @@ public:
{10, &MFIUser::GetState, "GetState"},
{11, &MFIUser::GetDeviceState, "GetDeviceState"},
{12, &MFIUser::GetNpadId, "GetNpadId"},
{13, &MFIUser::AttachAvailabilityChangeEvent, "GetAvailabilityChangeEventHandle"},
{13, &MFIUser::AttachAvailabilityChangeEvent, "GetAvailabilityChangeEventHandle"}
};
// clang-format on
RegisterHandlers(functions);
}
};
class IAm final : public ServiceFramework<IAm> {
public:
explicit IAm(Core::System& system_) : ServiceFramework{system_, "NFC::IAm"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "Finalize"},
{2, nullptr, "NotifyForegroundApplet"},
};
// clang-format on
explicit IAm(Core::System& system_) : ServiceFramework{system_, "NFC::IAm"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{1, nullptr, "Finalize"},
FunctionInfo{2, nullptr, "NotifyForegroundApplet"}
);
}
};
class NFC_AM final : public ServiceFramework<NFC_AM> {
public:
explicit NFC_AM(Core::System& system_) : ServiceFramework{system_, "nfc:am"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NFC_AM::CreateAmNfcInterface, "CreateAmNfcInterface"},
};
// clang-format on
explicit NFC_AM(Core::System& system_) : ServiceFramework{system_, "nfc:am"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &NFC_AM::CreateAmNfcInterface, "CreateAmNfcInterface"}
);
}
private:
@@ -157,14 +143,12 @@ private:
class NFC_MF_U final : public ServiceFramework<NFC_MF_U> {
public:
explicit NFC_MF_U(Core::System& system_) : ServiceFramework{system_, "nfc:mf:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NFC_MF_U::CreateUserNfcInterface, "CreateUserNfcInterface"},
};
// clang-format on
explicit NFC_MF_U(Core::System& system_) : ServiceFramework{system_, "nfc:mf:u"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &NFC_MF_U::CreateUserNfcInterface, "CreateUserNfcInterface"}
);
}
private:
@@ -179,14 +163,12 @@ private:
class NFC_U final : public ServiceFramework<NFC_U> {
public:
explicit NFC_U(Core::System& system_) : ServiceFramework{system_, "nfc:user"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NFC_U::CreateUserNfcInterface, "CreateUserNfcInterface"},
};
// clang-format on
explicit NFC_U(Core::System& system_) : ServiceFramework{system_, "nfc:user"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &NFC_U::CreateUserNfcInterface, "CreateUserNfcInterface"}
);
}
private:
@@ -201,14 +183,12 @@ private:
class NFC_SYS final : public ServiceFramework<NFC_SYS> {
public:
explicit NFC_SYS(Core::System& system_) : ServiceFramework{system_, "nfc:sys"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NFC_SYS::CreateSystemNfcInterface, "CreateSystemNfcInterface"},
};
// clang-format on
explicit NFC_SYS(Core::System& system_) : ServiceFramework{system_, "nfc:sys"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &NFC_SYS::CreateSystemNfcInterface, "CreateSystemNfcInterface"}
);
}
private:
+18 -33
View File
@@ -15,7 +15,6 @@ namespace Service::NFP {
class IUser final : public Interface {
public:
explicit IUser(Core::System& system_) : Interface(system_, "NFP:IUser") {
// clang-format off
static const FunctionInfoTyped<IUser> functions[] = {
{0, &IUser::Initialize, "Initialize"},
{1, &IUser::Finalize, "Finalize"},
@@ -42,10 +41,8 @@ public:
{22, &IUser::GetApplicationAreaSize, "GetApplicationAreaSize"},
{23, &IUser::AttachAvailabilityChangeEvent, "AttachAvailabilityChangeEvent"},
{24, &IUser::RecreateApplicationArea, "RecreateApplicationArea"},
{25, &IUser::StartDetection, "StartDetectionWithFilter"},
{25, &IUser::StartDetection, "StartDetectionWithFilter"}
};
// clang-format on
RegisterHandlers(functions);
}
};
@@ -53,7 +50,6 @@ public:
class ISystem final : public Interface {
public:
explicit ISystem(Core::System& system_) : Interface(system_, "NFP:ISystem") {
// clang-format off
static const FunctionInfoTyped<ISystem> functions[] = {
{0, &ISystem::InitializeSystem, "InitializeSystem"},
{1, &ISystem::FinalizeSystem, "FinalizeSystem"},
@@ -82,10 +78,8 @@ public:
{103, &ISystem::SetRegisterInfoPrivate, "SetRegisterInfoPrivate"},
{104, &ISystem::DeleteRegisterInfo, "DeleteRegisterInfo"},
{105, &ISystem::DeleteApplicationArea, "DeleteApplicationArea"},
{106, &ISystem::ExistsApplicationArea, "ExistsApplicationArea"},
{106, &ISystem::ExistsApplicationArea, "ExistsApplicationArea"}
};
// clang-format on
RegisterHandlers(functions);
}
};
@@ -93,7 +87,6 @@ public:
class IDebug final : public Interface {
public:
explicit IDebug(Core::System& system_) : Interface(system_, "NFP:IDebug") {
// clang-format off
static const FunctionInfoTyped<IDebug> functions[] = {
{0, &IDebug::InitializeDebug, "InitializeDebug"},
{1, &IDebug::FinalizeDebug, "FinalizeDebug"},
@@ -134,24 +127,20 @@ public:
{203, &IDebug::BreakTag, "BreakTag"},
{204, &IDebug::ReadBackupData, "ReadBackupData"},
{205, &IDebug::WriteBackupData, "WriteBackupData"},
{206, &IDebug::WriteNtf, "WriteNtf"},
{206, &IDebug::WriteNtf, "WriteNtf"}
};
// clang-format on
RegisterHandlers(functions);
}
};
class IUserManager final : public ServiceFramework<IUserManager> {
public:
explicit IUserManager(Core::System& system_) : ServiceFramework{system_, "nfp:user"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IUserManager::CreateUserInterface, "CreateUserInterface"},
};
// clang-format on
explicit IUserManager(Core::System& system_) : ServiceFramework{system_, "nfp:user"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IUserManager::CreateUserInterface, "CreateUserInterface"}
);
}
private:
@@ -166,14 +155,12 @@ private:
class ISystemManager final : public ServiceFramework<ISystemManager> {
public:
explicit ISystemManager(Core::System& system_) : ServiceFramework{system_, "nfp:sys"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ISystemManager::CreateSystemInterface, "CreateSystemInterface"},
};
// clang-format on
explicit ISystemManager(Core::System& system_) : ServiceFramework{system_, "nfp:sys"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &ISystemManager::CreateSystemInterface, "CreateSystemInterface"}
);
}
private:
@@ -188,14 +175,12 @@ private:
class IDebugManager final : public ServiceFramework<IDebugManager> {
public:
explicit IDebugManager(Core::System& system_) : ServiceFramework{system_, "nfp:dbg"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IDebugManager::CreateDebugInterface, "CreateDebugInterface"},
};
// clang-format on
explicit IDebugManager(Core::System& system_) : ServiceFramework{system_, "nfp:dbg"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IDebugManager::CreateDebugInterface, "CreateDebugInterface"}
);
}
private:
+69 -78
View File
@@ -21,15 +21,13 @@ namespace Service::NGC {
class IService final : public ServiceFramework<IService> {
public:
explicit IService(Core::System& system_) : ServiceFramework{system_, "ngct:u"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IService::Match, "Match"},
{1, &IService::Filter, "Filter"},
};
// clang-format on
explicit IService(Core::System& system_) : ServiceFramework{system_, "ngct:u"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IService::Match, "Match"},
FunctionInfo{1, &IService::Filter, "Filter"}
);
}
private:
@@ -65,19 +63,17 @@ private:
class NgcServiceImpl final : public ServiceFramework<NgcServiceImpl> {
public:
explicit NgcServiceImpl(Core::System& system_) : ServiceFramework(system_, "ngc:u") {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NgcServiceImpl::GetContentVersion, "GetContentVersion"},
{1, &NgcServiceImpl::Check, "Check"},
{2, &NgcServiceImpl::Mask, "Mask"},
{3, &NgcServiceImpl::Reload, "Reload"},
{4, &NgcServiceImpl::Check, "Check2"},
{5, &NgcServiceImpl::Mask, "Mask2"},
};
// clang-format on
explicit NgcServiceImpl(Core::System& system_) : ServiceFramework(system_, "ngc:u") {}
RegisterHandlers(functions);
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"}
);
}
private:
@@ -154,21 +150,20 @@ private:
class IServiceWithManagementApi final : public ServiceFramework<IServiceWithManagementApi> {
public:
explicit IServiceWithManagementApi(Core::System& system_) : ServiceFramework(system_, "ngct:s") {
// clang-format off
static const FunctionInfo functions[] = {
{0 , nullptr, "Match"},
{1 , nullptr, "Filter"},
{100, nullptr, "ConfigureAutoUpdateSetting"},
{101, nullptr, "RequestResourceUpdateCheck"},
{110, nullptr, "Reload"},
{111, nullptr, "IsReloadRequired"},
{112, nullptr, "TryAcquireReloadRequestNotifier"},
{120, nullptr, "CalculateContentFingerprint"},
{130, nullptr, "TryEnableTemporalPassThrough"},
};
// clang-format on
RegisterHandlers(functions);
explicit IServiceWithManagementApi(Core::System& system_) : ServiceFramework(system_, "ngct:s") {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "Match"},
FunctionInfo{1, nullptr, "Filter"},
FunctionInfo{100, nullptr, "ConfigureAutoUpdateSetting"},
FunctionInfo{101, nullptr, "RequestResourceUpdateCheck"},
FunctionInfo{110, nullptr, "Reload"},
FunctionInfo{111, nullptr, "IsReloadRequired"},
FunctionInfo{112, nullptr, "TryAcquireReloadRequestNotifier"},
FunctionInfo{120, nullptr, "CalculateContentFingerprint"},
FunctionInfo{130, nullptr, "TryEnableTemporalPassThrough"}
);
}
};
@@ -179,20 +174,19 @@ static_assert(sizeof(SaveDataHandle) == 0x08);
class IUserShimScopedObject final : public ServiceFramework<IUserShimScopedObject> {
public:
explicit IUserShimScopedObject(Core::System& system_) : ServiceFramework(system_, "IUserShimScopedObject") {
// clang-format off
static const FunctionInfo functions[] = {
{450, nullptr, "InitializeForSaveData"},
{451, nullptr, "FinalizeForSaveData"},
{452, D<&IUserShimScopedObject::OpenSaveData>, "OpenSaveData"},
{453, nullptr, "CloseSaveData"},
{454, D<&IUserShimScopedObject::ReadSaveSlot>, "ReadSaveSlot"},
{455, D<&IUserShimScopedObject::WriteSaveSlot>, "WriteSaveSlot"},
{456, nullptr, "FlushSaveSlot"},
{457, nullptr, "CommitSaveData"},
};
// clang-format on
RegisterHandlers(functions);
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"}
);
}
Result OpenSaveData(Account::Uid unk0, Out<SaveDataHandle> unk1) {
@@ -214,13 +208,12 @@ public:
class IUserService final : public ServiceFramework<IUserService> {
public:
explicit IUserService(Core::System& system_) : ServiceFramework(system_, "stpl:u") {
// clang-format off
static const FunctionInfo functions[] = {
{0 , D<&IUserService::Cmd0>, "Cmd0"},
};
// clang-format on
RegisterHandlers(functions);
explicit IUserService(Core::System& system_) : ServiceFramework(system_, "stpl:u") {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, D<&IUserService::Cmd0>, "Cmd0"}
);
}
Result Cmd0(u32 unk0, OutInterface<IUserShimScopedObject> out_interface) {
LOG_WARNING(Service_NGC, "stubbed");
@@ -231,21 +224,20 @@ public:
class ISystemShimScopedObject final : public ServiceFramework<ISystemShimScopedObject> {
public:
explicit ISystemShimScopedObject(Core::System& system_) : ServiceFramework(system_, "ISystemShimScopedObject") {
// clang-format off
static const FunctionInfo functions[] = {
{106, nullptr, "Cmd106"},
{107, nullptr, "Cmd107"},
{108, D<&ISystemShimScopedObject::Cmd108>, "Cmd108"},
{207, nullptr, "Cmd207"},
{208, D<&ISystemShimScopedObject::Cmd208>, "Cmd208"},
{209, nullptr, "Cmd209"},
{210, nullptr, "Cmd210"},
{211, nullptr, "Cmd211"},
{212, nullptr, "Cmd212"},
};
// clang-format on
RegisterHandlers(functions);
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"}
);
}
Result Cmd108() {
@@ -261,13 +253,12 @@ public:
class ISystemService final : public ServiceFramework<ISystemService> {
public:
explicit ISystemService(Core::System& system_) : ServiceFramework(system_, "stpl:sys") {
// clang-format off
static const FunctionInfo functions[] = {
{0 , D<&ISystemService::Cmd0>, "Cmd0"},
};
// clang-format on
RegisterHandlers(functions);
explicit ISystemService(Core::System& system_) : ServiceFramework(system_, "stpl:sys") {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, D<&ISystemService::Cmd0>, "Cmd0"}
);
}
Result Cmd0(OutInterface<ISystemShimScopedObject> out_interface) {
LOG_WARNING(Service_NGC, "stubbed");
+36 -36
View File
@@ -236,11 +236,11 @@ public:
: ServiceFramework{system_, "IScanRequest"}, svc_ctx{system_, "IScanRequest"} {
static const FunctionInfo functions[] = {
{0, &IScanRequest::Submit, "Submit"},
{1, &IScanRequest::IsProcessing, "IsProcessing"},
{2, &IScanRequest::GetResult, "GetResult"},
{3, &IScanRequest::GetSystemEventReadableHandle, "GetSystemEventReadableHandle"},
{4, &IScanRequest::SetChannels, "SetChannels"},
FunctionInfo{0, &IScanRequest::Submit, "Submit"},
FunctionInfo{1, &IScanRequest::IsProcessing, "IsProcessing"},
FunctionInfo{2, &IScanRequest::GetResult, "GetResult"},
FunctionInfo{3, &IScanRequest::GetSystemEventReadableHandle, "GetSystemEventReadableHandle"},
FunctionInfo{4, &IScanRequest::SetChannels, "SetChannels"}
};
RegisterHandlers(functions);
@@ -343,32 +343,32 @@ public:
explicit IRequest(Core::System& system_)
: ServiceFramework{system_, "IRequest"}, service_context{system_, "IRequest"} {
static const FunctionInfo functions[] = {
{0, &IRequest::GetRequestState, "GetRequestState"},
{1, &IRequest::GetResult, "GetResult"},
{2, &IRequest::GetSystemEventReadableHandles, "GetSystemEventReadableHandles"},
{3, &IRequest::Cancel, "Cancel"},
{4, &IRequest::Submit, "Submit"},
{5, nullptr, "SetRequirement"},
{6, &IRequest::SetRequirementPreset, "SetRequirementPreset"},
{8, nullptr, "SetPriority"},
{9, &IRequest::SetNetworkProfileId, "SetNetworkProfileId"},
{10, nullptr, "SetRejectable"},
{11, &IRequest::SetConnectionConfirmationOption, "SetConnectionConfirmationOption"},
{12, nullptr, "SetPersistent"},
{13, nullptr, "SetInstant"},
{14, nullptr, "SetSustainable"},
{15, nullptr, "SetRawPriority"},
{16, nullptr, "SetGreedy"},
{17, nullptr, "SetSharable"},
{18, nullptr, "SetRequirementByRevision"},
{19, nullptr, "GetRequirement"},
{20, nullptr, "GetRevision"},
{21, &IRequest::GetAppletInfo, "GetAppletInfo"},
{22, nullptr, "GetAdditionalInfo"},
{23, nullptr, "SetKeptInSleep"},
{24, nullptr, "RegisterSocketDescriptor"},
{25, nullptr, "UnregisterSocketDescriptor"},
{26, nullptr, "GetNetworkAccessStatus"}, //21.0.0+
FunctionInfo{0, &IRequest::GetRequestState, "GetRequestState"},
FunctionInfo{1, &IRequest::GetResult, "GetResult"},
FunctionInfo{2, &IRequest::GetSystemEventReadableHandles, "GetSystemEventReadableHandles"},
FunctionInfo{3, &IRequest::Cancel, "Cancel"},
FunctionInfo{4, &IRequest::Submit, "Submit"},
FunctionInfo{5, nullptr, "SetRequirement"},
FunctionInfo{6, &IRequest::SetRequirementPreset, "SetRequirementPreset"},
FunctionInfo{8, nullptr, "SetPriority"},
FunctionInfo{9, &IRequest::SetNetworkProfileId, "SetNetworkProfileId"},
FunctionInfo{10, nullptr, "SetRejectable"},
FunctionInfo{11, &IRequest::SetConnectionConfirmationOption, "SetConnectionConfirmationOption"},
FunctionInfo{12, nullptr, "SetPersistent"},
FunctionInfo{13, nullptr, "SetInstant"},
FunctionInfo{14, nullptr, "SetSustainable"},
FunctionInfo{15, nullptr, "SetRawPriority"},
FunctionInfo{16, nullptr, "SetGreedy"},
FunctionInfo{17, nullptr, "SetSharable"},
FunctionInfo{18, nullptr, "SetRequirementByRevision"},
FunctionInfo{19, nullptr, "GetRequirement"},
FunctionInfo{20, nullptr, "GetRevision"},
FunctionInfo{21, &IRequest::GetAppletInfo, "GetAppletInfo"},
FunctionInfo{22, nullptr, "GetAdditionalInfo"},
FunctionInfo{23, nullptr, "SetKeptInSleep"},
FunctionInfo{24, nullptr, "RegisterSocketDescriptor"},
FunctionInfo{25, nullptr, "UnregisterSocketDescriptor"},
FunctionInfo{26, nullptr, "GetNetworkAccessStatus"}, //21.0.0+
};
RegisterHandlers(functions);
@@ -510,9 +510,9 @@ class INetworkProfile final : public ServiceFramework<INetworkProfile> {
public:
explicit INetworkProfile(Core::System& system_) : ServiceFramework{system_, "INetworkProfile"} {
static const FunctionInfo functions[] = {
{0, nullptr, "Update"},
{1, nullptr, "PersistOld"},
{2, nullptr, "Persist"},
FunctionInfo{0, nullptr, "Update"},
FunctionInfo{1, nullptr, "PersistOld"},
FunctionInfo{2, nullptr, "Persist"}
};
RegisterHandlers(functions);
}
@@ -1117,8 +1117,8 @@ public:
explicit NetworkInterface(const char* name, Core::System& system_)
: ServiceFramework{system_, name} {
static const FunctionInfo functions[] = {
{4, &NetworkInterface::CreateGeneralServiceOld, "CreateGeneralServiceOld"},
{5, &NetworkInterface::CreateGeneralService, "CreateGeneralService"},
FunctionInfo{4, &NetworkInterface::CreateGeneralServiceOld, "CreateGeneralServiceOld"},
FunctionInfo{5, &NetworkInterface::CreateGeneralService, "CreateGeneralService"}
};
RegisterHandlers(functions);
}
+312 -327
View File
@@ -24,24 +24,22 @@ namespace Service::NIM {
class IShopServiceAsync final : public ServiceFramework<IShopServiceAsync> {
public:
explicit IShopServiceAsync(Core::System& system_)
: ServiceFramework{system_, "IShopServiceAsync"},
service_context{system_, "IShopServiceAsync"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, D<&IShopServiceAsync::Cancel>, "Cancel"},
{1, D<&IShopServiceAsync::GetSize>, "GetSize"},
{2, D<&IShopServiceAsync::Read>, "Read"},
{3, D<&IShopServiceAsync::GetErrorCode>, "GetErrorCode"},
{4, D<&IShopServiceAsync::Request>, "Request"},
{5, D<&IShopServiceAsync::Prepare>, "Prepare"},
};
// clang-format on
RegisterHandlers(functions);
: ServiceFramework{system_, "IShopServiceAsync"}
, service_context{system_, "IShopServiceAsync"} {
completion_event = service_context.CreateEvent("IShopServiceAsync:Completion");
}
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"}
);
}
~IShopServiceAsync() override {
CancelImpl();
service_context.CloseEvent(completion_event);
@@ -141,14 +139,12 @@ private:
class IShopServiceAccessor final : public ServiceFramework<IShopServiceAccessor> {
public:
explicit IShopServiceAccessor(Core::System& system_)
: ServiceFramework{system_, "IShopServiceAccessor"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IShopServiceAccessor::CreateAsyncInterface, "CreateAsyncInterface"},
};
// clang-format on
: ServiceFramework{system_, "IShopServiceAccessor"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IShopServiceAccessor::CreateAsyncInterface, "CreateAsyncInterface"}
);
}
private:
@@ -165,14 +161,12 @@ private:
class IShopServiceAccessServer final : public ServiceFramework<IShopServiceAccessServer> {
public:
explicit IShopServiceAccessServer(Core::System& system_)
: ServiceFramework{system_, "IShopServiceAccessServer"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IShopServiceAccessServer::CreateAccessorInterface, "CreateAccessorInterface"},
};
// clang-format on
: ServiceFramework{system_, "IShopServiceAccessServer"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &IShopServiceAccessServer::CreateAccessorInterface, "CreateAccessorInterface"}
);
}
private:
@@ -186,254 +180,250 @@ private:
class NIM final : public ServiceFramework<NIM> {
public:
explicit NIM(Core::System& system_) : ServiceFramework{system_, "nim"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "CreateSystemUpdateTask"},
{1, nullptr, "DestroySystemUpdateTask"},
{2, nullptr, "ListSystemUpdateTask"},
{3, nullptr, "RequestSystemUpdateTaskRun"},
{4, nullptr, "GetSystemUpdateTaskInfo"},
{5, nullptr, "CommitSystemUpdateTask"},
{6, nullptr, "CreateNetworkInstallTask"},
{7, nullptr, "DestroyNetworkInstallTask"},
{8, nullptr, "ListNetworkInstallTask"},
{9, nullptr, "RequestNetworkInstallTaskRun"},
{10, nullptr, "GetNetworkInstallTaskInfo"},
{11, nullptr, "CommitNetworkInstallTask"},
{12, nullptr, "RequestLatestSystemUpdateMeta"},
{14, nullptr, "ListApplicationNetworkInstallTask"},
{15, nullptr, "ListNetworkInstallTaskContentMeta"},
{16, nullptr, "RequestLatestVersion"},
{17, nullptr, "SetNetworkInstallTaskAttribute"},
{18, nullptr, "AddNetworkInstallTaskContentMeta"},
{19, nullptr, "GetDownloadedSystemDataPath"},
{20, nullptr, "CalculateNetworkInstallTaskRequiredSize"},
{21, nullptr, "IsExFatDriverIncluded"},
{22, nullptr, "GetBackgroundDownloadStressTaskInfo"},
{23, nullptr, "RequestDeviceAuthenticationToken"},
{24, nullptr, "RequestGameCardRegistrationStatus"},
{25, nullptr, "RequestRegisterGameCard"},
{26, nullptr, "RequestRegisterNotificationToken"},
{27, nullptr, "RequestDownloadTaskList"},
{28, nullptr, "RequestApplicationControl"},
{29, nullptr, "RequestLatestApplicationControl"},
{30, nullptr, "RequestVersionList"},
{31, nullptr, "CreateApplyDeltaTask"},
{32, nullptr, "DestroyApplyDeltaTask"},
{33, nullptr, "ListApplicationApplyDeltaTask"},
{34, nullptr, "RequestApplyDeltaTaskRun"},
{35, nullptr, "GetApplyDeltaTaskInfo"},
{36, nullptr, "ListApplyDeltaTask"},
{37, nullptr, "CommitApplyDeltaTask"},
{38, nullptr, "CalculateApplyDeltaTaskRequiredSize"},
{39, nullptr, "PrepareShutdown"},
{40, nullptr, "ListApplyDeltaTask"},
{41, nullptr, "ClearNotEnoughSpaceStateOfApplyDeltaTask"},
{42, nullptr, "CreateApplyDeltaTaskFromDownloadTask"},
{43, nullptr, "GetBackgroundApplyDeltaStressTaskInfo"},
{44, nullptr, "GetApplyDeltaTaskRequiredStorage"},
{45, nullptr, "CalculateNetworkInstallTaskContentsSize"},
{46, nullptr, "PrepareShutdownForSystemUpdate"},
{47, nullptr, "FindMaxRequiredApplicationVersionOfTask"},
{48, nullptr, "CommitNetworkInstallTaskPartially"},
{49, nullptr, "ListNetworkInstallTaskCommittedContentMeta"},
{50, nullptr, "ListNetworkInstallTaskNotCommittedContentMeta"},
{51, nullptr, "FindMaxRequiredSystemVersionOfTask"},
{52, nullptr, "GetNetworkInstallTaskErrorContext"},
{53, nullptr, "CreateLocalCommunicationReceiveApplicationTask"},
{54, nullptr, "DestroyLocalCommunicationReceiveApplicationTask"},
{55, nullptr, "ListLocalCommunicationReceiveApplicationTask"},
{56, nullptr, "RequestLocalCommunicationReceiveApplicationTaskRun"},
{57, nullptr, "GetLocalCommunicationReceiveApplicationTaskInfo"},
{58, nullptr, "CommitLocalCommunicationReceiveApplicationTask"},
{59, nullptr, "ListLocalCommunicationReceiveApplicationTaskContentMeta"},
{60, nullptr, "CreateLocalCommunicationSendApplicationTask"},
{61, nullptr, "RequestLocalCommunicationSendApplicationTaskRun"},
{62, nullptr, "GetLocalCommunicationReceiveApplicationTaskErrorContext"},
{63, nullptr, "GetLocalCommunicationSendApplicationTaskInfo"},
{64, nullptr, "DestroyLocalCommunicationSendApplicationTask"},
{65, nullptr, "GetLocalCommunicationSendApplicationTaskErrorContext"},
{66, nullptr, "CalculateLocalCommunicationReceiveApplicationTaskRequiredSize"},
{67, nullptr, "ListApplicationLocalCommunicationReceiveApplicationTask"},
{68, nullptr, "ListApplicationLocalCommunicationSendApplicationTask"},
{69, nullptr, "CreateLocalCommunicationReceiveSystemUpdateTask"},
{70, nullptr, "DestroyLocalCommunicationReceiveSystemUpdateTask"},
{71, nullptr, "ListLocalCommunicationReceiveSystemUpdateTask"},
{72, nullptr, "RequestLocalCommunicationReceiveSystemUpdateTaskRun"},
{73, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskInfo"},
{74, nullptr, "CommitLocalCommunicationReceiveSystemUpdateTask"},
{75, nullptr, "GetLocalCommunicationReceiveSystemUpdateTaskErrorContext"},
{76, nullptr, "CreateLocalCommunicationSendSystemUpdateTask"},
{77, nullptr, "RequestLocalCommunicationSendSystemUpdateTaskRun"},
{78, nullptr, "GetLocalCommunicationSendSystemUpdateTaskInfo"},
{79, nullptr, "DestroyLocalCommunicationSendSystemUpdateTask"},
{80, nullptr, "GetLocalCommunicationSendSystemUpdateTaskErrorContext"},
{81, nullptr, "ListLocalCommunicationSendSystemUpdateTask"},
{82, nullptr, "GetReceivedSystemDataPath"},
{83, nullptr, "CalculateApplyDeltaTaskOccupiedSize"},
{84, nullptr, "ReloadErrorSimulation"},
{85, nullptr, "ListNetworkInstallTaskContentMetaFromInstallMeta"},
{86, nullptr, "ListNetworkInstallTaskOccupiedSize"},
{87, nullptr, "RequestQueryAvailableELicenses"},
{88, nullptr, "RequestAssignELicenses"},
{89, nullptr, "RequestExtendELicenses"},
{90, nullptr, "RequestSyncELicenses"},
{91, nullptr, "Unknown91"}, //6.0.0-14.1.2
{92, nullptr, "Unknown92"}, //21.0.0+
{93, nullptr, "RequestReportActiveELicenses"},
{94, nullptr, "RequestReportActiveELicensesPassively"},
{95, nullptr, "RequestRegisterDynamicRightsNotificationToken"},
{96, nullptr, "RequestAssignAllDeviceLinkedELicenses"},
{97, nullptr, "RequestRevokeAllELicenses"},
{98, nullptr, "RequestPrefetchForDynamicRights"},
{99, nullptr, "CreateNetworkInstallTask"},
{100, nullptr, "ListNetworkInstallTaskRightsIds"},
{101, nullptr, "RequestDownloadETickets"},
{102, nullptr, "RequestQueryDownloadableContents"},
{103, nullptr, "DeleteNetworkInstallTaskContentMeta"},
{104, nullptr, "RequestIssueEdgeTokenForDebug"},
{105, nullptr, "RequestQueryAvailableELicenses2"},
{106, nullptr, "RequestAssignELicenses2"},
{107, nullptr, "GetNetworkInstallTaskStateCounter"},
{108, nullptr, "InvalidateDynamicRightsNaIdTokenCacheForDebug"},
{109, nullptr, "ListNetworkInstallTaskPartialInstallContentMeta"},
{110, nullptr, "ListNetworkInstallTaskRightsIdsFromIndex"},
{111, nullptr, "AddNetworkInstallTaskContentMetaForUser"},
{112, nullptr, "RequestAssignELicensesAndDownloadETickets"},
{113, nullptr, "RequestQueryAvailableCommonELicenses"},
{114, nullptr, "SetNetworkInstallTaskExtendedAttribute"},
{115, nullptr, "GetNetworkInstallTaskExtendedAttribute"},
{116, nullptr, "GetAllocatorInfo"},
{117, nullptr, "RequestQueryDownloadableContentsByApplicationId"},
{118, nullptr, "MarkNoDownloadRightsErrorResolved"},
{119, nullptr, "GetApplyDeltaTaskAllAppliedContentMeta"},
{120, nullptr, "PrioritizeNetworkInstallTask"},
{121, nullptr, "RequestQueryAvailableCommonELicenses2"},
{122, nullptr, "RequestAssignCommonELicenses"},
{123, nullptr, "RequestAssignCommonELicenses2"},
{124, nullptr, "IsNetworkInstallTaskFrontOfQueue"},
{125, nullptr, "PrioritizeApplyDeltaTask"},
{126, nullptr, "RerouteDownloadingPatch"},
{127, nullptr, "UnmarkNoDownloadRightsErrorResolved"},
{128, nullptr, "RequestContentsSize"},
{129, nullptr, "RequestContentsAuthorizationToken"},
{130, nullptr, "RequestCdnVendorDiscovery"},
{131, nullptr, "RefreshDebugAvailability"},
{132, nullptr, "ClearResponseSimulationEntry"},
{133, nullptr, "RegisterResponseSimulationEntry"},
{134, nullptr, "GetProcessedCdnVendors"},
{135, nullptr, "RefreshRuntimeBehaviorsForDebug"},
{136, nullptr, "RequestOnlineSubscriptionFreeTrialAvailability"},
{137, nullptr, "GetNetworkInstallTaskContentMetaCount"},
{138, nullptr, "RequestRevokeELicenses"},
{139, nullptr, "EnableNetworkConnectionToUseApplicationCore"},
{140, nullptr, "DisableNetworkConnectionToUseApplicationCore"},
{141, nullptr, "IsNetworkConnectionEnabledToUseApplicationCore"},
{142, nullptr, "RequestCheckSafeSystemVersion"},
{143, nullptr, "RequestApplicationIcon"},
{144, nullptr, "RequestDownloadIdbeIconFile"},
{147, nullptr, "Unknown147"}, //18.0.0+
{148, nullptr, "Unknown148"}, //18.0.0+
{150, nullptr, "Unknown150"}, //19.0.0+
{151, nullptr, "Unknown151"}, //20.0.0+
{152, nullptr, "Unknown152"}, //20.0.0+
{153, nullptr, "Unknown153"}, //20.0.0+
{154, nullptr, "Unknown154"}, //20.0.0+
{155, nullptr, "Unknown155"}, //20.0.0+
{156, nullptr, "Unknown156"}, //20.0.0+
{157, nullptr, "Unknown157"}, //20.0.0+
{158, nullptr, "Unknown158"}, //20.0.0+
{159, nullptr, "Unknown159"}, //20.0.0+
{160, nullptr, "Unknown160"}, //20.0.0+
{161, nullptr, "Unknown161"}, //20.0.0+
{162, nullptr, "Unknown162"}, //20.0.0+
{163, nullptr, "Unknown163"}, //20.0.0+
{164, nullptr, "Unknown164"}, //20.0.0+
{165, nullptr, "Unknown165"}, //20.0.0+
{166, nullptr, "Unknown166"}, //20.0.0+
{167, nullptr, "Unknown167"}, //20.0.0+
{168, nullptr, "Unknown168"}, //20.0.0+
{169, nullptr, "Unknown169"}, //20.0.0+
{170, nullptr, "Unknown170"}, //20.0.0+
{171, nullptr, "Unknown171"}, //20.0.0+
{172, nullptr, "Unknown172"}, //20.0.0+
{173, nullptr, "Unknown173"}, //20.0.0+
{174, nullptr, "Unknown174"}, //20.0.0+
{175, nullptr, "Unknown175"}, //20.0.0+
{176, nullptr, "Unknown176"}, //20.0.0+
{177, nullptr, "Unknown177"}, //20.0.0+
{2000, nullptr, "Unknown2000"}, //20.0.0+
{2001, nullptr, "Unknown2001"}, //20.0.0+
{2002, nullptr, "Unknown2002"}, //20.0.0+
{2003, nullptr, "Unknown2003"}, //20.0.0+
{2004, nullptr, "Unknown2004"}, //20.0.0+
{2007, nullptr, "Unknown2007"}, //20.0.0+
{2011, nullptr, "Unknown2011"}, //20.0.0+
{2012, nullptr, "Unknown2012"}, //20.0.0+
{2013, nullptr, "Unknown2013"}, //20.0.0+
{2014, nullptr, "Unknown2014"}, //20.0.0+
{2015, nullptr, "Unknown2015"}, //20.0.0+
{2016, nullptr, "Unknown2016"}, //20.0.0+
{2017, nullptr, "Unknown2017"}, //20.0.0+
{2018, nullptr, "Unknown2018"}, //20.0.0+
{2019, nullptr, "Unknown2019"}, //20.0.0+
{2020, nullptr, "Unknown2020"}, //20.0.0+
{2021, nullptr, "Unknown2021"}, //20.0.0+
{2022, nullptr, "Unknown2022"}, //20.0.0+
{2023, nullptr, "Unknown2023"}, //20.0.0+
{2024, nullptr, "Unknown2024"}, //20.0.0+
{2025, nullptr, "Unknown2025"}, //20.0.0+
{2026, nullptr, "Unknown2026"}, //20.0.0+
{2027, nullptr, "Unknown2027"}, //20.0.0+
{2028, nullptr, "Unknown2028"}, //20.0.0+
{2029, nullptr, "Unknown2029"}, //20.0.0+
{2030, nullptr, "Unknown2030"}, //20.0.0+
{2031, nullptr, "Unknown2031"}, //20.0.0+
{2032, nullptr, "Unknown2032"}, //20.0.0+
{2033, nullptr, "Unknown2033"}, //20.0.0+
{2034, nullptr, "Unknown2034"}, //20.0.0+
{2035, nullptr, "Unknown2035"}, //20.0.0+
{2036, nullptr, "Unknown2036"}, //20.0.0+
{2037, nullptr, "Unknown2037"}, //20.0.0+
{2038, nullptr, "Unknown2038"}, //20.0.0+
{2039, nullptr, "Unknown2039"}, //20.0.0+
{2040, nullptr, "Unknown2040"}, //20.0.0+
{2041, nullptr, "Unknown2041"}, //20.0.0+
{2042, nullptr, "Unknown2042"}, //20.0.0+
{2043, nullptr, "Unknown2043"}, //20.0.0+
{2044, nullptr, "Unknown2044"}, //20.0.0+
{2045, nullptr, "Unknown2045"}, //20.0.0+
{2046, nullptr, "Unknown2046"}, //20.0.0+
{2047, nullptr, "Unknown2047"}, //20.0.0+
{2048, nullptr, "Unknown2048"}, //20.0.0+
{2049, nullptr, "Unknown2049"}, //20.0.0+
{2050, nullptr, "Unknown2050"}, //20.0.0+
{2051, nullptr, "Unknown2051"}, //20.0.0+
{3000, nullptr, "RequestLatestApplicationIcon"}, //17.0.0+
{3001, nullptr, "RequestDownloadIdbeLatestIconFile"}, //17.0.0+
};
// clang-format on
explicit NIM(Core::System& system_) : ServiceFramework{system_, "nim"} {}
RegisterHandlers(functions);
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+
);
}
};
class NIM_ECA final : public ServiceFramework<NIM_ECA> {
public:
explicit NIM_ECA(Core::System& system_) : ServiceFramework{system_, "nim:eca"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NIM_ECA::CreateServerInterface, "CreateServerInterface"},
{1, nullptr, "RefreshDebugAvailability"},
{2, nullptr, "ClearDebugResponse"},
{3, nullptr, "RegisterDebugResponse"},
{4, &NIM_ECA::IsLargeResourceAvailable, "IsLargeResourceAvailable"},
{5, &NIM_ECA::CreateServerInterface2, "CreateServerInterface2"} // 17.0.0+
};
// clang-format on
explicit NIM_ECA(Core::System& system_) : ServiceFramework{system_, "nim:eca"} {}
RegisterHandlers(functions);
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+
);
}
private:
@@ -467,41 +457,39 @@ private:
class NIM_SHP final : public ServiceFramework<NIM_SHP> {
public:
explicit NIM_SHP(Core::System& system_) : ServiceFramework{system_, "nim:shp"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RequestDeviceAuthenticationToken"},
{1, nullptr, "RequestCachedDeviceAuthenticationToken"},
{2, nullptr, "RequestEdgeToken"},
{3, nullptr, "RequestCachedEdgeToken"},
{100, nullptr, "RequestRegisterDeviceAccount"},
{101, nullptr, "RequestUnregisterDeviceAccount"},
{102, nullptr, "RequestDeviceAccountStatus"},
{103, nullptr, "GetDeviceAccountInfo"},
{104, nullptr, "RequestDeviceRegistrationInfo"},
{105, nullptr, "RequestTransferDeviceAccount"},
{106, nullptr, "RequestSyncRegistration"},
{107, nullptr, "IsOwnDeviceId"},
{200, nullptr, "RequestRegisterNotificationToken"},
{300, nullptr, "RequestUnlinkDevice"},
{301, nullptr, "RequestUnlinkDeviceIntegrated"},
{302, nullptr, "RequestLinkDevice"},
{303, nullptr, "HasDeviceLink"},
{304, nullptr, "RequestUnlinkDeviceAll"},
{305, nullptr, "RequestCreateVirtualAccount"},
{306, nullptr, "RequestDeviceLinkStatus"},
{400, nullptr, "GetAccountByVirtualAccount"},
{401, nullptr, "GetVirtualAccount"},
{500, nullptr, "RequestSyncTicketLegacy"},
{501, nullptr, "RequestDownloadTicket"},
{502, nullptr, "RequestDownloadTicketForPrepurchasedContents"},
{503, nullptr, "RequestSyncTicket"},
{504, nullptr, "RequestDownloadTicketForPrepurchasedContents2"},
{505, nullptr, "RequestDownloadTicketForPrepurchasedContentsForAccount"},
};
// clang-format on
explicit NIM_SHP(Core::System& system_) : ServiceFramework{system_, "nim:shp"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RequestDeviceAuthenticationToken"},
FunctionInfo{1, nullptr, "RequestCachedDeviceAuthenticationToken"},
FunctionInfo{2, nullptr, "RequestEdgeToken"},
FunctionInfo{3, nullptr, "RequestCachedEdgeToken"},
FunctionInfo{100, nullptr, "RequestRegisterDeviceAccount"},
FunctionInfo{101, nullptr, "RequestUnregisterDeviceAccount"},
FunctionInfo{102, nullptr, "RequestDeviceAccountStatus"},
FunctionInfo{103, nullptr, "GetDeviceAccountInfo"},
FunctionInfo{104, nullptr, "RequestDeviceRegistrationInfo"},
FunctionInfo{105, nullptr, "RequestTransferDeviceAccount"},
FunctionInfo{106, nullptr, "RequestSyncRegistration"},
FunctionInfo{107, nullptr, "IsOwnDeviceId"},
FunctionInfo{200, nullptr, "RequestRegisterNotificationToken"},
FunctionInfo{300, nullptr, "RequestUnlinkDevice"},
FunctionInfo{301, nullptr, "RequestUnlinkDeviceIntegrated"},
FunctionInfo{302, nullptr, "RequestLinkDevice"},
FunctionInfo{303, nullptr, "HasDeviceLink"},
FunctionInfo{304, nullptr, "RequestUnlinkDeviceAll"},
FunctionInfo{305, nullptr, "RequestCreateVirtualAccount"},
FunctionInfo{306, nullptr, "RequestDeviceLinkStatus"},
FunctionInfo{400, nullptr, "GetAccountByVirtualAccount"},
FunctionInfo{401, nullptr, "GetVirtualAccount"},
FunctionInfo{500, nullptr, "RequestSyncTicketLegacy"},
FunctionInfo{501, nullptr, "RequestDownloadTicket"},
FunctionInfo{502, nullptr, "RequestDownloadTicketForPrepurchasedContents"},
FunctionInfo{503, nullptr, "RequestSyncTicket"},
FunctionInfo{504, nullptr, "RequestDownloadTicketForPrepurchasedContents2"},
FunctionInfo{505, nullptr, "RequestDownloadTicketForPrepurchasedContentsForAccount"}
);
}
};
@@ -512,13 +500,13 @@ public:
: ServiceFramework{system_, "IEnsureNetworkClockAvailabilityService"},
service_context{system_, "IEnsureNetworkClockAvailabilityService"} {
static const FunctionInfo functions[] = {
{0, &IEnsureNetworkClockAvailabilityService::StartTask, "StartTask"},
{1, &IEnsureNetworkClockAvailabilityService::GetFinishNotificationEvent,
FunctionInfo{0, &IEnsureNetworkClockAvailabilityService::StartTask, "StartTask"},
FunctionInfo{1, &IEnsureNetworkClockAvailabilityService::GetFinishNotificationEvent,
"GetFinishNotificationEvent"},
{2, &IEnsureNetworkClockAvailabilityService::GetResult, "GetResult"},
{3, &IEnsureNetworkClockAvailabilityService::Cancel, "Cancel"},
{4, &IEnsureNetworkClockAvailabilityService::IsProcessing, "IsProcessing"},
{5, &IEnsureNetworkClockAvailabilityService::GetServerTime, "GetServerTime"},
FunctionInfo{2, &IEnsureNetworkClockAvailabilityService::GetResult, "GetResult"},
FunctionInfo{3, &IEnsureNetworkClockAvailabilityService::Cancel, "Cancel"},
FunctionInfo{4, &IEnsureNetworkClockAvailabilityService::IsProcessing, "IsProcessing"},
FunctionInfo{5, &IEnsureNetworkClockAvailabilityService::GetServerTime, "GetServerTime"}
};
RegisterHandlers(functions);
@@ -587,16 +575,14 @@ private:
class NTC final : public ServiceFramework<NTC> {
public:
explicit NTC(Core::System& system_) : ServiceFramework{system_, "ntc"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &NTC::OpenEnsureNetworkClockAvailabilityService, "OpenEnsureNetworkClockAvailabilityService"},
{100, &NTC::SuspendAutonomicTimeCorrection, "SuspendAutonomicTimeCorrection"},
{101, &NTC::ResumeAutonomicTimeCorrection, "ResumeAutonomicTimeCorrection"},
};
// clang-format on
explicit NTC(Core::System& system_) : ServiceFramework{system_, "ntc"} {}
RegisterHandlers(functions);
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, &NTC::OpenEnsureNetworkClockAvailabilityService, "OpenEnsureNetworkClockAvailabilityService"},
FunctionInfo{100, &NTC::SuspendAutonomicTimeCorrection, "SuspendAutonomicTimeCorrection"},
FunctionInfo{101, &NTC::ResumeAutonomicTimeCorrection, "ResumeAutonomicTimeCorrection"}
);
}
private:
@@ -626,14 +612,13 @@ private:
class NIM_ECAS final : public ServiceFramework<NIM_ECAS> {
public:
explicit NIM_ECAS(Core::System& system_) : ServiceFramework{system_, "nim:ecas"} {
// clang-format off
static const FunctionInfo functions[] = {
{0, nullptr, "RegisterSpecialClient"},
{1, nullptr, "UnregisterSpecialClient"},
};
// clang-format on
RegisterHandlers(functions);
explicit NIM_ECAS(Core::System& system_) : ServiceFramework{system_, "nim:ecas"} {}
FunctionInfoBase const* FindRequest(u32 key) override {
return HandlerTableGenerateWithFind(key,
FunctionInfo{0, nullptr, "RegisterSpecialClient"},
FunctionInfo{1, nullptr, "UnregisterSpecialClient"}
);
}
};
+95 -99
View File
@@ -19,79 +19,77 @@ class INpnsSystem final : public ServiceFramework<INpnsSystem> {
public:
explicit INpnsSystem(Core::System& system_)
: ServiceFramework{system_, "npns:s"}, service_context{system, "npns:s"},
get_receive_event{service_context}, get_request_change_state_cancel_event{service_context} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "ListenAll"},
{2, C<&INpnsSystem::ListenTo>, "ListenTo"},
{3, nullptr, "Receive"},
{4, nullptr, "ReceiveRaw"},
{5, C<&INpnsSystem::GetReceiveEvent>, "GetReceiveEvent"},
{6, nullptr, "ListenUndelivered"},
{7, nullptr, "GetStateChangeEvent"},
{8, C<&INpnsSystem::ListenToByName>, "ListenToByName"},
{11, nullptr, "SubscribeTopic"},
{12, nullptr, "UnsubscribeTopic"},
{13, nullptr, "QueryIsTopicExist"},
{14, nullptr, "SubscribeTopicByAccount"}, // 18.0.0+
{15, nullptr, "UnsubscribeTopicByAccount"}, // 18.0.0+
{16, nullptr, "DownloadSubscriptionList"}, // 18.0.0+
{21, nullptr, "CreateToken"},
{22, nullptr, "CreateTokenWithApplicationId"},
{23, nullptr, "DestroyToken"},
{24, nullptr, "DestroyTokenWithApplicationId"},
{25, nullptr, "QueryIsTokenValid"},
{26, nullptr, "ListenToMyApplicationId"},
{27, nullptr, "DestroyTokenAll"},
{28, nullptr, "CreateTokenWithName"}, // 18.0.0+
{29, nullptr, "DestroyTokenWithName"}, // 18.0.0+
{31, nullptr, "UploadTokenToBaaS"},
{32, nullptr, "DestroyTokenForBaaS"},
{33, nullptr, "CreateTokenForBaaS"},
{34, nullptr, "SetBaaSDeviceAccountIdList"},
{35, nullptr, "LinkNsaId"}, // 17.0.0+
{36, nullptr, "UnlinkNsaId"}, // 17.0.0+
{37, nullptr, "RelinkNsaId"}, // 18.0.0+
{40, nullptr, "GetNetworkServiceAccountIdTokenRequestEvent"}, // 17.0.0+
{41, nullptr, "TryPopNetworkServiceAccountIdTokenRequestUid"}, // 17.0.0+
{42, nullptr, "SetNetworkServiceAccountIdTokenSuccess"}, // 17.0.0+
{43, nullptr, "SetNetworkServiceAccountIdTokenFailure"}, // 17.0.0+
{44, nullptr, "SetUidList"}, // 17.0.0+
{45, nullptr, "PutDigitalTwinKeyValue"}, // 17.0.0+
{51, nullptr, "DeleteDigitalTwinKeyValue"}, // 18.0.0+
{101, nullptr, "Suspend"},
{102, nullptr, "Resume"},
{103, C<&INpnsSystem::GetState>, "GetState"},
{104, nullptr, "GetStatistics"},
{105, nullptr, "GetPlayReportRequestEvent"},
{106, C<&INpnsSystem::GetLastNotifiedTime>, "GetLastNotifiedTime"}, // 18.0.0+
{107, nullptr, "SetLastNotifiedTime"}, // 18.0.0+
{111, nullptr, "GetJid"},
{112, nullptr, "CreateJid"},
{113, nullptr, "DestroyJid"},
{114, nullptr, "AttachJid"},
{115, nullptr, "DetachJid"},
{120, nullptr, "CreateNotificationReceiver"},
{151, nullptr, "GetStateWithHandover"},
{152, nullptr, "GetStateChangeEventWithHandover"},
{153, nullptr, "GetDropEventWithHandover"},
{154, nullptr, "CreateTokenAsync"},
{155, nullptr, "CreateTokenAsyncWithApplicationId"},
{156, nullptr, "CreateTokenWithNameAsync"}, // 18.0.0+
{161, C<&INpnsSystem::GetRequestChangeStateCancelEvent>, "GetRequestChangeStateCancelEvent"}, // 10.0.0+
{162, nullptr, "RequestChangeStateForceTimedWithCancelEvent"},
{201, nullptr, "RequestChangeStateForceTimed"},
{202, nullptr, "RequestChangeStateForceAsync"},
{301, nullptr, "GetPassword"}, // 18.0.0+
{302, nullptr, "GetAllImmigration"}, // 18.0.0+
{303, nullptr, "GetNotificationHistories"}, // 18.0.0+
{304, nullptr, "GetPersistentConnectionSummary"}, // 18.0.0+
{305, nullptr, "GetDigitalTwinSummary"}, // 18.0.0+
{306, nullptr, "GetDigitalTwinValue"}, // 18.0.0+
};
// clang-format on
get_receive_event{service_context}, get_request_change_state_cancel_event{service_context} {}
RegisterHandlers(functions);
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+
);
}
~INpnsSystem() override = default;
@@ -148,34 +146,32 @@ private:
class INpnsUser final : public ServiceFramework<INpnsUser> {
public:
explicit INpnsUser(Core::System& system_)
: ServiceFramework{system_, "npns:u"}, service_context{system, "npns:u"}, get_receive_event{service_context} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "ListenAll"},
{2, nullptr, "ListenTo"},
{3, nullptr, "Receive"},
{4, nullptr, "ReceiveRaw"},
{5, C<&INpnsUser::GetReceiveEvent>, "GetReceiveEvent"},
{7, nullptr, "GetStateChangeEvent"},
{8, C<&INpnsUser::ListenToByName>, "ListenToByName"}, // 18.0.0+
{21, nullptr, "CreateToken"},
{23, nullptr, "DestroyToken"},
{25, nullptr, "QueryIsTokenValid"},
{26, nullptr, "ListenToMyApplicationId"},
{101, nullptr, "Suspend"},
{102, nullptr, "Resume"},
{103, nullptr, "GetState"},
{104, nullptr, "GetStatistics"},
{111, nullptr, "GetJid"},
{120, nullptr, "CreateNotificationReceiver"},
{151, nullptr, "GetStateWithHandover"},
{152, nullptr, "GetStateChangeEventWithHandover"},
{153, nullptr, "GetDropEventWithHandover"},
{154, nullptr, "CreateTokenAsync"},
};
// clang-format on
: ServiceFramework{system_, "npns:u"}, service_context{system, "npns:u"}, get_receive_event{service_context} {}
RegisterHandlers(functions);
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"}
);
}
private:
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -9,13 +12,13 @@ IFactoryResetInterface::IFactoryResetInterface(Core::System& system_)
: ServiceFramework{system_, "IFactoryResetInterface"} {
// clang-format off
static const FunctionInfo functions[] = {
{100, nullptr, "ResetToFactorySettings"},
{101, nullptr, "ResetToFactorySettingsWithoutUserSaveData"},
{102, nullptr, "ResetToFactorySettingsForRefurbishment"},
{103, nullptr, "ResetToFactorySettingsWithPlatformRegion"},
{104, nullptr, "ResetToFactorySettingsWithPlatformRegionAuthentication"},
{105, nullptr, "RequestResetToFactorySettingsSecurely"},
{106, nullptr, "RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely"},
FunctionInfo{100, nullptr, "ResetToFactorySettings"},
FunctionInfo{101, nullptr, "ResetToFactorySettingsWithoutUserSaveData"},
FunctionInfo{102, nullptr, "ResetToFactorySettingsForRefurbishment"},
FunctionInfo{103, nullptr, "ResetToFactorySettingsWithPlatformRegion"},
FunctionInfo{104, nullptr, "ResetToFactorySettingsWithPlatformRegionAuthentication"},
FunctionInfo{105, nullptr, "RequestResetToFactorySettingsSecurely"},
FunctionInfo{106, nullptr, "RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely"}
};
// clang-format on
+29 -31
View File
@@ -19,25 +19,24 @@ namespace Service::NS {
class INotifyService final : public ServiceFramework<INotifyService> {
public:
explicit INotifyService(Core::System& system_) : ServiceFramework{system_, "pdm:ntfy"} {
// clang-format off
static const FunctionInfo functions[] = {
{ 0, nullptr, "NotifyAppletEvent" },
{ 2, nullptr, "NotifyOperationModeChangeEvent" },
{ 3, nullptr, "NotifyPowerStateChangeEvent" },
{ 4, nullptr, "NotifyClearAllEvent" },
{ 5, nullptr, "NotifyEventForDebug" },
{ 6, nullptr, "SuspendUserAccountEventService" },
{ 7, nullptr, "ResumeUserAccountEventService" },
{ 8, nullptr, "NotifyLibraryAppletEvent" },
{ 9, nullptr, "Cmd9" },
{ 20, nullptr, "Cmd20" },
{ 30, nullptr, "Cmd30" },
{ 100, nullptr, "Cmd100" },
{ 101, nullptr, "Cmd101" },
};
// clang-format on
RegisterHandlers(functions);
explicit INotifyService(Core::System& system_) : ServiceFramework{system_, "pdm:ntfy"} {}
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" }
);
}
};
@@ -45,18 +44,17 @@ class IVulnerabilityManagerInterface final
: public ServiceFramework<IVulnerabilityManagerInterface> {
public:
explicit IVulnerabilityManagerInterface(Core::System& system_)
: ServiceFramework{system_, "ns:vm"} {
// clang-format off
static const FunctionInfo functions[] = {
{1200, D<&IVulnerabilityManagerInterface::NeedsUpdateVulnerability>, "NeedsUpdateVulnerability"},
{1201, nullptr, "UpdateSafeSystemVersionForDebug"},
{1202, nullptr, "GetSafeSystemVersion"},
{3100, D<&IVulnerabilityManagerInterface::GetSafeSystemVersionCheckInfo>, "GetSafeSystemVersionCheckInfo"},
{3101, nullptr, "RequestUpdateSafeSystemVersionCheckInfo"},
{3102, D<&IVulnerabilityManagerInterface::ResetSafeSystemVersionCheckInfo>, "ResetSafeSystemVersionCheckInfo"},
};
// clang-format on
RegisterHandlers(functions);
: 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"}
);
}
~IVulnerabilityManagerInterface() override = default;
+6 -6
View File
@@ -38,12 +38,12 @@ IQueryService::IQueryService(Core::System& system_) : ServiceFramework{system_,
{17, D<&IQueryService::QueryLastPlayTime>, "QueryLastPlayTime"},
{18, D<&IQueryService::QueryApplicationPlayStatisticsForSystem>, "QueryApplicationPlayStatisticsForSystem"},
{19, D<&IQueryService::QueryApplicationPlayStatisticsByUserAccountIdForSystem>, "QueryApplicationPlayStatisticsByUserAccountIdForSystem"},
{ 30, nullptr, "Cmd30" },
{ 31, nullptr, "Cmd31" },
{ 100, nullptr, "Cmd100" },
{ 110, nullptr, "Cmd110" },
{ 118, nullptr, "Cmd118" },
{ 119, nullptr, "Cmd119" },
FunctionInfo{30, nullptr, "Cmd30" },
FunctionInfo{31, nullptr, "Cmd31" },
FunctionInfo{100, nullptr, "Cmd100" },
FunctionInfo{110, nullptr, "Cmd110" },
FunctionInfo{118, nullptr, "Cmd118" },
FunctionInfo{119, nullptr, "Cmd119" },
};
// clang-format on
@@ -85,10 +85,10 @@ public:
, data_size{size}
{
static const FunctionInfo functions[] = {
{0, D<&IAsyncValue::GetSize>, "GetSize"},
{1, D<&IAsyncValue::Get>, "Get"},
{2, D<&IAsyncValue::Cancel>, "Cancel"},
{3, D<&IAsyncValue::GetErrorContext>, "GetErrorContext"},
FunctionInfo{0, D<&IAsyncValue::GetSize>, "GetSize"},
FunctionInfo{1, D<&IAsyncValue::Get>, "Get"},
FunctionInfo{2, D<&IAsyncValue::Cancel>, "Cancel"},
FunctionInfo{3, D<&IAsyncValue::GetErrorContext>, "GetErrorContext"}
};
RegisterHandlers(functions);
completion_event = service_context.CreateEvent("IAsyncValue:Completion");
+22 -22
View File
@@ -52,14 +52,14 @@ public:
: ServiceFramework{system_, "nvgem:c"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "GetEventHandle"},
{2, nullptr, "ControlNotification"},
{3, nullptr, "SetNotificationPerm"},
{4, nullptr, "SetCoreDumpPerm"},
{5, nullptr, "GetAruid"},
{6, nullptr, "Reset"},
{7, nullptr, "GetAruid2"},
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{1, nullptr, "GetEventHandle"},
FunctionInfo{2, nullptr, "ControlNotification"},
FunctionInfo{3, nullptr, "SetNotificationPerm"},
FunctionInfo{4, nullptr, "SetCoreDumpPerm"},
FunctionInfo{5, nullptr, "GetAruid"},
FunctionInfo{6, nullptr, "Reset"},
FunctionInfo{7, nullptr, "GetAruid2"}
};
RegisterHandlers(functions);
}
@@ -71,11 +71,11 @@ public:
: ServiceFramework{system_, "nvgem:cd"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "Initialize"},
{1, nullptr, "GetAruid"},
{2, nullptr, "ReadNextBlock"},
{3, nullptr, "GetNextBlockSize"},
{4, nullptr, "ReadNextBlock2"},
FunctionInfo{0, nullptr, "Initialize"},
FunctionInfo{1, nullptr, "GetAruid"},
FunctionInfo{2, nullptr, "ReadNextBlock"},
FunctionInfo{3, nullptr, "GetNextBlockSize"},
FunctionInfo{4, nullptr, "ReadNextBlock2"}
};
RegisterHandlers(functions);
}
@@ -87,15 +87,15 @@ public:
: ServiceFramework{system_, "nvdbg:d"}
{
static const FunctionInfo functions[] = {
{0, nullptr, "Open"},
{1, nullptr, "Ioctl"},
{2, nullptr, "Close"},
{4, nullptr, "QueryEvent"},
{9, nullptr, "DumpStatus"},
{10, nullptr, "InitializeDevtools"},
{11, nullptr, "Ioctl2"},
{12, nullptr, "Ioctl3"},
{13, nullptr, "SetConfiguration"},
FunctionInfo{0, nullptr, "Open"},
FunctionInfo{1, nullptr, "Ioctl"},
FunctionInfo{2, nullptr, "Close"},
FunctionInfo{4, nullptr, "QueryEvent"},
FunctionInfo{9, nullptr, "DumpStatus"},
FunctionInfo{10, nullptr, "InitializeDevtools"},
FunctionInfo{11, nullptr, "Ioctl2"},
FunctionInfo{12, nullptr, "Ioctl3"},
FunctionInfo{13, nullptr, "SetConfiguration"}
};
RegisterHandlers(functions);
}
+1 -1
View File
@@ -18,7 +18,7 @@ public:
: ServiceFramework{system_, "spbg:sp"}
{
static const FunctionInfo functions[] = {
{ 100, nullptr, "OpenBgAgentController" },
FunctionInfo{100, nullptr, "OpenBgAgentController" },
};
RegisterHandlers(functions);
}

Some files were not shown because too many files have changed in this diff Show More