summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/set/system_settings_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/set/system_settings_server.cpp')
-rw-r--r--src/core/hle/service/set/system_settings_server.cpp43
1 files changed, 36 insertions, 7 deletions
diff --git a/src/core/hle/service/set/system_settings_server.cpp b/src/core/hle/service/set/system_settings_server.cpp
index 93925f783..0dc8db821 100644
--- a/src/core/hle/service/set/system_settings_server.cpp
+++ b/src/core/hle/service/set/system_settings_server.cpp
@@ -26,7 +26,7 @@
namespace Service::Set {
namespace {
-constexpr u32 SETTINGS_VERSION{3u};
+constexpr u32 SETTINGS_VERSION{4u};
constexpr auto SETTINGS_MAGIC = Common::MakeMagic('y', 'u', 'z', 'u', '_', 's', 'e', 't');
struct SettingsHeader {
u64 magic;
@@ -272,8 +272,8 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
{180, nullptr, "SetZoomFlag"},
{181, nullptr, "GetT"},
{182, nullptr, "SetT"},
- {183, nullptr, "GetPlatformRegion"},
- {184, nullptr, "SetPlatformRegion"},
+ {183, C<&ISystemSettingsServer::GetPlatformRegion>, "GetPlatformRegion"},
+ {184, C<&ISystemSettingsServer::SetPlatformRegion>, "SetPlatformRegion"},
{185, C<&ISystemSettingsServer::GetHomeMenuSchemeModel>, "GetHomeMenuSchemeModel"},
{186, nullptr, "GetMemoryUsageRateFlag"},
{187, C<&ISystemSettingsServer::GetTouchScreenMode>, "GetTouchScreenMode"},
@@ -306,6 +306,20 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
RegisterHandlers(functions);
SetupSettings();
+
+ m_system_settings.region_code =
+ static_cast<SystemRegionCode>(::Settings::values.region_index.GetValue());
+
+ // TODO: Remove this when starter applet is fully functional
+ EulaVersion eula_version{
+ .version = 0x10000,
+ .region_code = m_system_settings.region_code,
+ .clock_type = EulaVersionClockType::SteadyClock,
+ .system_clock_context = m_system_settings.user_system_clock_context,
+ };
+ m_system_settings.eula_versions[0] = eula_version;
+ m_system_settings.eula_version_count = 1;
+
m_save_thread =
std::jthread([this](std::stop_token stop_token) { StoreSettingsThreadFunc(stop_token); });
}
@@ -701,7 +715,7 @@ Result ISystemSettingsServer::GetSettingsItemValueSize(
}
Result ISystemSettingsServer::GetSettingsItemValue(
- OutBuffer<BufferAttr_HipcMapAlias> out_data,
+ Out<u64> out_size, OutBuffer<BufferAttr_HipcMapAlias> out_data,
InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer,
InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buffer) {
const std::string setting_category{Common::StringFromBuffer(*setting_category_buffer)};
@@ -709,7 +723,7 @@ Result ISystemSettingsServer::GetSettingsItemValue(
LOG_INFO(Service_SET, "called, category={}, name={}", setting_category, setting_name);
- R_RETURN(GetSettingsItemValueImpl(out_data, setting_category, setting_name));
+ R_RETURN(GetSettingsItemValueImpl(out_data, *out_size, setting_category, setting_name));
}
Result ISystemSettingsServer::GetTvSettings(Out<TvSettings> out_tv_settings) {
@@ -1236,6 +1250,18 @@ Result ISystemSettingsServer::GetHomeMenuScheme(Out<HomeMenuScheme> out_home_men
R_SUCCEED();
}
+Result ISystemSettingsServer::GetPlatformRegion(Out<PlatformRegion> out_platform_region) {
+ LOG_WARNING(Service_SET, "(STUBBED) called");
+
+ *out_platform_region = PlatformRegion::Global;
+ R_SUCCEED();
+}
+
+Result ISystemSettingsServer::SetPlatformRegion(PlatformRegion platform_region) {
+ LOG_WARNING(Service_SET, "(STUBBED) called");
+ R_SUCCEED();
+}
+
Result ISystemSettingsServer::GetHomeMenuSchemeModel(Out<u32> out_home_menu_scheme_model) {
LOG_WARNING(Service_SET, "(STUBBED) called");
@@ -1349,13 +1375,16 @@ void ISystemSettingsServer::SetSaveNeeded() {
m_save_needed = true;
}
-Result ISystemSettingsServer::GetSettingsItemValueImpl(std::vector<u8>& out_value,
+Result ISystemSettingsServer::GetSettingsItemValueImpl(std::span<u8> out_value, u64& out_size,
const std::string& category,
const std::string& name) {
auto settings{GetSettings()};
R_UNLESS(settings.contains(category) && settings[category].contains(name), ResultUnknown);
- out_value = settings[category][name];
+ ASSERT_MSG(out_value.size() >= settings[category][name].size(),
+ "Stored type is bigger than requested type");
+ out_size = std::min<u64>(settings[category][name].size(), out_value.size());
+ std::memcpy(out_value.data(), settings[category][name].data(), out_size);
R_SUCCEED();
}