mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
XボタンでデバイスIDをQRコード表示できるように
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@661 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
3f8e0e568a
commit
707ab24a28
@ -275,18 +275,18 @@ extern "C" void nnMain(void)
|
|||||||
renderSystem.SwapBuffers();
|
renderSystem.SwapBuffers();
|
||||||
|
|
||||||
// デフォルトで下画面に描画するもの
|
// デフォルトで下画面に描画するもの
|
||||||
renderSystem.SetRenderTarget(common::GetRenderTarget(NN_GX_DISPLAY1, flip));
|
renderSystem.SetRenderTarget(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip));
|
||||||
if(IsBackupSucceeded())
|
if(IsBackupSucceeded())
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR);
|
renderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR);
|
||||||
}
|
}
|
||||||
if(IsBackupWarning())
|
if(IsBackupWarning())
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), WARN_COLOR);
|
renderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), WARN_COLOR);
|
||||||
}
|
}
|
||||||
else if(IsBackupFailed())
|
else if(IsBackupFailed())
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR);
|
renderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR);
|
||||||
}
|
}
|
||||||
renderSystem.Clear();
|
renderSystem.Clear();
|
||||||
renderSystem.SetColor(1.f, 1.f, 1.f);
|
renderSystem.SetColor(1.f, 1.f, 1.f);
|
||||||
|
|||||||
@ -48,6 +48,7 @@
|
|||||||
#include "ResFont.h"
|
#include "ResFont.h"
|
||||||
#include "HardwareStateManager.h"
|
#include "HardwareStateManager.h"
|
||||||
#include "OperationMessage.h"
|
#include "OperationMessage.h"
|
||||||
|
#include "QrImage.h"
|
||||||
|
|
||||||
// バージョン表示用
|
// バージョン表示用
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
@ -179,6 +180,7 @@ extern "C" void nnMain(void)
|
|||||||
|
|
||||||
|
|
||||||
bool flip = false;
|
bool flip = false;
|
||||||
|
bool qr = false;
|
||||||
InitializeState();
|
InitializeState();
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
@ -210,6 +212,12 @@ extern "C" void nnMain(void)
|
|||||||
flip = !flip;
|
flip = !flip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Xボタンでモード切替
|
||||||
|
if(padStatus.trigger & nn::hid::BUTTON_X)
|
||||||
|
{
|
||||||
|
qr = !qr;
|
||||||
|
}
|
||||||
|
|
||||||
// コンソールスクロール
|
// コンソールスクロール
|
||||||
if(padStatus.hold & nn::hid::BUTTON_UP)
|
if(padStatus.hold & nn::hid::BUTTON_UP)
|
||||||
{
|
{
|
||||||
@ -249,110 +257,100 @@ extern "C" void nnMain(void)
|
|||||||
|
|
||||||
common::OperationMessage operationMessage;
|
common::OperationMessage operationMessage;
|
||||||
|
|
||||||
ControlState(manager, operationMessage, nextStep, operateBmsDone, forcePreinstall);
|
if(qr)
|
||||||
|
|
||||||
nn::util::FloatColor titleColor;
|
|
||||||
|
|
||||||
if(GetRestoreMode() == RESTORE_MODE_RESTORE)
|
|
||||||
{
|
{
|
||||||
titleColor.r = 0.1f;
|
common::QrImage::Draw(s_RenderSystem, s_HwUtility.GetInfraDeviceId(), flip);
|
||||||
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;
|
|
||||||
}
|
|
||||||
else if(GetRestoreMode() == RESTORE_MODE_GET_IVS)
|
|
||||||
{
|
|
||||||
titleColor.r = 1.0f;
|
|
||||||
titleColor.g = 0.2f;
|
|
||||||
titleColor.b = 0.2f;
|
|
||||||
}
|
|
||||||
else if(GetRestoreMode() == RESTORE_MODE_CHECK_SD)
|
|
||||||
{
|
|
||||||
titleColor.r = 0.2f;
|
|
||||||
titleColor.g = 0.2f;
|
|
||||||
titleColor.b = 1.2f;
|
|
||||||
}
|
|
||||||
else if(GetRestoreMode() == RESTORE_MODE_DOWNLOAD_PREINSTALL)
|
|
||||||
{
|
|
||||||
titleColor.r = 1.0f;
|
|
||||||
titleColor.g = 0.55f;
|
|
||||||
titleColor.b = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 上画面表示
|
|
||||||
common::DrawSystemState("CTR Console Restore",
|
|
||||||
s_RenderSystem,
|
|
||||||
titleColor,
|
|
||||||
flip,
|
|
||||||
adapterState,
|
|
||||||
s_HwUtility.GetCupMajorVersion(),
|
|
||||||
s_HwUtility.GetCupMinorVersion(),
|
|
||||||
s_HwUtility.GetCupMicroVersion(),
|
|
||||||
s_HwUtility.GetNupVersion(),
|
|
||||||
s_HwUtility.GetBatteryRemain(),
|
|
||||||
s_HwUtility.GetInfraDeviceId(),
|
|
||||||
s_HwUtility.GetFriendcode(),
|
|
||||||
GetProgress(),
|
|
||||||
IsRestoreFailed(),
|
|
||||||
IsRestoreSucceeded(),
|
|
||||||
false,
|
|
||||||
s_HwUtility.GetMacAddress(),
|
|
||||||
operationMessage,
|
|
||||||
s_HwUtility.GetRegion(),
|
|
||||||
s_HwUtility.GetSerialNumber(),
|
|
||||||
s_HwUtility.HasReadFriendCode()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (GetRestoreMode() != RESTORE_MODE_RESTORE)
|
|
||||||
{
|
|
||||||
const u8 spaceSize = 10;
|
|
||||||
const u8 lineBottom = 23;
|
|
||||||
const u32 screenWidth = 400;
|
|
||||||
|
|
||||||
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
|
||||||
|
|
||||||
if (GetRestoreMode() == RESTORE_MODE_NUP_ONLY)
|
|
||||||
{
|
|
||||||
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "NUP-Only Mode");
|
|
||||||
}
|
|
||||||
else if (GetRestoreMode() == RESTORE_MODE_GET_IVS)
|
|
||||||
{
|
|
||||||
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "GET-SDCI Mode");
|
|
||||||
}
|
|
||||||
else if (GetRestoreMode() == RESTORE_MODE_CHECK_SD)
|
|
||||||
{
|
|
||||||
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "CHECK-SD Mode");
|
|
||||||
}
|
|
||||||
else if (GetRestoreMode() == RESTORE_MODE_DOWNLOAD_PREINSTALL)
|
|
||||||
{
|
|
||||||
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "DL_PREINATALL 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
|
else
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetClearColor(common::GetRenderTarget(NN_GX_DISPLAY1, flip), NORMAL_COLOR);
|
ControlState(manager, operationMessage, nextStep, operateBmsDone, forcePreinstall);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_GET_IVS)
|
||||||
|
{
|
||||||
|
titleColor.r = 1.0f;
|
||||||
|
titleColor.g = 0.2f;
|
||||||
|
titleColor.b = 0.2f;
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_CHECK_SD)
|
||||||
|
{
|
||||||
|
titleColor.r = 0.2f;
|
||||||
|
titleColor.g = 0.2f;
|
||||||
|
titleColor.b = 1.2f;
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_DOWNLOAD_PREINSTALL)
|
||||||
|
{
|
||||||
|
titleColor.r = 1.0f;
|
||||||
|
titleColor.g = 0.55f;
|
||||||
|
titleColor.b = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上画面表示
|
||||||
|
common::DrawSystemState("CTR Console Restore", s_RenderSystem, titleColor, flip, adapterState,
|
||||||
|
s_HwUtility.GetCupMajorVersion(), s_HwUtility.GetCupMinorVersion(),
|
||||||
|
s_HwUtility.GetCupMicroVersion(), s_HwUtility.GetNupVersion(), s_HwUtility.GetBatteryRemain(),
|
||||||
|
s_HwUtility.GetInfraDeviceId(), s_HwUtility.GetFriendcode(), GetProgress(), IsRestoreFailed(),
|
||||||
|
IsRestoreSucceeded(), false, s_HwUtility.GetMacAddress(), operationMessage, s_HwUtility.GetRegion(),
|
||||||
|
s_HwUtility.GetSerialNumber(), s_HwUtility.HasReadFriendCode());
|
||||||
|
|
||||||
|
if (GetRestoreMode() != RESTORE_MODE_RESTORE)
|
||||||
|
{
|
||||||
|
const u8 spaceSize = 10;
|
||||||
|
const u8 lineBottom = 23;
|
||||||
|
const u32 screenWidth = 400;
|
||||||
|
|
||||||
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
||||||
|
|
||||||
|
if (GetRestoreMode() == RESTORE_MODE_NUP_ONLY)
|
||||||
|
{
|
||||||
|
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "NUP-Only Mode");
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_GET_IVS)
|
||||||
|
{
|
||||||
|
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "GET-SDCI Mode");
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_CHECK_SD)
|
||||||
|
{
|
||||||
|
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "CHECK-SD Mode");
|
||||||
|
}
|
||||||
|
else if (GetRestoreMode() == RESTORE_MODE_DOWNLOAD_PREINSTALL)
|
||||||
|
{
|
||||||
|
s_RenderSystem.DrawText(0, lineBottom * spaceSize, "DL_PREINATALL 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::Util::GetRenderTarget(NN_GX_DISPLAY1, flip));
|
||||||
|
if(IsRestoreSucceeded())
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), SUCCESS_COLOR);
|
||||||
|
}
|
||||||
|
else if(IsRestoreFailed())
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), FAIL_COLOR);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(common::Util::GetRenderTarget(NN_GX_DISPLAY1, flip), NORMAL_COLOR);
|
||||||
}
|
}
|
||||||
s_RenderSystem.Clear();
|
s_RenderSystem.Clear();
|
||||||
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
||||||
|
|||||||
@ -20,6 +20,7 @@ TARGET_PROGRAM = ConsoleRestore
|
|||||||
|
|
||||||
SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include)
|
SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include)
|
||||||
INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \
|
INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \
|
||||||
|
$(dir $(CTRMW_QRE_ROOT)/include/mw/qre) \
|
||||||
../common
|
../common
|
||||||
|
|
||||||
SOURCES[] =
|
SOURCES[] =
|
||||||
@ -50,6 +51,7 @@ SOURCES[] =
|
|||||||
../common/HardwareStateManager.cpp
|
../common/HardwareStateManager.cpp
|
||||||
../common/SaveDataMover.cpp
|
../common/SaveDataMover.cpp
|
||||||
../common/OperationMessage.cpp
|
../common/OperationMessage.cpp
|
||||||
|
../common/QrImage.cpp
|
||||||
|
|
||||||
include $(ROOT)/common/BuildSwitch.om
|
include $(ROOT)/common/BuildSwitch.om
|
||||||
|
|
||||||
@ -74,6 +76,9 @@ LIBS += libnn_cfg \
|
|||||||
libnn_nim \
|
libnn_nim \
|
||||||
libnn_xml_simple \
|
libnn_xml_simple \
|
||||||
|
|
||||||
|
QRE_LIBRARIES[] = libmw_qre
|
||||||
|
LIBFILES += $`(addprefix $(CTRMW_QRE_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES)$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), $(QRE_LIBRARIES)) \
|
||||||
|
|
||||||
INSTALL_SDK_TOOL = true
|
INSTALL_SDK_TOOL = true
|
||||||
|
|
||||||
ROM_SPEC_FILE = $(TARGET_NAME).rsf
|
ROM_SPEC_FILE = $(TARGET_NAME).rsf
|
||||||
|
|||||||
@ -44,25 +44,6 @@ bool s_ReadFriendCode;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 SetTextWriterCore()
|
void SetTextWriterCore()
|
||||||
{
|
{
|
||||||
GetTextWriter()->SetTextColor(nn::util::Color8(255, 255, 255, 255));
|
GetTextWriter()->SetTextColor(nn::util::Color8(255, 255, 255, 255));
|
||||||
@ -142,22 +123,22 @@ void DrawSystemState
|
|||||||
|
|
||||||
|
|
||||||
// デフォルトで上画面に描画するもの
|
// デフォルトで上画面に描画するもの
|
||||||
renderSystem.SetRenderTarget(GetRenderTarget(NN_GX_DISPLAY0, flip));
|
renderSystem.SetRenderTarget(Util::GetRenderTarget(NN_GX_DISPLAY0, flip));
|
||||||
if (isProcessSucceeded)
|
if (isProcessSucceeded)
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(GetRenderTarget(NN_GX_DISPLAY0, flip), SUCCESS_COLOR);
|
renderSystem.SetClearColor(Util::GetRenderTarget(NN_GX_DISPLAY0, flip), SUCCESS_COLOR);
|
||||||
}
|
}
|
||||||
else if (isProcessWarning)
|
else if (isProcessWarning)
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(GetRenderTarget(NN_GX_DISPLAY0, flip), WARN_COLOR);
|
renderSystem.SetClearColor(Util::GetRenderTarget(NN_GX_DISPLAY0, flip), WARN_COLOR);
|
||||||
}
|
}
|
||||||
else if (isProcessFailed)
|
else if (isProcessFailed)
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(GetRenderTarget(NN_GX_DISPLAY0, flip), FAIL_COLOR);
|
renderSystem.SetClearColor(Util::GetRenderTarget(NN_GX_DISPLAY0, flip), FAIL_COLOR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
renderSystem.SetClearColor(GetRenderTarget(NN_GX_DISPLAY0, flip), NORMAL_COLOR);
|
renderSystem.SetClearColor(Util::GetRenderTarget(NN_GX_DISPLAY0, flip), NORMAL_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +150,7 @@ void DrawSystemState
|
|||||||
size_t fontheight = fontwidth + 2;
|
size_t fontheight = fontwidth + 2;
|
||||||
|
|
||||||
SetDrawTextHandler(SetTextWriterCore);
|
SetDrawTextHandler(SetTextWriterCore);
|
||||||
DrawResFont(GetRenderTarget(NN_GX_DISPLAY0, flip));
|
DrawResFont(Util::GetRenderTarget(NN_GX_DISPLAY0, flip));
|
||||||
|
|
||||||
renderSystem.SetFontSize(fontwidth);
|
renderSystem.SetFontSize(fontwidth);
|
||||||
|
|
||||||
|
|||||||
@ -45,11 +45,6 @@
|
|||||||
namespace common
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
// 現在の描画先ディスプレイを返す
|
|
||||||
// target NN_GX_DISPLAY0 または NN_GX_DISPLAY1
|
|
||||||
// flip 上下画面を入れ替えているかどうか
|
|
||||||
u32 GetRenderTarget(u32 target, bool flip = false);
|
|
||||||
|
|
||||||
// システム状態を描画する
|
// システム状態を描画する
|
||||||
// InitializeResFont()、demo::RenderSystemDrawing.Initializeが呼び出されている必要がある
|
// InitializeResFont()、demo::RenderSystemDrawing.Initializeが呼び出されている必要がある
|
||||||
void DrawSystemState
|
void DrawSystemState
|
||||||
|
|||||||
213
trunk/ConsoleDataMigration/sources/common/QrImage.cpp
Normal file
213
trunk/ConsoleDataMigration/sources/common/QrImage.cpp
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: QrImage.cpp
|
||||||
|
|
||||||
|
Copyright 2009-2011 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 "QrImage.h"
|
||||||
|
#include "HeapManager.h"
|
||||||
|
#include "Util.h"
|
||||||
|
|
||||||
|
#include <qre.h>
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
QrImage::QrImage()
|
||||||
|
{
|
||||||
|
// TODO 自動生成されたコンストラクター・スタブ
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QrImage::~QrImage()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrImage::Draw(demo::RenderSystemDrawing& renderSystem, bit64 deviceId, bool flip)
|
||||||
|
{
|
||||||
|
using namespace mw::qre;
|
||||||
|
|
||||||
|
char deviceIdStr[32];
|
||||||
|
|
||||||
|
QREncoder *encoder = new QREncoder;
|
||||||
|
nn::nstd::TSNPrintf(deviceIdStr, sizeof(deviceIdStr), "%llu", deviceId);
|
||||||
|
|
||||||
|
u32 dataSize = std::strlen(deviceIdStr);
|
||||||
|
u32 requiredMemorySize = QREncoder::GetEncodeBufferSize(dataSize, 3, 1);
|
||||||
|
common::HeapManager heap(requiredMemorySize);
|
||||||
|
if(!heap.GetAddr())
|
||||||
|
{
|
||||||
|
NN_LOG("not enough memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
encoder->InitMemory(heap.GetAddr(), requiredMemorySize);
|
||||||
|
|
||||||
|
/* 作成するQRコードの情報を設定 */
|
||||||
|
EncodeData info;
|
||||||
|
/* バージョンは15とする */
|
||||||
|
info.version = 12;
|
||||||
|
/* 誤り訂正レベルH */
|
||||||
|
info.ecc_level = ECC_LEVEL_H;
|
||||||
|
/* コンテンツ文字列の情報 */
|
||||||
|
info.size = dataSize;
|
||||||
|
info.data = reinterpret_cast<u8*>(deviceIdStr);
|
||||||
|
/*
|
||||||
|
* コンテンツサイズに合わせて分割、
|
||||||
|
* このサンプルでは分割するほど大きなデータを入力することは想定していない
|
||||||
|
*/
|
||||||
|
info.total = 0;
|
||||||
|
/* セルのサイズ設定 */
|
||||||
|
info.cell_size = 3;
|
||||||
|
|
||||||
|
/* エンコード実行 */
|
||||||
|
if (!encoder->Encode(&info))
|
||||||
|
{
|
||||||
|
/* エンコードに失敗 */
|
||||||
|
NN_LOG("QR encode failed...\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int qr_size = encoder->GetQRSize(0, false);
|
||||||
|
ImageInfo QRImage;
|
||||||
|
QRImage.rgb888Data = reinterpret_cast<u8*>(common::ForceAllocate(qr_size));
|
||||||
|
if (!QRImage.rgb888Data) {
|
||||||
|
NN_LOG("Memory allocation failed...\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!encoder->GetQRData(&QRImage, 0))
|
||||||
|
{
|
||||||
|
NN_LOG("Get QRData Failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delete encoder;
|
||||||
|
|
||||||
|
renderSystem.SetRenderTarget(Util::GetRenderTarget(NN_GX_DISPLAY0, flip));
|
||||||
|
renderSystem.Clear();
|
||||||
|
DrawImage(renderSystem, QRImage.rgb888Data, QRImage.width, QRImage.height, flip);
|
||||||
|
common::ForceFree(QRImage.rgb888Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrImage::DrawImage(demo::RenderSystemDrawing& renderSystem, u8* textureDataPtr, u32 width, u32 height, bool flip)
|
||||||
|
{
|
||||||
|
static GLuint textureId = 0;
|
||||||
|
if (textureId != 0)
|
||||||
|
{
|
||||||
|
renderSystem.DeleteTexture(textureId);
|
||||||
|
}
|
||||||
|
GLenum target = GL_TEXTURE_2D;
|
||||||
|
GLenum internalFormat = GL_RGB_NATIVE_DMP;
|
||||||
|
GLenum format = GL_RGB_NATIVE_DMP;
|
||||||
|
GLenum type = GL_UNSIGNED_BYTE;
|
||||||
|
u32 textureWidth = width;
|
||||||
|
u32 textureHeight = height;
|
||||||
|
u8* textureDataBuffer = GetTextureDataFromRawData(width, height,
|
||||||
|
textureDataPtr,
|
||||||
|
textureWidth,
|
||||||
|
textureHeight);
|
||||||
|
renderSystem.GenerateTexture(target, internalFormat, textureWidth, textureHeight,
|
||||||
|
format, type, textureDataBuffer, textureId);
|
||||||
|
common::ForceFree(textureDataBuffer);
|
||||||
|
|
||||||
|
f32 windowPositionX = 0.0f;
|
||||||
|
f32 windowPositionY = 0.0f;
|
||||||
|
if (!flip)
|
||||||
|
{
|
||||||
|
windowPositionX = (nn::gx::DISPLAY0_HEIGHT / 2) - (width / 2);
|
||||||
|
if (height < nn::gx::DISPLAY0_WIDTH)
|
||||||
|
{
|
||||||
|
windowPositionY = (nn::gx::DISPLAY0_WIDTH / 2) - (height / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
windowPositionX = (nn::gx::DISPLAY1_HEIGHT / 2) - (width / 2);
|
||||||
|
if (height < nn::gx::DISPLAY1_WIDTH)
|
||||||
|
{
|
||||||
|
windowPositionY = (nn::gx::DISPLAY1_WIDTH / 2) - (height / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f32 rectangleWidth = static_cast<f32>(width);
|
||||||
|
f32 rectangleHeight = static_cast<f32>(height);
|
||||||
|
renderSystem.FillTexturedRectangle(textureId,
|
||||||
|
windowPositionX, windowPositionY,
|
||||||
|
rectangleWidth, rectangleHeight,
|
||||||
|
static_cast<f32>(width),
|
||||||
|
static_cast<f32>(height),
|
||||||
|
static_cast<f32>(textureWidth),
|
||||||
|
static_cast<f32>(textureHeight));
|
||||||
|
}
|
||||||
|
|
||||||
|
u8* QrImage::GetTextureDataFromRawData(const u32& width,
|
||||||
|
const u32& height,
|
||||||
|
u8* rawDataBuffer,
|
||||||
|
u32& textureWidth,
|
||||||
|
u32& textureHeight)
|
||||||
|
{
|
||||||
|
textureWidth = GetTextureLength(width);
|
||||||
|
textureHeight = GetTextureLength(height);
|
||||||
|
u32 textureSize = textureWidth * textureHeight * 3;
|
||||||
|
u8* textureGLDataBuffer = reinterpret_cast<u8*>(common::ForceAllocate(textureSize));
|
||||||
|
u8* dstPtr = textureGLDataBuffer;
|
||||||
|
|
||||||
|
u32 y = 0;
|
||||||
|
for (; y < height; y++) {
|
||||||
|
// FLIP対応
|
||||||
|
// ConvertGLTextureToNative()にてFLIPしている。
|
||||||
|
u8* srcPtr = rawDataBuffer + width * (height - y - 1) * 3;
|
||||||
|
u32 x = 0;
|
||||||
|
for (; x < width; x++) {
|
||||||
|
dstPtr[0] = srcPtr[2];
|
||||||
|
dstPtr[1] = srcPtr[1];
|
||||||
|
dstPtr[2] = srcPtr[0];
|
||||||
|
dstPtr += 3;
|
||||||
|
srcPtr += 3;
|
||||||
|
}
|
||||||
|
for (; x < textureWidth; x++) {
|
||||||
|
dstPtr[0] = dstPtr[1] = dstPtr[2] = 0x00;
|
||||||
|
dstPtr += 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (; y < textureHeight; y++) {
|
||||||
|
for (u32 x = 0; x < textureWidth; x++) {
|
||||||
|
dstPtr[0] = dstPtr[1] = dstPtr[2] = 0x00;
|
||||||
|
dstPtr += 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8* textureDataBuffer = reinterpret_cast<u8*>(common::ForceAllocate(textureSize));
|
||||||
|
GLenum format = GL_RGB_NATIVE_DMP;
|
||||||
|
bool result = demo::ConvertGLTextureToNative(format, textureWidth, textureHeight,
|
||||||
|
textureGLDataBuffer, textureDataBuffer);
|
||||||
|
if (!result) {
|
||||||
|
NN_LOG(" Convert to GL_RGB_NATIVE_DMP failed.\n");
|
||||||
|
NN_ASSERT(0);
|
||||||
|
}
|
||||||
|
common::ForceFree(textureGLDataBuffer);
|
||||||
|
|
||||||
|
return textureDataBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 QrImage::GetTextureLength(const u32& imageLength)
|
||||||
|
{
|
||||||
|
u32 textureLength = 8;
|
||||||
|
// 8, 16, 32, 64, 128, 256, 512, 1024
|
||||||
|
for (u32 i = 0; i < 7; i++) {
|
||||||
|
if (imageLength < textureLength)
|
||||||
|
return textureLength;
|
||||||
|
|
||||||
|
textureLength *= 2;
|
||||||
|
}
|
||||||
|
return 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace common */
|
||||||
45
trunk/ConsoleDataMigration/sources/common/QrImage.h
Normal file
45
trunk/ConsoleDataMigration/sources/common/QrImage.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: QrImage.h
|
||||||
|
|
||||||
|
Copyright 2009-2011 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 QRIMAGE_H_
|
||||||
|
#define QRIMAGE_H_
|
||||||
|
|
||||||
|
#include <nn.h>
|
||||||
|
#include "demo.h"
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
class QrImage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QrImage();
|
||||||
|
virtual ~QrImage();
|
||||||
|
|
||||||
|
static void Draw(demo::RenderSystemDrawing& renderSystem, bit64 deviceId, bool flip);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void DrawImage(demo::RenderSystemDrawing& renderSystem, u8* textureDataPtr, u32 width, u32 height, bool flip);
|
||||||
|
static u8* GetTextureDataFromRawData(const u32& width,
|
||||||
|
const u32& height,
|
||||||
|
u8* rawDataBuffer,
|
||||||
|
u32& textureWidth,
|
||||||
|
u32& textureHeight);
|
||||||
|
static u32 GetTextureLength(const u32& imageLength);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace common */
|
||||||
|
#endif /* QRIMAGE_H_ */
|
||||||
@ -386,6 +386,25 @@ void Util::SplitDeviceidWithSpace(std::string& deviceIdStr)
|
|||||||
}while( i < tmp.size());
|
}while( i < tmp.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 Util::GetRenderTarget(u32 target, bool flip)
|
||||||
|
{
|
||||||
|
if(flip)
|
||||||
|
{
|
||||||
|
if(target == NN_GX_DISPLAY0)
|
||||||
|
{
|
||||||
|
return NN_GX_DISPLAY1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return NN_GX_DISPLAY0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nn::Result PrintNetworkSetting()
|
nn::Result PrintNetworkSetting()
|
||||||
{
|
{
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
|
|||||||
@ -114,6 +114,11 @@ public:
|
|||||||
// デバイスIDを4文字ごとに空白で区切る
|
// デバイスIDを4文字ごとに空白で区切る
|
||||||
static void SplitDeviceidWithSpace(std::string& deviceIdStr);
|
static void SplitDeviceidWithSpace(std::string& deviceIdStr);
|
||||||
|
|
||||||
|
// 現在の描画先ディスプレイを返す
|
||||||
|
// target NN_GX_DISPLAY0 または NN_GX_DISPLAY1
|
||||||
|
// flip 上下画面を入れ替えているかどうか
|
||||||
|
static u32 GetRenderTarget(u32 target, bool flip = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Initialize();
|
void Initialize();
|
||||||
void Finalize();
|
void Finalize();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user