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@223 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
23dd0ae63f
commit
9e8a601585
@ -23,8 +23,6 @@
|
|||||||
#include <nn/ps.h>
|
#include <nn/ps.h>
|
||||||
#include <nn/nwm.h>
|
#include <nn/nwm.h>
|
||||||
#include <nn/ac.h>
|
#include <nn/ac.h>
|
||||||
#include <nn/friends.h>
|
|
||||||
#include <nn/friends/CTR/friends_ApiPrivate.h>
|
|
||||||
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
||||||
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
||||||
#include <nn/fs/fs_ApiSysSaveData.h>
|
#include <nn/fs/fs_ApiSysSaveData.h>
|
||||||
@ -55,6 +53,7 @@
|
|||||||
#include "VersionDetect.h"
|
#include "VersionDetect.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "ResFont.h"
|
#include "ResFont.h"
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
// svnリビジョン埋め込み用
|
// svnリビジョン埋め込み用
|
||||||
#include "../../generated/ConsoleBackup/version.h"
|
#include "../../generated/ConsoleBackup/version.h"
|
||||||
@ -67,83 +66,12 @@ namespace {
|
|||||||
// グラフィックスに割り当てるメモリ
|
// グラフィックスに割り当てるメモリ
|
||||||
const size_t s_GxHeapSize = 0x800000;
|
const size_t s_GxHeapSize = 0x800000;
|
||||||
|
|
||||||
|
common::Util s_HwUtility;
|
||||||
// バッテリ残量
|
|
||||||
u8 batteryRemain = 100;
|
|
||||||
|
|
||||||
// シリアルナンバー
|
|
||||||
u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN];
|
|
||||||
|
|
||||||
// デバイスID
|
|
||||||
bit32 s_DeviceId;
|
|
||||||
|
|
||||||
// シリアルナンバーが読めるかどうか
|
|
||||||
bool s_CanReadSerialNumber = false;
|
|
||||||
|
|
||||||
// IVSへのポインタ
|
|
||||||
void* sp_Ivs;
|
|
||||||
|
|
||||||
size_t s_SizeofIvs;
|
|
||||||
|
|
||||||
// IVSが読めるかどうか
|
|
||||||
bool s_CanReadIvs = false;
|
|
||||||
|
|
||||||
// バージョン情報
|
|
||||||
common::VerDef s_VerData;
|
|
||||||
|
|
||||||
nn::Handle s_McuSession;
|
|
||||||
|
|
||||||
} // namespace <unnamed>
|
} // namespace <unnamed>
|
||||||
|
|
||||||
namespace ConsoleBackup{
|
namespace ConsoleBackup{
|
||||||
|
|
||||||
bool IsAdapterConnected()
|
|
||||||
{
|
|
||||||
return nn::ptm::CTR::GetAdapterState() == nn::ptm::CTR::ADAPTERSTATE_CONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsBatteryLower()
|
|
||||||
{
|
|
||||||
return batteryRemain <= 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CanReadIVS()
|
|
||||||
{
|
|
||||||
return s_CanReadIvs;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CanReadSerialNumber()
|
|
||||||
{
|
|
||||||
return s_CanReadSerialNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetSerialNumber(u8** serial, size_t* size)
|
|
||||||
{
|
|
||||||
*serial = s_SerialNo;
|
|
||||||
*size = nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetIvs(void** ivs, size_t* size)
|
|
||||||
{
|
|
||||||
*ivs = sp_Ivs;
|
|
||||||
*size = s_SizeofIvs;
|
|
||||||
}
|
|
||||||
|
|
||||||
bit32 GetDeviceId()
|
|
||||||
{
|
|
||||||
return s_DeviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetVersionData(common::VerDef* version)
|
|
||||||
{
|
|
||||||
*version = s_VerData;
|
|
||||||
}
|
|
||||||
|
|
||||||
nn::Handle GetMcuHandle()
|
|
||||||
{
|
|
||||||
return s_McuSession;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" void nnMain(void)
|
extern "C" void nnMain(void)
|
||||||
{
|
{
|
||||||
@ -180,14 +108,6 @@ extern "C" void nnMain(void)
|
|||||||
// ps の初期化
|
// ps の初期化
|
||||||
nn::ps::Initialize();
|
nn::ps::Initialize();
|
||||||
|
|
||||||
// friendsの初期化
|
|
||||||
result = nn::friends::detail::Initialize();
|
|
||||||
|
|
||||||
// mcuの初期化
|
|
||||||
nn::mcu::CTR::InitializeHwCheck(&s_McuSession);
|
|
||||||
|
|
||||||
nn::mcu::CTR::HwCheck mcu(s_McuSession);
|
|
||||||
|
|
||||||
// amの初期化
|
// amの初期化
|
||||||
nn::am::InitializeForSystemMenu();
|
nn::am::InitializeForSystemMenu();
|
||||||
|
|
||||||
@ -196,8 +116,8 @@ extern "C" void nnMain(void)
|
|||||||
|
|
||||||
// RenderSystem の準備
|
// RenderSystem の準備
|
||||||
uptr heapForGx = reinterpret_cast<uptr>(common::HeapManager::GetHeap()->Allocate(s_GxHeapSize));
|
uptr heapForGx = reinterpret_cast<uptr>(common::HeapManager::GetHeap()->Allocate(s_GxHeapSize));
|
||||||
demo::RenderSystemDrawing s_RenderSystem;
|
demo::RenderSystemDrawing renderSystem;
|
||||||
s_RenderSystem.Initialize(heapForGx, s_GxHeapSize);
|
renderSystem.Initialize(heapForGx, s_GxHeapSize);
|
||||||
|
|
||||||
// ResFontの初期化
|
// ResFontの初期化
|
||||||
common::InitializeResFont();
|
common::InitializeResFont();
|
||||||
@ -206,7 +126,7 @@ extern "C" void nnMain(void)
|
|||||||
common::InitializeSimplePlayer();
|
common::InitializeSimplePlayer();
|
||||||
|
|
||||||
// ログ描画の初期化
|
// ログ描画の初期化
|
||||||
common::Logger::GetLoggerInstance()->Initialize(CONSOLE_WIDTH, CONSOLE_HEIGHT, CONSOLE_MAX_LINE, &s_RenderSystem);
|
common::Logger::GetLoggerInstance()->Initialize(CONSOLE_WIDTH, CONSOLE_HEIGHT, CONSOLE_MAX_LINE, &renderSystem);
|
||||||
|
|
||||||
// RenderSystemを作ってからログが出せる
|
// RenderSystemを作ってからログが出せる
|
||||||
common::Logger::InitializeEjectThread();
|
common::Logger::InitializeEjectThread();
|
||||||
@ -222,89 +142,24 @@ extern "C" void nnMain(void)
|
|||||||
nn::hid::PadStatus padStatus;
|
nn::hid::PadStatus padStatus;
|
||||||
|
|
||||||
// データの準備
|
// データの準備
|
||||||
|
s_HwUtility.Initialize();
|
||||||
// 完全性検証SEEDの取得
|
common::HardwareStateManager manager(s_HwUtility);
|
||||||
result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
nn::fs::FileInputStream fis;
|
|
||||||
|
|
||||||
result = fis.TryInitialize(common::IVS_NAND_PATHNAME);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
s64 fileSize = fis.GetSize();
|
|
||||||
s32 ret;
|
|
||||||
void* addr = NULL;
|
|
||||||
addr = common::HeapManager::GetHeap()->Allocate(fileSize);
|
|
||||||
if (addr != NULL)
|
|
||||||
{
|
|
||||||
sp_Ivs = addr;
|
|
||||||
s_SizeofIvs = fileSize;
|
|
||||||
result = fis.TryRead(&ret, addr, fileSize);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
s_CanReadIvs = true;
|
|
||||||
}
|
|
||||||
// 後でIVSを参照するのでFreeしない
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fis.Finalize();
|
|
||||||
}
|
|
||||||
// 一旦アンマウントしておく
|
|
||||||
nn::fs::Unmount(common::NAND_ARCHIVE_NAME);
|
|
||||||
|
|
||||||
// リージョンの取得
|
|
||||||
nn::cfg::CTR::CfgRegionCode region;
|
|
||||||
region = nn::cfg::CTR::GetRegion();
|
|
||||||
|
|
||||||
// シリアルナンバーの取得
|
|
||||||
std::memset(s_SerialNo, '\0',
|
|
||||||
nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN);
|
|
||||||
result = nn::cfg::CTR::system::GetSerialNo(s_SerialNo);
|
|
||||||
if(result.IsSuccess())
|
|
||||||
{
|
|
||||||
s_CanReadSerialNumber = true;
|
|
||||||
}
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
|
|
||||||
common::Util::AddCheckDigit(reinterpret_cast<char*>(s_SerialNo));
|
|
||||||
|
|
||||||
// デバイスIDの取得
|
|
||||||
result = nn::ps::CTR::GetDeviceId(&s_DeviceId);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
bit64 infraDeviceId;
|
|
||||||
infraDeviceId = s_DeviceId + common::INFRA_DEVICE_ID_OFFSET;
|
|
||||||
|
|
||||||
// MACアドレスの取得
|
|
||||||
nn::nwm::Mac mac;
|
|
||||||
char8 macAddress[nn::nwm::Mac::MAC_STRING_SIZE];
|
|
||||||
|
|
||||||
result = nn::nwm::GetMacAddress(mac);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
mac.GetString(macAddress);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
|
|
||||||
// フレンドコードの取得
|
|
||||||
nn::friends::CTR::FriendKey friendKey;
|
|
||||||
result = nn::friends::CTR::GetMyFriendKey(&friendKey);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
u64 friendCode = nn::friends::CTR::FriendKeyToFriendCode(friendKey);
|
|
||||||
|
|
||||||
// バージョンの取得
|
|
||||||
common::GetSystemVersion(&s_VerData, region);
|
|
||||||
|
|
||||||
// 情報出力
|
// 情報出力
|
||||||
COMMON_LOGGER("CTR Console Backup %s Rev.%s\n", __DATE__, BACKUP_VERSION_NUM);
|
COMMON_LOGGER("CTR Console Backup %s Rev.%s\n", __DATE__, BACKUP_VERSION_NUM);
|
||||||
COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion,
|
COMMON_LOGGER("System Ver. %d.%d.%d-%d\n",
|
||||||
s_VerData.nup.majorVersion);
|
s_HwUtility.GetCupMajorVersion(),
|
||||||
COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region));
|
s_HwUtility.GetCupMinorVersion(),
|
||||||
COMMON_LOGGER("Serial Number %s\n", s_SerialNo);
|
s_HwUtility.GetCupMicroVersion(),
|
||||||
COMMON_LOGGER("Device ID %llu\n", infraDeviceId);
|
s_HwUtility.GetNupVersion());
|
||||||
COMMON_LOGGER("MAC Address %s\n", macAddress);
|
COMMON_LOGGER("System Region %s\n", s_HwUtility.GetRegionCodeA3());
|
||||||
|
COMMON_LOGGER("Serial Number %s\n", s_HwUtility.GetSerialNumber());
|
||||||
|
COMMON_LOGGER("Device ID %llu\n", s_HwUtility.GetInfraDeviceId());
|
||||||
|
COMMON_LOGGER("MAC Address %s\n", s_HwUtility.GetMacAddress());
|
||||||
COMMON_LOGGER("Friend Code %04u-%04u-%04u\n",
|
COMMON_LOGGER("Friend Code %04u-%04u-%04u\n",
|
||||||
static_cast<u32>(friendCode / 100000000ULL % 10000ULL),
|
static_cast<u32>(s_HwUtility.GetFriendcode() / 100000000ULL % 10000ULL),
|
||||||
static_cast<u32>(friendCode / 10000ULL % 10000ULL),
|
static_cast<u32>(s_HwUtility.GetFriendcode() / 10000ULL % 10000ULL),
|
||||||
static_cast<u32>(friendCode % 10000ULL) );
|
static_cast<u32>(s_HwUtility.GetFriendcode() % 10000ULL) );
|
||||||
|
|
||||||
|
|
||||||
bool flip = false;
|
bool flip = false;
|
||||||
@ -353,11 +208,9 @@ extern "C" void nnMain(void)
|
|||||||
|
|
||||||
|
|
||||||
// 情報更新
|
// 情報更新
|
||||||
// バッテリ
|
|
||||||
mcu.GetBatteryRemain(&batteryRemain);
|
|
||||||
// ACアダプタ
|
// ACアダプタ
|
||||||
std::string adapterState;
|
std::string adapterState;
|
||||||
if(IsAdapterConnected())
|
if(manager.IsAdapterConnected())
|
||||||
{
|
{
|
||||||
adapterState += ::std::string("Connected");
|
adapterState += ::std::string("Connected");
|
||||||
}
|
}
|
||||||
@ -370,7 +223,7 @@ extern "C" void nnMain(void)
|
|||||||
// 進捗確認メッセージを兼ねる?
|
// 進捗確認メッセージを兼ねる?
|
||||||
::std::vector<std::string> operationMessage;
|
::std::vector<std::string> operationMessage;
|
||||||
|
|
||||||
ControlState(operationMessage, nextStep, continueBackup);
|
ControlState(manager, operationMessage, nextStep, continueBackup);
|
||||||
|
|
||||||
nn::util::FloatColor titleColor;
|
nn::util::FloatColor titleColor;
|
||||||
|
|
||||||
@ -380,44 +233,47 @@ extern "C" void nnMain(void)
|
|||||||
|
|
||||||
// 上画面表示
|
// 上画面表示
|
||||||
common::DrawSystemState("CTR Console Backup",
|
common::DrawSystemState("CTR Console Backup",
|
||||||
s_RenderSystem,
|
renderSystem,
|
||||||
titleColor,
|
titleColor,
|
||||||
flip,
|
flip,
|
||||||
adapterState,
|
adapterState,
|
||||||
BACKUP_VERSION_NUM,
|
BACKUP_VERSION_NUM,
|
||||||
&s_VerData,
|
s_HwUtility.GetCupMajorVersion(),
|
||||||
batteryRemain,
|
s_HwUtility.GetCupMinorVersion(),
|
||||||
infraDeviceId,
|
s_HwUtility.GetCupMicroVersion(),
|
||||||
friendCode,
|
s_HwUtility.GetNupVersion(),
|
||||||
|
s_HwUtility.GetBatteryRemain(),
|
||||||
|
s_HwUtility.GetInfraDeviceId(),
|
||||||
|
s_HwUtility.GetFriendcode(),
|
||||||
GetProgress(),
|
GetProgress(),
|
||||||
IsBackupFailed(),
|
IsBackupFailed(),
|
||||||
IsBackupSucceeded(),
|
IsBackupSucceeded(),
|
||||||
macAddress,
|
s_HwUtility.GetMacAddress(),
|
||||||
operationMessage,
|
operationMessage,
|
||||||
region,
|
s_HwUtility.GetRegion(),
|
||||||
s_SerialNo
|
s_HwUtility.GetSerialNumber()
|
||||||
);
|
);
|
||||||
|
|
||||||
s_RenderSystem.SwapBuffers();
|
renderSystem.SwapBuffers();
|
||||||
|
|
||||||
// デフォルトで下画面に描画するもの
|
// デフォルトで下画面に描画するもの
|
||||||
s_RenderSystem.SetRenderTarget(common::GetRenderTarget(NN_GX_DISPLAY1, flip));
|
renderSystem.SetRenderTarget(common::GetRenderTarget(NN_GX_DISPLAY1, flip));
|
||||||
if(IsBackupSucceeded())
|
if(IsBackupSucceeded())
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR);
|
renderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR);
|
||||||
}
|
}
|
||||||
if(IsBackupFailed())
|
if(IsBackupFailed())
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR);
|
renderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR);
|
||||||
}
|
}
|
||||||
s_RenderSystem.Clear();
|
renderSystem.Clear();
|
||||||
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
renderSystem.SetColor(1.f, 1.f, 1.f);
|
||||||
|
|
||||||
common::Logger::GetLoggerInstance()->DrawConsole();
|
common::Logger::GetLoggerInstance()->DrawConsole();
|
||||||
s_RenderSystem.SwapBuffers();
|
renderSystem.SwapBuffers();
|
||||||
|
|
||||||
|
|
||||||
s_RenderSystem.WaitVsync(NN_GX_DISPLAY_BOTH);
|
renderSystem.WaitVsync(NN_GX_DISPLAY_BOTH);
|
||||||
|
|
||||||
// 電源長押しで終了
|
// 電源長押しで終了
|
||||||
if ( nn::applet::IsExpectedToCloseApplication())
|
if ( nn::applet::IsExpectedToCloseApplication())
|
||||||
@ -426,10 +282,8 @@ extern "C" void nnMain(void)
|
|||||||
// アンマウント
|
// アンマウント
|
||||||
nn::fs::Unmount(common::NAND_ARCHIVE_NAME);
|
nn::fs::Unmount(common::NAND_ARCHIVE_NAME);
|
||||||
nn::fs::Unmount(common::SDMC_ARCHIVE_NAME);
|
nn::fs::Unmount(common::SDMC_ARCHIVE_NAME);
|
||||||
s_RenderSystem.Finalize();
|
renderSystem.Finalize();
|
||||||
|
|
||||||
nn::mcu::CTR::FinalizeHwCheck(&s_McuSession);
|
|
||||||
nn::friends::detail::Finalize();
|
|
||||||
nn::ps::Finalize();
|
nn::ps::Finalize();
|
||||||
nn::ptm::CTR::FinalizeForSystemMenu();
|
nn::ptm::CTR::FinalizeForSystemMenu();
|
||||||
nn::cfg::CTR::system::Finalize();
|
nn::cfg::CTR::system::Finalize();
|
||||||
|
|||||||
@ -16,22 +16,9 @@
|
|||||||
#ifndef NN_CONSOLEBACKUP_H_
|
#ifndef NN_CONSOLEBACKUP_H_
|
||||||
#define NN_CONSOLEBACKUP_H_
|
#define NN_CONSOLEBACKUP_H_
|
||||||
|
|
||||||
#include <nn.h>
|
|
||||||
#include "VersionDetect.h"
|
|
||||||
|
|
||||||
namespace ConsoleBackup
|
namespace ConsoleBackup
|
||||||
{
|
{
|
||||||
|
|
||||||
bool IsAdapterConnected();
|
|
||||||
bool IsBatteryLower();
|
|
||||||
bool CanReadIVS();
|
|
||||||
bool CanReadSerialNumber();
|
|
||||||
void GetSerialNumber(u8** serial, size_t* size);
|
|
||||||
void GetIvs(void** ivs, size_t* size);
|
|
||||||
nn::Handle GetMcuHandle();
|
|
||||||
void GetVersionData(common::VerDef* version);
|
|
||||||
bit32 GetDeviceId();
|
|
||||||
|
|
||||||
const u32 CONSOLE_WIDTH = 38;
|
const u32 CONSOLE_WIDTH = 38;
|
||||||
const u32 CONSOLE_HEIGHT = 24;
|
const u32 CONSOLE_HEIGHT = 24;
|
||||||
const u32 CONSOLE_MAX_LINE = 1000;
|
const u32 CONSOLE_MAX_LINE = 1000;
|
||||||
|
|||||||
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
#include "Controller.h"
|
#include "Controller.h"
|
||||||
#include "FileChecker.h"
|
#include "FileChecker.h"
|
||||||
#include "ConsoleBackup.h"
|
|
||||||
#include "Exporter.h"
|
#include "Exporter.h"
|
||||||
#include "SimplePlayer.h"
|
#include "SimplePlayer.h"
|
||||||
#include "CommonLogger.h"
|
#include "CommonLogger.h"
|
||||||
@ -56,12 +55,13 @@ bool s_PlayedFailSound = false;
|
|||||||
|
|
||||||
} // namespace <unnamed>
|
} // namespace <unnamed>
|
||||||
|
|
||||||
bool NeedsAcAdateper()
|
bool NeedsAcAdapter(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
return IsBatteryLower() && !IsAdapterConnected();
|
return manager.IsBatteryLower() && !manager.IsAdapterConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep, bool& continueBackup)
|
void ControlState(common::HardwareStateManager& manager, ::std::vector<std::string>& operationMessage, bool& nextStep,
|
||||||
|
bool& continueBackup)
|
||||||
{
|
{
|
||||||
// 状態遷移Controller
|
// 状態遷移Controller
|
||||||
switch (s_BackupState)
|
switch (s_BackupState)
|
||||||
@ -72,7 +72,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
|
|||||||
{
|
{
|
||||||
bool error = false;
|
bool error = false;
|
||||||
// 完全性検証SEEDを読めるか?
|
// 完全性検証SEEDを読めるか?
|
||||||
if (CanReadIVS())
|
if (manager.CanReadIvs())
|
||||||
{
|
{
|
||||||
// SDカードが挿入されているか?
|
// SDカードが挿入されているか?
|
||||||
if (nn::fs::IsSdmcInserted())
|
if (nn::fs::IsSdmcInserted())
|
||||||
@ -96,7 +96,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
|
|||||||
if (nextStep)
|
if (nextStep)
|
||||||
{
|
{
|
||||||
// シリアルナンバーを読み取れるか?
|
// シリアルナンバーを読み取れるか?
|
||||||
if (!CanReadSerialNumber())
|
if (!manager.CanReadSerialNumber())
|
||||||
{
|
{
|
||||||
common::PlaySound(common::SOUND_ANNOTATION);
|
common::PlaySound(common::SOUND_ANNOTATION);
|
||||||
COMMON_LOGGER("Can't Read Serial Number\n");
|
COMMON_LOGGER("Can't Read Serial Number\n");
|
||||||
@ -127,7 +127,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdateper())
|
if (NeedsAcAdapter(manager))
|
||||||
{
|
{
|
||||||
error = true;
|
error = true;
|
||||||
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
@ -243,14 +243,14 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
|
|||||||
continueBackup = true;
|
continueBackup = true;
|
||||||
|
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdateper())
|
if (NeedsAcAdapter(manager))
|
||||||
{
|
{
|
||||||
continueBackup = false;
|
continueBackup = false;
|
||||||
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// データを書き込む
|
// データを書き込む
|
||||||
ExportData();
|
ExportData(manager);
|
||||||
|
|
||||||
// 処理が完了した
|
// 処理が完了した
|
||||||
if (continueBackup && IsExportFinished())
|
if (continueBackup && IsExportFinished())
|
||||||
|
|||||||
@ -18,11 +18,13 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
namespace ConsoleBackup
|
namespace ConsoleBackup
|
||||||
{
|
{
|
||||||
|
|
||||||
void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep, bool& continueBackup);
|
void ControlState(common::HardwareStateManager& manager, ::std::vector<std::string>& operationMessage, bool& nextStep,
|
||||||
|
bool& continueBackup);
|
||||||
bool InProgress();
|
bool InProgress();
|
||||||
bool IsBackupSucceeded();
|
bool IsBackupSucceeded();
|
||||||
bool IsBackupFailed();
|
bool IsBackupFailed();
|
||||||
|
|||||||
@ -36,7 +36,6 @@
|
|||||||
#include "Exporter.h"
|
#include "Exporter.h"
|
||||||
#include "CommonLogger.h"
|
#include "CommonLogger.h"
|
||||||
#include "SDMountManager.h"
|
#include "SDMountManager.h"
|
||||||
#include "ConsoleBackup.h"
|
|
||||||
#include "HeapManager.h"
|
#include "HeapManager.h"
|
||||||
#include "SdReaderWriter.h"
|
#include "SdReaderWriter.h"
|
||||||
#include "FileName.h"
|
#include "FileName.h"
|
||||||
@ -270,33 +269,33 @@ void WriteNorData()
|
|||||||
s_SdWriter.WriteBufWithCmac(common::NOR_PATHNAME, &s_NtrNorData, sizeof(common::NtrNorData));
|
s_SdWriter.WriteBufWithCmac(common::NOR_PATHNAME, &s_NtrNorData, sizeof(common::NtrNorData));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteSerialNumber()
|
void WriteSerialNumber(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Export Serial Number.\n");
|
COMMON_LOGGER("Export Serial Number.\n");
|
||||||
|
|
||||||
u8* serial;
|
u8* serial;
|
||||||
size_t size;
|
size_t size;
|
||||||
GetSerialNumber(&serial, &size);
|
manager.GetSerialNumber(&serial, &size);
|
||||||
|
|
||||||
s_SdWriter.WriteBufWithCmac(common::SERIAL_PATHNAME, serial, size);
|
s_SdWriter.WriteBufWithCmac(common::SERIAL_PATHNAME, serial, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteDeviceId()
|
void WriteDeviceId(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Export Device ID.\n");
|
COMMON_LOGGER("Export Device ID.\n");
|
||||||
|
|
||||||
bit32 deviceId = GetDeviceId();
|
bit32 deviceId = manager.GetDeviceId();
|
||||||
|
|
||||||
s_SdWriter.WriteBufWithCmac(common::DEVICE_ID_PATHNAME, &deviceId, sizeof(deviceId));
|
s_SdWriter.WriteBufWithCmac(common::DEVICE_ID_PATHNAME, &deviceId, sizeof(deviceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteIvs()
|
void WriteIvs(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Export IVS.\n");
|
COMMON_LOGGER("Export IVS.\n");
|
||||||
|
|
||||||
void* ivs;
|
void* ivs;
|
||||||
size_t size;
|
size_t size;
|
||||||
GetIvs(&ivs, &size);
|
manager.GetIvs(&ivs, &size);
|
||||||
|
|
||||||
void* enc;
|
void* enc;
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
@ -680,11 +679,11 @@ void ExportTwlSoundData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void WriteMcuRtcData()
|
void WriteMcuRtcData(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Export RTC Data.\n");
|
COMMON_LOGGER("Export RTC Data.\n");
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
nn::Handle handle = GetMcuHandle();
|
nn::Handle handle = manager.GetMcuHandle();
|
||||||
|
|
||||||
if(handle.IsValid())
|
if(handle.IsValid())
|
||||||
{
|
{
|
||||||
@ -795,12 +794,12 @@ void FinalizeExportThread()
|
|||||||
s_ExportThread.Finalize();
|
s_ExportThread.Finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteVersionData()
|
void WriteVersionData(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Export Version Data.\n");
|
COMMON_LOGGER("Export Version Data.\n");
|
||||||
|
|
||||||
common::VerDef versionData;
|
common::VerDef versionData;
|
||||||
GetVersionData(&versionData);
|
manager.GetVersionData(&versionData);
|
||||||
|
|
||||||
s_SdWriter.WriteBufWithCmac(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef));
|
s_SdWriter.WriteBufWithCmac(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef));
|
||||||
}
|
}
|
||||||
@ -833,7 +832,7 @@ void DeleteNimSaveData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ExportData()
|
void ExportData(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
static bool init = true;
|
static bool init = true;
|
||||||
|
|
||||||
@ -849,18 +848,18 @@ void ExportData()
|
|||||||
WriteNorData();
|
WriteNorData();
|
||||||
|
|
||||||
// シリアルナンバーをSDカードに書き込む
|
// シリアルナンバーをSDカードに書き込む
|
||||||
WriteSerialNumber();
|
WriteSerialNumber(manager);
|
||||||
|
|
||||||
// デバイスIDをSDカードに書き込む
|
// デバイスIDをSDカードに書き込む
|
||||||
WriteDeviceId();
|
WriteDeviceId(manager);
|
||||||
|
|
||||||
// 完全性検証SEEDをSDカードに書き込む
|
// 完全性検証SEEDをSDカードに書き込む
|
||||||
WriteIvs();
|
WriteIvs(manager);
|
||||||
|
|
||||||
::std::string systemSaveRoot;
|
::std::string systemSaveRoot;
|
||||||
void* ivs;
|
void* ivs;
|
||||||
size_t size;
|
size_t size;
|
||||||
GetIvs(&ivs, &size);
|
manager.GetIvs(&ivs, &size);
|
||||||
// IVSからセーブデータディレクトリ名を計算
|
// IVSからセーブデータディレクトリ名を計算
|
||||||
common::Util::GetSaveDataDirectoryRoot(systemSaveRoot, ivs, size);
|
common::Util::GetSaveDataDirectoryRoot(systemSaveRoot, ivs, size);
|
||||||
|
|
||||||
@ -868,10 +867,10 @@ void ExportData()
|
|||||||
//WritePlayHistory();
|
//WritePlayHistory();
|
||||||
|
|
||||||
// RTCをSDに書き出す
|
// RTCをSDに書き出す
|
||||||
WriteMcuRtcData();
|
WriteMcuRtcData(manager);
|
||||||
|
|
||||||
// バージョン情報をSDに書き出す
|
// バージョン情報をSDに書き出す
|
||||||
WriteVersionData();
|
WriteVersionData(manager);
|
||||||
|
|
||||||
// NANDのセーブデータをSDに書き出す
|
// NANDのセーブデータをSDに書き出す
|
||||||
WriteSaveData(systemSaveRoot);
|
WriteSaveData(systemSaveRoot);
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
#define EXPORTER_H_
|
#define EXPORTER_H_
|
||||||
|
|
||||||
#include <nn.h>
|
#include <nn.h>
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
namespace ConsoleBackup
|
namespace ConsoleBackup
|
||||||
{
|
{
|
||||||
@ -26,7 +27,7 @@ void ExportTwlTitleList();
|
|||||||
void ExportTwlSaveData();
|
void ExportTwlSaveData();
|
||||||
void ExportTwlPhotoData();
|
void ExportTwlPhotoData();
|
||||||
void ExportTwlSoundData();
|
void ExportTwlSoundData();
|
||||||
void ExportData();
|
void ExportData(common::HardwareStateManager& manager);
|
||||||
void DeleteNimSaveData();
|
void DeleteNimSaveData();
|
||||||
|
|
||||||
u32 GetProgress();
|
u32 GetProgress();
|
||||||
|
|||||||
@ -44,6 +44,7 @@ SOURCES[] =
|
|||||||
../common/PlayHistoryManager.cpp
|
../common/PlayHistoryManager.cpp
|
||||||
../common/VersionDetect.cpp
|
../common/VersionDetect.cpp
|
||||||
../common/ResFont.cpp
|
../common/ResFont.cpp
|
||||||
|
../common/HardwareStateManager.cpp
|
||||||
|
|
||||||
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
||||||
|
|
||||||
|
|||||||
@ -23,8 +23,6 @@
|
|||||||
#include <nn/ps.h>
|
#include <nn/ps.h>
|
||||||
#include <nn/nwm.h>
|
#include <nn/nwm.h>
|
||||||
#include <nn/ac.h>
|
#include <nn/ac.h>
|
||||||
#include <nn/friends.h>
|
|
||||||
#include <nn/friends/CTR/friends_ApiPrivate.h>
|
|
||||||
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
||||||
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
||||||
#include <nn/fs/fs_ApiSysSaveData.h>
|
#include <nn/fs/fs_ApiSysSaveData.h>
|
||||||
@ -48,6 +46,7 @@
|
|||||||
#include "VersionDetect.h"
|
#include "VersionDetect.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "ResFont.h"
|
#include "ResFont.h"
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
// svnリビジョン埋め込み用
|
// svnリビジョン埋め込み用
|
||||||
#include "../../generated/ConsoleRestore/version.h"
|
#include "../../generated/ConsoleRestore/version.h"
|
||||||
@ -60,79 +59,15 @@ namespace {
|
|||||||
// グラフィックスに割り当てるメモリ
|
// グラフィックスに割り当てるメモリ
|
||||||
const size_t s_GxHeapSize = 0x800000;
|
const size_t s_GxHeapSize = 0x800000;
|
||||||
|
|
||||||
|
common::Util s_HwUtility;
|
||||||
|
|
||||||
demo::RenderSystemDrawing s_RenderSystem;
|
demo::RenderSystemDrawing s_RenderSystem;
|
||||||
nn::Handle s_McuSession;
|
|
||||||
|
|
||||||
// バッテリ残量
|
|
||||||
u8 batteryRemain = 100;
|
|
||||||
|
|
||||||
// シリアルナンバー
|
|
||||||
u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN];
|
|
||||||
|
|
||||||
// デバイスID
|
|
||||||
bit32 s_DeviceId;
|
|
||||||
|
|
||||||
// シリアルナンバーが読めるかどうか
|
|
||||||
bool s_CanReadSerialNumber = false;
|
|
||||||
|
|
||||||
// IVSへのポインタ
|
|
||||||
void* sp_Ivs;
|
|
||||||
|
|
||||||
size_t s_SizeofIvs;
|
|
||||||
|
|
||||||
// IVSが読めるかどうか
|
|
||||||
bool s_CanReadIvs = false;
|
|
||||||
|
|
||||||
// バージョン情報
|
|
||||||
common::VerDef s_VerData;
|
|
||||||
|
|
||||||
} // namespace <unnamed>
|
} // namespace <unnamed>
|
||||||
|
|
||||||
namespace ConsoleRestore{
|
namespace ConsoleRestore{
|
||||||
|
|
||||||
bool IsAdapterConnected()
|
void FinalizeAll(common::HardwareStateManager& manager)
|
||||||
{
|
|
||||||
return nn::ptm::CTR::GetAdapterState() == nn::ptm::CTR::ADAPTERSTATE_CONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsBatteryLower()
|
|
||||||
{
|
|
||||||
return batteryRemain <= 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CanReadIVS()
|
|
||||||
{
|
|
||||||
return s_CanReadIvs;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CanReadSerialNumber()
|
|
||||||
{
|
|
||||||
return s_CanReadSerialNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetSerialNumber(u8** serial, size_t* size)
|
|
||||||
{
|
|
||||||
*serial = s_SerialNo;
|
|
||||||
*size = nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetIvs(void** ivs, size_t* size)
|
|
||||||
{
|
|
||||||
*ivs = sp_Ivs;
|
|
||||||
*size = s_SizeofIvs;
|
|
||||||
}
|
|
||||||
|
|
||||||
bit32 GetDeviceId()
|
|
||||||
{
|
|
||||||
return s_DeviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetVersionData(common::VerDef* version)
|
|
||||||
{
|
|
||||||
*version = s_VerData;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FinalizeAll()
|
|
||||||
{
|
{
|
||||||
common::Logger::GetLoggerInstance()->Finalize();
|
common::Logger::GetLoggerInstance()->Finalize();
|
||||||
// アンマウント
|
// アンマウント
|
||||||
@ -140,8 +75,7 @@ void FinalizeAll()
|
|||||||
nn::fs::Unmount("sdmc:");
|
nn::fs::Unmount("sdmc:");
|
||||||
s_RenderSystem.Finalize();
|
s_RenderSystem.Finalize();
|
||||||
|
|
||||||
nn::mcu::CTR::FinalizeHwCheck(&s_McuSession);
|
manager.Finalize();
|
||||||
nn::friends::detail::Finalize();
|
|
||||||
nn::ps::Finalize();
|
nn::ps::Finalize();
|
||||||
nn::ptm::CTR::FinalizeForSystemMenu();
|
nn::ptm::CTR::FinalizeForSystemMenu();
|
||||||
nn::cfg::CTR::system::Finalize();
|
nn::cfg::CTR::system::Finalize();
|
||||||
@ -153,11 +87,6 @@ void FinalizeAll()
|
|||||||
nn::applet::CloseApplication();
|
nn::applet::CloseApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Handle GetMcuHandle()
|
|
||||||
{
|
|
||||||
return s_McuSession;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void nnMain(void)
|
extern "C" void nnMain(void)
|
||||||
{
|
{
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
@ -199,13 +128,6 @@ extern "C" void nnMain(void)
|
|||||||
// ps の初期化
|
// ps の初期化
|
||||||
nn::ps::Initialize();
|
nn::ps::Initialize();
|
||||||
|
|
||||||
// friendsの初期化
|
|
||||||
result = nn::friends::detail::Initialize();
|
|
||||||
|
|
||||||
// mcuの初期化
|
|
||||||
nn::mcu::CTR::InitializeHwCheck(&s_McuSession);
|
|
||||||
nn::mcu::CTR::HwCheck mcu(s_McuSession);
|
|
||||||
|
|
||||||
// amの初期化
|
// amの初期化
|
||||||
nn::am::InitializeForSystemMenu();
|
nn::am::InitializeForSystemMenu();
|
||||||
|
|
||||||
@ -237,87 +159,23 @@ extern "C" void nnMain(void)
|
|||||||
nn::hid::PadStatus padStatus;
|
nn::hid::PadStatus padStatus;
|
||||||
|
|
||||||
// データの準備
|
// データの準備
|
||||||
|
s_HwUtility.Initialize();
|
||||||
// 完全性検証SEEDの取得
|
common::HardwareStateManager manager(s_HwUtility);
|
||||||
result = nn::fs::MountSpecialArchive("nand:", nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
nn::fs::FileInputStream fis;
|
|
||||||
|
|
||||||
result = fis.TryInitialize(L"nand:/private/movable.sed");
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
s64 fileSize = fis.GetSize();
|
|
||||||
s32 ret;
|
|
||||||
void* addr = NULL;
|
|
||||||
addr = common::HeapManager::GetHeap()->Allocate(fileSize);
|
|
||||||
if (addr != NULL)
|
|
||||||
{
|
|
||||||
sp_Ivs = addr;
|
|
||||||
s_SizeofIvs = fileSize;
|
|
||||||
result = fis.TryRead(&ret, addr, fileSize);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
s_CanReadIvs = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fis.Finalize();
|
|
||||||
}
|
|
||||||
// 一旦アンマウントしておく
|
|
||||||
nn::fs::Unmount("nand:");
|
|
||||||
|
|
||||||
// リージョンの取得
|
|
||||||
nn::cfg::CTR::CfgRegionCode region;
|
|
||||||
region = nn::cfg::CTR::GetRegion();
|
|
||||||
|
|
||||||
// シリアルナンバーの取得
|
|
||||||
std::memset(s_SerialNo, '\0',
|
|
||||||
nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN);
|
|
||||||
result = nn::cfg::CTR::system::GetSerialNo(s_SerialNo);
|
|
||||||
common::Util::AddCheckDigit(reinterpret_cast<char*>(s_SerialNo));
|
|
||||||
if(result.IsSuccess())
|
|
||||||
{
|
|
||||||
s_CanReadSerialNumber = true;
|
|
||||||
}
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
|
|
||||||
// デバイスIDの取得
|
|
||||||
result = nn::ps::CTR::GetDeviceId(&s_DeviceId);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
bit64 infraDeviceId;
|
|
||||||
infraDeviceId = s_DeviceId + common::INFRA_DEVICE_ID_OFFSET;
|
|
||||||
|
|
||||||
// MACアドレスの取得
|
|
||||||
nn::nwm::Mac mac;
|
|
||||||
char8 macAddress[nn::nwm::Mac::MAC_STRING_SIZE];
|
|
||||||
|
|
||||||
result = nn::nwm::GetMacAddress(mac);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
mac.GetString(macAddress);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
|
|
||||||
// フレンドコードの取得
|
|
||||||
nn::friends::CTR::FriendKey friendKey;
|
|
||||||
result = nn::friends::CTR::GetMyFriendKey(&friendKey);
|
|
||||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
|
||||||
u64 friendCode = nn::friends::CTR::FriendKeyToFriendCode(friendKey);
|
|
||||||
|
|
||||||
// バージョンの取得
|
|
||||||
common::GetSystemVersion(&s_VerData, region);
|
|
||||||
|
|
||||||
// 情報出力
|
// 情報出力
|
||||||
COMMON_LOGGER("CTR Console Restore %s Rev.%s\n", __DATE__, RESTORE_VERSION_NUM);
|
COMMON_LOGGER("CTR Console Restore %s Rev.%s\n", __DATE__, RESTORE_VERSION_NUM);
|
||||||
COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion,
|
COMMON_LOGGER("System Ver. %d.%d.%d-%d\n", s_HwUtility.GetCupMajorVersion(),
|
||||||
s_VerData.nup.majorVersion);
|
s_HwUtility.GetCupMinorVersion(),
|
||||||
COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region));
|
s_HwUtility.GetCupMicroVersion(),
|
||||||
COMMON_LOGGER("Serial Number %s\n", s_SerialNo);
|
s_HwUtility.GetCupMajorVersion());
|
||||||
COMMON_LOGGER("Device ID %llu\n", infraDeviceId);
|
COMMON_LOGGER("System Region %s\n", s_HwUtility.GetRegionCodeA3());
|
||||||
COMMON_LOGGER("MAC Address %s\n", macAddress);
|
COMMON_LOGGER("Serial Number %s\n", s_HwUtility.GetSerialNumber());
|
||||||
|
COMMON_LOGGER("Device ID %llu\n", s_HwUtility.GetInfraDeviceId());
|
||||||
|
COMMON_LOGGER("MAC Address %s\n", s_HwUtility.GetMacAddress());
|
||||||
COMMON_LOGGER("Friend Code %04u-%04u-%04u\n",
|
COMMON_LOGGER("Friend Code %04u-%04u-%04u\n",
|
||||||
static_cast<u32>(friendCode / 100000000ULL % 10000ULL),
|
static_cast<u32>(s_HwUtility.GetFriendcode() / 100000000ULL % 10000ULL),
|
||||||
static_cast<u32>(friendCode / 10000ULL % 10000ULL),
|
static_cast<u32>(s_HwUtility.GetFriendcode() / 10000ULL % 10000ULL),
|
||||||
static_cast<u32>(friendCode % 10000ULL) );
|
static_cast<u32>(s_HwUtility.GetFriendcode() % 10000ULL) );
|
||||||
|
|
||||||
|
|
||||||
bool flip = false;
|
bool flip = false;
|
||||||
@ -366,11 +224,9 @@ extern "C" void nnMain(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 情報更新
|
// 情報更新
|
||||||
// バッテリ
|
|
||||||
mcu.GetBatteryRemain(&batteryRemain);
|
|
||||||
// ACアダプタ
|
// ACアダプタ
|
||||||
std::string adapterState;
|
std::string adapterState;
|
||||||
if(IsAdapterConnected())
|
if(manager.IsAdapterConnected())
|
||||||
{
|
{
|
||||||
adapterState += ::std::string("Connected");
|
adapterState += ::std::string("Connected");
|
||||||
}
|
}
|
||||||
@ -383,7 +239,7 @@ extern "C" void nnMain(void)
|
|||||||
// 進捗確認メッセージを兼ねる?
|
// 進捗確認メッセージを兼ねる?
|
||||||
::std::vector<std::string> operationMessage;
|
::std::vector<std::string> operationMessage;
|
||||||
|
|
||||||
ControlState(operationMessage, nextStep);
|
ControlState(manager, operationMessage, nextStep);
|
||||||
|
|
||||||
nn::util::FloatColor titleColor;
|
nn::util::FloatColor titleColor;
|
||||||
|
|
||||||
@ -413,17 +269,20 @@ extern "C" void nnMain(void)
|
|||||||
flip,
|
flip,
|
||||||
adapterState,
|
adapterState,
|
||||||
RESTORE_VERSION_NUM,
|
RESTORE_VERSION_NUM,
|
||||||
&s_VerData,
|
s_HwUtility.GetCupMajorVersion(),
|
||||||
batteryRemain,
|
s_HwUtility.GetCupMinorVersion(),
|
||||||
infraDeviceId,
|
s_HwUtility.GetCupMicroVersion(),
|
||||||
friendCode,
|
s_HwUtility.GetNupVersion(),
|
||||||
|
s_HwUtility.GetBatteryRemain(),
|
||||||
|
s_HwUtility.GetInfraDeviceId(),
|
||||||
|
s_HwUtility.GetFriendcode(),
|
||||||
GetProgress(),
|
GetProgress(),
|
||||||
IsRestoreFailed(),
|
IsRestoreFailed(),
|
||||||
IsRestoreSucceeded(),
|
IsRestoreSucceeded(),
|
||||||
macAddress,
|
s_HwUtility.GetMacAddress(),
|
||||||
operationMessage,
|
operationMessage,
|
||||||
region,
|
s_HwUtility.GetRegion(),
|
||||||
s_SerialNo
|
s_HwUtility.GetSerialNumber()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (GetRestoreMode() != RESTORE_MODE_RESTORE)
|
if (GetRestoreMode() != RESTORE_MODE_RESTORE)
|
||||||
@ -476,7 +335,7 @@ extern "C" void nnMain(void)
|
|||||||
// 電源長押しで終了
|
// 電源長押しで終了
|
||||||
if ( nn::applet::IsExpectedToCloseApplication())
|
if ( nn::applet::IsExpectedToCloseApplication())
|
||||||
{
|
{
|
||||||
FinalizeAll();
|
FinalizeAll(manager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,18 +22,6 @@
|
|||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
|
|
||||||
bool IsAdapterConnected();
|
|
||||||
bool IsBatteryLower();
|
|
||||||
bool CanReadIVS();
|
|
||||||
bool CanReadSerialNumber();
|
|
||||||
void GetSerialNumber(u8** serial, size_t* size);
|
|
||||||
void GetIvs(void** ivs, size_t* size);
|
|
||||||
nn::Handle GetMcuHandle();
|
|
||||||
void GetVersionData(common::VerDef* version);
|
|
||||||
bit32 GetDeviceId();
|
|
||||||
|
|
||||||
void FinalizeAll();
|
|
||||||
|
|
||||||
const u32 CONSOLE_WIDTH = 38;
|
const u32 CONSOLE_WIDTH = 38;
|
||||||
const u32 CONSOLE_HEIGHT = 24;
|
const u32 CONSOLE_HEIGHT = 24;
|
||||||
const u32 CONSOLE_MAX_LINE = 1000;
|
const u32 CONSOLE_MAX_LINE = 1000;
|
||||||
|
|||||||
@ -88,9 +88,9 @@ u32 s_ShopOperationRetryCount[SHOP_OPERATION_NUM_MAX];
|
|||||||
void PutAliveMessage(::std::vector<std::string>& operationMessage, const char* str);
|
void PutAliveMessage(::std::vector<std::string>& operationMessage, const char* str);
|
||||||
bool CheckAndReadAPSetting(::std::vector<std::string>& operationMessage);
|
bool CheckAndReadAPSetting(::std::vector<std::string>& operationMessage);
|
||||||
|
|
||||||
bool NeedsAcAdater()
|
bool NeedsAcAdater(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
return IsBatteryLower() && !IsAdapterConnected();
|
return manager.IsBatteryLower() && !manager.IsAdapterConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef enum RestoreState
|
typedef enum RestoreState
|
||||||
@ -142,26 +142,26 @@ RestoreState s_RestoreState = STARTUP;
|
|||||||
// Restoreモード管理
|
// Restoreモード管理
|
||||||
RestoreMode s_RestoreMode = RESTORE_MODE_RESTORE;
|
RestoreMode s_RestoreMode = RESTORE_MODE_RESTORE;
|
||||||
|
|
||||||
void CheckSdInserted(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckSdInserted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckAcAdapter(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckAcAdapter(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckSdWritable(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckSdWritable(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckApSetting(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckApSetting(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckNupExecuted(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckNupExecuted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckDownloadIvs(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckDownloadIvs(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckAccountDeleted(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckAccountDeleted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckWriteFinished(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckWriteFinished(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckReadIvs(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckReadIvs(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckConsoleInitialized(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckConsoleInitialized(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckExistsSerialNumber(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckExistsSerialNumber(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckIvsinSd(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckIvsinSd(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
void CheckRegioinSd(::std::vector<std::string>& message, bool& goNextStep);
|
void CheckRegioinSd(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep);
|
||||||
|
|
||||||
// SDカード挿入チェック
|
// SDカード挿入チェック
|
||||||
void CheckSdInserted(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckSdInserted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
if (nn::fs::IsSdmcInserted())
|
if (nn::fs::IsSdmcInserted())
|
||||||
{
|
{
|
||||||
CheckAcAdapter(message, goNextStep);
|
CheckAcAdapter(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -171,27 +171,27 @@ void CheckSdInserted(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ACアダプタが必要かどうかチェック
|
// ACアダプタが必要かどうかチェック
|
||||||
void CheckAcAdapter(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckAcAdapter(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdater())
|
if (NeedsAcAdater(manager))
|
||||||
{
|
{
|
||||||
message.push_back(::std::string("Connect AC Adapter!!"));
|
message.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
s_RestoreState = STARTUP;
|
s_RestoreState = STARTUP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckSdWritable(message, goNextStep);
|
CheckSdWritable(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SDカード書き込みチェック
|
// SDカード書き込みチェック
|
||||||
void CheckSdWritable(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckSdWritable(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
// SDカードに書き込みできるか?
|
// SDカードに書き込みできるか?
|
||||||
if (nn::fs::IsSdmcWritable())
|
if (nn::fs::IsSdmcWritable())
|
||||||
{
|
{
|
||||||
CheckApSetting(message, goNextStep);
|
CheckApSetting(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -207,11 +207,11 @@ void CheckSdWritable(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
|
|
||||||
|
|
||||||
// 設定ファイル書式チェック
|
// 設定ファイル書式チェック
|
||||||
void CheckApSetting(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckApSetting(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
if (CheckAndReadAPSetting(message))
|
if (CheckAndReadAPSetting(message))
|
||||||
{
|
{
|
||||||
CheckNupExecuted(message, goNextStep);
|
CheckNupExecuted(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -220,13 +220,13 @@ void CheckApSetting(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NUP済みかどうかチェック
|
// NUP済みかどうかチェック
|
||||||
void CheckNupExecuted(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckNupExecuted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
if (common::ExistsUpdateCheckedFile())
|
if (common::ExistsUpdateCheckedFile())
|
||||||
{
|
{
|
||||||
if(s_GetIvsOnlyMode)
|
if(s_GetIvsOnlyMode)
|
||||||
{
|
{
|
||||||
CheckDownloadIvs(message, goNextStep);
|
CheckDownloadIvs(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else if (s_NupOnlyMode)
|
else if (s_NupOnlyMode)
|
||||||
{
|
{
|
||||||
@ -237,7 +237,7 @@ void CheckNupExecuted(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckAccountDeleted(message, goNextStep);
|
CheckAccountDeleted(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -266,7 +266,7 @@ void CheckNupExecuted(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// インフラからIVS取得済みかチェック
|
// インフラからIVS取得済みかチェック
|
||||||
void CheckDownloadIvs(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckDownloadIvs(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
NN_UNUSED_VAR(message);
|
NN_UNUSED_VAR(message);
|
||||||
NN_UNUSED_VAR(goNextStep);
|
NN_UNUSED_VAR(goNextStep);
|
||||||
@ -280,7 +280,7 @@ void CheckDownloadIvs(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckWriteFinished(message, goNextStep);
|
CheckWriteFinished(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -291,20 +291,20 @@ void CheckDownloadIvs(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// アカウント削除済みかチェック
|
// アカウント削除済みかチェック
|
||||||
void CheckAccountDeleted(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckAccountDeleted(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
// アカウント削除確認ファイルがあるか?
|
// アカウント削除確認ファイルがあるか?
|
||||||
if (common::ExistsDeleteAccountChecked())
|
if (common::ExistsDeleteAccountChecked())
|
||||||
{
|
{
|
||||||
CheckDownloadIvs(message, goNextStep);
|
CheckDownloadIvs(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 同一本体下記書き戻しの場合はアカウント削除しない
|
// 同一本体下記書き戻しの場合はアカウント削除しない
|
||||||
if(EqualsDeviceIdFileandDeviceId().IsSuccess())
|
if(EqualsDeviceIdFileandDeviceId(manager).IsSuccess())
|
||||||
{
|
{
|
||||||
CreateDeleteAccountFinishedFile();
|
CreateDeleteAccountFinishedFile();
|
||||||
CheckDownloadIvs(message, goNextStep);
|
CheckDownloadIvs(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -314,7 +314,7 @@ void CheckAccountDeleted(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 書き込み完了かどうかチェック
|
// 書き込み完了かどうかチェック
|
||||||
void CheckWriteFinished(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckWriteFinished(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
NN_UNUSED_VAR(goNextStep);
|
NN_UNUSED_VAR(goNextStep);
|
||||||
|
|
||||||
@ -341,17 +341,17 @@ void CheckWriteFinished(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckReadIvs(message, goNextStep);
|
CheckReadIvs(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// IVSを読めるかどうかチェック
|
// IVSを読めるかどうかチェック
|
||||||
void CheckReadIvs(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckReadIvs(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
// IVSを読めるか?
|
// IVSを読めるか?
|
||||||
if (CanReadIVS())
|
if (manager.CanReadIvs())
|
||||||
{
|
{
|
||||||
CheckConsoleInitialized(message, goNextStep);
|
CheckConsoleInitialized(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -361,22 +361,23 @@ void CheckReadIvs(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 本体初期化済みかどうかチェック
|
// 本体初期化済みかどうかチェック
|
||||||
void CheckConsoleInitialized(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckConsoleInitialized(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
// 本体初期化完了ファイルがあるか?
|
// 本体初期化完了ファイルがあるか?
|
||||||
if (common::ExistsConsoleInitializedFile())
|
if (common::ExistsConsoleInitializedFile())
|
||||||
{
|
{
|
||||||
CheckRegioinSd(message, goNextStep);
|
CheckRegioinSd(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckIvsinSd(message, goNextStep);
|
CheckIvsinSd(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// シリアルナンバーがあるかどうかチェック
|
// シリアルナンバーがあるかどうかチェック
|
||||||
void CheckExistsSerialNumber(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckExistsSerialNumber(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
|
NN_UNUSED_VAR(manager);
|
||||||
NN_UNUSED_VAR(message);
|
NN_UNUSED_VAR(message);
|
||||||
NN_UNUSED_VAR(goNextStep);
|
NN_UNUSED_VAR(goNextStep);
|
||||||
|
|
||||||
@ -403,8 +404,9 @@ void CheckExistsSerialNumber(::std::vector<std::string>& message, bool& goNextSt
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SDカードにIVSがあるかどうかチェック
|
// SDカードにIVSがあるかどうかチェック
|
||||||
void CheckIvsinSd(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckIvsinSd(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
|
NN_UNUSED_VAR(manager);
|
||||||
NN_UNUSED_VAR(message);
|
NN_UNUSED_VAR(message);
|
||||||
NN_UNUSED_VAR(goNextStep);
|
NN_UNUSED_VAR(goNextStep);
|
||||||
|
|
||||||
@ -421,7 +423,7 @@ void CheckIvsinSd(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SDカードにリージョンデータがあるかどうかチェック
|
// SDカードにリージョンデータがあるかどうかチェック
|
||||||
void CheckRegioinSd(::std::vector<std::string>& message, bool& goNextStep)
|
void CheckRegioinSd(common::HardwareStateManager& manager, ::std::vector<std::string>& message, bool& goNextStep)
|
||||||
{
|
{
|
||||||
NN_UNUSED_VAR(message);
|
NN_UNUSED_VAR(message);
|
||||||
NN_UNUSED_VAR(goNextStep);
|
NN_UNUSED_VAR(goNextStep);
|
||||||
@ -437,7 +439,7 @@ void CheckRegioinSd(::std::vector<std::string>& message, bool& goNextStep)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckExistsSerialNumber(message, goNextStep);
|
CheckExistsSerialNumber(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -466,6 +468,7 @@ void ShopOperationSuccess(ShopOperation op, const char* logMessage, RestoreState
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ShopOperationSingleTemplate(
|
void ShopOperationSingleTemplate(
|
||||||
|
common::HardwareStateManager& manager,
|
||||||
std::vector<std::string>& message,
|
std::vector<std::string>& message,
|
||||||
ShopOperation op,
|
ShopOperation op,
|
||||||
const char* aliveMessage,
|
const char* aliveMessage,
|
||||||
@ -475,7 +478,7 @@ void ShopOperationSingleTemplate(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdater())
|
if (NeedsAcAdater(manager))
|
||||||
{
|
{
|
||||||
message.push_back(::std::string("Connect AC Adapter!!"));
|
message.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
}
|
}
|
||||||
@ -542,10 +545,10 @@ void ShopOperationSingleTemplate(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateOperation(::std::vector<std::string>& message, RestoreState nextState)
|
void UpdateOperation(common::HardwareStateManager& manager, ::std::vector<std::string>& message, RestoreState nextState)
|
||||||
{
|
{
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdater())
|
if (NeedsAcAdater(manager))
|
||||||
{
|
{
|
||||||
message.push_back(::std::string("Connect AC Adapter!!"));
|
message.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
}
|
}
|
||||||
@ -689,12 +692,12 @@ void PutAliveMessage(::std::vector<std::string>& operationMessage, const char* s
|
|||||||
i += 4;
|
i += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Result ExecSyncMcuRtc()
|
nn::Result ExecSyncMcuRtc(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
nn::Result result = nn::ResultSuccess();
|
nn::Result result = nn::ResultSuccess();
|
||||||
if(!common::ExistsRtcSyncFinishedFile())
|
if(!common::ExistsRtcSyncFinishedFile())
|
||||||
{
|
{
|
||||||
result = ImportMcuRtc();
|
result = ImportMcuRtc(manager);
|
||||||
if(result.IsSuccess())
|
if(result.IsSuccess())
|
||||||
{
|
{
|
||||||
// RTCを同期完了ファイルを作る
|
// RTCを同期完了ファイルを作る
|
||||||
@ -707,7 +710,7 @@ nn::Result ExecSyncMcuRtc()
|
|||||||
|
|
||||||
} // namespace <unnamed>
|
} // namespace <unnamed>
|
||||||
|
|
||||||
void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
void ControlState(common::HardwareStateManager& manager, ::std::vector<std::string>& operationMessage, bool& nextStep)
|
||||||
{
|
{
|
||||||
using namespace common;
|
using namespace common;
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
@ -718,7 +721,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
// 起動時
|
// 起動時
|
||||||
case STARTUP:
|
case STARTUP:
|
||||||
{
|
{
|
||||||
CheckSdInserted(operationMessage, nextStep);
|
CheckSdInserted(manager, operationMessage, nextStep);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -803,7 +806,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
|
|
||||||
case IMPORT_RTC:
|
case IMPORT_RTC:
|
||||||
{
|
{
|
||||||
result = ExecSyncMcuRtc();
|
result = ExecSyncMcuRtc(manager);
|
||||||
if (result <= nn::fs::ResultVerificationFailed())
|
if (result <= nn::fs::ResultVerificationFailed())
|
||||||
{
|
{
|
||||||
s_RestoreState = FAIL;
|
s_RestoreState = FAIL;
|
||||||
@ -838,7 +841,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
// アップデート中
|
// アップデート中
|
||||||
case UPDATE_IN_PROGRESS:
|
case UPDATE_IN_PROGRESS:
|
||||||
{
|
{
|
||||||
UpdateOperation(operationMessage, UPDATE_DONE);
|
UpdateOperation(manager, operationMessage, UPDATE_DONE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -863,7 +866,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
|
|
||||||
case DOWNLOAD_IVS:
|
case DOWNLOAD_IVS:
|
||||||
{
|
{
|
||||||
ShopOperationSingleTemplate(operationMessage, SHOP_OPERATION_GET_IVS, "Get Ivs",
|
ShopOperationSingleTemplate(manager, operationMessage, SHOP_OPERATION_GET_IVS, "Get Ivs",
|
||||||
"Get Ivs Finished.\n", "Get Ivs Failed. Retrying...", DOWNLOAD_IVS_DONE);
|
"Get Ivs Finished.\n", "Get Ivs Failed. Retrying...", DOWNLOAD_IVS_DONE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -909,7 +912,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
NN_LOG("Read User's SD Card\n");
|
NN_LOG("Read User's SD Card\n");
|
||||||
void* ivs;
|
void* ivs;
|
||||||
size_t size;
|
size_t size;
|
||||||
GetIvs(&ivs, &size);
|
manager.GetIvs(&ivs, &size);
|
||||||
std::string sysSaveRoot;
|
std::string sysSaveRoot;
|
||||||
|
|
||||||
common::Util::GetSaveDataDirectoryRoot(sysSaveRoot, ivs, size);
|
common::Util::GetSaveDataDirectoryRoot(sysSaveRoot, ivs, size);
|
||||||
@ -942,7 +945,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
|
|
||||||
case DELETE_ACCOUNT:
|
case DELETE_ACCOUNT:
|
||||||
{
|
{
|
||||||
ShopOperationSingleTemplate(operationMessage, SHOP_OPERATION_UNREGISTER, "Deleting Account",
|
ShopOperationSingleTemplate(manager, operationMessage, SHOP_OPERATION_UNREGISTER, "Deleting Account",
|
||||||
"Delete Account Finished.\n", "Delete Account Failed. Retrying...", DELETE_ACCOUNT_DONE);
|
"Delete Account Finished.\n", "Delete Account Failed. Retrying...", DELETE_ACCOUNT_DONE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1035,7 +1038,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
case RESTORE_IN_PROGRESS:
|
case RESTORE_IN_PROGRESS:
|
||||||
{
|
{
|
||||||
// ACアダプタが必要か?
|
// ACアダプタが必要か?
|
||||||
if (NeedsAcAdater())
|
if (NeedsAcAdater(manager))
|
||||||
{
|
{
|
||||||
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
operationMessage.push_back(::std::string("Connect AC Adapter!!"));
|
||||||
}
|
}
|
||||||
@ -1047,7 +1050,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 処理が完了した
|
// 処理が完了した
|
||||||
if (!NeedsAcAdater() && IsImportFinished())
|
if (!NeedsAcAdater(manager) && IsImportFinished())
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Import NAND Data Finished.\n");
|
COMMON_LOGGER("Import NAND Data Finished.\n");
|
||||||
|
|
||||||
@ -1149,7 +1152,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
|
|
||||||
case SYNC_TICKET:
|
case SYNC_TICKET:
|
||||||
{
|
{
|
||||||
ShopOperationSingleTemplate(operationMessage, SHOP_OPERATION_CONNECT_ONLY, "Shop Connect",
|
ShopOperationSingleTemplate(manager, operationMessage, SHOP_OPERATION_CONNECT_ONLY, "Shop Connect",
|
||||||
"Shop Connect Finished.\n", "Shop Connect Failed. Retrying...", UPLOAD_IVS);
|
"Shop Connect Finished.\n", "Shop Connect Failed. Retrying...", UPLOAD_IVS);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1158,7 +1161,7 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
|||||||
// UPLOAD_IN_PROGRESSでのNUP実行後、サーバが更新されないという前提なので注意
|
// UPLOAD_IN_PROGRESSでのNUP実行後、サーバが更新されないという前提なので注意
|
||||||
case UPLOAD_IVS:
|
case UPLOAD_IVS:
|
||||||
{
|
{
|
||||||
UpdateOperation(operationMessage, DOWNLOAD_TWL);
|
UpdateOperation(manager, operationMessage, DOWNLOAD_TWL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#include <nn.h>
|
#include <nn.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
@ -32,7 +33,7 @@ typedef enum RestoreMode
|
|||||||
|
|
||||||
const u32 RETRY_MAX = 3;
|
const u32 RETRY_MAX = 3;
|
||||||
|
|
||||||
void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep);
|
void ControlState(common::HardwareStateManager& manager, ::std::vector<std::string>& operationMessage, bool& nextStep);
|
||||||
bool InProgress();
|
bool InProgress();
|
||||||
bool IsRestoreSucceeded();
|
bool IsRestoreSucceeded();
|
||||||
bool IsRestoreFailed();
|
bool IsRestoreFailed();
|
||||||
|
|||||||
@ -250,7 +250,7 @@ nn::Result ReadSerialNumber(u8* serial)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Result EqualsDeviceIdFileandDeviceId()
|
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
static nn::Result result = nn::ResultSuccess();
|
static nn::Result result = nn::ResultSuccess();
|
||||||
|
|
||||||
@ -274,7 +274,7 @@ nn::Result EqualsDeviceIdFileandDeviceId()
|
|||||||
s_CheckedEqualsDeviceIdFileandDeviceId = true;
|
s_CheckedEqualsDeviceIdFileandDeviceId = true;
|
||||||
std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId));
|
std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId));
|
||||||
|
|
||||||
if (GetDeviceId() == sdDeviceId)
|
if (manager.GetDeviceId() == sdDeviceId)
|
||||||
{
|
{
|
||||||
result = nn::ResultSuccess();
|
result = nn::ResultSuccess();
|
||||||
}
|
}
|
||||||
@ -469,11 +469,11 @@ inline u8 DecimalToBcd(u8 param)
|
|||||||
return (theTen << 4 | theOne);
|
return (theTen << 4 | theOne);
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Result ImportMcuRtc()
|
nn::Result ImportMcuRtc(common::HardwareStateManager& manager)
|
||||||
{
|
{
|
||||||
COMMON_LOGGER("Import RTC Data.\n");
|
COMMON_LOGGER("Import RTC Data.\n");
|
||||||
nn::Result result = nn::ResultSuccess();
|
nn::Result result = nn::ResultSuccess();
|
||||||
nn::Handle handle = GetMcuHandle();
|
nn::Handle handle = manager.GetMcuHandle();
|
||||||
|
|
||||||
if(handle.IsValid())
|
if(handle.IsValid())
|
||||||
{
|
{
|
||||||
@ -851,7 +851,6 @@ bool ExistsIvsDirectory(std::string& ivsRoot)
|
|||||||
}
|
}
|
||||||
if (numEntry == 0)
|
if (numEntry == 0)
|
||||||
{
|
{
|
||||||
// ルートディレクトリを閉じる
|
|
||||||
dir.Finalize();
|
dir.Finalize();
|
||||||
common::SdMountManager::Unmount();
|
common::SdMountManager::Unmount();
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -20,11 +20,12 @@
|
|||||||
#include "FileName.h"
|
#include "FileName.h"
|
||||||
#include <nn/ac/CTR/private/ac_NetworkSetting.h>
|
#include <nn/ac/CTR/private/ac_NetworkSetting.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
|
|
||||||
nn::Result EqualsDeviceIdFileandDeviceId();
|
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager);
|
||||||
nn::Result EqualsRegionDataandRegion();
|
nn::Result EqualsRegionDataandRegion();
|
||||||
nn::Result ReadSerialNumber(u8* serial);
|
nn::Result ReadSerialNumber(u8* serial);
|
||||||
nn::Result SetupFileList();
|
nn::Result SetupFileList();
|
||||||
@ -79,7 +80,7 @@ struct CheckedNetworkSetting
|
|||||||
|
|
||||||
CheckedNetworkSetting* GetTempNetworkSetting();
|
CheckedNetworkSetting* GetTempNetworkSetting();
|
||||||
nn::Result ImportCountryLanguageData();
|
nn::Result ImportCountryLanguageData();
|
||||||
nn::Result ImportMcuRtc();
|
nn::Result ImportMcuRtc(common::HardwareStateManager& manager);
|
||||||
|
|
||||||
// TWL写真領域を初期化してから本体初期化を行う
|
// TWL写真領域を初期化してから本体初期化を行う
|
||||||
void InitializeFileSystem();
|
void InitializeFileSystem();
|
||||||
|
|||||||
@ -49,6 +49,7 @@ SOURCES[] =
|
|||||||
../common/PlayHistoryManager.cpp
|
../common/PlayHistoryManager.cpp
|
||||||
../common/VersionDetect.cpp
|
../common/VersionDetect.cpp
|
||||||
../common/ResFont.cpp
|
../common/ResFont.cpp
|
||||||
|
../common/HardwareStateManager.cpp
|
||||||
|
|
||||||
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
||||||
|
|
||||||
|
|||||||
@ -95,7 +95,10 @@ void DrawSystemState
|
|||||||
bool flip,
|
bool flip,
|
||||||
std::string& adapterState,
|
std::string& adapterState,
|
||||||
const char* toolVersion,
|
const char* toolVersion,
|
||||||
common::VerDef* mVerData,
|
u8 cupMajorVersion,
|
||||||
|
u8 cupMinorVersion,
|
||||||
|
u8 cupMicroVersion,
|
||||||
|
u8 nupVersion,
|
||||||
u8 batteryRemain,
|
u8 batteryRemain,
|
||||||
u64 deviceId,
|
u64 deviceId,
|
||||||
u64 friendCode,
|
u64 friendCode,
|
||||||
@ -110,10 +113,10 @@ void DrawSystemState
|
|||||||
{
|
{
|
||||||
// パラメータ保存
|
// パラメータ保存
|
||||||
s_AdapterState = adapterState;
|
s_AdapterState = adapterState;
|
||||||
s_CupMajor = mVerData->cup.majorVersion;
|
s_CupMajor = cupMajorVersion;
|
||||||
s_CupMinor = mVerData->cup.minorVersion;
|
s_CupMinor = cupMinorVersion;
|
||||||
s_CupMicro = mVerData->cup.microVersion;
|
s_CupMicro = cupMicroVersion;
|
||||||
s_NupMajor = mVerData->nup.majorVersion;
|
s_NupMajor = nupVersion;
|
||||||
s_BatteryRemain = batteryRemain;
|
s_BatteryRemain = batteryRemain;
|
||||||
s_DeviceId = deviceId;
|
s_DeviceId = deviceId;
|
||||||
s_FriendCode = friendCode;
|
s_FriendCode = friendCode;
|
||||||
|
|||||||
@ -53,7 +53,10 @@ void DrawSystemState
|
|||||||
bool flip,
|
bool flip,
|
||||||
std::string& adapterState,
|
std::string& adapterState,
|
||||||
const char* toolVersion,
|
const char* toolVersion,
|
||||||
common::VerDef* mVerData,
|
u8 cupMajorVersion,
|
||||||
|
u8 cupMinorVersion,
|
||||||
|
u8 cupMicroVersion,
|
||||||
|
u8 nupVersion,
|
||||||
u8 batteryRemain,
|
u8 batteryRemain,
|
||||||
u64 deviceId,
|
u64 deviceId,
|
||||||
u64 friendCode,
|
u64 friendCode,
|
||||||
|
|||||||
@ -0,0 +1,81 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: HardwareStateManager.cpp
|
||||||
|
|
||||||
|
Copyright 2009 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Rev$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "HardwareStateManager.h"
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
HardwareStateManager::HardwareStateManager(Util& hwUtility)
|
||||||
|
{
|
||||||
|
m_pUtil = &hwUtility;
|
||||||
|
}
|
||||||
|
|
||||||
|
HardwareStateManager::~HardwareStateManager()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareStateManager::Finalize()
|
||||||
|
{
|
||||||
|
m_pUtil->Finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HardwareStateManager::CanReadIvs()
|
||||||
|
{
|
||||||
|
return m_pUtil->CanReadIVS();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HardwareStateManager::CanReadSerialNumber()
|
||||||
|
{
|
||||||
|
return m_pUtil->CanReadSerialNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HardwareStateManager::IsBatteryLower()
|
||||||
|
{
|
||||||
|
return m_pUtil->IsBatteryLower();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HardwareStateManager::IsAdapterConnected()
|
||||||
|
{
|
||||||
|
return m_pUtil->IsAdapterConnected();
|
||||||
|
}
|
||||||
|
|
||||||
|
bit32 HardwareStateManager::GetDeviceId()
|
||||||
|
{
|
||||||
|
return m_pUtil->GetDeviceId();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareStateManager::GetIvs(void** ivs, size_t* size)
|
||||||
|
{
|
||||||
|
return m_pUtil->GetIvs(ivs, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
nn::Handle HardwareStateManager::GetMcuHandle()
|
||||||
|
{
|
||||||
|
return m_pUtil->GetMcuHandle();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareStateManager::GetSerialNumber(u8** serial, size_t* size)
|
||||||
|
{
|
||||||
|
return m_pUtil->GetSerialNumber(serial, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareStateManager::GetVersionData(common::VerDef* version)
|
||||||
|
{
|
||||||
|
return m_pUtil->GetVersionData(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: HardwareStateManager.h
|
||||||
|
|
||||||
|
Copyright 2009 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Rev$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef HARDWARESTATEMANAGER_H_
|
||||||
|
#define HARDWARESTATEMANAGER_H_
|
||||||
|
|
||||||
|
#include "Util.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
class HardwareStateManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit HardwareStateManager(Util& hwUtility);
|
||||||
|
virtual ~HardwareStateManager();
|
||||||
|
|
||||||
|
void Finalize();
|
||||||
|
|
||||||
|
bool CanReadIvs();
|
||||||
|
bool CanReadSerialNumber();
|
||||||
|
bool IsBatteryLower();
|
||||||
|
bool IsAdapterConnected();
|
||||||
|
bit32 GetDeviceId();
|
||||||
|
void GetIvs(void** ivs, size_t* size);
|
||||||
|
nn::Handle GetMcuHandle();
|
||||||
|
void GetSerialNumber(u8** serial, size_t* size);
|
||||||
|
void GetVersionData(common::VerDef* version);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Util* m_pUtil;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* HARDWARESTATEMANAGER_H_ */
|
||||||
@ -13,15 +13,31 @@
|
|||||||
$Rev$
|
$Rev$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <nn.h>
|
|
||||||
#include "Util.h"
|
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
|
||||||
|
#include <nn.h>
|
||||||
|
#include <nn/ptm/CTR/ptm_ApiSysmenu.h>
|
||||||
|
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
|
||||||
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
||||||
|
#include <nn/fs/fs_ApiSysSaveData.h>
|
||||||
|
#include <nn/cfg/CTR/cfg_Api.h>
|
||||||
|
#include <nn/cfg/CTR/cfg_ApiInit.h>
|
||||||
|
#include <nn/cfg/CTR/cfg_ApiSys.h>
|
||||||
|
#include <nn/friends.h>
|
||||||
|
#include <nn/friends/CTR/friends_ApiPrivate.h>
|
||||||
|
#include <nn/ps.h>
|
||||||
|
|
||||||
|
#include "Util.h"
|
||||||
|
#include "FileName.h"
|
||||||
|
#include "CommonLogger.h"
|
||||||
|
#include "HeapManager.h"
|
||||||
|
|
||||||
|
|
||||||
namespace common
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
Util::Util()
|
Util::Util() :
|
||||||
|
m_BatteryRemain(100), m_CanReadSerialNumber(false), m_CanReadIvs(false)
|
||||||
{
|
{
|
||||||
// TODO 自動生成されたコンストラクター・スタブ
|
// TODO 自動生成されたコンストラクター・スタブ
|
||||||
|
|
||||||
@ -32,6 +48,89 @@ Util::~Util()
|
|||||||
// TODO Auto-generated destructor stub
|
// TODO Auto-generated destructor stub
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Util::Initialize()
|
||||||
|
{
|
||||||
|
// friendsの初期化
|
||||||
|
nn::Result result = nn::friends::detail::Initialize();
|
||||||
|
|
||||||
|
// mcuの初期化
|
||||||
|
nn::mcu::CTR::InitializeHwCheck(&m_McuSession);
|
||||||
|
mp_Mcu = new nn::mcu::CTR::HwCheck(m_McuSession);
|
||||||
|
|
||||||
|
// 完全性検証SEEDの取得
|
||||||
|
result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND);
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
nn::fs::FileInputStream fis;
|
||||||
|
|
||||||
|
result = fis.TryInitialize(common::IVS_NAND_PATHNAME);
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
s64 fileSize = fis.GetSize();
|
||||||
|
s32 ret;
|
||||||
|
void* addr = NULL;
|
||||||
|
addr = common::HeapManager::GetHeap()->Allocate(fileSize);
|
||||||
|
if (addr != NULL)
|
||||||
|
{
|
||||||
|
mp_Ivs = addr;
|
||||||
|
m_SizeofIvs = fileSize;
|
||||||
|
result = fis.TryRead(&ret, addr, fileSize);
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
m_CanReadIvs = true;
|
||||||
|
}
|
||||||
|
// 後でIVSを参照するのでFreeしない
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fis.Finalize();
|
||||||
|
}
|
||||||
|
// 一旦アンマウントしておく
|
||||||
|
nn::fs::Unmount(common::NAND_ARCHIVE_NAME);
|
||||||
|
|
||||||
|
|
||||||
|
// シリアルナンバーの取得
|
||||||
|
std::memset(m_SerialNo, '\0',
|
||||||
|
nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN);
|
||||||
|
result = nn::cfg::CTR::system::GetSerialNo(m_SerialNo);
|
||||||
|
if(result.IsSuccess())
|
||||||
|
{
|
||||||
|
m_CanReadSerialNumber = true;
|
||||||
|
}
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
AddCheckDigit(reinterpret_cast<char*>(m_SerialNo));
|
||||||
|
|
||||||
|
|
||||||
|
// デバイスIDの取得
|
||||||
|
result = nn::ps::CTR::GetDeviceId(&m_DeviceId);
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
|
// リージョンの取得
|
||||||
|
m_Region = nn::cfg::CTR::GetRegion();
|
||||||
|
|
||||||
|
// バージョンの取得
|
||||||
|
common::GetSystemVersion(&m_VerData, m_Region);
|
||||||
|
|
||||||
|
// MACアドレスの取得
|
||||||
|
nn::nwm::Mac mac;
|
||||||
|
|
||||||
|
result = nn::nwm::GetMacAddress(mac);
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
mac.GetString(m_MacAddress);
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
|
// フレンドコードの取得
|
||||||
|
nn::friends::CTR::FriendKey friendKey;
|
||||||
|
result = nn::friends::CTR::GetMyFriendKey(&friendKey);
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
m_FriendCode = nn::friends::CTR::FriendKeyToFriendCode(friendKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Util::Finalize()
|
||||||
|
{
|
||||||
|
nn::mcu::CTR::FinalizeHwCheck(&m_McuSession);
|
||||||
|
nn::friends::detail::Finalize();
|
||||||
|
}
|
||||||
|
|
||||||
// NULL終端されたシリアルナンバーを受け取る
|
// NULL終端されたシリアルナンバーを受け取る
|
||||||
// NULL終端された場所にチェックデジットを付加して新たにNULL終端する
|
// NULL終端された場所にチェックデジットを付加して新たにNULL終端する
|
||||||
void Util::AddCheckDigit(char* serial)
|
void Util::AddCheckDigit(char* serial)
|
||||||
@ -106,6 +205,111 @@ void Util::GetSaveDataDirectoryRoot(::std::string& sysSaveRoot, void* ivs, size_
|
|||||||
NN_LOG("%s\n", sysSaveRoot.c_str());
|
NN_LOG("%s\n", sysSaveRoot.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Util::IsAdapterConnected()
|
||||||
|
{
|
||||||
|
return nn::ptm::CTR::GetAdapterState() == nn::ptm::CTR::ADAPTERSTATE_CONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Util::IsBatteryLower()
|
||||||
|
{
|
||||||
|
return m_BatteryRemain <= 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Util::CanReadIVS()
|
||||||
|
{
|
||||||
|
return m_CanReadIvs;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Util::CanReadSerialNumber()
|
||||||
|
{
|
||||||
|
return m_CanReadSerialNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Util::GetSerialNumber(u8** serial, size_t* size)
|
||||||
|
{
|
||||||
|
*serial = m_SerialNo;
|
||||||
|
*size = nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8* Util::GetSerialNumber()
|
||||||
|
{
|
||||||
|
return m_SerialNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Util::GetIvs(void** ivs, size_t* size)
|
||||||
|
{
|
||||||
|
*ivs = mp_Ivs;
|
||||||
|
*size = m_SizeofIvs;
|
||||||
|
}
|
||||||
|
|
||||||
|
bit32 Util::GetDeviceId()
|
||||||
|
{
|
||||||
|
return m_DeviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 Util::GetCupMajorVersion()
|
||||||
|
{
|
||||||
|
return m_VerData.cup.majorVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 Util::GetCupMinorVersion()
|
||||||
|
{
|
||||||
|
return m_VerData.cup.minorVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 Util::GetCupMicroVersion()
|
||||||
|
{
|
||||||
|
return m_VerData.cup.microVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 Util::GetNupVersion()
|
||||||
|
{
|
||||||
|
return m_VerData.nup.majorVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
nn::Handle Util::GetMcuHandle()
|
||||||
|
{
|
||||||
|
return m_McuSession;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 Util::GetBatteryRemain()
|
||||||
|
{
|
||||||
|
u8 remain;
|
||||||
|
mp_Mcu->GetBatteryRemain(&remain);
|
||||||
|
return remain;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 Util::GetInfraDeviceId()
|
||||||
|
{
|
||||||
|
bit64 infraDeviceId;
|
||||||
|
infraDeviceId = m_DeviceId + common::INFRA_DEVICE_ID_OFFSET;
|
||||||
|
return infraDeviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 Util::GetFriendcode()
|
||||||
|
{
|
||||||
|
return m_FriendCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
char8* Util::GetMacAddress()
|
||||||
|
{
|
||||||
|
return m_MacAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
nn::cfg::CTR::CfgRegionCode Util::GetRegion()
|
||||||
|
{
|
||||||
|
return m_Region;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* Util::GetRegionCodeA3()
|
||||||
|
{
|
||||||
|
return nn::cfg::GetRegionCodeA3(m_Region);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Util::GetVersionData(common::VerDef* version)
|
||||||
|
{
|
||||||
|
*version = m_VerData;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,12 @@
|
|||||||
#define UTIL_H_
|
#define UTIL_H_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <nn.h>
|
||||||
|
#include <nn/cfg/CTR/cfg_ApiSys.h>
|
||||||
|
#include <nn/mcu.h>
|
||||||
|
#include <nn/nwm.h>
|
||||||
|
|
||||||
|
#include "VersionDetect.h"
|
||||||
|
|
||||||
namespace common
|
namespace common
|
||||||
{
|
{
|
||||||
@ -27,8 +33,76 @@ public:
|
|||||||
Util();
|
Util();
|
||||||
virtual ~Util();
|
virtual ~Util();
|
||||||
|
|
||||||
|
void Initialize();
|
||||||
|
void Finalize();
|
||||||
|
|
||||||
static void AddCheckDigit(char* serial);
|
static void AddCheckDigit(char* serial);
|
||||||
static void GetSaveDataDirectoryRoot(::std::string& sysSaveRoot, void* ivs, size_t size);
|
static void GetSaveDataDirectoryRoot(::std::string& sysSaveRoot, void* ivs, size_t size);
|
||||||
|
|
||||||
|
bool IsAdapterConnected();
|
||||||
|
bool IsBatteryLower();
|
||||||
|
bool CanReadIVS();
|
||||||
|
bool CanReadSerialNumber();
|
||||||
|
void GetSerialNumber(u8** serial, size_t* size);
|
||||||
|
u8* GetSerialNumber();
|
||||||
|
void GetIvs(void** ivs, size_t* size);
|
||||||
|
bit32 GetDeviceId();
|
||||||
|
u8 GetCupMajorVersion();
|
||||||
|
u8 GetCupMinorVersion();
|
||||||
|
u8 GetCupMicroVersion();
|
||||||
|
u8 GetNupVersion();
|
||||||
|
nn::Handle GetMcuHandle();
|
||||||
|
u32 GetBatteryRemain();
|
||||||
|
u64 GetInfraDeviceId();
|
||||||
|
u64 GetFriendcode();
|
||||||
|
char8* GetMacAddress();
|
||||||
|
nn::cfg::CTR::CfgRegionCode GetRegion();
|
||||||
|
const char* GetRegionCodeA3();
|
||||||
|
void GetVersionData(common::VerDef* version);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
NN_PADDING4;
|
||||||
|
// フレンドコード
|
||||||
|
u64 m_FriendCode;
|
||||||
|
|
||||||
|
// バージョン情報
|
||||||
|
common::VerDef m_VerData;
|
||||||
|
|
||||||
|
// mcu接続のためのハンドル
|
||||||
|
nn::Handle m_McuSession;
|
||||||
|
|
||||||
|
// デバイスID
|
||||||
|
bit32 m_DeviceId;
|
||||||
|
|
||||||
|
// IVSへのポインタ
|
||||||
|
void* mp_Ivs;
|
||||||
|
|
||||||
|
// IVSのサイズ
|
||||||
|
size_t m_SizeofIvs;
|
||||||
|
NN_PADDING4;
|
||||||
|
|
||||||
|
// MCUへのポインタ
|
||||||
|
nn::mcu::CTR::HwCheck* mp_Mcu;
|
||||||
|
|
||||||
|
// リージョン
|
||||||
|
nn::cfg::CTR::CfgRegionCode m_Region;
|
||||||
|
|
||||||
|
// バッテリ残量
|
||||||
|
u8 m_BatteryRemain;
|
||||||
|
|
||||||
|
// シリアルナンバーが読めるかどうか
|
||||||
|
bool m_CanReadSerialNumber;
|
||||||
|
|
||||||
|
// IVSが読めるかどうか
|
||||||
|
bool m_CanReadIvs;
|
||||||
|
|
||||||
|
// シリアルナンバー
|
||||||
|
u8 m_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN];
|
||||||
|
|
||||||
|
// MACアドレス
|
||||||
|
char8 m_MacAddress[nn::nwm::Mac::MAC_STRING_SIZE];
|
||||||
|
NN_PADDING3;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user