diff --git a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.bsf b/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.bsf deleted file mode 100644 index 104a94d..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.bsf and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.cpp b/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.cpp deleted file mode 100644 index fcdfb38..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: ConsoleBackup.cpp - - Copyright (C)2009 Nintendo Co., Ltd. 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "demo.h" - -#include -#include - -#include "ConsoleBackup.h" -#include "DrawSystemState.h" -#include "FileName.h" -#include "Controller.h" -#include "SimplePlayer.h" -#include "Exporter.h" -#include "CommonLogger.h" -#include "SDMountManager.h" -#include "HeapManager.h" -#include "PlayHistoryManager.h" -#include "common_Types.h" -#include "VersionDetect.h" -#include "HardwareInfo.h" - -// svnリビジョン埋め込み用 -#include "version.h" -#ifndef BACKUP_VERSION_NUM -#define BACKUP_VERSION_NUM 0 -#endif - -namespace { - -// グラフィックスに割り当てるメモリ -const size_t s_GxHeapSize = 0x800000; - - -// バッテリ残量 -u8 batteryRemain = 100; - -// シリアルナンバー -u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; - -// シリアルナンバーが読めるかどうか -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 - -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; -} - -void GetVersionData(common::VerDef* version) -{ - *version = s_VerData; -} - -nn::Handle GetMcuHandle() -{ - return s_McuSession; -} - - -extern "C" void nnMain(void) -{ - nn::Result result; - - // os の初期化 - nn::os::Initialize(); - - // fs の初期化 - nn::fs::Initialize(); - - // appletの初期化 - nn::applet::Enable( false ); - - // hid の初期化 - result = nn::hid::Initialize(); - NN_UTIL_PANIC_IF_FAILED(result); - - // ndmの初期化 - result = nn::ndm::Initialize(); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - - // デーモンの自律動作を停止 - result = nn::ndm::Suspend(nn::ndm::DN_CEC); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_BOSS); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_FRIENDS); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_NIM); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - - // cfg の初期化 - nn::cfg::CTR::init::Initialize(); - nn::cfg::CTR::system::Initialize(); - - // 時計設定用ptm初期化 - nn::ptm::CTR::InitializeForSystemMenu(); - - // ps の初期化 - nn::ps::Initialize(); - - // friendsの初期化 - result = nn::friends::detail::Initialize(); - - // mcuの初期化 - nn::mcu::CTR::InitializeHwCheck(&s_McuSession); - - nn::mcu::CTR::HwCheck mcu(s_McuSession); - - // ヒープの確保 - common::HeapManager::GetHeap()->Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); - - // RenderSystem の準備 - uptr heapForGx = reinterpret_cast(common::HeapManager::GetHeap()->Allocate(s_GxHeapSize)); - demo::RenderSystemDrawing s_RenderSystem; - s_RenderSystem.Initialize(heapForGx, s_GxHeapSize); - - // サウンドスレッドの起動 - common::InitializeSimplePlayer(); - - // ログ描画の初期化 - common::Logger::GetLoggerInstance()->Initialize(CONSOLE_WIDTH, CONSOLE_HEIGHT, CONSOLE_MAX_LINE, &s_RenderSystem); - - // RenderSystemを作ってからログが出せる - common::Logger::InitializeEjectThread(); - common::Logger::SetEjectHandler(OnSdEjected); - // 起動時に削除 - common::Logger::GetLoggerInstance()->ClearLog(); - - COMMON_LOGGER("\n"); - COMMON_LOGGER("CTR Console Backup start\n"); - - // ボタン入力 - nn::hid::PadReader s_PadReader; - nn::hid::PadStatus padStatus; - - // データの準備 - - // 完全性検証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) - { - 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::HardwareInfo hwInfo; - hwInfo.AddCheckDigit(reinterpret_cast(s_SerialNo)); - - // デバイスIDの取得 - bit32 deviceId; - result = nn::ps::CTR::GetDeviceId(&deviceId); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - bit64 infraDeviceId; - result = nn::nim::CTR::InitializeForShop(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::Shop::GetInfraDeviceId(deviceId, &infraDeviceId); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::FinalizeForShop(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // 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("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion, - s_VerData.nup.majorVersion); - COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region)); - COMMON_LOGGER("Serial Number %s\n", s_SerialNo); - COMMON_LOGGER("Device ID %llu\n", infraDeviceId); - COMMON_LOGGER("MAC Address %s\n", macAddress); - COMMON_LOGGER("Friend Code %04u-%04u-%04u\n", - static_cast(friendCode / 100000000ULL % 10000ULL), - static_cast(friendCode / 10000ULL % 10000ULL), - static_cast(friendCode % 10000ULL) ); - - - bool flip = false; - bool continueBackup = false; - - for(;;) - { - bool nextStep = false; - s_PadReader.ReadLatest(&padStatus); - - // AまたはSTARTボタンで進行 - if(padStatus.trigger & nn::hid::BUTTON_A || - padStatus.trigger & nn::hid::BUTTON_START) - { - nextStep = true; - } - - // LまたはRボタンで上下画面フリップ - if(padStatus.trigger & nn::hid::BUTTON_R || - padStatus.trigger & nn::hid::BUTTON_L) - { - flip = !flip; - } - - // コンソールスクロール - if(padStatus.hold & nn::hid::BUTTON_UP) - { - common::Logger::GetLoggerInstance()->ScrollUp(); - } - - // コンソールスクロール - if(padStatus.hold & nn::hid::BUTTON_DOWN) - { - common::Logger::GetLoggerInstance()->ScrollDown(); - } - - if(padStatus.hold & nn::hid::BUTTON_LEFT) - { - common::Logger::GetLoggerInstance()->ScrollToBegin(); - } - - if(padStatus.hold & nn::hid::BUTTON_RIGHT) - { - common::Logger::GetLoggerInstance()->ScrollToEnd(); - } - - - // 情報更新 - // バッテリ - mcu.GetBatteryRemain(&batteryRemain); - // ACアダプタ - std::string adapterState; - if(IsAdapterConnected()) - { - adapterState += ::std::string("Connected"); - } - else - { - adapterState += ::std::string("Not Connected"); - } - - // 操作用メッセージ - // 進捗確認メッセージを兼ねる? - ::std::vector operationMessage; - - ControlState(operationMessage, nextStep, continueBackup); - - nn::util::FloatColor titleColor; - - titleColor.r = 0.3f; - titleColor.g = 0.f; - titleColor.b = 0.2f; - - // 上画面表示 - common::DrawSystemState("CTR Console Backup", - s_RenderSystem, - titleColor, - flip, - adapterState, - BACKUP_VERSION_NUM, - &s_VerData, - batteryRemain, - infraDeviceId, - friendCode, - GetProgress(), - macAddress, - operationMessage, - region, - s_SerialNo - ); - - s_RenderSystem.SwapBuffers(); - - // デフォルトで下画面に描画するもの - s_RenderSystem.SetRenderTarget(common::GetRenderTarget(NN_GX_DISPLAY1, flip)); - if(IsBackupSucceeded()) - { - s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR); - } - if(IsBackupFailed()) - { - s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR); - } - s_RenderSystem.Clear(); - s_RenderSystem.SetColor(1.f, 1.f, 1.f); - - common::Logger::GetLoggerInstance()->DrawConsole(); - s_RenderSystem.SwapBuffers(); - - - s_RenderSystem.WaitVsync(NN_GX_DISPLAY_BOTH); - - // 電源長押しで終了 - if ( nn::applet::IsExpectedToCloseApplication()) - { - common::Logger::GetLoggerInstance()->Finalize(); - // アンマウント - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - nn::fs::Unmount(common::SDMC_ARCHIVE_NAME); - s_RenderSystem.Finalize(); - - nn::mcu::CTR::FinalizeHwCheck(&s_McuSession); - nn::friends::detail::Finalize(); - nn::ps::Finalize(); - nn::ptm::CTR::FinalizeForSystemMenu(); - nn::cfg::CTR::system::Finalize(); - nn::cfg::CTR::init::Finalize(); - nn::hid::Finalize(); - nn::fs::Finalize(); - - nn::applet::PrepareToCloseApplication(); - nn::applet::CloseApplication(); - } - } -} - - -} diff --git a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.h b/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.h deleted file mode 100644 index 75f71c5..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.h +++ /dev/null @@ -1,41 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: ConsoleBackup.h - - Copyright (C)2009 Nintendo Co., Ltd. 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 NN_CONSOLEBACKUP_H_ -#define NN_CONSOLEBACKUP_H_ - -#include -#include "VersionDetect.h" - -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); - -const u32 CONSOLE_WIDTH = 38; -const u32 CONSOLE_HEIGHT = 24; -const u32 CONSOLE_MAX_LINE = 1000; - -} - -/* NN_CONSOLEBACKUP_H_ */ -#endif diff --git a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.rsf b/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.rsf deleted file mode 100644 index a30132a..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/ConsoleBackup.rsf +++ /dev/null @@ -1,52 +0,0 @@ -BasicInfo: - Title : ConsoleBackup - ProductCode: ConsoleBackup - BackupMemoryType: None - -TitleInfo: - Use: Evaluation - Category: Application - UniqueId: 0xf8021 - Version: 0 - -SystemControlInfo: - AppType : Application - StackSize : 0x4000 - Dependency : - - gpio - - pdn - - spi - - i2c - - mcu - - ptm - - codec - - cfg - - hid - - gsp - - friends - - nim - - ac - - ndm - -AccessControlInfo: - Priority : 16 - DisableDebug : true - - FileSystemAccess: - - DirectSdmc - - Debug - - Core - - CategoryFileSystemTool - - IoAccessControl: - - FsMountCardSpi - - FsMountNand - - FsMountTwln - -Option: - FreeProductCode: true - - -Rom: - # ROM に含めるファイルシステムのルートパスを指定します。 - HostRoot: "$(ROMFS_ROOT)" \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleBackup/Controller.cpp b/branches/work/SD_AesCmac/ConsoleBackup/Controller.cpp deleted file mode 100644 index 32cd6b5..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/Controller.cpp +++ /dev/null @@ -1,313 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Controller.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 "Controller.h" -#include "FileChecker.h" -#include "ConsoleBackup.h" -#include "Exporter.h" -#include "SimplePlayer.h" -#include "CommonLogger.h" - -#include - -namespace ConsoleBackup -{ - -namespace -{ - -typedef enum BackupState -{ - STARTUP, // 初期値 - EXPORT_TWL_SOUND, // TWLサウンド領域の吸出し中 - EXPORT_TWL_PHOTO, // TWL写真領域の吸出し中 - EXPORT_CTR_NAND, // 吸出し中 - DELETE_NIM, // nimのシステムセーブデータ削除 - DONE, // 吸出し完了 - FINISHED, // SDカード抜き完了 - FAIL // 失敗 -} BackupState; - - -// APSettingの書式が無い警告サウンドを鳴らしたかどうか -bool s_ExistAPSettingAnnotation = false; -// SDに書き込みできない警告サウンドを鳴らしたかどうか -bool s_SdWriteProetctAnnotation = false; - -BackupState s_BackupState = STARTUP; -bool s_PlayedStartCursor = false; -bool s_PlayedSdPullOutCursor = false; -bool s_PlayedFinishedSound = false; -bool s_PlayedFailSound = false; - -} // namespace - -bool NeedsAcAdateper() -{ - return IsBatteryLower() && !IsAdapterConnected(); -} - -void ControlState(::std::vector& operationMessage, bool& nextStep, bool& continueBackup) -{ - // 状態遷移Controller - switch (s_BackupState) - { - - // 起動時 - case STARTUP: - { - bool error = false; - // 完全性検証SEEDを読めるか? - if (CanReadIVS()) - { - // SDカードが挿入されているか? - if (nn::fs::IsSdmcInserted()) - { - // SDカードに書き込みできるか? - if (!nn::fs::IsSdmcWritable()) - { - if (!s_SdWriteProetctAnnotation) - { - s_SdWriteProetctAnnotation = true; - common::PlaySound(common::SOUND_ANNOTATION); - } - operationMessage.push_back(::std::string("Can*t Write SD Card!!\n")); - break; - } - - // 無線設定ファイルがあるか? - if (common::ExistsAPSetting()) - { - // 書き込み中に抜かないように - if (nextStep) - { - // シリアルナンバーを読み取れるか? - if (!CanReadSerialNumber()) - { - common::PlaySound(common::SOUND_ANNOTATION); - COMMON_LOGGER("Can't Read Serial Number\n"); - } - } - } - else - { - error = true; - if (!s_ExistAPSettingAnnotation) - { - s_ExistAPSettingAnnotation = true; - common::PlaySound(common::SOUND_ANNOTATION); - } - operationMessage.push_back(::std::string("Accsess_Point_Setting does not exist!")); - } - } - else - { - error = true; - operationMessage.push_back(::std::string("Insert SD Card!!")); - } - } - else - { - error = true; - operationMessage.push_back(::std::string("Can't Read IVS!!")); - } - - // ACアダプタが必要か? - if (NeedsAcAdateper()) - { - error = true; - operationMessage.push_back(::std::string("Connect AC Adapter!!")); - } - - // エラーが無ければ進行用メッセージ表示 - if(!error) - { - operationMessage.push_back(::std::string("Push A or START Button")); - if(!s_PlayedStartCursor) - { - common::PlaySound(common::SOUND_CURSOR); - s_PlayedStartCursor = true; - } - } - - if (nextStep && !error) - { - COMMON_LOGGER("Start Export Data\n"); - s_BackupState = EXPORT_TWL_SOUND; - } - } - break; - - // TWLサウンド領域の吸出し中 - case EXPORT_TWL_SOUND: - { - static bool init = true; - if(init) - { - // データを書き込む - ExportTwlSoundData(); - init = false; - } - - // 処理が完了した - if (IsExportFinished()) - { - FinalizeExportThread(); - s_BackupState = EXPORT_TWL_PHOTO; - } - } - break; - - // TWL写真領域の吸出し中 - case EXPORT_TWL_PHOTO: - { - static bool init = true; - if(init) - { - // データを書き込む - ExportTwlPhotoData(); - init = false; - } - - // 処理が完了した - if (IsExportFinished()) - { - FinalizeExportThread(); - s_BackupState = EXPORT_CTR_NAND; - } - } - break; - - // 吸出し中 - case EXPORT_CTR_NAND: - { - continueBackup = true; - - // ACアダプタが必要か? - if (NeedsAcAdateper()) - { - continueBackup = false; - operationMessage.push_back(::std::string("Connect AC Adapter!!")); - } - - // データを書き込む - ExportData(); - - // 処理が完了した - if (continueBackup && IsExportFinished()) - { - FinalizeExportThread(); - COMMON_LOGGER("Export NAND Data Finished.\n"); - - if(GetProgress() > 99) - { - s_BackupState = DELETE_NIM; - } - else - { - s_BackupState = FAIL; - } - - } - } - break; - - // nimのシステムセーブデータ削除 - case DELETE_NIM: - { - DeleteNimSaveData(); - s_BackupState = DONE; - } - break; - - // 吸出し完了 - case DONE: - { - operationMessage.push_back(::std::string("Backup Done. Pull Out SD Card.")); - if(!s_PlayedSdPullOutCursor) - { - common::PlaySound(common::SOUND_CURSOR); - s_PlayedSdPullOutCursor = true; - } - } - break; - - // SDカード抜き完了 - case FINISHED: - { - operationMessage.push_back(::std::string("Backup Succeeded!!\n")); - if(!s_PlayedFinishedSound) - { - common::PlaySound(common::SOUND_OK); - s_PlayedFinishedSound = true; - } - } - break; - - // 吸出し失敗 - case FAIL: - { - operationMessage.push_back(::std::string("Backup Failed.")); - if(!s_PlayedFailSound) - { - common::PlaySound(common::SOUND_NG); - s_PlayedFailSound = true; - } - } - break; - - } -} - -bool InProgress() -{ - return s_BackupState == EXPORT_CTR_NAND; -} - -bool IsBackupSucceeded() -{ - return s_BackupState == FINISHED; -} - -bool IsBackupFailed() -{ - return s_BackupState == FAIL; -} - -void OnSdEjected() -{ - if(s_BackupState == DONE || s_BackupState == FINISHED) - { - s_BackupState = FINISHED; - } - else - { - common::InitializeFileCheck(); - InitializeState(); - } -} - -void InitializeState() -{ - s_BackupState = STARTUP; - s_PlayedFailSound = false; - s_PlayedFinishedSound = false; - s_ExistAPSettingAnnotation = false; - s_PlayedStartCursor = false; - s_PlayedSdPullOutCursor = false; - s_SdWriteProetctAnnotation = false; -} - -} // namespace ConsoleBackup diff --git a/branches/work/SD_AesCmac/ConsoleBackup/Controller.h b/branches/work/SD_AesCmac/ConsoleBackup/Controller.h deleted file mode 100644 index d7f2cbf..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/Controller.h +++ /dev/null @@ -1,34 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Contoroller.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 CONTOROLLER_H_ -#define CONTOROLLER_H_ - -#include -#include - -namespace ConsoleBackup -{ - -void ControlState(::std::vector& operationMessage, bool& nextStep, bool& continueBackup); -bool InProgress(); -bool IsBackupSucceeded(); -bool IsBackupFailed(); -void OnSdEjected(); -void InitializeState(); - -} - -#endif /* CONTOROLLER_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleBackup/Exporter.cpp b/branches/work/SD_AesCmac/ConsoleBackup/Exporter.cpp deleted file mode 100644 index f857ebe..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/Exporter.cpp +++ /dev/null @@ -1,558 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Exporter.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 -#include -#include -#include -#include -#include -#include -#include -#include // cfg:norの初期化に必要 -#include -#include -#include -#include -#include - -#include "Exporter.h" -#include "CommonLogger.h" -#include "SDMountManager.h" -#include "ConsoleBackup.h" -#include "HeapManager.h" -#include "SdReaderWriter.h" -#include "FileName.h" -#include "FileTransfer.h" -#include "common_Types.h" -#include "Aes_define.h" -#include "PlayHistoryManager.h" -#include "VersionDetect.h" - -namespace ConsoleBackup -{ - -namespace -{ - -common::SdReaderWriter s_SdWriter; -common::NtrNorData s_NtrNorData; -common::CfgCountryLanguage s_CountryLanguage; - -::std::string s_SysSaveRoot; - -const size_t EXPORT_THREAD_STACK_SIZE = 0x4000; -nn::os::Thread s_ExportThread; -nn::os::StackBuffer s_ExportThreadStack; - -wchar_t s_RootName[256]; - -} - -void DeleteTrash(std::wstring currentDirectory) -{ - // TODO: リードオンリーのファイルが消去できない - - COMMON_LOGGER("Delete Trash.\n"); - - nn::fs::FileInputStream fis; - nn::fs::Directory dir; - nn::Result result; - std::vector entryList; //カレントディレクトリのエントリ一覧を格納 - std::vector::iterator entryIndex; - - common::SdMountManager::Mount(); - - result = dir.TryInitialize(currentDirectory.c_str()); - - if (result.IsSuccess()) - { - nn::fs::DirectoryEntry entry; - s32 numEntry; - for (;;) - { - result = dir.TryRead(&numEntry, &entry, 1); - if (result.IsFailure()) - { - dir.Finalize(); - } - if (numEntry == 0) - { - // ルートディレクトリを閉じる - dir.Finalize(); - - // ルートディレクトリの子を開く - for (entryIndex = entryList.begin(); entryIndex != entryList.end(); entryIndex++) - { - // ディレクトリなら削除する - if (entryIndex->attributes.isDirectory) - { - NN_LOG("Try Delete %ls%ls/\n", currentDirectory.c_str(), entryIndex->entryName); - result = nn::fs::TryDeleteDirectoryRecursively((currentDirectory + ::std::wstring( - entryIndex->entryName)).c_str()); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - } - // ファイルならログとAP設定以外は削除する - else - { - if (std::wcscmp(entryIndex->entryName, common::AP_SETTING_FILENAME) != 0 && std::wcscmp( - entryIndex->entryName, common::LOG_FILENAME) != 0) - { - NN_LOG("Try Delete %ls%ls\n", currentDirectory.c_str(), entryIndex->entryName); - result = nn::fs::TryDeleteFile( - (currentDirectory + ::std::wstring(entryIndex->entryName)).c_str()); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - } - } - - // 削除完了 - break; - } - else - { - // vectorに保存する - entryList.push_back(entry); - if (entry.attributes.isDirectory) - { - NN_LOG("%ls%ls/\n", currentDirectory.c_str(), entry.entryName); - } - else - { - NN_LOG("%ls%ls\n", currentDirectory.c_str(), entry.entryName); - } - } - } - } - else - { - NN_LOG("failed initialize directory\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - dir.Finalize(); - } - - common::SdMountManager::Unmount(); -} - -void WriteRegionData() -{ - COMMON_LOGGER("Export Region Data.\n"); - - nn::cfg::CTR::CfgRegionCode region; - region = nn::cfg::CTR::GetRegion(); - - s_SdWriter.WriteBufWithCmac(common::REGION_DATA_PATHNAME, ®ion, sizeof(nn::cfg::CTR::CfgRegionCode)); -} - -void WriteCountryLanguageData() -{ - COMMON_LOGGER("Export Country and Language Data.\n"); - - nn::Result result; - - nn::cfg::nor::CTR::Initialize(); - - // 国設定 - s_CountryLanguage.country = nn::cfg::CTR::GetCountry(); - if (s_CountryLanguage.country != nn::cfg::CTR::CFG_COUNTRY_UNKNOWN) - { - // 言語設定 - s_CountryLanguage.language = nn::cfg::CTR::GetLanguage(); - - s_SdWriter.WriteBufWithCmac(common::COUNTRY_SETTING_PATHNAME, &s_CountryLanguage, sizeof(s_CountryLanguage)); - } -} - -void WriteNorData() -{ - COMMON_LOGGER("Export NOR Data.\n"); - - nn::Result result; - - nn::cfg::nor::CTR::Initialize(); - - NN_LOG("Get NTR User Setting\n"); - - // NTR設定 - result = nn::cfg::nor::CTR::GetNtrSetting(&s_NtrNorData.ntrConfig.ncd, &s_NtrNorData.ntrConfig.ncd_ex); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // TWL WiFi設定 - result = nn::cfg::nor::CTR::ReadTwlWifiSetting(0, s_NtrNorData.TwlWiFiSetting, common::TWL_WIFI_SETTING_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // NTR WiFi設定 - result = nn::cfg::nor::CTR::ReadNtrWifiSetting(0, s_NtrNorData.NtrWiFiSetting, common::NTR_WIFI_SETTING_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - s_SdWriter.WriteBufWithCmac(common::NOR_PATHNAME, &s_NtrNorData, sizeof(common::NtrNorData)); -} - -void WriteSerialNumber() -{ - COMMON_LOGGER("Export Serial Number.\n"); - - u8* serial; - size_t size; - GetSerialNumber(&serial, &size); - - s_SdWriter.WriteBufWithCmac(common::SERIAL_PATHNAME, serial, size); -} - -void WriteIvs() -{ - COMMON_LOGGER("Export IVS.\n"); - - bit8 iv[AES_BLOCK_SIZE] = - { - 0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f, - 0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9 - }; - - void* ivs; - size_t size; - GetIvs(&ivs, &size); - - void* enc; - nn::Result result; - enc = common::HeapManager::GetHeap()->Allocate(size); - if(enc != NULL) - { - // AES暗号化する - nn::crypto::Initialize(); - - nn::crypto::SwAesCtrContext swAesCtrContest; - - swAesCtrContest.Initialize(iv, common::key, sizeof(common::key)); - swAesCtrContest.Encrypt(enc, ivs, size); - - s_SdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size); - - common::HeapManager::GetHeap()->Free(enc); - } -} - -// IVSからセーブデータディレクトリ名を生成する -void GetSaveDataDirectoryRoot() -{ - nn::Result result; - using namespace nn::dbg; - - const size_t SEED_SIZE = 16; - bit8 hash[nn::crypto::Sha256Context::HASH_SIZE]; - const size_t SYS_SAVE_ROOT_LENGTH = 16; - char rootHash[SYS_SAVE_ROOT_LENGTH]; - char rootStr[SYS_SAVE_ROOT_LENGTH * 2 + 1]; - - void* addr; - size_t size; - GetIvs(&addr, &size); - - // 最後の16バイトのハッシュを使う - nn::crypto::CalculateSha256(hash, &reinterpret_cast (addr)[size - SEED_SIZE], SEED_SIZE); - - for (u8 i = 0; i < SEED_SIZE / 4; i++) - { - for (u8 j = 0; j < SEED_SIZE / 4; j++) - { - rootHash[i * 4 + j] = hash[i * 4 + 3 - j]; - } - } - - // 得られたハッシュから文字列を生成 - for (s32 k = 0; k < SEED_SIZE; k++) - { - for (s32 i = 6; i < 8; ++i) - { - bit32 n = (rootHash[k] >> ((7 - i) * 4)) & 0xf; - NN_TASSERT_(n < 16); - rootStr[i - 6 + k * 2] = static_cast (n < 10 ? '0' + n : 'a' + (n - 10)); - } - } - rootStr[SYS_SAVE_ROOT_LENGTH * 2] = '\0'; - - // セーブデータディレクトリ名を保存する - s_SysSaveRoot = ::std::string(rootStr); - - NN_LOG("%s\n", s_SysSaveRoot.c_str()); -} - -void CreateTwlDirectory(enum common::TWL_PATH_INDEX path) -{ - NN_ASSERT(path < common::TWL_PATHNAME_MAX); - - s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + - std::wstring(common::SD_TWL_ROOTNAME_TABLE[path])).c_str()); -} - -void WriteTwlData(enum common::TWL_PATH_INDEX path) -{ - NN_ASSERT(path < common::TWL_PATHNAME_MAX); - - nn::Result result; - - result = nn::fs::MountSpecialArchive(common::TWL_ARCHIVE_NAME_TABLE[path], common::TWL_FS_ARCHIVE_KIND[path]); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = common::SdMountManager::Mount(); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - u32 fileNum = 0; - u32 fileSize = 0; - common::CalculateFileNum(::std::wstring(common::NAND_TWL_ROOT_PATHNAME_WITH_SLASH_TABLE[path]), fileNum, fileSize); - - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - - NN_LOG("File Number = %d\n", fileNum); - NN_LOG("File Size = %d\n", fileSize); - // 進捗表示用 - common::InitializeTransferProgress(fileSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - wchar_t archiveName[256]; - ::std::mbstowcs(archiveName, common::TWL_ARCHIVE_NAME_TABLE[path], std::strlen(common::TWL_ARCHIVE_NAME_TABLE[path]) + 1); - std::wstring archiveString(archiveName); - common::CopyDirectory( - (archiveString + ::std::wstring(L"/")).c_str(), - (common::SDMC_ROOT_DIRECTORY_PATH + ::std::wstring(common::SD_TWL_ROOTNAME_TABLE[path])).c_str(), - buf, bufSize); - - common::HeapManager::GetHeap()->Free(buf); - } - - common::SdMountManager::Unmount(); - nn::fs::Unmount(common::TWL_ARCHIVE_NAME_TABLE[path]); - -} - -void WriteTwlPhotoData() -{ - COMMON_LOGGER("Export Twl Photo Data.\n"); - CreateTwlDirectory(common::TWL_PHOTO); - WriteTwlData(common::TWL_PHOTO); -} - -void WriteTwlSoundData() -{ - COMMON_LOGGER("Export Twl Sound Data.\n"); - CreateTwlDirectory(common::TWL_SOUND); - WriteTwlData(common::TWL_SOUND); -} - -void ExportTwlPhotoData() -{ - s_ExportThread.Start(WriteTwlPhotoData, s_ExportThreadStack); -} - -void ExportTwlSoundData() -{ - // 不要なデータを削除する - DeleteTrash(common::SDMC_ROOT_DIRECTORY_PATH); - - s_ExportThread.Start(WriteTwlSoundData, s_ExportThreadStack); -} - - -void WriteMcuRtcData() -{ - COMMON_LOGGER("Export RTC Data.\n"); - nn::Result result; - nn::Handle handle = GetMcuHandle(); - - if(handle.IsValid()) - { - nn::mcu::CTR::HwCheck mcu(handle); - - nn::mcu::CTR::RtcData rtc; - result = mcu.GetRtcAll(&rtc); - NN_LOG("RTC = 20%02d/%02d/%02d %02d:%02d:%02d\n", rtc.m_Year, rtc.m_Month, rtc.m_Day, rtc.m_Hour, rtc.m_Minute, rtc.m_Second); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - s_SdWriter.WriteBufWithCmac(common::MCU_RTC_PATHNAME, &rtc, sizeof(rtc)); - } - else - { - NN_LOG("invalid handle\n"); - } -} - -void ExportThreadFunc() -{ - nn::Result result; - - result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = common::SdMountManager::Mount(); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - - common::CopyDirectory( - (::std::wstring(common::NAND_DATA_ROOT_PATHNAME_WITH_SLASH) + ::std::wstring(s_RootName) + ::std::wstring(L"/")).c_str(), - (common::SDMC_ROOT_DIRECTORY_PATH + ::std::wstring(common::SD_SAVEDATA_ROOT_NAME) + ::std::wstring(s_RootName) + ::std::wstring(L"/")).c_str(), - buf, bufSize); - - common::HeapManager::GetHeap()->Free(buf); - } - - common::SdMountManager::Unmount(); - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - - NN_LOG("Export Thread Finalize\n"); -} - -nn::Result WriteSaveData() -{ - // NANDからSDカードに書き出し - nn::Result result; - - result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - u32 fileNum = 0; - u32 fileSize = 0; - common::CalculateFileNum(::std::wstring(common::NAND_DATA_ROOT_PATHNAME_WITH_SLASH), fileNum, fileSize); - - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - - NN_LOG("File Number = %d\n", fileNum); - NN_LOG("File Size = %d\n", fileSize); - // 進捗表示用 - common::InitializeTransferProgress(fileSize); - - ::std::mbstowcs(s_RootName, s_SysSaveRoot.c_str(), s_SysSaveRoot.size() + 1); - - NN_LOG("%ls\n", (::std::wstring(common::NAND_DATA_ROOT_PATHNAME_WITH_SLASH) + ::std::wstring(s_RootName) + ::std::wstring(L"/")).c_str()); - - // セーブデータディレクトリ以下のデータをSDカードにコピー - // コピー用ディレクトリ作成 - s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring( - common::SD_SAVEDATA_ROOT_NAME)).c_str()); - s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring( - common::SD_SAVEDATA_ROOT_NAME) + ::std::wstring(s_RootName) + ::std::wstring(L"/")).c_str()); - - COMMON_LOGGER("Export NAND Data Start...\n"); - - // SDにコピーするためのスレッドの作成 - s_ExportThread.Start(ExportThreadFunc, s_ExportThreadStack); - - return result; -} - -void FinalizeExportThread() -{ - s_ExportThread.Join(); - s_ExportThread.Finalize(); -} - -void WriteVersionData() -{ - COMMON_LOGGER("Export Version Data.\n"); - - common::VerDef versionData; - GetVersionData(&versionData); - - s_SdWriter.WriteBufWithCmac(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef)); -} - -void WritePlayHistory() -{ - common::PlayHistoryManager historyManager; - - COMMON_LOGGER("Export PlayHistory\n"); - historyManager.Export(); -} - -void DeleteNimSaveData() -{ - nn::Result result; - ::std::wstring nimSaveDataPath = - ::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + - ::std::wstring(common::SD_SAVEDATA_ROOT_NAME) + - ::std::wstring(s_RootName) + - ::std::wstring(L"/") + - std::wstring(common::NIM_SAVEDATA_DIRECTORY_NAME); - - common::SdMountManager::Mount(); - - NN_LOG("%ls\n", nimSaveDataPath.c_str()); - result = nn::fs::TryDeleteDirectoryRecursively(nimSaveDataPath.c_str()); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - common::SdMountManager::Unmount(); -} - - -void ExportData() -{ - static bool init = true; - - if (init) - { - // リージョンデータをSDに書き込む - WriteRegionData(); - - // 国データと言語データをSDに書き込む - WriteCountryLanguageData(); - - // NORデータをSDカードに書き込む - WriteNorData(); - - // シリアルナンバーをSDカードに書き込む - WriteSerialNumber(); - - // 完全性検証SEEDをSDカードに書き込む - WriteIvs(); - - // IVSからセーブデータディレクトリ名を計算 - GetSaveDataDirectoryRoot(); - - // プレイ履歴をSDに書き出す - //WritePlayHistory(); - - // RTCをSDに書き出す - WriteMcuRtcData(); - - // バージョン情報をSDに書き出す - WriteVersionData(); - - // NANDのセーブデータをSDに書き出す - WriteSaveData(); - - init = false; - } -} - -u32 GetProgress() -{ - return common::GetProgress(); -} - -bool IsExportFinished() -{ - return !s_ExportThread.IsAlive(); -} - -} diff --git a/branches/work/SD_AesCmac/ConsoleBackup/Exporter.h b/branches/work/SD_AesCmac/ConsoleBackup/Exporter.h deleted file mode 100644 index 216a277..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/Exporter.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Exporter.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 EXPORTER_H_ -#define EXPORTER_H_ - -#include - -namespace ConsoleBackup -{ - -void ExportTwlPhotoData(); -void ExportTwlSoundData(); -void ExportData(); -void DeleteNimSaveData(); - -u32 GetProgress(); -bool IsExportFinished(); -void FinalizeExportThread(); - - -} - -#endif /* EXPORTER_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleBackup/OMakefile b/branches/work/SD_AesCmac/ConsoleBackup/OMakefile deleted file mode 100644 index b152d3d..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/OMakefile +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env omake -#---------------------------------------------------------------------------- -# Project: Horizon -# File: OMakefile -# -# Copyright (C)2009 Nintendo Co., Ltd. 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$ -#---------------------------------------------------------------------------- -SUPPORTED_TARGETS = CTR-T*.Process.MPCore.* -#MAKECSU = true -#INSTALL_SDK_TOOL = true -CTR_APPTYPE = BOTH -CTR_MAKE_DEVELOPMENT_IMAGE = true - -TARGET_PROGRAM = ConsoleBackup - -SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include) -INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \ - ../common - -SOURCES[] = - ConsoleBackup.cpp - Controller.cpp - Exporter.cpp - ../common/HardwareInfo.cpp - ../common/DrawSystemState.cpp - ../common/FileTransfer.cpp - ../common/FileChecker.cpp - ../common/SdReaderWriter.cpp - ../common/HeapManager.cpp - ../common/SdLogger.cpp - ../common/wave.cpp - ../common/SimplePlayer.cpp - ../common/LogConsole.cpp - ../common/CommonLogger.cpp - ../common/SdMountManager.cpp - ../common/PlayHistoryManager.cpp - ../common/VersionDetect.cpp - -CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf - -ROMFS_ROOT = ../common/romfiles - -LIBS += libnn_cfg \ - libnn_driversEeprom \ - libnn_driversi2c \ - libnn_driversCal \ - libnn_crypto \ - libnn_driversCodec \ - libnn_spi \ - libnn_gpio \ - libnn_pdn \ - libnn_mcu \ - libnn_i2c \ - libnn_driversCamera \ - libnn_ps \ - libnn_driversRsa \ - lib_demo \ - libnn_nwm \ - libnn_friends \ - libnn_nim \ - -INSTALL_SDK_TOOL = true - -ROM_SPEC_FILE = $(TARGET_PROGRAM).rsf -DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/_private/RepairTool.desc - -include $(ROOT_OMAKE)/modulerules - -VERSION_H = $(file version.h) - -$(VERSION_H): $(SOURCES) - section - bash genversion.sh - -RequireSetup($(VERSION_H)) -build: $(VERSION_H) $(DEFAULT_TARGETS) diff --git a/branches/work/SD_AesCmac/ConsoleBackup/banner/model.cbmd b/branches/work/SD_AesCmac/ConsoleBackup/banner/model.cbmd deleted file mode 100644 index f1c7b62..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleBackup/banner/model.cbmd and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleBackup/banner/sound.cbsd b/branches/work/SD_AesCmac/ConsoleBackup/banner/sound.cbsd deleted file mode 100644 index f1c7b62..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleBackup/banner/sound.cbsd and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown24x24.ctpk b/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown24x24.ctpk deleted file mode 100644 index 794b136..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown24x24.ctpk +++ /dev/null @@ -1 +0,0 @@ -888yyYyYyyyYyyYyyyyYyYy8 \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown48x48.ctpk b/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown48x48.ctpk deleted file mode 100644 index 8c7da16..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/banner/unknown48x48.ctpk +++ /dev/null @@ -1 +0,0 @@ -Y8888ƺ8888YYyyYYޚ޺yY8YyYYޚyY8ޚ8 \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleBackup/genversion.sh b/branches/work/SD_AesCmac/ConsoleBackup/genversion.sh deleted file mode 100755 index 180bd87..0000000 --- a/branches/work/SD_AesCmac/ConsoleBackup/genversion.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -f - -echo "#define BACKUP_VERSION_NUM \"`svnversion -n`\"" > version.h diff --git a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.bsf b/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.bsf deleted file mode 100644 index 104a94d..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.bsf and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.cpp b/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.cpp deleted file mode 100644 index 4e5e69a..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.cpp +++ /dev/null @@ -1,462 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: ConsoleRestore.cpp - - Copyright (C)2009 Nintendo Co., Ltd. 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "demo.h" - -#include -#include - -#include "ConsoleRestore.h" -#include "DrawSystemState.h" -#include "Controller.h" -#include "SimplePlayer.h" -#include "CommonLogger.h" -#include "SDMountManager.h" -#include "HeapManager.h" -#include "VersionDetect.h" -#include "HardwareInfo.h" - -// svnリビジョン埋め込み用 -#include "version.h" -#ifndef RESTORE_VERSION_NUM -#define RESOTRE_VERSION_NUM 0 -#endif - -namespace { - -// グラフィックスに割り当てるメモリ -const size_t s_GxHeapSize = 0x800000; - -demo::RenderSystemDrawing s_RenderSystem; -nn::Handle s_McuSession; - -// バッテリ残量 -u8 batteryRemain = 100; - -// シリアルナンバー -u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; - -// シリアルナンバーが読めるかどうか -bool s_CanReadSerialNumber = false; - -// IVSへのポインタ -void* sp_Ivs; - -size_t s_SizeofIvs; - -// IVSが読めるかどうか -bool s_CanReadIvs = false; - -// バージョン情報 -common::VerDef s_VerData; - -} // namespace - -namespace ConsoleRestore{ - -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; -} - -void GetVersionData(common::VerDef* version) -{ - *version = s_VerData; -} - -void FinalizeAll() -{ - common::Logger::GetLoggerInstance()->Finalize(); - // アンマウント - nn::fs::Unmount("nand:"); - nn::fs::Unmount("sdmc:"); - s_RenderSystem.Finalize(); - - nn::mcu::CTR::FinalizeHwCheck(&s_McuSession); - nn::friends::detail::Finalize(); - nn::ps::Finalize(); - nn::ptm::CTR::FinalizeForSystemMenu(); - nn::cfg::CTR::system::Finalize(); - nn::cfg::CTR::init::Finalize(); - nn::hid::Finalize(); - nn::fs::Finalize(); - - nn::applet::PrepareToCloseApplication(); - nn::applet::CloseApplication(); -} - -nn::Handle GetMcuHandle() -{ - return s_McuSession; -} - -extern "C" void nnMain(void) -{ - nn::Result result; - - // os の初期化 - nn::os::Initialize(); - - // fs の初期化 - nn::fs::Initialize(); - - // appletの初期化 - nn::applet::Enable( false ); - - // hid の初期化 - result = nn::hid::Initialize(); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - - // ndmの初期化 - result = nn::ndm::Initialize(); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - - // デーモンの自律動作を停止 - result = nn::ndm::Suspend(nn::ndm::DN_CEC); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_BOSS); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_FRIENDS); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - result = nn::ndm::Suspend(nn::ndm::DN_NIM); - NN_ERR_THROW_FATAL_IF_FATAL_ONLY(result); - - // cfg の初期化 - nn::cfg::CTR::init::Initialize(); - nn::cfg::CTR::system::Initialize(); - - // 時計設定用ptm初期化 - nn::ptm::CTR::InitializeForSystemMenu(); - - // ps の初期化 - nn::ps::Initialize(); - - // friendsの初期化 - result = nn::friends::detail::Initialize(); - - // mcuの初期化 - nn::mcu::CTR::InitializeHwCheck(&s_McuSession); - nn::mcu::CTR::HwCheck mcu(s_McuSession); - - // amの初期化 - nn::am::InitializeForSystemMenu(); - - // ヒープの確保 - common::HeapManager::GetHeap()->Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); - - // RenderSystem の準備 - uptr heapForGx = reinterpret_cast(common::HeapManager::GetHeap()->Allocate(s_GxHeapSize)); - s_RenderSystem.Initialize(heapForGx, s_GxHeapSize); - - // サウンドスレッドの起動 - common::InitializeSimplePlayer(); - - // ログ描画の初期化 - common::Logger::GetLoggerInstance()->Initialize(CONSOLE_WIDTH, CONSOLE_HEIGHT, CONSOLE_MAX_LINE, &s_RenderSystem); - - // RenderSystemを作ってからログが出せる - common::Logger::InitializeEjectThread(); - common::Logger::SetEjectHandler(OnSdEjected); - COMMON_LOGGER("\n"); - COMMON_LOGGER("CTR Console Restore start\n"); - - // ボタン入力 - nn::hid::PadReader s_PadReader; - nn::hid::PadStatus padStatus; - - // データの準備 - - // 完全性検証SEEDの取得 - 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::HardwareInfo hwInfo; - hwInfo.AddCheckDigit(reinterpret_cast(s_SerialNo)); - if(result.IsSuccess()) - { - s_CanReadSerialNumber = true; - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // デバイスIDの取得 - bit32 deviceId; - result = nn::ps::CTR::GetDeviceId(&deviceId); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - bit64 infraDeviceId; - result = nn::nim::CTR::InitializeForShop(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::Shop::GetInfraDeviceId(deviceId, &infraDeviceId); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - result = nn::nim::CTR::FinalizeForShop(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // 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("System Ver. %d.%d.%d-%d\n", s_VerData.cup.majorVersion, s_VerData.cup.minorVersion, s_VerData.cup.microVersion, - s_VerData.nup.majorVersion); - COMMON_LOGGER("System Region %s\n", nn::cfg::CTR::GetRegionCodeA3(region)); - COMMON_LOGGER("Serial Number %s\n", s_SerialNo); - COMMON_LOGGER("Device ID %llu\n", infraDeviceId); - COMMON_LOGGER("MAC Address %s\n", macAddress); - COMMON_LOGGER("Friend Code %04u-%04u-%04u\n", - static_cast(friendCode / 100000000ULL % 10000ULL), - static_cast(friendCode / 10000ULL % 10000ULL), - static_cast(friendCode % 10000ULL) ); - - - bool flip = false; - bool continueRestore = false; - - for(;;) - { - bool nextStep = false; - - s_PadReader.ReadLatest(&padStatus); - - // AまたはSTARTボタンで進行 - if(padStatus.trigger & nn::hid::BUTTON_A || - padStatus.trigger & nn::hid::BUTTON_START) - { - nextStep = true; - } - - // LまたはRボタンで上下画面フリップ - if(padStatus.trigger & nn::hid::BUTTON_R || - padStatus.trigger & nn::hid::BUTTON_L) - { - flip = !flip; - } - - // コンソールスクロール - if(padStatus.hold & nn::hid::BUTTON_UP) - { - common::Logger::GetLoggerInstance()->ScrollUp(); - } - - // コンソールスクロール - if(padStatus.hold & nn::hid::BUTTON_DOWN) - { - common::Logger::GetLoggerInstance()->ScrollDown(); - } - - if(padStatus.hold & nn::hid::BUTTON_LEFT) - { - common::Logger::GetLoggerInstance()->ScrollToBegin(); - } - - if(padStatus.hold & nn::hid::BUTTON_RIGHT) - { - common::Logger::GetLoggerInstance()->ScrollToEnd(); - } - - // 情報更新 - // バッテリ - mcu.GetBatteryRemain(&batteryRemain); - // ACアダプタ - std::string adapterState; - if(IsAdapterConnected()) - { - adapterState += ::std::string("Connected"); - } - else - { - adapterState += ::std::string("Not Connected"); - } - - // 操作用メッセージ - // 進捗確認メッセージを兼ねる? - ::std::vector operationMessage; - - ControlState(operationMessage, nextStep, continueRestore); - - nn::util::FloatColor titleColor; - - if(GetRestoreMode() == RESTORE_MODE_RESTORE) - { - titleColor.r = 0.1f; - titleColor.g = 0.25f; - titleColor.b = 0.1f; - } - else if(GetRestoreMode() == RESTORE_MODE_NUP_ONLY) - { - titleColor.r = 0.35f; - titleColor.g = 0.35f; - titleColor.b = 0.f; - } - - // 上画面表示 - common::DrawSystemState("CTR Console Restore", - s_RenderSystem, - titleColor, - flip, - adapterState, - RESTORE_VERSION_NUM, - &s_VerData, - batteryRemain, - infraDeviceId, - friendCode, - GetProgress(), - macAddress, - operationMessage, - region, - s_SerialNo - ); - - if (GetRestoreMode() == RESTORE_MODE_NUP_ONLY) - { - const u8 spaceSize = 10; - const u8 lineBottom = 23; - const u32 screenWidth = 400; - - s_RenderSystem.SetColor(1.f, 1.f, 1.f); - s_RenderSystem.DrawText(0, lineBottom * spaceSize, "NUP-Only Mode"); - s_RenderSystem.SetColor(titleColor.r, titleColor.g, titleColor.b); - s_RenderSystem.FillRectangle(0, lineBottom * spaceSize, screenWidth, spaceSize); - s_RenderSystem.SetColor(1.f, 1.f, 1.f); - } - - s_RenderSystem.SwapBuffers(); - - // デフォルトで下画面に描画するもの - s_RenderSystem.SetRenderTarget(common::GetRenderTarget(NN_GX_DISPLAY1, flip)); - if(IsRestoreSucceeded()) - { - s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR); - } - else if(IsRestoreFailed()) - { - s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR); - } - else - { - s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), NORMAL_COLOR); - } - s_RenderSystem.Clear(); - s_RenderSystem.SetColor(1.f, 1.f, 1.f); - - common::Logger::GetLoggerInstance()->DrawConsole(); - s_RenderSystem.SwapBuffers(); - - - s_RenderSystem.WaitVsync(NN_GX_DISPLAY_BOTH); - - // 電源長押しで終了 - if ( nn::applet::IsExpectedToCloseApplication()) - { - FinalizeAll(); - } - } -} - - -} diff --git a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.h b/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.h deleted file mode 100644 index 2166c41..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.h +++ /dev/null @@ -1,53 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: ConsoleRestore.h - - Copyright (C)2009 Nintendo Co., Ltd. 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 NN_CONSOLERESTORE_H_ -#define NN_CONSOLERESTORE_H_ - -#include -#include "VersionDetect.h" - -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); - -void FinalizeAll(); - -const u32 CONSOLE_WIDTH = 38; -const u32 CONSOLE_HEIGHT = 24; -const u32 CONSOLE_MAX_LINE = 1000; - -} - -// 描画色の定義 -#define WHITE_COLOR 1.f, 1.f, 1.f, 1.f -#define GRAY_COLOR 0.5, 0.5, 0.5, 1.f -#define RED_COLOR 1.f, 0.f, 0.f, 1.f -#define GREEN_COLOR 0.f, 1.f, 0.f, 1.f -#define BLUE_COLOR 0.f, 0.f, 1.f, 1.f -#define SUCCESS_COLOR 0.f, 0.6f,0.f, 1.f -#define FAIL_COLOR 0.6f, 0.f,0.f, 1.f -#define NORMAL_COLOR 0.f, 0.f, 0.f, 1.f - -/* NN_CONSOLERESTORE_H_ */ -#endif diff --git a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.rsf b/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.rsf deleted file mode 100644 index be9685f..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/ConsoleRestore.rsf +++ /dev/null @@ -1,52 +0,0 @@ -BasicInfo: - Title : ConsoleRestore - ProductCode: ConsoleRestore - BackupMemoryType: None - -TitleInfo: - Use: Evaluation - Category: Application - UniqueId: 0xf8022 - Version: 0 - -SystemControlInfo: - AppType : Application - StackSize : 0x4000 - Dependency : - - gpio - - pdn - - spi - - i2c - - mcu - - ptm - - codec - - cfg - - hid - - gsp - - friends - - nim - - ac - - ndm - -AccessControlInfo: - Priority : 16 - DisableDebug : true - - FileSystemAccess: - - DirectSdmc - - Debug - - Core - - CategoryFileSystemTool - - IoAccessControl: - - FsMountCardSpi - - FsMountNand - - FsMountTwln - -Option: - FreeProductCode: true - - -Rom: - # ROM に含めるファイルシステムのルートパスを指定します。 - HostRoot: "$(ROMFS_ROOT)" \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Controller.cpp b/branches/work/SD_AesCmac/ConsoleRestore/Controller.cpp deleted file mode 100644 index 8a5c3ea..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Controller.cpp +++ /dev/null @@ -1,913 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Controller.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 -#include -#include -#include -#include -#include -#include - -#include "Controller.h" -#include "FileChecker.h" -#include "ConsoleRestore.h" -#include "SimplePlayer.h" -#include "CommonLogger.h" -#include "Importer.h" -#include "Updater.h" -#include "NtpClient.h" - -namespace ConsoleRestore -{ - -namespace -{ - -typedef enum RestoreState -{ - STARTUP, // 初期値 - SERIAL_IS_NOT_IN_SD, // シリアルナンバーファイルがSDカードにないことを表示 - SERIAL_IN_SD, // シリアルナンバーの情報を表示 - UPDATE_IN_PROGRESS, // アップデート中 - UPDATE_DONE, // アップデート完了 - NUP_ONLY_WAIT_SD_EJECT, // NUP_ONLYモードでSDカード抜き待ち - NUP_ONLY_WAIT_NEXT, // NUP_ONLYモードでキー入力待ち - RESTORE_TWL_SOUND, // TWLサウンドの書き込み中 - RESTORE_TWL_PHOTO, // TWL写真の書き込み中 - RESTORE_IN_PROGRESS, // 書き込み中 - POST_RESTORE, // 書き込み後の処理 - RESTORE_DONE, // 書き込み完了 - REBOOTING, // 再起動を行う - ERASE, // 削除処理を行う - HISTORY_RECOVER, // プレイ履歴の書き戻しを行う - TIME_ADJUST, // 時計あわせを行う - WAIT_SD_EJECT, // SDカードぬき待ち - ALL_DONE, // すべて完了 - SHUTDOWN, // シャットダウン中 - FAIL // 失敗 -} RestoreState; - -// Restore状態管理 -RestoreState s_RestoreState = STARTUP; -// Restoreモード管理 -RestoreMode s_RestoreMode = RESTORE_MODE_RESTORE; - -// インターネット設定を読んだかどうか -bool s_ReadSettingDone = false; -// インターネット設定を読んだ結果 -bool s_ReadSettingSuccess = false; -// NUP専用モードかどうか -bool s_NupOnlyMode = false; - -// APSettingの書式が無い警告サウンドを鳴らしたかどうか -bool s_ExistAPSettingAnnotation = false; -// APSettingの書式が違っている警告サウンドを鳴らしたかどうか -bool s_APSettingAnnotation = false; -// シリアルナンバーがない警告サウンドを鳴らしたかどうか -bool s_SerialNumberAnnotation = false; -// 失敗サウンドを鳴らしたかどうか -bool s_PlayedFailSound = false; -// 操作開始サウンドを鳴らしたかどうか -bool s_PlayedStartCursor = false; -// リブート開始前サウンドを鳴らしたかどうか -bool s_PlayedRebootCursor = false; -// SD抜き出し前サウンドを鳴らしたかどうか -bool s_PlayedSdPullOutCursor = false; -// バージョンデータが無い警告サウンドを鳴らしたかどうか -bool s_ExistsVersionDataAnnotation = false; -// バージョンデータを読んだかどうか -bool s_ReadVersionDone = false; -// SDに書き込みできない警告サウンドを鳴らしたかどうか -bool s_SdWriteProetctAnnotation = false; - -// ネットワークアップデートを開始したかどうか -bool s_ExecuteFgNup = false; -// FGNUPを何回リトライしたか -u32 s_FgNupRetryCount = 0; - - -} // namespace - -bool NeedsAcAdater() -{ - return IsBatteryLower() && !IsAdapterConnected(); -} - -bool CheckAndReadAPSetting(::std::vector& operationMessage) -{ - using namespace common; - - if (!ExistsAPSetting()) - { - if(!s_ExistAPSettingAnnotation) - { - s_ExistAPSettingAnnotation = true; - common::PlaySound(common::SOUND_ANNOTATION); - } - operationMessage.push_back(::std::string("Accsess_Point_Setting does not exist!")); - return false; - } - - // 設定ファイルからAP設定を読み込む - if (!s_ReadSettingDone) - { - s_ReadSettingDone = true; - s_ReadSettingSuccess = ReadSetting(&s_NupOnlyMode); - } - - if(s_NupOnlyMode) - { - s_RestoreMode = RESTORE_MODE_NUP_ONLY; - } - - if (!s_ReadSettingSuccess) - { - operationMessage.push_back(::std::string("Invalid Accsess_Point_Setting format!")); - if(!s_APSettingAnnotation) - { - s_APSettingAnnotation = true; - common::PlaySound(common::SOUND_ANNOTATION); - } - - } - - return s_ReadSettingSuccess; -} - -bool CheckAndReadVersionData(::std::vector& operationMessage) -{ - using namespace common; - - if (!ExistsVersionData()) - { - if(!s_ExistsVersionDataAnnotation) - { - s_ExistsVersionDataAnnotation = true; - common::PlaySound(common::SOUND_ANNOTATION); - } - operationMessage.push_back(::std::string("Version Data does not exist!")); - return false; - } - - // バージョン情報ファイルを読み込む - if (!s_ReadVersionDone) - { - s_ReadVersionDone = true; - ReadVersionData(); - } - - return s_ReadSettingSuccess; -} - -void PutAliveMessage(::std::vector& operationMessage, const char* str) -{ - std::string message = std::string(str); - static u8 i = 0; - if (i < 0xff / 4) - { - operationMessage.push_back(message + std::string(" /")); - } - else if (i < 0xff * 2 / 4) - { - operationMessage.push_back(message + std::string(" |")); - } - else if (i < 0xff * 3 / 4) - { - operationMessage.push_back(message + std::string(" \\")); - } - else - { - operationMessage.push_back(message + std::string(" -")); - } - i += 4; -} - -void ExecSyncMcuRtc() -{ - if(!common::ExistsRtcSyncFinishedFile()) - { - ImportMcuRtc(); - // 時計を無効化する - CreateRtcSyncFinishedFile(); - } -} - -// Zero NUP限定コード -bool NeedsNup() -{ - if(AlreadyExecutedNup() || s_NupOnlyMode) - { - return !common::ExistsUpdateCheckedFile(); - } - else - { - return false; - } -} - -void ControlState(::std::vector& operationMessage, bool& nextStep, bool& continueRestore) -{ - using namespace common; - - // 状態遷移Controller - switch (s_RestoreState) - { - // 起動時 - case STARTUP: - { - bool error = false; - bool needsUpdate = false; - bool needsErase = false; - bool validApSetting = false; - - // SDカードが挿入されているか? - if (nn::fs::IsSdmcInserted()) - { - // SDカードに書き込みできるか? - if (!nn::fs::IsSdmcWritable()) - { - if (!s_SdWriteProetctAnnotation) - { - s_SdWriteProetctAnnotation = true; - PlaySound(SOUND_ANNOTATION); - } - operationMessage.push_back(::std::string("Can*t Write SD Card!!\n")); - break; - } - - CheckAndReadVersionData(operationMessage); - validApSetting = CheckAndReadAPSetting(operationMessage); - if (!validApSetting) - { - error = true; - } - else - { - // NUPが必要か? - if (!NeedsNup()) - { - if (s_NupOnlyMode) - { - s_RestoreState = NUP_ONLY_WAIT_SD_EJECT; - - // リストア状態チェックファイルをすべて削除 - DeleteAllCheckFiles(); - - break; - } - - // SDカードに書き込み完了ファイルがあるか? - if (!ExistsWriteFinishedFile()) - { - // IVSを読めるか? - if (CanReadIVS()) - { - // 本体初期化完了ファイルがあるか? - if (ExistsConsoleInitializedFile()) - { - // SDカードにシリアルナンバーがあるか? - if (!ExistsSerialNumberFile()) - { - COMMON_LOGGER("Can't Read Serial Number in SD Card!!\n"); - error = true; - s_RestoreState = SERIAL_IS_NOT_IN_SD; - } - else - { - ::std::string serial(reinterpret_cast (ReadSerialNumber())); - operationMessage.push_back(::std::string("Serial Number in SD : ") + serial); - } - - - // SDカードにリージョンデータがあるか? - if (ExistsRegionData()) - { - // リージョンデータは一致しているか? - if (!EqualsRegionDataandRegion()) - { - COMMON_LOGGER("Current Region and Region in SD differ!!\n"); - error = true; - s_RestoreState = FAIL; - } - } - else - { - // 移行不能なのでFAIL - COMMON_LOGGER("Can't Read Region in SD Card!!\n"); - error = true; - s_RestoreState = FAIL; - } - - } - else - { - if (!ExistsIVSFile()) - { - // 移行不能なのでFAIL - COMMON_LOGGER("Can't Read IVS in SD Card!!\n"); - error = true; - s_RestoreState = FAIL; - } - else - { - COMMON_LOGGER("Initialize Console\n"); - - // SDカードのIVSと本体のIVSは異なるか? - if (EqualsIVSFileandIVS()) - { - // 同一本体に書き戻そうとしたファイルを作る - COMMON_LOGGER("Restore to the same console. Initialize.\n"); - CreateTryRestoreSameConsoleFile(); - } - else - { - // 本体初期化完了ファイルを作る - CreateConsoleInitializedFile(); - - } - - // ファイルシステムの初期化を行う - InitializeFileSystem(); - error = true; - s_RestoreState = REBOOTING; - } - } - } - else - { - error = true; - operationMessage.push_back(::std::string("Can't Read IVS!!")); - } - } - else - { - if (validApSetting) - { - // 削除処理を行う - needsErase = true; - } - } - } - else - { - if (validApSetting) - { - // ネットワークアップデートを行う - needsUpdate = true; - } - } - - } - } - else - { - error = true; - operationMessage.push_back(::std::string("Insert SD Card!!")); - } - - // ACアダプタが必要か? - if (NeedsAcAdater()) - { - error = true; - operationMessage.push_back(::std::string("Connect AC Adapter!!")); - } - - // エラーが無ければ進行用メッセージ表示 - if (!error) - { - operationMessage.push_back(::std::string("Push A or START Button")); - if(needsUpdate) - { - operationMessage.push_back(::std::string("Network Update Mode")); - } - else if(needsErase) - { - operationMessage.push_back(::std::string("Clock Sync Mode")); - } - else - { - operationMessage.push_back(::std::string("Import Data Mode")); - } - - if(!s_PlayedStartCursor) - { - PlaySound(SOUND_CURSOR); - s_PlayedStartCursor = true; - } - } - - if (nextStep && !error) - { - if (needsUpdate) - { - COMMON_LOGGER("Start Network Update\n"); - s_RestoreState = UPDATE_IN_PROGRESS; - } - else if(needsErase) - { - COMMON_LOGGER("Erase Trash\n"); - s_RestoreState = ERASE; - } - else - { - COMMON_LOGGER("Start Import Data\n"); - // Zero NUP限定 - // RTC同期を行う - // NUPされない場合があるのでここで同期 - ExecSyncMcuRtc(); - - s_RestoreState = RESTORE_TWL_SOUND; - } - - } - } - break; - - // シリアルナンバーがSDカードにないこと警告 - case SERIAL_IS_NOT_IN_SD: - { - operationMessage.push_back(::std::string("Serial Number Is Not In SD Card")); - operationMessage.push_back(::std::string("Push A or START Button")); - operationMessage.push_back(::std::string("Import Data Mode")); - - if (!s_SerialNumberAnnotation) - { - s_SerialNumberAnnotation = true; - PlaySound(SOUND_ANNOTATION); - } - - if (nextStep) - { - s_RestoreState = RESTORE_TWL_SOUND; - } - } - break; - - // アップデート中 - case UPDATE_IN_PROGRESS: - { - continueRestore = true; - - // ACアダプタが必要か? - if (NeedsAcAdater()) - { - continueRestore = false; - operationMessage.push_back(::std::string("Connect AC Adapter!!")); - } - - // アップデートを行う - if(!s_ExecuteFgNup) - { - ImportCountryLanguageData(); - StartFGNetworkUpdate(); - s_ExecuteFgNup = true; - } - - // 動いていることを表示 - { - PutAliveMessage(operationMessage, "Updating"); - } - - - if (IsNetworkUpdateFinished()) - { - FinishFGNetworkUpdate(); - // エラーがあったら表示する - if(GetUpdateResult().IsFailure()) - { - // APが見つからない - if(GetUpdateResult() == nn::ac::ResultNotFoundAccessPoint()) - { - COMMON_LOGGER("No Access Point Found!"); - } - } - - if (GetUpdateResult().IsSuccess()) - { - COMMON_LOGGER("Network Update Finished.\n"); - // アップデート完了ファイルを作成 - CreateUpdateFinishedFile(); - - s_RestoreState = UPDATE_DONE; - - } - else - { - if (s_FgNupRetryCount++ < RETRY_MAX) - { - // エラーのためやり直す - COMMON_LOGGER_RESULT_IF_FAILED(GetUpdateResult()); - COMMON_LOGGER("Network Update Failed. Retrying... %d\n", s_FgNupRetryCount); - - // FGNUP用のスレッドを作るとこからやり直し - s_ExecuteFgNup = false; - } - else - { - s_RestoreState = FAIL; - } - } - - } - } - break; - - // アップデート完了 - case UPDATE_DONE: - { - operationMessage.push_back(::std::string("Network Update Done.")); - operationMessage.push_back(::std::string("Press A or START Button to Reboot")); - - if(!s_PlayedRebootCursor) - { - PlaySound(SOUND_CURSOR); - s_PlayedRebootCursor = true; - } - - if (nextStep) - { - s_RestoreState = REBOOTING; - } - } - break; - - - // TWLサウンド領域の書き込み中 - case RESTORE_TWL_SOUND: - { - static bool init = true; - if (init) - { - // データを書き込む - ImportTwlSoundData(); - init = false; - } - - // 処理が完了した - if (IsImportFinished()) - { - FinalizeImportThread(); - s_RestoreState = RESTORE_TWL_PHOTO; - } - } - break; - - // TWL写真領域の書き込み - case RESTORE_TWL_PHOTO: - { - static bool init = true; - if (init) - { - // データを書き込む - ImportTwlPhotoData(); - init = false; - } - - // 処理が完了した - if (IsImportFinished()) - { - FinalizeImportThread(); - s_RestoreState = RESTORE_IN_PROGRESS; - } - } - break; - - - // 書き込み中 - case RESTORE_IN_PROGRESS: - { - continueRestore = true; - - // ACアダプタが必要か? - if (NeedsAcAdater()) - { - continueRestore = false; - operationMessage.push_back(::std::string("Connect AC Adapter!!")); - } - - // データを読み込む - ImportData(); - - // 処理が完了した - if (continueRestore && IsImportFinished()) - { - COMMON_LOGGER("Import NAND Data Finished.\n"); - - if (GetProgress() > 99) - { - s_RestoreState = POST_RESTORE; - } - else - { - s_RestoreState = FAIL; - } - - } - } - break; - - // リブート中 - case REBOOTING: - { - static bool init = true; - - if (init) - { - // ErrDispから引用 - // 権限をもらえば成功するはず - nn::Result result = nn::ns::CTR::InitializeForShell(); - if (result.IsSuccess()) - { - COMMON_LOGGER("System Reboot.\n"); - - nn::ns::CTR::HardwareResetAsync(nn::CTR::MEMORY_ARRANGE_NORMAL); - while (!nn::applet::IsExpectedToCloseApplication()) - { - nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(5)); - } - - nn::ns::CTR::FinalizeForShell(); - - // INFO: リブートは非同期のため処理は継続 - } - init = false; - } - } - break; - - // 書き込み後の処理 - case POST_RESTORE: - { - operationMessage.push_back(::std::string("Post Process...")); - // 書き込み完了ファイルを作成 - CreateWriteFinishedFile(); - - s_RestoreState = RESTORE_DONE; - } - break; - - // 書き込み完了 - case RESTORE_DONE: - { - operationMessage.push_back(::std::string("Restore Done.")); - operationMessage.push_back(::std::string("Press A or START Button to Reboot")); - - if(!s_PlayedRebootCursor) - { - PlaySound(SOUND_CURSOR); - s_PlayedRebootCursor = true; - } - - if (nextStep) - { - s_RestoreState = REBOOTING; - } - } - break; - - // 削除処理 - case ERASE: - { - Cleanup(); - s_RestoreState = HISTORY_RECOVER; - } - break; - - // 削除処理 - case HISTORY_RECOVER: - { - static bool init = true; - if (init) - { - // ptmのセーブデータ移行後に時計を無効化する - nn::ptm::CTR::InvalidateSystemTime(); - - // 同じ本体に書き戻す場合は初期化しない - if (!ExistsTryRestoreSameConsoleFile()) - { - // cfgのハードウェア固有情報をcal値で初期化する - InitializeHardwareDependentSetting(); - } - - init = false; - } - - s_RestoreState = TIME_ADJUST; - } - - - // 時計あわせ - case TIME_ADJUST: - { - static bool init = true; - if(init) - { - COMMON_LOGGER("Adjust Time\n"); - AdjustTime(); - init = false; - } - - // 動いていることを表示 - { - PutAliveMessage(operationMessage, "Sync Clock"); - } - - if(IsTimeAdjustFinished()) - { - if(IsTimeAdjustSuccessed()) - { - s_RestoreState = WAIT_SD_EJECT; - } - else - { - s_RestoreState = FAIL; - } - - // リストア状態チェックファイルをすべて削除 - DeleteAllCheckFiles(); - } - } - break; - - // すべて完了 - case WAIT_SD_EJECT: - { - operationMessage.push_back(::std::string("ALL Done. Pull Out SD Card.")); - // SDカード抜けのみで次の状態に遷移する - - if (!s_PlayedSdPullOutCursor) - { - common::PlaySound(common::SOUND_CURSOR); - s_PlayedSdPullOutCursor = true; - } - - } - break; - - // すべて完了 - case ALL_DONE: - { - operationMessage.push_back(::std::string("Restore Succeeded!!")); - static bool init = true; - if (init) - { - PlaySound(SOUND_OK); - init = false; - } - } - break; - - // 書き込み失敗 - case FAIL: - { - static bool init = true; - if(init) - { - // 状態初期化 - DeleteAllCheckFiles(); - init = false; - } - - operationMessage.push_back(::std::string("Failed.")); - if (!s_PlayedFailSound) - { - PlaySound(SOUND_NG); - s_PlayedFailSound = true; - } - } - break; - - case NUP_ONLY_WAIT_SD_EJECT: - { - operationMessage.push_back(::std::string("Update Done. Pull Out SD Card.")); - - // SDカード抜けのみで次の状態に遷移する - if (!s_PlayedSdPullOutCursor) - { - common::PlaySound(common::SOUND_CURSOR); - s_PlayedSdPullOutCursor = true; - } - } - break; - - case NUP_ONLY_WAIT_NEXT: - { - operationMessage.push_back(::std::string("A or START Button to Shutdown.")); - - if(nextStep) - { - s_RestoreState = SHUTDOWN; - } - } - break; - - case SHUTDOWN: - { - // 本体初期化を行う - InitializeFileSystem(); - - // シャットダウンする - nn::ptm::CTR::ShutdownAsync(0, nn::fnd::TimeSpan::FromSeconds(0)); - } - break; - - } -} - -bool InProgress() -{ - return s_RestoreState == RESTORE_IN_PROGRESS; -} - -bool IsRestoreSucceeded() -{ - return s_RestoreState == ALL_DONE; -} - -bool IsRestoreFailed() -{ - return s_RestoreState == FAIL; -} - -void OnSdEjected() -{ - if(s_RestoreState == WAIT_SD_EJECT || s_RestoreState == ALL_DONE) - { - s_RestoreState = ALL_DONE; - } - else if(s_RestoreState == NUP_ONLY_WAIT_SD_EJECT || s_RestoreState == NUP_ONLY_WAIT_NEXT) - { - s_RestoreState = NUP_ONLY_WAIT_NEXT; - } - // FAILのときは一旦電源を切らないと動かないようにしておく - else if(s_RestoreState != FAIL) - { - InitializeState(); - ClearFileReadResult(); - } -} - -void InitializeState() -{ - s_RestoreState = STARTUP; - s_RestoreMode = RESTORE_MODE_RESTORE; - - common::InitializeFileCheck(); - - s_ExistAPSettingAnnotation = false; - s_ReadSettingDone = false; - s_ReadSettingSuccess = false; - s_APSettingAnnotation = false; - s_SerialNumberAnnotation = false; - s_PlayedFailSound = false; - s_ExecuteFgNup = false; - s_FgNupRetryCount = 0; - s_PlayedStartCursor = false; - s_PlayedRebootCursor = false; - s_PlayedSdPullOutCursor = false; - s_NupOnlyMode = false; - s_ReadVersionDone = false; - s_SdWriteProetctAnnotation = false; -} - -u32 GetProgress() -{ - if(s_RestoreState == RESTORE_TWL_SOUND || - s_RestoreState == RESTORE_TWL_PHOTO || - s_RestoreState == RESTORE_IN_PROGRESS || - s_RestoreState == POST_RESTORE || - s_RestoreState == RESTORE_DONE) - { - return GetImportProgress(); - } - else if(s_RestoreState == UPDATE_IN_PROGRESS || - s_RestoreState == UPDATE_DONE) - { - return GetUpdateProgress(); - } - else - { - return 0; - } - -} - -RestoreMode GetRestoreMode() -{ - return s_RestoreMode; -} - -} // namespace ConsoleRestore diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Controller.h b/branches/work/SD_AesCmac/ConsoleRestore/Controller.h deleted file mode 100644 index d2b802b..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Controller.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Contoroller.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 CONTOROLLER_H_ -#define CONTOROLLER_H_ - -#include -#include -#include - -namespace ConsoleRestore -{ - -typedef enum RestoreMode -{ - RESTORE_MODE_RESTORE, - RESTORE_MODE_NUP_ONLY -} RestoreMode; - -const u32 RETRY_MAX = 3; - -void ControlState(::std::vector& operationMessage, bool& nextStep, bool& continueRestore); -bool InProgress(); -bool IsRestoreSucceeded(); -bool IsRestoreFailed(); -u32 GetProgress(); - -void OnSdEjected(); -void InitializeState(); -RestoreMode GetRestoreMode(); - -} - -#endif /* CONTOROLLER_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Importer.cpp b/branches/work/SD_AesCmac/ConsoleRestore/Importer.cpp deleted file mode 100644 index d0bffaa..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Importer.cpp +++ /dev/null @@ -1,1496 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Importer.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 -#include -#include -#include -#include // cfg:norの初期化に必要 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "FileName.h" -#include "Importer.h" -#include "SdMountManager.h" -#include "ConsoleRestore.h" -#include "HeapManager.h" -#include "SdReaderWriter.h" -#include "CommonLogger.h" -#include "FileTransfer.h" -#include "common_Types.h" -#include "Aes_define.h" -#include "configLoader.h" -#include "PlayHistoryManager.h" -#include "FileChecker.h" -#include "VersionDetect.h" - -#include -#include - -namespace ConsoleRestore -{ -namespace -{ -const size_t IMPORT_THREAD_STACK_SIZE = 0x4000; -nn::os::Thread s_ImportThread; -nn::os::StackBuffer s_ImportThreadStack; - -const size_t TIME_ZONE_LENGTH = 9; // "+23:45" -char s_TimeZoneStr[TIME_ZONE_LENGTH]; - -TimeZone s_TimeZone; -const size_t NTP_SERVER_NAME_LENGTH = 256; -char s_NtpServerName[NTP_SERVER_NAME_LENGTH]; - -bool s_CheckedEqualsIVSFileandIVS = false; -bool s_CheckedEqualsRegionDataandRegion = false; -bool s_ReadSerialNumber = false; - -// シリアルナンバー -u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; - -// 空のファイルを作成する -bool CreateEmptyFile(const wchar_t* path); -// SDからNANDにセーブデータをコピーする -void ImportSaveData(); -// SDからNORにNORデータをコピーする -void ImportNorData(); - -// IVS復号化用IV -bit8 s_IvsDecryptIv[AES_BLOCK_SIZE] = -{ - 0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f, - 0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9 -}; - -// SDカードに保存してあるバージョン情報 -common::VerDef s_SDVersionData; - -} - -CheckedNetworkSetting s_CurrentNetowrkSetting1; - -void ConvertTimeZoneString(const char* str) -{ - s_TimeZone.hour = 0; - s_TimeZone.minutes = 0; - s_TimeZone.isMinus = false; - - bool hour = true; - bool ten = true; - u32 count = 0; - for(u32 i = 0; i < TIME_ZONE_LENGTH && count < 2; i++) - { - switch (str[i]) - { - case ':': - { - hour = false; - } - break; - - case '"': - { - // 2回読んだら終了 - count++; - } - break; - - case '+': - { - s_TimeZone.isMinus = false; - } - break; - - case '-': - { - s_TimeZone.isMinus = true; - } - break; - - default: - { - if(hour) - { - if(ten) - { - s_TimeZone.hour += (str[i] - '0') * 10; - ten = false; - } - else - { - s_TimeZone.hour += str[i] - '0'; - ten = true; - } - } - else - { - if(ten) - { - s_TimeZone.minutes += (str[i] - '0') * 10; - ten = false; - } - else - { - s_TimeZone.minutes += str[i] - '0'; - ten = true; - } - } - } - break; - } - } - - - NN_LOG("Converted TimeZone = "); - if(s_TimeZone.isMinus) - { - NN_LOG("-"); - } - NN_LOG("%02d:%02d\n", s_TimeZone.hour, s_TimeZone.minutes); - -} - -namespace -{ - -bool CreateEmptyFile(const wchar_t* path) -{ - nn::Result result; - bool create = false; - result = common::SdMountManager::Mount(); - - if (result.IsSuccess()) - { - nn::fs::FileOutputStream fos; - - result = fos.TryInitialize(path, true); - if(result.IsSuccess()) - { - fos.TryFlush(); - create = true; - } - fos.Finalize(); - } - - common::SdMountManager::Unmount(); - - return create; -} - -} - -u8* ReadSerialNumber() -{ - nn::Result result; - - if(s_ReadSerialNumber) - { - return s_SerialNo; - } - - COMMON_LOGGER("Read Serial Number in SD.\n"); - - size_t readSize; - common::SdReaderWriter sdReader; - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if(buf != NULL) - { - result = sdReader.ReadBufWithCmac(common::SERIAL_PATHNAME, buf, bufSize, &readSize); - if(result.IsSuccess()) - { - std::memcpy(s_SerialNo, buf, sizeof(s_SerialNo)); - s_ReadSerialNumber = true; - } - common::HeapManager::GetHeap()->Free(buf); - } - return s_SerialNo; -} - -bool EqualsIVSFileandIVS() -{ - nn::Result result; - void* ivs; - size_t ivsSize; - size_t readSize; - static bool retval = false; - - if(s_CheckedEqualsIVSFileandIVS) - { - return retval; - } - - COMMON_LOGGER("Check IVS\n"); - - GetIvs(&ivs, &ivsSize); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize() / 2; - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* enc = common::HeapManager::GetHeap()->Allocate(bufSize); - if (enc != NULL) - { - common::SdReaderWriter sdReader; - - result = sdReader.ReadBufWithCmac(common::IVS_PATHNAME, enc, bufSize, &readSize); - if(result.IsSuccess()) - { - void *dec = common::HeapManager::GetHeap()->Allocate(readSize); - if(dec != NULL) - { - // AES復号化する - nn::crypto::Initialize(); - nn::crypto::SwAesCtrContext swAesCtrContest; - - swAesCtrContest.Initialize(s_IvsDecryptIv, common::key, sizeof(common::key)); - swAesCtrContest.Decrypt(dec, enc, readSize); - - NN_LOG("readSize = %d, ivsSize = %d\n", readSize, ivsSize); - // サイズ一致かつ内容一致でtrue - if (readSize == ivsSize && std::memcmp(ivs, dec, ivsSize) == 0) - { - retval = true; - } - - common::HeapManager::GetHeap()->Free(dec); - - } - else - { - NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__); - } - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - s_CheckedEqualsIVSFileandIVS = true; - common::HeapManager::GetHeap()->Free(enc); - } - else - { - NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__); - return retval; - } - - return retval; -} - -bool EqualsRegionDataandRegion() -{ - nn::Result result; - static bool retval = false; - - if(s_CheckedEqualsRegionDataandRegion) - { - return retval; - } - - COMMON_LOGGER("Check Region\n"); - - nn::cfg::CTR::CfgRegionCode region; - region = nn::cfg::CTR::GetRegion(); - - nn::cfg::CTR::CfgRegionCode sdRegion; - common::SdReaderWriter sdReader; - size_t readSize; - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - result = sdReader.ReadBufWithCmac(common::REGION_DATA_PATHNAME, buf, bufSize, &readSize); - if (result.IsSuccess()) - { - std::memcpy(&sdRegion, buf, sizeof(sdRegion)); - s_CheckedEqualsRegionDataandRegion = true; - if (result.IsSuccess()) - { - retval = (region == sdRegion); - } - else - { - retval = false; - } - } - else - { - retval = false; - } - common::HeapManager::GetHeap()->Free(buf); - } - - return retval; -} - -void SetCountry(nn::cfg::CTR::CfgCountryCode countryCode) -{ - using namespace nn::cfg::CTR; - using namespace nn::cfg::CTR::detail; - - SimpleAddressIdCfgData simpleAddressId; - TwlCountryCodeCfgData countryData; - - nn::cfg::CTR::system::Initialize(); - - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::system::GetConfig(&simpleAddressId, sizeof(SimpleAddressIdCfgData), GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_ID))); - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::system::GetConfig(&countryData, sizeof(TwlCountryCodeCfgData), GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_COUNTRY_CODE))); - nn::cfg::CTR::system::Finalize(); - - simpleAddressId.id = (countryCode << CFG_SIMPLE_ADDRESS_ID_COUNTRY_SHIFT) | (1 - << CFG_SIMPLE_ADDRESS_ID_REGION_SHIFT); - countryData.country = countryCode; - - nn::cfg::CTR::system::Initialize(); - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_SIMPLE_ADDRESS, NN_CFG_SIMPLE_ADDRESS_ID), &simpleAddressId, sizeof(SimpleAddressIdCfgData))); - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::system::SetConfig(GET_CFG_KEY(NN_CFG_TWL, NN_CFG_TWL_COUNTRY_CODE), &countryData, sizeof(TwlCountryCodeCfgData))); - nn::cfg::CTR::system::FlushConfig(); - nn::cfg::CTR::system::Finalize(); -} - -void SetLanguage(nn::cfg::CTR::CfgLanguageCode languageCode) -{ - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::init::SetConfig( - GET_CFG_KEY(nn::cfg::CTR::detail::NN_CFG_USER_INFO, - nn::cfg::CTR::detail::NN_CFG_USER_INFO_LANGUAGE), - &languageCode, - sizeof(nn::cfg::CTR::detail::LanguageCfgData))); - NN_UTIL_PANIC_IF_FAILED(nn::cfg::CTR::init::FlushConfig()); - nn::cfg::nor::CTR::Initialize(); - NN_UTIL_PANIC_IF_FAILED(nn::cfg::nor::CTR::SetLanguage(static_cast(languageCode))); - nn::cfg::nor::CTR::Finalize(); -} - -void ImportCountryLanguageData() -{ - nn::Result result; - - if (common::ExistsCountryLanguageFile()) - { - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::COUNTRY_SETTING_PATHNAME, buf, bufSize, &readSize); - if (result.IsSuccess()) - { - // SDから読み出し成功 - SetCountry(reinterpret_cast (buf)->country); - - SetLanguage(reinterpret_cast (buf)->language); - } - else - { - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - common::HeapManager::GetHeap()->Free(buf); - } - } - else - { - // リージョンから適当な国を指定する - nn::cfg::CTR::CfgRegionCode region; - region = nn::cfg::CTR::GetRegion(); - NN_LOG("Country Setting does not exist. Use Default Setting\n"); - switch(region) - { - case nn::cfg::CTR::CFG_REGION_JAPAN: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_JAPAN); - } - break; - - case nn::cfg::CTR::CFG_REGION_AMERICA: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_UNITED_STATES); - } - break; - - case nn::cfg::CTR::CFG_REGION_EUROPE: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_FRANCE); - } - break; - - case nn::cfg::CTR::CFG_REGION_AUSTRALIA: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_AUSTRALIA); - } - break; - - case nn::cfg::CTR::CFG_REGION_CHINA: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_CHINA); - } - break; - - case nn::cfg::CTR::CFG_REGION_KOREA: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_SOUTH_KOREA); - } - break; - - case nn::cfg::CTR::CFG_REGION_TAIWAN: - { - SetCountry(nn::cfg::CTR::CFG_COUNTRY_TAIWAN); - } - break; - } - - } -} - -inline u8 DecimalToBcd(u8 param) -{ - u8 theTen, theOne; - theTen = param / 10; - theOne = param - theTen * 10; - return (theTen << 4 | theOne); -} - -void ImportMcuRtc() -{ - COMMON_LOGGER("Import RTC Data.\n"); - nn::Result result; - nn::Handle handle = GetMcuHandle(); - - if(handle.IsValid()) - { - if (common::CheckFileExists(common::MCU_RTC_PATHNAME)) - { - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::MCU_RTC_PATHNAME, buf, bufSize, &readSize); - if (result.IsSuccess()) - { - // mcuを使ってセットする - nn::mcu::CTR::HwCheck mcu(handle); - nn::mcu::CTR::RtcData* rtc = reinterpret_cast (buf); - NN_LOG("RTC = 20%02d/%02d/%02d %02d:%02d:%02d\n", rtc->m_Year, rtc->m_Month, rtc->m_Day, rtc->m_Hour, rtc->m_Minute, rtc->m_Second); - - // BCD変換が必要 - - size_t RTC_PARAM_SIZE = sizeof(nn::mcu::CTR::RtcData); - u8 bcd[RTC_PARAM_SIZE]; - for (int i = 0; i < RTC_PARAM_SIZE; i++) - { - bcd[i] = DecimalToBcd(reinterpret_cast (rtc)[i]); - } - - result = mcu.WriteBySend(nn::drivers::mcu::CTR::MCU_RTC_SEC_ADDR, bcd, RTC_PARAM_SIZE); - - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - common::HeapManager::GetHeap()->Free(buf); - } - else - { - COMMON_LOGGER("Failed Allocate Heap!!\n"); - } - } - } -} - -void InitializeFileSystem() -{ - nn::Result result; - - for (u32 i = 0; i < common::TWL_PATHNAME_MAX; i++) - { - result = nn::fs::MountSpecialArchive(common::TWL_ARCHIVE_NAME_TABLE[i], common::TWL_FS_ARCHIVE_KIND[i]); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - nn::fs::Directory dir; - std::vector entryList; //カレントディレクトリのエントリ一覧を格納 - std::vector::iterator entryIndex; - - std::wstring currentDirectory = common::NAND_TWL_ROOT_PATHNAME_WITH_SLASH_TABLE[i]; - result = dir.TryInitialize(currentDirectory.c_str()); - - nn::fs::DirectoryEntry entry; - s32 numEntry; - for (;;) - { - result = dir.TryRead(&numEntry, &entry, 1); - if (result.IsFailure()) - { - dir.Finalize(); - } - if (numEntry == 0) - { - // ルートディレクトリを閉じる - dir.Finalize(); - - // ルートディレクトリの子を開く - for (entryIndex = entryList.begin(); entryIndex != entryList.end(); entryIndex++) - { - // ディレクトリなら削除する - if (entryIndex->attributes.isDirectory) - { - NN_LOG("Try Delete %ls%ls/\n", currentDirectory.c_str(), entryIndex->entryName); - result = nn::fs::TryDeleteDirectoryRecursively((currentDirectory + ::std::wstring( - entryIndex->entryName)).c_str()); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - } - // ファイルなら削除する - else - { - NN_LOG("Try Delete %ls%ls\n", currentDirectory.c_str(), entryIndex->entryName); - result = nn::fs::TryDeleteFile( - (currentDirectory + ::std::wstring(entryIndex->entryName)).c_str()); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - } - - // 削除完了 - break; - } - else - { - // vectorに保存する - entryList.push_back(entry); - if (entry.attributes.isDirectory) - { - NN_LOG("%ls%ls/\n", currentDirectory.c_str(), entry.entryName); - } - else - { - NN_LOG("%ls%ls\n", currentDirectory.c_str(), entry.entryName); - } - } - } - } - nn::fs::Unmount(common::TWL_ARCHIVE_NAME_TABLE[i]); - } - - nn::fs::InitializeCtrFileSystem(); -} - -void ImportIvs() -{ - nn::Result result; - nn::fs::FileOutputStream fos; - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize() / 2; - void* enc = common::HeapManager::GetHeap()->Allocate(bufSize); - if (enc != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::IVS_PATHNAME, enc, bufSize, &readSize); - if(result.IsSuccess()) - { - // SDから読み出し成功 - result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND); - if (result.IsSuccess()) - { - void *dec = common::HeapManager::GetHeap()->Allocate(readSize); - if (dec != NULL) - { - // AES復号化する - nn::crypto::Initialize(); - nn::crypto::SwAesCtrContext swAesCtrContest; - - swAesCtrContest.Initialize(s_IvsDecryptIv, common::key, sizeof(common::key)); - swAesCtrContest.Decrypt(dec, enc, readSize); - - // IVS書き込み - result = fos.TryInitialize(common::IVS_NAND_PATHNAME, true); - if (result.IsSuccess()) - { - if (result.IsSuccess()) - { - s32 writeSize; - result = fos.TryWrite(&writeSize, dec, readSize, true); - if (result.IsSuccess()) - { - COMMON_LOGGER("Import IVS.\n"); - } - } - } - common::HeapManager::GetHeap()->Free(dec); - } - else - { - COMMON_LOGGER("Failed Allocate Heap!!\n"); - } - - } - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - } - common::HeapManager::GetHeap()->Free(enc); - } - else - { - COMMON_LOGGER("Failed Allocate Heap!!\n"); - } -} - -void ImportThreadFunc() -{ - nn::Result result; - - result = nn::fs::MountSpecialArchive(common::NAND_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_CTR_NAND); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = common::SdMountManager::Mount(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - - common::CopyDirectory( - (::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring(common::SD_SAVEDATA_ROOT_NAME)).c_str(), - common::NAND_DATA_ROOT_PATHNAME_WITH_SLASH, - buf, bufSize); - - common::HeapManager::GetHeap()->Free(buf); - } - - common::SdMountManager::Unmount(); - nn::fs::Unmount(common::NAND_ARCHIVE_NAME); - - NN_LOG("Import Thread Finalize\n"); -} - -namespace -{ - -void ImportSaveData() -{ - // SDカードからNANDに読み込み - nn::Result result; - - // SDカードにあるセーブデータサイズを計算 - u32 fileNum = 0; - u32 fileSize = 0; - - common::SdMountManager::Mount(); - common::CalculateFileNum(::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring(common::SD_SAVEDATA_ROOT_NAME), fileNum, fileSize); - common::SdMountManager::Unmount(); - - // ファイルサイズ設定 - common::InitializeTransferProgress(fileSize); - - NN_LOG("File Number = %d\n", fileNum); - NN_LOG("File Size = %d\n", fileSize); - - // SDカードにあるセーブデータディレクトリ以下のデータをNANDにコピー - COMMON_LOGGER("Import NAND Data Start...\n"); - s_ImportThread.Start(ImportThreadFunc, s_ImportThreadStack); - -} - -void ImportNorData() -{ - COMMON_LOGGER("Import NOR Data.\n"); - - nn::Result result; - - nn::cfg::nor::CTR::Initialize(); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::NOR_PATHNAME, buf, bufSize, &readSize); - if(result.IsSuccess()) - { - // cfgを使ってセットする - result = nn::cfg::nor::CTR::SetNtrSetting(&reinterpret_cast(buf)->ntrConfig.ncd, - &reinterpret_cast(buf)->ntrConfig.ncd_ex); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // TWL WiFi設定 - result = nn::cfg::nor::CTR::WriteTwlWifiSetting(0, reinterpret_cast(buf)->TwlWiFiSetting, - common::TWL_WIFI_SETTING_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // NTR WiFi設定 - result = nn::cfg::nor::CTR::WriteNtrWifiSetting(0, reinterpret_cast(buf)->NtrWiFiSetting, - common::NTR_WIFI_SETTING_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - common::HeapManager::GetHeap()->Free(buf); - } - else - { - COMMON_LOGGER("Failed Allocate Heap!!\n"); - } - -} - - -} - -void ReadVersionData() -{ - nn::Result result; - - std::memset(&s_SDVersionData, 0, sizeof(common::VerDef)); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::VERSION_DATA_PATHNAME, buf, bufSize, &readSize); - if(result.IsSuccess()) - { - // バージョン情報を保持する - std::memcpy(&s_SDVersionData, buf, readSize); - NN_LOG("SD Version = %02d.%02d.%02d-%02d\n", s_SDVersionData.cup.majorVersion, - s_SDVersionData.cup.minorVersion, - s_SDVersionData.cup.microVersion, - s_SDVersionData.nup.majorVersion); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - common::HeapManager::GetHeap()->Free(buf); - } - else - { - COMMON_LOGGER("Failed Allocate Heap!!\n"); - } -} - -bool AlreadyExecutedNup() -{ - return s_SDVersionData.nup.majorVersion != 0; -} - -void Cleanup() -{ - nn::Result result; - bool execCleanup; - - result = nn::am::NeedsCleanup(&execCleanup, nn::fs::MEDIA_TYPE_NAND); - if(result.IsSuccess()) - { - if(execCleanup) - { - COMMON_LOGGER("Cleanup NAND\n"); - nn::am::DoCleanup(nn::fs::MEDIA_TYPE_NAND); - } - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); -} - -void DeleteAllCheckFiles() -{ - nn::Result result; - common::SdMountManager::Mount(); - - for(u32 i = 0; i < sizeof(CHECK_FILENAME_TABLE) / sizeof(CHECK_FILENAME_TABLE[0]); i++) - { - if(common::CheckFileExists(CHECK_FILENAME_TABLE[i])) - { - result = nn::fs::TryDeleteFile(CHECK_FILENAME_TABLE[i]); - COMMON_LOGGER_RESULT_IF_FAILED(result); - } - } - common::SdMountManager::Unmount(); -} - -void FinalizeImportThread() -{ - s_ImportThread.Join(); - s_ImportThread.Finalize(); -} - -bool IsImportFinished() -{ - return !s_ImportThread.IsAlive(); -} - -void CreateWriteFinishedFile() -{ - CreateEmptyFile(common::WRITE_FINISHED_CHECK_PATHNAME); -} - -void CreateConsoleInitializedFile() -{ - CreateEmptyFile(common::INITIALIZED_CHECK_PATHNAME); -} - -void CreateUpdateFinishedFile() -{ - CreateEmptyFile(common::UPDATE_CHECK_PATHNAME); -} - -void CreateRtcSyncFinishedFile() -{ - CreateEmptyFile(common::RTC_SYNC_CHECK_PATHNAME); -} - -void CreateTryRestoreSameConsoleFile() -{ - CreateEmptyFile(common::TRY_RESTORE_SAME_CONSOLE_PATHNAME); -} - -u32 GetImportProgress() -{ - return common::GetProgress(); -} - -bool UpdateNetworkSetting(nn::ac::NetworkSetting& networkSetting) -{ - nn::Result result; - bool retval = true; - - result = nn::ac::InitializeInternal(); - if(result.IsFailure()) - { - retval = false; - COMMON_LOGGER("Error: nn::ac::InitializeInternal() failed\n"); - } - else - { - //特に入力させる必要のない自動で設定する項目 - networkSetting.wireless.enable = true; - networkSetting.wireless.multiSsid.enable = false; - networkSetting.ip.enableDHCP = true; - networkSetting.scanlessConnect.hasConnected = false; - networkSetting.proxy.enable = false; - networkSetting.other.enableUPnP = false; - - // 現在のインターネット設定1を一時的に保持 - result = nn::ac::LoadNetworkSetting(0, s_CurrentNetowrkSetting1.setting); - if(result.IsSuccess()) - { - s_CurrentNetowrkSetting1.isValid = true; - } - else - { - s_CurrentNetowrkSetting1.isValid = false; - } - - result = nn::ac::UpdateNetworkSetting( 0, networkSetting ); - if(!result.IsSuccess()) - { - retval = false; - COMMON_LOGGER("Error: SetNetworkSetting (Update Error)\n"); - } - else - { - result = nn::ac::FinalizeInternal(); - if (!result.IsSuccess()) - { - retval = false; - COMMON_LOGGER("Error: SetNetworkSetting (Finalize Error)\n"); - } - } - } - - return retval; -} - -bool ReadSetting(bool* nupOnly) -{ - nn::Result result; - bool retval = true; - common::ConfigFileLoader configfileLoader; - - common::SdMountManager::Mount(); - size_t size = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* heapAddr = common::HeapManager::GetHeap()->Allocate(size); - - if(heapAddr != NULL) - { - result = configfileLoader.Initialize(common::AP_SETTING_PATHNAME, heapAddr, size); - if (result.IsSuccess()) - { - nn::ac::NetworkSetting networkSetting; - - { - const char* ssid = configfileLoader.ReadAsChar(L"SSID"); // SSID - if(ssid == NULL) - { - COMMON_LOGGER("SSID: is missing\n"); - retval = false; - } - else - { - std::strncpy(reinterpret_cast (networkSetting.wireless.essidSecurity.ssid), ssid, 32); - networkSetting.wireless.essidSecurity.ssidLength = std::strlen(ssid) % 33; - COMMON_LOGGER("SSID = %s\n", networkSetting.wireless.essidSecurity.ssid); - } - } - - - { - const char* mode = configfileLoader.ReadAsChar(L"MODE"); // MODE - if(mode == NULL) - { - COMMON_LOGGER("MODE: is missing\n"); - retval = false; - } - else - { - if (std::strcmp(mode, "OPEN") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::OPEN; - } - else if (std::strcmp(mode, "WEP40") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WEP_40BIT; - } - else if (std::strcmp(mode, "WEP104") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WEP_104BIT; - } - else if (std::strcmp(mode, "WEP128") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WEP_128BIT; - } - else if (std::strcmp(mode, "WPA-TKIP") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WPA_TKIP; - } - else if (std::strcmp(mode, "WPA2-TKIP") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WPA2_TKIP; - } - else if (std::strcmp(mode, "WPA-AES") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WPA_AES; - } - else if (std::strcmp(mode, "WPA2-AES") == 0) - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::WPA2_AES; - } - else - { - networkSetting.wireless.essidSecurity.securityMode = nn::ac::OPEN; - } - - switch (networkSetting.wireless.essidSecurity.securityMode) - { - case nn::ac::OPEN: - { - COMMON_LOGGER("MODE = OPEN\n"); - } - break; - - case nn::ac::WEP_40BIT: - { - COMMON_LOGGER("MODE = WEP_40BIT\n"); - } - break; - - case nn::ac::WEP_104BIT: - { - COMMON_LOGGER("MODE = WEP_104BIT\n"); - } - break; - - case nn::ac::WEP_128BIT: - { - COMMON_LOGGER("MODE = WEP_128BIT\n"); - } - break; - - case nn::ac::WPA_TKIP: - { - COMMON_LOGGER("MODE = WPA_TKIP\n"); - } - break; - - case nn::ac::WPA2_TKIP: - { - COMMON_LOGGER("MODE = WPA2_TKIP\n"); - } - break; - - case nn::ac::WPA_AES: - { - COMMON_LOGGER("MODE = WPA_AES\n"); - } - break; - - case nn::ac::WPA2_AES: - { - COMMON_LOGGER("MODE = WPA2_AES\n"); - } - break; - - } - - } - } - - { - const char* pass = configfileLoader.ReadAsChar(L"PASS"); // PASS - if(pass == NULL) - { - COMMON_LOGGER("PASS: is missing\n"); - retval = false; - } - else - { - switch (networkSetting.wireless.essidSecurity.securityMode) - { - case nn::ac::WEP_40BIT: - case nn::ac::WEP_104BIT: - case nn::ac::WEP_128BIT: - { - std::strncpy(reinterpret_cast (networkSetting.wireless.essidSecurity.passphrase), - pass, 64); - std::memcpy(networkSetting.wireless.essidSecurity.key, - networkSetting.wireless.essidSecurity.passphrase, 64); - } - break; - - case nn::ac::WPA_TKIP: - case nn::ac::WPA2_TKIP: - case nn::ac::WPA_AES: - case nn::ac::WPA2_AES: - { - std::strncpy(reinterpret_cast (networkSetting.wireless.essidSecurity.passphrase), - pass, 64); - size_t phrase_size = std::strlen( - reinterpret_cast (networkSetting.wireless.essidSecurity.passphrase)); - - nn::nwm::Ssid ssid(reinterpret_cast (networkSetting.wireless.essidSecurity.ssid)); - nn::nwm::ConvertPasswordToPsk( - reinterpret_cast (networkSetting.wireless.essidSecurity.passphrase), - phrase_size, ssid, networkSetting.wireless.essidSecurity.key); - } - break; - - case nn::ac::OPEN: - default: - { - //do nothing - } - break; - } - } - } - - - { - s32 dnsAuto; // DNS_AUTO - if(configfileLoader.ReadAsChar(L"DNS_AUTO") == NULL) - { - COMMON_LOGGER("DNS_AUTO: is missing\n"); - retval = false; - } - else - { - dnsAuto = configfileLoader.ReadAsInteger(L"DNS_AUTO"); - if (dnsAuto == 1) - { - networkSetting.ip.autoDNSSetting = true; - } - else - { - networkSetting.ip.autoDNSSetting = false; - } - - COMMON_LOGGER("DNS_AUTO = %d\n", networkSetting.ip.autoDNSSetting); - - } - } - - { - const char* dnsPrimary = configfileLoader.ReadAsChar(L"DNS_PRI"); // プライマリDNS - if(!networkSetting.ip.autoDNSSetting) - { - if (dnsPrimary == NULL) - { - COMMON_LOGGER("DNS_PRI: is missing\n"); - retval = false; - - } - else - { - u8 dns[4]; - nn::socket::InAddr addr; - if (1 == nn::socket::InetAtoN(dnsPrimary, &addr)) - { - dns[3] = (0xff & (addr.addr >> 24)); - dns[2] = (0xff & (addr.addr >> 16)); - dns[1] = (0xff & (addr.addr >> 8)); - dns[0] = (0xff & (addr.addr)); - } - std::memcpy(networkSetting.ip.dns[0], dns, 4); - COMMON_LOGGER("DNS_PRI = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[0][0], - networkSetting.ip.dns[0][1], - networkSetting.ip.dns[0][2], - networkSetting.ip.dns[0][3]); - - } - } - } - - { - const char* dnsSecondary = configfileLoader.ReadAsChar(L"DNS_SEC"); // セカンダリDNS - if(!networkSetting.ip.autoDNSSetting) - { - if(dnsSecondary == NULL) - { - COMMON_LOGGER("DNS_SEC: is missing\n"); - retval = false; - } - else - { - u8 dns[4]; - nn::socket::InAddr addr; - if (1 == nn::socket::InetAtoN(dnsSecondary, &addr)) - { - dns[3] = (0xff & (addr.addr >> 24)); - dns[2] = (0xff & (addr.addr >> 16)); - dns[1] = (0xff & (addr.addr >> 8)); - dns[0] = (0xff & (addr.addr)); - } - std::memcpy(networkSetting.ip.dns[1], dns, 4); - COMMON_LOGGER("DNS_SEC = %03d.%03d.%03d.%03d\n", networkSetting.ip.dns[1][0], - networkSetting.ip.dns[1][1], - networkSetting.ip.dns[1][2], - networkSetting.ip.dns[1][3]); - - } - } - } - - { - const char* ntpServerName = configfileLoader.ReadAsChar(L"NTPSRV"); // NTPサーバ - if(ntpServerName == NULL) - { - COMMON_LOGGER("NTPSRV: is missing\n"); - retval = false; - } - else - { - std::strlcpy(s_NtpServerName, ntpServerName, sizeof(s_NtpServerName)); - COMMON_LOGGER("NTPSRV = %s\n", s_NtpServerName); - } - - - } - - { - const char* timeZone = configfileLoader.ReadAsChar(L"TIMEZONE"); // タイムゾーン - if(timeZone == NULL) - { - COMMON_LOGGER("TIMEZONE: is missing\n"); - retval = false; - } - else - { - std::strlcpy(s_TimeZoneStr, timeZone, sizeof(s_TimeZoneStr)); - COMMON_LOGGER("TIMEZONE = %s\n", s_TimeZoneStr); - ConvertTimeZoneString(s_TimeZoneStr); - } - - } - - { - NN_NULL_ASSERT(nupOnly); - if (configfileLoader.ReadAsChar(L"NUP_ONLY") != NULL) - { - s32 num = configfileLoader.ReadAsInteger(L"NUP_ONLY"); - if (num == 1) - { - *nupOnly = true; - COMMON_LOGGER("NUP Only Mode.\n"); - } - } - } - - configfileLoader.Finalize(); - - // 書き込み完了しなければfalse - if(!UpdateNetworkSetting(networkSetting)) - { - retval = false; - } - - } - else - { - NN_LOG("configfileLoader Initialize Failed\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - retval = false; - } - common::HeapManager::GetHeap()->Free(heapAddr); - } - else - { - NN_LOG("Can't Allocate Heap\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - retval = false; - } - - common::SdMountManager::Unmount(); - return retval; -} - -char* GetNtpServerName() -{ - return s_NtpServerName; -} - -TimeZone GetTimeZone() -{ - return s_TimeZone; -} - -CheckedNetworkSetting* GetTempNetworkSetting() -{ - return &s_CurrentNetowrkSetting1; -} - -void ImportTwlData(enum common::TWL_PATH_INDEX path) -{ - NN_ASSERT(path < common::TWL_PATHNAME_MAX); - - nn::Result result; - - result = nn::fs::MountSpecialArchive(common::TWL_ARCHIVE_NAME_TABLE[path], common::TWL_FS_ARCHIVE_KIND[path]); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = common::SdMountManager::Mount(); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - NN_LOG("AllocatableSize = %d\n", bufSize); - - - u32 fileNum = 0; - u32 fileSize = 0; - - common::CalculateFileNum(::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring( - common::SD_TWL_ROOTNAME_TABLE[path]), fileNum, fileSize); - // ファイルサイズ設定 - common::InitializeTransferProgress(fileSize); - - NN_LOG("File Number = %d\n", fileNum); - NN_LOG("File Size = %d\n", fileSize); - - - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - wchar_t archiveName[256]; - ::std::mbstowcs(archiveName, common::TWL_ARCHIVE_NAME_TABLE[path], std::strlen(common::TWL_ARCHIVE_NAME_TABLE[path]) + 1); - std::wstring archiveString(archiveName); - common::CopyDirectory( - (::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring(common::SD_TWL_ROOTNAME_TABLE[path])).c_str(), - (archiveString + ::std::wstring(L"/")).c_str(), - buf, bufSize); - - common::HeapManager::GetHeap()->Free(buf); - } - - common::SdMountManager::Unmount(); - nn::fs::Unmount(common::TWL_ARCHIVE_NAME_TABLE[path]); - -} - -void ImportTwlPhotoDataFunc() -{ - COMMON_LOGGER("Import Twl Photo Data.\n"); - ImportTwlData(common::TWL_PHOTO); -} - -void ImportTwlSoundDataFunc() -{ - COMMON_LOGGER("Import Twl Sound Data.\n"); - ImportTwlData(common::TWL_SOUND); -} - -void ImportTwlPhotoData() -{ - s_ImportThread.Start(ImportTwlPhotoDataFunc, s_ImportThreadStack); -} - -void ImportTwlSoundData() -{ - s_ImportThread.Start(ImportTwlSoundDataFunc, s_ImportThreadStack); -} - - -void ClearFileReadResult() -{ - s_CheckedEqualsIVSFileandIVS = false; - s_CheckedEqualsRegionDataandRegion = false; - s_ReadSerialNumber = false; -} - -void ImportPlayHistoryThreadFunc() -{ - common::PlayHistoryManager historyManager; - - COMMON_LOGGER("Import PlayHistory\n"); - historyManager.Import(); -} - -void ImportPlayHistory() -{ - s_ImportThread.Start(ImportPlayHistoryThreadFunc, s_ImportThreadStack); -} - -void ExportTouchPanelCfgData() -{ - using namespace nn::cfg::CTR::detail; - - nn::Result result; - nn::cfg::CTR::detail::TouchPanelCfgData touchPanelCfgData; - common::SdReaderWriter sdWriter; - - COMMON_LOGGER("Export TouchPanelData\n"); - - common::SdMountManager::Mount(); - - result = nn::cfg::CTR::init::GetConfig(&touchPanelCfgData, sizeof(TouchPanelCfgData), - GET_CFG_KEY(NN_CFG_HID, NN_CFG_HID_CAL_TOUCHPANEL)); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - result = sdWriter.WriteBufWithCmac(common::TOUCH_PANEL_CALIBRATION_PATHNAME, &touchPanelCfgData, sizeof(touchPanelCfgData)); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - - common::SdMountManager::Unmount(); -} - -bool ImportTouchPanelCfgData(nn::cfg::CTR::detail::TouchPanelCfgData* data) -{ - using namespace nn::cfg::CTR::detail; - - nn::Result result; - bool retval = false; - - COMMON_LOGGER("Import TouchPanelData\n"); - - common::SdMountManager::Mount(); - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::TOUCH_PANEL_CALIBRATION_PATHNAME, buf, bufSize, &readSize); - if(result.IsSuccess()) - { - // SDから読み出し成功 - std::memcpy(data, buf, readSize); - retval = true; - } - else - { - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - common::HeapManager::GetHeap()->Free(buf); - } - - common::SdMountManager::Unmount(); - return retval; -} - -void InitializeHardwareDependentSetting() -{ - using namespace nn::cfg::CTR::detail; - nn::Result result = nn::ResultSuccess(); - - nn::cfg::CTR::detail::TouchPanelCfgData touchPanelCfgData; - if(ImportTouchPanelCfgData(&touchPanelCfgData)) - { - result = nn::cfg::CTR::init::SetConfig(GET_CFG_KEY(NN_CFG_HID, NN_CFG_HID_CAL_TOUCHPANEL), &touchPanelCfgData, - sizeof(TouchPanelCfgData)); - } - - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - nn::cfg::CTR::init::ResetCameraCalibration(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - nn::cfg::CTR::init::ResetAnalogStickCalibration(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); -} - -void ImportData() -{ - static bool init = true; - if(init) - { - // NANDのごみを削除する - Cleanup(); - - // SDカードのIVSファイルを書き込む - ImportIvs(); - - // NORデータを書き込む - ImportNorData(); - - // タッチパネルキャリブレーションデータをSDカードに出力する - // 本体初期化後はcal値が設定されている - ExportTouchPanelCfgData(); - - // SDカードのセーブデータをNANDに書き込む - ImportSaveData(); - - init = false; - } - -} - -} diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Importer.h b/branches/work/SD_AesCmac/ConsoleRestore/Importer.h deleted file mode 100644 index 03f46d1..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Importer.h +++ /dev/null @@ -1,97 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Importer.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 IMPORTER_H_ -#define IMPORTER_H_ - -#include -#include "FileName.h" -#include - -namespace ConsoleRestore -{ - -bool EqualsIVSFileandIVS(); -bool EqualsRegionDataandRegion(); -u8* ReadSerialNumber(); - -void FinalizeImportThread(); -bool IsImportFinished(); -void ImportTwlSoundData(); -void ImportTwlPhotoData(); -void ImportData(); -void CreateWriteFinishedFile(); -void CreateUpdateFinishedFile(); -void CreateConsoleInitializedFile(); -void CreateRtcSyncFinishedFile(); -void CreateTryRestoreSameConsoleFile(); -u32 GetImportProgress(); - -// NANDのごみを削除する -void Cleanup(); - -const wchar_t* const CHECK_FILENAME_TABLE[] = -{ - common::UPDATE_CHECK_PATHNAME, - common::INITIALIZED_CHECK_PATHNAME, - common::WRITE_FINISHED_CHECK_PATHNAME, - common::RTC_SYNC_CHECK_PATHNAME, - common::TRY_RESTORE_SAME_CONSOLE_PATHNAME -}; - -void DeleteAllCheckFiles(); - -struct TimeZone -{ - u32 hour; - u32 minutes; - bool isMinus; - NN_PADDING3; -}; - -bool ReadSetting(bool* nupOnly); -char* GetNtpServerName(); -TimeZone GetTimeZone(); - -struct CheckedNetworkSetting -{ - nn::ac::CTR::NetworkSetting setting; - bool isValid; - NN_PADDING3; -}; - -CheckedNetworkSetting* GetTempNetworkSetting(); -void ImportCountryLanguageData(); -void ImportMcuRtc(); - -// TWL写真領域を初期化してから本体初期化を行う -void InitializeFileSystem(); - -void ClearFileReadResult(); - -// プレイ履歴を読み込みます。ptmのセーブデータ移行後に呼び出す必要があります -void ImportPlayHistory(); - -// cfgのハードウェア固有領域をcal値で初期化します -void InitializeHardwareDependentSetting(); - -// SDカード上のバージョン情報を読みます -void ReadVersionData(); -// 移行元本体がNUP済みかどうか -bool AlreadyExecutedNup(); - -} - -#endif /* IMPORTER_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.cpp b/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.cpp deleted file mode 100644 index f2a5114..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: NtpClient.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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Importer.h" -#include "CommonLogger.h" - -namespace ConsoleRestore -{ - -namespace { - -const size_t NTP_THREAD_STACK_SIZE = 0x1000; -nn::os::Thread s_NtpThread; -nn::os::StackBuffer s_NtpThreadStack; -bool s_NtpSyncSuccessed = false; - - -struct NTP_Packet{ // NTPパケット - u32 controlWord; - u32 rootDelay; - u32 rootDispersion; - u32 referenceId; - s64 referenceTimestamp; - s64 startTimestamp; - s64 receiveTimestamp; - u32 transmitTimestampSeconds; - u32 transmitTimestampFractions; -}; - -const size_t TIMEOUT_MILLISECOND = 5000; // タイムアウト ミリ秒数 -NTP_Packet s_NTPSendPacket; // 送信するNTPパケット -NTP_Packet s_NTPRecvPacket; // 受信するNTPパケット -const u32 NTP_PORT_NUM = 123; - -nn::Result InitializeNetwork(void) -{ - nn::Result result; - nn::ac::Config config; - - result = nn::ac::Initialize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - // 接続要求用のパラメータを作成 - result = nn::ac::CreateDefaultConfig(&config); - if (result.IsFailure()) - { - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - return result; - } - - // デバッグ用に接続テストを無効化 - nn::ac::DebugSetNetworkArea(&config, nn::ac::NETWORK_AREA_LAN); - - // 接続要求を発行 - result = nn::ac::ConnectWithoutEula(config); - if (result.IsFailure()) - { - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - return result; - } - - return nn::ResultSuccess(); -} - -nn::Result FinalizeNetwork(void) -{ - nn::Result result; - - // 接続要求用のパラメータを作成 - result = nn::ac::Close(); - NN_UTIL_RETURN_IF_FAILED(result); - - result = nn::ac::Finalize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - return nn::ResultSuccess(); -} - -bool GetNtpTime(u32* ntpTime) -{ - nn::Result result; - - bool retval = true; - NN_LOG("Initializing network.\n"); - - // 本体に書き込まれているネットワーク設定を使ってネットワーク接続を初期化 - result = InitializeNetwork(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - { - NN_LOG("Initializing socket..\n"); - - // 一つのスレッドからソケット API を利用する - const s32 sessionCount = 1; - // ソケットの送受信バッファとして 64 KB を割り当て - const size_t bufferSizeForSockets = 65536; - // ソケットライブラリに必要なワークサイズを求める - const size_t workSizeForLibrary = nn::socket::GetRequiredMemorySize(bufferSizeForSockets, sessionCount); - - // ワークメモリを確保して 4KB にアラインにする - u8* pWorkMemory = new u8[workSizeForLibrary + 4096]; - uptr workMemoryAddress = nn::math::RoundUp(reinterpret_cast (pWorkMemory), 4096); - - // ソケットライブラリの初期化 - result = nn::socket::Initialize(workMemoryAddress, workSizeForLibrary, bufferSizeForSockets, sessionCount); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - { - s32 ret; - nn::socket::InAddr addr, netmask; - ret = nn::socket::GetPrimaryAddress(reinterpret_cast (&addr), reinterpret_cast (&netmask)); - NN_ASSERT(ret == 0); - COMMON_LOGGER("host : %s\n", nn::socket::InetNtoA(addr)); - COMMON_LOGGER("netmask : %s\n", nn::socket::InetNtoA(netmask)); - - nn::socket::InAddr dns1, dns2; - ret = nn::socket::GetResolver(reinterpret_cast (&dns1), reinterpret_cast (&dns2)); - if (ret == 0) - { - COMMON_LOGGER("dns1 : %s\n", nn::socket::InetNtoA(dns1)); - COMMON_LOGGER("dns2 : %s\n", nn::socket::InetNtoA(dns2)); - } - - nn::socket::InAddr gateway; - ret = nn::socket::GetDefaultGateway(reinterpret_cast (&gateway)); - if (ret == 0) - { - COMMON_LOGGER("gateway : %s\n", nn::socket::InetNtoA(gateway)); - } - - COMMON_LOGGER("\n"); -#ifndef NN_SWITCH_DISABLE_DEBUG_PRINT - nn::socket::DumpRoutingTable(); -#endif - } - - { - s32 socket = nn::socket::Socket(nn::socket::PF_INET, nn::socket::SOCK_DGRAM, 0); - NN_LOG("socket = %d\n", socket); - - // クライアントアドレスの設定 - nn::socket::SockAddrIn host_addr; - host_addr.len = sizeof(nn::socket::SockAddrIn); - host_addr.family = nn::socket::AF_INET; - host_addr.addr.addr = 0; - host_addr.port = nn::socket::HtoNs(NTP_PORT_NUM); - - // ローカルアドレスをバインド - s32 ret = nn::socket::Bind(socket, &host_addr); - NN_LOG("bind = %d\n", ret); - - // ******************************************************************************** - // NTPパケットを生成して送る - // ******************************************************************************** - - // サーバアドレスの設定 - nn::socket::SockAddrIn serverSockAddrIn; - serverSockAddrIn.len = sizeof(nn::socket::SockAddrIn); - serverSockAddrIn.family = nn::socket::AF_INET; - - // GetHostByNameを使う場合 - nn::socket::HostEnt* serverHostent; - u64 serveraddr = 0; - serverHostent = nn::socket::GetHostByName(GetNtpServerName()); - if (serverHostent == NULL) - { - COMMON_LOGGER("Error: GetHostByName %s\n", GetNtpServerName()); - retval = false; - } - else - { - // サーバのホスト情報からIPアドレスをコピー - serveraddr = *(reinterpret_cast (serverHostent->addrList[0])); - } - serverSockAddrIn.addr.addr = serveraddr; - COMMON_LOGGER("Destination address: %s\n", nn::socket::InetNtoA(serverSockAddrIn.addr)); - serverSockAddrIn.port = nn::socket::HtoNs(NTP_PORT_NUM); // ポート番号 - - // NTPパケットをSNTP用に初期化する - s_NTPSendPacket.controlWord = nn::socket::HtoNl(0x0B000000); - s_NTPSendPacket.rootDelay = 0; - s_NTPSendPacket.rootDispersion = 0; - s_NTPSendPacket.referenceId = 0; - s_NTPSendPacket.referenceTimestamp = 0; - s_NTPSendPacket.startTimestamp = 0; - s_NTPSendPacket.receiveTimestamp = 0; - s_NTPSendPacket.transmitTimestampSeconds = 0; - s_NTPSendPacket.transmitTimestampFractions = 0; - - // サーバを指定してNTPパケットを送信する - if ((ret = nn::socket::SendTo(socket, reinterpret_cast (&s_NTPSendPacket), sizeof(s_NTPSendPacket), 0, - &serverSockAddrIn)) < 0) - { - COMMON_LOGGER("Error: Failed Send to Server, %d\n", ret); - retval = false; - } - - NN_LOG("SendTo finished\n"); - - // 受信待ち - nn::socket::PollFd pollFd; - pollFd.fd = socket; - pollFd.events = nn::socket::POLLRDNORM; - if ((ret = nn::socket::Poll(&pollFd, 1, TIMEOUT_MILLISECOND)) < 0) - { - COMMON_LOGGER("Error: recv error, %d\n", ret); - retval = false; - } - - NN_LOG("Poll Finished\n"); - - switch (pollFd.revents) - { - case nn::socket::POLLERR: // ソケットにエラーが発生しました。 - COMMON_LOGGER("Error: POLLERR %s %d\n", __FILE__, __LINE__); - retval = false; - break; - case nn::socket::POLLHUP: // ストリーム・ソケットが未接続です。 - COMMON_LOGGER("Error: POLLHUP %s %d\n", __FILE__, __LINE__); - retval = false; - break; - case nn::socket::POLLNVAL: // 不正なソケット記述子です。 - COMMON_LOGGER("Error: POLLNVAL %s %d\n", __FILE__, __LINE__); - retval = false; - break; - default: - break; - } - - // サーバから時刻情報を受信する - // サーバを指定して受信を行う - // 受信するまで待たされる - if ((ret = nn::socket::RecvFrom(socket, reinterpret_cast (&s_NTPRecvPacket), sizeof(s_NTPRecvPacket), nn::socket::MSG_DONTWAIT, - &serverSockAddrIn)) < 0) - { - COMMON_LOGGER("Error: RecvFrom, %d\n", ret); - retval = false; - } - - NN_LOG("RecvFrom finished\n"); - - // NTPサーバから取得した時刻を現地時間に変換する - *ntpTime = nn::socket::NtoHl(s_NTPRecvPacket.transmitTimestampSeconds) - 2208988800; /* 1970/01/01 からの秒数に変換 */ - NN_LOG("ntp_time = %d\n", ntpTime); - - nn::socket::Close(socket); - NN_UNUSED_VAR(ret); - } - - NN_LOG("Finalizing socket..\n"); - // ソケットライブラリの終了 - result = nn::socket::Finalize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - - NN_LOG("Finalizing network.\n"); - result = FinalizeNetwork(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - return retval; -} - -void RestoreCurrentInternetSetting() -{ - COMMON_LOGGER("Restore Current Internet Setting\n"); - nn::Result result; - if (GetTempNetworkSetting()->isValid) - { - result = nn::ac::CTR::UpdateNetworkSetting(0, GetTempNetworkSetting()->setting); - COMMON_LOGGER_RESULT_IF_FAILED(result); - } - else - { - // 無効の場合は消去しておく - result = nn::ac::CTR::RemoveNetworkSetting(0); - COMMON_LOGGER_RESULT_IF_FAILED(result); - } - - result = nn::ac::FlushNetworkSetting(); - COMMON_LOGGER_RESULT_IF_FAILED(result); - - result = nn::ac::FinalizeInternal(); - COMMON_LOGGER_RESULT_IF_FAILED(result); -} - -} - -void NtpThreadFunc() -{ - // NTP時間を取得する - u32 ntpTime; - if (GetNtpTime(&ntpTime)) - { - // タイムゾーンを考慮してDateTimeに変換する - TimeZone timeZone = GetTimeZone(); - - // 1970/01/01 - nn::fnd::DateTime utc = nn::fnd::DateTime(1970, 1, 1, 0, 0, 0, 0); - nn::fnd::DateTime current = utc + nn::fnd::TimeSpan::FromSeconds(ntpTime); - - if (timeZone.isMinus) - { - current -= (nn::fnd::TimeSpan::FromHours(timeZone.hour) + nn::fnd::TimeSpan::FromMinutes(timeZone.minutes)); - } - else - { - current += nn::fnd::TimeSpan::FromHours(timeZone.hour) + nn::fnd::TimeSpan::FromMinutes(timeZone.minutes); - } - - // SWCを書き込む - nn::ptm::CTR::SetUserTime(current); - - COMMON_LOGGER("Set User Time %04d/%02d/%02d %02d:%02d:%02d\n", - current.GetYear(), current.GetMonth(), current.GetDay(), current.GetHour(), current.GetMinute(), current.GetSecond()); - - s_NtpSyncSuccessed = true; - } - else - { - COMMON_LOGGER("Failed Get Ntp Time\n"); - s_NtpSyncSuccessed = false; - } - - // インターネット設定を元に戻す - RestoreCurrentInternetSetting(); -} - -bool IsTimeAdjustFinished() -{ - // Initialize済みかつ終了 - return s_NtpThread.IsValid() && !s_NtpThread.IsAlive(); -} - -bool IsTimeAdjustSuccessed() -{ - return s_NtpSyncSuccessed; -} - -void AdjustTime() -{ - nn::Result result; - - result = nn::ac::CTR::InitializeInternal(); - COMMON_LOGGER_RESULT_IF_FAILED(result); - - if(IsTimeAdjustFinished()) - { - s_NtpThread.Join(); - s_NtpThread.Finalize(); - } - s_NtpThread.Start( NtpThreadFunc, s_NtpThreadStack); -} - -} diff --git a/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.h b/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.h deleted file mode 100644 index 7c7bcf1..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/NtpClient.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: NtpClient.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 NTPCLIENT_H_ -#define NTPCLIENT_H_ - -namespace ConsoleRestore -{ - -u32 AdjustTime(); -bool IsTimeAdjustFinished(); -bool IsTimeAdjustSuccessed(); - -} - -#endif /* NTPCLIENT_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/OMakefile b/branches/work/SD_AesCmac/ConsoleRestore/OMakefile deleted file mode 100644 index 90b2103..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/OMakefile +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env omake -#---------------------------------------------------------------------------- -# Project: Horizon -# File: OMakefile -# -# Copyright (C)2009 Nintendo Co., Ltd. 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$ -#---------------------------------------------------------------------------- -SUPPORTED_TARGETS = CTR-T*.Process.MPCore.* -#MAKECSU = true -#INSTALL_SDK_TOOL = true -CTR_APPTYPE = BOTH -CTR_MAKE_DEVELOPMENT_IMAGE = true - -TARGET_PROGRAM = ConsoleRestore - -SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include) -INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \ - ../common - -SOURCES[] = - ConsoleRestore.cpp - Controller.cpp - Importer.cpp - Updater.cpp - Ntpclient.cpp - ../common/HardwareInfo.cpp - ../common/DrawSystemState.cpp - ../common/FileTransfer.cpp - ../common/FileChecker.cpp - ../common/SdReaderWriter.cpp - ../common/HeapManager.cpp - ../common/SdLogger.cpp - ../common/wave.cpp - ../common/SimplePlayer.cpp - ../common/LogConsole.cpp - ../common/CommonLogger.cpp - ../common/SdMountManager.cpp - ../common/configLoader.cpp - ../common/PlayHistoryManager.cpp - ../common/VersionDetect.cpp - -CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf - -ROMFS_ROOT = ../common/romfiles - -LIBS += libnn_cfg \ - libnn_driversEeprom \ - libnn_driversi2c \ - libnn_driversCal \ - libnn_crypto \ - libnn_driversCodec \ - libnn_spi \ - libnn_gpio \ - libnn_pdn \ - libnn_mcu \ - libnn_i2c \ - libnn_driversCamera \ - libnn_ps \ - libnn_driversRsa \ - lib_demo \ - libnn_nwm \ - libnn_friends \ - libnn_ns \ - libnn_am \ - libnn_nim \ - -INSTALL_SDK_TOOL = true - -ROM_SPEC_FILE = $(TARGET_PROGRAM).rsf -DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/_private/RepairTool.desc - -include $(ROOT_OMAKE)/modulerules - -VERSION_H = $(file version.h) - -$(VERSION_H): $(SOURCES) - section - bash genversion.sh - -RequireSetup($(VERSION_H)) -build: version.h $(DEFAULT_TARGETS) diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Updater.cpp b/branches/work/SD_AesCmac/ConsoleRestore/Updater.cpp deleted file mode 100644 index 5985375..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Updater.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Updater.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 -#include -#include -#include -#include -#include -#include -#include - -#include "CommonLogger.h" - -namespace ConsoleRestore -{ - -using namespace ES_NAMESPACE; -using namespace EC_NAMESPACE; - -/* ------------------------------------------------------------------- - GetCustomerSupportCode --------------------------------------------------------------------- */ -#define NIM_UPDATER_RESULT_CHECK(result) \ -do { \ - if (result.IsFailure()) \ - { \ - ECCustomerSupportCode csc; \ - NN_UTIL_PANIC_IF_FAILED( \ - nn::nim::Updater::GetCustomerSupportCode(&csc)); \ - COMMON_LOGGER("CSCode: %d\n", csc); \ - nn::dbg::PrintResult(result); \ - s_Result = result; \ - goto LABEL_FINALIZE; \ - } \ -} while(0) - -namespace -{ - -nn::Result s_Result = nn::ResultSuccess(); - -const size_t UPDATER_THREAD_STACK_SIZE = 0x1000; -nn::os::Thread s_UpdaterThread; -nn::os::StackBuffer s_UpdaterThreadStack; - -u64 s_Progress = 0; - -} - -nn::Result PrintNetworkSetting() -{ - nn::ac::NetworkSetting networkSetting; - NN_UTIL_RETURN_IF_FAILED(nn::ac::LoadNetworkSetting(0, networkSetting)); - COMMON_LOGGER("SSID: %s\n", networkSetting.wireless.essidSecurity.ssid); - COMMON_LOGGER("DNS : %d.%d.%d.%d\n", - networkSetting.ip.dns[0][0], networkSetting.ip.dns[0][1], - networkSetting.ip.dns[0][2], networkSetting.ip.dns[0][3]); - return nn::ResultSuccess(); -} - - -nn::Result ConnectNetwork() -{ - nn::Result result = nn::ResultSuccess(); - nn::ac::Config config; - - result = nn::ac::CreateDefaultConfig(&config); - NN_UTIL_RETURN_IF_FAILED(result); - - result = nn::ac::ConnectWithoutEula(config); - NN_UTIL_RETURN_IF_FAILED(result); - - NN_LOG("Success nn::ac::ConnectWithoutEula\n"); - - NN_UTIL_RETURN_IF_FAILED(PrintNetworkSetting()); - - return nn::ResultSuccess(); -} - -nn::Result InitializeInternal() -{ - nn::Result result = nn::ResultSuccess(); - - result = nn::ac::InitializeInternal(); - NN_UTIL_RETURN_IF_FAILED(result); - - result = ConnectNetwork(); - NN_UTIL_RETURN_IF_FAILED(result); - - return nn::ResultSuccess(); -} - -nn::Result FinalizeInternal() -{ - nn::Result result = nn::ResultSuccess(); - - nn::ac::CloseAll(); - - result = nn::ac::FinalizeInternal(); - NN_UTIL_RETURN_IF_FAILED(result); - - return nn::ResultSuccess(); -} - -void UpdateThreadFunc() -{ - nn::Result result; - - NN_LOG("********************UpdateThreadFunc Start********************\n"); - nn::cfg::CTR::init::Initialize(); - nn::cfg::CfgCountryCode country; - nn::cfg::CfgRegionCode region; - const char *regionStr; - const char *countryStr; - NN_UNUSED_VAR(regionStr); - NN_UNUSED_VAR(countryStr); - - country = nn::cfg::GetCountry(); - region = nn::cfg::GetRegion(); - countryStr = nn::cfg::GetCountryCodeA2(country); - regionStr = nn::cfg::GetRegionCodeA3(region); - - COMMON_LOGGER("[Updater] country:%2d:%s\n", country, countryStr); - COMMON_LOGGER("[Updater] region :%2d:%s\n", region, regionStr); - - /* ------------------------------------------------------------------- - Initialize - -------------------------------------------------------------------- */ - NN_LOG("[Updater] nn::nim::InitializeForUpdater\n"); - result = nn::nim::InitializeForUpdater(); - NIM_UPDATER_RESULT_CHECK(result); - - NN_LOG("[Updater] InitializeInternal\n"); - result = InitializeInternal(); - NIM_UPDATER_RESULT_CHECK(result); - - - /* ------------------------------------------------------------------- - StartNetworkUpdate - -------------------------------------------------------------------- */ - NN_LOG("[Updater] nn::nim::Updater::StartNetworkUpdate()\n"); - result = nn::nim::Updater::StartNetworkUpdate(); - NIM_UPDATER_RESULT_CHECK(result); - - /* ------------------------------------------------------------------- - GetProgress - -------------------------------------------------------------------- */ - NN_LOG("[Updater] nn::nim::Updater::GetProgress()\n"); - - while(true) - { - nn::nim::NetworkUpdateProgress progress; - NIM_UPDATER_RESULT_CHECK(nn::nim::Updater::GetProgress(&progress)); - NIM_UPDATER_RESULT_CHECK(progress.lastResult); - NN_LOG("\x1b[1A\x1b[K"); - NN_LOG("Downloading %2lld/%2lld %8lld/%8lld (%d)\n", - progress.downloadedTitleNum, - progress.totalTitleNum, - progress.currentDownloadedSize, - progress.currentTotalSize, - progress.state); - - // ゼロ除算を防ぐ - if(progress.totalTitleNum == 0) - { - progress.totalTitleNum++; - progress.downloadedTitleNum++; - } - if(progress.state > nn::nim::CTR::NUP_STATE_CHECKING) - { - s_Progress = progress.downloadedTitleNum * 100 / progress.totalTitleNum; - } - - if (progress.state == nn::nim::NUP_STATE_NO_NEED) - { - COMMON_LOGGER("[Updater] No need to NetworkUpdate\n"); - s_Progress = 100; - break; - } - if (progress.state == nn::nim::NUP_STATE_FINISHED) - { - COMMON_LOGGER("[Updater] Finished NetworkUpdate\n"); - s_Progress = 100; - break; - } - - nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(300)); - } - - LABEL_FINALIZE: - - /* ------------------------------------------------------------------- - Finalize - -------------------------------------------------------------------- */ - NN_LOG("[Updater] nn::nim::FinalizeForUpdater\n"); - result = nn::nim::FinalizeForUpdater(); - NIM_UPDATER_RESULT_CHECK(result); - - result = FinalizeInternal(); - NIM_UPDATER_RESULT_CHECK(result); - - NN_LOG("[Updater] Finish nim Updater demo.\n"); - -} - -void StartFGNetworkUpdate() -{ - NN_LOG("Start FGNetworkUpdate\n"); - s_Result = nn::ResultSuccess(); - s_UpdaterThread.Start(UpdateThreadFunc, s_UpdaterThreadStack); -} - -void FinishFGNetworkUpdate() -{ - NN_LOG("Finalize FGNetworkUpdate\n"); - s_UpdaterThread.Join(); - s_UpdaterThread.Finalize(); -} - -bool IsNetworkUpdateFinished() -{ - return !s_UpdaterThread.IsAlive(); -} - -u32 GetUpdateProgress() -{ - return s_Progress; -} - -nn::Result GetUpdateResult() -{ - return s_Result; -} - - -} diff --git a/branches/work/SD_AesCmac/ConsoleRestore/Updater.h b/branches/work/SD_AesCmac/ConsoleRestore/Updater.h deleted file mode 100644 index 32e6798..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/Updater.h +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Updater.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 UPDATER_H_ -#define UPDATER_H_ - -#include - -namespace ConsoleRestore -{ - -void StartFGNetworkUpdate(); -void FinishFGNetworkUpdate(); -bool IsNetworkUpdateFinished(); -u32 GetUpdateProgress(); -nn::Result GetUpdateResult(); - -} - -#endif /* UPDATER_H_ */ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/banner/model.cbmd b/branches/work/SD_AesCmac/ConsoleRestore/banner/model.cbmd deleted file mode 100644 index f1c7b62..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleRestore/banner/model.cbmd and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/banner/sound.cbsd b/branches/work/SD_AesCmac/ConsoleRestore/banner/sound.cbsd deleted file mode 100644 index f1c7b62..0000000 Binary files a/branches/work/SD_AesCmac/ConsoleRestore/banner/sound.cbsd and /dev/null differ diff --git a/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown24x24.ctpk b/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown24x24.ctpk deleted file mode 100644 index 794b136..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown24x24.ctpk +++ /dev/null @@ -1 +0,0 @@ -888yyYyYyyyYyyYyyyyYyYy8 \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown48x48.ctpk b/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown48x48.ctpk deleted file mode 100644 index 8c7da16..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/banner/unknown48x48.ctpk +++ /dev/null @@ -1 +0,0 @@ -Y8888ƺ8888YYyyYYޚ޺yY8YyYYޚyY8ޚ8 \ No newline at end of file diff --git a/branches/work/SD_AesCmac/ConsoleRestore/genversion.sh b/branches/work/SD_AesCmac/ConsoleRestore/genversion.sh deleted file mode 100755 index f59c27a..0000000 --- a/branches/work/SD_AesCmac/ConsoleRestore/genversion.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -f - -echo "#define RESTORE_VERSION_NUM \"`svnversion -n`\"" > version.h diff --git a/branches/work/SD_AesCmac/OMakefile b/branches/work/SD_AesCmac/OMakefile deleted file mode 100644 index 203c656..0000000 --- a/branches/work/SD_AesCmac/OMakefile +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env omake -#---------------------------------------------------------------------------- -# Project: Horizon -# File: OMakefile -# -# Copyright (C)2009 Nintendo Co., Ltd. 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$ -#---------------------------------------------------------------------------- - -#.SUBDIRS: $(glob D, *) -.SUBDIRS: $(exist-dirs \ - common \ - ConsoleBackup \ - ConsoleRestore \ - ) - -DefineDefaultRules() diff --git a/branches/work/SD_AesCmac/OMakeroot b/branches/work/SD_AesCmac/OMakeroot deleted file mode 100644 index 7ee1cb5..0000000 --- a/branches/work/SD_AesCmac/OMakeroot +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env omake -#---------------------------------------------------------------------------- -# Project: Horizon -# File: OMakeroot -# -# Copyright (C)2009 Nintendo Co., Ltd. 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:$ -#---------------------------------------------------------------------------- - -# fBNgCAEgɂ‚Ă̐ -# -# a) \[XR[h[gfBNgɔzuꍇ -# : -# /OMakeroot -# /foo/bar/OMakefile -# -# : -# OMakefile ƓfBNgȉ objects images ܂B -# -# /foo/bar/objects/... -# /foo/bar/images/.. -# -# -# b) \[XR[h sources ȉɔzuꍇ -# : -# /OMakeroot -# /sources/foo/bar/OMakefile -# -# : -# [gfBNgȉ objects images ܂B -# -# /objects/foo/bar/... -# /images/foo/bar/... -# -# - -# [g‹ϐ̎擾 -public.HORIZON_ROOT = -if $(defined-env HORIZON_ROOT) - HORIZON_ROOT = $(absname $(getenv HORIZON_ROOT)) - export - -if $(defined-env CTRSDK_ROOT) - CTRSDK_ROOT = $(absname $(getenv CTRSDK_ROOT)) - if $(and $(defined-env HORIZON_ROOT), $(not $(equal $(HORIZON_ROOT), $(CTRSDK_ROOT)))) - eprintln(HORIZON_ROOT CTRSDK_ROOT v܂BpXݒ肷邩Aǂ炩`ĉB) - exit(1) - HORIZON_ROOT = $(CTRSDK_ROOT) - export - -if $(not $(HORIZON_ROOT)) - eprintln($"$$CTRSDK_ROOT `Ă܂") - exit(1) - -include $(HORIZON_ROOT)/build/omake/commondefs - -DefineCommandVars() - -.PHONY: all build clean clobber -.PHONY: run run-scripts run-emumem - -# -# OMakefile ̓ǂݍ -# -.SUBDIRS: . - diff --git a/branches/work/SD_AesCmac/Readme.txt b/branches/work/SD_AesCmac/Readme.txt deleted file mode 100644 index 2f2f0d5..0000000 --- a/branches/work/SD_AesCmac/Readme.txt +++ /dev/null @@ -1,10 +0,0 @@ -yrh‹z - -ESDK -Horizon 0_14 branch r33437 - + Horizon trunk r33597cfgCu̕ύX}[W - + Horizon 1_0 branch r33839RepairTool.desc}[W - -Ecygwin -Esvnversion - diff --git a/branches/work/SD_AesCmac/common/Aes_define.h b/branches/work/SD_AesCmac/common/Aes_define.h deleted file mode 100644 index e79fe3e..0000000 --- a/branches/work/SD_AesCmac/common/Aes_define.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: Aes_define.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 AES_DEFINE_H_ -#define AES_DEFINE_H_ - -#include - -namespace common -{ - const bit8 key[AES_KEY_SIZE] = - { - 0x81, 0x35, 0xc6, 0x54, 0x19, 0x1a, 0x47, 0x2a, - 0x6b, 0x78, 0xbe, 0x25, 0x90, 0xf6, 0xee, 0x74 - }; - - const bit8 cmacKey[AES_KEY_SIZE] = - { - 0x87, 0xdd, 0xc6, 0xd6, 0xf2, 0xe0, 0x2c, 0xa6, - 0x04, 0x21, 0x9c, 0x5e, 0x33, 0x8c, 0x3d, 0xaa - }; -} - -#endif /* AES_DEFINE_H_ */ diff --git a/branches/work/SD_AesCmac/common/CommonLogger.cpp b/branches/work/SD_AesCmac/common/CommonLogger.cpp deleted file mode 100644 index ffc63b1..0000000 --- a/branches/work/SD_AesCmac/common/CommonLogger.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: CommonLogger.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 "CommonLogger.h" -#include "LogConsole_Private.h" - -namespace common -{ - -namespace Logger -{ - -namespace -{ - static CommonLogger s_CommonLogger; - -} - -CommonLogger::CommonLogger() -{ - // TODO 自動生成されたコンストラクター・スタブ - -} - -CommonLogger::~CommonLogger() -{ - // TODO Auto-generated destructor stub -} - -void CommonLogger::Initialize(u32 width, u32 height, u32 maxLine, demo::RenderSystemDrawing* renderSystem) -{ - m_CriticalSection.Initialize(); - GetConsoleInstance()->Initialize(width, height, maxLine, renderSystem); -} - -void CommonLogger::Finalize() -{ - -} - -void CommonLogger::Print(const char* fmt, ...) -{ - nn::os::CriticalSection::ScopedLock lock(m_CriticalSection); - va_list vlist; - - va_start(vlist, fmt); - - nn::dbg::detail::VPrintf(fmt, vlist); - GetSdInstance()->Print(fmt, vlist); - GetConsoleInstance()->AddText(fmt, vlist); - - va_end(vlist); -} - -void CommonLogger::PrintResult(const char* fmt, ...) -{ - nn::os::CriticalSection::ScopedLock lock(m_CriticalSection); - va_list vlist; - - va_start(vlist, fmt); - - GetSdInstance()->Print(fmt, vlist); - - va_end(vlist); -} - -void CommonLogger::ClearLog() -{ - nn::os::CriticalSection::ScopedLock lock(m_CriticalSection); - GetSdInstance()->Clear(); -} - -void CommonLogger::ScrollUp() -{ - GetConsoleInstance()->ScrollUp(); -} - -void CommonLogger::ScrollDown() -{ - GetConsoleInstance()->ScrollDown(); -} - -void CommonLogger::ScrollToBegin() -{ - GetConsoleInstance()->ScrollToBegin(); -} - -void CommonLogger::ScrollToEnd() -{ - GetConsoleInstance()->ScrollToEnd(); -} - -void CommonLogger::DrawConsole() -{ - GetConsoleInstance()->Print(); -} - -CommonLogger* GetLoggerInstance() -{ - return &s_CommonLogger; -} - -} - -} diff --git a/branches/work/SD_AesCmac/common/CommonLogger.h b/branches/work/SD_AesCmac/common/CommonLogger.h deleted file mode 100644 index 2105eae..0000000 --- a/branches/work/SD_AesCmac/common/CommonLogger.h +++ /dev/null @@ -1,84 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: CommonLogger.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 COMMONLOGGER_H_ -#define COMMONLOGGER_H_ - -#include -#include "demo.h" - -#include "SdLogger.h" -#include "LogConsole.h" - -#define COMMON_LOGGER( ... ) (void)common::Logger::GetLoggerInstance()->Print(__VA_ARGS__) -#define COMMON_LOGGER_RESULT(result, func) \ - (void)nn::dbg::PrintResult(result); \ - (void)common::Logger::GetLoggerInstance()->PrintResult("Func = %s\n", func); \ - (void)common::Logger::GetLoggerInstance()->PrintResult("Result = %X\n", result.GetPrintableBits()); \ - -#define COMMON_LOGGER_RESULT_WITH_LINE(result, line, func) \ - (void)nn::dbg::detail::Printf("%s\n", func); \ - (void)nn::dbg::detail::Printf("%d\n", line); \ - (void)nn::dbg::PrintResult(result); \ - (void)common::Logger::GetLoggerInstance()->PrintResult("Func = %s\n", func); \ - (void)common::Logger::GetLoggerInstance()->PrintResult("line = %d\n", line); \ - (void)common::Logger::GetLoggerInstance()->PrintResult("Result = %X\n", result.GetPrintableBits()); \ - -#define COMMON_LOGGER_RESULT_IF_FAILED(result) \ - if(result.IsFailure()) \ - { \ - COMMON_LOGGER_RESULT(result, __func__); \ - } \ - -#define COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result) \ - if(result.IsFailure()) \ - { \ - COMMON_LOGGER_RESULT_WITH_LINE(result, __LINE__, __func__); \ - } \ - -namespace common -{ - -namespace Logger -{ - -class CommonLogger -{ -public: - CommonLogger(); - ~CommonLogger(); - - void Initialize(u32 width, u32 height, u32 maxLine, demo::RenderSystemDrawing* renderSystem); - void Finalize(); - - void Print(const char* fmt, ...); - void PrintResult(const char* fmt, ...); - void ClearLog(); - void ScrollUp(); - void ScrollDown(); - void ScrollToBegin(); - void ScrollToEnd(); - void DrawConsole(); -private: - nn::os::CriticalSection m_CriticalSection; -}; - -CommonLogger* GetLoggerInstance(); - -} - -} - -#endif /* COMMONLOGGER_H_ */ diff --git a/branches/work/SD_AesCmac/common/DrawSystemState.cpp b/branches/work/SD_AesCmac/common/DrawSystemState.cpp deleted file mode 100644 index b0206a0..0000000 --- a/branches/work/SD_AesCmac/common/DrawSystemState.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: DrawSystemState.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 "DrawSystemState.h" - -const u16 PROGRESS_MAX_LINES = 129; - -namespace common -{ - -u32 GetRenderTarget(u32 target, bool flip) -{ - if(flip) - { - if(target == NN_GX_DISPLAY0) - { - return NN_GX_DISPLAY1; - } - else - { - return NN_GX_DISPLAY0; - } - } - else - { - return target; - } -} - -void DrawSystemState -( - const char* toolName, - demo::RenderSystemDrawing& renderSystem, - nn::util::FloatColor titleColor, - bool flip, - std::string& adapterState, - const char* toolVersion, - common::VerDef* mVerData, - u8 batteryRemain, - u64 deviceId, - u64 friendCode, - u32 progress, - char8* macAddress, - ::std::vector& operationMessage, - nn::cfg::CTR::CfgRegionCode region, - u8* s_SerialNo -) -{ - // デフォルトで上画面に描画するもの - renderSystem.SetRenderTarget(GetRenderTarget(NN_GX_DISPLAY0, flip)); - renderSystem.SetClearColor(GetRenderTarget(NN_GX_DISPLAY0, flip), NORMAL_COLOR); - - - renderSystem.Clear(); - renderSystem.SetColor(1.f, 1.f, 1.f); - u32 line = 0; - - size_t fontSize = 8; - size_t spaceSize = fontSize + 2; - renderSystem.SetFontSize(fontSize); - - renderSystem.DrawText(0, line++ * spaceSize, "%s %s Rev.%s", toolName, __DATE__, toolVersion); - renderSystem.SetColor(titleColor.r, titleColor.g, titleColor.b); - renderSystem.FillRectangle(0, (line - 1) * spaceSize, 400, spaceSize); - renderSystem.SetColor(1.f, 1.f, 1.f); - renderSystem.DrawText(0, line++ * spaceSize, ""); - - fontSize += 2; - spaceSize = fontSize + 2; - renderSystem.SetFontSize(fontSize); - renderSystem.DrawText(0, line++ * spaceSize, "System Ver. %d.%d.%d-%d", mVerData->cup.majorVersion, mVerData->cup.minorVersion, mVerData->cup.microVersion, - mVerData->nup.majorVersion); - renderSystem.DrawText(0, line++ * spaceSize, "System Region %s", nn::cfg::CTR::GetRegionCodeA3(region)); - renderSystem.DrawText(0, line++ * spaceSize, "Serial No. %s", s_SerialNo); - renderSystem.DrawText(0, line++ * spaceSize, "Device ID %llu", deviceId); - renderSystem.DrawText(0, line++ * spaceSize, "MAC Address %s", macAddress); - renderSystem.DrawText(0, line++ * spaceSize, "Friend Code %04u-%04u-%04u", static_cast (friendCode - / 100000000ULL % 10000ULL), static_cast (friendCode / 10000ULL % 10000ULL), - static_cast (friendCode % 10000ULL)); - - renderSystem.DrawText(0, line++ * spaceSize, "Battery %d%%", batteryRemain); - renderSystem.DrawText(0, line++ * spaceSize, "AC Adaper %s", adapterState.c_str()); - renderSystem.DrawText(0, line++ * spaceSize, "Progress %02d%%", progress); - renderSystem.SetColor(0.f, 0.2f, 0.f); - renderSystem.DrawLine(19 * fontSize, (line - 1) * spaceSize, 19 * fontSize + PROGRESS_MAX_LINES, (line - 1) - * spaceSize); - renderSystem.DrawLine(19 * fontSize, (line - 1) * spaceSize, 19 * fontSize, (line) * spaceSize); - renderSystem.DrawLine(19 * fontSize, (line) * spaceSize, 19 * fontSize + PROGRESS_MAX_LINES, (line) * spaceSize); - renderSystem.DrawLine(19 * fontSize + PROGRESS_MAX_LINES, (line - 1) * spaceSize, 19 * fontSize - + PROGRESS_MAX_LINES, (line) * spaceSize + 1); - renderSystem.SetColor(0.f, 0.5f, 0.f); - renderSystem.FillRectangle(19 * fontSize, (line - 1) * spaceSize, progress * PROGRESS_MAX_LINES / 100 + 1, - spaceSize); - - renderSystem.SetColor(1.f, 1.f, 1.f); - renderSystem.DrawText(0, line++ * spaceSize, ""); - - ::std::vector::iterator it; - for (it = operationMessage.begin(); it != operationMessage.end(); it++) - { - renderSystem.DrawText(0, line++ * spaceSize, "%s", it->c_str()); - } - - fontSize -= 2; - renderSystem.SetFontSize(fontSize); -} - -} diff --git a/branches/work/SD_AesCmac/common/DrawSystemState.h b/branches/work/SD_AesCmac/common/DrawSystemState.h deleted file mode 100644 index b1240a2..0000000 --- a/branches/work/SD_AesCmac/common/DrawSystemState.h +++ /dev/null @@ -1,70 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: DrawSystemState.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 DRAWSYSTEMSTATE_H_ -#define DRAWSYSTEMSTATE_H_ - -#include -#include "demo.h" -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "common_Types.h" - -// 描画色の定義 -#define WHITE_COLOR 1.f, 1.f, 1.f, 1.f -#define GRAY_COLOR 0.5, 0.5, 0.5, 1.f -#define RED_COLOR 1.f, 0.f, 0.f, 1.f -#define GREEN_COLOR 0.f, 1.f, 0.f, 1.f -#define BLUE_COLOR 0.f, 0.f, 1.f, 1.f -#define SUCCESS_COLOR 0.f, 0.6f,0.f, 1.f -#define FAIL_COLOR 0.6f, 0.f,0.f, 1.f -#define NORMAL_COLOR 0.f, 0.f, 0.f, 1.f - -namespace common -{ - -u32 GetRenderTarget(u32 target, bool flip = false); - -void DrawSystemState -( - const char* toolName, - demo::RenderSystemDrawing& renderSystem, - nn::util::FloatColor titleColor, - bool flip, - std::string& adapterState, - const char* toolVersion, - common::VerDef* mVerData, - u8 batteryRemain, - u64 deviceId, - u64 friendCode, - u32 progress, - char8* macAddress, - ::std::vector& operationMessage, - nn::cfg::CTR::CfgRegionCode region, - u8* s_SerialNo -); - -} - - -#endif /* DRAWSYSTEMSTATE_H_ */ diff --git a/branches/work/SD_AesCmac/common/FileChecker.cpp b/branches/work/SD_AesCmac/common/FileChecker.cpp deleted file mode 100644 index c7e1f97..0000000 --- a/branches/work/SD_AesCmac/common/FileChecker.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: FileChecker.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 -#include "FileChecker.h" -#include "SdMountManager.h" - -namespace common -{ - -bool s_FileExistsChecked[EXISTS_MAX]; -bool s_FileExistsCheckeResult[EXISTS_MAX]; - -bool CheckFileExists(const wchar_t* path) -{ - nn::Result result; - bool exist = false; - result = common::SdMountManager::Mount(); - - if (result.IsSuccess()) - { - nn::fs::FileInputStream fis; - - result = fis.TryInitialize(path); - if(result.IsSuccess()) - { - exist = true; - } - fis.Finalize(); - } - - common::SdMountManager::Unmount(); - - - return exist; -} - -bool ExistsFile(FileExistsCheck index) -{ - if(index > EXISTS_MAX) - { - NN_LOG("Invalid File index!!\n"); - return false; - } - - if(s_FileExistsChecked[index]) - { - return s_FileExistsCheckeResult[index]; - } - - s_FileExistsChecked[index] = true; - s_FileExistsCheckeResult[index] = CheckFileExists(FILENAME_TABLE[index]); - return s_FileExistsCheckeResult[index]; -} - -bool ExistsUpdateCheckedFile() -{ - return ExistsFile(EXISTS_UPDATE_FINISHED); -} - -bool ExistsSerialNumberFile() -{ - return ExistsFile(EXISTS_SERIAL_NUMBER); -} - -bool ExistsIVSFile() -{ - return ExistsFile(EXISTS_IVS); -} - -bool ExistsConsoleInitializedFile() -{ - // どちらかのファイルがあれば初期化済み - return ExistsFile(EXISTS_CONSOLE_INTIALIZED) || - ExistsFile(EXISTS_TRY_RESTORE_SAME_CONSOLE); -} - -bool ExistsWriteFinishedFile() -{ - return ExistsFile(EXISTS_WRITE_FINISHED); -} - -bool ExistsAPSetting() -{ - return ExistsFile(EXISTS_AP_SETTING); -} - -bool ExistsRtcSyncFinishedFile() -{ - return ExistsFile(EXISTS_RTC_SYNC_FINISHED); -} - -bool ExistsCountryLanguageFile() -{ - return ExistsFile(EXISTS_COUNTRY_LANGUAGE); -} - -bool ExistsTryRestoreSameConsoleFile() -{ - return ExistsFile(EXISTS_TRY_RESTORE_SAME_CONSOLE); -} - -bool ExistsVersionData() -{ - return ExistsFile(EXISTS_VERSION_DATA); -} - -bool ExistsRegionData() -{ - return ExistsFile(EXISTS_REGION_DATA); -} - -void InitializeFileCheck() -{ - for(u32 i = 0; i < EXISTS_MAX; i++) - { - s_FileExistsChecked[i] = false; - } -} - - -} diff --git a/branches/work/SD_AesCmac/common/FileChecker.h b/branches/work/SD_AesCmac/common/FileChecker.h deleted file mode 100644 index fc1ac42..0000000 --- a/branches/work/SD_AesCmac/common/FileChecker.h +++ /dev/null @@ -1,72 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: FileChecker.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 FILECHECKER_H_ -#define FILECHECKER_H_ - -#include "FileName.h" - -namespace common -{ - -typedef enum FILE_EXISTS_CHECK -{ - EXISTS_UPDATE_FINISHED, - EXISTS_SERIAL_NUMBER, - EXISTS_IVS, - EXISTS_CONSOLE_INTIALIZED, - EXISTS_WRITE_FINISHED, - EXISTS_AP_SETTING, - EXISTS_RTC_SYNC_FINISHED, - EXISTS_COUNTRY_LANGUAGE, - EXISTS_TRY_RESTORE_SAME_CONSOLE, - EXISTS_VERSION_DATA, - EXISTS_REGION_DATA, - EXISTS_MAX -} FileExistsCheck; - -const wchar_t* const FILENAME_TABLE[EXISTS_MAX] = -{ - common::UPDATE_CHECK_PATHNAME, - common::SERIAL_PATHNAME, - common::IVS_PATHNAME, - common::INITIALIZED_CHECK_PATHNAME, - common::WRITE_FINISHED_CHECK_PATHNAME, - common::AP_SETTING_PATHNAME, - common::RTC_SYNC_CHECK_PATHNAME, - common::COUNTRY_SETTING_PATHNAME, - common::TRY_RESTORE_SAME_CONSOLE_PATHNAME, - common::VERSION_DATA_PATHNAME, - common::REGION_DATA_PATHNAME -}; - -bool CheckFileExists(const wchar_t* path); -bool ExistsUpdateCheckedFile(); -bool ExistsSerialNumberFile(); -bool ExistsIVSFile(); -bool ExistsConsoleInitializedFile(); -bool ExistsWriteFinishedFile(); -bool ExistsAPSetting(); -bool ExistsRtcSyncFinishedFile(); -bool ExistsCountryLanguageFile(); -bool ExistsTryRestoreSameConsoleFile(); -bool ExistsVersionData(); -bool ExistsRegionData(); - -void InitializeFileCheck(); - -} - -#endif /* FILECHECKER_H_ */ diff --git a/branches/work/SD_AesCmac/common/FileName.h b/branches/work/SD_AesCmac/common/FileName.h deleted file mode 100644 index 531efee..0000000 --- a/branches/work/SD_AesCmac/common/FileName.h +++ /dev/null @@ -1,92 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: FileName.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 FILENAME_H_ -#define FILENAME_H_ - -#include - -namespace common -{ - -const char* const NAND_ARCHIVE_NAME = "nand:"; -const char* const SDMC_ARCHIVE_NAME = "sdmc:"; -const char* const NAND_TWL_PHOTO_ARCHIVE_NAME = "twlp:"; -const char* const NAND_TWL_SOUND_ARCHIVE_NAME = "twls:"; - -const wchar_t* const LOG_ROOT_DIRECTORY_PATH = L"sdmc:/CTR_Console_Repair"; -const wchar_t* const SD_SAVEDATA_ROOT_NAME = L"CTR_Console_Repair/CTRBackup/"; -const wchar_t* const SD_SAVEDATA_TWL_PHOTO_ROOT_NAME = L"CTR_Console_Repair/TWLPhotoBackup/"; -const wchar_t* const SD_SAVEDATA_TWL_SOUND_ROOT_NAME = L"CTR_Console_Repair/TWLSoundBackup/"; -const wchar_t* const NIM_SAVEDATA_DIRECTORY_NAME = L"sysdata/0001002c"; -const wchar_t* const LOG_PATHNAME = L"CTR_Console_Repair/Migration_Log.txt"; -const wchar_t* const LOG_FILENAME = L"Migration_Log.txt"; -const wchar_t* const COUNTRY_SETTING_PATHNAME = L"sdmc:/CTR_Console_Repair/CountrySetting.bin"; -const wchar_t* const AP_SETTING_FILENAME = L"CTR_Repair_Accsess_Point_Setting.txt"; -const wchar_t* const AP_SETTING_PATHNAME = L"sdmc:/CTR_Repair_Accsess_Point_Setting.txt"; -const wchar_t* const NOR_PATHNAME = L"sdmc:/CTR_Console_Repair/NtrNorSetting.bin"; -const wchar_t* const SERIAL_PATHNAME = L"sdmc:/CTR_Console_Repair/serial.bin"; -const wchar_t* const MCU_RTC_PATHNAME = L"sdmc:/CTR_Console_Repair/rtc.bin"; -const wchar_t* const IVS_NAND_PATHNAME = L"nand:/private/movable.sed"; -const wchar_t* const IVS_PATHNAME = L"sdmc:/CTR_Console_Repair/movable.sed"; -const wchar_t* const NAND_DATA_ROOT_PATHNAME_WITH_SLASH = L"nand:/data/"; -const wchar_t* const NAND_TWL_PHOTO_DATA_ROOT_PATHNAME_WITH_SLASH = L"twlp:/"; -const wchar_t* const NAND_TWL_SOUND_DATA_ROOT_PATHNAME_WITH_SLASH = L"twls:/"; -const wchar_t* const SDMC_ROOT_DIRECTORY_PATH = L"sdmc:/"; -const wchar_t* const WRITE_FINISHED_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/WriteFinished"; -const wchar_t* const UPDATE_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/UpdateFinished"; -const wchar_t* const INITIALIZED_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/ConsoleInitialized"; -const wchar_t* const TRY_RESTORE_SAME_CONSOLE_PATHNAME = L"sdmc:/CTR_Console_Repair/TryRestoreSameConsole"; -const wchar_t* const RTC_SYNC_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/RtcSyncFinished"; -const wchar_t* const PLAYHISTORY_PATHNAME = L"sdmc:/CTR_Console_Repair/playhistory.bin"; -const wchar_t* const PLAYHISTORY_COUNT_PATHNAME = L"sdmc:/CTR_Console_Repair/playhistoryCount.bin"; -const wchar_t* const TOUCH_PANEL_CALIBRATION_PATHNAME = L"sdmc:/CTR_Console_Repair/tpCalibration.bin"; -const wchar_t* const VERSION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/version.bin"; -const wchar_t* const REGION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/Region.bin"; - -enum TWL_PATH_INDEX -{ - TWL_PHOTO = 0, - TWL_SOUND, - TWL_PATHNAME_MAX -}; - -const char* const TWL_ARCHIVE_NAME_TABLE[TWL_PATHNAME_MAX] = -{ - common::NAND_TWL_PHOTO_ARCHIVE_NAME, - common::NAND_TWL_SOUND_ARCHIVE_NAME -}; - -const wchar_t* const SD_TWL_ROOTNAME_TABLE[TWL_PATHNAME_MAX] = -{ - common::SD_SAVEDATA_TWL_PHOTO_ROOT_NAME, - common::SD_SAVEDATA_TWL_SOUND_ROOT_NAME -}; - -const wchar_t* const NAND_TWL_ROOT_PATHNAME_WITH_SLASH_TABLE[TWL_PATHNAME_MAX] = -{ - common::NAND_TWL_PHOTO_DATA_ROOT_PATHNAME_WITH_SLASH, - common::NAND_TWL_SOUND_DATA_ROOT_PATHNAME_WITH_SLASH -}; - -const u32 TWL_FS_ARCHIVE_KIND[TWL_PATHNAME_MAX] = -{ - nn::fs::CTR::ARCHIVE_TYPE_TWL_PHOTO, - nn::fs::CTR::ARCHIVE_TYPE_TWL_SOUND -}; - -} - -#endif /* FILENAME_H_ */ diff --git a/branches/work/SD_AesCmac/common/FileTransfer.cpp b/branches/work/SD_AesCmac/common/FileTransfer.cpp deleted file mode 100644 index 7fad71d..0000000 --- a/branches/work/SD_AesCmac/common/FileTransfer.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: FileTransfer.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 "FileTransfer.h" -#include - -namespace common -{ - -namespace -{ - -u64 s_TotalFileSize; -u64 s_FinishedFileSize = 0; -u64 s_Progress = 0; - -} - -nn::Result CalculateFileNum(std::wstring currentDirectory, u32& fileNum, u32& fileSize) -{ - nn::fs::FileInputStream fis; - nn::fs::Directory dir; - nn::Result result; - std::vector entryList; //カレントディレクトリのエントリ一覧を格納 - std::vector::iterator entryIndex; - - result = dir.TryInitialize(currentDirectory.c_str()); - - if(result.IsSuccess()) - { - nn::fs::DirectoryEntry entry; - s32 numEntry; - for(;;) - { - result = dir.TryRead(&numEntry, &entry, 1); - if(result.IsFailure()) - { - dir.Finalize(); - return result; - } - if(numEntry == 0) - { - // カレントディレクトリを閉じる - dir.Finalize(); - - // カレントディレクトリの子を開く - for(entryIndex = entryList.begin(); entryIndex != entryList.end(); entryIndex++) - { - if(entryIndex->attributes.isDirectory) - { - CalculateFileNum(currentDirectory + std::wstring(entryIndex->entryName) + std::wstring(L"/"), fileNum, fileSize); - } - } - - return nn::ResultSuccess(); - } - - entryList.push_back(entry); - fileNum++; - fileSize+= entry.entrySize; - } - } - else - { - NN_LOG("failed initialize directory\n"); - dir.Finalize(); - return result; - } - -} - -// ディレクトリ間のコピー -// アーカイブ越しのコピーが可能 -// アーカイブにマウントした状態で呼び出す必要あり -// 書き込み先のディレクトリはあらかじめ消去しておくこと。 -// 引数はスラッシュ付き -bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf, const size_t bufSize) -{ - nn::fs::Directory from_dir; - nn::fs::DirectoryEntry entry; - s32 numread = 0; - std::wostringstream target_from; - std::wostringstream target_to; - bool ret_value = true; - - nn::Result result = from_dir.TryInitialize(from_path); - - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - return false; - } - - while (1) - { - result = from_dir.TryRead(&numread, &entry, 1); - if (result.IsFailure() || numread != 1) - { - break; - } - - if (std::wcscmp(entry.entryName, L".") == 0 || std::wcscmp(entry.entryName, L"..") == 0) - { - continue; - } - - target_from.str(L""); - target_from.clear(std::stringstream::goodbit); - target_from << from_path << entry.entryName; - - target_to.str(L""); - target_to.clear(std::stringstream::goodbit); - target_to << to_path << entry.entryName; - - // ディレクトリの場合 - if (entry.attributes.isDirectory) - { - // ディレクトリ作成 - NN_LOG("Create Directory %ls\n", target_to.str().c_str()); - result = nn::fs::TryCreateDirectory(target_to.str().c_str()); - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - else - { - target_from << L"/"; - target_to << L"/"; - // 再帰処理 - if (!CopyDirectory(target_from.str().c_str(), target_to.str().c_str(), buf, bufSize)) - { - ret_value = false; - } - } - } - // ファイルの場合 - else - { - // ファイル作成 - nn::fs::FileInputStream from_file; - nn::fs::FileOutputStream to_file; - s64 filesize; - s32 readsize; - s32 writesize; - - NN_LOG("Copy File %ls\n", target_from.str().c_str()); - - // 読み込み対象ファイル開く - result = from_file.TryInitialize(target_from.str().c_str()); - - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - else - { - // 読み込み対象ファイルのサイズ取得 - result = from_file.TryGetSize(&filesize); - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - else - { - // 書き込み対象ファイル作成 - result = nn::fs::TryCreateFile(target_to.str().c_str(), filesize); - result = to_file.TryInitialize(target_to.str().c_str(), false); - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - else - { - while (1) - { - result = from_file.TryRead(&readsize, buf, bufSize); - - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - break; - } - else - { - if (readsize == 0) - { - result = to_file.TryFlush(); - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - break; - } - else - { - result = to_file.TryWrite(&writesize, buf, readsize, false); - s_FinishedFileSize += readsize; - s_Progress = s_FinishedFileSize * 100/ s_TotalFileSize; - NN_LOG("finish = %lld, total = %lld, progress = %lld\n", s_FinishedFileSize, s_TotalFileSize, s_Progress); - if (result.IsFailure()) - { - nn::dbg::PrintResult(result); - ret_value = false; - } - } - } - } - } - to_file.Finalize(); - } - } - from_file.Finalize(); - } - } - - from_dir.Finalize(); - return ret_value; -} - -u32 GetProgress() -{ - return s_Progress; -} - -void InitializeTransferProgress(u64 totalSize) -{ - s_TotalFileSize = totalSize; - s_FinishedFileSize = 0; -} - -} diff --git a/branches/work/SD_AesCmac/common/FileTransfer.h b/branches/work/SD_AesCmac/common/FileTransfer.h deleted file mode 100644 index cacddfb..0000000 --- a/branches/work/SD_AesCmac/common/FileTransfer.h +++ /dev/null @@ -1,33 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: FileTransfer.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 FILETRANSFER_H_ -#define FILETRANSFER_H_ - -#include -#include -#include - -namespace common -{ - -nn::Result CalculateFileNum(std::wstring currentDirectory, u32& fileNum, u32& fileSize); -bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf, const size_t bufSize); -u32 GetProgress(); -void InitializeTransferProgress(u64 totalSize); - -} - -#endif /* FILETRANSFER_H_ */ diff --git a/branches/work/SD_AesCmac/common/HardwareInfo.cpp b/branches/work/SD_AesCmac/common/HardwareInfo.cpp deleted file mode 100644 index abf3edd..0000000 --- a/branches/work/SD_AesCmac/common/HardwareInfo.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: HardwareInfo.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 -#include "HardwareInfo.h" - -#include - -namespace common -{ - -HardwareInfo::HardwareInfo() -{ - // TODO 自動生成されたコンストラクター・スタブ - -} - -HardwareInfo::~HardwareInfo() -{ - // TODO Auto-generated destructor stub -} - -// NULL終端されたシリアルナンバーを受け取る -// NULL終端された場所にチェックデジットを付加して新たにNULL終端する -void HardwareInfo::AddCheckDigit(char* serial) -{ - size_t len = std::strlen(serial); - - u8 digit = 0; - bool odd = true; - for(u8 i = len - 1; i > 0 && std::isdigit(serial[i]); i--) - { - if(odd) - { - digit += (serial[i] - '0') * 3; - } - else - { - digit += (serial[i] - '0'); - } - odd = !odd; - } - - if(digit % 10 != 0) - { - serial[len] = 10 - (digit % 10) + '0'; - } - else - { - serial[len] = '0'; - } - - serial[len + 1] = '\0'; -} - - -} diff --git a/branches/work/SD_AesCmac/common/HardwareInfo.h b/branches/work/SD_AesCmac/common/HardwareInfo.h deleted file mode 100644 index e6406cf..0000000 --- a/branches/work/SD_AesCmac/common/HardwareInfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: HardwareInfo.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 HARDWAREINFO_H_ -#define HARDWAREINFO_H_ - -namespace common -{ - -class HardwareInfo -{ -public: - HardwareInfo(); - virtual ~HardwareInfo(); - - void AddCheckDigit(char* serial); -}; - -} - -#endif /* HARDWAREINFO_H_ */ diff --git a/branches/work/SD_AesCmac/common/HeapManager.cpp b/branches/work/SD_AesCmac/common/HeapManager.cpp deleted file mode 100644 index 29f4367..0000000 --- a/branches/work/SD_AesCmac/common/HeapManager.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: HeapManager.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 "HeapManager.h" - -namespace common -{ - -nn::fnd::ThreadSafeExpHeap HeapManager::s_AppHeap; - -HeapManager::HeapManager() -{ - // TODO 自動生成されたコンストラクター・スタブ - -} - -HeapManager::~HeapManager() -{ - // TODO Auto-generated destructor stub -} - -nn::fnd::ThreadSafeExpHeap* HeapManager::GetHeap() -{ - return &s_AppHeap; -} - -} diff --git a/branches/work/SD_AesCmac/common/HeapManager.h b/branches/work/SD_AesCmac/common/HeapManager.h deleted file mode 100644 index b9fc469..0000000 --- a/branches/work/SD_AesCmac/common/HeapManager.h +++ /dev/null @@ -1,40 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: HeapManager.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 HEAPMANAGER_H_ -#define HEAPMANAGER_H_ - -#include - -namespace common -{ - -class HeapManager -{ -public: - HeapManager(); - virtual ~HeapManager(); - - static nn::fnd::ThreadSafeExpHeap* GetHeap(); - -private: - // デバイスメモリ管理用拡張ヒープ - static nn::fnd::ThreadSafeExpHeap s_AppHeap; - -}; - -} // namespace common - -#endif /* HEAPMANAGER_H_ */ diff --git a/branches/work/SD_AesCmac/common/LogConsole.cpp b/branches/work/SD_AesCmac/common/LogConsole.cpp deleted file mode 100644 index b77d6d0..0000000 --- a/branches/work/SD_AesCmac/common/LogConsole.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: LogConsole.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 "LogConsole.h" -#include - -namespace common -{ - -const size_t FONT_WIDTH = 8; -const size_t FONT_HEIGHT = 10; - -static LogConsole s_LogConsole; - -LogConsole* GetConsoleInstance() -{ - return &s_LogConsole; -} - -LogConsole::LogConsole() -{ - -} - -LogConsole::~LogConsole() -{ - -} - -void LogConsole::Initialize(u32 width, u32 height, u32 maxLine, demo::RenderSystemDrawing* renderSystem) -{ - m_Width = width; - m_Height = height; - m_MaxLine = maxLine; - m_RenderSystem = renderSystem; - m_CurrentViewLine = 0; - m_LineNum = 0; -} - -void LogConsole::AddText(const char* fmt, ::std::va_list arg) -{ - s32 stringSize; - const size_t STRING_BUFFER_SIZE = 256; - char formatStr[STRING_BUFFER_SIZE]; - - stringSize = nn::nstd::TVSNPrintf(formatStr, sizeof(formatStr), fmt, arg); - ::std::string str(formatStr); - - size_t addedText = 0; - while (addedText < stringSize) - { - if(m_LineNum >= m_MaxLine) - { - // 満杯なので先頭を削除する - ::std::vector::iterator it; - it = m_Log.begin(); - m_Log.erase(it); - m_LineNum--; - } - - // 部分文字列を追加 - AddWrapedText(str.substr(addedText, m_Width).c_str()); - m_LineNum++; - - // 画面領域以上追加したら末尾にスクロールする - if(m_LineNum > m_Height) - { - ScrollToEnd(); - } - - - if(stringSize - addedText > m_Width) - { - addedText += m_Width; - } - else - { - addedText += stringSize - addedText; - } - } -} - -void LogConsole::ScrollUp() -{ - if(m_CurrentViewLine > 0) - { - m_CurrentViewLine--; - } -} - - - -void LogConsole::ScrollDown() -{ - if (m_LineNum > m_Height) - { - if (m_CurrentViewLine < m_LineNum - m_Height) - { - m_CurrentViewLine++; - } - - } -} - -void LogConsole::ScrollToBegin() -{ - m_CurrentViewLine = 0; -} - -void LogConsole::ScrollToEnd() -{ - if(m_LineNum > m_Height) - { - m_CurrentViewLine = m_LineNum - m_Height; - } -} - - -void LogConsole::Print() -{ - ::std::vector::iterator it; - - it = m_Log.begin(); - it += m_CurrentViewLine; - - u32 count = 0; - for(; it != m_Log.end() && count < m_Height && count < m_MaxLine; it++) - { - m_RenderSystem->DrawText(0, count++ * 10, "%s", it->c_str()); - } - - if(m_LineNum > m_Height) - { - DrawScrollBar(); - } -} - - -void LogConsole::AddWrapedText(const char* str) -{ - m_Log.push_back(::std::string(str)); -} - -void LogConsole::DrawScrollBar() -{ - m_RenderSystem->SetColor(0.4f, 0.4f, 0.4f); - m_RenderSystem->DrawLine((m_Width + 1) * FONT_WIDTH, 0, (m_Width + 2) * FONT_WIDTH - 1, 0); - m_RenderSystem->DrawLine((m_Width + 1)* FONT_WIDTH, 0, (m_Width + 1)* FONT_WIDTH, m_Height * FONT_HEIGHT); - m_RenderSystem->DrawLine((m_Width + 2) * FONT_WIDTH - 1, 0, (m_Width + 2) * FONT_WIDTH - 1, m_Height * FONT_HEIGHT); - m_RenderSystem->DrawLine((m_Width + 1)* FONT_WIDTH, m_Height * FONT_HEIGHT - 1, (m_Width + 2) * FONT_WIDTH - 1, m_Height * FONT_HEIGHT - 1); - - u32 y = (m_Height * FONT_HEIGHT - 2) * m_CurrentViewLine / m_MaxLine; - m_RenderSystem->SetColor(0.7f, 0.7f, 0.7f); - m_RenderSystem->FillRectangle((m_Width + 1) * FONT_WIDTH, y + 1, FONT_WIDTH - 1, FONT_HEIGHT - 4); - - m_RenderSystem->SetColor(1.f, 1.f, 1.f); -} - -} //namespace ConsoleBackup diff --git a/branches/work/SD_AesCmac/common/LogConsole.h b/branches/work/SD_AesCmac/common/LogConsole.h deleted file mode 100644 index b8a7d52..0000000 --- a/branches/work/SD_AesCmac/common/LogConsole.h +++ /dev/null @@ -1,68 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: LogConsole.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 LOGCONSOLE_H_ -#define LOGCONSOLE_H_ - -#include -#include -#include -#include "demo.h" - -namespace common -{ - -//! @brief 画面にテキストコンソールを描画します -class LogConsole -{ - -public: - LogConsole(); - ~LogConsole(); - - void Initialize(u32 width, u32 height, u32 maxLine, demo::RenderSystemDrawing* renderSystem); - - void AddText(const char* fmt, ::std::va_list arg); - void ScrollUp(); - void ScrollDown(); - void ScrollToBegin(); - void ScrollToEnd(); - void Print(); - -private: - void AddWrapedText(const char* str); - void DrawScrollBar(); - - ::std::vector m_Log; - - //! @brief コンソールの列数 - u32 m_Width; - //! @brief コンソールの行数 - u32 m_Height; - //! @brief コンソールのログの最大行数 - u32 m_MaxLine; - //! @brief 描画のためのRenderSystemDrawingへのポインタ - demo::RenderSystemDrawing* m_RenderSystem; - //! @brief 追加したログの行数 - u32 m_LineNum; - //! @brief 表示を開始するログの行数 - u32 m_CurrentViewLine; - - -}; - -} - -#endif /* LOGCONSOLE_H_ */ diff --git a/branches/work/SD_AesCmac/common/LogConsole_Private.h b/branches/work/SD_AesCmac/common/LogConsole_Private.h deleted file mode 100644 index 8fbdd42..0000000 --- a/branches/work/SD_AesCmac/common/LogConsole_Private.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: LogConsole_Private.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 LOGCONSOLE_PRIVATE_H_ -#define LOGCONSOLE_PRIVATE_H_ - -#include "LogConsole.h" - -namespace common -{ - -LogConsole* GetConsoleInstance(); - -} - -#endif /* LOGCONSOLE_PRIVATE_H_ */ diff --git a/branches/work/SD_AesCmac/common/OMakefile b/branches/work/SD_AesCmac/common/OMakefile deleted file mode 100644 index e874cbc..0000000 --- a/branches/work/SD_AesCmac/common/OMakefile +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env omake -#---------------------------------------------------------------------------- -# Project: Horizon -# File: OMakefile -# -# Copyright (C)2009 Nintendo Co., Ltd. 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 $(ROOT_OMAKE)/modulerules - -DefineDefaultRules() diff --git a/branches/work/SD_AesCmac/common/PlayHistoryManager.cpp b/branches/work/SD_AesCmac/common/PlayHistoryManager.cpp deleted file mode 100644 index bb8607e..0000000 --- a/branches/work/SD_AesCmac/common/PlayHistoryManager.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: PlayHistoryManager.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 -#include - -#include "PlayHistoryManager.h" -#include "HeapManager.h" -#include "SdMountManager.h" -#include "SdReaderWriter.h" -#include "CommonLogger.h" -#include "FileName.h" -#include "ProgramId.h" - -namespace common -{ - -PlayHistoryManager::PlayHistoryManager() -{ - // TODO 自動生成されたコンストラクター・スタブ - -} - -PlayHistoryManager::~PlayHistoryManager() -{ - // TODO Auto-generated destructor stub -} - -void PlayHistoryManager::Export() -{ - nn::Result result; - SdMountManager::Mount(); - SdReaderWriter sd; - - size_t historyNum = nn::pl::CTR::GetPlayHistoryLength(); - if ( historyNum == 0) - { - NN_LOG("No Play Event\n"); - return; - } - - // SDに書き込む - result = sd.WriteBufWithCmac(common::PLAYHISTORY_COUNT_PATHNAME, reinterpret_cast(&historyNum), - sizeof(historyNum)); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - nn::pl::CTR::PlayEvent* pEvent; - pEvent = reinterpret_cast (HeapManager::GetHeap()->Allocate( - sizeof(nn::pl::CTR::PlayEvent) * historyNum)); - if ( pEvent == NULL ) - { - NN_LOG("Failed to Allocate Heap\n"); - return; - } - - // 一番古いデータから素直に全部読み込む - nn::pl::CTR::GetPlayHistory(pEvent, 0, historyNum); - - // SDに書き込む - result = sd.WriteBufWithCmac(common::PLAYHISTORY_PATHNAME, reinterpret_cast(pEvent), - sizeof(nn::pl::CTR::PlayEvent) * historyNum); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - HeapManager::GetHeap()->Free(pEvent); - - SdMountManager::Unmount(); -} - -void PlayHistoryManager::GetPlayHistoryNums(size_t* nums) -{ - nn::Result result; - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::PLAYHISTORY_COUNT_PATHNAME, buf, bufSize, &readSize); - if (result.IsSuccess()) - { - *nums = *reinterpret_cast (buf); - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - HeapManager::GetHeap()->Free(buf); -} - -void PlayHistoryManager::Import() -{ - nn::Result result; - SdMountManager::Mount(); - SdReaderWriter sd; - - SdMountManager::Mount(); - - // プレイ履歴の件数を取得する - size_t historyNum = 0; - - GetPlayHistoryNums(&historyNum); - - if(historyNum == 0) - { - NN_LOG("No PlayHistory found\n"); - return; - } - - size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize(); - void* buf = common::HeapManager::GetHeap()->Allocate(bufSize); - if (buf != NULL) - { - common::SdReaderWriter sdReader; - - size_t readSize; - result = sdReader.ReadBufWithCmac(common::PLAYHISTORY_PATHNAME, buf, bufSize, &readSize); - if(result.IsSuccess()) - { - nn::pl::CTR::PlayEvent* pEvent = reinterpret_cast(buf); - NN_LOG("history num = %d\n", historyNum); - - // プレイ履歴を無効化する - nn::pl::CTR::ClearPlayHistory(); - - // データ移行ツールを無視して書き込む - for(u32 i = 0; i < historyNum; i++) - { - COMMON_LOGGER("Importing PlayHistory %d/%d", i, historyNum); - if ((pEvent[i].GetProgramId() & WITHOUT_VALIATION_MASK) != CONSOLE_BACKUP_PROGRAM_ID - && (pEvent[i].GetProgramId() & WITHOUT_VALIATION_MASK) != CONSOLE_RESTORE_PROGRAM_ID) - { - NN_LOG("%05d 0x%16llx : %X : %d\n", i, pEvent[i].GetProgramId(), pEvent[i].GetEventType(), - pEvent[i].minutes); - - nn::pl::CTR::NotifyPlayEvent(pEvent[i].GetEventType(), pEvent[i].GetProgramId(), - pEvent[i].GetEventTime()); - } - else - { - NN_LOG("Skipped\n"); - } - } - - } - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - common::HeapManager::GetHeap()->Free(buf); - } - else - { - NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__); - return; - } - - SdMountManager::Unmount(); -} - -void PlayHistoryManager::Dump() -{ - nn::Result result; - - s32 playEventLength = nn::pl::CTR::GetPlayHistoryLength(); - if ( playEventLength == 0 ) - { - NN_LOG("No Play Event\n"); - return; - } - - nn::pl::CTR::PlayEvent* playEvent = reinterpret_cast (HeapManager::GetHeap()->Allocate( - sizeof(nn::pl::CTR::PlayEvent) * playEventLength)); - if ( playEvent == NULL ) - { - NN_LOG("Failed to Allocate Heap\n"); - return; - } - - // 一番古いデータから素直に全部読み込む - (void)nn::pl::CTR::GetPlayHistory(playEvent, 0, playEventLength); - - // 取得したデータを順番にすべて表示していく - s32 restPlayEventLength = playEventLength; - s32 displayCount = 0; - - nn::pl::CTR::PlayEvent* pEvent; - while ( restPlayEventLength > 0 ) - { - // 一気に表示できるところまで表示する - int line; - for ( line = 0; line < 24; line++ ) - { - pEvent = &playEvent[displayCount]; - NN_LOG("0x%16llx : %X : %d\n", pEvent->GetProgramId(), pEvent->eventType, pEvent->minutes); - restPlayEventLength--; - displayCount++; - if(restPlayEventLength <= 0) - { - break; - } - } - } - NN_UNUSED_VAR(pEvent); - - HeapManager::GetHeap()->Free(playEvent); - return; -} - -} diff --git a/branches/work/SD_AesCmac/common/PlayHistoryManager.h b/branches/work/SD_AesCmac/common/PlayHistoryManager.h deleted file mode 100644 index 916741b..0000000 --- a/branches/work/SD_AesCmac/common/PlayHistoryManager.h +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: PlayHistoryManager.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 PLAYHISTORYMANAGER_H_ -#define PLAYHISTORYMANAGER_H_ - -namespace common -{ - -//! @brief データ移行ツールの履歴を消しながらプレイ履歴を移行するためのクラスです。 -class PlayHistoryManager -{ -public: - PlayHistoryManager(); - virtual ~PlayHistoryManager(); - - //! @brief SDカードに出力します。 - void Export(); - - //! @brief SDカードからプレイ履歴に書き込みます - void Import(); - - //! @brief デバッグ用。プレイ履歴をデバッグ出力します。 - void Dump(); - -private: - void GetPlayHistoryNums(size_t* nums); - -}; - -} - -#endif /* PLAYHISTORYMANAGER_H_ */ diff --git a/branches/work/SD_AesCmac/common/ProgramId.h b/branches/work/SD_AesCmac/common/ProgramId.h deleted file mode 100644 index c565f11..0000000 --- a/branches/work/SD_AesCmac/common/ProgramId.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: ProgramId.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 PROGRAMID_H_ -#define PROGRAMID_H_ - -namespace common -{ - -const u64 CONSOLE_BACKUP_PROGRAM_ID = 0x000400000f802200L; -const u64 CONSOLE_RESTORE_PROGRAM_ID = 0x000400000f802300L; -const u64 WITHOUT_VALIATION_MASK = 0xffffffffffffff00L; - -} - -#endif /* PROGRAMID_H_ */ diff --git a/branches/work/SD_AesCmac/common/SdLogger.cpp b/branches/work/SD_AesCmac/common/SdLogger.cpp deleted file mode 100644 index 5fb7068..0000000 --- a/branches/work/SD_AesCmac/common/SdLogger.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdLogger.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 "SdLogger.h" -#include -#include "SDMountManager.h" -#include "FileName.h" - -namespace common -{ - -namespace Logger -{ - -static SdLogger s_SdLogger; -static nn::os::LightEvent s_SdEjectedEvent; -static nn::os::LightEvent s_SdInsertedEvent; - -const size_t SDMC_EVENT_THREAD_STACK_SIZE = 1024; -nn::os::Thread s_SdmcEjectedEventThread; -nn::os::StackBuffer s_SdmcEjectedEventThreadStack; - -nn::os::Thread s_SdmcInsertedEventThread; -nn::os::StackBuffer s_SdmcInsertedEventThreadStack; - -void (*s_SdEjectedEventFunc)() = NULL; -void (*s_SdInsertedEventFunc)() = NULL; - -void PrintResultIfFailed(nn::Result result, u32 line = 0) -{ - if (result.IsFailure()) - { - if(line != 0) - { - NN_LOG("%s, %d\n", __FILE__, line); - } - nn::dbg::PrintResult(result); - } -} - -void SdmcEjectedEventThreadFunc() -{ - NN_LOG("********************:SD Ejected Event Thread Start**********************\n"); - - for(;;) - { - s_SdEjectedEvent.Wait(); - NN_LOG("********************:SD Card Ejected**********************\n"); - - if(s_SdEjectedEventFunc != NULL) - { - s_SdEjectedEventFunc(); - } - SdMountManager::ForceUnmount(); - s_SdEjectedEvent.ClearSignal(); - s_SdLogger.Inactivate(); - } -} - -void SdmcInsertedEventThreadFunc() -{ - NN_LOG("********************:SD Inserted Event Thread Start**********************\n"); - - for(;;) - { - s_SdInsertedEvent.Wait(); - NN_LOG("********************:SD Card Inserted*********************\n"); - - if(s_SdInsertedEventFunc != NULL) - { - s_SdInsertedEventFunc(); - } - s_SdInsertedEvent.ClearSignal(); - } -} - -void InitializeEjectThread() -{ - s_SdEjectedEvent.Initialize(true); - s_SdInsertedEvent.Initialize(true); - nn::fs::RegisterSdmcEjectedEvent(&s_SdEjectedEvent); - nn::fs::RegisterSdmcInsertedEvent(&s_SdInsertedEvent); - - // SDカード抜けを検知するためのスレッド作成 - s_SdmcEjectedEventThread.Start(SdmcEjectedEventThreadFunc, s_SdmcEjectedEventThreadStack); - - // SDカード挿入を検知するためのスレッド作成 - s_SdmcInsertedEventThread.Start(SdmcInsertedEventThreadFunc, s_SdmcInsertedEventThreadStack); - -} -void SetEjectHandler(void (*func)()) -{ - s_SdEjectedEventFunc = func; -} - -void SetInsertHandler(void (*func)()) -{ - s_SdInsertedEventFunc = func; -} - -SdLogger::SdLogger() : m_TryActivate(false), m_Permitted(false) -{ - -} - -SdLogger* GetSdInstance() -{ - return &s_SdLogger; -} - -void SdLogger::Print(const char* fmt, ::std::va_list arg) -{ - Activate(); - if(!m_Permitted) - { - NN_LOG("SD Write Not Permitted\n"); - return; - } - - nn::Result result; - result = SdMountManager::Mount(); - if (result.IsFailure()) - { - PrintResultIfFailed(result, __LINE__); - } - - s32 stringSize; - const size_t STRING_BUFFER_SIZE = 256; - char str[STRING_BUFFER_SIZE]; - - stringSize = nn::nstd::TVSNPrintf(str, sizeof(str), fmt, arg); - - ::std::wstring log(common::SDMC_ROOT_DIRECTORY_PATH); - log += common::LOG_PATHNAME; - - // ディレクトリが無ければ作る - nn::fs::Directory dir; - result = dir.TryInitialize(common::LOG_ROOT_DIRECTORY_PATH); - if(result.IsFailure()) - { - result = nn::fs::TryCreateDirectory(common::LOG_ROOT_DIRECTORY_PATH); - } - - result = sd.TryInitialize(log.c_str(), true); - if (result.IsSuccess()) - { - // 追記する - // サイズ取得 - s64 fileSize; - result = sd.TryGetSize(&fileSize); - if (result.IsSuccess()) - { - // 末尾に移動 - result = sd.TrySetPosition(fileSize); - if (result.IsSuccess()) - { - s32 writeSize; - result = sd.TryWrite(&writeSize, str, stringSize, true); - if (result.IsSuccess()) - { - result = sd.TryFlush(); - if (result.IsFailure()) - { - NN_LOG("SD TryFlush failed\n"); - PrintResultIfFailed(result, __LINE__); - } - } - else - { - NN_LOG("SD TryWrite failed\n"); - PrintResultIfFailed(result, __LINE__); - } - } - else - { - NN_LOG("SD TrySetPosition failed\n"); - PrintResultIfFailed(result, __LINE__); - } - } - else - { - NN_LOG("SD TryGetSize failed\n"); - PrintResultIfFailed(result, __LINE__); - } - } - else - { - NN_LOG("SD TryInitialize failed, %s, %d\n", __FILE__, __LINE__); - PrintResultIfFailed(result, __LINE__); - } - - dir.Finalize(); - sd.Finalize(); - SdMountManager::Unmount(); -} - -void SdLogger::Clear() -{ - Activate(); - if(!m_Permitted) - { - return; - } - - nn::Result result; - SdMountManager::Mount(); - - ::std::wstring log(common::SDMC_ROOT_DIRECTORY_PATH); - log += common::LOG_PATHNAME; - - result = nn::fs::TryDeleteFile(log.c_str()); - if(result.IsFailure()) - { - nn::dbg::PrintResult(result); - } - - SdMountManager::Unmount(); -} - -void SdLogger::Inactivate() -{ - m_TryActivate = false; - m_Permitted = false; -} - -void SdLogger::Activate() -{ - if(m_TryActivate) - { - return; - } - - nn::Result result; - result = common::SdMountManager::Mount(); - - if (result.IsSuccess()) - { - nn::fs::FileInputStream fis; - - result = fis.TryInitialize(common::AP_SETTING_PATHNAME); - if(result.IsSuccess()) - { - m_Permitted = true; - } - fis.Finalize(); - } - - common::SdMountManager::Unmount(); - m_TryActivate = true; -} - -} // namespace Logger -} // namespace ConsoleBackup - - diff --git a/branches/work/SD_AesCmac/common/SdLogger.h b/branches/work/SD_AesCmac/common/SdLogger.h deleted file mode 100644 index 2dc736f..0000000 --- a/branches/work/SD_AesCmac/common/SdLogger.h +++ /dev/null @@ -1,57 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdLogger.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 SDLOGGER_H_ -#define SDLOGGER_H_ - -#include - -namespace common -{ - -namespace Logger -{ - -class SdLogger -{ -public: - SdLogger(); - ~SdLogger() {}; - - void Print(const char* fmt, ::std::va_list arg); - void Clear(); - void Inactivate(); - -private: - void Activate(); - - nn::fs::FileOutputStream sd; - bool m_TryActivate; - bool m_Permitted; - NN_PADDING2; - -}; - -void InitializeEjectThread(); -// SDカードが抜けた時に呼ばれるコールバック -void SetEjectHandler(void (*func)()); -// SDカードが挿入された時に呼ばれるコールバック -void SetInsertHandler(void (*func)()); -SdLogger* GetSdInstance(); - -} // namespace Logger -} // namespace ConsoleBackup - -#endif /* SDLOGGER_H_ */ diff --git a/branches/work/SD_AesCmac/common/SdMountManager.cpp b/branches/work/SD_AesCmac/common/SdMountManager.cpp deleted file mode 100644 index 336bebb..0000000 --- a/branches/work/SD_AesCmac/common/SdMountManager.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdMountManager.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 -#include "SdMountManager.h" -#include "FileName.h" - -namespace common -{ - -u32 SdMountManager::m_MountCounter = 0; - -SdMountManager::SdMountManager() -{ - // TODO 自動生成されたコンストラクター・スタブ - -} - -SdMountManager::~SdMountManager() -{ - // TODO Auto-generated destructor stub -} - -nn::Result SdMountManager::Mount() -{ - nn::Result result = nn::ResultSuccess(); - - if(m_MountCounter == 0) - { - result = nn::fs::MountSdmc(); - } - m_MountCounter++; - - return result; -} - -nn::Result SdMountManager::Unmount() -{ - nn::Result result = nn::ResultSuccess(); - if(m_MountCounter != 0 && --m_MountCounter == 0) - { - result = nn::fs::Unmount(common::SDMC_ARCHIVE_NAME); - } - - return result; -} - -nn::Result SdMountManager::ForceUnmount() -{ - m_MountCounter = 0; - return nn::fs::Unmount(common::SDMC_ARCHIVE_NAME); -} - - -} diff --git a/branches/work/SD_AesCmac/common/SdMountManager.h b/branches/work/SD_AesCmac/common/SdMountManager.h deleted file mode 100644 index c4db65b..0000000 --- a/branches/work/SD_AesCmac/common/SdMountManager.h +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdMountManager.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 SDMOUNTMANAGER_H_ -#define SDMOUNTMANAGER_H_ - -namespace common -{ - -//! @brief SDカードのMount状態を管理するためのクラスです -class SdMountManager -{ -public: - SdMountManager(); - virtual ~SdMountManager(); - - //! @brief マウントが必要ならマウントします。 - static nn::Result Mount(); - //! @brief アンマウントが必要ならアンマウントします。 - static nn::Result Unmount(); - //! @brief 強制的にアンマウントします。 - static nn::Result ForceUnmount(); - -private: - static u32 m_MountCounter; -}; - -} - -#endif /* SDMOUNTMANAGER_H_ */ diff --git a/branches/work/SD_AesCmac/common/SdReaderWriter.cpp b/branches/work/SD_AesCmac/common/SdReaderWriter.cpp deleted file mode 100644 index 60282be..0000000 --- a/branches/work/SD_AesCmac/common/SdReaderWriter.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdReaderWriter.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 "SdReaderWriter.h" -#include "SdMountManager.h" -#include "CommonLogger.h" -#include "Aes_define.h" - -#include -#include -#include - -namespace common -{ - -bool Compare(const bit8* p0, const bit8* p1, size_t size) -{ - s32 i; - bool result = true; - for (i = 0; i < size; ++i) - { - if (*(p0 + i) != *(p1 + i)) - { - result = false; - } - } - return result; -} // Compare - - -nn::Result SdReaderWriter::Initialize() -{ - nn::Result result; - - // 初期化済みなら何もしない - if(m_IsInitialized) - { - return nn::ResultSuccess(); - } - - result = SdMountManager::Mount(); - if(result.IsSuccess()) - { - m_IsInitialized = true; - return nn::ResultSuccess(); - } - else - { - return result; - } -} - - -nn::Result SdReaderWriter::Finalize() -{ - nn::Result result; - result = SdMountManager::Unmount(); - - m_IsInitialized = false; - return result; -} - -nn::Result SdReaderWriter::WriteBufCore(const wchar_t* path, void* buf, size_t size) -{ - NN_ASSERT(path != NULL); - NN_ASSERT(size > 0); - - nn::Result result = Initialize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = file.TryInitialize(path, nn::fs::OPEN_MODE_WRITE | nn::fs::OPEN_MODE_CREATE); - - if (result.IsSuccess()) - { - s32 writeSize; - result = file.TryWrite(&writeSize, buf, size, false); - if (result.IsSuccess()) - { - // 何もしない - } - else - { - NN_LOG("SD TryWrite failed\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - } - else - { - NN_LOG("SD TryInitialize failed\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - - return result; -} - -nn::Result SdReaderWriter::WriteBuf(const wchar_t* path, void* buf, size_t size) -{ - nn::Result result; - - result = WriteBufCore(path, buf, size); - NN_UTIL_RETURN_IF_FAILED(result); - - result = file.TryFlush(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - file.Finalize(); - - result = Finalize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - return result; -} - -nn::Result SdReaderWriter::WriteBufWithCmac(const wchar_t* path, void* buf, size_t size) -{ - nn::Result result; - - result = WriteBufCore(path, buf, size); - NN_UTIL_RETURN_IF_FAILED(result); - - nn::crypto::Initialize(); - bit8 sha256Hash[nn::crypto::Sha256Context::HASH_SIZE]; - nn::crypto::CalculateSha256(sha256Hash, buf, size); - - bit8 cmac[nn::crypto::Sha256Context::HASH_SIZE]; - result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - s32 writeSize; - result = file.TryWrite(&writeSize, cmac, sizeof(cmac), false); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = file.TryFlush(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - file.Finalize(); - - result = Finalize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - return result; - -} - -nn::Result SdReaderWriter::ReadBufCore(const wchar_t* path, void* buf, size_t size, size_t* totalSize) -{ - NN_ASSERT(path != NULL); - NN_ASSERT(size > 0); - - nn::Result result; - - if(!m_IsInitialized) - { - Initialize(); - } - - result = file.TryInitialize(path, nn::fs::OPEN_MODE_READ); - if (result.IsSuccess()) - { - s32 readSize; - result = file.TryRead(&readSize, buf, size); - if (result.IsSuccess()) - { - // TODO バッファを超えるサイズのファイル読み込み - *totalSize = readSize; - } - else - { - NN_LOG("SD TryRead failed\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - } - else - { - NN_LOG("SD TryInitialize failed\n"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - } - - return result; -} - -nn::Result SdReaderWriter::ReadBuf(const wchar_t* path, void* buf, size_t size, size_t* totalSize) -{ - nn::Result result; - - result = ReadBufCore(path, buf, size, totalSize); - NN_UTIL_RETURN_IF_FAILED(result); - - file.Finalize(); - return result; -} - -nn::Result SdReaderWriter::ReadBufWithCmac(const wchar_t* path, void* buf, size_t size, size_t* totalSize) -{ - nn::Result result; - - NN_ASSERT(size > nn::crypto::Sha256Context::HASH_SIZE); - - result = ReadBufCore(path, buf, size, totalSize); - NN_UTIL_RETURN_IF_FAILED(result); - - file.Finalize(); - - // CMACの検証を行う - nn::crypto::Initialize(); - bit8 sha256Hash[nn::crypto::Sha256Context::HASH_SIZE]; - nn::crypto::CalculateSha256(sha256Hash, buf, size - sizeof(sha256Hash)); - - bit8 cmac[nn::crypto::Sha256Context::HASH_SIZE]; - result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - if(!Compare(reinterpret_cast(buf) + size - sizeof(sha256Hash), cmac, sizeof(cmac))) - { - // 無効なファイル - COMMON_LOGGER("Verification Failed\n"); - return nn::fs::ResultVerificationFailed(); - } - - *totalSize -= nn::crypto::Sha256Context::HASH_SIZE; - return result; -} - -void SdReaderWriter::CreateDirectory(const wchar_t* path) -{ - nn::Result result; - - if(!m_IsInitialized) - { - Initialize(); - } - - NN_LOG("Create Directory %ls\n", path); - result = nn::fs::TryCreateDirectory(path); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - result = Finalize(); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - -} - -} diff --git a/branches/work/SD_AesCmac/common/SdReaderWriter.h b/branches/work/SD_AesCmac/common/SdReaderWriter.h deleted file mode 100644 index c3d2f63..0000000 --- a/branches/work/SD_AesCmac/common/SdReaderWriter.h +++ /dev/null @@ -1,80 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SdReaderWriter.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 SDWRITER_H_ -#define SDWRITER_H_ - -#include - -namespace common -{ - -//! @brief SDカードに書き込むためのクラスです。 -class SdReaderWriter -{ -public : - SdReaderWriter() : m_IsInitialized(false) {}; - ~SdReaderWriter() {}; - - //! @brief 渡されたバッファからサイズ分指定されたパス名で書きこみます - //! @param[in] path sdmc:で始まる出力パス名。予めディレクトリを作っておく必要があります。 - //! @param[in] buf 入力データへのポインタ - //! @param[in] size 入力データのサイズ - nn::Result WriteBuf(const wchar_t* path, void* buf, size_t size); - - //! @brief 渡されたバッファからsizeバイト指定されたパス名で書きこみます。CMACが付加されます。 - //! @param[in] path sdmc:で始まる出力パス名。予めディレクトリを作っておく必要があります。 - //! @param[in] buf 入力データへのポインタ - //! @param[in] size 入力データのサイズ - nn::Result WriteBufWithCmac(const wchar_t* path, void* buf, size_t size); - - //! @brief 渡されたバッファへサイズ分指定されたパス名から読み込みます - //! @param[in] path sdmc:で始まる入力パス名 - //! @param[in] buf 出力バッファへのポインタ - //! @param[in] size バッファサイズ - //! @param[out] totalSize 読み込んだデータのサイズ - nn::Result ReadBuf(const wchar_t* path, void* buf, size_t size, size_t* totalSize); - - //! @brief 渡されたバッファへ(size - CMAC)バイト指定されたパス名から読み込みます - //! @param[in] path sdmc:で始まるCMAC付きの入力パス名 - //! @param[in] buf 出力バッファへのポインタ - //! @param[in] size バッファサイズ - //! @param[out] totalSize 読み込んだデータのサイズ - nn::Result ReadBufWithCmac(const wchar_t* path, void* buf, size_t size, size_t* totalSize); - - //! @brief 渡されたディレクトリ名のディレクトリを作成します - void CreateDirectory(const wchar_t* path); - -private: - nn::Result WriteBufCore(const wchar_t*path, void* buf, size_t size); - - nn::Result ReadBufCore(const wchar_t* path, void* buf, size_t size, size_t* totalSize); - - //! @brief 初期化します。 - nn::Result Initialize(); - - //! @brief 終了します。 - nn::Result Finalize(); - - nn::fs::FileStream file; - - NN_PADDING3; - bool m_IsInitialized; - -}; - -} - -#endif /* SDWRITER_H_ */ diff --git a/branches/work/SD_AesCmac/common/SimplePlayer.cpp b/branches/work/SD_AesCmac/common/SimplePlayer.cpp deleted file mode 100644 index 97e8a76..0000000 --- a/branches/work/SD_AesCmac/common/SimplePlayer.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SimplePlayer.cpp - - Copyright (C)2009 Nintendo Co., Ltd. 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 -#include -#include -#include -#include -#include - -#include -#include "SimplePlayer.h" -#include "wave.h" -#include "HeapManager.h" - -namespace common -{ - -namespace -{ - const int nFiles = 4; // 使用できる voice の最大値は 24 - const char* apFileNames[nFiles] = - { - "rom:/ok.wav", - "rom:/ng.wav", - "rom:/cursor.wav", - "rom:/annotation.wav" - }; - - nn::snd::CTR::Voice* apVoice[nFiles]; - nn::snd::CTR::WaveBuffer aBuffer[nFiles]; - WaveFmt fmt[nFiles]; - WaveData data[nFiles]; - u8* apMemory[nFiles]; - - nn::os::CriticalSection s_CriticalSection; - bool s_SoundThreadInitialized = false; - - // サウンドスレッド関連 - const int SOUND_THREAD_STACK_SIZE = 4096; - nn::os::StackBuffer s_SoundThreadStack; - nn::os::Thread threadSound; - bool threadSoundFlag; - void SoundThreadFunc() - { - // サウンド出力をステレオに - nn::snd::SetSoundOutputMode(nn::snd::OUTPUT_MODE_STEREO); - - // マスターボリュームを設定 - nn::snd::SetMasterVolume( 1.0 ); - - NN_LOG("Loading wav files...\n"); - - // ファイルを開く - for (int i = 0; i < nFiles; i++) - { - if (apFileNames[i] == NULL) continue; - - nn::snd::Voice* pVoice = NULL; - - nn::fs::FileReader fileReader; - nn::Result result = fileReader.TryInitialize(apFileNames[i]); - NN_UTIL_PANIC_IF_FAILED(result); - if (::std::strcmp(::std::strrchr(apFileNames[i], '.'), ".wav") == false) - { - // 連続メモリ領域の取得、確認 - apMemory[i] = reinterpret_cast(HeapManager::GetHeap()->Allocate(GetWaveLength(fileReader), 32)); - if (apMemory[i] == NULL) - { - NN_LOG("Failed to allocate continuous memory\n"); - continue; - } - - - // Wave データを読み込み、キャッシュを無効に - data[i].buf = apMemory[i]; - LoadWave(fileReader, &fmt[i], &data[i]); - nn::snd::FlushDataCache(reinterpret_cast(apMemory[i]), data[i].size); - - NN_LOG("%s (%1dch, %5dHz, %2d-bit wav file)\n", - apFileNames[i], fmt[i].channel, fmt[i].sample_rate, fmt[i].quantum_bits); - - pVoice = apVoice[i] = nn::snd::AllocVoice(128, NULL, NULL); - NN_TASSERT_(pVoice); - - nn::snd::SampleFormat format = (fmt[i].quantum_bits == 8) ? - nn::snd::SAMPLE_FORMAT_PCM8 : - nn::snd::SAMPLE_FORMAT_PCM16; - - pVoice->SetChannelCount( fmt[i].channel ); - pVoice->SetSampleFormat( format ); - - nn::snd::InitializeWaveBuffer(&aBuffer[i]); - aBuffer[i].bufferAddress = apMemory[i]; - aBuffer[i].sampleLength = nn::snd::GetSampleLength(data[i].size, format, fmt[i].channel); - aBuffer[i].loopFlag = false; - - fileReader.Finalize(); - - // 音量の設定 - nn::snd::MixParam mix; - mix.mainBus[nn::snd::CHANNEL_INDEX_FRONT_LEFT ] = 0.707f; // メインボリューム (L) - mix.mainBus[nn::snd::CHANNEL_INDEX_FRONT_RIGHT] = 0.707f; // メインボリューム (R) - pVoice->SetMixParam(mix); - pVoice->SetVolume(1.0f); - - // pitch の設定 - pVoice->SetSampleRate(fmt[i].sample_rate); - pVoice->SetPitch(1.0f); - - } - } - - // 再生開始 - for (int i = 0; i < nFiles; i++) - { - if (apFileNames[i] != NULL) - { - apVoice[i]->SetState( nn::snd::Voice::STATE_PLAY ); - } - } - - s_SoundThreadInitialized = true; - - threadSoundFlag = true; - while (threadSoundFlag) - { - nn::snd::WaitForDspSync(); // DSP からのデータ受信を待つ。 - - - s_CriticalSection.Enter(); // メインスレッドとの排他制御 - nn::snd::SendParameterToDsp(); // パラメータを DSP に送信。 - s_CriticalSection.Leave(); // メインスレッドとの排他制御 - } - - // 再生終了 - for (int i = 0; i < nFiles; i++) - { - if (apVoice[i]) - { - nn::snd::FreeVoice(apVoice[i]); - } - } - } -} - -void InitializeSimplePlayer() -{ - NN_LOG("Initialize SimplePlayer\n"); - - nn::Result result; - - const size_t ROMFS_BUFFER_SIZE = 1024 * 64; - static char buffer[ROMFS_BUFFER_SIZE]; - NN_UTIL_PANIC_IF_FAILED( - nn::fs::MountRom(16, 16, buffer, ROMFS_BUFFER_SIZE)); - - // dsp, snd の初期化 - result = nn::dsp::Initialize(); - NN_UTIL_PANIC_IF_FAILED(result); - result = nn::dsp::LoadDefaultComponent(); - NN_UTIL_PANIC_IF_FAILED(result); - result = nn::snd::Initialize(); - NN_UTIL_PANIC_IF_FAILED(result); - - s_CriticalSection.Initialize(); - - // サウンドスレッドを起動(DSP 割り込みイベント待ち) - threadSound.Start(SoundThreadFunc, s_SoundThreadStack); -} - -void PlaySound(u8 index) -{ - NN_ASSERT(index <= nFiles); - - while(!s_SoundThreadInitialized) - { - nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(1)); - } - - nn::snd::CTR::Voice* pVoice = apVoice[index]; - - if (!pVoice->IsPlaying()) - { - nn::snd::InitializeWaveBuffer(&aBuffer[index]); - aBuffer[index].bufferAddress = apMemory[index]; - nn::snd::SampleFormat format = (fmt[index].quantum_bits == 8) ? nn::snd::SAMPLE_FORMAT_PCM8 - : nn::snd::SAMPLE_FORMAT_PCM16; - - aBuffer[index].sampleLength = nn::snd::GetSampleLength(data[index].size, format, fmt[index].channel); - aBuffer[index].loopFlag = false; - - pVoice->AppendWaveBuffer(&aBuffer[index]); - NN_LOG("[voice%d] %s (pitch = %f)\n", - index, - (pVoice->GetState() == nn::snd::Voice::STATE_PAUSE ? "pause" : "play "), - pVoice->GetPitch()); - } -} - -void FinalizeSimplePlayer() -{ - nn::Result result; - - // サウンドスレッドの破棄 - threadSoundFlag = false; - threadSound.Join(); - - // SND の終了処理 - result = nn::snd::Finalize(); - NN_UTIL_PANIC_IF_FAILED(result); - - s_CriticalSection.Finalize(); - - // DSP の終了処理 - result = nn::dsp::UnloadComponent(); - NN_UTIL_PANIC_IF_FAILED(result); - nn::dsp::Finalize(); - - - NN_LOG("Finalize SimplePlayer\n"); - -} - -} // namespace ConsoleBackup -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/branches/work/SD_AesCmac/common/SimplePlayer.h b/branches/work/SD_AesCmac/common/SimplePlayer.h deleted file mode 100644 index b7fe76e..0000000 --- a/branches/work/SD_AesCmac/common/SimplePlayer.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: SimplePlayer.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 SIMPLEPLAYER_H_ -#define SIMPLEPLAYER_H_ - -namespace common -{ - -enum SoundEffect -{ - SOUND_OK, - SOUND_NG, - SOUND_CURSOR, - SOUND_ANNOTATION -}; - -void InitializeSimplePlayer(); -void FinalizeSimplePlayer(); -void PlaySound(u8 index); - -} // namespace ConsoleBackup - - -#endif /* SIMPLEPLAYER_H_ */ diff --git a/branches/work/SD_AesCmac/common/VersionDetect.cpp b/branches/work/SD_AesCmac/common/VersionDetect.cpp deleted file mode 100644 index f028569..0000000 --- a/branches/work/SD_AesCmac/common/VersionDetect.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: VersionDetect.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 -#include -#include - -#include "VersionDetect.h" -#include "HeapManager.h" -#include "CommonLogger.h" - -namespace common -{ - -void GetCupVersion(nn::pl::CTR::CardUpdateVersion* cup, nn::cfg::CTR::CfgRegionCode region) -{ - nn::Result result; - const size_t BUF_SIZE = 1024; - u8 buf[BUF_SIZE]; - // CUPバージョン - { - result = nn::fs::MountContent("cver:", nn::fs::MEDIA_TYPE_NAND, common::cCupVerId[region], 0, 1, 1, buf, - BUF_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - nn::fs::FileInputStream fis; - - result = fis.TryInitialize(L"cver:/version.bin"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - s64 fileSize = fis.GetSize(); - NN_LOG("version.bin size = %lld\n", fileSize); - s32 ret; - void* addr = NULL; - addr = common::HeapManager::GetHeap()->Allocate(fileSize); - if (addr != NULL) - { - result = fis.TryRead(&ret, addr, fileSize); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - nn::pl::CTR::CardUpdateVersion* ver_buf = reinterpret_cast (addr); - - std::memcpy(cup, ver_buf, sizeof(nn::pl::CTR::CardUpdateVersion)); - } - common::HeapManager::GetHeap()->Free(addr); - } - } - fis.Finalize(); - - nn::fs::Unmount("cver:"); - } - -} - -void GetNupVersion(nn::pl::CTR::NetworkUpdateVersion* nup, nn::cfg::CTR::CfgRegionCode region) -{ - nn::Result result; - const size_t BUF_SIZE = 1024; - u8 buf[BUF_SIZE]; - - // NUPバージョン - { - result = nn::fs::MountContent("nver:", nn::fs::MEDIA_TYPE_NAND, common::cNupVerId[region], 0, 1, 1, buf, - BUF_SIZE); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - - nn::fs::FileInputStream fis; - - result = fis.TryInitialize(L"nver:/version.bin"); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - s64 fileSize = fis.GetSize(); - NN_LOG("version.bin size = %lld\n", fileSize); - s32 ret; - void* addr = NULL; - addr = common::HeapManager::GetHeap()->Allocate(fileSize); - if (addr != NULL) - { - result = fis.TryRead(&ret, addr, fileSize); - COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result); - if (result.IsSuccess()) - { - nn::pl::CTR::NetworkUpdateVersion* ver_buf = - reinterpret_cast (addr); - - std::memcpy(nup, ver_buf, sizeof(nn::pl::CTR::NetworkUpdateVersion)); - } - common::HeapManager::GetHeap()->Free(addr); - } - } - - fis.Finalize(); - nn::fs::Unmount("nver:"); - } - -} - -void GetSystemVersion(common::VerDef* mVerData, nn::cfg::CTR::CfgRegionCode region) -{ - GetCupVersion(&mVerData->cup, region); - GetNupVersion(&mVerData->nup, region); -} - -} - diff --git a/branches/work/SD_AesCmac/common/VersionDetect.h b/branches/work/SD_AesCmac/common/VersionDetect.h deleted file mode 100644 index 652ed09..0000000 --- a/branches/work/SD_AesCmac/common/VersionDetect.h +++ /dev/null @@ -1,30 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: VersionDetect.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 VERSIONDETECT_H_ -#define VERSIONDETECT_H_ - -#include -#include "common_Types.h" - -namespace common -{ - -void GetSystemVersion(common::VerDef* mVerData, nn::cfg::CTR::CfgRegionCode region); - -} - - -#endif /* VERSIONDETECT_H_ */ diff --git a/branches/work/SD_AesCmac/common/common_Types.h b/branches/work/SD_AesCmac/common/common_Types.h deleted file mode 100644 index 9c7f50d..0000000 --- a/branches/work/SD_AesCmac/common/common_Types.h +++ /dev/null @@ -1,70 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: common_Types.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 COMMON_TYPES_H_ -#define COMMON_TYPES_H_ - -#include -#include -#include -#include -#include - -namespace common -{ - -const u32 NTR_WIFI_SETTING_SIZE = 0x400; // NTR Wifi 設定のサイズ -const u32 TWL_WIFI_SETTING_SIZE = 0x600; // TWL Wifi 設定のサイズ - - -// NOR領域のみにある設定データ用構造体 -struct NtrNorData -{ - nn::cfg::CTR::NtrConfig ntrConfig; - u8 TwlWiFiSetting[TWL_WIFI_SETTING_SIZE]; - u8 NtrWiFiSetting[NTR_WIFI_SETTING_SIZE]; -}; - -struct CfgCountryLanguage -{ - enum nn::cfg::CTR::CfgCountryCode country; - enum nn::cfg::CTR::CfgLanguageCode language; - NN_PADDING1; -}; - -struct VerDef -{ - nn::pl::CTR::CardUpdateVersion cup; - nn::pl::CTR::NetworkUpdateVersion nup; -}; - -// TODO:リージョン追加時に範囲外アクセスにならないよう注意 -const nn::ProgramId cCupVerId[] = -{ - nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_JP, - nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_US, - nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_EU, -}; - -const nn::ProgramId cNupVerId[] = -{ - nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_JP, - nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_US, - nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_EU, -}; - -} - -#endif /* COMMON_TYPES_H_ */ diff --git a/branches/work/SD_AesCmac/common/configLoader.cpp b/branches/work/SD_AesCmac/common/configLoader.cpp deleted file mode 100644 index b262ba9..0000000 --- a/branches/work/SD_AesCmac/common/configLoader.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include -#include -#include -#include "configLoader.h" - -namespace common -{ - -Result ConfigFileLoader::Initialize(const wchar_t* fileName, void* buffer, const size_t bufferSize) -{ - s64 fileSize; - FileInputStream fi; - NN_UTIL_RETURN_IF_FAILED(fi.TryInitialize(fileName)); - NN_UTIL_RETURN_IF_FAILED(fi.TryGetSize(&fileSize)); - - // NULL終端ぶん読めるサイズを減らす - if (fileSize > bufferSize - sizeof(wchar_t)) - { - NN_TLOG_("Too Large File\n"); - return Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_TOO_LARGE); - } - - m_Buffer = static_cast(buffer); - NN_UTIL_RETURN_IF_FAILED(fi.TryRead(&m_UsedBufferSize, m_Buffer, fileSize)); - NN_LOG("config size = %d\n", m_UsedBufferSize); - return ParseData(); -} - -void ConfigFileLoader::Finalize() -{ - m_Buffer = 0; - m_ParamNum = 0; -} - -Result ConfigFileLoader::ParseData() -{ - if (!m_Buffer) - { - return Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_NOT_INITIALIZED); - } - - int pos = 0; - - // ビッグエンディアンでないことを確認 - NN_ASSERTMSG(m_Buffer[0] != 0xfffe, "Invalid Config File's Endian\n"); - - if (m_Buffer[0] == 0xfeff) - { - // UTF-16 BOMの調整 - pos++; - } - - m_ParamNum = 0; - m_ParamName[m_ParamNum] = &(m_Buffer[pos]); - m_ParamValue[m_ParamNum] = L""; - m_Buffer[m_UsedBufferSize / sizeof(wchar_t)] = L'\0'; // NULL終端しておく - - // ダブルクウォート中なら : も文字として読み取る - bool inEscape = false; - // # で行末までコメント - bool inComment = false; - // : で行頭から:までがkey、:から行末までがvalue - bool inSettingKeyValue = false; - - while (pos < m_UsedBufferSize / sizeof(m_Buffer[0])) - { - switch (m_Buffer[pos]) - { - case L'"': - { - inEscape = !inEscape; - } - break; - - case L'#': - { - inComment = true; - } - break; - - case L':': - { - if (inEscape || inComment) - { - break; - } - - if (inSettingKeyValue) - { - break; - } - else - { - inSettingKeyValue = true; - } - m_Buffer[pos] = L'\0'; - m_ParamValue[m_ParamNum++] = &(m_Buffer[pos + 1]); - - } - - break; - case L'\r': - case L'\n': - { - if (inComment) - { - inComment = false; - } - if (inSettingKeyValue) - { - inSettingKeyValue = false; - } - - m_Buffer[pos] = L'\0'; - m_ParamName[m_ParamNum] = &(m_Buffer[pos + 1]); - m_ParamValue[m_ParamNum] = L""; - } - break; - - } - - if (PARAM_MAX_NUM <= m_ParamNum) - { - NN_TLOG_("Too Many Params\n"); - return Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, - nn::Result::DESCRIPTION_TOO_LARGE); - } - pos++; - } - - return ResultSuccess(); -} - -s32 ConfigFileLoader::SearchParamName(const wchar_t *paramName) -{ - if (!m_Buffer) - { - NN_TLOG_("ConfigFileLoader not initialized.\n"); - return -1; - } - - for (s32 i = 0; i < m_ParamNum; i++) - { - if (wcscmp(m_ParamName[i], paramName) == 0) - { - return i; - } - } - return -1; -} - -const wchar_t *ConfigFileLoader::ReadAsWChar(const wchar_t *paramName) -{ - s32 idx = SearchParamName(paramName); - if (idx < 0) - { - NN_LOG("Unknown Parameter Name %ls\n", paramName); - } - return (idx < 0) ? NULL : m_ParamValue[idx]; -} - -const char *ConfigFileLoader::ReadAsChar(const wchar_t *paramName) -{ - memset(m_ReadCharBuffer, 0, sizeof(m_ReadCharBuffer)); - const wchar_t *value = ReadAsWChar(paramName); - if(value == NULL) - { - return NULL; - } - wcstombs(m_ReadCharBuffer, value, sizeof(m_ReadCharBuffer)); - // NULL終端する - m_ReadCharBuffer[sizeof(m_ReadCharBuffer) - 1] = '\0'; - return m_ReadCharBuffer; -} - -int ConfigFileLoader::ReadAsInteger(const wchar_t *paramName) -{ - return atoi(ReadAsChar(paramName)); -} - -} diff --git a/branches/work/SD_AesCmac/common/configLoader.h b/branches/work/SD_AesCmac/common/configLoader.h deleted file mode 100644 index 67e1edf..0000000 --- a/branches/work/SD_AesCmac/common/configLoader.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef NN_CONFIG_LOADER_H_ -#define NN_CONFIG_LOADER_H_ - - -namespace common -{ - using namespace nn; - using namespace nn::fs; - using namespace std; - -class ConfigFileLoader -{ -private: - static const int PARAM_VALUE_MAX_STRING_LENGTH = 128; - static const int PARAM_MAX_NUM = 64; - - char m_ReadCharBuffer[PARAM_VALUE_MAX_STRING_LENGTH]; - wchar_t *m_ParamName[PARAM_MAX_NUM]; - wchar_t *m_ParamValue[PARAM_MAX_NUM]; - wchar_t *m_Buffer; - - s32 m_UsedBufferSize; - s32 m_ParamNum; - -public: - ConfigFileLoader() : m_Buffer(0), m_UsedBufferSize(0), m_ParamNum(0) - { - } - -/* - @brief ConfigFileLoader を初期化します. - - 使用するファイルが存在するアーカイブは,あらかじめマウントしておく必要があります. - 読み込みに使用するバッファを確保し,引数 buffer に与える必要があります. - Finalize を呼ぶまでこのバッファは開放しないでください. - - 読み込ませることのできるフォーマット - ・エンコーディング:UTF-16 - ・バイトオーダ  :リトルエンディアン - ・改行記号    :不問 - - 半角コロンを含む行のみパラメータ記述行として読み込み,含まない行は無視します. - 半角コロンより前の文字はすべてパラメータ名として取得し, - 半角コロンより後の文字はすべてパラメータの値として取得します. - ParameterName : ParameterValue; - と記述すると - パラメータ名は L"ParameterName " - パラメータ値は L" ParameterValue;" - となります. - - @param[in] fileName 設定ファイル名 - @param[in] buffer ファイル読み込み用のバッファ - @param[in] bufferSize 上記 buffer の大きさ - - @return 結果を返します. - -*/ - Result Initialize(const wchar_t* fileName, void* buffer, const size_t bufferSize); - void Finalize(); - - // スレッドセーフです. - const wchar_t *ReadAsWChar(const wchar_t *paramName); - - // スレッドセーフではありません. - const char *ReadAsChar(const wchar_t *paramName); - - // スレッドセーフです. - int ReadAsInteger(const wchar_t *paramName); - -private: - Result ParseData(); - s32 SearchParamName(const wchar_t *paramName); -}; - -} - - -#endif // NN_CONFIG_LOADER_H_ diff --git a/branches/work/SD_AesCmac/common/romfiles/annotation.wav b/branches/work/SD_AesCmac/common/romfiles/annotation.wav deleted file mode 100644 index b64f77b..0000000 Binary files a/branches/work/SD_AesCmac/common/romfiles/annotation.wav and /dev/null differ diff --git a/branches/work/SD_AesCmac/common/romfiles/cursor.wav b/branches/work/SD_AesCmac/common/romfiles/cursor.wav deleted file mode 100644 index 85765b3..0000000 Binary files a/branches/work/SD_AesCmac/common/romfiles/cursor.wav and /dev/null differ diff --git a/branches/work/SD_AesCmac/common/romfiles/ng.wav b/branches/work/SD_AesCmac/common/romfiles/ng.wav deleted file mode 100644 index dc2f3ef..0000000 Binary files a/branches/work/SD_AesCmac/common/romfiles/ng.wav and /dev/null differ diff --git a/branches/work/SD_AesCmac/common/romfiles/ok.wav b/branches/work/SD_AesCmac/common/romfiles/ok.wav deleted file mode 100644 index bf5149f..0000000 Binary files a/branches/work/SD_AesCmac/common/romfiles/ok.wav and /dev/null differ diff --git a/branches/work/SD_AesCmac/common/wave.cpp b/branches/work/SD_AesCmac/common/wave.cpp deleted file mode 100644 index a897109..0000000 --- a/branches/work/SD_AesCmac/common/wave.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: wave.c - - Copyright (C)2009 Nintendo Co., Ltd. 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$ - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------*/ -/* includes */ -#include "wave.h" - -/*---------------------------------------------------------------------------*/ -/* functions */ - -/*---------------------------------------------------------------------------* - Name: LoadWave - - Description: Wave データを読み込む. - - Arguments: filepath : ファイルパス - fmt : Wave データの fmt チャンクを格納 - data : Wave データの data チャンクを格納 - - Returns: None. - *---------------------------------------------------------------------------*/ -void LoadWaveCore(nn::fs::FileReader& reader, WaveFmt * fmt, WaveData * data, bool isSizeOnly) -{ - reader.SetPosition(0); - - WaveRiff riff; // RIFF ヘッダ - WaveChunk chunk; // CHUNK - u32 readbyte = 0; // ファイル読み込みの判定に使用 - u32 fsize = reader.GetSize(); - - // RIFF ヘッダ読み込み - reader.Read((u8*)&riff, sizeof(WaveRiff)); - - // サイズを積算 - readbyte += sizeof(WaveRiff); - - // "RIFF" との一致を確認 - if (riff.tag != MAKE_WAVE_TAG_VALUE('R','I','F','F')) - { - NN_PANIC("Not RIFF format.\n"); - } - // "WAVE" との一致を確認 - if ( riff.type != MAKE_WAVE_TAG_VALUE('W','A','V','E') ) - { - NN_PANIC("Not Wave format.\n"); - } - - // ファイルサイズより大きくなるまで読み込む - while(fsize > readbyte) - { - // CHUNK の読み込み - reader.Read((u8*)&chunk, sizeof(WaveChunk)); - readbyte += sizeof(WaveChunk); - - // "fmt " - if (chunk.tag == MAKE_WAVE_TAG_VALUE('f','m','t',' ')) - { - reader.Read((u8*)fmt, sizeof(WaveFmt)); - readbyte += sizeof(WaveFmt); - - // 拡張領域があれば読み捨て - if (chunk.size > sizeof(WaveFmt)) - { - u16 ext_size; - - reader.Read((u8*)&ext_size, sizeof(ext_size)); - readbyte += sizeof(ext_size); - - readbyte += chunk.size; - if (readbyte == fsize) break; - - reader.Seek(ext_size, nn::fs::POSITION_BASE_CURRENT); - } - } - // "data" - else if (chunk.tag == MAKE_WAVE_TAG_VALUE('d','a','t','a')) - { - data->size = chunk.size; - - if (isSizeOnly) - { - return; - } - else - { - reader.Read((u8*)data->buf, data->size); - // 8-bit wav ファイルの場合は unsigned -> signed の変換が必要 - if (fmt->quantum_bits == 8) - { - s8* p = (s8*)data->buf; - for (int i = 0; i < data->size; i++) - { - p[i] -= 128; - } - } - } - readbyte += chunk.size; - } - // それ以外 - else - { - readbyte += chunk.size; - if (readbyte == fsize) break; - - // 読み飛ばす - reader.Seek(chunk.size, nn::fs::POSITION_BASE_CURRENT); - } - } -} - -#ifndef NN_BUILD_RELEASE // Release ビルドでは HostIO は使えません。 -void WriteWaveHeader(nn::hio::CTR::HostFile& hostFile, WaveFmt* fmt, s32 size) -{ - WaveRiff riff; - riff.tag = MAKE_WAVE_TAG_VALUE('R','I','F','F'); - riff.size = - + sizeof(WaveRiff) // riff header - + sizeof(WaveChunk) + sizeof(WaveFmt) // wave fmt header - + sizeof(WaveChunk) + size // wave data - - 8; - riff.type = MAKE_WAVE_TAG_VALUE('W','A','V','E'); - hostFile.Write(&riff, sizeof(WaveRiff)); - - WaveChunk chunk; - chunk.tag = MAKE_WAVE_TAG_VALUE('f','m','t',' '); - chunk.size = sizeof(WaveFmt); - hostFile.Write(&chunk, sizeof(WaveChunk)); - hostFile.Write(fmt, sizeof(WaveFmt)); - - chunk.tag = MAKE_WAVE_TAG_VALUE('d','a','t','a'); - chunk.size = size; - hostFile.Write(&chunk, sizeof(WaveChunk)); -} -#endif // NN_BUILD_RELEASE - -/*---------------------------------------------------------------------------*/ -/* end of file */ -/*---------------------------------------------------------------------------*/ diff --git a/branches/work/SD_AesCmac/common/wave.h b/branches/work/SD_AesCmac/common/wave.h deleted file mode 100644 index cbaf2f3..0000000 --- a/branches/work/SD_AesCmac/common/wave.h +++ /dev/null @@ -1,148 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: Horizon - File: wave.h - - Copyright (C)2009 Nintendo Co., Ltd. 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 __WAVE_HEADER__ -#define __WAVE_HEADER__ - -/*---------------------------------------------------------------------------*/ -/* includes */ -#include -#include -#ifndef NN_BUILD_RELEASE // Release ビルドでは HostIO は使えません。 -#include -#endif // NN_BUILD_RELEASE - -/*---------------------------------------------------------------------------*/ -/* constants */ - -#define MAKE_WAVE_TAG_VALUE(c1, c2, c3, c4) \ - ( c1 | (c2<<8) | (c3<<16) | (c4<<24) ) - -#define MAKE_WAVE_TAG_STRING(str, val) \ - { \ - str[3] = (char) ( (val>>24)&0xff ) ; \ - str[2] = (char) ( (val>>16)&0xff ) ; \ - str[1] = (char) ( (val>> 8)&0xff ) ; \ - str[0] = (char) ( (val )&0xff ) ; \ - str[4] = (char) ( 0 ) ; \ - } - -#define MAKE_FMT_CHUNK(ch, s) \ - { \ - ch.tag = MAKE_WAVE_TAG_VALUE('f', 'm', 't', ' '); \ - ch.size = s; \ - } - -#define MAKE_DATA_CHUNK(ch, s) \ - { \ - ch.tag = MAKE_WAVE_TAG_VALUE('d', 'a', 't', 'a'); \ - ch.size = s; \ - } - -#define saturate(v, min, max) \ - { \ - if ( v < min ) {v = min;} \ - else if ( v > max ) {v = max;} \ - } - -#define swap(v,t) swap_##t##_(v) - -#define swap_u16_(v) \ - { \ - v = (u16)(((v)>> 8)&0x00ff | \ - ((v)<< 8)&0xff00); \ - } - -#define swap_s16_(v) \ - { \ - v = (s16)(((v)>> 8)&0x00ff | \ - ((v)<< 8)&0xff00); \ - } - -#define swap_u32_(v) \ - { \ - v = (u32)(((v)>>24)&0x000000ff | \ - ((v)>> 8)&0x0000ff00 | \ - ((v)<< 8)&0x00ff0000 | \ - ((v)<<24)&0xff000000); \ - } - -#define swap_s32_(v) \ - { \ - v = (s32)(((v)>>24)&0x000000ff | \ - ((v)>> 8)&0x0000ff00 | \ - ((v)<< 8)&0x00ff0000 | \ - ((v)<<24)&0xff000000); \ - } - -/*---------------------------------------------------------------------------*/ -/* typedef */ -typedef struct _riff -{ - u32 tag; - u32 size; - u32 type; -} -WaveRiff; - -typedef struct _chunk -{ - u32 tag; - u32 size; -} -WaveChunk; - -typedef struct _fmt -{ - u16 fmt_id; - u16 channel; - u32 sample_rate; - u32 trans_rate; - u16 block_size; - u16 quantum_bits; -} -WaveFmt; - -typedef struct _data -{ - u32 size; - u8* buf; -} -WaveData; - -/*---------------------------------------------------------------------------*/ -/* prototype */ - -void LoadWaveCore(nn::fs::FileReader&, WaveFmt*, WaveData*, bool); -static inline void LoadWave(nn::fs::FileReader& reader, WaveFmt* fmt, WaveData* data) -{ - LoadWaveCore(reader, fmt, data, false); -} -static inline int GetWaveLength(nn::fs::FileReader& reader) -{ - WaveFmt fmt; - WaveData data; - LoadWaveCore(reader, &fmt, &data, true); - return data.size; -} -#ifndef NN_BUILD_RELEASE // Release ビルドでは HostIO は使えません。 -void WriteWaveHeader(nn::hio::CTR::HostFile& hostFile, WaveFmt* fmt, s32 size); -#endif // NN_BUILD_RELEASE - -#endif // __WAVE_HEADER__ - -/*---------------------------------------------------------------------------*/ -/* end of file */ -/*---------------------------------------------------------------------------*/