diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp index 191ca5e..73cd2bb 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp @@ -82,9 +82,16 @@ u32 s_FgNupRetryCount = 0; // 時計同期モードかどうか bool s_IsSyncClock = false; // TWLタイトルのダウンロードを開始したかどうか -bool s_ExecuteTitleDownload = false; +bool s_ExecuteTwlTitleDownload = false; // TWLタイトルのダウンロードを何回リトライしたか -u32 s_TitleDownloadRetryCount = 0; +u32 s_TwlTitleDownloadRetryCount = 0; + +// プリインストールタイトルのダウンロードを開始したかどうか +bool s_ExecutePreinstallTitleDownload = false; +// プリインストールタイトルのダウンロードを何回リトライしたか +u32 s_PreinstallTitleDownloadRetryCount = 0; +// プリインストールタイトルのダウンロードが成功したかどうか +bool s_PreinstallTitleDownloadSuccess = false; // ショップ処理を開始したかどうか bool s_ShopOperationExecuted[SHOP_OPERATION_NUM_MAX]; @@ -1418,10 +1425,10 @@ void ControlState(common::HardwareStateManager& manager, ::std::vectorGetSerialNumber(serial, size); } +void HardwareStateManager::GetSerialNumberWithoutCD(u8* serial) +{ + return m_pUtil->GetSerialNumberWithoutCD(serial); +} + void HardwareStateManager::GetVersionData(common::VerDef* version) { return m_pUtil->GetVersionData(version); diff --git a/trunk/ConsoleDataMigration/sources/common/HardwareStateManager.h b/trunk/ConsoleDataMigration/sources/common/HardwareStateManager.h index 1483dff..0655a19 100644 --- a/trunk/ConsoleDataMigration/sources/common/HardwareStateManager.h +++ b/trunk/ConsoleDataMigration/sources/common/HardwareStateManager.h @@ -37,6 +37,7 @@ public: void GetIvs(void** ivs, size_t* size); nn::Handle GetMcuHandle(); void GetSerialNumber(u8** serial, size_t* size); + void GetSerialNumberWithoutCD(u8* serial); void GetVersionData(common::VerDef* version); private: diff --git a/trunk/ConsoleDataMigration/sources/common/Util.cpp b/trunk/ConsoleDataMigration/sources/common/Util.cpp index e1aef54..a04b4c0 100644 --- a/trunk/ConsoleDataMigration/sources/common/Util.cpp +++ b/trunk/ConsoleDataMigration/sources/common/Util.cpp @@ -44,7 +44,7 @@ namespace common { Util::Util() : - m_FriendCode(0), mp_Ivs(NULL), m_SizeofIvs(0), m_BatteryRemain(100), m_CanReadSerialNumber(false), m_CanReadIvs( + m_FriendCode(0), mp_Ivs(NULL), m_SizeofIvs(0), m_SerialNoWithoutCGLen(0), m_BatteryRemain(100), m_CanReadSerialNumber(false), m_CanReadIvs( false), m_HasReadFriendCode(false) { @@ -191,11 +191,11 @@ void Util::ReadIvs(u8 cupMajorVersion) // NULL終端された場所にチェックデジットを付加して新たにNULL終端する void Util::AddCheckDigit(char* serial) { - size_t len = std::strlen(serial); + m_SerialNoWithoutCGLen = std::strlen(serial); u8 digit = 0; bool odd = true; - for(u8 i = len - 1; i > 0 && std::isdigit(serial[i]); i--) + for(u8 i = m_SerialNoWithoutCGLen - 1; i > 0 && std::isdigit(serial[i]); i--) { if(odd) { @@ -210,14 +210,14 @@ void Util::AddCheckDigit(char* serial) if(digit % 10 != 0) { - serial[len] = 10 - (digit % 10) + '0'; + serial[m_SerialNoWithoutCGLen] = 10 - (digit % 10) + '0'; } else { - serial[len] = '0'; + serial[m_SerialNoWithoutCGLen] = '0'; } - serial[len + 1] = '\0'; + serial[m_SerialNoWithoutCGLen + 1] = '\0'; } // /Nintendo 3DS/6ea6b9d6ab70493ea9edd8b947d5d819/853600b24760a87f534430320002544d @@ -284,6 +284,11 @@ u8* Util::GetSerialNumber() return m_SerialNo; } +void Util::GetSerialNumberWithoutCD(u8* serial) +{ + std::memcpy(serial, m_SerialNo, nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN); + serial[m_SerialNoWithoutCGLen] = '\0'; +} void Util::GetIvs(void** ivs, size_t* size) { diff --git a/trunk/ConsoleDataMigration/sources/common/Util.h b/trunk/ConsoleDataMigration/sources/common/Util.h index 45459c6..a360caf 100644 --- a/trunk/ConsoleDataMigration/sources/common/Util.h +++ b/trunk/ConsoleDataMigration/sources/common/Util.h @@ -40,7 +40,7 @@ public: void FinalizeForRestore(); // シリアルナンバーにモジュラス10 ウェイト3・1(M10W31)でチェックデジットを付加する - static void AddCheckDigit(char* serial); + void AddCheckDigit(char* serial); // IVSから計算されるセーブデータディレクトリ名を取得する static void GetSaveDataDirectoryRoot(::std::string& sysSaveRoot); @@ -63,6 +63,9 @@ public: // シリアルナンバーを返す u8* GetSerialNumber(); + // チェックデジット無しのシリアルナンバーを取得する + void GetSerialNumberWithoutCD(u8* serial); + // IVSを取得する void GetIvs(void** ivs, size_t* size); @@ -131,7 +134,8 @@ private: // IVSのサイズ size_t m_SizeofIvs; - NN_PADDING4; + // チェックデジット無しのシリアルナンバーの長さ + size_t m_SerialNoWithoutCGLen; // MCUへのポインタ nn::mcu::CTR::HwCheck* mp_Mcu; diff --git a/trunk/ConsoleDataMigration/sources/tests/common/util/test_Util.cpp b/trunk/ConsoleDataMigration/sources/tests/common/util/test_Util.cpp index bbb2c1d..e28b713 100644 --- a/trunk/ConsoleDataMigration/sources/tests/common/util/test_Util.cpp +++ b/trunk/ConsoleDataMigration/sources/tests/common/util/test_Util.cpp @@ -73,7 +73,8 @@ void UtilTest::AddCheckDigit() const char serialWithCheckDigit[] = "EJF100004458"; char serial[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; std::memcpy(serial, serialBase, sizeof(serialBase)); - common::Util::AddCheckDigit(serial); + common::Util util; + util.AddCheckDigit(serial); NN_TEST_ASSERT_EQUAL(std::strcmp(serial, serialWithCheckDigit), 0); } @@ -84,7 +85,8 @@ void UtilTest::AddCheckDigit() const char serialWithCheckDigit[] = "CJF100046380"; char serial[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; std::memcpy(serial, serialBase, sizeof(serialBase)); - common::Util::AddCheckDigit(serial); + common::Util util; + util.AddCheckDigit(serial); NN_TEST_ASSERT_EQUAL(std::strcmp(serial, serialWithCheckDigit), 0); }