Browse Source
Merge pull request #12184 from Kelebek1/system_settings
Merge pull request #12184 from Kelebek1/system_settings
Make system settings persistent across bootsnce_cpp
committed by
GitHub
13 changed files with 1617 additions and 406 deletions
-
6src/common/common_funcs.h
-
8src/core/CMakeLists.txt
-
12src/core/hle/service/set/appln_settings.cpp
-
35src/core/hle/service/set/appln_settings.h
-
12src/core/hle/service/set/device_settings.cpp
-
53src/core/hle/service/set/device_settings.h
-
12src/core/hle/service/set/private_settings.cpp
-
72src/core/hle/service/set/private_settings.h
-
24src/core/hle/service/set/set.h
-
666src/core/hle/service/set/set_sys.cpp
-
373src/core/hle/service/set/set_sys.h
-
51src/core/hle/service/set/system_settings.cpp
-
699src/core/hle/service/set/system_settings.h
@ -0,0 +1,12 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/set/appln_settings.h"
|
|||
|
|||
namespace Service::Set { |
|||
|
|||
ApplnSettings DefaultApplnSettings() { |
|||
return {}; |
|||
} |
|||
|
|||
} // namespace Service::Set
|
|||
@ -0,0 +1,35 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <array> |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
namespace Service::Set { |
|||
struct ApplnSettings { |
|||
std::array<u8, 0x10> reserved_000; |
|||
|
|||
// nn::util::Uuid MiiAuthorId, copied from system settings 0x94B0 |
|||
std::array<u8, 0x10> mii_author_id; |
|||
|
|||
std::array<u8, 0x30> reserved_020; |
|||
|
|||
// nn::settings::system::ServiceDiscoveryControlSettings |
|||
std::array<u8, 0x4> service_discovery_control_settings; |
|||
|
|||
std::array<u8, 0x20> reserved_054; |
|||
|
|||
bool in_repair_process_enable_flag; |
|||
|
|||
std::array<u8, 0x3> pad_075; |
|||
}; |
|||
static_assert(offsetof(ApplnSettings, mii_author_id) == 0x10); |
|||
static_assert(offsetof(ApplnSettings, service_discovery_control_settings) == 0x50); |
|||
static_assert(offsetof(ApplnSettings, in_repair_process_enable_flag) == 0x74); |
|||
static_assert(sizeof(ApplnSettings) == 0x78, "ApplnSettings has the wrong size!"); |
|||
|
|||
ApplnSettings DefaultApplnSettings(); |
|||
|
|||
} // namespace Service::Set |
|||
@ -0,0 +1,12 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/set/device_settings.h"
|
|||
|
|||
namespace Service::Set { |
|||
|
|||
DeviceSettings DefaultDeviceSettings() { |
|||
return {}; |
|||
} |
|||
|
|||
} // namespace Service::Set
|
|||
@ -0,0 +1,53 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <array> |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
namespace Service::Set { |
|||
struct DeviceSettings { |
|||
std::array<u8, 0x10> reserved_000; |
|||
|
|||
// nn::settings::BatteryLot |
|||
std::array<u8, 0x18> ptm_battery_lot; |
|||
// nn::settings::system::PtmFuelGaugeParameter |
|||
std::array<u8, 0x18> ptm_fuel_gauge_parameter; |
|||
u8 ptm_battery_version; |
|||
// nn::settings::system::PtmCycleCountReliability |
|||
u32 ptm_cycle_count_reliability; |
|||
|
|||
std::array<u8, 0x48> reserved_048; |
|||
|
|||
// nn::settings::system::AnalogStickUserCalibration L |
|||
std::array<u8, 0x10> analog_user_stick_calibration_l; |
|||
// nn::settings::system::AnalogStickUserCalibration R |
|||
std::array<u8, 0x10> analog_user_stick_calibration_r; |
|||
|
|||
std::array<u8, 0x20> reserved_0B0; |
|||
|
|||
// nn::settings::system::ConsoleSixAxisSensorAccelerationBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_acceleration_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAccelerationGain |
|||
std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain |
|||
std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_time_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularAcceleration |
|||
std::array<u8, 0x24> console_six_axis_sensor_angular_acceleration; |
|||
}; |
|||
static_assert(offsetof(DeviceSettings, ptm_battery_lot) == 0x10); |
|||
static_assert(offsetof(DeviceSettings, ptm_cycle_count_reliability) == 0x44); |
|||
static_assert(offsetof(DeviceSettings, analog_user_stick_calibration_l) == 0x90); |
|||
static_assert(offsetof(DeviceSettings, console_six_axis_sensor_acceleration_bias) == 0xD0); |
|||
static_assert(offsetof(DeviceSettings, console_six_axis_sensor_angular_acceleration) == 0x13C); |
|||
static_assert(sizeof(DeviceSettings) == 0x160, "DeviceSettings has the wrong size!"); |
|||
|
|||
DeviceSettings DefaultDeviceSettings(); |
|||
|
|||
} // namespace Service::Set |
|||
@ -0,0 +1,12 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/set/private_settings.h"
|
|||
|
|||
namespace Service::Set { |
|||
|
|||
PrivateSettings DefaultPrivateSettings() { |
|||
return {}; |
|||
} |
|||
|
|||
} // namespace Service::Set
|
|||
@ -0,0 +1,72 @@ |
|||
// 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 |
|||
@ -0,0 +1,51 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/set/system_settings.h"
|
|||
|
|||
namespace Service::Set { |
|||
|
|||
SystemSettings DefaultSystemSettings() { |
|||
SystemSettings settings{}; |
|||
|
|||
settings.version = 0x140000; |
|||
settings.flags = 7; |
|||
|
|||
settings.color_set_id = ColorSet::BasicWhite; |
|||
|
|||
settings.notification_settings = { |
|||
.flags{0x300}, |
|||
.volume = NotificationVolume::High, |
|||
.start_time = {.hour = 9, .minute = 0}, |
|||
.stop_time = {.hour = 21, .minute = 0}, |
|||
}; |
|||
|
|||
settings.tv_settings = { |
|||
.flags = {0xC}, |
|||
.tv_resolution = TvResolution::Auto, |
|||
.hdmi_content_type = HdmiContentType::Game, |
|||
.rgb_range = RgbRange::Auto, |
|||
.cmu_mode = CmuMode::None, |
|||
.tv_underscan = {}, |
|||
.tv_gama = 1.0f, |
|||
.constrast_ratio = 0.5f, |
|||
}; |
|||
|
|||
settings.initial_launch_settings_packed = { |
|||
.flags = {0x10001}, |
|||
.timestamp = {}, |
|||
}; |
|||
|
|||
settings.sleep_settings = { |
|||
.flags = {0x3}, |
|||
.handheld_sleep_plan = HandheldSleepPlan::Sleep10Min, |
|||
.console_sleep_plan = ConsoleSleepPlan::Sleep1Hour, |
|||
}; |
|||
|
|||
settings.device_time_zone_location_name = {"UTC"}; |
|||
settings.user_system_clock_automatic_correction_enabled = false; |
|||
|
|||
return settings; |
|||
} |
|||
|
|||
} // namespace Service::Set
|
|||
@ -0,0 +1,699 @@ |
|||
// 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 "core/hle/service/set/private_settings.h" |
|||
#include "core/hle/service/time/clock_types.h" |
|||
|
|||
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 constrast_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 { |
|||
// 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 |
|||
// (9.0.0-10.0.4), 0x100100 (10.1.0+), 0x120000 (12.0.0-12.1.0), 0x130000 (13.0.0-13.2.1), |
|||
// 0x140000 (14.0.0+) |
|||
u32 version; |
|||
// 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 |
|||
u32 flags; |
|||
|
|||
std::array<u8, 0x8> reserved_00008; |
|||
|
|||
// nn::settings::LanguageCode |
|||
LanguageCode language_code; |
|||
|
|||
std::array<u8, 0x38> reserved_00018; |
|||
|
|||
// nn::settings::system::NetworkSettings |
|||
u32 network_setting_count; |
|||
bool wireless_lan_enable_flag; |
|||
std::array<u8, 0x3> pad_00055; |
|||
|
|||
std::array<u8, 0x8> reserved_00058; |
|||
|
|||
// nn::settings::system::NetworkSettings |
|||
std::array<std::array<u8, 0x400>, 32> network_settings_1B0; |
|||
|
|||
// nn::settings::system::BluetoothDevicesSettings |
|||
std::array<u8, 0x4> bluetooth_device_settings_count; |
|||
bool bluetooth_enable_flag; |
|||
std::array<u8, 0x3> pad_08065; |
|||
bool bluetooth_afh_enable_flag; |
|||
std::array<u8, 0x3> pad_08069; |
|||
bool bluetooth_boost_enable_flag; |
|||
std::array<u8, 0x3> pad_0806D; |
|||
std::array<std::array<u8, 0x200>, 10> bluetooth_device_settings_first_10; |
|||
|
|||
s32 ldn_channel; |
|||
|
|||
std::array<u8, 0x3C> reserved_09474; |
|||
|
|||
// nn::util::Uuid MiiAuthorId |
|||
std::array<u8, 0x10> mii_author_id; |
|||
|
|||
std::array<u8, 0x30> reserved_094C0; |
|||
|
|||
// nn::settings::system::NxControllerSettings |
|||
u32 nx_controller_settings_count; |
|||
|
|||
std::array<u8, 0xC> reserved_094F4; |
|||
|
|||
// nn::settings::system::NxControllerSettings, |
|||
// nn::settings::system::NxControllerLegacySettings on 13.0.0+ |
|||
std::array<std::array<u8, 0x40>, 10> nx_controller_legacy_settings; |
|||
|
|||
std::array<u8, 0x170> reserved_09780; |
|||
|
|||
bool external_rtc_reset_flag; |
|||
std::array<u8, 0x3> pad_098F1; |
|||
|
|||
std::array<u8, 0x3C> reserved_098F4; |
|||
|
|||
s32 push_notification_activity_mode_on_sleep; |
|||
|
|||
std::array<u8, 0x3C> reserved_09934; |
|||
|
|||
// nn::settings::system::ErrorReportSharePermission |
|||
ErrorReportSharePermission error_report_share_permssion; |
|||
|
|||
std::array<u8, 0x3C> reserved_09974; |
|||
|
|||
// nn::settings::KeyboardLayout |
|||
std::array<u8, 0x4> keyboard_layout; |
|||
|
|||
std::array<u8, 0x3C> reserved_099B4; |
|||
|
|||
bool web_inspector_flag; |
|||
std::array<u8, 0x3> pad_099F1; |
|||
|
|||
// nn::settings::system::AllowedSslHost |
|||
u32 allowed_ssl_host_count; |
|||
|
|||
bool memory_usage_rate_flag; |
|||
std::array<u8, 0x3> pad_099F9; |
|||
|
|||
std::array<u8, 0x34> reserved_099FC; |
|||
|
|||
// nn::settings::system::HostFsMountPoint |
|||
std::array<u8, 0x100> host_fs_mount_point; |
|||
|
|||
// nn::settings::system::AllowedSslHost |
|||
std::array<std::array<u8, 0x100>, 8> allowed_ssl_hosts; |
|||
|
|||
std::array<u8, 0x6C0> reserved_0A330; |
|||
|
|||
// nn::settings::system::BlePairingSettings |
|||
u32 ble_pairing_settings_count; |
|||
std::array<u8, 0xC> reserved_0A9F4; |
|||
std::array<std::array<u8, 0x80>, 10> ble_pairing_settings; |
|||
|
|||
// nn::settings::system::AccountOnlineStorageSettings |
|||
u32 account_online_storage_settings_count; |
|||
std::array<u8, 0xC> reserved_0AF04; |
|||
std::array<std::array<u8, 0x40>, 8> account_online_storage_settings; |
|||
|
|||
bool pctl_ready_flag; |
|||
std::array<u8, 0x3> pad_0B111; |
|||
|
|||
std::array<u8, 0x3C> reserved_0B114; |
|||
|
|||
// nn::settings::system::ThemeId |
|||
std::array<u8, 0x80> theme_id_type0; |
|||
std::array<u8, 0x80> theme_id_type1; |
|||
|
|||
std::array<u8, 0x100> reserved_0B250; |
|||
|
|||
// nn::settings::ChineseTraditionalInputMethod |
|||
ChineseTraditionalInputMethod chinese_traditional_input_method; |
|||
|
|||
std::array<u8, 0x3C> reserved_0B354; |
|||
|
|||
bool zoom_flag; |
|||
std::array<u8, 0x3> pad_0B391; |
|||
|
|||
std::array<u8, 0x3C> reserved_0B394; |
|||
|
|||
// nn::settings::system::ButtonConfigRegisteredSettings |
|||
u32 button_config_registered_settings_count; |
|||
std::array<u8, 0xC> reserved_0B3D4; |
|||
|
|||
// nn::settings::system::ButtonConfigSettings |
|||
u32 button_config_settings_count; |
|||
std::array<u8, 0x4> reserved_0B3E4; |
|||
std::array<std::array<u8, 0x5A8>, 5> button_config_settings; |
|||
std::array<u8, 0x13B0> reserved_0D030; |
|||
u32 button_config_settings_embedded_count; |
|||
std::array<u8, 0x4> reserved_0E3E4; |
|||
std::array<std::array<u8, 0x5A8>, 5> button_config_settings_embedded; |
|||
std::array<u8, 0x13B0> reserved_10030; |
|||
u32 button_config_settings_left_count; |
|||
std::array<u8, 0x4> reserved_113E4; |
|||
std::array<std::array<u8, 0x5A8>, 5> button_config_settings_left; |
|||
std::array<u8, 0x13B0> reserved_13030; |
|||
u32 button_config_settings_right_count; |
|||
std::array<u8, 0x4> reserved_143E4; |
|||
std::array<std::array<u8, 0x5A8>, 5> button_config_settings_right; |
|||
std::array<u8, 0x73B0> reserved_16030; |
|||
// nn::settings::system::ButtonConfigRegisteredSettings |
|||
std::array<u8, 0x5C8> button_config_registered_settings_embedded; |
|||
std::array<std::array<u8, 0x5C8>, 10> button_config_registered_settings; |
|||
|
|||
std::array<u8, 0x7FF8> reserved_21378; |
|||
|
|||
// nn::settings::system::ConsoleSixAxisSensorAccelerationBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_acceleration_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAccelerationGain |
|||
std::array<u8, 0x24> console_six_axis_sensor_acceleration_gain; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain |
|||
std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_gain; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularVelocityTimeBias |
|||
std::array<u8, 0xC> console_six_axis_sensor_angular_velocity_time_bias; |
|||
// nn::settings::system::ConsoleSixAxisSensorAngularAcceleration |
|||
std::array<u8, 0x24> console_six_axis_sensor_angular_velocity_acceleration; |
|||
|
|||
std::array<u8, 0x70> reserved_29400; |
|||
|
|||
bool lock_screen_flag; |
|||
std::array<u8, 0x3> pad_29471; |
|||
|
|||
std::array<u8, 0x4> reserved_249274; |
|||
|
|||
ColorSet color_set_id; |
|||
|
|||
QuestFlag quest_flag; |
|||
|
|||
// nn::settings::system::RegionCode |
|||
RegionCode region_code; |
|||
|
|||
// Different to nn::settings::system::InitialLaunchSettings? |
|||
InitialLaunchSettingsPacked initial_launch_settings_packed; |
|||
|
|||
bool battery_percentage_flag; |
|||
std::array<u8, 0x3> pad_294A1; |
|||
|
|||
// BitFlagSet<32, nn::settings::system::AppletLaunchFlag> |
|||
u32 applet_launch_flag; |
|||
|
|||
// nn::settings::system::ThemeSettings |
|||
std::array<u8, 0x8> theme_settings; |
|||
// nn::fssystem::ArchiveMacKey |
|||
std::array<u8, 0x10> theme_key; |
|||
|
|||
bool field_testing_flag; |
|||
std::array<u8, 0x3> pad_294C1; |
|||
|
|||
s32 panel_crc_mode; |
|||
|
|||
std::array<u8, 0x28> reserved_294C8; |
|||
|
|||
// nn::settings::system::BacklightSettings |
|||
std::array<u8, 0x2C> backlight_settings_mixed_up; |
|||
|
|||
std::array<u8, 0x64> reserved_2951C; |
|||
|
|||
// nn::time::SystemClockContext |
|||
Service::Time::Clock::SystemClockContext user_system_clock_context; |
|||
Service::Time::Clock::SystemClockContext network_system_clock_context; |
|||
bool user_system_clock_automatic_correction_enabled; |
|||
std::array<u8, 0x3> pad_295C1; |
|||
std::array<u8, 0x4> reserved_295C4; |
|||
// nn::time::SteadyClockTimePoint |
|||
Service::Time::Clock::SteadyClockTimePoint |
|||
user_system_clock_automatic_correction_updated_time_point; |
|||
|
|||
std::array<u8, 0x10> reserved_295E0; |
|||
|
|||
// nn::settings::system::AccountSettings |
|||
AccountSettings account_settings; |
|||
|
|||
std::array<u8, 0xFC> reserved_295F4; |
|||
|
|||
// nn::settings::system::AudioVolume |
|||
std::array<u8, 0x8> audio_volume_type0; |
|||
std::array<u8, 0x8> audio_volume_type1; |
|||
// nn::settings::system::AudioOutputMode |
|||
s32 audio_output_mode_type0; |
|||
s32 audio_output_mode_type1; |
|||
s32 audio_output_mode_type2; |
|||
bool force_mute_on_headphone_removed; |
|||
std::array<u8, 0x3> pad_2970D; |
|||
s32 headphone_volume_warning_count; |
|||
bool heaphone_volume_update_flag; |
|||
std::array<u8, 0x3> pad_29715; |
|||
// nn::settings::system::AudioVolume |
|||
std::array<u8, 0x8> audio_volume_type2; |
|||
// nn::settings::system::AudioOutputMode |
|||
s32 audio_output_mode_type3; |
|||
s32 audio_output_mode_type4; |
|||
bool hearing_protection_safeguard_flag; |
|||
std::array<u8, 0x3> pad_29729; |
|||
std::array<u8, 0x4> reserved_2972C; |
|||
s64 hearing_protection_safeguard_remaining_time; |
|||
std::array<u8, 0x38> reserved_29738; |
|||
|
|||
bool console_information_upload_flag; |
|||
std::array<u8, 0x3> pad_29771; |
|||
|
|||
std::array<u8, 0x3C> reserved_29774; |
|||
|
|||
bool automatic_application_download_flag; |
|||
std::array<u8, 0x3> pad_297B1; |
|||
|
|||
std::array<u8, 0x4> reserved_297B4; |
|||
|
|||
// nn::settings::system::NotificationSettings |
|||
NotificationSettings notification_settings; |
|||
|
|||
std::array<u8, 0x60> reserved_297D0; |
|||
|
|||
// nn::settings::system::AccountNotificationSettings |
|||
u32 account_notification_settings_count; |
|||
std::array<u8, 0xC> reserved_29834; |
|||
std::array<AccountNotificationSettings, 8> account_notification_settings; |
|||
|
|||
std::array<u8, 0x140> reserved_29900; |
|||
|
|||
f32 vibration_master_volume; |
|||
|
|||
bool usb_full_key_enable_flag; |
|||
std::array<u8, 0x3> pad_29A45; |
|||
|
|||
// nn::settings::system::AnalogStickUserCalibration |
|||
std::array<u8, 0x10> analog_stick_user_calibration_left; |
|||
std::array<u8, 0x10> analog_stick_user_calibration_right; |
|||
|
|||
// nn::settings::system::TouchScreenMode |
|||
s32 touch_screen_mode; |
|||
|
|||
std::array<u8, 0x14> reserved_29A6C; |
|||
|
|||
// nn::settings::system::TvSettings |
|||
TvSettings tv_settings; |
|||
|
|||
// nn::settings::system::Edid |
|||
std::array<u8, 0x100> edid; |
|||
|
|||
std::array<u8, 0x2E0> reserved_29BA0; |
|||
|
|||
// nn::settings::system::DataDeletionSettings |
|||
std::array<u8, 0x8> data_deletion_settings; |
|||
|
|||
std::array<u8, 0x38> reserved_29E88; |
|||
|
|||
// nn::ncm::ProgramId |
|||
std::array<u8, 0x8> initial_system_applet_program_id; |
|||
std::array<u8, 0x8> overlay_disp_program_id; |
|||
|
|||
std::array<u8, 0x4> reserved_29ED0; |
|||
|
|||
bool requires_run_repair_time_reviser; |
|||
|
|||
std::array<u8, 0x6B> reserved_29ED5; |
|||
|
|||
// nn::time::LocationName |
|||
Service::Time::TimeZone::LocationName device_time_zone_location_name; |
|||
std::array<u8, 0x4> reserved_29F64; |
|||
// nn::time::SteadyClockTimePoint |
|||
Service::Time::Clock::SteadyClockTimePoint device_time_zone_location_updated_time; |
|||
|
|||
std::array<u8, 0xC0> reserved_29F80; |
|||
|
|||
// nn::settings::system::PrimaryAlbumStorage |
|||
PrimaryAlbumStorage primary_album_storage; |
|||
|
|||
std::array<u8, 0x3C> reserved_2A044; |
|||
|
|||
bool usb_30_enable_flag; |
|||
std::array<u8, 0x3> pad_2A081; |
|||
bool usb_30_host_enable_flag; |
|||
std::array<u8, 0x3> pad_2A085; |
|||
bool usb_30_device_enable_flag; |
|||
std::array<u8, 0x3> pad_2A089; |
|||
|
|||
std::array<u8, 0x34> reserved_2A08C; |
|||
|
|||
bool nfc_enable_flag; |
|||
std::array<u8, 0x3> pad_2A0C1; |
|||
|
|||
std::array<u8, 0x3C> reserved_2A0C4; |
|||
|
|||
// nn::settings::system::SleepSettings |
|||
SleepSettings sleep_settings; |
|||
|
|||
std::array<u8, 0x34> reserved_2A10C; |
|||
|
|||
// nn::settings::system::EulaVersion |
|||
u32 eula_version_count; |
|||
std::array<u8, 0xC> reserved_2A144; |
|||
std::array<EulaVersion, 32> eula_versions; |
|||
|
|||
std::array<u8, 0x200> reserved_2A750; |
|||
|
|||
// nn::settings::system::DeviceNickName |
|||
std::array<u8, 0x80> device_nick_name; |
|||
|
|||
std::array<u8, 0x80> reserved_2A9D0; |
|||
|
|||
bool auto_update_enable_flag; |
|||
std::array<u8, 0x3> pad_2AA51; |
|||
|
|||
std::array<u8, 0x4C> reserved_2AA54; |
|||
|
|||
// nn::settings::system::BluetoothDevicesSettings |
|||
std::array<std::array<u8, 0x200>, 14> bluetooth_device_settings_last_14; |
|||
|
|||
std::array<u8, 0x2000> reserved_2C6A0; |
|||
|
|||
// nn::settings::system::NxControllerSettings |
|||
std::array<std::array<u8, 0x800>, 10> nx_controller_settings_data_from_offset_30; |
|||
}; |
|||
|
|||
static_assert(offsetof(SystemSettings, language_code) == 0x10); |
|||
static_assert(offsetof(SystemSettings, network_setting_count) == 0x50); |
|||
static_assert(offsetof(SystemSettings, network_settings_1B0) == 0x60); |
|||
static_assert(offsetof(SystemSettings, bluetooth_device_settings_count) == 0x8060); |
|||
static_assert(offsetof(SystemSettings, bluetooth_enable_flag) == 0x8064); |
|||
static_assert(offsetof(SystemSettings, bluetooth_device_settings_first_10) == 0x8070); |
|||
static_assert(offsetof(SystemSettings, ldn_channel) == 0x9470); |
|||
static_assert(offsetof(SystemSettings, mii_author_id) == 0x94B0); |
|||
static_assert(offsetof(SystemSettings, nx_controller_settings_count) == 0x94F0); |
|||
static_assert(offsetof(SystemSettings, nx_controller_legacy_settings) == 0x9500); |
|||
static_assert(offsetof(SystemSettings, external_rtc_reset_flag) == 0x98F0); |
|||
static_assert(offsetof(SystemSettings, push_notification_activity_mode_on_sleep) == 0x9930); |
|||
static_assert(offsetof(SystemSettings, allowed_ssl_host_count) == 0x99F4); |
|||
static_assert(offsetof(SystemSettings, host_fs_mount_point) == 0x9A30); |
|||
static_assert(offsetof(SystemSettings, allowed_ssl_hosts) == 0x9B30); |
|||
static_assert(offsetof(SystemSettings, ble_pairing_settings_count) == 0xA9F0); |
|||
static_assert(offsetof(SystemSettings, ble_pairing_settings) == 0xAA00); |
|||
static_assert(offsetof(SystemSettings, account_online_storage_settings_count) == 0xAF00); |
|||
static_assert(offsetof(SystemSettings, account_online_storage_settings) == 0xAF10); |
|||
static_assert(offsetof(SystemSettings, pctl_ready_flag) == 0xB110); |
|||
static_assert(offsetof(SystemSettings, theme_id_type0) == 0xB150); |
|||
static_assert(offsetof(SystemSettings, chinese_traditional_input_method) == 0xB350); |
|||
static_assert(offsetof(SystemSettings, button_config_registered_settings_count) == 0xB3D0); |
|||
static_assert(offsetof(SystemSettings, button_config_settings_count) == 0xB3E0); |
|||
static_assert(offsetof(SystemSettings, button_config_settings) == 0xB3E8); |
|||
static_assert(offsetof(SystemSettings, button_config_registered_settings_embedded) == 0x1D3E0); |
|||
static_assert(offsetof(SystemSettings, console_six_axis_sensor_acceleration_bias) == 0x29370); |
|||
static_assert(offsetof(SystemSettings, lock_screen_flag) == 0x29470); |
|||
static_assert(offsetof(SystemSettings, battery_percentage_flag) == 0x294A0); |
|||
static_assert(offsetof(SystemSettings, field_testing_flag) == 0x294C0); |
|||
static_assert(offsetof(SystemSettings, backlight_settings_mixed_up) == 0x294F0); |
|||
static_assert(offsetof(SystemSettings, user_system_clock_context) == 0x29580); |
|||
static_assert(offsetof(SystemSettings, network_system_clock_context) == 0x295A0); |
|||
static_assert(offsetof(SystemSettings, user_system_clock_automatic_correction_enabled) == 0x295C0); |
|||
static_assert(offsetof(SystemSettings, user_system_clock_automatic_correction_updated_time_point) == |
|||
0x295C8); |
|||
static_assert(offsetof(SystemSettings, account_settings) == 0x295F0); |
|||
static_assert(offsetof(SystemSettings, audio_volume_type0) == 0x296F0); |
|||
static_assert(offsetof(SystemSettings, hearing_protection_safeguard_remaining_time) == 0x29730); |
|||
static_assert(offsetof(SystemSettings, automatic_application_download_flag) == 0x297B0); |
|||
static_assert(offsetof(SystemSettings, notification_settings) == 0x297B8); |
|||
static_assert(offsetof(SystemSettings, account_notification_settings) == 0x29840); |
|||
static_assert(offsetof(SystemSettings, vibration_master_volume) == 0x29A40); |
|||
static_assert(offsetof(SystemSettings, analog_stick_user_calibration_left) == 0x29A48); |
|||
static_assert(offsetof(SystemSettings, touch_screen_mode) == 0x29A68); |
|||
static_assert(offsetof(SystemSettings, edid) == 0x29AA0); |
|||
static_assert(offsetof(SystemSettings, data_deletion_settings) == 0x29E80); |
|||
static_assert(offsetof(SystemSettings, requires_run_repair_time_reviser) == 0x29ED4); |
|||
static_assert(offsetof(SystemSettings, device_time_zone_location_name) == 0x29F40); |
|||
static_assert(offsetof(SystemSettings, nfc_enable_flag) == 0x2A0C0); |
|||
static_assert(offsetof(SystemSettings, eula_version_count) == 0x2A140); |
|||
static_assert(offsetof(SystemSettings, device_nick_name) == 0x2A950); |
|||
static_assert(offsetof(SystemSettings, bluetooth_device_settings_last_14) == 0x2AAA0); |
|||
static_assert(offsetof(SystemSettings, nx_controller_settings_data_from_offset_30) == 0x2E6A0); |
|||
|
|||
static_assert(sizeof(SystemSettings) == 0x336A0, "SystemSettings has the wrong size!"); |
|||
|
|||
SystemSettings DefaultSystemSettings(); |
|||
|
|||
} // namespace Service::Set |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue