diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp index c2c25d2..fcdfb38 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp +++ b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.cpp @@ -83,6 +83,9 @@ size_t s_SizeofIvs; // IVSが読めるかどうか bool s_CanReadIvs = false; +// バージョン情報 +common::VerDef s_VerData; + nn::Handle s_McuSession; } // namespace @@ -121,6 +124,11 @@ void GetIvs(void** ivs, size_t* size) *size = s_SizeofIvs; } +void GetVersionData(common::VerDef* version) +{ + *version = s_VerData; +} + nn::Handle GetMcuHandle() { return s_McuSession; @@ -280,13 +288,12 @@ extern "C" void nnMain(void) u64 friendCode = nn::friends::CTR::FriendKeyToFriendCode(friendKey); // バージョンの取得 - common::VerDef mVerData; - common::GetSystemVersion(&mVerData, region); + common::GetSystemVersion(&s_VerData, region); // 情報出力 COMMON_LOGGER("CTR Console Backup %s Rev.%s\n", __DATE__, BACKUP_VERSION_NUM); - COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", mVerData.cup.majorVersion, mVerData.cup.minorVersion, mVerData.cup.microVersion, - mVerData.nup.majorVersion); + COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion, + s_VerData.nup.majorVersion); COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region)); COMMON_LOGGER("Serial Number %s\n", s_SerialNo); COMMON_LOGGER("Device ID %llu\n", infraDeviceId); @@ -375,7 +382,7 @@ extern "C" void nnMain(void) flip, adapterState, BACKUP_VERSION_NUM, - &mVerData, + &s_VerData, batteryRemain, infraDeviceId, friendCode, diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h index 222da7c..75f71c5 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h +++ b/trunk/ConsoleDataMigration/ConsoleBackup/ConsoleBackup.h @@ -17,6 +17,7 @@ #define NN_CONSOLEBACKUP_H_ #include +#include "VersionDetect.h" namespace ConsoleBackup { @@ -28,6 +29,7 @@ bool CanReadSerialNumber(); void GetSerialNumber(u8** serial, size_t* size); void GetIvs(void** ivs, size_t* size); nn::Handle GetMcuHandle(); +void GetVersionData(common::VerDef* version); const u32 CONSOLE_WIDTH = 38; const u32 CONSOLE_HEIGHT = 24; diff --git a/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp b/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp index 4418a1f..234d034 100644 --- a/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp +++ b/trunk/ConsoleDataMigration/ConsoleBackup/Exporter.cpp @@ -39,6 +39,7 @@ #include "common_Types.h" #include "Aes_define.h" #include "PlayHistoryManager.h" +#include "VersionDetect.h" namespace ConsoleBackup { @@ -456,6 +457,16 @@ void FinalizeExportThread() s_ExportThread.Finalize(); } +void WriteVersionData() +{ + COMMON_LOGGER("Export Version Data.\n"); + + common::VerDef versionData; + GetVersionData(&versionData); + + s_SdWriter.WriteBuf(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef)); +} + void WritePlayHistory() { common::PlayHistoryManager historyManager; @@ -511,6 +522,9 @@ void ExportData() // RTCをSDに書き出す WriteMcuRtcData(); + // バージョン情報をSDに書き出す + WriteVersionData(); + // NANDのセーブデータをSDに書き出す WriteSaveData(); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp index de7681f..4e5e69a 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp +++ b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.cpp @@ -79,6 +79,8 @@ size_t s_SizeofIvs; // IVSが読めるかどうか bool s_CanReadIvs = false; +// バージョン情報 +common::VerDef s_VerData; } // namespace @@ -116,6 +118,11 @@ void GetIvs(void** ivs, size_t* size) *size = s_SizeofIvs; } +void GetVersionData(common::VerDef* version) +{ + *version = s_VerData; +} + void FinalizeAll() { common::Logger::GetLoggerInstance()->Finalize(); @@ -291,13 +298,12 @@ extern "C" void nnMain(void) u64 friendCode = nn::friends::CTR::FriendKeyToFriendCode(friendKey); // バージョンの取得 - common::VerDef mVerData; - common::GetSystemVersion(&mVerData, region); + common::GetSystemVersion(&s_VerData, region); // 情報出力 COMMON_LOGGER("CTR Console Restore %s Rev.%s\n", __DATE__, RESTORE_VERSION_NUM); - COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", mVerData.cup.majorVersion, mVerData.cup.minorVersion, mVerData.cup.microVersion, - mVerData.nup.majorVersion); + COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion, + s_VerData.nup.majorVersion); COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region)); COMMON_LOGGER("Serial Number %s\n", s_SerialNo); COMMON_LOGGER("Device ID %llu\n", infraDeviceId); @@ -395,7 +401,7 @@ extern "C" void nnMain(void) flip, adapterState, RESTORE_VERSION_NUM, - &mVerData, + &s_VerData, batteryRemain, infraDeviceId, friendCode, diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h index 59a892f..2166c41 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h +++ b/trunk/ConsoleDataMigration/ConsoleRestore/ConsoleRestore.h @@ -17,6 +17,7 @@ #define NN_CONSOLERESTORE_H_ #include +#include "VersionDetect.h" namespace ConsoleRestore { @@ -28,6 +29,7 @@ bool CanReadSerialNumber(); void GetSerialNumber(u8** serial, size_t* size); void GetIvs(void** ivs, size_t* size); nn::Handle GetMcuHandle(); +void GetVersionData(common::VerDef* version); void FinalizeAll(); diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp index ba3838a..b2f370c 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp +++ b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.cpp @@ -46,6 +46,7 @@ #include "configLoader.h" #include "PlayHistoryManager.h" #include "FileChecker.h" +#include "VersionDetect.h" #include #include @@ -85,6 +86,9 @@ bit8 s_IvsDecryptIv[AES_BLOCK_SIZE] = 0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9 }; +// SDカードに保存してあるバージョン情報 +common::VerDef s_SDVersionData; + } CheckedNetworkSetting s_CurrentNetowrkSetting1; @@ -706,9 +710,39 @@ void ImportNorData() } + } +void ReadVersionData() +{ + nn::Result result; + size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); + NN_LOG("AllocatableSize = %d\n", bufSize); + + void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); + if (buf != NULL) + { + common::SdReaderWriter sdReader; + + size_t readSize; + result = sdReader.ReadBuf(common::VERSION_DATA_PATHNAME, buf, bufSize, &readSize); + if(result.IsSuccess()) + { + // バージョン情報を保持する + std::memcpy(&s_SDVersionData, buf, readSize); + COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + + } + COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + + common::HeapManager::GetHeap()->Free(buf); + } + else + { + COMMON_LOGGER("Failed Allocate Heap!!\n"); + } +} void Cleanup() { nn::Result result; diff --git a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h index 759a379..d01f6de 100644 --- a/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h +++ b/trunk/ConsoleDataMigration/ConsoleRestore/Importer.h @@ -85,6 +85,9 @@ void ImportPlayHistory(); // cfgのハードウェア固有領域をcal値で初期化します void InitializeHardwareDependentSetting(); + +// SDカード上のバージョン情報を読みます +void ReadVersionData(); } #endif /* IMPORTER_H_ */ diff --git a/trunk/ConsoleDataMigration/common/FileChecker.cpp b/trunk/ConsoleDataMigration/common/FileChecker.cpp index 50366a7..61b2e0e 100644 --- a/trunk/ConsoleDataMigration/common/FileChecker.cpp +++ b/trunk/ConsoleDataMigration/common/FileChecker.cpp @@ -112,6 +112,11 @@ bool ExistsTryRestoreSameConsoleFile() return ExistsFile(EXISTS_TRY_RESTORE_SAME_CONSOLE); } +bool ExistsVersionData() +{ + return ExistsFile(EXISTS_VERSION_DATA); +} + void InitializeFileCheck() { for(u32 i = 0; i < EXISTS_MAX; i++) diff --git a/trunk/ConsoleDataMigration/common/FileChecker.h b/trunk/ConsoleDataMigration/common/FileChecker.h index 5e9ece3..7d593fb 100644 --- a/trunk/ConsoleDataMigration/common/FileChecker.h +++ b/trunk/ConsoleDataMigration/common/FileChecker.h @@ -32,6 +32,7 @@ typedef enum FILE_EXISTS_CHECK EXISTS_RTC_SYNC_FINISHED, EXISTS_COUNTRY_LANGUAGE, EXISTS_TRY_RESTORE_SAME_CONSOLE, + EXISTS_VERSION_DATA, EXISTS_MAX } FileExistsCheck; @@ -45,7 +46,8 @@ const wchar_t* const FILENAME_TABLE[EXISTS_MAX] = common::AP_SETTING_PATHNAME, common::RTC_SYNC_CHECK_PATHNAME, common::COUNTRY_SETTING_PATHNAME, - common::TRY_RESTORE_SAME_CONSOLE_PATHNAME + common::TRY_RESTORE_SAME_CONSOLE_PATHNAME, + common::VERSION_DATA_PATHNAME }; bool CheckFileExists(const wchar_t* path); @@ -58,6 +60,7 @@ bool ExistsAPSetting(); bool ExistsRtcSyncFinishedFile(); bool ExistsCountryLanguageFile(); bool ExistsTryRestoreSameConsoleFile(); +bool ExistsVersionData(); void InitializeFileCheck(); diff --git a/trunk/ConsoleDataMigration/common/FileName.h b/trunk/ConsoleDataMigration/common/FileName.h index 94ba63a..84cb1b0 100644 --- a/trunk/ConsoleDataMigration/common/FileName.h +++ b/trunk/ConsoleDataMigration/common/FileName.h @@ -53,6 +53,7 @@ const wchar_t* const RTC_SYNC_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/RtcSyn const wchar_t* const PLAYHISTORY_PATHNAME = L"sdmc:/CTR_Console_Repair/playhistory.bin"; const wchar_t* const PLAYHISTORY_COUNT_PATHNAME = L"sdmc:/CTR_Console_Repair/playhistoryCount.bin"; const wchar_t* const TOUCH_PANEL_CALIBRATION_PATHNAME = L"sdmc:/CTR_Console_Repair/tpCalibration.bin"; +const wchar_t* const VERSION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/version.bin"; enum TWL_PATH_INDEX {