221 lines
6.1 KiB
C
221 lines
6.1 KiB
C
/**
|
|
* @file cfgu.h
|
|
* @brief CFGU (Configuration) Service
|
|
*/
|
|
#pragma once
|
|
#include <3ds/types.h>
|
|
|
|
/// Configuration region values.
|
|
typedef enum
|
|
{
|
|
CFG_REGION_JPN = 0, ///< Japan
|
|
CFG_REGION_USA = 1, ///< USA
|
|
CFG_REGION_EUR = 2, ///< Europe
|
|
CFG_REGION_AUS = 3, ///< Australia
|
|
CFG_REGION_CHN = 4, ///< China
|
|
CFG_REGION_KOR = 5, ///< Korea
|
|
CFG_REGION_TWN = 6, ///< Taiwan
|
|
} CFG_Region;
|
|
|
|
/// Configuration language values.
|
|
typedef enum
|
|
{
|
|
CFG_LANGUAGE_JP = 0, ///< Japanese
|
|
CFG_LANGUAGE_EN = 1, ///< English
|
|
CFG_LANGUAGE_FR = 2, ///< French
|
|
CFG_LANGUAGE_DE = 3, ///< German
|
|
CFG_LANGUAGE_IT = 4, ///< Italian
|
|
CFG_LANGUAGE_ES = 5, ///< Spanish
|
|
CFG_LANGUAGE_ZH = 6, ///< Simplified Chinese
|
|
CFG_LANGUAGE_KO = 7, ///< Korean
|
|
CFG_LANGUAGE_NL = 8, ///< Dutch
|
|
CFG_LANGUAGE_PT = 9, ///< Portugese
|
|
CFG_LANGUAGE_RU = 10, ///< Russian
|
|
CFG_LANGUAGE_TW = 11, ///< Traditional Chinese
|
|
} CFG_Language;
|
|
|
|
// Configuration system model values.
|
|
typedef enum
|
|
{
|
|
CFG_MODEL_3DS = 0, ///< Old 3DS (CTR)
|
|
CFG_MODEL_3DSXL = 1, ///< Old 3DS XL (SPR)
|
|
CFG_MODEL_N3DS = 2, ///< New 3DS (KTR)
|
|
CFG_MODEL_2DS = 3, ///< Old 2DS (FTR)
|
|
CFG_MODEL_N3DSXL = 4, ///< New 3DS XL (RED)
|
|
CFG_MODEL_N2DSXL = 5, ///< New 2DS XL (JAN)
|
|
} CFG_SystemModel;
|
|
|
|
/// Initializes CFGU.
|
|
Result cfguInit(void);
|
|
|
|
/// Exits CFGU.
|
|
void cfguExit(void);
|
|
|
|
/**
|
|
* @brief Gets the system's region from secure info.
|
|
* @param region Pointer to output the region to. (see @ref CFG_Region)
|
|
*/
|
|
Result CFGU_SecureInfoGetRegion(u8* region);
|
|
|
|
/**
|
|
* @brief Generates a console-unique hash.
|
|
* @param appIDSalt Salt to use.
|
|
* @param hash Pointer to output the hash to.
|
|
*/
|
|
Result CFGU_GenHashConsoleUnique(u32 appIDSalt, u64* hash);
|
|
|
|
/**
|
|
* @brief Gets whether the system's region is Canada or USA.
|
|
* @param value Pointer to output the result to. (0 = no, 1 = yes)
|
|
*/
|
|
Result CFGU_GetRegionCanadaUSA(u8* value);
|
|
|
|
/**
|
|
* @brief Gets the system's model.
|
|
* @param model Pointer to output the model to. (see @ref CFG_SystemModel)
|
|
*/
|
|
Result CFGU_GetSystemModel(u8* model);
|
|
|
|
/**
|
|
* @brief Gets whether the system is a 2DS.
|
|
* @param value Pointer to output the result to. (0 = yes, 1 = no)
|
|
*/
|
|
Result CFGU_GetModelNintendo2DS(u8* value);
|
|
|
|
/**
|
|
* @brief Gets a string representing a country code.
|
|
* @param code Country code to use.
|
|
* @param string Pointer to output the string to.
|
|
*/
|
|
Result CFGU_GetCountryCodeString(u16 code, u16* string);
|
|
|
|
/**
|
|
* @brief Gets a country code ID from its string.
|
|
* @param string String to use.
|
|
* @param code Pointer to output the country code to.
|
|
*/
|
|
Result CFGU_GetCountryCodeID(u16 string, u16* code);
|
|
|
|
/**
|
|
* @brief Checks if NFC (code name: fangate) is supported.
|
|
* @param isSupported pointer to the output the result to.
|
|
*/
|
|
Result CFGU_IsNFCSupported(bool* isSupported);
|
|
|
|
/**
|
|
* @brief Gets a config info block with flags = 2.
|
|
* @param size Size of the data to retrieve.
|
|
* @param blkID ID of the block to retrieve.
|
|
* @param outData Pointer to write the block data to.
|
|
*/
|
|
Result CFGU_GetConfigInfoBlk2(u32 size, u32 blkID, void* outData);
|
|
|
|
/**
|
|
* @brief Gets a config info block with flags = 4.
|
|
* @param size Size of the data to retrieve.
|
|
* @param blkID ID of the block to retrieve.
|
|
* @param outData Pointer to write the block data to.
|
|
*/
|
|
Result CFG_GetConfigInfoBlk4(u32 size, u32 blkID, void* outData);
|
|
|
|
/**
|
|
* @brief Gets a config info block with flags = 8.
|
|
* @param size Size of the data to retrieve.
|
|
* @param blkID ID of the block to retrieve.
|
|
* @param outData Pointer to write the block data to.
|
|
*/
|
|
Result CFG_GetConfigInfoBlk8(u32 size, u32 blkID, void* outData);
|
|
|
|
/**
|
|
* @brief Sets a config info block with flags = 4.
|
|
* @param size Size of the data to retrieve.
|
|
* @param blkID ID of the block to retrieve.
|
|
* @param inData Pointer to block data to write.
|
|
*/
|
|
Result CFG_SetConfigInfoBlk4(u32 size, u32 blkID, const void* inData);
|
|
|
|
/**
|
|
* @brief Sets a config info block with flags = 8.
|
|
* @param size Size of the data to retrieve.
|
|
* @param blkID ID of the block to retrieve.
|
|
* @param inData Pointer to block data to write.
|
|
*/
|
|
Result CFG_SetConfigInfoBlk8(u32 size, u32 blkID, const void* inData);
|
|
|
|
|
|
/**
|
|
* @brief Writes the CFG buffer in memory to the savegame in NAND.
|
|
*/
|
|
Result CFG_UpdateConfigSavegame(void);
|
|
|
|
/**
|
|
* @brief Gets the system's language.
|
|
* @param language Pointer to write the language to. (see @ref CFG_Language)
|
|
*/
|
|
Result CFGU_GetSystemLanguage(u8* language);
|
|
|
|
/**
|
|
* @brief Deletes the NAND LocalFriendCodeSeed file, then recreates it using the LocalFriendCodeSeed data stored in memory.
|
|
*/
|
|
Result CFGI_RestoreLocalFriendCodeSeed(void);
|
|
|
|
/**
|
|
* @brief Deletes the NAND SecureInfo file, then recreates it using the SecureInfo data stored in memory.
|
|
*/
|
|
Result CFGI_RestoreSecureInfo(void);
|
|
|
|
/**
|
|
* @brief Deletes the "config" file stored in the NAND Config_Savegame.
|
|
*/
|
|
Result CFGI_DeleteConfigSavefile(void);
|
|
|
|
/**
|
|
* @brief Formats Config_Savegame.
|
|
*/
|
|
Result CFGI_FormatConfig(void);
|
|
|
|
/**
|
|
* @brief Clears parental controls
|
|
*/
|
|
Result CFGI_ClearParentalControls(void);
|
|
|
|
/**
|
|
* @brief Verifies the RSA signature for the LocalFriendCodeSeed data already stored in memory.
|
|
*/
|
|
Result CFGI_VerifySigLocalFriendCodeSeed(void);
|
|
|
|
/**
|
|
* @brief Verifies the RSA signature for the SecureInfo data already stored in memory.
|
|
*/
|
|
Result CFGI_VerifySigSecureInfo(void);
|
|
|
|
/**
|
|
* @brief Gets the system's serial number.
|
|
* @param serial Pointer to output the serial to. (This is normally 0xF)
|
|
*/
|
|
Result CFGI_SecureInfoGetSerialNumber(u8 *serial);
|
|
|
|
/**
|
|
* @brief Gets the 0x110-byte buffer containing the data for the LocalFriendCodeSeed.
|
|
* @param data Pointer to output the buffer. (The size must be at least 0x110-bytes)
|
|
*/
|
|
Result CFGI_GetLocalFriendCodeSeedData(u8 *data);
|
|
|
|
/**
|
|
* @brief Gets the 64-bit local friend code seed.
|
|
* @param seed Pointer to write the friend code seed to.
|
|
*/
|
|
Result CFGI_GetLocalFriendCodeSeed(u64* seed);
|
|
|
|
/**
|
|
* @brief Gets the 0x11-byte data following the SecureInfo signature.
|
|
* @param data Pointer to output the buffer. (The size must be at least 0x11-bytes)
|
|
*/
|
|
Result CFGI_GetSecureInfoData(u8 *data);
|
|
|
|
/**
|
|
* @brief Gets the 0x100-byte RSA-2048 SecureInfo signature.
|
|
* @param data Pointer to output the buffer. (The size must be at least 0x100-bytes)
|
|
*/
|
|
Result CFGI_GetSecureInfoSignature(u8 *data);
|