mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Service::CFG/FS: add and refactor out utilities for front-end
This commit is contained in:
		
							parent
							
								
									457b6413e6
								
							
						
					
					
						commit
						ab2eef396a
					
				
					 4 changed files with 146 additions and 15 deletions
				
			
		|  | @ -449,11 +449,7 @@ ResultCode FormatConfig() { | |||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| void Init() { | ||||
|     AddService(new CFG_I_Interface); | ||||
|     AddService(new CFG_S_Interface); | ||||
|     AddService(new CFG_U_Interface); | ||||
| 
 | ||||
| ResultCode LoadConfigNANDSaveFile() { | ||||
|     // Open the SystemSaveData archive 0x00010017
 | ||||
|     FileSys::Path archive_path(cfg_system_savedata_id); | ||||
|     auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::SystemSaveData, archive_path); | ||||
|  | @ -481,14 +477,75 @@ void Init() { | |||
|     if (config_result.Succeeded()) { | ||||
|         auto config = config_result.MoveFrom(); | ||||
|         config->backend->Read(0, CONFIG_SAVEFILE_SIZE, cfg_config_file_buffer.data()); | ||||
|         return; | ||||
|         return RESULT_SUCCESS; | ||||
|     } | ||||
| 
 | ||||
|     FormatConfig(); | ||||
|     return FormatConfig(); | ||||
| } | ||||
| 
 | ||||
| void Init() { | ||||
|     AddService(new CFG_I_Interface); | ||||
|     AddService(new CFG_S_Interface); | ||||
|     AddService(new CFG_U_Interface); | ||||
| 
 | ||||
|     LoadConfigNANDSaveFile(); | ||||
| } | ||||
| 
 | ||||
| void Shutdown() { | ||||
| } | ||||
| 
 | ||||
| void SetUsername(const std::u16string& name) { | ||||
|     ASSERT(name.size() <= 10); | ||||
|     UsernameBlock block{}; | ||||
|     name.copy(block.username, name.size()); | ||||
|     SetConfigInfoBlock(UsernameBlockID, sizeof(block), 4, &block); | ||||
| } | ||||
| 
 | ||||
| std::u16string GetUsername() { | ||||
|     UsernameBlock block; | ||||
|     GetConfigInfoBlock(UsernameBlockID, sizeof(block), 8, &block); | ||||
| 
 | ||||
|     // the username string in the block isn't null-terminated,
 | ||||
|     // so we need to find the end manually.
 | ||||
|     std::u16string username(block.username, ARRAY_SIZE(block.username)); | ||||
|     const size_t pos = username.find(u'\0'); | ||||
|     if (pos != std::u16string::npos) | ||||
|         username.erase(pos); | ||||
|     return username; | ||||
| } | ||||
| 
 | ||||
| void SetBirthday(u8 month, u8 day) { | ||||
|     BirthdayBlock block = { month, day }; | ||||
|     SetConfigInfoBlock(BirthdayBlockID, sizeof(block), 4, &block); | ||||
| } | ||||
| 
 | ||||
| std::tuple<u8, u8> GetBirthday() { | ||||
|     BirthdayBlock block; | ||||
|     GetConfigInfoBlock(BirthdayBlockID, sizeof(block), 8, &block); | ||||
|     return std::make_tuple(block.month, block.day); | ||||
| } | ||||
| 
 | ||||
| void SetSystemLanguage(SystemLanguage language) { | ||||
|     u8 block = language; | ||||
|     SetConfigInfoBlock(LanguageBlockID, sizeof(block), 4, &block); | ||||
| } | ||||
| 
 | ||||
| SystemLanguage GetSystemLanguage() { | ||||
|     u8 block; | ||||
|     GetConfigInfoBlock(LanguageBlockID, sizeof(block), 8, &block); | ||||
|     return static_cast<SystemLanguage>(block); | ||||
| } | ||||
| 
 | ||||
| void SetSoundOutputMode(SoundOutputMode mode) { | ||||
|     u8 block = mode; | ||||
|     SetConfigInfoBlock(SoundOutputModeBlockID, sizeof(block), 4, &block); | ||||
| } | ||||
| 
 | ||||
| SoundOutputMode GetSoundOutputMode() { | ||||
|     u8 block; | ||||
|     GetConfigInfoBlock(SoundOutputModeBlockID, sizeof(block), 8, &block); | ||||
|     return static_cast<SoundOutputMode>(block); | ||||
| } | ||||
| 
 | ||||
| } // namespace CFG
 | ||||
| } // namespace Service
 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <array> | ||||
| #include <string> | ||||
| 
 | ||||
| #include "common/common_types.h" | ||||
| 
 | ||||
|  | @ -271,11 +272,70 @@ ResultCode UpdateConfigNANDSavegame(); | |||
|  */ | ||||
| ResultCode FormatConfig(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Open the config savegame file and load it to the memory buffer | ||||
|  * @returns ResultCode indicating the result of the operation, 0 on success | ||||
|  */ | ||||
| ResultCode LoadConfigNANDSaveFile(); | ||||
| 
 | ||||
| /// Initialize the config service
 | ||||
| void Init(); | ||||
| 
 | ||||
| /// Shutdown the config service
 | ||||
| void Shutdown(); | ||||
| 
 | ||||
| // Utilities for frontend to set config data.
 | ||||
| // Note: before calling these functions, LoadConfigNANDSaveFile should be called,
 | ||||
| // and UpdateConfigNANDSavegame should be called after making changes to config data.
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Sets the username in config savegame. | ||||
|  * @param name the username to set. The maximum size is 10 in char16_t. | ||||
|  */ | ||||
| void SetUsername(const std::u16string& name); | ||||
| 
 | ||||
| /**
 | ||||
|  * Gets the username from config savegame. | ||||
|  * @returns the username | ||||
|  */ | ||||
| std::u16string GetUsername(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Sets the profile birthday in config savegame. | ||||
|  * @param month the month of birthday. | ||||
|  * @param day the day of the birthday. | ||||
|  */ | ||||
| void SetBirthday(u8 month, u8 day); | ||||
| 
 | ||||
| /**
 | ||||
|  * Gets the profile birthday from the config savegame. | ||||
|  * @returns a tuple of (month, day) of birthday | ||||
|  */ | ||||
| std::tuple<u8, u8> GetBirthday(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Sets the system language in config savegame. | ||||
|  * @param language the system language to set. | ||||
|  */ | ||||
| void SetSystemLanguage(SystemLanguage language); | ||||
| 
 | ||||
| /**
 | ||||
|  * Gets the system language from config savegame. | ||||
|  * @returns the system language | ||||
|  */ | ||||
| SystemLanguage GetSystemLanguage(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Sets the sound output mode in config savegame. | ||||
|  * @param mode the sound output mode to set | ||||
|  */ | ||||
| void SetSoundOutputMode(SoundOutputMode mode); | ||||
| 
 | ||||
| /**
 | ||||
|  * Gets the sound output mode from config savegame. | ||||
|  * @returns the sound output mode | ||||
|  */ | ||||
| SoundOutputMode GetSoundOutputMode(); | ||||
| 
 | ||||
| } // namespace CFG
 | ||||
| } // namespace Service
 | ||||
|  |  | |||
|  | @ -255,7 +255,7 @@ using FileSys::ArchiveFactory; | |||
| 
 | ||||
| /**
 | ||||
|  * Map of registered archives, identified by id code. Once an archive is registered here, it is | ||||
|  * never removed until the FS service is shut down. | ||||
|  * never removed until UnregisterArchiveTypes is called. | ||||
|  */ | ||||
| static boost::container::flat_map<ArchiveIdCode, std::unique_ptr<ArchiveFactory>> id_code_map; | ||||
| 
 | ||||
|  | @ -516,12 +516,7 @@ ResultCode CreateSystemSaveData(u32 high, u32 low) { | |||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| /// Initialize archives
 | ||||
| void ArchiveInit() { | ||||
|     next_handle = 1; | ||||
| 
 | ||||
|     AddService(new FS::Interface); | ||||
| 
 | ||||
| void RegisterArchiveTypes() { | ||||
|     // TODO(Subv): Add the other archive types (see here for the known types:
 | ||||
|     // http://3dbrew.org/wiki/FS:OpenArchive#Archive_idcodes).
 | ||||
| 
 | ||||
|  | @ -558,10 +553,23 @@ void ArchiveInit() { | |||
|     RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData); | ||||
| } | ||||
| 
 | ||||
| void UnregisterArchiveTypes() { | ||||
|     id_code_map.clear(); | ||||
| } | ||||
| 
 | ||||
| /// Initialize archives
 | ||||
| void ArchiveInit() { | ||||
|     next_handle = 1; | ||||
| 
 | ||||
|     AddService(new FS::Interface); | ||||
| 
 | ||||
|     RegisterArchiveTypes(); | ||||
| } | ||||
| 
 | ||||
| /// Shutdown archives
 | ||||
| void ArchiveShutdown() { | ||||
|     handle_map.clear(); | ||||
|     id_code_map.clear(); | ||||
|     UnregisterArchiveTypes(); | ||||
| } | ||||
| 
 | ||||
| } // namespace FS
 | ||||
|  |  | |||
|  | @ -235,5 +235,11 @@ void ArchiveInit(); | |||
| /// Shutdown archives
 | ||||
| void ArchiveShutdown(); | ||||
| 
 | ||||
| /// Register all archive types
 | ||||
| void RegisterArchiveTypes(); | ||||
| 
 | ||||
| /// Unregister all archive types
 | ||||
| void UnregisterArchiveTypes(); | ||||
| 
 | ||||
| } // namespace FS
 | ||||
| } // namespace Service
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue