From 9a3cfd3e9cccb4e64202cbfdb853506b5a2259ad Mon Sep 17 00:00:00 2001 From: N2614 Date: Mon, 20 Oct 2014 05:41:10 +0000 Subject: [PATCH] =?UTF-8?q?MMEN=E3=81=AE8thNUP=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E3=82=92=E8=A7=A3=E6=B6=88=E3=81=AE=E3=81=9F=E3=82=81MMEN?= =?UTF-8?q?=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=83=96=E3=83=87=E3=83=BC=E3=82=BF=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@823 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleBackup/Controller.cpp | 16 ++- .../ConsoleBackup/MenuSavedataModifier.cpp | 130 ++++++++++++++++++ .../ConsoleBackup/MenuSavedataModifier.h | 44 ++++++ .../ConsoleBackup/MenuSavedataVersion.cpp | 66 +++++++++ .../ConsoleBackup/MenuSavedataVersion.h | 41 ++++++ .../sources/ConsoleBackup/OMakefile | 2 + .../sources/ConsoleBackup/SavedataChecker.h | 2 +- .../googletest/MenuSavedataVersion/OMakefile | 23 ++++ .../testMenuSavedataVersion.cpp | 40 ++++++ 9 files changed, 362 insertions(+), 2 deletions(-) create mode 100644 trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.cpp create mode 100644 trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.h create mode 100644 trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.cpp create mode 100644 trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.h create mode 100644 trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/OMakefile create mode 100644 trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/testMenuSavedataVersion.cpp diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp index 9f2f8fc..0e879be 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Controller.cpp @@ -20,6 +20,7 @@ #include "CommonLogger.h" #include "Checker.h" #include "FileTransfer.h" +#include "MenuSavedataModifier.h" #include @@ -32,6 +33,7 @@ namespace typedef enum BackupState { STARTUP, // 初期値 + MODIFY_MENU_SAVEDATA, // MMENセーブデータの修正 CHECK_SAVEDATA, // セーブデータの確認 EXPORT_TWL_NAND, // TWLセーブデータ領域の吸出し中 EXPORT_TWL_SOUND, // TWLサウンド領域の吸出し中 @@ -183,12 +185,24 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag { s_BackupMode = BACKUP_MODE_DELETE_IF_FAILED; } - s_BackupState = CHECK_SAVEDATA; + s_BackupState = MODIFY_MENU_SAVEDATA; } } break; + case MODIFY_MENU_SAVEDATA: + { + MenuSavedataModifier modifier; + common::VerDef version; + manager.GetVersionData(&version); + + nn::Result result = modifier.Modify(nn::cfg::GetRegion(), version.cup); + COMMON_LOGGER_RESULT_IF_FAILED(result); + s_BackupState = CHECK_SAVEDATA; + } + break; + case CHECK_SAVEDATA: { static bool init = true; diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.cpp new file mode 100644 index 0000000..c5f5534 --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.cpp @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------* + Project: Horizon + File: MenuSavedataModifier.cpp + + Copyright (C)2014 Nintendo Co., Ltd. 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 +#include + +#include "MenuSavedataModifier.h" +#include "LauncherSaveData.h" +#include "HeapManager.h" +#include "CommonLogger.h" + + +namespace ConsoleBackup{ + +MenuSavedataModifier::MenuSavedataModifier() + +{ + // TODO 自動生成されたコンストラクター・スタブ + +} + +MenuSavedataModifier::~MenuSavedataModifier() +{ + // TODO Auto-generated destructor stub +} + +// MMENのコードを移植 +void MenuSavedataModifier::set_initialize_data_802_(LauncherSavedataRaw* mpRaw) +{ + // トップのカーソル位置をクリア + mpRaw->mFcsIconIdx = 0; // フォーカスしていたアイコン(初回起動ではゲームカードにあっている) + mpRaw->mHeadIconIdx = 0; // 画面左上のアイコン + + // フォルダ内のカーソル位置のクリア + for( int i = 0; i < LauncherSavedataRaw::scmFolderMax; i++ ) + { + mpRaw->mFolderFcsIconIdx[ i ] = 0; // フォルダごとのフォーカスしていたアイコン(デフォルト左上) + mpRaw->mFolderHeadIconIdx[ i ] = 0; // フォルダごとの画面左上のアイコン(デフォルト左上) + } +} + +nn::Result MenuSavedataModifier::Modify(nn::cfg::CfgRegionCode region, nn::pl::CTR::CardUpdateVersion cup) +{ + if(!m_Version.IsModificationRequired(cup.majorVersion, cup.minorVersion)) + { + return nn::ResultSuccess(); + } + + u64 id = GetId(region); + + const char* const SYSTEM_SAVEDATA_ARCHIVE_NAME = "ssave:"; + const char* const MENU_SAVE_FILE_NAME = "ssave:/Launcher.dat"; + NN_UTIL_RETURN_IF_FAILED( + nn::fs::MountSystemSaveData(SYSTEM_SAVEDATA_ARCHIVE_NAME, id)); + + nn::fs::FileStream file; + NN_UTIL_RETURN_IF_FAILED_1( + file.TryInitialize(MENU_SAVE_FILE_NAME, nn::fs::OPEN_MODE_READ | nn::fs::OPEN_MODE_WRITE), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + + s64 fileSize = file.GetSize(); + common::HeapManager heap(fileSize, AES_BLOCK_SIZE); + void* buf = heap.GetAddr(); + if (buf != NULL) + { + s32 readSize; + NN_UTIL_RETURN_IF_FAILED_1(file.TryRead(&readSize, buf, fileSize), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + } + else + { + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME); + return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, + nn::Result::DESCRIPTION_OUT_OF_MEMORY); + } + + // カーソル位置を初期化 + set_initialize_data_802_(reinterpret_cast(buf)); + + // 先頭に移動して書き込み + NN_UTIL_RETURN_IF_FAILED_1(file.TrySeek(0, nn::fs::POSITION_BASE_BEGIN), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + s32 writeSize; + NN_UTIL_RETURN_IF_FAILED_1(file.TryWrite(&writeSize, buf, fileSize, true), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + + // コミットする + NN_UTIL_RETURN_IF_FAILED_1(nn::fs::CommitSystemSaveData(SYSTEM_SAVEDATA_ARCHIVE_NAME), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + + COMMON_LOGGER_WARN("Modified Menu Savedata\n"); + + NN_UTIL_RETURN_IF_FAILED(nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + + return nn::ResultSuccess(); +} +u64 MenuSavedataModifier::GetId(nn::cfg::CfgRegionCode region) +{ +using namespace nn::cfg; + + if(region == CFG_REGION_JAPAN) + { + return PROGRAM_ID_JP; + } + else if(region == CFG_REGION_AMERICA) + { + return PROGRAM_ID_US; + } + else if(region == CFG_REGION_AUSTRALIA || region == CFG_REGION_EUROPE) + { + return PROGRAM_ID_EU; + } + else + { + return PROGRAM_ID_JP; + } +} + +} /* namespace ConsoleBackup */ diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.h b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.h new file mode 100644 index 0000000..0b8b3ba --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataModifier.h @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------* + Project: Horizon + File: MenuSavedataModifier.h + + Copyright (C)2014 Nintendo Co., Ltd. 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$ + *---------------------------------------------------------------------------*/ +#ifndef SOURCES_CONSOLEBACKUP_MENUSAVEDATAMODIFIER_H_ +#define SOURCES_CONSOLEBACKUP_MENUSAVEDATAMODIFIER_H_ + +#include +#include +#include +#include "MenuSavedataVersion.h" +#include "LauncherSaveData.h" + +namespace ConsoleBackup +{ + +class MenuSavedataModifier +{ +public: + MenuSavedataModifier(); + virtual ~MenuSavedataModifier(); + + nn::Result Modify(nn::cfg::CfgRegionCode region, nn::pl::CTR::CardUpdateVersion cup); + +private: + MenuSavedataVersion m_Version; + u64 GetId(nn::cfg::CfgRegionCode region); + void set_initialize_data_802_(LauncherSavedataRaw* mpRaw); + +}; + +} /* namespace ConsoleBackup */ + +#endif /* SOURCES_CONSOLEBACKUP_MENUSAVEDATAMODIFIER_H_ */ diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.cpp new file mode 100644 index 0000000..8254515 --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.cpp @@ -0,0 +1,66 @@ +/*---------------------------------------------------------------------------* + Project: Horizon + File: MenuSavedataVersion.cpp + + Copyright (C)2014 Nintendo Co., Ltd. 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 "MenuSavedataVersion.h" + +const u8 CUP_MAJOR_3 = 4; +const u8 CUP_MAJOR_7 = 8; +const u8 CUP_MAJOR_8 = 9; +const u8 CUP_MINOR_8_1 = 1; + +namespace ConsoleBackup +{ + +MenuSavedataVersion::MenuSavedataVersion() +{ + // TODO 自動生成されたコンストラクター・スタブ + +} + +MenuSavedataVersion::~MenuSavedataVersion() +{ + // TODO Auto-generated destructor stub +} + +bool MenuSavedataVersion::IsModificationRequired(u8 cupMajor, u8 cupMinor) +{ + if(cupMajor < CUP_MAJOR_3) + { + return false; + } + + if(CUP_MAJOR_3<= cupMajor && cupMajor <= CUP_MAJOR_7) + { + return true; + } + if(cupMajor == CUP_MAJOR_8) + { + if(cupMinor <= CUP_MINOR_8_1) + { + return true; + } + else if(cupMinor > CUP_MINOR_8_1) + { + return false; + } + } + if(cupMajor > CUP_MAJOR_8) + { + return false; + } + + return false; +} + +} /* namespace ConsoleBackup */ diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.h b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.h new file mode 100644 index 0000000..d8c5665 --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/MenuSavedataVersion.h @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------* + Project: Horizon + File: MenuSavedataVersion.h + + Copyright (C)2014 Nintendo Co., Ltd. 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$ + *---------------------------------------------------------------------------*/ +#ifndef SOURCES_CONSOLEBACKUP_MENUSAVEDATAVERSION_H_ +#define SOURCES_CONSOLEBACKUP_MENUSAVEDATAVERSION_H_ + +#if defined(__ARMCC_VERSION) +#include +#include +#else +#include "test_common.h" +#endif +#include + +namespace ConsoleBackup +{ + +class MenuSavedataVersion +{ +public: + MenuSavedataVersion(); + virtual ~MenuSavedataVersion(); + + bool IsModificationRequired(u8 cupMajor, u8 cupMinor); + +}; + +} /* namespace ConsoleBackup */ + +#endif /* SOURCES_CONSOLEBACKUP_MENUSAVEDATAVERSION_H_ */ diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/OMakefile b/trunk/ConsoleDataMigration/sources/ConsoleBackup/OMakefile index 8f01daf..02d97f8 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/OMakefile +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/OMakefile @@ -28,6 +28,8 @@ SOURCES[] = Exporter.cpp Checker.cpp SavedataChecker.cpp + MenuSavedataModifier.cpp + MenuSavedataVersion.cpp ../common/Util.cpp ../common/DrawSystemState.cpp ../common/FileTransfer.cpp diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/SavedataChecker.h b/trunk/ConsoleDataMigration/sources/ConsoleBackup/SavedataChecker.h index 394c40d..34d15a1 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/SavedataChecker.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/SavedataChecker.h @@ -85,7 +85,7 @@ const SystemSaveDataCouple SYSTEM_SAVEDATA_COUPLE_LIST[] = {"ARGAMES_NCL_US", 0x0002021e }, {"ARGAMES_NCL_EU", 0x0002022e }, - {"MENU_JP", 0x00020081 }, + {"MENU_JP", 0x00020082 }, {"MENU_US", 0x0002008f }, {"MENU_EU", 0x00020098 }, diff --git a/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/OMakefile b/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/OMakefile new file mode 100644 index 0000000..5f53aa7 --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/OMakefile @@ -0,0 +1,23 @@ +INCLUDES[] += + ./ + ../common + ../../../ConsoleBackup + $(HORIZON_ROOT)/include + +TARGET = testMenuSavedataVersion +TEST_TARGET = MenuSavedataVersion + +SRC_FILES[] = + testMenuSavedataVersion + MenuSavedataVersion + +# テスト独自のスタブを使用する場合に定義する +#CXXFLAGS += -DPCTEST_USE_STUB + +# テストディレクトリ外にあるので独自ルールでビルド +$(TEST_TARGET)$(EXT_OBJ): ../../../ConsoleBackup/$(TEST_TARGET).cpp + $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) -c $< + +.DEFAULT: $(TEST_TARGET)$(EXT_OBJ) $(TARGET)$(EXE) + +include $(COMMON_BUILD) diff --git a/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/testMenuSavedataVersion.cpp b/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/testMenuSavedataVersion.cpp new file mode 100644 index 0000000..ac3a57a --- /dev/null +++ b/trunk/ConsoleDataMigration/sources/tests/googletest/MenuSavedataVersion/testMenuSavedataVersion.cpp @@ -0,0 +1,40 @@ +#include + +#include "MenuSavedataVersion.h" + +using namespace nn::cfg::CTR; + + +TEST(testbelow3rdNUP, ALL) +{ + ConsoleBackup::MenuSavedataVersion version; + + ASSERT_FALSE(version.IsModificationRequired(3, 0)); +} + +TEST(test3rdNUPto8thNUP, ALL) +{ + ConsoleBackup::MenuSavedataVersion version; + + ASSERT_TRUE(version.IsModificationRequired(4, 0)); + ASSERT_TRUE(version.IsModificationRequired(5, 0)); + ASSERT_TRUE(version.IsModificationRequired(6, 0)); + ASSERT_TRUE(version.IsModificationRequired(7, 0)); + ASSERT_TRUE(version.IsModificationRequired(8, 0)); + ASSERT_TRUE(version.IsModificationRequired(9, 0)); + ASSERT_TRUE(version.IsModificationRequired(9, 1)); +} + +TEST(test8_0_2thNUP, ALL) +{ + ConsoleBackup::MenuSavedataVersion version; + + ASSERT_FALSE(version.IsModificationRequired(9, 2)); +} + +TEST(testFuture, ALL) +{ + ConsoleBackup::MenuSavedataVersion version; + + ASSERT_FALSE(version.IsModificationRequired(10, 0)); +}