mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@657 385bec56-5757-e545-9c3a-d8741f4650f1
416 lines
19 KiB
C++
416 lines
19 KiB
C++
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: CfgChanger.cpp
|
|
|
|
Copyright 2009-2011 Nintendo. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Rev$
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#include "CfgChanger.h"
|
|
#include <nn/cfg.h>
|
|
#include <nn/cfg/CTR/cfg_ApiSys.h>
|
|
#include <nn/cfg/CTR/detail/cfg_Keys.h>
|
|
#include <nn/cfg/CTR/detail/cfg_DataStructures.h>
|
|
#include <nn/cfg/CTR/cfg_NtrSettings.h>
|
|
#include <nn/cfg/CTR/cfg_ApiNor.h>
|
|
#include <nn/ac/CTR/private/ac_InternalApi.h>
|
|
#include <nn/ac/CTR/private/ac_NetworkSetting.h>
|
|
#include "VersionDetect.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
struct SaveData
|
|
{
|
|
|
|
// NANDデータ
|
|
s64 m_RtcUserTimeOffsetCfgData;
|
|
s64 m_RtcSystemTimeOffsetCfgData;
|
|
nn::cfg::CTR::detail::BackLightCfgData m_BackLight;
|
|
nn::cfg::CTR::detail::SoundSettingCfgData m_SoundSetting;
|
|
NN_PADDING1;
|
|
|
|
// インターネット接続設定
|
|
nn::ac::CTR::NetworkSetting m_NetworkSetting[3];
|
|
|
|
nn::cfg::CTR::detail::UserNameCfgData m_UserName;
|
|
nn::cfg::CTR::detail::BirthdayCfgData m_Birthday;
|
|
nn::cfg::CTR::detail::LanguageCfgData m_Language;
|
|
NN_PADDING1;
|
|
|
|
nn::cfg::CTR::detail::SimpleAddressIdCfgData m_SimpleAddressId;
|
|
nn::cfg::CTR::detail::SimpleAddressCountryNameCfgData m_SimpleAddressCountryName;
|
|
nn::cfg::CTR::detail::SimpleAddressRegionNameCfgData m_SimpleAddressRegionName;
|
|
nn::cfg::CTR::detail::SimpleAddressPositionCfgData m_SimpleAddressPos;
|
|
nn::cfg::CTR::detail::ParentalControlInfoCfgData m_ParentalControl;
|
|
nn::cfg::CTR::detail::CoppacsCfgData m_CoppacsCfgData;
|
|
nn::cfg::CTR::detail::EulaInfoCfgData m_EulaInfo;
|
|
nn::cfg::CTR::detail::BossSettingCfgData m_BossSetting;
|
|
NN_PADDING3;
|
|
NN_PADDING4;
|
|
nn::cfg::CTR::detail::SystemInfoCfgData m_SystemInfo;
|
|
nn::cfg::CTR::detail::PseudoRomIdCfgData m_PseudoRomId;
|
|
nn::cfg::CTR::detail::HomeButtonSettingCfgData m_HomeButtonSetting;
|
|
NN_PADDING3;
|
|
|
|
// TWL 本体設定
|
|
nn::cfg::CTR::detail::TwlEulaInfoCfgData m_TwlEulaInfo;
|
|
NN_PADDING2;
|
|
nn::cfg::CTR::detail::TwlParentalControlInfoCfgData m_ParentalCtrlInfo;
|
|
nn::cfg::CTR::detail::TwlCountryCodeCfgData m_TwlCountryCode;
|
|
NN_PADDING3;
|
|
|
|
nn::cfg::CTR::detail::FirstLaunchInfoCfgData m_FirstLaunchInfoCfgData;
|
|
NN_PADDING4;
|
|
nn::cfg::CTR::detail::MenuInfoCfgData m_MenuInfoCfgData;
|
|
nn::cfg::CTR::detail::DebugParamCfgData m_DebugParam;
|
|
|
|
// NOR
|
|
// NTR 本体設定
|
|
nn::cfg::CTR::NtrSettingData m_NtrSettingData;
|
|
nn::cfg::CTR::NtrSettingDataEx m_NtrSettingDataEx;
|
|
NN_PADDING2;
|
|
|
|
// 時間
|
|
nn::fnd::DateTime m_DateTime;
|
|
|
|
// バージョン情報
|
|
VerDef m_Version;
|
|
};
|
|
|
|
SaveData s_SaveData;
|
|
|
|
}
|
|
|
|
CfgChanger::CfgChanger()
|
|
{
|
|
// TODO 自動生成されたコンストラクター・スタブ
|
|
|
|
}
|
|
|
|
CfgChanger::~CfgChanger()
|
|
{
|
|
// TODO Auto-generated destructor stub
|
|
}
|
|
|
|
nn::Result CfgChanger::RestoreFromBackup()
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::MountSaveData("data:")
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
CheckBackupFormat()
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
RestoreCfgDataFromBackup()
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::Unmount("data:")
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::CheckBackupFormat()
|
|
{
|
|
size_t maxFiles;
|
|
size_t maxDirectories;
|
|
bool isDuplicateAll;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::GetSaveDataFormatInfo(&maxFiles, &maxDirectories, &isDuplicateAll)
|
|
);
|
|
|
|
NN_LOG("%d, %d, %d\n", maxFiles, maxDirectories, isDuplicateAll);
|
|
|
|
if(maxFiles != FILE_NUM ||
|
|
maxDirectories != DIR_NUM ||
|
|
isDuplicateAll != DUPLICATE
|
|
)
|
|
{
|
|
return nn::MakePermanentResult(nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_APPLICATION,
|
|
nn::Result::DESCRIPTION_INVALID_RESULT_VALUE);
|
|
}
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::ImportToBackup()
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetCfgData()
|
|
);
|
|
|
|
// バックアップメモリをフォーマットします
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::FormatSaveData(FILE_NUM, DIR_NUM, DUPLICATE)
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
ImportCfgDatatoBackup()
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::GetCfgData()
|
|
{
|
|
using namespace nn::cfg::CTR::detail;
|
|
nn::Result result;
|
|
|
|
nn::cfg::CTR::system::Initialize();
|
|
|
|
s_SaveData.m_DateTime = nn::fnd::DateTime::GetNow();
|
|
|
|
// cfg の情報取得
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_RtcUserTimeOffsetCfgData, sizeof(s_SaveData.m_RtcUserTimeOffsetCfgData), GET_CFG_KEY(NN_CFG_RTC, NN_CFG_RTC_USERTIME_OFFSET));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_RtcSystemTimeOffsetCfgData, sizeof(s_SaveData.m_RtcSystemTimeOffsetCfgData), GET_CFG_KEY(NN_CFG_RTC, NN_CFG_RTC_SYSTEMTIME_OFFSET));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_BackLight, sizeof(s_SaveData.m_BackLight), GET_CFG_KEY(NN_CFG_LCD, NN_CFG_LCD_BACKLIGHT));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SoundSetting, sizeof(s_SaveData.m_SoundSetting), GET_CFG_KEY(NN_CFG_SOUND, NN_CFG_SOUND_SETTING));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
// インターネット接続設定取得
|
|
result = nn::ac::CTR::InitializeInternal();
|
|
if (result.IsSuccess())
|
|
{
|
|
for(s32 i = 0; i < 3; i++)
|
|
{
|
|
result = nn::ac::CTR::LoadNetworkSetting(i, s_SaveData.m_NetworkSetting[i]);
|
|
if(result.IsFailure())
|
|
{
|
|
std::memset(&s_SaveData.m_NetworkSetting[i], 0 , sizeof(s_SaveData.m_NetworkSetting[i]));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
std::memset(s_SaveData.m_NetworkSetting, 0, sizeof(s_SaveData.m_NetworkSetting));
|
|
}
|
|
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_UserName, sizeof(s_SaveData.m_UserName), GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_USER_NAME));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_Birthday, sizeof(s_SaveData.m_Birthday), GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_BIRTHDAY));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_Language, sizeof(s_SaveData.m_Language), GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_LANGUAGE));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SimpleAddressId, sizeof(s_SaveData.m_SimpleAddressId), GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_ID));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SimpleAddressCountryName, sizeof(s_SaveData.m_SimpleAddressCountryName), GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_COUNTRY_NAME));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SimpleAddressRegionName, sizeof(s_SaveData.m_SimpleAddressRegionName), GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_REGION_NAME));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SimpleAddressPos, sizeof(s_SaveData.m_SimpleAddressPos), GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_POSITION));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_ParentalControl, sizeof(s_SaveData.m_ParentalControl), GET_CFG_KEY(NN_CFG_PARENTAL_CONTROL, NN_CFG_PARENTAL_CONTROL_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_CoppacsCfgData, sizeof(s_SaveData.m_CoppacsCfgData), GET_CFG_KEY(NN_CFG_PARENTAL_CONTROL, NN_CFG_PARENTAL_CONTROL_COPPACS));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_EulaInfo, sizeof(s_SaveData.m_EulaInfo), GET_CFG_KEY(NN_CFG_EULA, NN_CFG_EULA_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_BossSetting, sizeof(s_SaveData.m_BossSetting), GET_CFG_KEY(NN_CFG_BOSS, NN_CFG_BOSS_SETTING));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_SystemInfo, sizeof(s_SaveData.m_SystemInfo), GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_PseudoRomId, sizeof(s_SaveData.m_PseudoRomId), GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_PSEUDO_ROM_ID));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_HomeButtonSetting, sizeof(s_SaveData.m_HomeButtonSetting), GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_HOME_BUTTON));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
// Twl 設定
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_TwlEulaInfo, sizeof(s_SaveData.m_TwlEulaInfo), GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_EULA_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_ParentalCtrlInfo, sizeof(s_SaveData.m_ParentalCtrlInfo), GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_PARENTAL_CONTROL_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_TwlCountryCode, sizeof(s_SaveData.m_TwlCountryCode), GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_COUNTRY_CODE));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_FirstLaunchInfoCfgData, sizeof(s_SaveData.m_FirstLaunchInfoCfgData), GET_CFG_KEY(NN_CFG_MENU, NN_CFG_MENU_FIRST_LAUNCH));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_MenuInfoCfgData, sizeof(s_SaveData.m_MenuInfoCfgData), GET_CFG_KEY(NN_CFG_MENU, NN_CFG_MENU_MENU_INFO));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::GetConfig(&s_SaveData.m_DebugParam, sizeof(s_SaveData.m_DebugParam), GET_CFG_KEY(NN_CFG_DBG, NN_CFG_DBG_PARAM));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
nn::cfg::CTR::system::Finalize();
|
|
|
|
// NTR 設定 (NOR)
|
|
nn::cfg::nor::CTR::Initialize();
|
|
result = nn::cfg::nor::CTR::GetNtrSetting(&s_SaveData.m_NtrSettingData, &s_SaveData.m_NtrSettingDataEx);
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
nn::cfg::nor::CTR::Finalize();
|
|
|
|
// バージョン情報
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetSystemVersion(&s_SaveData.m_Version, nn::cfg::CTR::GetRegion())
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::ImportCfgDatatoBackup()
|
|
{
|
|
nn::Result result;
|
|
|
|
result = nn::fs::MountSaveData("data:");
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
nn::fs::FileOutputStream file;
|
|
result = file.TryInitialize(L"data:/savedata.bin", true);
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
s32 writeSize;
|
|
result = file.TryWrite(&writeSize, &s_SaveData, sizeof(s_SaveData), true);
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
result = nn::fs::CommitSaveData("data:");
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
result = nn::fs::Unmount("data:");
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::RestoreCfgDataFromBackup()
|
|
{
|
|
using namespace nn::cfg::CTR::detail;
|
|
nn::Result result;
|
|
|
|
nn::fs::FileInputStream file;
|
|
result = file.TryInitialize(L"data:/savedata.bin");
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
s32 readSize;
|
|
result = file.TryRead(&readSize, &s_SaveData, sizeof(s_SaveData));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
|
|
nn::cfg::CTR::system::Initialize();
|
|
|
|
// バージョン確認
|
|
VerDef currentVersion;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetSystemVersion(¤tVersion, nn::cfg::CTR::GetRegion())
|
|
);
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
CheckSystemVersion(¤tVersion, &s_SaveData.m_Version)
|
|
);
|
|
|
|
nn::fnd::DateTime now = nn::fnd::DateTime::GetNow();
|
|
s64 usertimeOffset;
|
|
result = nn::cfg::CTR::system::GetConfig(&usertimeOffset, sizeof(usertimeOffset), GET_CFG_KEY(NN_CFG_RTC, NN_CFG_RTC_USERTIME_OFFSET));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
usertimeOffset += (s_SaveData.m_DateTime - now).GetNanoSeconds();
|
|
|
|
// cfg の情報設定
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_RTC, NN_CFG_RTC_USERTIME_OFFSET), &usertimeOffset, sizeof(usertimeOffset));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_RTC, NN_CFG_RTC_SYSTEMTIME_OFFSET), &s_SaveData.m_RtcSystemTimeOffsetCfgData, sizeof(s_SaveData.m_RtcSystemTimeOffsetCfgData));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_LCD, NN_CFG_LCD_BACKLIGHT), &s_SaveData.m_BackLight, sizeof(s_SaveData.m_BackLight));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SOUND, NN_CFG_SOUND_SETTING), &s_SaveData.m_SoundSetting, sizeof(s_SaveData.m_SoundSetting));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
// インターネット接続設定
|
|
result = nn::ac::CTR::InitializeInternal();
|
|
if (result.IsSuccess())
|
|
{
|
|
for(s32 i = 0; i < 3; i++)
|
|
{
|
|
result = nn::ac::CTR::UpdateNetworkSetting(i, s_SaveData.m_NetworkSetting[i]);
|
|
if(result.IsFailure())
|
|
{
|
|
std::memset(&s_SaveData.m_NetworkSetting[i], 0 , sizeof(s_SaveData.m_NetworkSetting[i]));
|
|
}
|
|
}
|
|
result = nn::ac::CTR::FlushNetworkSetting();
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
}
|
|
else
|
|
{
|
|
std::memset(s_SaveData.m_NetworkSetting, 0, sizeof(s_SaveData.m_NetworkSetting));
|
|
}
|
|
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_USER_NAME), &s_SaveData.m_UserName, sizeof(s_SaveData.m_UserName));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_BIRTHDAY), &s_SaveData.m_Birthday, sizeof(s_SaveData.m_Birthday));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_USER_INFO, NN_CFG_USER_INFO_LANGUAGE), &s_SaveData.m_Language, sizeof(s_SaveData.m_Language));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_ID), &s_SaveData.m_SimpleAddressId, sizeof(s_SaveData.m_SimpleAddressId));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_COUNTRY_NAME), &s_SaveData.m_SimpleAddressCountryName, sizeof(s_SaveData.m_SimpleAddressCountryName));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_REGION_NAME), &s_SaveData.m_SimpleAddressRegionName, sizeof(s_SaveData.m_SimpleAddressRegionName));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_POSITION), &s_SaveData.m_SimpleAddressPos, sizeof(s_SaveData.m_SimpleAddressPos));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_PARENTAL_CONTROL, NN_CFG_PARENTAL_CONTROL_INFO), &s_SaveData.m_ParentalControl, sizeof(s_SaveData.m_ParentalControl));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_PARENTAL_CONTROL, NN_CFG_PARENTAL_CONTROL_COPPACS), &s_SaveData.m_CoppacsCfgData, sizeof(s_SaveData.m_CoppacsCfgData));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_EULA, NN_CFG_EULA_INFO), &s_SaveData.m_EulaInfo, sizeof(s_SaveData.m_EulaInfo));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_BOSS, NN_CFG_BOSS_SETTING), &s_SaveData.m_BossSetting, sizeof(s_SaveData.m_BossSetting));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_INFO), &s_SaveData.m_SystemInfo, sizeof(s_SaveData.m_SystemInfo));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_PSEUDO_ROM_ID), &s_SaveData.m_PseudoRomId, sizeof(s_SaveData.m_PseudoRomId));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SYSTEM, NN_CFG_SYSTEM_HOME_BUTTON), &s_SaveData.m_HomeButtonSetting, sizeof(s_SaveData.m_HomeButtonSetting));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
// Twl 設定
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_EULA_INFO), &s_SaveData.m_TwlEulaInfo, sizeof(s_SaveData.m_TwlEulaInfo));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_PARENTAL_CONTROL_INFO), &s_SaveData.m_ParentalCtrlInfo, sizeof(s_SaveData.m_ParentalCtrlInfo));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_COUNTRY_CODE), &s_SaveData.m_TwlCountryCode, sizeof(s_SaveData.m_TwlCountryCode));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_MENU, NN_CFG_MENU_FIRST_LAUNCH), &s_SaveData.m_FirstLaunchInfoCfgData, sizeof(s_SaveData.m_FirstLaunchInfoCfgData));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_MENU, NN_CFG_MENU_MENU_INFO), &s_SaveData.m_MenuInfoCfgData, sizeof(s_SaveData.m_MenuInfoCfgData));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
result = nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_DBG, NN_CFG_DBG_PARAM), &s_SaveData.m_DebugParam, sizeof(s_SaveData.m_DebugParam));
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
|
|
nn::cfg::CTR::system::Finalize();
|
|
|
|
// NTR 設定 (NOR)
|
|
nn::cfg::nor::CTR::Initialize();
|
|
result = nn::cfg::nor::CTR::SetNtrSetting(&s_SaveData.m_NtrSettingData, &s_SaveData.m_NtrSettingDataEx);
|
|
NN_UTIL_RETURN_IF_FAILED(result);
|
|
nn::cfg::nor::CTR::Finalize();
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result CfgChanger::CheckSystemVersion(VerDef* currentVersion, VerDef* savedVersion)
|
|
{
|
|
if(currentVersion->cup.majorVersion == savedVersion->cup.majorVersion &&
|
|
currentVersion->cup.minorVersion == savedVersion->cup.minorVersion &&
|
|
currentVersion->cup.microVersion == savedVersion->cup.microVersion &&
|
|
currentVersion->nup.majorVersion == savedVersion->nup.majorVersion)
|
|
{
|
|
return nn::ResultSuccess();
|
|
}
|
|
else
|
|
{
|
|
nn::MakePermanentResult(nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_APPLICATION, nn::Result::DESCRIPTION_OUT_OF_RANGE);
|
|
}
|
|
}
|