hle/service/cfg: Add Config block enums documented by 3dbrew... (#6206)
This commit is contained in:
parent
84eada8c50
commit
06a9f69d88
|
@ -61,8 +61,34 @@ static_assert(sizeof(SaveFileConfig) == 0x455C,
|
||||||
"SaveFileConfig header must be exactly 0x455C bytes");
|
"SaveFileConfig header must be exactly 0x455C bytes");
|
||||||
|
|
||||||
enum ConfigBlockID {
|
enum ConfigBlockID {
|
||||||
|
ConfigSavegameVersionBlockID = 0x00000000, // Maybe?
|
||||||
|
RtcCompensationBlockID = 0x00010000,
|
||||||
|
AudioCalibrationBlockID = 0x00020000,
|
||||||
|
LeapYearCounterBlockID = 0x00030000,
|
||||||
|
UserTimeOffsetBlockID = 0x00030001,
|
||||||
|
SettingsTimeOffsetBlockID = 0x00030002,
|
||||||
|
TouchCalibrationBlockID = 0x00040000,
|
||||||
|
AnalogStickCalibrationBlockID = 0x00040001, // Maybe?
|
||||||
|
GyroscopeCalibrationBlockID = 0x00040002,
|
||||||
|
AccelerometerCalibrationBlockID = 0x00040003,
|
||||||
|
CStickCalibrationBlockID = 0x00040004,
|
||||||
|
ScreenFlickerCalibrationBlockID = 0x00050000,
|
||||||
|
BacklightControlsBlockID = 0x00050001,
|
||||||
|
BacklightPwmCalibrationBlockID = 0x00050002,
|
||||||
|
PowerSavingModeCalibrationBlockID = 0x00050003,
|
||||||
|
PowerSavingModeCalibrationLegacyBlockID = 0x00050004,
|
||||||
StereoCameraSettingsBlockID = 0x00050005,
|
StereoCameraSettingsBlockID = 0x00050005,
|
||||||
|
_3dSwitchingDelayBlockID = 0x00050006,
|
||||||
|
Unknown_0x00050007 = 0x00050007,
|
||||||
|
PowerSavingModeExtraConfigBlockID = 0x00050008,
|
||||||
|
BacklightControlNew3dsBlockID = 0x00050009,
|
||||||
|
Unknown_0x00060000 = 0x00060000,
|
||||||
|
_3dFiltersBlockID = 0x00070000,
|
||||||
SoundOutputModeBlockID = 0x00070001,
|
SoundOutputModeBlockID = 0x00070001,
|
||||||
|
MicrophoneEchoCancellationBlockID = 0x00070002,
|
||||||
|
WifiConfigurationSlot0BlockID = 0x00080000,
|
||||||
|
WifiConfigurationSlot1BlockID = 0x00080001,
|
||||||
|
WifiConfigurationSlot2BlockID = 0x00080002,
|
||||||
ConsoleUniqueID1BlockID = 0x00090000,
|
ConsoleUniqueID1BlockID = 0x00090000,
|
||||||
ConsoleUniqueID2BlockID = 0x00090001,
|
ConsoleUniqueID2BlockID = 0x00090001,
|
||||||
ConsoleUniqueID3BlockID = 0x00090002,
|
ConsoleUniqueID3BlockID = 0x00090002,
|
||||||
|
@ -72,9 +98,34 @@ enum ConfigBlockID {
|
||||||
CountryInfoBlockID = 0x000B0000,
|
CountryInfoBlockID = 0x000B0000,
|
||||||
CountryNameBlockID = 0x000B0001,
|
CountryNameBlockID = 0x000B0001,
|
||||||
StateNameBlockID = 0x000B0002,
|
StateNameBlockID = 0x000B0002,
|
||||||
|
LatitudeLongitudeBlockID = 0x000B0003,
|
||||||
|
RestrictedPhotoExchangeBlockID = 0x000C0000,
|
||||||
|
CoppacsRestrictionBlockID = 0x000C0001,
|
||||||
|
ParentalRestrictionEmailBlockID = 0x000C0002,
|
||||||
EULAVersionBlockID = 0x000D0000,
|
EULAVersionBlockID = 0x000D0000,
|
||||||
|
Unknown_0x000E0000 = 0x000E0000,
|
||||||
|
DebugConfigurationBlockID = 0x000F0000,
|
||||||
|
Unknown_0x000F0001 = 0x000F0001,
|
||||||
|
Unknown_0x000F0003 = 0x000F0003,
|
||||||
ConsoleModelBlockID = 0x000F0004,
|
ConsoleModelBlockID = 0x000F0004,
|
||||||
|
NetworkUpdatesEnabledBlockID = 0x000F0005,
|
||||||
|
XDeviceTokenBlockID = 0x000F0006,
|
||||||
|
TwlEulaInfoBlockID = 0x00100000,
|
||||||
|
TwlParentalRestrictionsBlockID = 0x00100001,
|
||||||
|
TwlCountryCodeBlockID = 0x00100002,
|
||||||
|
TwlMovableUniqueBlockIDBlockID = 0x00100003,
|
||||||
|
SystemSetupRequiredBlockID = 0x00110000,
|
||||||
|
LaunchMenuBlockID = 0x00110001,
|
||||||
|
VolumeSliderBoundsBlockID = 0x00120000,
|
||||||
DebugModeBlockID = 0x00130000,
|
DebugModeBlockID = 0x00130000,
|
||||||
|
ClockSequenceBlockID = 0x00150000,
|
||||||
|
Unknown_0x00150001 = 0x00150001,
|
||||||
|
NpnsUrlID = 0x00150002, // Maybe? 3dbrew documentation is weirdly written.
|
||||||
|
Unknown_0x00160000 = 0x00160000,
|
||||||
|
MiiverseAccessKeyBlockID = 0x00170000,
|
||||||
|
QtmInfraredLedRelatedBlockID = 0x00180000,
|
||||||
|
QtmCalibrationDataBlockID = 0x00180001,
|
||||||
|
Unknown_0x00190000 = 0x00190000,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UsernameBlock {
|
struct UsernameBlock {
|
||||||
|
@ -452,8 +503,8 @@ ResultCode Module::FormatConfig() {
|
||||||
// Insert the default blocks
|
// Insert the default blocks
|
||||||
u8 zero_buffer[0xC0] = {};
|
u8 zero_buffer[0xC0] = {};
|
||||||
|
|
||||||
// 0x00030001 - Unknown
|
// 0x00030001 - User time offset (Read by CECD): displayed timestamp - RTC timestamp
|
||||||
res = CreateConfigInfoBlk(0x00030001, 0x8, 0xE, zero_buffer);
|
res = CreateConfigInfoBlk(UserTimeOffsetBlockID, 0x8, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
@ -511,24 +562,27 @@ ResultCode Module::FormatConfig() {
|
||||||
country_name_buffer);
|
country_name_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
// 0x000B0002 - Localized names for the profile State/Province
|
// 0x000B0002 - Localized names for the profile State/Province
|
||||||
res = CreateConfigInfoBlk(StateNameBlockID, sizeof(country_name_buffer), 0xE,
|
res = CreateConfigInfoBlk(StateNameBlockID, sizeof(country_name_buffer), 0xE,
|
||||||
country_name_buffer);
|
country_name_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
// 0x000B0003 - Unknown, related to country/address (zip code?)
|
// 0x000B0003 - Coordinates. A pair of s16 represents latitude and longitude, respectively. One
|
||||||
res = CreateConfigInfoBlk(0x000B0003, 0x4, 0xE, zero_buffer);
|
// need to multiply both value by 180/32768 to get coordinates in degrees
|
||||||
|
res = CreateConfigInfoBlk(LatitudeLongitudeBlockID, 0x4, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
// 0x000C0000 - Unknown
|
// 0x000C0000 - Restricted photo exchange data, and other info (includes a mirror of Parental
|
||||||
res = CreateConfigInfoBlk(0x000C0000, 0xC0, 0xE, zero_buffer);
|
// Restrictions PIN/Secret Answer)
|
||||||
|
res = CreateConfigInfoBlk(RestrictedPhotoExchangeBlockID, 0xC0, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
// 0x000C0001 - Unknown
|
// 0x000C0001 - COPPACS restriction data
|
||||||
res = CreateConfigInfoBlk(0x000C0001, 0x14, 0xE, zero_buffer);
|
res = CreateConfigInfoBlk(CoppacsRestrictionBlockID, 0x14, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
@ -543,13 +597,31 @@ ResultCode Module::FormatConfig() {
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
// 0x000F0006 - In NIM, taken as a (hopefully null terminated) string used for the
|
||||||
|
// "X-Device-Token" http header field for NPNS url.
|
||||||
|
res = CreateConfigInfoBlk(XDeviceTokenBlockID, 0x28, 0xC, zero_buffer);
|
||||||
|
if (!res.IsSuccess())
|
||||||
|
return res;
|
||||||
|
|
||||||
|
// 0x00110000 - The low u16 indicates whether the system setup is required, such as when the
|
||||||
|
// system is booted for the first time or after doing a System Format: 0 = setup required,
|
||||||
|
// non-zero = no setup required
|
||||||
|
res = CreateConfigInfoBlk(SystemSetupRequiredBlockID, 0x4, 0xC, zero_buffer);
|
||||||
|
if (!res.IsSuccess())
|
||||||
|
return res;
|
||||||
|
|
||||||
// 0x00130000 - DebugMode (0x100 for debug mode)
|
// 0x00130000 - DebugMode (0x100 for debug mode)
|
||||||
res = CreateConfigInfoBlk(DebugModeBlockID, 0x4, 0xE, zero_buffer);
|
res = CreateConfigInfoBlk(DebugModeBlockID, 0x4, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
// 0x00170000 - Unknown
|
// 0x00160000 - Unknown, first byte is used by config service-cmd 0x00070040.
|
||||||
res = CreateConfigInfoBlk(0x00170000, 0x4, 0xE, zero_buffer);
|
res = CreateConfigInfoBlk(0x00160000, 0x4, 0xE, zero_buffer);
|
||||||
|
if (!res.IsSuccess())
|
||||||
|
return res;
|
||||||
|
|
||||||
|
// 0x00170000 - Miiverse (OLV) access key
|
||||||
|
res = CreateConfigInfoBlk(MiiverseAccessKeyBlockID, 0x4, 0xE, zero_buffer);
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
@ -558,7 +630,7 @@ ResultCode Module::FormatConfig() {
|
||||||
if (!res.IsSuccess())
|
if (!res.IsSuccess())
|
||||||
return res;
|
return res;
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
} // namespace Service::CFG
|
}
|
||||||
|
|
||||||
ResultCode Module::LoadConfigNANDSaveFile() {
|
ResultCode Module::LoadConfigNANDSaveFile() {
|
||||||
const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
|
const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
|
||||||
|
|
Reference in New Issue