// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include "common/polyfill_thread.h" #include "common/uuid.h" #include "core/hle/result.h" #include "core/hle/service/cmif_types.h" #include "core/hle/service/psc/time/common.h" #include "core/hle/service/service.h" #include "core/hle/service/set/setting_formats/appln_settings.h" #include "core/hle/service/set/setting_formats/device_settings.h" #include "core/hle/service/set/setting_formats/private_settings.h" #include "core/hle/service/set/setting_formats/system_settings.h" #include "core/hle/service/set/settings_types.h" namespace Core { class System; } namespace Service::Set { Result GetFirmwareVersionImpl(FirmwareVersionFormat& out_firmware, Core::System& system, GetFirmwareVersionType type); class ISystemSettingsServer final : public ServiceFramework { public: explicit ISystemSettingsServer(Core::System& system_); ~ISystemSettingsServer() override; Result GetSettingsItemValueImpl(std::span out_value, u64& out_size, const std::string& category, const std::string& name); template Result GetSettingsItemValueImpl(T& out_value, const std::string& category, const std::string& name) { u64 data_size{}; std::vector data(sizeof(T)); R_TRY(GetSettingsItemValueImpl(data, data_size, category, name)); std::memcpy(&out_value, data.data(), data_size); R_SUCCEED(); } public: Result SetLanguageCode(LanguageCode language_code); Result GetFirmwareVersion( OutLargeData out_firmware_data); Result GetFirmwareVersion2( OutLargeData out_firmware_data); Result GetLockScreenFlag(Out out_lock_screen_flag); Result SetLockScreenFlag(bool lock_screen_flag); Result GetExternalSteadyClockSourceId(Out out_clock_source_id); Result SetExternalSteadyClockSourceId(const Common::UUID& clock_source_id); Result GetUserSystemClockContext(Out out_clock_context); Result SetUserSystemClockContext(const Service::PSC::Time::SystemClockContext& clock_context); Result GetAccountSettings(Out out_account_settings); Result SetAccountSettings(AccountSettings account_settings); Result GetEulaVersions(Out out_count, OutArray out_eula_versions); Result SetEulaVersions(InArray eula_versions); Result GetColorSetId(Out out_color_set_id); Result SetColorSetId(ColorSet color_set_id); Result GetNotificationSettings(Out out_notification_settings); Result SetNotificationSettings(const NotificationSettings& notification_settings); Result GetAccountNotificationSettings( Out out_count, OutArray out_account_notification_settings); Result SetAccountNotificationSettings( InArray account_notification_settings); Result GetVibrationMasterVolume(Out vibration_master_volume); Result SetVibrationMasterVolume(f32 vibration_master_volume); Result GetSettingsItemValueSize( Out out_size, InLargeData setting_category_buffer, InLargeData setting_name_buf); Result GetSettingsItemValue( Out out_size, OutBuffer out_data, InLargeData setting_category_buffer, InLargeData setting_name_buffer); Result GetTvSettings(Out out_tv_settings); Result SetTvSettings(TvSettings tv_settings); Result GetAudioOutputMode(Out out_output_mode, AudioOutputModeTarget target); Result SetAudioOutputMode(AudioOutputModeTarget target, AudioOutputMode output_mode); Result GetSpeakerAutoMuteFlag(Out out_force_mute_on_headphone_removed); Result SetSpeakerAutoMuteFlag(bool force_mute_on_headphone_removed); Result GetQuestFlag(Out out_quest_flag); Result SetQuestFlag(QuestFlag quest_flag); Result GetDeviceTimeZoneLocationName(Out out_name); Result SetDeviceTimeZoneLocationName(const Service::PSC::Time::LocationName& name); Result SetRegionCode(SystemRegionCode region_code); Result GetNetworkSystemClockContext(Out out_context); Result SetNetworkSystemClockContext(const Service::PSC::Time::SystemClockContext& context); Result IsUserSystemClockAutomaticCorrectionEnabled(Out out_automatic_correction_enabled); Result SetUserSystemClockAutomaticCorrectionEnabled(bool automatic_correction_enabled); Result GetDebugModeFlag(Out is_debug_mode_enabled); Result GetPrimaryAlbumStorage(Out out_primary_album_storage); Result SetPrimaryAlbumStorage(PrimaryAlbumStorage primary_album_storage); Result GetBatteryLot(Out out_battery_lot); Result GetSerialNumber(Out out_console_serial); Result GetNfcEnableFlag(Out out_nfc_enable_flag); Result SetNfcEnableFlag(bool nfc_enable_flag); Result GetSleepSettings(Out out_sleep_settings); Result SetSleepSettings(SleepSettings sleep_settings); Result GetWirelessLanEnableFlag(Out out_wireless_lan_enable_flag); Result SetWirelessLanEnableFlag(bool wireless_lan_enable_flag); Result GetInitialLaunchSettings(Out out_initial_launch_settings); Result SetInitialLaunchSettings(InitialLaunchSettings initial_launch_settings); Result GetDeviceNickName( OutLargeData, BufferAttr_HipcMapAlias> out_device_name); Result SetDeviceNickName( InLargeData, BufferAttr_HipcMapAlias> device_name_buffer); Result GetProductModel(Out out_product_model); Result GetBluetoothEnableFlag(Out out_bluetooth_enable_flag); Result SetBluetoothEnableFlag(bool bluetooth_enable_flag); Result GetMiiAuthorId(Out out_mii_author_id); Result GetAutoUpdateEnableFlag(Out out_auto_update_enable_flag); Result SetAutoUpdateEnableFlag(bool auto_update_enable_flag); Result GetBatteryPercentageFlag(Out out_battery_percentage_flag); Result SetBatteryPercentageFlag(bool battery_percentage_flag); Result SetExternalSteadyClockInternalOffset(s64 offset); Result GetExternalSteadyClockInternalOffset(Out out_offset); Result GetPushNotificationActivityModeOnSleep( Out out_push_notification_activity_mode_on_sleep); Result SetPushNotificationActivityModeOnSleep(s32 push_notification_activity_mode_on_sleep); Result GetErrorReportSharePermission( Out out_error_report_share_permission); Result SetErrorReportSharePermission(ErrorReportSharePermission error_report_share_permission); Result GetAppletLaunchFlags(Out out_applet_launch_flag); Result SetAppletLaunchFlags(u32 applet_launch_flag); Result GetKeyboardLayout(Out out_keyboard_layout); Result SetKeyboardLayout(KeyboardLayout keyboard_layout); Result GetDeviceTimeZoneLocationUpdatedTime( Out out_time_point); Result SetDeviceTimeZoneLocationUpdatedTime( const Service::PSC::Time::SteadyClockTimePoint& time_point); Result GetUserSystemClockAutomaticCorrectionUpdatedTime( Out out_time_point); Result SetUserSystemClockAutomaticCorrectionUpdatedTime( const Service::PSC::Time::SteadyClockTimePoint& out_time_point); Result GetChineseTraditionalInputMethod( Out out_chinese_traditional_input_method); Result GetHomeMenuScheme(Out out_home_menu_scheme); Result GetHomeMenuSchemeModel(Out out_home_menu_scheme_model); Result GetTouchScreenMode(Out out_touch_screen_mode); Result GetPlatformRegion(Out out_platform_region); Result SetPlatformRegion(PlatformRegion platform_region); Result SetTouchScreenMode(TouchScreenMode touch_screen_mode); Result GetFieldTestingFlag(Out out_field_testing_flag); Result GetPanelCrcMode(Out out_panel_crc_mode); Result SetPanelCrcMode(s32 panel_crc_mode); private: bool LoadSettingsFile(std::filesystem::path& path, auto&& default_func); bool StoreSettingsFile(std::filesystem::path& path, auto& settings); void SetupSettings(); void StoreSettings(); void StoreSettingsThreadFunc(std::stop_token stop_token); void SetSaveNeeded(); Core::System& m_system; SystemSettings m_system_settings{}; PrivateSettings m_private_settings{}; DeviceSettings m_device_settings{}; ApplnSettings m_appln_settings{}; std::mutex m_save_needed_mutex; std::jthread m_save_thread; bool m_save_needed{false}; }; } // namespace Service::Set