summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/set
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/set/setting_formats/system_settings.cpp4
-rw-r--r--src/core/hle/service/set/settings_types.h8
-rw-r--r--src/core/hle/service/set/system_settings_server.cpp43
-rw-r--r--src/core/hle/service/set/system_settings_server.h23
4 files changed, 57 insertions, 21 deletions
diff --git a/src/core/hle/service/set/setting_formats/system_settings.cpp b/src/core/hle/service/set/setting_formats/system_settings.cpp
index 7231ff78e..caa30c2d5 100644
--- a/src/core/hle/service/set/setting_formats/system_settings.cpp
+++ b/src/core/hle/service/set/setting_formats/system_settings.cpp
@@ -52,6 +52,10 @@ SystemSettings DefaultSystemSettings() {
settings.battery_percentage_flag = true;
settings.chinese_traditional_input_method = ChineseTraditionalInputMethod::Unknown0;
settings.vibration_master_volume = 1.0f;
+ settings.touch_screen_mode = TouchScreenMode::Standard;
+ settings.nfc_enable_flag = true;
+ settings.bluetooth_enable_flag = true;
+ settings.wireless_lan_enable_flag = true;
const auto language_code =
available_language_codes[static_cast<s32>(::Settings::values.language_index.GetValue())];
diff --git a/src/core/hle/service/set/settings_types.h b/src/core/hle/service/set/settings_types.h
index 29664e88c..92c2948b0 100644
--- a/src/core/hle/service/set/settings_types.h
+++ b/src/core/hle/service/set/settings_types.h
@@ -243,6 +243,11 @@ enum class TvResolution : u32 {
Resolution480p,
};
+enum class PlatformRegion : s32 {
+ Global = 1,
+ Terra = 2,
+};
+
constexpr std::array<LanguageCode, 18> available_language_codes = {{
LanguageCode::JA,
LanguageCode::EN_US,
@@ -405,8 +410,7 @@ struct EulaVersion {
SystemRegionCode region_code;
EulaVersionClockType clock_type;
INSERT_PADDING_BYTES(0x4);
- s64 posix_time;
- Service::PSC::Time::SteadyClockTimePoint timestamp;
+ Service::PSC::Time::SystemClockContext system_clock_context;
};
static_assert(sizeof(EulaVersion) == 0x30, "EulaVersion is incorrect size");
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();
}
diff --git a/src/core/hle/service/set/system_settings_server.h b/src/core/hle/service/set/system_settings_server.h
index 46e06c8ea..993e5de7d 100644
--- a/src/core/hle/service/set/system_settings_server.h
+++ b/src/core/hle/service/set/system_settings_server.h
@@ -34,20 +34,17 @@ public:
explicit ISystemSettingsServer(Core::System& system_);
~ISystemSettingsServer() override;
- Result GetSettingsItemValueImpl(std::vector<u8>& out_value, const std::string& category,
- const std::string& name);
+ Result GetSettingsItemValueImpl(std::span<u8> out_value, u64& out_size,
+ const std::string& category, const std::string& name);
template <typename T>
- Result GetSettingsItemValueImpl(T& value, const std::string& category,
+ Result GetSettingsItemValueImpl(T& out_value, const std::string& category,
const std::string& name) {
- std::vector<u8> data;
- const auto result = GetSettingsItemValueImpl(data, category, name);
- if (result.IsError()) {
- return result;
- }
- ASSERT(data.size() >= sizeof(T));
- std::memcpy(&value, data.data(), sizeof(T));
- return result;
+ u64 data_size{};
+ std::vector<u8> data(sizeof(T));
+ R_TRY(GetSettingsItemValueImpl(data, data_size, category, name));
+ std::memcpy(&out_value, data.data(), data_size);
+ R_SUCCEED();
}
public:
@@ -84,7 +81,7 @@ public:
InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_category_buffer,
InLargeData<SettingItemName, BufferAttr_HipcPointer> setting_name_buf);
Result 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);
Result GetTvSettings(Out<TvSettings> out_tv_settings);
@@ -152,6 +149,8 @@ public:
Result GetHomeMenuScheme(Out<HomeMenuScheme> out_home_menu_scheme);
Result GetHomeMenuSchemeModel(Out<u32> out_home_menu_scheme_model);
Result GetTouchScreenMode(Out<TouchScreenMode> out_touch_screen_mode);
+ Result GetPlatformRegion(Out<PlatformRegion> out_platform_region);
+ Result SetPlatformRegion(PlatformRegion platform_region);
Result SetTouchScreenMode(TouchScreenMode touch_screen_mode);
Result GetFieldTestingFlag(Out<bool> out_field_testing_flag);
Result GetPanelCrcMode(Out<s32> out_panel_crc_mode);