NUPスキップモードの追加

データの書き込みを行う場合必ずRTCが読み込まれるように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@290 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-05-30 06:08:41 +00:00
parent d1c5bd626c
commit dff70c8bf8
3 changed files with 61 additions and 23 deletions

View File

@ -50,6 +50,8 @@ bool s_NupOnlyMode = false;
bool s_GetIvsOnlyMode = false; bool s_GetIvsOnlyMode = false;
// SDカード確認専用モード // SDカード確認専用モード
bool s_CheckSdOnlyMode = false; bool s_CheckSdOnlyMode = false;
// NUPスキップモードかどうか
bool s_SkipNupMode = false;
// APSettingの書式が無い警告サウンドを鳴らしたかどうか // APSettingの書式が無い警告サウンドを鳴らしたかどうか
bool s_ExistAPSettingAnnotation = false; bool s_ExistAPSettingAnnotation = false;
@ -94,6 +96,11 @@ bool NeedsAcAdater(common::HardwareStateManager& manager)
return manager.IsBatteryLower() && !manager.IsAdapterConnected(); return manager.IsBatteryLower() && !manager.IsAdapterConnected();
} }
bool HasValidRtcData()
{
return !s_CheckSdOnlyMode && !s_NupOnlyMode && !s_GetIvsOnlyMode;
}
typedef enum RestoreState typedef enum RestoreState
{ {
STARTUP, // 初期値 STARTUP, // 初期値
@ -216,16 +223,12 @@ void CheckSdWritable(common::HardwareStateManager& manager, ::std::vector<std::s
// 設定ファイル書式チェック // 設定ファイル書式チェック
void CheckApSetting(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep) void CheckApSetting(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
{ {
NN_UNUSED_VAR(manager);
NN_UNUSED_VAR(goNextStep);
if (CheckAndReadAPSetting(message)) if (CheckAndReadAPSetting(message))
{ {
if(s_CheckSdOnlyMode) s_RestoreState = IMPORT_RTC;
{
s_RestoreState = CHECK_IVS;
}
else
{
CheckNupExecuted(manager, message, goNextStep);
}
} }
else else
{ {
@ -680,7 +683,7 @@ bool CheckAndReadAPSetting(::std::vector<std::string>& operationMessage)
if (!s_ReadSettingDone) if (!s_ReadSettingDone)
{ {
s_ReadSettingDone = true; s_ReadSettingDone = true;
s_ReadSettingIsSuccess = ReadSetting(&s_NupOnlyMode, &s_GetIvsOnlyMode, &s_CheckSdOnlyMode); s_ReadSettingIsSuccess = ReadSetting(&s_NupOnlyMode, &s_GetIvsOnlyMode, &s_CheckSdOnlyMode, &s_SkipNupMode);
} }
if (s_NupOnlyMode && s_GetIvsOnlyMode if (s_NupOnlyMode && s_GetIvsOnlyMode
@ -690,6 +693,11 @@ bool CheckAndReadAPSetting(::std::vector<std::string>& operationMessage)
operationMessage.push_back("Only one special mode setting is valid!!"); operationMessage.push_back("Only one special mode setting is valid!!");
s_ReadSettingIsSuccess = false; s_ReadSettingIsSuccess = false;
} }
else if(s_NupOnlyMode && s_SkipNupMode)
{
operationMessage.push_back("Both NUP_ONLY and SKIP_NUP are described!!");
s_ReadSettingIsSuccess = false;
}
else else
{ {
if (s_NupOnlyMode) if (s_NupOnlyMode)
@ -804,14 +812,7 @@ void ControlState(common::HardwareStateManager& manager, ::std::vector<std::stri
if (nextStep) if (nextStep)
{ {
COMMON_LOGGER("Start Network Update\n"); COMMON_LOGGER("Start Network Update\n");
if(s_GetIvsOnlyMode) s_RestoreState = UPDATE_IN_PROGRESS;
{
s_RestoreState = UPDATE_IN_PROGRESS;
}
else
{
s_RestoreState = IMPORT_RTC;
}
} }
} }
break; break;
@ -865,14 +866,36 @@ void ControlState(common::HardwareStateManager& manager, ::std::vector<std::stri
case IMPORT_RTC: case IMPORT_RTC:
{ {
result = ExecSyncMcuRtc(manager); result = nn::ResultSuccess();
if (result <= nn::fs::ResultVerificationFailed()) if (HasValidRtcData())
{ {
s_RestoreState = FAIL; result = ExecSyncMcuRtc(manager);
if (result <= nn::fs::ResultVerificationFailed())
{
s_RestoreState = FAIL;
}
else
{
if (s_SkipNupMode)
{
CheckAccountTransfered(manager, operationMessage, nextStep);
}
else
{
CheckNupExecuted(manager, operationMessage, nextStep);
}
}
} }
else else
{ {
s_RestoreState = UPDATE_IN_PROGRESS; if (s_CheckSdOnlyMode)
{
s_RestoreState = CHECK_IVS;
}
else
{
CheckNupExecuted(manager, operationMessage, nextStep);
}
} }
} }
break; break;
@ -1572,6 +1595,7 @@ void InitializeState()
s_SdWriteProetctAnnotation = false; s_SdWriteProetctAnnotation = false;
s_WifiStatusOffAnnotation = false; s_WifiStatusOffAnnotation = false;
s_CheckSdOnlyMode = false; s_CheckSdOnlyMode = false;
s_SkipNupMode = false;
} }
u32 GetProgress() u32 GetProgress()

View File

@ -1015,7 +1015,7 @@ bool UpdateNetworkSetting(nn::ac::NetworkSetting& networkSetting)
return retval; return retval;
} }
bool ReadSetting(bool* nupOnly, bool* getIvs, bool* checkSd) bool ReadSetting(bool* nupOnly, bool* getIvs, bool* checkSd, bool* skipNup)
{ {
nn::Result result; nn::Result result;
bool retval = true; bool retval = true;
@ -1358,6 +1358,20 @@ bool ReadSetting(bool* nupOnly, bool* getIvs, bool* checkSd)
} }
} }
{
const wchar_t* const SKIP_NUP_STR = L"SKIP_NUP";
NN_NULL_ASSERT(skipNup);
if (configfileLoader.ReadAsChar(SKIP_NUP_STR) != NULL)
{
s32 num = configfileLoader.ReadAsInteger(SKIP_NUP_STR);
if (num == 1)
{
*skipNup = true;
COMMON_LOGGER("Skip NUP Mode.\n");
}
}
}
configfileLoader.Finalize(); configfileLoader.Finalize();
// 書き込み完了しなければfalse // 書き込み完了しなければfalse

View File

@ -108,7 +108,7 @@ struct TimeZone
}; };
// ネットワーク設定ファイルを読み込む // ネットワーク設定ファイルを読み込む
bool ReadSetting(bool* nupOnly, bool* getIvs, bool* checkSd); bool ReadSetting(bool* nupOnly, bool* getIvs, bool* checkSd, bool* skipNup);
// ネットワーク設定ファイルからNTPサーバの名前を取得する // ネットワーク設定ファイルからNTPサーバの名前を取得する
// 先にReadSettingが成功している必要がある // 先にReadSettingが成功している必要がある