diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp index 9594c24..0a77d61 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp @@ -690,10 +690,21 @@ void WriteMcuRtcData(common::HardwareStateManager& manager) nn::mcu::CTR::RtcData rtc; result = mcu.GetRtcAll(&rtc); - NN_LOG("RTC = 20%02d/%02d/%02d %02d:%02d:%02d\n", rtc.m_Year, rtc.m_Month, rtc.m_Day, rtc.m_Hour, rtc.m_Minute, rtc.m_Second); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + const u8 RETRY = 10; + for (u8 i = 0; i < RETRY; i++) + { + if (result.IsSuccess()) + { + NN_LOG("RTC = 20%02d/%02d/%02d %02d:%02d:%02d\n", rtc.m_Year, rtc.m_Month, rtc.m_Day, rtc.m_Hour, rtc.m_Minute, rtc.m_Second); + COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - s_SdWriter.WriteBufWithCmac(common::MCU_RTC_PATHNAME, &rtc, sizeof(rtc)); + s_SdWriter.WriteBufWithCmac(common::MCU_RTC_PATHNAME, &rtc, sizeof(rtc)); + break; + } + nn::os::Thread::Sleep( + nn::fnd::TimeSpan::FromMilliSeconds( + nn::os::Tick::GetSystemCurrent().ToTimeSpan().GetMilliSeconds() % 100)); + } } else { diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp index 91133bf..140cadf 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp @@ -505,9 +505,21 @@ nn::Result ImportMcuRtc(common::HardwareStateManager& manager) bcd[i] = DecimalToBcd(reinterpret_cast (rtc)[i]); } - result = mcu.WriteBySend(nn::drivers::mcu::CTR::MCU_RTC_SEC_ADDR, bcd, RTC_PARAM_SIZE); + const u8 RETRY = 10; + for (u8 i = 0; i < RETRY; i++) + { + result = mcu.WriteBySend(nn::drivers::mcu::CTR::MCU_RTC_SEC_ADDR, bcd, RTC_PARAM_SIZE); + COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); + if(result.IsSuccess()) + { + break; + } + nn::os::Thread::Sleep( + nn::fnd::TimeSpan::FromMilliSeconds( + nn::os::Tick::GetSystemCurrent().ToTimeSpan().GetMilliSeconds() % 100)); + + } } common::HeapManager::GetHeap()->Free(buf);