Add Firmware 20.0.0-21.0.0 IPC support and stubs

This commit implements comprehensive firmware 20.0.0 through 21.0.0
support for Citron, including:

- Updated firmware version constants to 21.0.0 in api_version.h
- Updated HID service firmware version string to 21.0.0
- Added IPC command stubs for firmware 20.0.0+ in:
  * ISystemSettingsServer (commands 263, 264, 282, 283, 289, 300, 301, 306, 307)
  * IFirmwareDebugSettingsServer (command 24)
  * IApplicationFunctions (command 330)
  * IOlscServiceForSystemService (command 914)
  * IRemoteStorageController (commands 28, 901)
  * IService (migration) (commands 2250, 2260)
  * IAudioController (command 10200)

- Created new service interfaces with proper stubs:
  * IContinuousRecorder (grcsrv) - command 5 [20.2.0+] with 0x20-byte input
  * IDownloadContext (news) - command 4 [20.0.0+]
  * INotifyService (pdm:ntfy) - commands 100, 101 [20.0.0+] returning outinterfaces

- Added all new source files to CMakeLists.txt build system
- Fixed logging tag usage (Service_Migration instead of Service_MIG)
- Added required CMIF serialization headers for proper template instantiation

All stubs return success explicitly, eliminating the need for auto-stubbing.
All implementations follow Switchbrew documentation as closely as possible.

Based on Switchbrew documentation:
- https://switchbrew.org/wiki/21.0.0
- https://switchbrew.org/wiki/20.5.0
- https://switchbrew.org/wiki/20.4.0
- https://switchbrew.org/wiki/20.3.0
- https://switchbrew.org/wiki/20.2.0
- https://switchbrew.org/wiki/20.1.5
- https://switchbrew.org/wiki/20.1.1
- https://switchbrew.org/wiki/20.1.0
- https://switchbrew.org/wiki/20.0.1
- https://switchbrew.org/wiki/20.0.0

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-11-11 18:52:10 +10:00
parent 1127d30fd8
commit d59eb9a1a8
25 changed files with 341 additions and 10 deletions

View File

@@ -73,7 +73,7 @@ IAudioController::IAudioController(Core::System& system_)
{50003, D<&IAudioController::SetForceOverrideExternalDeviceNameForDebug>, "SetForceOverrideExternalDeviceNameForDebug"}, // [19.0.0+]
{50004, D<&IAudioController::ClearForceOverrideExternalDeviceNameForDebug>, "ClearForceOverrideExternalDeviceNameForDebug"}, // [19.0.0+]
{5000, nullptr, "Unknown5000"}, // [19.0.0+]
{10200, nullptr, "Unknown10200"}, // [20.0.0+]
{10200, D<&IAudioController::Unknown10200>, "Unknown10200"}, // [20.0.0+]
};
// clang-format on
@@ -402,4 +402,9 @@ Result IAudioController::ClearForceOverrideExternalDeviceNameForDebug() {
R_SUCCEED();
}
Result IAudioController::Unknown10200() {
LOG_WARNING(Audio, "(STUBBED) called Unknown10200 [20.0.0+]");
R_SUCCEED();
}
} // namespace Service::Audio

View File

@@ -90,6 +90,7 @@ private:
Result OverrideDefaultTargetForDebug(u32 target); // [19.0.0-19.0.1]
Result SetForceOverrideExternalDeviceNameForDebug(InLargeData<std::array<u8, 0x80>, BufferAttr_HipcMapAlias> device_name); // [19.0.0+]
Result ClearForceOverrideExternalDeviceNameForDebug(); // [19.0.0+]
Result Unknown10200(); // [20.0.0+]
KernelHelpers::ServiceContext service_context;