NTP同期中も生存メッセージを表示するように

Result出力用関数もCriticalSectionで守る
不要なfs::Initialize, Finalizeを削除
NTP同期の結果を取得するように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@7 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-02-01 06:45:57 +00:00
parent 88d11db75a
commit 797af0576c
5 changed files with 128 additions and 93 deletions

View File

@ -148,8 +148,8 @@ void FinalizeAll()
nn::ptm::CTR::FinalizeForSystemMenu(); nn::ptm::CTR::FinalizeForSystemMenu();
nn::cfg::CTR::system::Finalize(); nn::cfg::CTR::system::Finalize();
nn::cfg::CTR::init::Finalize(); nn::cfg::CTR::init::Finalize();
//nn::hid::Finalize(); nn::hid::Finalize();
//nn::fs::Finalize(); nn::fs::Finalize();
nn::applet::PrepareToCloseApplication(); nn::applet::PrepareToCloseApplication();
nn::applet::CloseApplication(); nn::applet::CloseApplication();

View File

@ -114,6 +114,29 @@ bool CheckAndReadAPSetting(::std::vector<std::string>& operationMessage)
return s_ReadSettingSuccess; return s_ReadSettingSuccess;
} }
void PutAliveMessage(::std::vector<std::string>& operationMessage, const char* str)
{
std::string message = std::string(str);
static u8 i = 0;
if (i < 0xff / 4)
{
operationMessage.push_back(message + std::string(" /"));
}
else if (i < 0xff * 2 / 4)
{
operationMessage.push_back(message + std::string(" |"));
}
else if (i < 0xff * 3 / 4)
{
operationMessage.push_back(message + std::string(" \\"));
}
else
{
operationMessage.push_back(message + std::string(" -"));
}
i += 4;
}
void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep, bool& continueRestore) void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep, bool& continueRestore)
{ {
// 状態遷移Controller // 状態遷移Controller
@ -324,24 +347,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
// 動いていることを表示 // 動いていることを表示
{ {
static u8 i = 0; PutAliveMessage(operationMessage, "Updating");
if( i < 0xff / 4)
{
operationMessage.push_back(::std::string("Updating /"));
}
else if(i < 0xff * 2 / 4)
{
operationMessage.push_back(::std::string("Updating |"));
}
else if(i < 0xff * 3 / 4)
{
operationMessage.push_back(::std::string("Updating \\"));
}
else
{
operationMessage.push_back(::std::string("Updating -"));
}
i++;
} }
@ -482,10 +488,24 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
AdjustTime(); AdjustTime();
init = false; init = false;
} }
// 動いていることを表示
{
PutAliveMessage(operationMessage, "Sync Clock");
}
if(IsTimeAdjustFinished()) if(IsTimeAdjustFinished())
{
if(IsTimeAdjustSuccessed())
{ {
s_RestoreState = WAIT_SD_EJECT; s_RestoreState = WAIT_SD_EJECT;
} }
else
{
s_RestoreState = FAIL;
}
}
} }
break; break;

View File

@ -34,6 +34,7 @@ const size_t NTP_THREAD_STACK_SIZE = 0x1000;
nn::os::Thread s_NtpThread; nn::os::Thread s_NtpThread;
nn::os::StackBuffer<NTP_THREAD_STACK_SIZE> s_NtpThreadStack; nn::os::StackBuffer<NTP_THREAD_STACK_SIZE> s_NtpThreadStack;
bool s_IsNtpThreadFinish = false; bool s_IsNtpThreadFinish = false;
bool s_NtpSyncSuccessed = false;
struct NTP_Packet{ // NTPパケット struct NTP_Packet{ // NTPパケット
@ -58,7 +59,6 @@ const u32 NTP_PORT_NUM = 123;
nn::Result result; nn::Result result;
nn::ac::Config config; nn::ac::Config config;
nn::fs::Initialize();
result = nn::ac::Initialize(); result = nn::ac::Initialize();
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
@ -95,17 +95,14 @@ const u32 NTP_PORT_NUM = 123;
result = nn::ac::Finalize(); result = nn::ac::Finalize();
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
nn::fs::Finalize();
return nn::ResultSuccess(); return nn::ResultSuccess();
} }
}
u32 GetNtpTime() bool GetNtpTime(u32* ntpTime)
{ {
nn::Result result; nn::Result result;
u32 ntp_time; bool retval = true;
NN_LOG("Initializing network.\n"); NN_LOG("Initializing network.\n");
// 本体に書き込まれているネットワーク設定を使ってネットワーク接続を初期化 // 本体に書き込まれているネットワーク設定を使ってネットワーク接続を初期化
@ -157,7 +154,6 @@ u32 GetNtpTime()
#ifndef NN_SWITCH_DISABLE_DEBUG_PRINT #ifndef NN_SWITCH_DISABLE_DEBUG_PRINT
nn::socket::DumpRoutingTable(); nn::socket::DumpRoutingTable();
#endif #endif
NN_UNUSED_VAR(ret);
} }
{ {
@ -191,6 +187,7 @@ u32 GetNtpTime()
if (serverHostent == NULL) if (serverHostent == NULL)
{ {
COMMON_LOGGER("Error: GetHostByName %s\n", GetNtpServerName()); COMMON_LOGGER("Error: GetHostByName %s\n", GetNtpServerName());
retval = false;
} }
else else
{ {
@ -217,6 +214,7 @@ u32 GetNtpTime()
&serverSockAddrIn)) < 0) &serverSockAddrIn)) < 0)
{ {
COMMON_LOGGER("Error: Failed Send to Server, %d\n", ret); COMMON_LOGGER("Error: Failed Send to Server, %d\n", ret);
retval = false;
} }
NN_LOG("SendTo finished\n"); NN_LOG("SendTo finished\n");
@ -228,6 +226,7 @@ u32 GetNtpTime()
if ((ret = nn::socket::Poll(&pollFd, 1, TIMEOUT_MILLISECOND)) < 0) if ((ret = nn::socket::Poll(&pollFd, 1, TIMEOUT_MILLISECOND)) < 0)
{ {
COMMON_LOGGER("Error: recv error, %d\n", ret); COMMON_LOGGER("Error: recv error, %d\n", ret);
retval = false;
} }
NN_LOG("Poll Finished\n"); NN_LOG("Poll Finished\n");
@ -236,15 +235,17 @@ u32 GetNtpTime()
{ {
case nn::socket::POLLERR: // ソケットにエラーが発生しました。 case nn::socket::POLLERR: // ソケットにエラーが発生しました。
COMMON_LOGGER("Error: POLLERR %s %d\n", __FILE__, __LINE__); COMMON_LOGGER("Error: POLLERR %s %d\n", __FILE__, __LINE__);
retval = false;
break; break;
case nn::socket::POLLHUP: // ストリーム・ソケットが未接続です。 case nn::socket::POLLHUP: // ストリーム・ソケットが未接続です。
COMMON_LOGGER("Error: POLLHUP %s %d\n", __FILE__, __LINE__); COMMON_LOGGER("Error: POLLHUP %s %d\n", __FILE__, __LINE__);
retval = false;
break; break;
case nn::socket::POLLNVAL: // 不正なソケット記述子です。 case nn::socket::POLLNVAL: // 不正なソケット記述子です。
COMMON_LOGGER("Error: POLLNVAL %s %d\n", __FILE__, __LINE__); COMMON_LOGGER("Error: POLLNVAL %s %d\n", __FILE__, __LINE__);
retval = false;
break; break;
default: default:
COMMON_LOGGER("Poll: No Error\n");
break; break;
} }
@ -254,15 +255,15 @@ u32 GetNtpTime()
if ((ret = nn::socket::RecvFrom(socket, reinterpret_cast<void*> (&s_NTPRecvPacket), sizeof(s_NTPRecvPacket), nn::socket::MSG_DONTWAIT, if ((ret = nn::socket::RecvFrom(socket, reinterpret_cast<void*> (&s_NTPRecvPacket), sizeof(s_NTPRecvPacket), nn::socket::MSG_DONTWAIT,
&serverSockAddrIn)) < 0) &serverSockAddrIn)) < 0)
{ {
NN_LOG("Error: RecvFrom, %d\n", ret); COMMON_LOGGER("Error: RecvFrom, %d\n", ret);
retval = false;
} }
NN_LOG("RecvFrom finished\n"); NN_LOG("RecvFrom finished\n");
// NTPサーバから取得した時刻を現地時間に変換する // NTPサーバから取得した時刻を現地時間に変換する
ntp_time = nn::socket::NtoHl(s_NTPRecvPacket.transmitTimestampSeconds) - 2208988800; /* 1970/01/01 からの秒数に変換 */ *ntpTime = nn::socket::NtoHl(s_NTPRecvPacket.transmitTimestampSeconds) - 2208988800; /* 1970/01/01 からの秒数に変換 */
NN_LOG("ntp_time = %d\n", ntpTime);
NN_LOG("ntp_time = %d\n", ntp_time);
nn::socket::Close(socket); nn::socket::Close(socket);
NN_UNUSED_VAR(ret); NN_UNUSED_VAR(ret);
@ -272,16 +273,13 @@ u32 GetNtpTime()
// ソケットライブラリの終了 // ソケットライブラリの終了
result = nn::socket::Finalize(); result = nn::socket::Finalize();
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
// ソケットライブラリを Finalize すればワーク領域を再利用できます。
delete[] pWorkMemory;
} }
NN_LOG("Finalizing network.\n"); NN_LOG("Finalizing network.\n");
result = FinalizeNetwork(); result = FinalizeNetwork();
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
return ntp_time; return retval;
} }
void RestoreCurrentInternetSetting() void RestoreCurrentInternetSetting()
@ -301,11 +299,14 @@ void RestoreCurrentInternetSetting()
COMMON_LOGGER_RESULT_IF_FAILED(result); COMMON_LOGGER_RESULT_IF_FAILED(result);
} }
}
void NtpThreadFunc() void NtpThreadFunc()
{ {
// NTP時間を取得する // NTP時間を取得する
u32 ntpTime = GetNtpTime(); u32 ntpTime;
if (GetNtpTime(&ntpTime))
{
// タイムゾーンを考慮してDateTimeに変換する // タイムゾーンを考慮してDateTimeに変換する
TimeZone timeZone = GetTimeZone(); TimeZone timeZone = GetTimeZone();
@ -330,6 +331,13 @@ void NtpThreadFunc()
// インターネット設定を元に戻す // インターネット設定を元に戻す
RestoreCurrentInternetSetting(); RestoreCurrentInternetSetting();
s_NtpSyncSuccessed = true;
}
else
{
COMMON_LOGGER("Failed Get Ntp Time\n");
s_NtpSyncSuccessed = false;
}
s_IsNtpThreadFinish = true; s_IsNtpThreadFinish = true;
} }
@ -339,6 +347,11 @@ bool IsTimeAdjustFinished()
return s_IsNtpThreadFinish; return s_IsNtpThreadFinish;
} }
bool IsTimeAdjustSuccessed()
{
return s_NtpSyncSuccessed;
}
void AdjustTime() void AdjustTime()
{ {
nn::Result result; nn::Result result;

View File

@ -21,6 +21,7 @@ namespace ConsoleRestore
u32 AdjustTime(); u32 AdjustTime();
bool IsTimeAdjustFinished(); bool IsTimeAdjustFinished();
bool IsTimeAdjustSuccessed();
} }

View File

@ -66,6 +66,7 @@ void CommonLogger::Print(const char* fmt, ...)
void CommonLogger::PrintResult(const char* fmt, ...) void CommonLogger::PrintResult(const char* fmt, ...)
{ {
nn::os::CriticalSection::ScopedLock lock(m_CriticalSection);
va_list vlist; va_list vlist;
va_start(vlist, fmt); va_start(vlist, fmt);