mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	hle/service/cfg: Add Config block enums documented by 3dbrew... (#6206)
This commit is contained in:
		
							parent
							
								
									84eada8c50
								
							
						
					
					
						commit
						06a9f69d88
					
				
					 1 changed files with 83 additions and 11 deletions
				
			
		|  | @ -61,8 +61,34 @@ static_assert(sizeof(SaveFileConfig) == 0x455C, | |||
|               "SaveFileConfig header must be exactly 0x455C bytes"); | ||||
| 
 | ||||
| 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, | ||||
|     _3dSwitchingDelayBlockID = 0x00050006, | ||||
|     Unknown_0x00050007 = 0x00050007, | ||||
|     PowerSavingModeExtraConfigBlockID = 0x00050008, | ||||
|     BacklightControlNew3dsBlockID = 0x00050009, | ||||
|     Unknown_0x00060000 = 0x00060000, | ||||
|     _3dFiltersBlockID = 0x00070000, | ||||
|     SoundOutputModeBlockID = 0x00070001, | ||||
|     MicrophoneEchoCancellationBlockID = 0x00070002, | ||||
|     WifiConfigurationSlot0BlockID = 0x00080000, | ||||
|     WifiConfigurationSlot1BlockID = 0x00080001, | ||||
|     WifiConfigurationSlot2BlockID = 0x00080002, | ||||
|     ConsoleUniqueID1BlockID = 0x00090000, | ||||
|     ConsoleUniqueID2BlockID = 0x00090001, | ||||
|     ConsoleUniqueID3BlockID = 0x00090002, | ||||
|  | @ -72,9 +98,34 @@ enum ConfigBlockID { | |||
|     CountryInfoBlockID = 0x000B0000, | ||||
|     CountryNameBlockID = 0x000B0001, | ||||
|     StateNameBlockID = 0x000B0002, | ||||
|     LatitudeLongitudeBlockID = 0x000B0003, | ||||
|     RestrictedPhotoExchangeBlockID = 0x000C0000, | ||||
|     CoppacsRestrictionBlockID = 0x000C0001, | ||||
|     ParentalRestrictionEmailBlockID = 0x000C0002, | ||||
|     EULAVersionBlockID = 0x000D0000, | ||||
|     Unknown_0x000E0000 = 0x000E0000, | ||||
|     DebugConfigurationBlockID = 0x000F0000, | ||||
|     Unknown_0x000F0001 = 0x000F0001, | ||||
|     Unknown_0x000F0003 = 0x000F0003, | ||||
|     ConsoleModelBlockID = 0x000F0004, | ||||
|     NetworkUpdatesEnabledBlockID = 0x000F0005, | ||||
|     XDeviceTokenBlockID = 0x000F0006, | ||||
|     TwlEulaInfoBlockID = 0x00100000, | ||||
|     TwlParentalRestrictionsBlockID = 0x00100001, | ||||
|     TwlCountryCodeBlockID = 0x00100002, | ||||
|     TwlMovableUniqueBlockIDBlockID = 0x00100003, | ||||
|     SystemSetupRequiredBlockID = 0x00110000, | ||||
|     LaunchMenuBlockID = 0x00110001, | ||||
|     VolumeSliderBoundsBlockID = 0x00120000, | ||||
|     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 { | ||||
|  | @ -452,8 +503,8 @@ ResultCode Module::FormatConfig() { | |||
|     // Insert the default blocks
 | ||||
|     u8 zero_buffer[0xC0] = {}; | ||||
| 
 | ||||
|     // 0x00030001 - Unknown
 | ||||
|     res = CreateConfigInfoBlk(0x00030001, 0x8, 0xE, zero_buffer); | ||||
|     // 0x00030001 - User time offset (Read by CECD): displayed timestamp - RTC timestamp
 | ||||
|     res = CreateConfigInfoBlk(UserTimeOffsetBlockID, 0x8, 0xE, zero_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|  | @ -511,24 +562,27 @@ ResultCode Module::FormatConfig() { | |||
|                               country_name_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|     // 0x000B0002 - Localized names for the profile State/Province
 | ||||
|     res = CreateConfigInfoBlk(StateNameBlockID, sizeof(country_name_buffer), 0xE, | ||||
|                               country_name_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|     // 0x000B0003 - Unknown, related to country/address (zip code?)
 | ||||
|     res = CreateConfigInfoBlk(0x000B0003, 0x4, 0xE, zero_buffer); | ||||
|     // 0x000B0003 - Coordinates. A pair of s16 represents latitude and longitude, respectively. One
 | ||||
|     // need to multiply both value by 180/32768 to get coordinates in degrees
 | ||||
|     res = CreateConfigInfoBlk(LatitudeLongitudeBlockID, 0x4, 0xE, zero_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|     // 0x000C0000 - Unknown
 | ||||
|     res = CreateConfigInfoBlk(0x000C0000, 0xC0, 0xE, zero_buffer); | ||||
|     // 0x000C0000 - Restricted photo exchange data, and other info (includes a mirror of Parental
 | ||||
|     // Restrictions PIN/Secret Answer)
 | ||||
|     res = CreateConfigInfoBlk(RestrictedPhotoExchangeBlockID, 0xC0, 0xE, zero_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|     // 0x000C0001 - Unknown
 | ||||
|     res = CreateConfigInfoBlk(0x000C0001, 0x14, 0xE, zero_buffer); | ||||
|     // 0x000C0001 - COPPACS restriction data
 | ||||
|     res = CreateConfigInfoBlk(CoppacsRestrictionBlockID, 0x14, 0xE, zero_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|  | @ -543,13 +597,31 @@ ResultCode Module::FormatConfig() { | |||
|     if (!res.IsSuccess()) | ||||
|         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)
 | ||||
|     res = CreateConfigInfoBlk(DebugModeBlockID, 0x4, 0xE, zero_buffer); | ||||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
| 
 | ||||
|     // 0x00170000 - Unknown
 | ||||
|     res = CreateConfigInfoBlk(0x00170000, 0x4, 0xE, zero_buffer); | ||||
|     // 0x00160000 - Unknown, first byte is used by config service-cmd 0x00070040.
 | ||||
|     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()) | ||||
|         return res; | ||||
| 
 | ||||
|  | @ -558,7 +630,7 @@ ResultCode Module::FormatConfig() { | |||
|     if (!res.IsSuccess()) | ||||
|         return res; | ||||
|     return RESULT_SUCCESS; | ||||
| } // namespace Service::CFG
 | ||||
| } | ||||
| 
 | ||||
| ResultCode Module::LoadConfigNANDSaveFile() { | ||||
|     const std::string& nand_directory = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue