service: set: Refractor setting service
This commit is contained in:
		| @@ -712,22 +712,23 @@ add_library(core STATIC | |||||||
|     hle/service/server_manager.h |     hle/service/server_manager.h | ||||||
|     hle/service/service.cpp |     hle/service/service.cpp | ||||||
|     hle/service/service.h |     hle/service/service.h | ||||||
|     hle/service/set/appln_settings.cpp |     hle/service/set/setting_formats/appln_settings.cpp | ||||||
|     hle/service/set/appln_settings.h |     hle/service/set/setting_formats/appln_settings.h | ||||||
|     hle/service/set/device_settings.cpp |     hle/service/set/setting_formats/device_settings.cpp | ||||||
|     hle/service/set/device_settings.h |     hle/service/set/setting_formats/device_settings.h | ||||||
|  |     hle/service/set/setting_formats/system_settings.cpp | ||||||
|  |     hle/service/set/setting_formats/system_settings.h | ||||||
|  |     hle/service/set/setting_formats/private_settings.cpp | ||||||
|  |     hle/service/set/setting_formats/private_settings.h | ||||||
|     hle/service/set/factory_settings_server.cpp |     hle/service/set/factory_settings_server.cpp | ||||||
|     hle/service/set/factory_settings_server.h |     hle/service/set/factory_settings_server.h | ||||||
|     hle/service/set/firmware_debug_settings_server.cpp |     hle/service/set/firmware_debug_settings_server.cpp | ||||||
|     hle/service/set/firmware_debug_settings_server.h |     hle/service/set/firmware_debug_settings_server.h | ||||||
|     hle/service/set/private_settings.cpp |  | ||||||
|     hle/service/set/private_settings.h |  | ||||||
|     hle/service/set/settings.cpp |     hle/service/set/settings.cpp | ||||||
|     hle/service/set/settings.h |     hle/service/set/settings.h | ||||||
|     hle/service/set/settings_server.cpp |     hle/service/set/settings_server.cpp | ||||||
|     hle/service/set/settings_server.h |     hle/service/set/settings_server.h | ||||||
|     hle/service/set/system_settings.cpp |     hle/service/set/settings_types.h | ||||||
|     hle/service/set/system_settings.h |  | ||||||
|     hle/service/set/system_settings_server.cpp |     hle/service/set/system_settings_server.cpp | ||||||
|     hle/service/set/system_settings_server.h |     hle/service/set/system_settings_server.h | ||||||
|     hle/service/sm/sm.cpp |     hle/service/sm/sm.cpp | ||||||
|   | |||||||
| @@ -1,72 +0,0 @@ | |||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |  | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later |  | ||||||
|  |  | ||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include <array> |  | ||||||
|  |  | ||||||
| #include "common/bit_field.h" |  | ||||||
| #include "common/common_funcs.h" |  | ||||||
| #include "common/common_types.h" |  | ||||||
| #include "common/uuid.h" |  | ||||||
| #include "core/hle/service/time/clock_types.h" |  | ||||||
|  |  | ||||||
| namespace Service::Set { |  | ||||||
|  |  | ||||||
| /// This is nn::settings::system::InitialLaunchFlag |  | ||||||
| struct InitialLaunchFlag { |  | ||||||
|     union { |  | ||||||
|         u32 raw{}; |  | ||||||
|  |  | ||||||
|         BitField<0, 1, u32> InitialLaunchCompletionFlag; |  | ||||||
|         BitField<8, 1, u32> InitialLaunchUserAdditionFlag; |  | ||||||
|         BitField<16, 1, u32> InitialLaunchTimestampFlag; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(InitialLaunchFlag) == 4, "InitialLaunchFlag is an invalid size"); |  | ||||||
|  |  | ||||||
| /// This is nn::settings::system::InitialLaunchSettings |  | ||||||
| struct InitialLaunchSettings { |  | ||||||
|     InitialLaunchFlag flags; |  | ||||||
|     INSERT_PADDING_BYTES(0x4); |  | ||||||
|     Service::Time::Clock::SteadyClockTimePoint timestamp; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size"); |  | ||||||
|  |  | ||||||
| #pragma pack(push, 4) |  | ||||||
| struct InitialLaunchSettingsPacked { |  | ||||||
|     InitialLaunchFlag flags; |  | ||||||
|     Service::Time::Clock::SteadyClockTimePoint timestamp; |  | ||||||
| }; |  | ||||||
| #pragma pack(pop) |  | ||||||
| static_assert(sizeof(InitialLaunchSettingsPacked) == 0x1C, |  | ||||||
|               "InitialLaunchSettingsPacked is incorrect size"); |  | ||||||
|  |  | ||||||
| struct PrivateSettings { |  | ||||||
|     std::array<u8, 0x10> reserved_00; |  | ||||||
|  |  | ||||||
|     // nn::settings::system::InitialLaunchSettings |  | ||||||
|     InitialLaunchSettings initial_launch_settings; |  | ||||||
|  |  | ||||||
|     std::array<u8, 0x20> reserved_30; |  | ||||||
|  |  | ||||||
|     Common::UUID external_clock_source_id; |  | ||||||
|     s64 shutdown_rtc_value; |  | ||||||
|     s64 external_steady_clock_internal_offset; |  | ||||||
|  |  | ||||||
|     std::array<u8, 0x60> reserved_70; |  | ||||||
|  |  | ||||||
|     // nn::settings::system::PlatformRegion |  | ||||||
|     std::array<u8, 0x4> platform_region; |  | ||||||
|  |  | ||||||
|     std::array<u8, 0x4> reserved_D4; |  | ||||||
| }; |  | ||||||
| static_assert(offsetof(PrivateSettings, initial_launch_settings) == 0x10); |  | ||||||
| static_assert(offsetof(PrivateSettings, external_clock_source_id) == 0x50); |  | ||||||
| static_assert(offsetof(PrivateSettings, reserved_70) == 0x70); |  | ||||||
| static_assert(offsetof(PrivateSettings, platform_region) == 0xD0); |  | ||||||
| static_assert(sizeof(PrivateSettings) == 0xD8, "PrivateSettings has the wrong size!"); |  | ||||||
|  |  | ||||||
| PrivateSettings DefaultPrivateSettings(); |  | ||||||
|  |  | ||||||
| } // namespace Service::Set |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| 
 | 
 | ||||||
| #include "core/hle/service/set/appln_settings.h" | #include "core/hle/service/set/setting_formats/appln_settings.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| 
 | 
 | ||||||
| @@ -7,24 +7,23 @@ | |||||||
| #include <cstddef> | #include <cstddef> | ||||||
| 
 | 
 | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/uuid.h" | ||||||
|  | #include "core/hle/service/set/settings_types.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| struct ApplnSettings { | struct ApplnSettings { | ||||||
|     std::array<u8, 0x10> reserved_000; |     INSERT_PADDING_BYTES(0x10); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     // nn::util::Uuid MiiAuthorId, copied from system settings 0x94B0
 |     // nn::util::Uuid MiiAuthorId, copied from system settings 0x94B0
 | ||||||
|     std::array<u8, 0x10> mii_author_id; |     Common::UUID mii_author_id; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x30); // Reserved
 | ||||||
|     std::array<u8, 0x30> reserved_020; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ServiceDiscoveryControlSettings
 |     // nn::settings::system::ServiceDiscoveryControlSettings
 | ||||||
|     std::array<u8, 0x4> service_discovery_control_settings; |     u32 service_discovery_control_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x20); // Reserved
 | ||||||
|     std::array<u8, 0x20> reserved_054; |  | ||||||
| 
 | 
 | ||||||
|     bool in_repair_process_enable_flag; |     bool in_repair_process_enable_flag; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3); | ||||||
|     std::array<u8, 0x3> pad_075; |  | ||||||
| }; | }; | ||||||
| static_assert(offsetof(ApplnSettings, mii_author_id) == 0x10); | static_assert(offsetof(ApplnSettings, mii_author_id) == 0x10); | ||||||
| static_assert(offsetof(ApplnSettings, service_discovery_control_settings) == 0x50); | static_assert(offsetof(ApplnSettings, service_discovery_control_settings) == 0x50); | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| 
 | 
 | ||||||
| #include "core/hle/service/set/device_settings.h" | #include "core/hle/service/set/setting_formats/device_settings.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| 
 | 
 | ||||||
| @@ -7,10 +7,12 @@ | |||||||
| #include <cstddef> | #include <cstddef> | ||||||
| 
 | 
 | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/vector_math.h" | ||||||
|  | #include "core/hle/service/set/settings_types.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| struct DeviceSettings { | struct DeviceSettings { | ||||||
|     std::array<u8, 0x10> reserved_000; |     INSERT_PADDING_BYTES(0x10); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     // nn::settings::BatteryLot
 |     // nn::settings::BatteryLot
 | ||||||
|     std::array<u8, 0x18> ptm_battery_lot; |     std::array<u8, 0x18> ptm_battery_lot; | ||||||
| @@ -19,26 +21,24 @@ struct DeviceSettings { | |||||||
|     u8 ptm_battery_version; |     u8 ptm_battery_version; | ||||||
|     // nn::settings::system::PtmCycleCountReliability
 |     // nn::settings::system::PtmCycleCountReliability
 | ||||||
|     u32 ptm_cycle_count_reliability; |     u32 ptm_cycle_count_reliability; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x48); // Reserved
 | ||||||
|     std::array<u8, 0x48> reserved_048; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AnalogStickUserCalibration L
 |     // nn::settings::system::AnalogStickUserCalibration L
 | ||||||
|     std::array<u8, 0x10> analog_user_stick_calibration_l; |     std::array<u8, 0x10> analog_user_stick_calibration_l; | ||||||
|     // nn::settings::system::AnalogStickUserCalibration R
 |     // nn::settings::system::AnalogStickUserCalibration R
 | ||||||
|     std::array<u8, 0x10> analog_user_stick_calibration_r; |     std::array<u8, 0x10> analog_user_stick_calibration_r; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x20); // Reserved
 | ||||||
|     std::array<u8, 0x20> reserved_0B0; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAccelerationBias
 |     // nn::settings::system::ConsoleSixAxisSensorAccelerationBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_acceleration_bias; |     Common::Vec3<f32> console_six_axis_sensor_acceleration_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_bias; |     Common::Vec3<f32> console_six_axis_sensor_angular_velocity_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAccelerationGain
 |     // nn::settings::system::ConsoleSixAxisSensorAccelerationGain
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; |     std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; |     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_time_bias; |     Common::Vec3<f32> console_six_axis_sensor_angular_velocity_time_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularAcceleration
 |     // nn::settings::system::ConsoleSixAxisSensorAngularAcceleration
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_angular_acceleration; |     std::array<u8, 0x24> console_six_axis_sensor_angular_acceleration; | ||||||
| }; | }; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| 
 | 
 | ||||||
| #include "core/hle/service/set/private_settings.h" | #include "core/hle/service/set/setting_formats/private_settings.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| 
 | 
 | ||||||
							
								
								
									
										39
									
								
								src/core/hle/service/set/setting_formats/private_settings.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/core/hle/service/set/setting_formats/private_settings.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <array> | ||||||
|  |  | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "common/uuid.h" | ||||||
|  | #include "core/hle/service/set/settings_types.h" | ||||||
|  | #include "core/hle/service/time/clock_types.h" | ||||||
|  |  | ||||||
|  | namespace Service::Set { | ||||||
|  |  | ||||||
|  | struct PrivateSettings { | ||||||
|  |     INSERT_PADDING_BYTES(0x10); // Reserved | ||||||
|  |  | ||||||
|  |     InitialLaunchSettings initial_launch_settings; | ||||||
|  |     INSERT_PADDING_BYTES(0x20); // Reserved | ||||||
|  |  | ||||||
|  |     Common::UUID external_clock_source_id; | ||||||
|  |     s64 shutdown_rtc_value; | ||||||
|  |     s64 external_steady_clock_internal_offset; | ||||||
|  |     INSERT_PADDING_BYTES(0x60); // Reserved | ||||||
|  |  | ||||||
|  |     // nn::settings::system::PlatformRegion | ||||||
|  |     s32 platform_region; | ||||||
|  |     INSERT_PADDING_BYTES(0x4); // Reserved | ||||||
|  | }; | ||||||
|  | static_assert(offsetof(PrivateSettings, initial_launch_settings) == 0x10); | ||||||
|  | static_assert(offsetof(PrivateSettings, external_clock_source_id) == 0x50); | ||||||
|  | static_assert(offsetof(PrivateSettings, shutdown_rtc_value) == 0x60); | ||||||
|  | static_assert(offsetof(PrivateSettings, external_steady_clock_internal_offset) == 0x68); | ||||||
|  | static_assert(offsetof(PrivateSettings, platform_region) == 0xD0); | ||||||
|  | static_assert(sizeof(PrivateSettings) == 0xD8, "PrivateSettings has the wrong size!"); | ||||||
|  |  | ||||||
|  | PrivateSettings DefaultPrivateSettings(); | ||||||
|  |  | ||||||
|  | } // namespace Service::Set | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | ||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| 
 | 
 | ||||||
| #include "core/hle/service/set/system_settings.h" | #include "core/hle/service/set/setting_formats/system_settings.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| 
 | 
 | ||||||
| @@ -8,272 +8,14 @@ | |||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/service/set/private_settings.h" | #include "common/uuid.h" | ||||||
|  | #include "common/vector_math.h" | ||||||
|  | #include "core/hle/service/set/setting_formats/private_settings.h" | ||||||
|  | #include "core/hle/service/set/settings_types.h" | ||||||
| #include "core/hle/service/time/clock_types.h" | #include "core/hle/service/time/clock_types.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| 
 | 
 | ||||||
| /// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64.
 |  | ||||||
| enum class LanguageCode : u64 { |  | ||||||
|     JA = 0x000000000000616A, |  | ||||||
|     EN_US = 0x00000053552D6E65, |  | ||||||
|     FR = 0x0000000000007266, |  | ||||||
|     DE = 0x0000000000006564, |  | ||||||
|     IT = 0x0000000000007469, |  | ||||||
|     ES = 0x0000000000007365, |  | ||||||
|     ZH_CN = 0x0000004E432D687A, |  | ||||||
|     KO = 0x0000000000006F6B, |  | ||||||
|     NL = 0x0000000000006C6E, |  | ||||||
|     PT = 0x0000000000007470, |  | ||||||
|     RU = 0x0000000000007572, |  | ||||||
|     ZH_TW = 0x00000057542D687A, |  | ||||||
|     EN_GB = 0x00000042472D6E65, |  | ||||||
|     FR_CA = 0x00000041432D7266, |  | ||||||
|     ES_419 = 0x00003931342D7365, |  | ||||||
|     ZH_HANS = 0x00736E61482D687A, |  | ||||||
|     ZH_HANT = 0x00746E61482D687A, |  | ||||||
|     PT_BR = 0x00000052422D7470, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::ErrorReportSharePermission
 |  | ||||||
| enum class ErrorReportSharePermission : u32 { |  | ||||||
|     NotConfirmed, |  | ||||||
|     Granted, |  | ||||||
|     Denied, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::ChineseTraditionalInputMethod
 |  | ||||||
| enum class ChineseTraditionalInputMethod : u32 { |  | ||||||
|     Unknown0 = 0, |  | ||||||
|     Unknown1 = 1, |  | ||||||
|     Unknown2 = 2, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::HomeMenuScheme
 |  | ||||||
| struct HomeMenuScheme { |  | ||||||
|     u32 main; |  | ||||||
|     u32 back; |  | ||||||
|     u32 sub; |  | ||||||
|     u32 bezel; |  | ||||||
|     u32 extra; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(HomeMenuScheme) == 0x14, "HomeMenuScheme is incorrect size"); |  | ||||||
| 
 |  | ||||||
| /// Indicates the current theme set by the system settings
 |  | ||||||
| enum class ColorSet : u32 { |  | ||||||
|     BasicWhite = 0, |  | ||||||
|     BasicBlack = 1, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// Indicates the current console is a retail or kiosk unit
 |  | ||||||
| enum class QuestFlag : u8 { |  | ||||||
|     Retail = 0, |  | ||||||
|     Kiosk = 1, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::RegionCode
 |  | ||||||
| enum class RegionCode : u32 { |  | ||||||
|     Japan, |  | ||||||
|     Usa, |  | ||||||
|     Europe, |  | ||||||
|     Australia, |  | ||||||
|     HongKongTaiwanKorea, |  | ||||||
|     China, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::AccountSettings
 |  | ||||||
| struct AccountSettings { |  | ||||||
|     u32 flags; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(AccountSettings) == 4, "AccountSettings is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::NotificationVolume
 |  | ||||||
| enum class NotificationVolume : u32 { |  | ||||||
|     Mute, |  | ||||||
|     Low, |  | ||||||
|     High, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::NotificationFlag
 |  | ||||||
| struct NotificationFlag { |  | ||||||
|     union { |  | ||||||
|         u32 raw{}; |  | ||||||
| 
 |  | ||||||
|         BitField<0, 1, u32> RingtoneFlag; |  | ||||||
|         BitField<1, 1, u32> DownloadCompletionFlag; |  | ||||||
|         BitField<8, 1, u32> EnablesNews; |  | ||||||
|         BitField<9, 1, u32> IncomingLampFlag; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(NotificationFlag) == 4, "NotificationFlag is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::NotificationTime
 |  | ||||||
| struct NotificationTime { |  | ||||||
|     u32 hour; |  | ||||||
|     u32 minute; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(NotificationTime) == 0x8, "NotificationTime is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::NotificationSettings
 |  | ||||||
| struct NotificationSettings { |  | ||||||
|     NotificationFlag flags; |  | ||||||
|     NotificationVolume volume; |  | ||||||
|     NotificationTime start_time; |  | ||||||
|     NotificationTime stop_time; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::AccountNotificationFlag
 |  | ||||||
| struct AccountNotificationFlag { |  | ||||||
|     union { |  | ||||||
|         u32 raw{}; |  | ||||||
| 
 |  | ||||||
|         BitField<0, 1, u32> FriendOnlineFlag; |  | ||||||
|         BitField<1, 1, u32> FriendRequestFlag; |  | ||||||
|         BitField<8, 1, u32> CoralInvitationFlag; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(AccountNotificationFlag) == 4, "AccountNotificationFlag is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::FriendPresenceOverlayPermission
 |  | ||||||
| enum class FriendPresenceOverlayPermission : u8 { |  | ||||||
|     NotConfirmed, |  | ||||||
|     NoDisplay, |  | ||||||
|     FavoriteFriends, |  | ||||||
|     Friends, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::AccountNotificationSettings
 |  | ||||||
| struct AccountNotificationSettings { |  | ||||||
|     Common::UUID uid; |  | ||||||
|     AccountNotificationFlag flags; |  | ||||||
|     FriendPresenceOverlayPermission friend_presence_permission; |  | ||||||
|     FriendPresenceOverlayPermission friend_invitation_permission; |  | ||||||
|     INSERT_PADDING_BYTES(0x2); |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(AccountNotificationSettings) == 0x18, |  | ||||||
|               "AccountNotificationSettings is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::TvFlag
 |  | ||||||
| struct TvFlag { |  | ||||||
|     union { |  | ||||||
|         u32 raw{}; |  | ||||||
| 
 |  | ||||||
|         BitField<0, 1, u32> Allows4k; |  | ||||||
|         BitField<1, 1, u32> Allows3d; |  | ||||||
|         BitField<2, 1, u32> AllowsCec; |  | ||||||
|         BitField<3, 1, u32> PreventsScreenBurnIn; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(TvFlag) == 4, "TvFlag is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::TvResolution
 |  | ||||||
| enum class TvResolution : u32 { |  | ||||||
|     Auto, |  | ||||||
|     Resolution1080p, |  | ||||||
|     Resolution720p, |  | ||||||
|     Resolution480p, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::HdmiContentType
 |  | ||||||
| enum class HdmiContentType : u32 { |  | ||||||
|     None, |  | ||||||
|     Graphics, |  | ||||||
|     Cinema, |  | ||||||
|     Photo, |  | ||||||
|     Game, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::RgbRange
 |  | ||||||
| enum class RgbRange : u32 { |  | ||||||
|     Auto, |  | ||||||
|     Full, |  | ||||||
|     Limited, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::CmuMode
 |  | ||||||
| enum class CmuMode : u32 { |  | ||||||
|     None, |  | ||||||
|     ColorInvert, |  | ||||||
|     HighContrast, |  | ||||||
|     GrayScale, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::TvSettings
 |  | ||||||
| struct TvSettings { |  | ||||||
|     TvFlag flags; |  | ||||||
|     TvResolution tv_resolution; |  | ||||||
|     HdmiContentType hdmi_content_type; |  | ||||||
|     RgbRange rgb_range; |  | ||||||
|     CmuMode cmu_mode; |  | ||||||
|     u32 tv_underscan; |  | ||||||
|     f32 tv_gama; |  | ||||||
|     f32 contrast_ratio; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::PrimaryAlbumStorage
 |  | ||||||
| enum class PrimaryAlbumStorage : u32 { |  | ||||||
|     Nand, |  | ||||||
|     SdCard, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::HandheldSleepPlan
 |  | ||||||
| enum class HandheldSleepPlan : u32 { |  | ||||||
|     Sleep1Min, |  | ||||||
|     Sleep3Min, |  | ||||||
|     Sleep5Min, |  | ||||||
|     Sleep10Min, |  | ||||||
|     Sleep30Min, |  | ||||||
|     Never, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::ConsoleSleepPlan
 |  | ||||||
| enum class ConsoleSleepPlan : u32 { |  | ||||||
|     Sleep1Hour, |  | ||||||
|     Sleep2Hour, |  | ||||||
|     Sleep3Hour, |  | ||||||
|     Sleep6Hour, |  | ||||||
|     Sleep12Hour, |  | ||||||
|     Never, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::SleepFlag
 |  | ||||||
| struct SleepFlag { |  | ||||||
|     union { |  | ||||||
|         u32 raw{}; |  | ||||||
| 
 |  | ||||||
|         BitField<0, 1, u32> SleepsWhilePlayingMedia; |  | ||||||
|         BitField<1, 1, u32> WakesAtPowerStateChange; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(SleepFlag) == 4, "TvFlag is an invalid size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::SleepSettings
 |  | ||||||
| struct SleepSettings { |  | ||||||
|     SleepFlag flags; |  | ||||||
|     HandheldSleepPlan handheld_sleep_plan; |  | ||||||
|     ConsoleSleepPlan console_sleep_plan; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(SleepSettings) == 0xc, "SleepSettings is incorrect size"); |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::EulaVersionClockType
 |  | ||||||
| enum class EulaVersionClockType : u32 { |  | ||||||
|     NetworkSystemClock, |  | ||||||
|     SteadyClock, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /// This is nn::settings::system::EulaVersion
 |  | ||||||
| struct EulaVersion { |  | ||||||
|     u32 version; |  | ||||||
|     RegionCode region_code; |  | ||||||
|     EulaVersionClockType clock_type; |  | ||||||
|     INSERT_PADDING_BYTES(0x4); |  | ||||||
|     s64 posix_time; |  | ||||||
|     Time::Clock::SteadyClockTimePoint timestamp; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(EulaVersion) == 0x30, "EulaVersion is incorrect size"); |  | ||||||
| 
 |  | ||||||
| struct SystemSettings { | struct SystemSettings { | ||||||
|     // 0/unwritten (1.0.0), 0x20000 (2.0.0), 0x30000 (3.0.0-3.0.1), 0x40001 (4.0.0-4.1.0), 0x50000
 |     // 0/unwritten (1.0.0), 0x20000 (2.0.0), 0x30000 (3.0.0-3.0.1), 0x40001 (4.0.0-4.1.0), 0x50000
 | ||||||
|     // (5.0.0-5.1.0), 0x60000 (6.0.0-6.2.0), 0x70000 (7.0.0), 0x80000 (8.0.0-8.1.1), 0x90000
 |     // (5.0.0-5.1.0), 0x60000 (6.0.0-6.2.0), 0x70000 (7.0.0), 0x80000 (8.0.0-8.1.1), 0x90000
 | ||||||
| @@ -283,20 +25,16 @@ struct SystemSettings { | |||||||
|     // 0/unwritten (1.0.0), 1 (6.0.0-8.1.0), 2 (8.1.1), 7 (9.0.0+).
 |     // 0/unwritten (1.0.0), 1 (6.0.0-8.1.0), 2 (8.1.1), 7 (9.0.0+).
 | ||||||
|     // if (flags & 2), defaults are written for AnalogStickUserCalibration
 |     // if (flags & 2), defaults are written for AnalogStickUserCalibration
 | ||||||
|     u32 flags; |     u32 flags; | ||||||
|  |     INSERT_PADDING_BYTES(0x8); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x8> reserved_00008; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::LanguageCode
 |  | ||||||
|     LanguageCode language_code; |     LanguageCode language_code; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x38); // Reserved
 | ||||||
|     std::array<u8, 0x38> reserved_00018; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::NetworkSettings
 |     // nn::settings::system::NetworkSettings
 | ||||||
|     u32 network_setting_count; |     u32 network_setting_count; | ||||||
|     bool wireless_lan_enable_flag; |     bool wireless_lan_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_00055; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x8); // Reserved
 | ||||||
|     std::array<u8, 0x8> reserved_00058; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::NetworkSettings
 |     // nn::settings::system::NetworkSettings
 | ||||||
|     std::array<std::array<u8, 0x400>, 32> network_settings_1B0; |     std::array<std::array<u8, 0x400>, 32> network_settings_1B0; | ||||||
| @@ -304,161 +42,142 @@ struct SystemSettings { | |||||||
|     // nn::settings::system::BluetoothDevicesSettings
 |     // nn::settings::system::BluetoothDevicesSettings
 | ||||||
|     std::array<u8, 0x4> bluetooth_device_settings_count; |     std::array<u8, 0x4> bluetooth_device_settings_count; | ||||||
|     bool bluetooth_enable_flag; |     bool bluetooth_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_08065; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     bool bluetooth_afh_enable_flag; |     bool bluetooth_afh_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_08069; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     bool bluetooth_boost_enable_flag; |     bool bluetooth_boost_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_0806D; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     std::array<std::array<u8, 0x200>, 10> bluetooth_device_settings_first_10; |     std::array<std::array<u8, 0x200>, 10> bluetooth_device_settings_first_10; | ||||||
| 
 | 
 | ||||||
|     s32 ldn_channel; |     s32 ldn_channel; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_09474; |  | ||||||
| 
 | 
 | ||||||
|     // nn::util::Uuid MiiAuthorId
 |     // nn::util::Uuid MiiAuthorId
 | ||||||
|     std::array<u8, 0x10> mii_author_id; |     Common::UUID mii_author_id; | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x30> reserved_094C0; |     INSERT_PADDING_BYTES(0x30); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::NxControllerSettings
 |     // nn::settings::system::NxControllerSettings
 | ||||||
|     u32 nx_controller_settings_count; |     u32 nx_controller_settings_count; | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0xC> reserved_094F4; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::NxControllerSettings,
 |     // nn::settings::system::NxControllerSettings,
 | ||||||
|     // nn::settings::system::NxControllerLegacySettings on 13.0.0+
 |     // nn::settings::system::NxControllerLegacySettings on 13.0.0+
 | ||||||
|     std::array<std::array<u8, 0x40>, 10> nx_controller_legacy_settings; |     std::array<std::array<u8, 0x40>, 10> nx_controller_legacy_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x170); // Reserved
 | ||||||
|     std::array<u8, 0x170> reserved_09780; |  | ||||||
| 
 | 
 | ||||||
|     bool external_rtc_reset_flag; |     bool external_rtc_reset_flag; | ||||||
|     std::array<u8, 0x3> pad_098F1; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_098F4; |  | ||||||
| 
 | 
 | ||||||
|     s32 push_notification_activity_mode_on_sleep; |     s32 push_notification_activity_mode_on_sleep; | ||||||
|  |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x3C> reserved_09934; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::system::ErrorReportSharePermission
 |  | ||||||
|     ErrorReportSharePermission error_report_share_permission; |     ErrorReportSharePermission error_report_share_permission; | ||||||
|  |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x3C> reserved_09974; |     KeyboardLayout keyboard_layout; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     // nn::settings::KeyboardLayout
 |  | ||||||
|     std::array<u8, 0x4> keyboard_layout; |  | ||||||
| 
 |  | ||||||
|     std::array<u8, 0x3C> reserved_099B4; |  | ||||||
| 
 | 
 | ||||||
|     bool web_inspector_flag; |     bool web_inspector_flag; | ||||||
|     std::array<u8, 0x3> pad_099F1; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AllowedSslHost
 |     // nn::settings::system::AllowedSslHost
 | ||||||
|     u32 allowed_ssl_host_count; |     u32 allowed_ssl_host_count; | ||||||
| 
 | 
 | ||||||
|     bool memory_usage_rate_flag; |     bool memory_usage_rate_flag; | ||||||
|     std::array<u8, 0x3> pad_099F9; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x34); // Reserved
 | ||||||
|     std::array<u8, 0x34> reserved_099FC; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::HostFsMountPoint
 |     // nn::settings::system::HostFsMountPoint
 | ||||||
|     std::array<u8, 0x100> host_fs_mount_point; |     std::array<u8, 0x100> host_fs_mount_point; | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AllowedSslHost
 |     // nn::settings::system::AllowedSslHost
 | ||||||
|     std::array<std::array<u8, 0x100>, 8> allowed_ssl_hosts; |     std::array<std::array<u8, 0x100>, 8> allowed_ssl_hosts; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x6C0); // Reserved
 | ||||||
|     std::array<u8, 0x6C0> reserved_0A330; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::BlePairingSettings
 |     // nn::settings::system::BlePairingSettings
 | ||||||
|     u32 ble_pairing_settings_count; |     u32 ble_pairing_settings_count; | ||||||
|     std::array<u8, 0xC> reserved_0A9F4; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x80>, 10> ble_pairing_settings; |     std::array<std::array<u8, 0x80>, 10> ble_pairing_settings; | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AccountOnlineStorageSettings
 |     // nn::settings::system::AccountOnlineStorageSettings
 | ||||||
|     u32 account_online_storage_settings_count; |     u32 account_online_storage_settings_count; | ||||||
|     std::array<u8, 0xC> reserved_0AF04; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x40>, 8> account_online_storage_settings; |     std::array<std::array<u8, 0x40>, 8> account_online_storage_settings; | ||||||
| 
 | 
 | ||||||
|     bool pctl_ready_flag; |     bool pctl_ready_flag; | ||||||
|     std::array<u8, 0x3> pad_0B111; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_0B114; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ThemeId
 |     // nn::settings::system::ThemeId
 | ||||||
|     std::array<u8, 0x80> theme_id_type0; |     std::array<u8, 0x80> theme_id_type0; | ||||||
|     std::array<u8, 0x80> theme_id_type1; |     std::array<u8, 0x80> theme_id_type1; | ||||||
|  |     INSERT_PADDING_BYTES(0x100); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x100> reserved_0B250; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::ChineseTraditionalInputMethod
 |  | ||||||
|     ChineseTraditionalInputMethod chinese_traditional_input_method; |     ChineseTraditionalInputMethod chinese_traditional_input_method; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_0B354; |  | ||||||
| 
 | 
 | ||||||
|     bool zoom_flag; |     bool zoom_flag; | ||||||
|     std::array<u8, 0x3> pad_0B391; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_0B394; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ButtonConfigRegisteredSettings
 |     // nn::settings::system::ButtonConfigRegisteredSettings
 | ||||||
|     u32 button_config_registered_settings_count; |     u32 button_config_registered_settings_count; | ||||||
|     std::array<u8, 0xC> reserved_0B3D4; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ButtonConfigSettings
 |     // nn::settings::system::ButtonConfigSettings
 | ||||||
|     u32 button_config_settings_count; |     u32 button_config_settings_count; | ||||||
|     std::array<u8, 0x4> reserved_0B3E4; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x5A8>, 5> button_config_settings; |     std::array<std::array<u8, 0x5A8>, 5> button_config_settings; | ||||||
|     std::array<u8, 0x13B0> reserved_0D030; |     INSERT_PADDING_BYTES(0x13B0); // Reserved
 | ||||||
|     u32 button_config_settings_embedded_count; |     u32 button_config_settings_embedded_count; | ||||||
|     std::array<u8, 0x4> reserved_0E3E4; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_embedded; |     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_embedded; | ||||||
|     std::array<u8, 0x13B0> reserved_10030; |     INSERT_PADDING_BYTES(0x13B0); // Reserved
 | ||||||
|     u32 button_config_settings_left_count; |     u32 button_config_settings_left_count; | ||||||
|     std::array<u8, 0x4> reserved_113E4; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_left; |     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_left; | ||||||
|     std::array<u8, 0x13B0> reserved_13030; |     INSERT_PADDING_BYTES(0x13B0); // Reserved
 | ||||||
|     u32 button_config_settings_right_count; |     u32 button_config_settings_right_count; | ||||||
|     std::array<u8, 0x4> reserved_143E4; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_right; |     std::array<std::array<u8, 0x5A8>, 5> button_config_settings_right; | ||||||
|     std::array<u8, 0x73B0> reserved_16030; |     INSERT_PADDING_BYTES(0x73B0); // Reserved
 | ||||||
|     // nn::settings::system::ButtonConfigRegisteredSettings
 |     // nn::settings::system::ButtonConfigRegisteredSettings
 | ||||||
|     std::array<u8, 0x5C8> button_config_registered_settings_embedded; |     std::array<u8, 0x5C8> button_config_registered_settings_embedded; | ||||||
|     std::array<std::array<u8, 0x5C8>, 10> button_config_registered_settings; |     std::array<std::array<u8, 0x5C8>, 10> button_config_registered_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x7FF8); // Reserved
 | ||||||
|     std::array<u8, 0x7FF8> reserved_21378; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAccelerationBias
 |     // nn::settings::system::ConsoleSixAxisSensorAccelerationBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_acceleration_bias; |     Common::Vec3<f32> console_six_axis_sensor_acceleration_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_bias; |     Common::Vec3<f32> console_six_axis_sensor_angular_velocity_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAccelerationGain
 |     // nn::settings::system::ConsoleSixAxisSensorAccelerationGain
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; |     std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; |     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias
 |     // nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias
 | ||||||
|     std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_time_bias; |     Common::Vec3<f32> console_six_axis_sensor_angular_velocity_time_bias; | ||||||
|     // nn::settings::system::ConsoleSixAxisSensorAngularAcceleration
 |     // nn::settings::system::ConsoleSixAxisSensorAngularAcceleration
 | ||||||
|     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_acceleration; |     std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_acceleration; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x70); // Reserved
 | ||||||
|     std::array<u8, 0x70> reserved_29400; |  | ||||||
| 
 | 
 | ||||||
|     bool lock_screen_flag; |     bool lock_screen_flag; | ||||||
|     std::array<u8, 0x3> pad_29471; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<u8, 0x4> reserved_249274; |  | ||||||
| 
 | 
 | ||||||
|     ColorSet color_set_id; |     ColorSet color_set_id; | ||||||
| 
 | 
 | ||||||
|     QuestFlag quest_flag; |     QuestFlag quest_flag; | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::RegionCode
 |     SystemRegionCode region_code; | ||||||
|     RegionCode region_code; |  | ||||||
| 
 | 
 | ||||||
|     // Different to nn::settings::system::InitialLaunchSettings?
 |     // Different to nn::settings::system::InitialLaunchSettings?
 | ||||||
|     InitialLaunchSettingsPacked initial_launch_settings_packed; |     InitialLaunchSettingsPacked initial_launch_settings_packed; | ||||||
| 
 | 
 | ||||||
|     bool battery_percentage_flag; |     bool battery_percentage_flag; | ||||||
|     std::array<u8, 0x3> pad_294A1; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 | 
 | ||||||
|     // BitFlagSet<32, nn::settings::system::AppletLaunchFlag>
 |     // BitFlagSet<32, nn::settings::system::AppletLaunchFlag>
 | ||||||
|     u32 applet_launch_flag; |     u32 applet_launch_flag; | ||||||
| @@ -469,33 +188,26 @@ struct SystemSettings { | |||||||
|     std::array<u8, 0x10> theme_key; |     std::array<u8, 0x10> theme_key; | ||||||
| 
 | 
 | ||||||
|     bool field_testing_flag; |     bool field_testing_flag; | ||||||
|     std::array<u8, 0x3> pad_294C1; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 | 
 | ||||||
|     s32 panel_crc_mode; |     s32 panel_crc_mode; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x28); // Reserved
 | ||||||
|     std::array<u8, 0x28> reserved_294C8; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::BacklightSettings
 |     // nn::settings::system::BacklightSettings
 | ||||||
|     std::array<u8, 0x2C> backlight_settings_mixed_up; |     std::array<u8, 0x2C> backlight_settings_mixed_up; | ||||||
|  |     INSERT_PADDING_BYTES(0x64); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x64> reserved_2951C; |  | ||||||
| 
 |  | ||||||
|     // nn::time::SystemClockContext
 |  | ||||||
|     Service::Time::Clock::SystemClockContext user_system_clock_context; |     Service::Time::Clock::SystemClockContext user_system_clock_context; | ||||||
|     Service::Time::Clock::SystemClockContext network_system_clock_context; |     Service::Time::Clock::SystemClockContext network_system_clock_context; | ||||||
|     bool user_system_clock_automatic_correction_enabled; |     bool user_system_clock_automatic_correction_enabled; | ||||||
|     std::array<u8, 0x3> pad_295C1; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     std::array<u8, 0x4> reserved_295C4; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     // nn::time::SteadyClockTimePoint
 |  | ||||||
|     Service::Time::Clock::SteadyClockTimePoint |     Service::Time::Clock::SteadyClockTimePoint | ||||||
|         user_system_clock_automatic_correction_updated_time_point; |         user_system_clock_automatic_correction_updated_time_point; | ||||||
|  |     INSERT_PADDING_BYTES(0x10); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x10> reserved_295E0; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::system::AccountSettings
 |  | ||||||
|     AccountSettings account_settings; |     AccountSettings account_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0xFC); // Reserved
 | ||||||
|     std::array<u8, 0xFC> reserved_295F4; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AudioVolume
 |     // nn::settings::system::AudioVolume
 | ||||||
|     std::array<u8, 0x8> audio_volume_type0; |     std::array<u8, 0x8> audio_volume_type0; | ||||||
| @@ -505,47 +217,42 @@ struct SystemSettings { | |||||||
|     s32 audio_output_mode_type1; |     s32 audio_output_mode_type1; | ||||||
|     s32 audio_output_mode_type2; |     s32 audio_output_mode_type2; | ||||||
|     bool force_mute_on_headphone_removed; |     bool force_mute_on_headphone_removed; | ||||||
|     std::array<u8, 0x3> pad_2970D; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     s32 headphone_volume_warning_count; |     s32 headphone_volume_warning_count; | ||||||
|     bool heaphone_volume_update_flag; |     bool heaphone_volume_update_flag; | ||||||
|     std::array<u8, 0x3> pad_29715; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     // nn::settings::system::AudioVolume
 |     // nn::settings::system::AudioVolume
 | ||||||
|     std::array<u8, 0x8> audio_volume_type2; |     std::array<u8, 0x8> audio_volume_type2; | ||||||
|     // nn::settings::system::AudioOutputMode
 |     // nn::settings::system::AudioOutputMode
 | ||||||
|     s32 audio_output_mode_type3; |     s32 audio_output_mode_type3; | ||||||
|     s32 audio_output_mode_type4; |     s32 audio_output_mode_type4; | ||||||
|     bool hearing_protection_safeguard_flag; |     bool hearing_protection_safeguard_flag; | ||||||
|     std::array<u8, 0x3> pad_29729; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     std::array<u8, 0x4> reserved_2972C; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     s64 hearing_protection_safeguard_remaining_time; |     s64 hearing_protection_safeguard_remaining_time; | ||||||
|     std::array<u8, 0x38> reserved_29738; |     INSERT_PADDING_BYTES(0x38); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     bool console_information_upload_flag; |     bool console_information_upload_flag; | ||||||
|     std::array<u8, 0x3> pad_29771; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_29774; |  | ||||||
| 
 | 
 | ||||||
|     bool automatic_application_download_flag; |     bool automatic_application_download_flag; | ||||||
|     std::array<u8, 0x3> pad_297B1; |     INSERT_PADDING_BYTES(0x3); | ||||||
|  |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x4> reserved_297B4; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::system::NotificationSettings
 |  | ||||||
|     NotificationSettings notification_settings; |     NotificationSettings notification_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x60); // Reserved
 | ||||||
|     std::array<u8, 0x60> reserved_297D0; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AccountNotificationSettings
 |     // nn::settings::system::AccountNotificationSettings
 | ||||||
|     u32 account_notification_settings_count; |     u32 account_notification_settings_count; | ||||||
|     std::array<u8, 0xC> reserved_29834; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
|     std::array<AccountNotificationSettings, 8> account_notification_settings; |     std::array<AccountNotificationSettings, 8> account_notification_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x140); // Reserved
 | ||||||
|     std::array<u8, 0x140> reserved_29900; |  | ||||||
| 
 | 
 | ||||||
|     f32 vibration_master_volume; |     f32 vibration_master_volume; | ||||||
| 
 | 
 | ||||||
|     bool usb_full_key_enable_flag; |     bool usb_full_key_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_29A45; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::AnalogStickUserCalibration
 |     // nn::settings::system::AnalogStickUserCalibration
 | ||||||
|     std::array<u8, 0x10> analog_stick_user_calibration_left; |     std::array<u8, 0x10> analog_stick_user_calibration_left; | ||||||
| @@ -553,85 +260,68 @@ struct SystemSettings { | |||||||
| 
 | 
 | ||||||
|     // nn::settings::system::TouchScreenMode
 |     // nn::settings::system::TouchScreenMode
 | ||||||
|     s32 touch_screen_mode; |     s32 touch_screen_mode; | ||||||
|  |     INSERT_PADDING_BYTES(0x14); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x14> reserved_29A6C; |  | ||||||
| 
 |  | ||||||
|     // nn::settings::system::TvSettings
 |  | ||||||
|     TvSettings tv_settings; |     TvSettings tv_settings; | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::Edid
 |     // nn::settings::system::Edid
 | ||||||
|     std::array<u8, 0x100> edid; |     std::array<u8, 0x100> edid; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x2E0); // Reserved
 | ||||||
|     std::array<u8, 0x2E0> reserved_29BA0; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::DataDeletionSettings
 |     // nn::settings::system::DataDeletionSettings
 | ||||||
|     std::array<u8, 0x8> data_deletion_settings; |     std::array<u8, 0x8> data_deletion_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x38); // Reserved
 | ||||||
|     std::array<u8, 0x38> reserved_29E88; |  | ||||||
| 
 | 
 | ||||||
|     // nn::ncm::ProgramId
 |     // nn::ncm::ProgramId
 | ||||||
|     std::array<u8, 0x8> initial_system_applet_program_id; |     std::array<u8, 0x8> initial_system_applet_program_id; | ||||||
|     std::array<u8, 0x8> overlay_disp_program_id; |     std::array<u8, 0x8> overlay_disp_program_id; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     std::array<u8, 0x4> reserved_29ED0; |  | ||||||
| 
 | 
 | ||||||
|     bool requires_run_repair_time_reviser; |     bool requires_run_repair_time_reviser; | ||||||
|  |     INSERT_PADDING_BYTES(0x6B); // Reserved
 | ||||||
| 
 | 
 | ||||||
|     std::array<u8, 0x6B> reserved_29ED5; |  | ||||||
| 
 |  | ||||||
|     // nn::time::LocationName
 |  | ||||||
|     Service::Time::TimeZone::LocationName device_time_zone_location_name; |     Service::Time::TimeZone::LocationName device_time_zone_location_name; | ||||||
|     std::array<u8, 0x4> reserved_29F64; |     INSERT_PADDING_BYTES(0x4); // Reserved
 | ||||||
|     // nn::time::SteadyClockTimePoint
 |  | ||||||
|     Service::Time::Clock::SteadyClockTimePoint device_time_zone_location_updated_time; |     Service::Time::Clock::SteadyClockTimePoint device_time_zone_location_updated_time; | ||||||
| 
 |     INSERT_PADDING_BYTES(0xC0); // Reserved
 | ||||||
|     std::array<u8, 0xC0> reserved_29F80; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::PrimaryAlbumStorage
 |     // nn::settings::system::PrimaryAlbumStorage
 | ||||||
|     PrimaryAlbumStorage primary_album_storage; |     PrimaryAlbumStorage primary_album_storage; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_2A044; |  | ||||||
| 
 | 
 | ||||||
|     bool usb_30_enable_flag; |     bool usb_30_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_2A081; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     bool usb_30_host_enable_flag; |     bool usb_30_host_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_2A085; |     INSERT_PADDING_BYTES(0x3); | ||||||
|     bool usb_30_device_enable_flag; |     bool usb_30_device_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_2A089; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x34); // Reserved
 | ||||||
|     std::array<u8, 0x34> reserved_2A08C; |  | ||||||
| 
 | 
 | ||||||
|     bool nfc_enable_flag; |     bool nfc_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_2A0C1; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x3C); // Reserved
 | ||||||
|     std::array<u8, 0x3C> reserved_2A0C4; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::SleepSettings
 |     // nn::settings::system::SleepSettings
 | ||||||
|     SleepSettings sleep_settings; |     SleepSettings sleep_settings; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x34); // Reserved
 | ||||||
|     std::array<u8, 0x34> reserved_2A10C; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::EulaVersion
 |     // nn::settings::system::EulaVersion
 | ||||||
|     u32 eula_version_count; |     u32 eula_version_count; | ||||||
|     std::array<u8, 0xC> reserved_2A144; |     INSERT_PADDING_BYTES(0xC); // Reserved
 | ||||||
|     std::array<EulaVersion, 32> eula_versions; |     std::array<EulaVersion, 32> eula_versions; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x200); // Reserved
 | ||||||
|     std::array<u8, 0x200> reserved_2A750; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::DeviceNickName
 |     // nn::settings::system::DeviceNickName
 | ||||||
|     std::array<u8, 0x80> device_nick_name; |     std::array<u8, 0x80> device_nick_name; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x80); // Reserved
 | ||||||
|     std::array<u8, 0x80> reserved_2A9D0; |  | ||||||
| 
 | 
 | ||||||
|     bool auto_update_enable_flag; |     bool auto_update_enable_flag; | ||||||
|     std::array<u8, 0x3> pad_2AA51; |     INSERT_PADDING_BYTES(0x3); | ||||||
| 
 |     INSERT_PADDING_BYTES(0x4C); // Reserved
 | ||||||
|     std::array<u8, 0x4C> reserved_2AA54; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::BluetoothDevicesSettings
 |     // nn::settings::system::BluetoothDevicesSettings
 | ||||||
|     std::array<std::array<u8, 0x200>, 14> bluetooth_device_settings_last_14; |     std::array<std::array<u8, 0x200>, 14> bluetooth_device_settings_last_14; | ||||||
| 
 |     INSERT_PADDING_BYTES(0x2000); // Reserved
 | ||||||
|     std::array<u8, 0x2000> reserved_2C6A0; |  | ||||||
| 
 | 
 | ||||||
|     // nn::settings::system::NxControllerSettings
 |     // nn::settings::system::NxControllerSettings
 | ||||||
|     std::array<std::array<u8, 0x800>, 10> nx_controller_settings_data_from_offset_30; |     std::array<std::array<u8, 0x800>, 10> nx_controller_settings_data_from_offset_30; | ||||||
| @@ -4,72 +4,13 @@ | |||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| #include "core/hle/service/set/system_settings.h" | #include "core/hle/service/set/settings_types.h" | ||||||
|  |  | ||||||
| namespace Core { | namespace Core { | ||||||
| class System; | class System; | ||||||
| } | } | ||||||
|  |  | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| enum class KeyboardLayout : u64 { |  | ||||||
|     Japanese = 0, |  | ||||||
|     EnglishUs = 1, |  | ||||||
|     EnglishUsInternational = 2, |  | ||||||
|     EnglishUk = 3, |  | ||||||
|     French = 4, |  | ||||||
|     FrenchCa = 5, |  | ||||||
|     Spanish = 6, |  | ||||||
|     SpanishLatin = 7, |  | ||||||
|     German = 8, |  | ||||||
|     Italian = 9, |  | ||||||
|     Portuguese = 10, |  | ||||||
|     Russian = 11, |  | ||||||
|     Korean = 12, |  | ||||||
|     ChineseSimplified = 13, |  | ||||||
|     ChineseTraditional = 14, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| constexpr std::array<LanguageCode, 18> available_language_codes = {{ |  | ||||||
|     LanguageCode::JA, |  | ||||||
|     LanguageCode::EN_US, |  | ||||||
|     LanguageCode::FR, |  | ||||||
|     LanguageCode::DE, |  | ||||||
|     LanguageCode::IT, |  | ||||||
|     LanguageCode::ES, |  | ||||||
|     LanguageCode::ZH_CN, |  | ||||||
|     LanguageCode::KO, |  | ||||||
|     LanguageCode::NL, |  | ||||||
|     LanguageCode::PT, |  | ||||||
|     LanguageCode::RU, |  | ||||||
|     LanguageCode::ZH_TW, |  | ||||||
|     LanguageCode::EN_GB, |  | ||||||
|     LanguageCode::FR_CA, |  | ||||||
|     LanguageCode::ES_419, |  | ||||||
|     LanguageCode::ZH_HANS, |  | ||||||
|     LanguageCode::ZH_HANT, |  | ||||||
|     LanguageCode::PT_BR, |  | ||||||
| }}; |  | ||||||
|  |  | ||||||
| static constexpr std::array<std::pair<LanguageCode, KeyboardLayout>, 18> language_to_layout{{ |  | ||||||
|     {LanguageCode::JA, KeyboardLayout::Japanese}, |  | ||||||
|     {LanguageCode::EN_US, KeyboardLayout::EnglishUs}, |  | ||||||
|     {LanguageCode::FR, KeyboardLayout::French}, |  | ||||||
|     {LanguageCode::DE, KeyboardLayout::German}, |  | ||||||
|     {LanguageCode::IT, KeyboardLayout::Italian}, |  | ||||||
|     {LanguageCode::ES, KeyboardLayout::Spanish}, |  | ||||||
|     {LanguageCode::ZH_CN, KeyboardLayout::ChineseSimplified}, |  | ||||||
|     {LanguageCode::KO, KeyboardLayout::Korean}, |  | ||||||
|     {LanguageCode::NL, KeyboardLayout::EnglishUsInternational}, |  | ||||||
|     {LanguageCode::PT, KeyboardLayout::Portuguese}, |  | ||||||
|     {LanguageCode::RU, KeyboardLayout::Russian}, |  | ||||||
|     {LanguageCode::ZH_TW, KeyboardLayout::ChineseTraditional}, |  | ||||||
|     {LanguageCode::EN_GB, KeyboardLayout::EnglishUk}, |  | ||||||
|     {LanguageCode::FR_CA, KeyboardLayout::FrenchCa}, |  | ||||||
|     {LanguageCode::ES_419, KeyboardLayout::SpanishLatin}, |  | ||||||
|     {LanguageCode::ZH_HANS, KeyboardLayout::ChineseSimplified}, |  | ||||||
|     {LanguageCode::ZH_HANT, KeyboardLayout::ChineseTraditional}, |  | ||||||
|     {LanguageCode::PT_BR, KeyboardLayout::Portuguese}, |  | ||||||
| }}; |  | ||||||
|  |  | ||||||
| LanguageCode GetLanguageCodeFromIndex(std::size_t idx); | LanguageCode GetLanguageCodeFromIndex(std::size_t idx); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										451
									
								
								src/core/hle/service/set/settings_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										451
									
								
								src/core/hle/service/set/settings_types.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,451 @@ | |||||||
|  | // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project | ||||||
|  | // SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <array> | ||||||
|  |  | ||||||
|  | #include "common/bit_field.h" | ||||||
|  | #include "common/common_funcs.h" | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "common/uuid.h" | ||||||
|  | #include "core/hle/service/time/clock_types.h" | ||||||
|  |  | ||||||
|  | namespace Service::Set { | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AudioOutputMode | ||||||
|  | enum class AudioOutputMode : u32 { | ||||||
|  |     ch_1, | ||||||
|  |     ch_2, | ||||||
|  |     ch_5_1, | ||||||
|  |     ch_7_1, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AudioOutputModeTarget | ||||||
|  | enum class AudioOutputModeTarget : u32 { | ||||||
|  |     Hdmi, | ||||||
|  |     Speaker, | ||||||
|  |     Headphone, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AudioVolumeTarget | ||||||
|  | enum class AudioVolumeTarget : u32 { | ||||||
|  |     Speaker, | ||||||
|  |     Headphone, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::ClockSourceId | ||||||
|  | enum class ClockSourceId : u32 { | ||||||
|  |     NetworkSystemClock, | ||||||
|  |     SteadyClock, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::CmuMode | ||||||
|  | enum class CmuMode : u32 { | ||||||
|  |     None, | ||||||
|  |     ColorInvert, | ||||||
|  |     HighContrast, | ||||||
|  |     GrayScale, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::ChineseTraditionalInputMethod | ||||||
|  | enum class ChineseTraditionalInputMethod : u32 { | ||||||
|  |     Unknown0 = 0, | ||||||
|  |     Unknown1 = 1, | ||||||
|  |     Unknown2 = 2, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// Indicates the current theme set by the system settings | ||||||
|  | enum class ColorSet : u32 { | ||||||
|  |     BasicWhite = 0, | ||||||
|  |     BasicBlack = 1, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::ConsoleSleepPlan | ||||||
|  | enum class ConsoleSleepPlan : u32 { | ||||||
|  |     Sleep1Hour, | ||||||
|  |     Sleep2Hour, | ||||||
|  |     Sleep3Hour, | ||||||
|  |     Sleep6Hour, | ||||||
|  |     Sleep12Hour, | ||||||
|  |     Never, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::ErrorReportSharePermission | ||||||
|  | enum class ErrorReportSharePermission : u32 { | ||||||
|  |     NotConfirmed, | ||||||
|  |     Granted, | ||||||
|  |     Denied, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::EulaVersionClockType | ||||||
|  | enum class EulaVersionClockType : u32 { | ||||||
|  |     NetworkSystemClock, | ||||||
|  |     SteadyClock, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::factory::RegionCode | ||||||
|  | enum class FactoryRegionCode : u32 { | ||||||
|  |     Japan, | ||||||
|  |     Usa, | ||||||
|  |     Europe, | ||||||
|  |     Australia, | ||||||
|  |     China, | ||||||
|  |     Korea, | ||||||
|  |     Taiwan, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::FriendPresenceOverlayPermission | ||||||
|  | enum class FriendPresenceOverlayPermission : u8 { | ||||||
|  |     NotConfirmed, | ||||||
|  |     NoDisplay, | ||||||
|  |     FavoriteFriends, | ||||||
|  |     Friends, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | enum class GetFirmwareVersionType { | ||||||
|  |     Version1, | ||||||
|  |     Version2, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::HandheldSleepPlan | ||||||
|  | enum class HandheldSleepPlan : u32 { | ||||||
|  |     Sleep1Min, | ||||||
|  |     Sleep3Min, | ||||||
|  |     Sleep5Min, | ||||||
|  |     Sleep10Min, | ||||||
|  |     Sleep30Min, | ||||||
|  |     Never, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::HdmiContentType | ||||||
|  | enum class HdmiContentType : u32 { | ||||||
|  |     None, | ||||||
|  |     Graphics, | ||||||
|  |     Cinema, | ||||||
|  |     Photo, | ||||||
|  |     Game, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | enum class KeyboardLayout : u32 { | ||||||
|  |     Japanese = 0, | ||||||
|  |     EnglishUs = 1, | ||||||
|  |     EnglishUsInternational = 2, | ||||||
|  |     EnglishUk = 3, | ||||||
|  |     French = 4, | ||||||
|  |     FrenchCa = 5, | ||||||
|  |     Spanish = 6, | ||||||
|  |     SpanishLatin = 7, | ||||||
|  |     German = 8, | ||||||
|  |     Italian = 9, | ||||||
|  |     Portuguese = 10, | ||||||
|  |     Russian = 11, | ||||||
|  |     Korean = 12, | ||||||
|  |     ChineseSimplified = 13, | ||||||
|  |     ChineseTraditional = 14, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is "nn::settings::LanguageCode", which is a NUL-terminated string stored in a u64. | ||||||
|  | enum class LanguageCode : u64 { | ||||||
|  |     JA = 0x000000000000616A, | ||||||
|  |     EN_US = 0x00000053552D6E65, | ||||||
|  |     FR = 0x0000000000007266, | ||||||
|  |     DE = 0x0000000000006564, | ||||||
|  |     IT = 0x0000000000007469, | ||||||
|  |     ES = 0x0000000000007365, | ||||||
|  |     ZH_CN = 0x0000004E432D687A, | ||||||
|  |     KO = 0x0000000000006F6B, | ||||||
|  |     NL = 0x0000000000006C6E, | ||||||
|  |     PT = 0x0000000000007470, | ||||||
|  |     RU = 0x0000000000007572, | ||||||
|  |     ZH_TW = 0x00000057542D687A, | ||||||
|  |     EN_GB = 0x00000042472D6E65, | ||||||
|  |     FR_CA = 0x00000041432D7266, | ||||||
|  |     ES_419 = 0x00003931342D7365, | ||||||
|  |     ZH_HANS = 0x00736E61482D687A, | ||||||
|  |     ZH_HANT = 0x00746E61482D687A, | ||||||
|  |     PT_BR = 0x00000052422D7470, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::NotificationVolume | ||||||
|  | enum class NotificationVolume : u32 { | ||||||
|  |     Mute, | ||||||
|  |     Low, | ||||||
|  |     High, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::PrimaryAlbumStorage | ||||||
|  | enum class PrimaryAlbumStorage : u32 { | ||||||
|  |     Nand, | ||||||
|  |     SdCard, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// Indicates the current console is a retail or kiosk unit | ||||||
|  | enum class QuestFlag : u8 { | ||||||
|  |     Retail = 0, | ||||||
|  |     Kiosk = 1, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::RgbRange | ||||||
|  | enum class RgbRange : u32 { | ||||||
|  |     Auto, | ||||||
|  |     Full, | ||||||
|  |     Limited, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::RegionCode | ||||||
|  | enum class SystemRegionCode : u32 { | ||||||
|  |     Japan, | ||||||
|  |     Usa, | ||||||
|  |     Europe, | ||||||
|  |     Australia, | ||||||
|  |     HongKongTaiwanKorea, | ||||||
|  |     China, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::TouchScreenMode | ||||||
|  | enum class TouchScreenMode : u32 { | ||||||
|  |     Stylus, | ||||||
|  |     Standard, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::TvResolution | ||||||
|  | enum class TvResolution : u32 { | ||||||
|  |     Auto, | ||||||
|  |     Resolution1080p, | ||||||
|  |     Resolution720p, | ||||||
|  |     Resolution480p, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | constexpr std::array<LanguageCode, 18> available_language_codes = {{ | ||||||
|  |     LanguageCode::JA, | ||||||
|  |     LanguageCode::EN_US, | ||||||
|  |     LanguageCode::FR, | ||||||
|  |     LanguageCode::DE, | ||||||
|  |     LanguageCode::IT, | ||||||
|  |     LanguageCode::ES, | ||||||
|  |     LanguageCode::ZH_CN, | ||||||
|  |     LanguageCode::KO, | ||||||
|  |     LanguageCode::NL, | ||||||
|  |     LanguageCode::PT, | ||||||
|  |     LanguageCode::RU, | ||||||
|  |     LanguageCode::ZH_TW, | ||||||
|  |     LanguageCode::EN_GB, | ||||||
|  |     LanguageCode::FR_CA, | ||||||
|  |     LanguageCode::ES_419, | ||||||
|  |     LanguageCode::ZH_HANS, | ||||||
|  |     LanguageCode::ZH_HANT, | ||||||
|  |     LanguageCode::PT_BR, | ||||||
|  | }}; | ||||||
|  |  | ||||||
|  | static constexpr std::array<std::pair<LanguageCode, KeyboardLayout>, 18> language_to_layout{{ | ||||||
|  |     {LanguageCode::JA, KeyboardLayout::Japanese}, | ||||||
|  |     {LanguageCode::EN_US, KeyboardLayout::EnglishUs}, | ||||||
|  |     {LanguageCode::FR, KeyboardLayout::French}, | ||||||
|  |     {LanguageCode::DE, KeyboardLayout::German}, | ||||||
|  |     {LanguageCode::IT, KeyboardLayout::Italian}, | ||||||
|  |     {LanguageCode::ES, KeyboardLayout::Spanish}, | ||||||
|  |     {LanguageCode::ZH_CN, KeyboardLayout::ChineseSimplified}, | ||||||
|  |     {LanguageCode::KO, KeyboardLayout::Korean}, | ||||||
|  |     {LanguageCode::NL, KeyboardLayout::EnglishUsInternational}, | ||||||
|  |     {LanguageCode::PT, KeyboardLayout::Portuguese}, | ||||||
|  |     {LanguageCode::RU, KeyboardLayout::Russian}, | ||||||
|  |     {LanguageCode::ZH_TW, KeyboardLayout::ChineseTraditional}, | ||||||
|  |     {LanguageCode::EN_GB, KeyboardLayout::EnglishUk}, | ||||||
|  |     {LanguageCode::FR_CA, KeyboardLayout::FrenchCa}, | ||||||
|  |     {LanguageCode::ES_419, KeyboardLayout::SpanishLatin}, | ||||||
|  |     {LanguageCode::ZH_HANS, KeyboardLayout::ChineseSimplified}, | ||||||
|  |     {LanguageCode::ZH_HANT, KeyboardLayout::ChineseTraditional}, | ||||||
|  |     {LanguageCode::PT_BR, KeyboardLayout::Portuguese}, | ||||||
|  | }}; | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AccountNotificationFlag | ||||||
|  | struct AccountNotificationFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> FriendOnlineFlag; | ||||||
|  |         BitField<1, 1, u32> FriendRequestFlag; | ||||||
|  |         BitField<8, 1, u32> CoralInvitationFlag; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(AccountNotificationFlag) == 4, "AccountNotificationFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AccountSettings | ||||||
|  | struct AccountSettings { | ||||||
|  |     u32 flags; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(AccountSettings) == 4, "AccountSettings is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::DataDeletionFlag | ||||||
|  | struct DataDeletionFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> AutomaticDeletionFlag; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(DataDeletionFlag) == 4, "DataDeletionFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::InitialLaunchFlag | ||||||
|  | struct InitialLaunchFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> InitialLaunchCompletionFlag; | ||||||
|  |         BitField<8, 1, u32> InitialLaunchUserAdditionFlag; | ||||||
|  |         BitField<16, 1, u32> InitialLaunchTimestampFlag; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(InitialLaunchFlag) == 4, "InitialLaunchFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::SleepFlag | ||||||
|  | struct SleepFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> SleepsWhilePlayingMedia; | ||||||
|  |         BitField<1, 1, u32> WakesAtPowerStateChange; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(SleepFlag) == 4, "TvFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::NotificationFlag | ||||||
|  | struct NotificationFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> RingtoneFlag; | ||||||
|  |         BitField<1, 1, u32> DownloadCompletionFlag; | ||||||
|  |         BitField<8, 1, u32> EnablesNews; | ||||||
|  |         BitField<9, 1, u32> IncomingLampFlag; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(NotificationFlag) == 4, "NotificationFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::TvFlag | ||||||
|  | struct TvFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> Allows4k; | ||||||
|  |         BitField<1, 1, u32> Allows3d; | ||||||
|  |         BitField<2, 1, u32> AllowsCec; | ||||||
|  |         BitField<3, 1, u32> PreventsScreenBurnIn; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(TvFlag) == 4, "TvFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::UserSelectorFlag | ||||||
|  | struct UserSelectorFlag { | ||||||
|  |     union { | ||||||
|  |         u32 raw{}; | ||||||
|  |  | ||||||
|  |         BitField<0, 1, u32> SkipIfSingleUser; | ||||||
|  |         BitField<31, 1, u32> Uknown; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(UserSelectorFlag) == 4, "UserSelectorFlag is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::AccountNotificationSettings | ||||||
|  | struct AccountNotificationSettings { | ||||||
|  |     Common::UUID uid; | ||||||
|  |     AccountNotificationFlag flags; | ||||||
|  |     FriendPresenceOverlayPermission friend_presence_permission; | ||||||
|  |     FriendPresenceOverlayPermission friend_invitation_permission; | ||||||
|  |     INSERT_PADDING_BYTES(0x2); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(AccountNotificationSettings) == 0x18, | ||||||
|  |               "AccountNotificationSettings is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::EulaVersion | ||||||
|  | struct EulaVersion { | ||||||
|  |     u32 version; | ||||||
|  |     SystemRegionCode region_code; | ||||||
|  |     EulaVersionClockType clock_type; | ||||||
|  |     INSERT_PADDING_BYTES(0x4); | ||||||
|  |     s64 posix_time; | ||||||
|  |     Time::Clock::SteadyClockTimePoint timestamp; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(EulaVersion) == 0x30, "EulaVersion is incorrect size"); | ||||||
|  |  | ||||||
|  | struct FirmwareVersionFormat { | ||||||
|  |     u8 major; | ||||||
|  |     u8 minor; | ||||||
|  |     u8 micro; | ||||||
|  |     INSERT_PADDING_BYTES(1); | ||||||
|  |     u8 revision_major; | ||||||
|  |     u8 revision_minor; | ||||||
|  |     INSERT_PADDING_BYTES(2); | ||||||
|  |     std::array<char, 0x20> platform; | ||||||
|  |     std::array<u8, 0x40> version_hash; | ||||||
|  |     std::array<char, 0x18> display_version; | ||||||
|  |     std::array<char, 0x80> display_title; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(FirmwareVersionFormat) == 0x100, "FirmwareVersionFormat is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::HomeMenuScheme | ||||||
|  | struct HomeMenuScheme { | ||||||
|  |     u32 main; | ||||||
|  |     u32 back; | ||||||
|  |     u32 sub; | ||||||
|  |     u32 bezel; | ||||||
|  |     u32 extra; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(HomeMenuScheme) == 0x14, "HomeMenuScheme is incorrect size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::InitialLaunchSettings | ||||||
|  | struct InitialLaunchSettings { | ||||||
|  |     InitialLaunchFlag flags; | ||||||
|  |     INSERT_PADDING_BYTES(0x4); | ||||||
|  |     Service::Time::Clock::SteadyClockTimePoint timestamp; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size"); | ||||||
|  |  | ||||||
|  | #pragma pack(push, 4) | ||||||
|  | struct InitialLaunchSettingsPacked { | ||||||
|  |     InitialLaunchFlag flags; | ||||||
|  |     Service::Time::Clock::SteadyClockTimePoint timestamp; | ||||||
|  | }; | ||||||
|  | #pragma pack(pop) | ||||||
|  | static_assert(sizeof(InitialLaunchSettingsPacked) == 0x1C, | ||||||
|  |               "InitialLaunchSettingsPacked is incorrect size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::NotificationTime | ||||||
|  | struct NotificationTime { | ||||||
|  |     u32 hour; | ||||||
|  |     u32 minute; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(NotificationTime) == 0x8, "NotificationTime is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::NotificationSettings | ||||||
|  | struct NotificationSettings { | ||||||
|  |     NotificationFlag flags; | ||||||
|  |     NotificationVolume volume; | ||||||
|  |     NotificationTime start_time; | ||||||
|  |     NotificationTime stop_time; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::SleepSettings | ||||||
|  | struct SleepSettings { | ||||||
|  |     SleepFlag flags; | ||||||
|  |     HandheldSleepPlan handheld_sleep_plan; | ||||||
|  |     ConsoleSleepPlan console_sleep_plan; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(SleepSettings) == 0xc, "SleepSettings is incorrect size"); | ||||||
|  |  | ||||||
|  | /// This is nn::settings::system::TvSettings | ||||||
|  | struct TvSettings { | ||||||
|  |     TvFlag flags; | ||||||
|  |     TvResolution tv_resolution; | ||||||
|  |     HdmiContentType hdmi_content_type; | ||||||
|  |     RgbRange rgb_range; | ||||||
|  |     CmuMode cmu_mode; | ||||||
|  |     u32 tv_underscan; | ||||||
|  |     f32 tv_gama; | ||||||
|  |     f32 contrast_ratio; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size"); | ||||||
|  |  | ||||||
|  | } // namespace Service::Set | ||||||
| @@ -775,7 +775,7 @@ void ISystemSettingsServer::SetDeviceTimeZoneLocationName(HLERequestContext& ctx | |||||||
|  |  | ||||||
| void ISystemSettingsServer::SetRegionCode(HLERequestContext& ctx) { | void ISystemSettingsServer::SetRegionCode(HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp{ctx}; |     IPC::RequestParser rp{ctx}; | ||||||
|     m_system_settings.region_code = rp.PopEnum<RegionCode>(); |     m_system_settings.region_code = rp.PopEnum<SystemRegionCode>(); | ||||||
|     SetSaveNeeded(); |     SetSaveNeeded(); | ||||||
|  |  | ||||||
|     LOG_INFO(Service_SET, "called, region_code={}", m_system_settings.region_code); |     LOG_INFO(Service_SET, "called, region_code={}", m_system_settings.region_code); | ||||||
|   | |||||||
| @@ -12,10 +12,11 @@ | |||||||
| #include "common/uuid.h" | #include "common/uuid.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| #include "core/hle/service/set/appln_settings.h" | #include "core/hle/service/set/setting_formats/appln_settings.h" | ||||||
| #include "core/hle/service/set/device_settings.h" | #include "core/hle/service/set/setting_formats/device_settings.h" | ||||||
| #include "core/hle/service/set/private_settings.h" | #include "core/hle/service/set/setting_formats/private_settings.h" | ||||||
| #include "core/hle/service/set/system_settings.h" | #include "core/hle/service/set/setting_formats/system_settings.h" | ||||||
|  | #include "core/hle/service/set/settings_types.h" | ||||||
| #include "core/hle/service/time/clock_types.h" | #include "core/hle/service/time/clock_types.h" | ||||||
| #include "core/hle/service/time/time_zone_types.h" | #include "core/hle/service/time/time_zone_types.h" | ||||||
|  |  | ||||||
| @@ -24,25 +25,6 @@ class System; | |||||||
| } | } | ||||||
|  |  | ||||||
| namespace Service::Set { | namespace Service::Set { | ||||||
| enum class GetFirmwareVersionType { |  | ||||||
|     Version1, |  | ||||||
|     Version2, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| struct FirmwareVersionFormat { |  | ||||||
|     u8 major; |  | ||||||
|     u8 minor; |  | ||||||
|     u8 micro; |  | ||||||
|     INSERT_PADDING_BYTES(1); |  | ||||||
|     u8 revision_major; |  | ||||||
|     u8 revision_minor; |  | ||||||
|     INSERT_PADDING_BYTES(2); |  | ||||||
|     std::array<char, 0x20> platform; |  | ||||||
|     std::array<u8, 0x40> version_hash; |  | ||||||
|     std::array<char, 0x18> display_version; |  | ||||||
|     std::array<char, 0x80> display_title; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(FirmwareVersionFormat) == 0x100, "FirmwareVersionFormat is an invalid size"); |  | ||||||
|  |  | ||||||
| Result GetFirmwareVersionImpl(FirmwareVersionFormat& out_firmware, Core::System& system, | Result GetFirmwareVersionImpl(FirmwareVersionFormat& out_firmware, Core::System& system, | ||||||
|                               GetFirmwareVersionType type); |                               GetFirmwareVersionType type); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user