mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
アカウントサルベージ対応。サルベージ成功する場合の動作確認完了
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@775 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
881d4d0308
commit
51d4607926
@ -1,4 +1,4 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Project: Horizon
|
Project: Horizon
|
||||||
File: ActCompleter.cpp
|
File: ActCompleter.cpp
|
||||||
|
|
||||||
@ -20,13 +20,20 @@
|
|||||||
#include <nn/act/act_ApiAdmin.h>
|
#include <nn/act/act_ApiAdmin.h>
|
||||||
#include <nn/act/act_ApiTransfer.h>
|
#include <nn/act/act_ApiTransfer.h>
|
||||||
#include <nn/act/act_ResultPrivate.h>
|
#include <nn/act/act_ResultPrivate.h>
|
||||||
|
#include <nn/actslv/actslv_Api.h>
|
||||||
|
|
||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
nn::Result ActCompleter::s_Result;
|
nn::Result ActCompleter::s_Result;
|
||||||
const size_t ActCompleter::STACK_SIZE;
|
const size_t ActCompleter::STACK_SIZE;
|
||||||
nn::os::Thread ActCompleter::s_Thread;
|
nn::os::Thread ActCompleter::s_Thread;
|
||||||
|
nn::os::Thread ActCompleter::s_UnmountThread;
|
||||||
nn::os::StackBuffer<ActCompleter::STACK_SIZE> ActCompleter::s_ThreadStack;
|
nn::os::StackBuffer<ActCompleter::STACK_SIZE> ActCompleter::s_ThreadStack;
|
||||||
|
nn::os::StackBuffer<ActCompleter::STACK_SIZE> ActCompleter::s_UnmountThreadStack;
|
||||||
|
nn::os::Event ActCompleter::s_BeginEvent;
|
||||||
|
nn::os::Event ActCompleter::s_EndEvent;
|
||||||
|
u32 ActCompleter::s_ApprovalId;
|
||||||
|
ActCompleter::CompleteMode ActCompleter::s_Mode;
|
||||||
|
|
||||||
|
|
||||||
ActCompleter::ActCompleter()
|
ActCompleter::ActCompleter()
|
||||||
@ -45,8 +52,15 @@ nn::Result ActCompleter::GetResult()
|
|||||||
return s_Result;
|
return s_Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActCompleter::Start()
|
void ActCompleter::Start(CompleteMode mode)
|
||||||
{
|
{
|
||||||
|
s_Mode = mode;
|
||||||
|
if(s_Mode == ACT_COMPLETE_TRANSFER_WITH_SALVEGE)
|
||||||
|
{
|
||||||
|
s_BeginEvent.Initialize(false);
|
||||||
|
s_EndEvent.Initialize(false);
|
||||||
|
}
|
||||||
|
|
||||||
s_Thread.Start(Exec, s_ThreadStack);
|
s_Thread.Start(Exec, s_ThreadStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,8 +71,21 @@ bool ActCompleter::IsFinished()
|
|||||||
|
|
||||||
void ActCompleter::Finish()
|
void ActCompleter::Finish()
|
||||||
{
|
{
|
||||||
s_Thread.Join();
|
if(s_Thread.IsValid())
|
||||||
s_Thread.Finalize();
|
{
|
||||||
|
s_Thread.Join();
|
||||||
|
s_Thread.Finalize();
|
||||||
|
}
|
||||||
|
if(s_Mode == ACT_COMPLETE_TRANSFER_WITH_SALVEGE)
|
||||||
|
{
|
||||||
|
if(s_UnmountThread.IsValid())
|
||||||
|
{
|
||||||
|
s_UnmountThread.Join();
|
||||||
|
s_UnmountThread.Finalize();
|
||||||
|
}
|
||||||
|
s_BeginEvent.Finalize();
|
||||||
|
s_EndEvent.Finalize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActCompleter::Exec()
|
void ActCompleter::Exec()
|
||||||
@ -66,6 +93,11 @@ void ActCompleter::Exec()
|
|||||||
s_Result = ExecImpl();
|
s_Result = ExecImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ActCompleter::UnmountThreadFunc()
|
||||||
|
{
|
||||||
|
nn::act::KeepUnmountAndBlock( &s_BeginEvent, &s_EndEvent );
|
||||||
|
}
|
||||||
|
|
||||||
nn::Result ActCompleter::ExecImpl()
|
nn::Result ActCompleter::ExecImpl()
|
||||||
{
|
{
|
||||||
if(!nn::ac::IsConnected())
|
if(!nn::ac::IsConnected())
|
||||||
@ -77,11 +109,37 @@ nn::Result ActCompleter::ExecImpl()
|
|||||||
NN_UTIL_RETURN_IF_FAILED(
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
nn::act::InitializeAdmin());
|
nn::act::InitializeAdmin());
|
||||||
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(
|
if (s_Mode == ACT_COMPLETE_TRANSFER_WITH_SALVEGE)
|
||||||
nn::act::CompleteTransfer());
|
{
|
||||||
|
// アンマウント
|
||||||
|
s_UnmountThread.Start(UnmountThreadFunc, s_UnmountThreadStack);
|
||||||
|
s_BeginEvent.Wait();
|
||||||
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(
|
// アンマウントできたのでアカウントサルベージを実行
|
||||||
nn::act::FinalizeAdmin());
|
NN_UTIL_RETURN_IF_FAILED_3(
|
||||||
|
nn::act::SalvageAccounts(),
|
||||||
|
s_EndEvent.Signal(),
|
||||||
|
nn::act::FinalizeAdmin(),
|
||||||
|
common::FinalizeNetwork()
|
||||||
|
);
|
||||||
|
|
||||||
|
s_ApprovalId = nn::act::GetSalvagedApprovalId();
|
||||||
|
COMMON_LOGGER("ApprovalId = %d\n", s_ApprovalId);
|
||||||
|
|
||||||
|
// サルベージ終了をシステムに通知
|
||||||
|
s_EndEvent.Signal();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移行完了
|
||||||
|
NN_UTIL_RETURN_IF_FAILED_2(
|
||||||
|
nn::act::CompleteTransfer(),
|
||||||
|
nn::act::FinalizeAdmin(),
|
||||||
|
common::FinalizeNetwork());
|
||||||
|
|
||||||
|
NN_UTIL_RETURN_IF_FAILED_1(
|
||||||
|
nn::act::FinalizeAdmin(),
|
||||||
|
common::FinalizeNetwork()
|
||||||
|
);
|
||||||
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
common::FinalizeNetwork());
|
common::FinalizeNetwork());
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Project: Horizon
|
Project: Horizon
|
||||||
File: ActCompleter.h
|
File: ActCompleter.h
|
||||||
|
|
||||||
@ -24,22 +24,34 @@ namespace ConsoleRestore
|
|||||||
class ActCompleter
|
class ActCompleter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum CompleteMode {
|
||||||
|
ACT_COMPLETE_TRANSFER,
|
||||||
|
ACT_COMPLETE_TRANSFER_WITH_SALVEGE
|
||||||
|
};
|
||||||
|
|
||||||
ActCompleter();
|
ActCompleter();
|
||||||
virtual ~ActCompleter();
|
virtual ~ActCompleter();
|
||||||
|
|
||||||
static nn::Result GetResult();
|
static nn::Result GetResult();
|
||||||
static void Start();
|
static void Start(CompleteMode mode);
|
||||||
static bool IsFinished();
|
static bool IsFinished();
|
||||||
static void Finish();
|
static void Finish();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void Exec();
|
static void Exec();
|
||||||
|
static void UnmountThreadFunc();
|
||||||
static nn::Result ExecImpl();
|
static nn::Result ExecImpl();
|
||||||
|
|
||||||
static nn::Result s_Result;
|
static nn::Result s_Result;
|
||||||
static const size_t STACK_SIZE = 0x1000;
|
static const size_t STACK_SIZE = 0x1000;
|
||||||
static nn::os::Thread s_Thread;
|
static nn::os::Thread s_Thread;
|
||||||
|
static nn::os::Thread s_UnmountThread;
|
||||||
static nn::os::StackBuffer<STACK_SIZE> s_ThreadStack;
|
static nn::os::StackBuffer<STACK_SIZE> s_ThreadStack;
|
||||||
|
static nn::os::StackBuffer<STACK_SIZE> s_UnmountThreadStack;
|
||||||
|
static nn::os::Event s_BeginEvent;
|
||||||
|
static nn::os::Event s_EndEvent;
|
||||||
|
static u32 s_ApprovalId;
|
||||||
|
static CompleteMode s_Mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace ConsoleRestore */
|
} /* namespace ConsoleRestore */
|
||||||
|
|||||||
@ -94,6 +94,8 @@ bool s_ShopOperationExecuted[SHOP_OPERATION_NUM_MAX];
|
|||||||
// ショップ処理を何回リトライしたか
|
// ショップ処理を何回リトライしたか
|
||||||
u32 s_ShopOperationRetryCount[SHOP_OPERATION_NUM_MAX];
|
u32 s_ShopOperationRetryCount[SHOP_OPERATION_NUM_MAX];
|
||||||
|
|
||||||
|
ActCompleter::CompleteMode s_ActCompleteMode;
|
||||||
|
|
||||||
void PutAliveMessage(common::OperationMessage& operationMessage, const char* str);
|
void PutAliveMessage(common::OperationMessage& operationMessage, const char* str);
|
||||||
bool CheckAndReadAPSetting(common::OperationMessage& operationMessage);
|
bool CheckAndReadAPSetting(common::OperationMessage& operationMessage);
|
||||||
|
|
||||||
@ -1400,6 +1402,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
s_ActCompleteMode = ActCompleter::ACT_COMPLETE_TRANSFER;
|
||||||
s_RestoreState = COMPLETE_ACT;
|
s_RestoreState = COMPLETE_ACT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1410,7 +1413,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag
|
|||||||
COMMON_LOGGER("Complete NNA Transfer\n");
|
COMMON_LOGGER("Complete NNA Transfer\n");
|
||||||
if (ImportCountryLanguageData().IsSuccess())
|
if (ImportCountryLanguageData().IsSuccess())
|
||||||
{
|
{
|
||||||
ActCompleter::Start();
|
ActCompleter::Start(s_ActCompleteMode);
|
||||||
s_RestoreState = COMPLETE_ACT_WAIT;
|
s_RestoreState = COMPLETE_ACT_WAIT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1437,6 +1440,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Complete NNA Transfer failed, Retrying...");
|
COMMON_LOGGER("Complete NNA Transfer failed, Retrying...");
|
||||||
|
COMMON_LOGGER_RESULT(result, __func__);
|
||||||
s_RestoreState = COMPLETE_ACT;
|
s_RestoreState = COMPLETE_ACT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1657,6 +1661,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag
|
|||||||
operationMessage.Add("Press A or START Button to Continue.");
|
operationMessage.Add("Press A or START Button to Continue.");
|
||||||
if(nextStep)
|
if(nextStep)
|
||||||
{
|
{
|
||||||
|
s_ActCompleteMode = ActCompleter::ACT_COMPLETE_TRANSFER_WITH_SALVEGE;
|
||||||
s_RestoreState = COMPLETE_ACT;
|
s_RestoreState = COMPLETE_ACT;
|
||||||
DeleteAllCheckFiles();
|
DeleteAllCheckFiles();
|
||||||
}
|
}
|
||||||
@ -1708,6 +1713,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag
|
|||||||
PlayCursorSound(PREINSTALL_WAIT_SYNC_TICKET);
|
PlayCursorSound(PREINSTALL_WAIT_SYNC_TICKET);
|
||||||
if(nextStep)
|
if(nextStep)
|
||||||
{
|
{
|
||||||
|
s_ActCompleteMode = ActCompleter::ACT_COMPLETE_TRANSFER_WITH_SALVEGE;
|
||||||
s_RestoreState = COMPLETE_ACT;
|
s_RestoreState = COMPLETE_ACT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,6 +78,7 @@ LIBS += libnn_cfg \
|
|||||||
libnn_xml_simple \
|
libnn_xml_simple \
|
||||||
libnn_act \
|
libnn_act \
|
||||||
libnn_actslv \
|
libnn_actslv \
|
||||||
|
libnn_enc \
|
||||||
|
|
||||||
QRE_LIBRARIES[] = libmw_qre
|
QRE_LIBRARIES[] = libmw_qre
|
||||||
LIBFILES += $`(addprefix $(CTRMW_QRE_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES)$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), $(QRE_LIBRARIES)) \
|
LIBFILES += $`(addprefix $(CTRMW_QRE_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES)$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), $(QRE_LIBRARIES)) \
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user