mirror of
https://git.eden-emu.dev/archive/citron
synced 2026-04-10 13:18:50 -04:00
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:
@@ -1,6 +1,9 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "common/logging/log.h"
|
||||
#include "core/hle/service/cmif_serialization.h"
|
||||
#include "core/hle/service/set/firmware_debug_settings_server.h"
|
||||
|
||||
namespace Service::Set {
|
||||
@@ -18,6 +21,7 @@ IFirmwareDebugSettingsServer::IFirmwareDebugSettingsServer(Core::System& system_
|
||||
{21, nullptr, "SetAllowedSslHosts"},
|
||||
{22, nullptr, "SetHostFsMountPoint"},
|
||||
{23, nullptr, "SetMemoryUsageRateFlag"},
|
||||
{24, D<&IFirmwareDebugSettingsServer::Unknown24>, "Unknown24"}, // [20.0.0+]
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
@@ -26,4 +30,9 @@ IFirmwareDebugSettingsServer::IFirmwareDebugSettingsServer(Core::System& system_
|
||||
|
||||
IFirmwareDebugSettingsServer::~IFirmwareDebugSettingsServer() = default;
|
||||
|
||||
Result IFirmwareDebugSettingsServer::Unknown24() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown24 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
} // namespace Service::Set
|
||||
|
||||
@@ -15,6 +15,9 @@ class IFirmwareDebugSettingsServer final : public ServiceFramework<IFirmwareDebu
|
||||
public:
|
||||
explicit IFirmwareDebugSettingsServer(Core::System& system_);
|
||||
~IFirmwareDebugSettingsServer() override;
|
||||
|
||||
private:
|
||||
Result Unknown24(); // [20.0.0+]
|
||||
};
|
||||
|
||||
} // namespace Service::Set
|
||||
|
||||
@@ -301,6 +301,15 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||
{208, nullptr, "SetHearingProtectionSafeguardFlag"},
|
||||
{209, nullptr, "GetHearingProtectionSafeguardRemainingTime"},
|
||||
{210, nullptr, "SetHearingProtectionSafeguardRemainingTime"},
|
||||
{263, C<&ISystemSettingsServer::Unknown263>, "Unknown263"}, // [20.0.0+]
|
||||
{264, C<&ISystemSettingsServer::Unknown264>, "Unknown264"}, // [20.0.0+]
|
||||
{282, C<&ISystemSettingsServer::Unknown282>, "Unknown282"}, // [20.0.0+]
|
||||
{283, C<&ISystemSettingsServer::Unknown283>, "Unknown283"}, // [20.0.0+]
|
||||
{289, C<&ISystemSettingsServer::Unknown289>, "Unknown289"}, // [20.0.0+]
|
||||
{300, C<&ISystemSettingsServer::Unknown300>, "Unknown300"}, // [20.0.0+]
|
||||
{301, C<&ISystemSettingsServer::Unknown301>, "Unknown301"}, // [20.0.0+]
|
||||
{306, C<&ISystemSettingsServer::Unknown306>, "Unknown306"}, // [20.0.0+]
|
||||
{307, C<&ISystemSettingsServer::Unknown307>, "Unknown307"}, // [20.0.0+]
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
@@ -1389,4 +1398,49 @@ Result ISystemSettingsServer::GetSettingsItemValueImpl(std::span<u8> out_value,
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown263() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown263 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown264() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown264 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown282() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown282 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown283() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown283 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown289() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown289 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown300() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown300 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown301() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown301 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown306() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown306 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::Unknown307() {
|
||||
LOG_WARNING(Service_SET, "(STUBBED) called Unknown307 [20.0.0+]");
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
} // namespace Service::Set
|
||||
|
||||
@@ -155,6 +155,15 @@ public:
|
||||
Result GetFieldTestingFlag(Out<bool> out_field_testing_flag);
|
||||
Result GetPanelCrcMode(Out<s32> out_panel_crc_mode);
|
||||
Result SetPanelCrcMode(s32 panel_crc_mode);
|
||||
Result Unknown263(); // [20.0.0+]
|
||||
Result Unknown264(); // [20.0.0+]
|
||||
Result Unknown282(); // [20.0.0+]
|
||||
Result Unknown283(); // [20.0.0+]
|
||||
Result Unknown289(); // [20.0.0+]
|
||||
Result Unknown300(); // [20.0.0+]
|
||||
Result Unknown301(); // [20.0.0+]
|
||||
Result Unknown306(); // [20.0.0+]
|
||||
Result Unknown307(); // [20.0.0+]
|
||||
|
||||
private:
|
||||
bool LoadSettingsFile(std::filesystem::path& path, auto&& default_func);
|
||||
|
||||
Reference in New Issue
Block a user